diff --git a/gcc/ChangeLog.11 b/gcc/ChangeLog.11
deleted file mode 100644
index 29483ba..0000000
--- a/gcc/ChangeLog.11
+++ /dev/null
@@ -1,10652 +0,0 @@
-Sat Aug  2 18:50:43 1997  Paul Eggert  <eggert@twinsun.com>
-
-	* tree.c (int_fits_type_p): Negative ints never fit unsigned
-	types, and unsigned ints with top-bit-set never fit signed types.
-
-Sat Aug  2 16:25:43 1997  Per Bothner  <bothner@frobnitz.gnu.ai.mit.edu>
-
-	* Makefile.in (EXTRA_C_OBJS): Removed.
-	(C_AND_OBJC_OBJS):  New.  Subsumes EXTRA_C_OBJS and OBJC_CCOMMON.
-	* objc/Make-lang.in (OBJC_CCOMMON):  Removed.
-
-Sat Aug  2 16:11:57 1997  Doug Evans  <dje@cygnus.com>
-
-	* configure.in: Build .gdbinit for top level build dir here.
-	(AC_OUTPUT): Pass oldstyle_subdirs to configure.lang.
-	* configure.lang: Fix building of .gdbinit for oldstyle lang subdirs.
-
-Sat Aug  2 13:48:15 1997  Ken Raeburn  <raeburn@cygnus.com>
-
-	* cse.c (cse_insn): Ignore paradoxical SUBREGs unless we are
-	looking for such.
-
-Sat Aug  2 13:25:33 1997  Tristan Gingold  (gingold@email.enst.fr)
-
-	* calls.c (expand_call): If -fcheck-memory-usage, use pseudo-register,
-	check indirectly called function is executable, and set rights of
-	memory for aggregate as write only.
-	(store_one_arg): If -fcheck-memory-usage, set rights for pushed
-	stack argument.
-	* c-decl.c (init_decl_processing): Add
-	__builtin_aggregate_incoming_address.
-	* explow.c (expr_size): Call expand_expr with appropriate flag.
-	* expr.c (expand_builtin, case BUILT_IN_AGGREGATE_INCOMING_ADDRESS):
-	New case.
-	(expand_assignment, expand_expr, emit_push_insn, store_expr):
-	Insert calls to chkr_check_addr, chkr_set_right, and chkr_copy_bitmap
-	when -fcheck-memory-usage.
-	(get_push_address, get_memory_usage_from_modifier): New functions.
-	* expr.h: Add expand_modifier flags.
-	(chkr_*_libfunc): New decls.
-	(memory_use_mode): New declaration.
-	* flags.h (flag_check_memory_usage, flag_prefix_function_name): New
-	declaration.
-	* function.c (put_var_into_stack, assign_parms): If
-	-fcheck-memory-usage, set the rights of pushed variable.
-	* optabs.c (chkr_{check_addr,set_right}_libfunc): New definitions.
-	(chkr_{copy_bitmap,check_exec}_libfunc): Likewise.
-	(init_optabs): Initialize these chkr_*_libfunc.
-	* stmt.c (expand_computed_goto): If -fcheck-memory-usage, check that
-	computed address of a goto is executable.
-	(expand_asm, expand_asm_operands): If -fcheck-memory-usage,
-	disallow asm statments.
-	* toplev.c (flag_check_memory_usage, flag_prefix_function_name): New
-	variable.
-	(f_options): Add `check-memory-usage' and `prefix_function_name'.
-	(main): Disable `-fomit-frame-pointer' if `-fcheck-memory-usage' is set
-	and the machine can't debug without the frame pointer.
-	* tree.h (built_in_function): Add BUILT_IN_AGGREGATE_INCOMING_ADDRESS.
-	* varasm.c (make_function_rtl, make_decl_rtl): Add a prefix when
-	flag_prefix_function_name_usage is set.
-	(assemble_name): Strip the CHKR_PREFIX.
-	* alpha.c (alpha_builtin_saveregs): If -fcheck-memory-usage,
-	set rights of saved registers.
-	* clipper.c (clipper_builtin_saveregs): Likewise.
-	* m88k.c (m88k_builtin_saveregs): Likewise.
-	* pa.c (hppa_builtin_saveregs): Likewise.
-	* sparc.c (sparc_builtin_saveregs): Likewise.
-
-Sat Aug  2 08:01:12 1997  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
-
-	* c-decl.c (grokdeclarator): Give error for `long double' and
-	refine text of some error messages.
-
-	* alpha.h (FLOAT_VALUE_TYPE, INTIFY, FLOATIFY, FLOAT_ARG_TYPE): Define.
-	* i860.h (FLOAT_VALUE_TYPE): Fix typo; was FLOAT_TYPE_VALLUE.
-
-	* calls.c (store_one_arg): Allow stack_slot to be SP in
-	ARGS_GROW_DOWNWARD case.
-
-	* c-decl.c (parmlist_tags_warning): Only suppress warning on
-	union if anonymous.
-
-	* libgcc2.c (_trampoline): Rework last change; both getpagesize
- 	and mprotect are in cygwin32.
-
-	* reload1.c (reload): Add IN_ADDR to IN_ADDR_ADDR when computing
-	needs since they conflict.
-
-	* print-rtl.c (indent): Move to file level; was static in print_rtx.
-	(print_inline_rtx): New function.
-	* reload.c (debug_reload): Rework to make output more compact.
-
-	* dwarfout.c (output_compile_unit_die): Add support for Pascal.
-	* dwarf2out.c (gen_compile_unit_die): Likewise.
-
-	* c-typeck.c (lvalue_p, case BIND_EXPR, RTL_EXPR): Return 1 if array.
-
-	* Makefile.in (OBJC_OBJC): Delete from here.
-
-	* varasm.c (compare_constant_1, case STRING_CST): Compare TYPE_MODE.
-	(record_constant_1, case STRING_CST): Record TYPE_MODE.
-
-	* tree.c (contains_this_placeholder_p): Delete.
-	(contains_placeholder_p): Now contains code from above function.
-	(contains_placeholder_p, case 'r'): Don't look at offset info.
-	* expr.c (expand_expr, case PLACEHOLDER_EXPR): Find innermost
-	matching and don't check contains_placeholder_p.
-
-Fri Aug  1 17:15:07 1997  Per Bothner  <bothner@cygnus.com>
-
-	* objc/objc-act.c (lang_init):  Don't check_newline #if USE_CPPLIB.
-	* c-lex.c (lang_init):  Remove (recently moved here).
-	* c-lang.c (lang_init):  Restore, but add #if !USE_CPPLIB.
-
-Fri Aug  1 11:26:45 1997  Jeffrey A Law  (law@cygnus.com)
-
-	* pa.c (pa_reorg): Explode ADDR_DIFF_VEC insns too.
-
-Thu Jul 31 19:37:22 1997  Ian Lance Taylor  <ian@cygnus.com>
-
-	* libgcc2.c (getpagesize): Don't compile if __CYGWIN32__.
-
-Thu Jul 31 16:04:42 1997  Stan Cox  <coxs@dg-rtp.dg.com>
-
-	* i386.c (output_to_reg, output_fix_trunc): Use scratch memory,
-	if available, instead of dynamically extending the stack.
-	(put_condition_code, print_operand): Added reverse_cc to reverse the
-	comparison when $ah is accessed directly instead of using eflags
-
-	* i386.md (*trunc*): Use scratch memory for output_fix_trunc.
-	(movsicc_1, movhicc_1) Change alternative 3 to: 
-	jCC L1; mov; jmp L2; L1:mov; L2:
-	(movsfcc, movdfcc, movxfcc): Force constant operands to memory.
-	(movsfcc_1, movdfcc_1, movxfcc_1): Change alternative 3 as above.
-
-Thu Jul 31 16:04:42 1997  Jason Merrill  <jason@yorick.cygnus.com>
-
-	* i386.h (MAX_FIXED_MODE_SIZE): Define.
-
-Thu Jul 31 16:04:42 1997   Robert Lipe <robertl@dgii.com>
-	
-	* i386/sco5.h (SWITCHES_NEED_SPACES) Define.
-	Required by the COFF (but not ELF) linker.
-
-Wed Jul 30 15:03:52 1997  Per Bothner  <bothner@cygnus.com>
-
-	* demangle.h (DMGL_JAVA):  New option to request Java demangling.
-	* cplus-dem.c:  Various changes to produce Java output when passed
-	DMGL_JAVA.  Thus "::" becomes "." and "JArray<Foo>" becomes "Foo[]".
-	(main):  Support --java and -j flags to set DMGL_JAVA.
-
-Wed Jul 30 08:56:08 1997  Philip Blundell  <Philip.Blundell@pobox.com>
-
-	* configure.in (arm-*-*): Replace with arm-*-aout.
-	* arm/aout.h (SET_ASM_OP): Define by default.
-	* arm/riscix.h (SET_ASM_OP: Undefine.
-	* arm.h (CPP_SPEC): Add %(subtarget_cpp_spec).
-	(SUBTARGET_CPP_SPEC): New macro.
-	* arm/linux.h: Include aout.h rather than arm.h directly.
-	(TARGET_CPU_DEFAULT): Define.
-	({ASM,CPP}_SPEC): Remove.
-	* arm/t-linux (MULTILIB_OPTIONS): Use -mapcs-NN instead of -mN.
-	(LIB1ASMSRC): Use generic ARM version.
-	(CROSS_LIBGCC1): Define.
-	* arm/lib1funcs-linux.asm: Remove.
-
-Tue Jul 29 17:57:47 1997  Per Bothner  <bothner@cygnus.com>
-
-	* Add hooks for using autconf-style Makefile.in in language subdirs.
-	* configure.in (all_outputs, oldstyle_subdirs):  New variables.
-	Pass all_outputs to AC_OUTPUT.
-	* configure.lang:  Only iterate over oldstyle_subdirs.
-
-	* Patches to use cpplib with cc1 #if USE_CPPLIB.
-	* configure.in (--enable-c-cpplib):  New option.
-	(extra_c_flags, extra_c_objs):  New variables.
-	* Makefile.in (EXTRA_C_OBJS):  New variable.
-	(INTERNAL_CFLAGS):  Add @extra_c_flags@.
-	(C_OBJS):  Add $(EXTRA_C_OBJS).
-	* c-lex.c (generally):  Replace getc and ungetc by macros GETC and
-	UNGETC.  Avoid explicit references to finput.
-	(yy_get_token):  New function, that calls cpp_get_token.
-	(init_parse):  New function - calls init_lex.
-	(finish_parse):  New function (called by compile_file).
-	(GET_DIRECTIVE_LINE):  New macro wrapper replaces get_directive_line.
-	(lang_init):  Don't check_newline - already know main_input_filename.
-	(handle_sysv_pragma):  Remove FILE* parameter.
-	* toplev.c (finput):  Remove #if USE_CPPLIB.
-	(compile_file):  #if USE_CPPLIB don't open input file here,
-	do it in cpp_start_read.  Call init_parse instead of init_lex.
-	At end, call finish_parse instead of fclose(finput).
-
-Mon Jul 28 15:48:29 1997  Brendan Kehoe  <brendan@cygnus.com>
-
-	* integrate.c (expand_inline_function): Use xmalloc instead of
-	alloca for the LABEL_MAP.
-	(save_for_inline_copying): Likewise.
-
-Mon Jul 28 11:22:16 1997  Jason Merrill  <jason@yorick.cygnus.com>
-
-	* toplev.c (compile_file): Also emit any deferred TREE_PUBLIC inlines.
-	(rest_of_compilation): Use decl_printable_name instead of DECL_NAME
-	to identify functions in the RTL dump files.
-
-	* dwarf2out.c (add_location_or_const_value_attribute): 
- 	leaf_renumber_regs_insn.  Also eliminate_regs here.
-	(add_AT_location_description): Not here.  Don't emit anything 
-	for a variable that has been optimized away.
-	(add_const_value_attribute): Likewise.
-
-	* dwarfout.c (location_or_const_value_attribute):
- 	leaf_renumber_regs_insn.  Also eliminate_regs here.
-	(location_attribute): Not here.
-
-	* stor-layout.c (layout_type): Fix ancient code to match ancient
-	comment.  Use mode of field for one-field structs.
-
-Sun Jul 27 12:09:02 1997  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
-
-	* function.c (put_var_into_stack, trampoline_address): Treat
-	inline_function_decl like current_function_decl.
-	* expr.c (expand_expr, case LABEL_DECL): Likewise.
-	(expand_expr, case SAVE_EXPR): Handle top-level SAVE_EXPR by
-	moving into current function; abort if in incorrect context.
-	* fold-const.c (fold_range_test, fold): Avoid making SAVE_EXPR
-	if at top level.
-
-	* dwarfout.c (ASM_OUTPUT_SOURCE_FILENAME): Delete default value.
-
-	* alpha.h (TARGET_SWITCHES): Add -mno-byte.
-
-	* expr.c (get_inner_unaligned_p): Deleted.
-	(expand_assignment): Remove special-case of constant array.
-	(expand_expr, case ARRAY_REF): Likewise, and clean up remaining code.
-
-	* explow.c (probe_stack_range): Do probing with loop if more
-	than a small number.
-
-Fri Jul 25 15:42:34 1997  H.J. Lu  (hjl@gnu.ai.mit.edu)
-
-	* configure.in: Finish fixing calculation if default thread
-	support is enabled.
-
-Fri Jul 25 15:30:09 1997  Doug Evans  <dje@cygnus.com>
-
-	* Makefile.in (native): Depend on config.h.
-	(gcc.o): Depend on Makefile, not config.status.
-
-Fri Jul 25 10:56:50 1997  Jeffrey A Law  (law@cygnus.com)
-
-	* pa.c (pa_reorg): If TARGET_BIG_SWITCH, then do not explode
-	ADDR_VEC insns.  Slightly rework code which explodes ADDR_VEC
-	insns.
-	* pa.h (TARGET_BIG_SWITCH): Define.
-	(TARGET_SWITCHES): Add "big-switch" and "no-big-switch".
-	(CASE_VECTOR_MODE): Use TI or DI depending on TARGET_BIG_SWITCH.
-	(CASE_DROPS_THROUGH): Remove definition.
-	(ASM_OUTPUT_ADDR_VEC_ELT): Rewrite to handle TARGET_BIG_SWITCH.
-	(ASM_OUTPUT_ADDR_DIFF_ELT): Likewise.
-	* pa.md (casesi): Rework to avoid some potential long branch
-	problems (also makes generated code faster!).  Handle
-	TARGET_BIG_SWITCH.
-	(casesi0): Corresponding changes.
-
-Fri Jul 25 08:36:47 1997  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
-
-	* calls.c: (expand_call): If -fstack-check and temp needed
-	for arg is too large, use alloca.
-	* expr.c (expand_expr, case MODIFY_EXPR): Don't preexpand calls
-	if LHS is an indirect via a constant pointer.
-
-Thu Jul 24 21:49:11 1997  Pat Rankin  <rankin@eql.caltech.edu>
-
-	* bitmap.c (bitmap_operation): Reset CURRENT on deferred deletion.
-
-Wed Jul 23 23:52:14 1997  Chris Smith  <csmith@convex.hp.com>
-
-	* convex.h (CHECK_FLOAT_VALUE): Fix OVERFLOW capitalization.
-
-Wed Jul 23 13:00:47 1997  Richard Earnshaw <rearnsha@cambridge.arm.com>
-
-	* configure.in (arm-*-netbsd*): Fix typo setting tmake_file.
-
-Wed Jul 23 06:39:35 1997  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
-
-	* configure.in (alpha*): Put quotes around MASK_GAS.
-
-Tue Jul 22 15:24:45 1997  Brendan Kehoe  <brendan@cygnus.com>
-
-	* tree.c (array_type_nelts): Make sure the domain of TYPE is set
-	before we try to use it.
-
-Tue Jul 22 12:26:13 1997  Doug Evans  <dje@cygnus.com>
-
-	* sparc.c (gen_v9_scc): Handle early clobber of result.
-	* sparc.md (seqdi_special): Don't clobber %xcc.
-	(snedi_special, seqdi_special_trunc, snedi_special_trunc): Likewise.
-	(snedi_zero, neg_snedi_zero, seqdi_zero, neg_seqdi_zero): Likewise.
- 	(snedi_zero_trunc, seqdi_zero_trunc): Likewise. Renamed from ..._sp64.
-	(snedi_zero_trunc_sp32, seqdi_zero_trunc_sp32): Delete.
-
-	* Makefile.in (Makefile): Pass xmake_file, tmake_file to
-	configure.frag
-	(distclean): Delete Make-host, Make-target.
-	* configure.in (host_overrides): Set to Make-host.
-	(dep_host_xmakefile): Loop over all elements in host_make_file.
-	(target_overrides): Set to Make-target.
-	(dep_tmake_file):  Loop over all elements in tmake_file.
-	(configure.frag): Pass dep_host_xmake_file, dep_tmake_file.
-	* configure.frag: New arguments xmake_files, tmake_files.
-	Build Make-host, Make-target.
-
-Mon Jul 21 23:17:44 1997  Paul Eggert  <eggert@twinsun.com>	
-
-	* objc/Make-lang.in, objc/Makefile.in: Comment out lines containing
-	just formfeeds.
-
-Mon Jul 21 14:05:46 1997  Doug Evans  <dje@cygnus.com>
-
-	* Makefile.in (Makefile): Depend on config.status instead
-	of configure.
-	(config.status): Depend on configure.  Run config.status --recheck
-	if out of date.
-	(cstamp-h.in): Use echo instead of touch.
-
-	* reload1.c (reload_cse_mem_conflict_p): Restore handling of
-	(mem:BLK const0_rtx) meaning all memory is clobbered.
-
-Mon Jul 21 06:20:10 1997  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>
-
-	* m68k.md (iorsi_zexthi_ashl16): Mark output operand as earlyclobber.
-
-Sun Jul 20 06:11:30 1997  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
-
-	* configure.in (alpha*-*-*): Set cpu_type to alpha.
-	Change "alpha-" to "alpha*-" in all entries.
-	Set target_cpu_default for ev5 and ev56 systems.
-	Use symbolic names for target_cpu_default.
-	* alpha.c (override_options): Set default for alpha_cpu
-	from TARGET_CPU_DEFAULT.
-	* alpha.h (MASK_CPU_EV5): New macro.
-
-	* tree.c (contains_placeholder_p): Call contains_this_placeholder_p.
-	(contains_this_placeholder_p): Renamed from contains_placeholder_p.
-	Added new arg, PL.
-	Rework to make more consistent, check more codes, and avoid
-	undefined fields.
-	* expr.c (expand_expr, case PLACEHOLDER_EXPR): Pick outermost
-	object in placeholder_list of right type without a PLACEHOLDER_EXPR.
-
-Sat Jul 19 18:00:01 1997  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
-
-	* alpha.c (override_options): Allow processor of ev56 or 21164a.
-	(input_operand, case MEM): Correct test involving TARGET_BYTE_OPS.
-	* alpha.h (SECONDARY_{IN,OUT}PUT_RELOAD_CLASS): Don't need for
-	QImode or HImode if TARGET_BYTE_OPS.
-	(ASM_FILE_START): Write a .arch directive.
-	(STACK_CHECK_BUILTIN): New macro.
-	* alpha.md ({zero_,}extend[qh]i[dsh]i2): Rework TARGET_BYTE_OPS cases.
-	(mov[hq]i): Likewise.
-	(extend[qh]i[hsd]i2x): Add missing cases and fix typo in constraint.
-	(reload_{in,out}[qh]i): Disable for TARGET_BYTE_OPS.
-
-Fri Jul 18 23:24:57 1997  Jason Merrill  <jason@yorick.cygnus.com>
-
-	* varasm.c (make_decl_rtl): Don't use ASM_FORMAT_PRIVATE_NAME for
-	local decls with TREE_PUBLIC set.
-	(bc_make_decl_rtl): Likewise.
-
-Fri Jul 18 22:16:28 1997  Doug Evans  <dje@cygnus.com>
-
-	* configure.in: Invoke AC_CONFIG_HEADER.
-	Check for string.h, strings.h, stdlib.h, time.h, unistd.h.
-	Check for whether malloc/realloc/free need to be declared.
-	(links): Rename config.h to config2.h.
-	(AC_OUTPUT): Create cstamp-h.
-	* Makefile.in (config.in,cstamp-h.in): Add rules for.
-	(config.h,cstamp-h): Add rules for.
-	(distclean): Delete config2.h, cstamp-h.
-	(ALL_CFLAGS): Add @DEFS@.
-	* aclocal.m4, acconfig.h: New files.
-
-	* Makefile.in (distclean): Delete Make-host, Make-target.
-	* configure.in (host_overrides): Set to host_xmake_file, don't create
-	Make-host.
-	(target_overrides): Set to tmake_file, don't create Make-target.
-	(language subdir support): Keep together.
-
-	* c-decl.c (duplicate_decls): Set DECL_ABSTRACT_ORIGIN to olddecl
-	if inline function and not new definition.
-
-	* configure.in: Don't loop trying to configure language subdirs.
-	Don't pass to configure.lang variables it doesn't use.
-	* configure.lang: Delete top level directory from loop.
-	Delete code not useful for language subdirs.
-
-Fri Jul 18 08:12:53 1997  Bernd Schmidt  <crux@Pool.Informatik.RWTH-Aachen.DE>
-
-	* toplev.c (rest_of_compilation): Call reload_cse_regs here.
-	* reload1.c (reload): Don't call it here.
-	(reload_cse_mem_conflict_p): Remove MEM_OFFSET and MEM_MODE args.
-	(reload_cse_mem_conflict_p, case MEM): Call anti_dependence.
-	(reload_cse_invalidate_mem): Update call to reload_cse_mem_conflict_p.
-	(reload_cse_regs): No longer static.
-	Call init_alias_analysis.
-	Ignore CLOBBER in a PARALLEL.
-
-Fri Jul 18 06:44:22 1997  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>
-
-	* objc/Make-lang.in (objc-headers): Fix command for the new build
-	directory layout, don't pass srcdir variable.
-	* objc/Makefile.in (copy-headers): Use $(srcdir) from this
-	makefile, not the parent's.
-
-Thu Jul 17 16:03:03 1997  Doug Evans  <dje@cygnus.com>
-
-	* configure.lang (EXTRA_HEADERS,EXTRA_PASSES,EXTRA_PARTS): Delete.
-	(EXTRA_PROGRAMS,EXTRA_OBJS,EXTRA_GCC_OBJS,MD_DEPS): Delete.
-	(version) Delete duplicate entry.
-	* configure.in (merged_frags): Delete unused variable.
-	(extra_headers_list): Move setting outside of subdir loop.
-	(extra_headers,extra_passes): Don't pass to configure.lang.
-	(extra_programs,extra_parts,extra_objs): Likewise.
-	(host_extra_gcc_objs,gxx_include_dir,md_cppflags): Likewise.
-
-Thu Jul 17 07:00:43 1997  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
-
-	* expr.h (STACK_CHECK_*): Provide default values.
-	(probe_stack_range): New declaration.
-	* flags.h (flag_stack_check): Likewise.
-	* explow.c (allocate_dynamic_stack_space): Call probe_stack_range.
-	(emit_stack_probe, probe_stack_range): New functions.
-	* function.c (expand_function_end): If function is non-leaf and stack 
-	checking is requested, emit needed probes.
-	* reload1.c (reload): If checking stack, verify frame small enough.
-	* stmt.c (expand_decl): If stack checking, use alloca for large vars.
-	* toplev.c (flag_stack_check): New variable.
-	(f_options): Add "stack-check".
-
-	* reorg.c (mark_target_live_regs): Pass FIRST_PSEUDO_REGISTER to
-	call to EXECUTE_IF_SET_IN_REG_SET.
-
-Wed Jul 16 14:51:00 1997  Jason Merrill  <jason@yorick.cygnus.com>
-
-	* i960.h (ASM_OUTPUT_ALIGNED_BSS): Define.
-	(ASM_OUTPUT_ALIGNED_LOCAL): Use standard method to convert ALIGN
-	to power-of-two of bytes.
-
-	* sparc.h (ASM_OUTPUT_ALIGNED_BSS): Define.
-	* sparc/sysv4.h (ASM_OUTPUT_ALIGNED_BSS): Undef before definition.
-
-Wed Jul 16 14:34:09 1997  Klaus Espenlaub  (kespenla@hydra.informatik.uni-ulm.de)
-
-	* calls.c (emit_library_call_value): Initialize all argvec elements.
-
-Wed Jul 16 14:31:39 1997  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
-
-	* global.c (global_conflicts): Pass FIRST_PSEUDO_REGISTER to
-	call to EXECUTE_IF_SET_IN_REG_SET.
-
-Wed Jul 16 10:57:03 1997  Richard Earnshaw (rearnsha@cambridge.arm.com)
-
-	* From Rob Black (r.black@ic.ac.uk) and Mark Brinicombe
-	(amb@physig.ph.kcl.ac.uk):
-	* configure.in (arm-*-netbsd*): New configuration.
-	* arm/netbsd.h, arm/t-netbsd, arm/xm-netbsd.h: New files.
-	
-Wed Jul 16 10:57:03 1997  Richard Earnshaw (rearnsha@cambridge.arm.com)
-
-	* arm.c (tune_flags): New variable.
-	(target_{cpu,fpe}_name): Delete.
-	(arm_fpu_arch): New variable.
-	(arm_select): Also allow -march=... to configure just the 
-	architecture.
-	(all_procs): Allow armv{2,2a,3,3m,4,4t} for use with -march=.
-	(arm_override_options): Handle -march=, but don't let -mcpu=
-	and -mtune= match the architecture names, since we can only
-	tune for an implementation.  Rework selection of tuning options
-	for floating point.
-	(use_return_insn): Support interworking with Thumb code.
-	(arm_rtx_costs): Rework multiply costs so that cost is based on
-	the tune, not the architecture.
-	(f_register_operand): New function.
-	(output_return_instruction): Support interworking with Thumb code.
-	(output_func_epilogue): Support interworking with Thumb code.
-	Remove redundant calculation of code_size. Use floating-point
-	load-multiples if permitted.
-	(emit_sfm): New function.
-	(arm_expand_prologue): Use floating-point store-multiples if 
-	permitted.
-
-	* arm.h (CPP_CPU_ARCH_SPEC): Handle -march=...
-	(TARGET_OPTIONS): Add arch= and fp=.  Delete fpe=.
-	(enum processor_type): Add PROCESSOR_NONE, for use in all_procs table.
-	(FP_DEFAULT): Default floating point architecture for generic 
-	back-end.
-	(PREDICATE_CODES): Add f_register_operand.
-
-	* arm.md (*push_fp_multi): New pattern.
-
-
-Tue Jul 15 22:08:47 1997  Jim Wilson  <wilson@cygnus.com>
-
-	* Makefile.in (exeext): Set to build_exeext not exeext.
-	* configure.in (exeext): Delete redundant set and AC_SUBST call.
-	Change remaining AC_SUBST to use build_exeext instead of exeext.
-
-Tue Jul 15 15:48:25 1997  H.J. Lu  (hjl@gnu.ai.mit.edu)
-
-	* configure.in: Fix calculation if default thread support is enabled.
-
-Tue Jul 15 13:38:46 1997  Mike Meissner  <meissner@cygnus.com>
-
-	* rtl.h (replace_regs): Declare.
-
-Mon Jul 14 16:18:19 1997  Jason Merrill  <jason@yorick.cygnus.com>
-
-	* i960.h (ASM_OUTPUT_MI_THUNK): Define.
-
-	* dwarf2out.c (gen_subprogram_die): Remove unreachable and redundant
- 	code.
-
-Mon Jul 14 14:22:45 1997  Jeffrey A Law  (law@cygnus.com)
-
-	* calls.c (emit_library_call): Use right index into argvec array
-	when iterating over arguments which need to be pushed on the stack.
-	(emit_library_call_value): Likewise.
-
-Mon Jul 14 08:17:41 1997  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
-
-	* gcc.c (convert_filename): Fix typo.
-
-Mon Jul 14 08:10:12 1997  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>
-
-	* configure.in: Clear headers and lib2funcs before re-reading
-	config-lang.in.
-
-	* m68k/linux.h (LINK_SPEC): Fix last change.
-
-Mon Jul 14 08:03:38 1997  H.J. Lu  (hjl@gnu.ai.mit.edu)
-
-	* configure.in (sparc-*-linux-gnu{*,libc1*}): Add sparc/t-linux.
-	* sparc/t-linux: New file.
-
-	* alpha/elf.h (LINK_SPEC): Fix typo.
-	* configure.in (alpha-*-linux-gnu*): Set tmake_file.
-	* alpha/t-linux: New file.
-
-Mon Jul 14 07:41:37 1997  Philippe De Muyter  <phdm@info.ucl.ac.be>
-
-	* m68k.c (output_{and,ior,xor}si3): New functions from patterns bodies.
-	* m68k.h (output_{and,ior,xor}si3): New extern declarations.
-	* m68k.md (adddi3, subdi3): Allow constant operand.
-	(anddi3, iordi3, xordi3): New patterns.
-	({and,ior,xor}si3_internal): Use corresponding output_???si3 function.
-
-Mon Jul 14 07:33:11 1997  Fila Kolodny  <fila@ibi.com>
-
-	* configure.in (*-*-gnu*): Add crt{begin,end}S.o to extra_parts.
-
-Mon Jul 14 07:26:36 1997  Craig Burley  <burley@gnu.ai.mit.edu>
-
-	* varasm.c (assemble_variable): If low part of size
-	doesn't fit in an int, variable is too large.
-
-Mon Jul 14 06:51:37 1997  Mike Meissner  <meissner@cygnus.com>
-
-	* bitmap.{h,c}: New files.
-	* Makefile.in (OBJS): Add bitmap.o.
-	(BASIC_BLOCK_H): New make variable for basic-block.h, bitmap.h.
-	({flow,combine,regclass,local-alloc,reload1,reorg,sched}.o): Use
-	BASIC_BLOCK_H variable instead of basic-block.h.
-	* basic-block.h (*REG_SET): Delete old implementation; use bitmap.h.
-	(regset_{size,bytes}): Delete.
-	(regs_live_at_setjmp): Declare.
-	(EXECUTE_IF_SET_AND_RESET_IN_REG_SET): Delete.
-	* flow.c (init_regset_vector): Make global; don't take basic block
-	times # of pseduos as argument.
-	(life_analysis): Change all init_regset_vector calls.
-	Use free_regset_vector to release arrays only flow uses at end.
-	(allocate_for_life_analysis): Change init_regset_vector call.
-	Don't set regset_{size,bytes}.
-	(free_regset_vector): Call FREE_REG_SET to release any
-	memory allocated by each vector.
-	(propagate_block): Call FREE_REG_SET on dead/live.
-	(mark_used_regs): Don't use REGSET_ELT_TYPE anymore.
-	* output.h (allocate_for_life_analysis): Add declaration.
-	(regno_uninitialized, regno_clobbered_at_setjmp): Likewise.
-	(dump_flow_info, flow_analysis): Likewise.
-	* regclass.c (init_reg_sets): Invoke INIT_ONCE_REG_SET.
-	(allocate_reg_info): Invoke MAX_REGNO_REG_SET.
-	(regset_release_memory): Free basic_block_live_at_start storage.
-	* reorg.c (mark_target_live_regs): Delete unused variables.
-	* sched.c (schedule_block): Free space associated with
-	reg_pending_sets and old_live_regs.
-	(schedule_insns): Free bb_{dead,live}_regs on first pass.
-	(sched_analyze_insn): Use EXECUTE_IF_SET_IN_REG_SET and then clear.
-	* toplev.c (rest_of_compilation): Call regset_release_memory.
-
-Mon Jul 14 00:14:13 1997  Jason Merrill  <jason@yorick.cygnus.com>
-
-	* toplev.c (main): Prefer DWARF 2 or stabs with -ggdb.
-	* ns32k/tek6000.h (PREFERRED_DEBUGGING_TYPE): DBX_DEBUG.
-	* alpha.h (PREFERRED_DEBUGGING_TYPE): SDB_DEBUG.
-	* mips.h (PREFERRED_DEBUGGING_TYPE): SDB_DEBUG.
-
-Sun Jul 13 15:11:08 1997  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
-
-	* stupid.c (stupid_mark_refs): If setting reg set only in this
-	insn and not referenced, make REG_UNUSED note.
-
-Sun Jul 13 14:03:19 1997  Michael Meissner  <meissner@cygnus.com>
-
-	* gcc.c (process_command): If -save-temps and -pipe were specified
-	together, don't do -pipe.
-
-Sun Jul 13 12:27:03 1997  Doug Evans  <dje@cygnus.com>
-
-	* gcc.c (main): Handle blank in version_string when comparing
-	with compiler_version.
-
-Sat Jul 12 01:53:55 1997  Jason Merrill  <jason@yorick.cygnus.com>
-
-	* sparc.c (output_function_prologue): Fix offset from CFA.
-	(sparc_flat_output_function_prologue): Likewise.
-
-Fri Jul 11 09:49:15 1997  Jeffrey A Law  (law@cygnus.com)
-	
-	* mips.c (epilogue_reg_mentioned_p): Delete unused function.
-	(mips_epilogue_delay_slots): Likewise.
-	(function_epilogue): Greatly simplify.
-	(mips_expand_epilogue): If we have a null prologue/epilogue,
-	then use a normal return insn.  Emit blockage insns before
-	stack pointer adjustments.
-	(mips_can_use_return_insn): Renamed from simple_epilogue_p.  All
-	callers changed.  Do not use return insns if $31 is live in the
-	function or if generating profiling information.
-	* mips.h (DELAY_SLOTS_FOR_EPILOGUE): Delete.
-	(ELIGIBLE_FOR_EPILOGUE_DELAY): Likewise.
-	* mips.md (return): Remove expander and change the pattern to
-	look like a standard "return" insn.
-	(return_internal): Show use of $31 explictly.
-	(epilogue expander): Enable.
-
-Thu Jul 10 13:04:53 1997  Doug Evans  <dje@cygnus.com>
-
-	* cccp.c (INO_T_EQ): Return 0 for MSDOS.
-
-	* Makefile.in (CC): Use autoconf value.
-
-Tue Jul  8 18:08:00 1997  Jim Wilson  <wilson@cygnus.com>
-
-	* dwarf2out.c (gen_subprogram_die): When handling declarations, test
-	DECL_CONTEXT not decl_class_context before equate_decl_number_to_die.
-
-Tue Jul  8 16:47:13 1997  Michael Meissner  <meissner@cygnus.com>
-
-	* rs6000.md (movsi define_split): Use unsigned HOST_WIDE_INT,
-	not unsigned.
-
-Sat Jul  7 00:01:41 1997  Jim Meyering <meyering@eng.ascend.com>
-
-	* i386/t-sol2 (crt[1in].o): Also depend on $(GCC_PASSES).
-
-Fri Jul  4 11:45:39 1997  Jason Merrill  <jason@yorick.cygnus.com>
-
-	* dwarf2out.c (DWARF_CIE_HEADER_SIZE, DWARF_FDE_HEADER_SIZE,
- 	size_of_cfi, size_of_fde, calc_fde_sizes, next_fde_offset,
- 	cie_size): Lose.
-	(ASM_OUTPUT_DWARF_STRING): Move earlier.
-	(INCOMING_FRAME_SP_OFFSET): Provide default.
-	(initial_return_save): Adjust for CFA offset.
-	(dwarf2out_frame_debug): Lookup initial CFA offset when setting up.
-	(output_call_frame_info): Use label subtraction for length fields.
-  	Add pointer to exception region information in for_eh case.
-	(dwarf2out_do_frame): New fn.
-	(dwarf2out_frame_init): Use INCOMING_FRAME_SP_OFFSET.
-	(dwarf2out_frame_finish): Don't bother emitting .debug_frame for
-	non-Irix targets.  Just emit .eh_frame.
-	(output_die): Refer to an FDE with label subtraction.
-	* i386.h (INCOMING_FRAME_SP_OFFSET): Define.
-	* defaults.h (DWARF2_UNWIND_INFO): Define if
- 	INCOMING_RETURN_ADDR_RTX is provided.
-	* final.c (final): Don't call dwarf2out_frame_debug unless we are
- 	doing dwarf 2.
-
-Thu Jul  3 17:37:52 1997  Jim Wilson  <wilson@cygnus.com>
-
-	* fp-bit.c (unpack_d): Check fraction not sign to distinquish QNaN.
-
-Wed Jul  2 09:48:03 1997  Michael Meissner  <meissner@cygnus.com>
-
-	* loop.c (strength_reduce): Make sure register does not exceed the
-	table size when looking up the last UID.
-
-Wed Jul  2 07:47:44 1997  Nick Burrett  <n.a.burrett@btinternet.com>
-
-	* genoutput.c (process_template): Place increment expression
-	outside of putchar function call.
-
-Wed Jul  2 06:56:52 1997  H.J. Lu  (hjl@gnu.ai.mit.edu)
-
-	* sparc/linux.h (LIBGCC_SPEC): Removed.
-	(CC1_SPEC): Add %{profile:-p}.
-	({CPP,LIB,LINK}_SPEC): Choose glibc 1 or 2 depending on USE_GNULIBC_1.
-	* configure.in (sparc-*-linux-gnulibc1*): New configuration.
-
-	* configure.in (powerpc-*-linuxgnu*): Default thread_file is posix.
-	Set xmake_file to x-linux.  Add extra_parts.
-	* rs6000/linux.h (LINK_SPEC): Defined.
-
-	* m68k/linux.h (LINK_SPEC): Pass -shared for -shared.
-	({CPP,LINK}_SPEC): Choose for glibc 1 or 2 depending on USE_GNULIBC_1.
-	* configure.in (m68k-*-linux-gnu*): Default thread_file is `posix'.
-	(m68k-*-linux-gnulibc1): New configuration.
-
-	* alpha/elf.h (LINK_SPEC): Change ld-gnu.so.1 to ld-linux.so.2.
-	* configure.in (alpha-*-linux-gnu*): Default thread_file is `posix'.
-
-Wed Jul  2 06:12:37 1997  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
-
-	* alpha.md (divsi3, modsi3, udivsi3): Comment out.
-	(extendsfsd2_no_tp): Add alternative with output in MEM, input in REG.
-
-	* configure.in (*-linux*): Add "-gnu" to names to match.
-
-	* libgcc2.c (_trampoline): Add stdcall attribute to VirtualProtect
-	on i386.
-
-	* objc/objc.gperf: Renamed from gperf.
-
-Wed Jul  2 05:42:19 1997  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>
-
-	* objc/Make-lang.in ($(srcdir)/objc/objc-parse.c): Fix command
-	to use the right file names.
-
-Tue Jul  1 23:25:42 1997  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
-
-	* reorg.c (redundant_insn): If INSN or possible match has REG_UNUSED
-	note, don't have match.
-
-Tue Jul  1 18:36:24 1997  Doug Evans  <dje@cygnus.com>
-
-	* mips.c (mips_output_external): Don't output .extern's for
-	variables in user specified sections unless they're .sbss/.sdata.
-
-Tue Jul  1 18:30:26 1997  Jim Wilson  <wilson@cygnus.com>
-
-	* cse.c (find_best_addr): Add missing rtx_cost arguments.
-
-	* fp-bit.c (float_to_usi): Move code for negative numbers before code
-	for infinity.  Modify infinty code to only handle positive infinities.
-
-Tue Jul  1 11:16:41 1997  Robert Lipe  <robertl@dgii.com>
-
-	* fixinc.sco: Restore pwd aftercopy.
-	Convert declaration of abs in math.h to prototype.
-	Fix static functions in sys/stat.h for C++.
-
-Tue Jul  1 10:55:47 1997  Michael Meissner  <meissner@cygnus.com>
-
-	* rs6000.md ({add,ior,xor}si3): Change to use define_expand wrapper
-	and split add/ior/xor of large constants early.
-	(andsi3): Remove 6/29 code to do and of large constants.
-	(nor, nand, eqv, maskir): Add names to all logical define_insns.
-
-Tue Jul  1 09:03:35 1997  Jeffrey A Law  (law@cygnus.com)
-
-	* h8300.h (BIGGEST_FIELD_ALIGNMENT): Remove definition.
-	* mips.h (BIGGEST_FIELD_ALIGNMENT): Likewise.
-
-Mon Jun 30 14:58:00 1997  Jeffrey A Law  (law@cygnus.com)
-
-	* sh.c (sh_expand_epilogue): Emit blockage insn before cutting
-	back stack.
-
-Sun Jun 29 11:27:07 1997  Michael Meissner  <meissner@cygnus.com>
-
-	* rs6000.h (TARGET_FLAGS): Add -m{,no-}update to suppress
-	creating load/store with update instructions, and also
-	-m{,no-}fused-madd to suppress the generation of fused add and
-	multiply instructions.  Move debug flags to TARGET_OPTIONS.
-	(GO_IF_LEGITIMATE_ADDRESS): Don't allow PRE_{INC,DEC} if -mno-update.
-	(GO_IF_MODE_DEPENDENT_ADDRESS): Ditto.
-	(rs6000_debug_{name,stack,arg}): Add declarations.
-	(toc_initialized): Likewise.
-	(got_no_const_operand): Likewise.
-	(PREDICATE_CODES): Add got_no_const_operand.
-	(toc_section): Make toc_initialized a global.
-	(RTX_COSTS): Set appropriate costs for add, logical operators that
-	are really two instructions.
-	
-	* rs6000.c (rs6000_debug_{name,stack,arg}): Add definitions.
-	(rs6000_override_options): Process debug flags.
-	(toc_initialized): Global to say toc initialized.
-	(small_data_operand): Use #if TARGET_ELF, not #ifdef TARGET_SDATA.
-	(rs6000_init_expanders): Likewise.
-	(SMALL_DATA_RELOC): Likewise.
-	(got_no_const_operand): Recognize SYMBOL_REF and LABEL_REF.
-	(rs6000_makes_calls): System V profiling doesn't count as a call.
-	(rs6000_stack_info): Likewise.
-	(rs6000_output_load_toc_table): Take register number argument to
-	determine register to load.  Generate correct code if more than
-	one toc table is done in System V due to profiling or non-local
-	gotos.  If System V toc is not initialized, initialize it now.
-	(rs6000_allocate_stack_space): Move code from output_prolog to
-	allocate stack space.  Take -mno-update into account.
-	(output_prolog): Call rs6000_allocate_stack_space.  Only set
-	rs6000_pic_func_labelno if not profiling.
-	(output_function_profiler): Implement System V profiling.
-	(and_operand): Don't call reg_or_short_operand.
-	(rs6000_finalize_pic): If not optimizing, insert a USE of the GOT
-	register as the last insn.
-	
-	* rs6000.md (load/store update): Take -mno-update into account.
-	If -msoft-float, support SF load/store with update to GPR regs.
-	(allocate_stack): Take -mno-update into account.
-	(add/subtract + multiply instructions): Take -mno-fused-madd into
-	account.
-	(nonlocal_goto_receiver): Specify register # to load.
-	({add,and,ior,xor}si3): Recognize operation done with full 32 bit
-	constant, splitting latter if need be.
-	(andsi3 define_split): Fix up splitting andsi3 of large constant.
-	({ior,xor}si3 define_split): Use GEN_INT to create integer rtx
-	values.
-	(movsi_got{,_internal}): Split the load of a CONST into load of
-	the SYMBOL_REF/LABEL_REF and an add.
-	(movsi): Know that addsi3 can handle large values now for NT.
-
-	* sysv4.h (TARGET_SDATA): Remove explicit bit for -msdata.
-	(SUBTARGET_OVERRIDE_OPTIONS): Likewise.
-	(ASM_OUTPUT_ALIGNED_LOCAL): Likewise.
-	(SUBTARGET_SWITCHES): Indicate -m{,no-}sdata doesn't set any flags.
-	(ASM_SPEC): Only pass -m{,no-}reg-names if assembling .s/.S files.
-	(CC1_SPEC): If -msdata, invoke compiler with -msdata=default.
-	(PROFILE_BEFORE_PROLOGUE): Likewise.
-	(RS6000_MCOUNT): Define as "_mcount".
-	(toc_section): Make toc_initialized a global.
-
-Fri Jun 27 19:01:11 1997  H.J. Lu  (hjl@gnu.ai.mit.edu)
-
-	* config/t-linux-gnulibc1: New file.
-	* configure.in (i[3456]86-*-linux*): Default thread_file is `posix'.
-	(i[3456]86-*-linux*gnulibc1): New case.
-	* config/linux.h (LIB_SPEC): Choose for glibc 1 or 2 depending
-	on USE_GNULIBC_1.
-	* i386/linux.h (CPP_SPEC, LINK_SPEC): Likewise.
-
-Fri Jun 27 19:00:52 1997  Ralf Baechle  <ralf@waldorf-gmbh.de>
-
-	* config/linux.h (PREFERRED_DEBUGGING_TYPE): Undefine before define.
-
-Fri Jun 27 18:35:04 1997  Alan Modra  <alan@spri.levels.unisa.edu.au>
-	
- 	* configure.in: Clean up Make-{host,target,hooks} in all
-	subdirs, not just '.'.
-	* Makefile.in (distclean): Delete */Make-{host,target,lang,hooks}.
-
-Fri Jun 27 18:27:11 1997  Fila Kolodny  <fila@ibi.com>
-
-	* config/xm-gnu.h (fcntl.h): Only include if not building libgcc.a.
-
-Fri Jun 27 18:17:44 1997  Doug Evans  <dje@cygnus.com>
-
-	* configure.frag: Rewrite.
-
-	* objc/Make-lang.in (OBJC_CCOMMON): Object files don't go in srcdir.
-	(OBJC_OBJS): Likewise.
-	(OBJC_O): Likewise.
-	(objc-parse.o, objc-act.o): Fix rules.
-	(objc/libobjc files): Fix rules.
-
-Fri Jun 27 13:23:38 1997  Andrew Cagney  <cagney@tpgi.com.au>
-
-	* fp-bit.c (float_to_si): Correct return value when Inf.
-
-Fri Jun 27 10:47:09 1997  Scott Christley <scottc@net-community.com>
-
-	* Makefile.in (DLLTOOL): Define.e
-	* objc/Make-lang.in (libobjc_entry.o, libobjc_s.a, libobjc.dll):
-	New targets.
-	(objc.install-normal): Install Objective-C runtime as a DLL.
-	(objc.mostlyclean): Clean up files used to build DLL.
-	* objc/libobjc.def: New file.
-	* objc/libobjc_entry.c: New file.
-
-	* objc/sendmsg.c (search_for_method_in_list): No longer static.
-
-	* Makefile.in (GCC_THREAD_FILE): Renamed from OBJC_THREAD_FILE.
-	* configure.lang (GCC_THREAD_FILE): Likewise.
-	* configure.in (--enable-threads): New parameter.
-	* objc/Make-lang.in (OBJC_THREAD_FILE): New definition.e
-	* objc/config-lang.in: Print message about ObjC thread file.
-
-	* cccp.c (INO_T_EQ): Define for Win32 but not Cygwin32.
-	* i386/mingw32.h: New file.
-	* i386/xm-mingw32.h: New file.
-	* configure.in (i[3456]86-*-mingw32): New target.
-	* protoize.c (link): Eliminate definition on Win32.
-
-	* objc/thr-posix.c (__objc_thread_yield): Use sched_yield instead.
-
-Fri Jun 27 10:36:41 1997  J"orn Rennecke <amylaar@cygnus.co.uk>
-
-	* stor-layout.c (layout_record, PCC_BITFIELD_TYPE_MATTERS):
-	Round up when calculating possible end address.
-
-Wed Jun 25 19:54:29 1997  Jim Wilson  <wilson@cygnus.com>
-
-	* unroll.c (final_giv_value): Verify that bl->initial_value is
-	invariant before trying to use it.
-
-Wed Jun 25 18:13:05 1997  Michael Meissner  <meissner@cygnus.com>
-
-	* rs6000/sysv4.h (WCHAR_TYPE{,_SIZE}): Make wchar_t long as per
-	ABI spec.
-
-Wed Jun 25 16:56:16 1997  Jason Merrill  <jason@yorick.cygnus.com>
-
-	* sparc.h (INCOMING_RETURN_ADDR_RTX): Define.
-	(DBX_REGISTER_NUMBER): Fix frame pointer regno for -mflat.
-	* sol2.h (DBX_REGISTER_NUMBER): Likewise.
-	* sparc.c (save_regs): Emit dwarf2 frame debug info.
-	(output_function_prologue, sparc_flat_save_restore,
-	sparc_flat_output_function_prologue): Likewise.
-
-	* dwarf2.h (enum dwarf_call_frame_info): Add DW_CFA_GNU_window_save.
-	* dwarf2out.c (dwarf_cfi_name, output_cfi): Support it.
-	(dwarf2out_cfi_label): Make non-static.
-	(initial_return_save): Support PLUS.
-	(dwarf2out_window_save, dwarf2out_return_save, 
-	dwarf2out_return_reg): New fns.
-
-	* dwarf2out.c (SECTION_FORMAT): Use PUSHSECTION_FORMAT, if defined.
-	(DEBUG_INFO_SECTION): Rename from DEBUG_SECTION.
-	(DEBUG_LINE_SECTION): Rename from LINE_SECTION.
-	* mips/iris6.h: Likewise.
-
-Wed Jun 25 16:25:41 1997  Scott Christley <scottc@net-community.com>
-
-	* Makefile.in (GCC_PASSES): Don't define with $(exeext).
-	* configure.in ({cc,stage_prefix}_set_by_configure): Eliminate extra
-	comma and don't pass value to configure.lang.
-	* objc/Make-lang.in (objc-runtime): Add objc-headers.
-
-	* configure.in: Execute configure.frag in a shell.
-
-	* configure.in (cross_overrides, build_overrides): Default to
-	/dev/null to help platforms where sed cannot handle empty filenames.
-
-	* Reorganize thread implementation to make a clearly defined
-	front-end/back-end interface.
-	* objc/thr-{decosf1,irix,mach,os2,posix,pthreads,single}.c: Completely
-	rework according to new interface.
-	* objc/thr-{solaris,win32}.c: Likewise.
-	* objc/thr.c: Likewise.
-	* objc/thr.h: Define front-end/back-end interface functions and
-	structures.
-
-Wed Jun 25 16:14:10 1997  Ovidiu Predescu <ovidiu@net-community.com>
-
-	* Complete implementation of +load.
-	* objc/init.c (objc_send_load): New function.
-	(objc_class_tree): New structure.
-	(create_tree_of_subclasses_inherited_from): New function.
-	(__objc_tree_insert_class): New function.
-	(objc_tree_insert_class): New function.
-	(objc_preorder_traverse): New function.
-	(objc_postorder_traverse): New function.
-	(__objc_tree_print): New function.
-	(__objc_destroy_class_tree_node): New function.
-	(class_is_subclass_of_class): New function.
-	(__objc_exec_class): Allocate class tree list and load hash table.
-	(__objc_send_message_in_list): Rewrite using hash table.
-	(__objc_send_load): Remove calls to _objc_load_callback.
-	(objc_send_load): Make static.  Create Tree of classes resembling
-	class hierarchy for all modules.  Call __objc_send_load on all of 
-	the modules in __objc_module_list.
-	(__objc_create_classes_tree): New function.
-
-	* objc/encoding.h (method_get_sizeof_arguments): Fix typo.
-	* objc/objc-api.h (OBJC_ERR_BAD_STATE): New error code.
-	On NeXT redefine object_copy and object_dispose to avoid
-	a conflict with those defined in system library.
-	* objc/selector.c (__objc_register_instance_methods_to_class): New 
-	function.
-	* objc/runtime.h: Likewise.  Add missing function prototypes.
-
-Wed Jun 25 15:09:01 1997  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
-
-	* Makefile.in (Makefile): Execute configure.frag from srcdir.
-
-	* Makefile.in (configure): Target is $(srcdir)/configure.
-
-Tue Jun 24 15:18:14 1997  Jim Wilson  <wilson@cygnus.com>
-
-	* m68k.h (LIMIT_RELOAD_CLASS): Define.
-
-	* recog.c (constrain_operands): When checking earlyclobbers, use
-	operands_match_p instead of rtx_equal_p.
-
-	* dwarfout.c (field_byte_offset): Check for object_offset_in_bits
-	greater than bitpos_int and recompute object_offset_in_bytes if true.
-
-	* mips.md (movdi_internal): Add x/J alternative.
-	(movdi_internal2): Add x/J alternative; change a/I to a/J.
-	(movsi_internal1, movsi_internal2): Change x/I alternative to x/J.
-
-Tue Jun 24 08:49:56 1997  Jeffrey A Law  (law@cygnus.com)
-
-	* pa.h (ASM_OUTPUT_SECTION_NAME): Fix typo.
-
-Mon Jun 23 22:48:00 1997  Jim Wilson  <wilson@cygnus.com>
-
-	* unroll.c (find_splittable_givs): Set splittable_regs_updates to
-	biv_count for reduced givs.
-
-Mon Jun 23 10:51:53 1997  Jeffrey A Law  (law@cygnus.com)
-
-	* mn10200.c, mn10200.h, mn10200.md: New files for mn10200 port.
-	* lib1funcs.asm, divmod.c, udivmod.c, udivmodsi4.c: Likewise.
-	* t-mn10200, xm-mn10200.h, va-mn10200.h: Likewise.
-	* Makefile.in (USER_H): Add va-mn10200.h.
-	* varargs.h, stdarg.h: Include va-mn10200.h.
-	* configure.in (mn10200-*-*): New target.
-	
-Sun Jun 22 06:47:19 1997  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>
-
-	* combine.c (force_to_mode): Don't do anything for ASM_OPERANDS insn.
-
-Sun Jun 22 06:29:28 1997  J. Kean Johnston  <jkj@sco.com>
-
-	* ginclude/stdarg.h: Protect va_list definition from SCO headers.
-	* ginclude/varargs.h: Likewise.
-
-Sat Jun 21 20:56:23 1997  Scott Christley <scottc@net-community.com>
-
-	* Make ObjC a front-end language.
-	* Makefile.in (LANGUAGES, COMPILERS, .PHONY, stmp-int-hdrs): Remove
-	specific references to ObjC compiler and source files.
-	({mostly,dist,maintainer,}clean, install-normal): Likewise
-	(OBJC_OBJS, OBJC, OBJECTIVE-C, cc1obj, objc-runtime): Rules deleted.
-	(libobjc.a, sublibobjc.a, objc-parse.{o, c, y}): Rules deleted.
-	(objc-headers, install-libobjc): Rules deleted.
-	* objc/Make-lang.in: New file; from rules deleted above.
-	* objc/config-lang.in: New file.
-	* objc/Makefile.in: Changes to support ObjC as a front-end language;
-	renamed from Makefile.in.
-	* objc-act.{c,h}, objc-parse.{c,y}, objc-tree.def: Moved to objc dir.
-
-Sat Jun 21 07:54:36 1997  Robert Lipe <robertl@dgii.com>
-
-	* fixinc.sco (math.h): Correct the collision of "exception".
-
-Sat Jun 21 06:51:40 1997  Peter Gerwinski  <peter@agnes.dida.physik.uni-essen.de>
-
-	* rs6000.c (output_epilog): Name is "GNU Pascal", not all caps.
-
-Sat Jun 21 06:29:19 1997  H.J. Lu  (hjl@gnu.ai.mit.edu)
-
-	* gcc.c (main): Check for and read ${libdir}/gcc-lib/specs to
-	override the default specs.
-
-Fri Jun 20 17:20:15 1997  Jim Wilson  <wilson@cygnus.com>
-
-	* mips.c (output_block_move): When loading addresses into registers,
-	add checks for ABI_N32 and ABI_64.
-	(mips_expand_prologue): Add check for SImode in code splitting
-	tsize_rtx when it is large_int.
-
-Fri Jun 20 09:07:31 1997  Russell King  <rmk92@ecs.soton.ac.uk>
-
-	* configure.in (arm-*-linuxaout): New target.
-	* arm/lib1funcs-linux.asm, arm/linux-gas.h: New files.
-	* arm/linux.h, arm/t-linux, arm/xm-linux.h: New file.
-	* xm-linux.h: Undef some macros before defining them.
-
-Thu Jun 19 21:18:20 1997  Jim Wilson  <wilson@cygnus.com>
-
-	* dwarf2out.c (output_line_info): Always use DW_LNE_set_address instead
-	of DW_LNS_fixed_advance_pc for line number addresses.
-	(size_of_line_info): Adjust size calculation as per above change.
-	(text_end_label): Make it static.
-
-Thu Jun 19 14:55:49 1997  Brendan Kehoe  <brendan@cygnus.com>
-
-	* toplev.c (xmalloc): Only give the fatal msg if SIZE is non-zero.
-
-Sun Apr 27 23:19:13 1997  Ulrich Drepper  <drepper@cygnus.com>
-
-	* libgcc2.c (__eh_type):  Remove `extern' to make this a definition.
-
-Wed Jun 18 18:10:16 1997  Per Bothner  <bothner@cygnus.com>
-
-	* dbxout.c (dbxout_type_fields):  Skip field if DECL_IGNORED_P.
-
-Wed Jun 18 18:04:33 1997  Mike Stump  <mrs@cygnus.com>
-
-	* except.c (end_eh_unwinder): If we have a return instruction, we
-	have to make sure we use it and don't fall off the end of the
-	function in the unwinder.
-
-Wed Jun 18 14:27:58 1997  Mike Stump  <mrs@cygnus.com>
- 
-	* flow.c (find_basic_blocks): Fix end case bug.
- 
-Tue Jun 17 18:35:57 1997  Mike Stump  <mrs@cygnus.com>
-
-	* libgcc2.c (__eh_pcnthrow): Add support -fno-sjlj-exceptions
-	-fPIC exception handling on the SPARC.
-	* sparc.h (DONT_ACCESS_GBLS_AFTER_EPILOGUE): Likewise.
-	* libgcc2.c (__eh_ffetmnpc): Remove.
-
-Mon Jun 16 20:28:51 1997  Jason Merrill  <jason@yorick.cygnus.com>
-
-	* collect2.c (extract_string): Null-terminate.
-
-Mon Jun 16 14:38:44 1997  Michael Meissner  <meissner@cygnus.com>
-
-	* combine.c (set_nonzero_bits_and_sign_copies): Use REG_SET macros
-	instead of doing bit operations directly.
-	(try_combine,reg_dead_at_p): Ditto.
-	* caller-save.c (save_call_clobbered_regs): Ditto.
-	* reload1.c (reload): Ditto.
-	* local-alloc.c (update_equiv_regs,block_alloc): Ditto.
-	* sched.c (schedule_block): Dito.
-
-Sun Jun 15 20:46:12 1997  Jim Wilson  <wilson@cygnus.com>
-
-	* dwarf2out.c (dwarf2out_frame_debug): Handle IOR.
-	(struct limbo_die_struct): Define.
-	(TYPE_DECL_IS_STUB): Call decl_ultimate_origin if DECL_ABTRACT_ORIGIN
-	is set.
-	(limbo_die_count): Delete.
-	(libmo_die_list): Define.
-	(new_die): Add die to limbo_die_list instead of incrementing
-	limbo_die_count.
-	(add_AT_location_description): Renamed from add_location_attribute.
-	New parameter attr_kind.
-	(add_location_or_const_value_attribute, gen_subprogram_die,
-	add_bound_info): Change call to add_AT_location_description.
-	(add_bound_info): Add call to contains_placeholder_p.  Ignore
-	MAX_EXPR and VAR_DECL.
-	(add_subscript_info): Ignore the index type if it is an unnamed
-	integral type.
-	(scope_die_for): Move check for function-local tags after code setting
-	containing_scope, and add check for non-NULL containing_scope
-	(add_type_attribute): If unnamed type, use TREE_TYPE instead.
-	(gen_enumeration_type_die, gen_struct_or_union_type_die): Call
-	add_child_die if die_parent is NULL.
-	(gen_subprogram_die): Ifdef out DW_AT_static_link code.
-	(decls_for_scope): Delete decrement of limbo_die_count.
-	(dwarf2out_finish): Add code to traverse the limbo_die_list, and
-	call add_child_die if die_parent is NULL.  Delete limbo_die_count code.
-	* mips.c (mips_expand_prologue): If tsize_rtx is large_int, emit two
-	insns instead of one splitable insn, setting RTX_FRAME_RELATED_P.
-
-Fri Jun 13 19:33:35 1997  Brendan Kehoe  <brendan@cygnus.com>
-
-	* fixincludes: Also fix AIX NULL macro in sys/{dir,param,types}.h.
-
-Thu Jun 12 22:53:12 1997  Jim Wilson  <wilson@cygnus.com>
-
-	* m68k.md (mov[qhs]i): Remove pair of constraints which allow
-	offsetable memory addresses to be moved to the same for TARGET_5200.
-
-Thu Jun 12 15:33:01 1997  Jeffrey A Law  (law@cygnus.com)
-
-	* pa.h (SELECT_RTX_SECTION): Place symbolic operands into the
-	data section.
-
-	* pa.c (emit_move_sequence): Rewrite code to handle arithmetic
-	involving plabels.
-
-Wed Jun 11 08:57:14 1997  H.J. Lu  (hjl@gnu.ai.mit.edu)
-
-	* tree.c (unsave_expr_now): Avoid recursing into the parts of
-	the tree that are RTL.
-
-Thu Jun 12 09:43:55 1997  Jeffrey A Law  (law@cygnus.com)
-
-	* reorg.c (emit_delay_sequence): Call set_new_first_and_last_insn
-	after the new sequence insn has been spliced into the insn chain.
-
-Wed Jun 11 23:10:49 1997  Jeffrey A Law  (law@cygnus.com)
-
-	* mn10300.md (call, call_value): Use "call" instead of "calls"
-	for calls to named functions.
-
-Wed Jun 11 00:22:34 1997  Jim Wilson  <wilson@cygnus.com>
-
-	* configure, configure.in: Restore changes from Feb 15 to Apr 13
-	lost during conversion to autoconf.
-
-Tue Jun 10 18:23:35 1997  Mike Stump  <mrs@cygnus.com>
-
-	* stmt.c (expand_decl_cleanup): Avoid core dumping when exceptions
-	aren't on.
-	
-Tue Jun 10 18:22:30 1997  Jason Merrill  <jason@yorick.cygnus.com>
-
-	* collect2.c (extract_string): New fn.
-	(main): Use it.
-
-Tue Jun 10 17:40:15 1997  Jim Wilson  <wilson@cygnus.com>
-
-	* expr.c (emit_group_load): Add case using gen_lowpart. 
-
-Tue Jun 10 17:14:58 1997  Michael Meissner  <meissner@cygnus.com>
-
-	* rs6000/rs6000.c (rs6000_override_options): If -mcpu=403, set
-	-mstrict-align as well.
-
-	* rs6000/t-ppc{,gas} (MULTILIB_EXTRA_OPTS): Build libraries with
-	-mstrict-align.
-
-	* configure.in ({powerpc,rs6000}*-*-*): Add embedded targets to
-	--with-cpu=n support.
-
-Tue Jun 10 07:06:12 1997  H.J. Lu  (hjl@gnu.ai.mit.edu)
-
-	* flow.c (mark_used_regs): Fix typo in Jun 4 change.
-
-Mon Jun  9 20:26:26 1997  Jim Wilson  <wilson@cygnus.com>
-
-	* Makefile.in (MAYBE_USE_COLLECT2): Renamed from MAYBE_USE_COLLECT.
-
-Mon Jun  9 19:42:21 1997  Jason Merrill  <jason@yorick.cygnus.com>
-
-	* fold-const.c (fold): Don't do COND_EXPR -> MIN_EXPR folding if it
-	loses information that might be needed by a later use as an lvalue.
-
-Mon Jun  9 19:10:50 1997  Alexandre Oliva <oliva@dcc.unicamp.br>
-
-	* configure.in: Don't override a user's setting for prefix
-	on platforms that use the native prefix.
-
-Mon Jun  9 19:00:49 1997  Brendan Kehoe  <brendan@melange.gnu.ai.mit.edu>
-
-	* integrate.c (expand_inline_function): Use the mode of FNDECL's
-	result rtl, not the result type itself, in setting ARRIVING_MODE.
-
-	* reload1.c (reload): Use xmalloc instead of alloca for the label
-	offsets in OFFSETS_AT and OFFSETS_KNOWN_AT.
-
-Mon Jun  9 15:16:52 1997  Mike Stump  <mrs@cygnus.com>
-
-	* flow.c (find_basic_blocks): Eliminate more dead code, enables
-	dead throws to be eliminated.
-
-Mon Jun  9 17:15:50 1997  Stephen L Moshier  <moshier@world.std.com>
-
-	* alpha.c (check_float_value):  Underflow and overflow constants
-	are different for FLOAT_VAX and default targets.
-
-Mon Jun  9 16:48:21 1997  Scott Christley <scottc@net-community.com>
-
-	* Makefile.in (Makefile): Process language fragments.
-	* configure.frag: New file.
-	* configure.in: Move language fragment processing to configure.lang.e
-
-	* Makefile.in (GCC_PASSES): Prevent all compilers from being
-	built when only the C compiler is needed.
-
-	* configure.in (cross_overrides, build_overrides): Use absolute
-	path to GCC top-level source directory.
-
-	* configure.in: Save target alias for language directories.
-
-	* configure.in (with-gxx-include-dir): New parameter for
-	setting the g++ header file directory.
-	* Makefile.in (gxx_include_dir): Use autoconf variable.
-
-	* configure.in: Add parameter for setting local prefix.
-
-	* configure.lang: New file.
-	* configure.in: Move language subdirectory Makefile processing
-	into configure.lang.
-
-Mon Jun  9 16:44:47 1997  Jim Wilson  <wilson@cygnus.com>
-
-	* sched.c (attach_deaths): Fix typo in Jun 4 change.
-
-Mon Jun  9 15:13:00 1997  Marc Lehmann  (pcg@goof.com)
-
-	* varasm.c (assemble_end_function): Switch back to function
-	section after outputting constant pool.
-
-Mon Jun  9 14:47:22 1997  Paul Eggert  <eggert@twinsun.com>
-
-	* tree.c (change_main_variant): Remove unused function.
-	(build_array_type): Remove obsolete references to
-	change_main_variant.
-	* c-decl.c (complete_array_type): Likewise.
-
-	* c-common.c (c_build_type_variant): Don't futz with main type
-	variant of array since C Standard requires main type variant of
-	array-of-const also be array-of-const.
-
-	* Makefile.in: Comment out lines containing just formfeeds.
-
-	* Makefile.in (distclean): Remove config.bak.
-	(maintainer-clean): Output warning.
-	Do not remove `configure'.
-
-Mon Jun  9 14:44:17 1997  J.T. Conklin  <jtc@netbsd.org>
-
-	* configure.in (*-*-netbsd): Restore changes of Apr 13th lost in
-	autoconf conversion: tmake_file now t-netbsd; delete xmake_file.
-
-Mon Jun  9 14:39:29 1997  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
-
-	* expr.c (expand_builtin, case BUILT_IN_FRAME_ADDRESS):
-	Use correct function name in error message.
-
-	* Makefile.in (diff): Exclude bi-parser.h.
-
-	* i386.h (CC1_CPU_SPEC): Renamed, was CC1_SPEC.
-	(CC1_SPEC): New macro.
-	(EXTRA_SPECS): Add "cc1_cpu".
-	* i386/linux.h (CC1_SPEC): New macro.
-
-Mon Jun  9 13:23:06 1997  Philippe De Muyter  <phdm@info.ucl.ac.be>
-
-	* m68k/next.h (TARGET_DEFAULT): Use MASK_68040,
-	not MASK_68040_ALSO.
-	* m68k/mot3300.h, m68k/ccur-GAS.h (TARGET_DEFAULT): Likewise.
-
-	* m68k.h (MACHINE_STATE_{SAVE,RESTORE}): Test #ifdef __mcf52000__,
-	not if (TARGET_52000); fixed for mc68000 case.
-
-	* m68k/mot3300.h (CPP_SPEC): Define __mc68020__ if no -m[c]68000
-	command-line option given.
-
-Mon Jun  9 09:19:17 1997  H.J. Lu  (hjl@gnu.ai.mit.edu)
-
-	* Makefile.in (target_alias): Substitute with target_alias.
-
-	* final.c (final_scan_insn): Use single_set to check cc_status.flags.
-
-Mon Jun  9 09:09:07 1997  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>
-
-	* c-common.c (check_format_info): Correct handling of the 'a' flag
-	which adds another pointer level.
-
-Sun Jun  8 00:34:25 1997  Jeffrey A Law  (law@cygnus.com)
-
-	* pa.md (conditional branch insns): Get length right for branches
-	to targets which can not be reached with a "bl" instruction.
-	* pa.c (output_cbranch): Handle branches to targets which can not
-	be reached with a "bl" instruction.
-
-        * pa.md (alternate dbra pattern): Remove incorrect pattern.
-
-Sat Jun  7 23:30:25 1997  Jeffrey A Law  (law@cygnus.com)
-
-	* pa.c (struct defer_plab): Renamed to struct deferred_plabel.
-	Remove "symbol" field and replace with "name" field.
-	(output_function_epilogue): Don't output deferred plabels here.
-	(output_deferred_labels): New function.  Output them here instead.
-	(output_call): Rewrite long call support.
-	* pa.h (ASM_FILE_END): Define.
-	(LEGITIMATE_CONSTANT_P): Never accept a function_label_operand.
-	* pa.md (HIGH and LO_SUM of function address): Remove patterns.
-
-Fri Jun  6 16:09:04 1997  Mike Stump  <mrs@cygnus.com>
-
-	* libgcc2.c (__eh_ffetmnpc): Add support for machines that cannot
-	access globals after throw's epilogue when -fno-sjlj-exceptions is
-	used.
-	* rs6000.c (DONT_ACCESS_GBLS_AFTER_EPILOGUE): Likewise.
-	* mips.h (DONT_ACCESS_GBLS_AFTER_EPILOGUE): Likewise.
-	(INITIAL_ELIMINATION_OFFSET): Fix RETURN_ADDRESS_POINTER_REGNUM
-	for 64 bit words, with 32 bit pointers and variable endianness.
-
-Fri Jun  6 17:27:58 1997  Mike Meissner  <meissner@cygnus.com>
-
-	* regclass.c (allocate_reg_info): Fix off by one error.
-
-Fri Jun  6 17:17:41 1997  Doug Evans  <dje@cygnus.com>
-
-	* basic-block.h (EXECUTE_IF_SET_IN_REG_SET): Fix setting of scan_rs_.
-	(EXECUTE_IF_SET_AND_RESET_IN_REG_SET): Likewise.
-	(EXECUTE_IF_AND_IN_REG_SET): Likewise.
-	(EXECUTE_IF_AND_COMPL_IN_REG_SET): Likewise.
-
-Fri Jun  6 15:42:59 1997  Stan Cox  <coxs@dg-rtp.dg.com>
-
-	* i386.c (notice_cc_update): Set CC_FCOMI is this is a float compare.
-
-Fri Jun  6 15:12:38 1997  Jim Wilson  <wilson@cygnus.com>
-
-	* basic-block.h (REG_SET_TO_HARD_REG_SET): Fix typo.
-
-	* sched.c (update_flow_info): When add extra REG_DEAD note for original
-	dest, handle case where last insn both uses and sets dest.
-
-Thu Jun  5 22:19:36 1997  Brendan Kehoe  <brendan@lisa.cygnus.com>
-
-	* fixinc.irix: Add declaration of __vfork to unistd.h.
-
-	* i960/vx960-coff.h (CPP_SPEC): Always define CPU, even if they
-	use -ansi; the VxWorks headers assume it's always present.
-	* sparc/vxsparc.h (CPP_SPEC): Define, adding the CPU definition to
-	what came from sparc.h.
-	(CPP_PREDEFINES): Don't define it here.
-
-Thu Jun  5 13:40:33 1997  Mike Meissner  <meissner@cygnus.com>
-
-	* basic-block.c (OBSTACK_ALLOC_REG_SET): Rename from
-	OBALLOC_REG_SET.  Add obstack pointer parameter.
-
-	* flow.c (function_obstack): Add declaration.
-	(life_analysis): Don't allocate the space to hold to vector of
-	regsets here.
-	(init_regset_vector): Add pointer parameter and delete space
-	paramter.  Use OBSTACK_ALLOC_REG_SET to allocate.  Change callers.
-	(propagate_block): Use ALLOCA_REG_SET instead of bare alloca.
-
-	* sched.c (schedule_block): Fix typo in yesterday's changes.
-	* reorg.c (mark_target_live_regs): Ditto.
-
-Thu Jun  5 09:44:49 1997  Jeffrey A Law  (law@cygnus.com)
-
-	* sh.c (trap_exit, sp_switch): New variables.
-	(print_operand, case '@'): If trap_exit is nonzero, then use
-	a trapa instead of an rte/rts to exit the current function.
-	(sh_expand_prologue): Switch stacks at function entry as needed.
-	(sh_expand_epilogue): Similarly at function exit.
-	(function_epilogue): Clear trap_exit and sp_switch too.
-	(sh_valid_machine_decl_attribute): New function.
-	* sh.h (VALID_MACHINE_DECL_ATTRIBUTE): Define.
-	(sp_switch): Declare.
-	* sh.md (sp_switch_1, sp_switch_2): New named patterns.
-
-Wed Jun  4 18:11:14 1997  Michael Meissner  <meissner@cygnus.com>
-
-	* basic-block.h (REGSET_ELT_BITS): Make this explicitly unsigned, so
-	that division and modulus of REGSET_ELT_BITS uses a pure shift.
-	(*_REG_SET): New macros to abstract the register set interface.
-
-	* caller-save.c (save_call_clobbered_regs): Use new *_REG_SET
-	macros.
-	* flow.c (life_analysis,propagate_block,insn_dead_p): Ditto.
-	(regno_uninitialized,regno_clobbered_at_setjmp,mark_set_1): Ditto.
-	(mark_used_regs,dump_flow_info,global_conflicts): Ditto.
-	global.c (mark_elimination): Ditto.
-	* reorg.c (mark_target_live_regs): Ditto.
-	* sched.c (sched_{analyze_{1,insn},note_set}): Ditto.
-	(birthing_insn_p,attach_deaths,unlink_notes,schedule_block): Ditto.
-
-	* sched.c (sometimes structure): Delete offset, bit fields, replace
-	with regno.
-	(new_sometimes_live): Take regno argument, not offset and bit.
-	Change all callers.
-
-Tue Jun  3 19:18:36 1997  Brendan Kehoe  <brendan@lisa.cygnus.com>
-
-	* fixincludes: Fix AIX NULL macro use of void*.
-
-Tue Jun  3 15:21:04 1997  Jason Merrill  <jason@yorick.cygnus.com>
-
-	* sparc.h (ASM_OUTPUT_MI_THUNK): Handle -fpic.
-
-Mon Jun  2 16:53:53 1997  Michael Meissner  <meissner@cygnus.com>
-
-	* loop.c (n_times_{set,used}): Make type int, not short.
-	(scan_loop): n_times{set,used} are now int pointers.
-
-	* sched.c (sched_reg_n_deaths): Remove unused variable.
-	(struct sometimes): Make fields int sized, not short.
-	(schedule_insns): Don't set sched_reg_n_deaths, nobody uses it.
-
-	* regclass.c (allocate_reg_info): Allocate the space for
-	reg_renumber, but don't set reg_renumber unless new argument
-	RENUMBER_P is set.  If this is the first call for the function and
-	we need to grow space, use free/xmalloc instead of realloc since we
-	will be initializing the whole array.  If number of registers is <
-	0, just free up the space.
-	(reg_scan): Update allocate_reg_info call.
-
-	* regs.h (allocate_reg_info): Change prototype.
-
-	* flow.c (allocate_for_life_analysis): Update allocate_reg_info
-	call.
-
-	* local-alloc.c (local_alloc): Call allocate_reg_info to allocate
-	and initialize the reg_renumber array.
-	* stupid.c (stupid_life_analysis): Ditto.
-
-Mon Jun  2 14:50:06 1997  Dave Miller  <davem@jenolan.rutgers.edu>
-
-	* sparc/sparc.md (v9 eq/ne cond move patterns): Add early clobber
-	constraint to destination.
-
-Fri May 30 11:00:44 1997  Michael Meissner  <meissner@cygnus.com>
-
-	* regs.h (reg_info): New structure to group the arrays indexed by
-	register number created by reg_scan and flow_analysis that are
-	globally visiable.
-	(reg_n_info): Pointer to the register information array.
-	(reg_n_{refs,sets,deaths,calls_crossed}): Delete variables.
-	(reg_changes_size): Ditto.
-	(REG_N_{REFS,SETS,DEATHS,CALLS_CROSSED}): New macros to reference
-	reg_n_info.
-	(REG_{CHANGES_SIZE,{FIRST,LAST,LAST_NOTE}_UID}): Ditto.
-	(allocate_reg_info): Add declaration.
-
-	* basic-block.h (reg_basic_block): Delete.
-	(REG_BASIC_BLOCK): Use reg_n_info structure.
-
-	* caller-save.c: Change all references to the above arrays to use
-	the corresponding macro to access the reg_n_info array.
-	* combine.c, cse.c, flow.c, global.c, jump.c, local-alloc.c: Ditto.
-	* loop.c, regclass.c, reload1.c, sched.c, stupid.c, unroll.c: Ditto.
-
-	* regclass.c (allocate_reg_info): New function to allocate the
-	reg_info array and initialize the appropriate fields.
-	(reg_scan): Call it.
-
-	* flow.c (allocate_for_life_analysis): Call allocate_reg_info to do
-	the actual allocation.
-
-Thu May 29 15:42:59 1997  Stan Cox  <coxs@dg-rtp.dg.com>
-
-	* i386.md (movsfcc_1, movdfcc_1, movxfcc_1): Use singlemove_string
-	for float conditional move when destination and operands all differ.
-	
-	* i386.h (ASM_OUTPUT_REG_{PUSH,POP}): add %% before register name.
-
-	* go32.h (ASM_OUTPUT_ALIGN): Use .p2align, not byte alignments. 
-
-Wed May 28 20:44:00 1997  Mike Stump  <mrs@cygnus.com>
-
-	* except.c (push_eh_entry): Eliminate start of exception region
-	label, as it isn't used.  Rename end_label to outer_context.
-	(expand_eh_region_start_for_decl): Likewise.
-	(expand_leftover_cleanups): Likewise.
-	(expand_start_all_catch): Likewise.
-	* except.h (eh_entry): Likewise.
-	* except.c (expand_eh_region_end): Likewise.  Jump around the nop
-	that we insert, so that we can optimize it away, if it is unused,
-	also so that flow analysis can tell if we fall through to the end
-	of a function or not so that it can know if a function that returns
-	a value, in fact does or not.
-
-Wed May 28 10:50:09 1997  Jeffrey A Law  (law@cygnus.com)
-
-	* pa.md (jump): Handle out of range unconditional jump
-	when not optimizing.
-
-Thu May 22 00:57:07 1997  Jeffrey A Law  (law@cygnus.com)
-
-	* reload1.c (reload_cse_record_set): Ignore values for SREG if
-	their mode is narrower than DEST_MODE.
-
-	* pa.h (DFMODE_RETURN_STRING): Define.
-	(SFMODE_RETURN_STRING): Likewise.
-	(ASM_DECLARE_FUNCTION_NAME): Use them.
-
-Wed May 21 23:32:02 1997  Jeffrey A Law  (law@cygnus.com)
-
-	* mn10300.md (reload_insi): Handle SUBREG properly.
-
-Tue May 20 22:32:13 1997  Jason Merrill  <jason@yorick.cygnus.com>
-
-	* dwarf2out.c (dwarf2out_def_cfa): Set cfa_reg at the top.
-
-Tue May 20 16:57:50 1997  Brendan Kehoe  <brendan@lisa.cygnus.com>
-
-	* cplus-dem.c (do_type): Handle `J'.
-	(demangle_fund_type): Print "complex" for it.
-
-Mon May 19 21:01:53 1997  Jim Wilson  <wilson@cygnus.com>
-
-	* m68k.c (output_move_qimode): Add coldfire support.
-	* m68k.h (PUSH_ROUNDING): Add coldfire support.
-	* m68k.md (scc0_di, scc_di, seq, sne, sgt, sgtu, slt, sltu, sge, sgeu,
-	sle, sleu): Add coldfire support.
-
-Mon May 19 17:53:34 1997  Mike Meissner  <meissner@cygnus.com>
-
-	* rs6000/rs6000.c: (rs6000_pic_func_labelno): New variable to hold
-	the pic label number for the function's LCL label.
-	(rs6000_output_load_toc_table): Use it.
-	(output_prolog): Store current value.
-
-Sun May 18 16:32:08 1997  Michael Meissner  <meissner@cygnus.com>
-
-	* config/dbxcoff.h (ASM_OUTPUT_SOURCE_LINE): Use the macros
-	ASM_{GENERATE,OUTPUT}_INTERNAL_LABEL to create/output the line
-	number label.
-
-Sun May 18 13:55:12 1997  John Vickers (john@rhizik.demon.co.uk)
-
-        * m68k.h (TARGET_SWITCHES): Add new target name, cpu32.
-
-Sun May 18 13:50:10 1997  Pat Rankin  <rankin@eql.caltech.edu>
-
-	* cccp.c (VMS_write, VMS_read): Delete.
-	(safe_write): If MAX_WRITE_LEN is defined, limit
-	incremental write attempts to that amount.
-	(safe_read): Analogous situation for MAX_READ_LEN.
-	* cpplib.c (safe_read): Likewise.
-	* vax/xm-vms.h (MAX_WRITE_LEN, MAX_READ_LEN): Define.
-
-	* vax/xm-vms.h (get_dynamic_handler_chain_libfunc): New macro.
-	(protect_cleanup_actions_with_terminate): New macro.
-
-Sun May 18 08:50:25 1997  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>
-
-	* m68k/linux.h (ASM_COMMENT_START): Define.
-	* m68k/linux-aout.h (ASM_COMMENT_START): Define.
-
-	* reload1.c (reload_cse_regno_equal_p): Check for value using more
-	than one register on a big endian machine.
-
-Sun May 18 08:39:59 1997  Vince Del Vecchio  <vdelvecc@spd.analog.com>
-
-	* loop.c (maybe_eliminate_biv_1): In (set (cc0) <biv>) case,
-	swap compare operands when mult_val < 0 in one additional place.
-
-Sun May 18 08:33:30 1997  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
-
-	* dwarf2out.c (ASM_COMMENT_START): Add default definition.
-
-	* Makefile.in (maintainer-claean): Delete configure.
-
-Sun May 18 08:31:59 1997  Scott Christley <scottc@net-community.com>
-
-	* configure.in: New file.
-	* Makefile.in: Change to utilize autoconf variables.
-	* configure: Now an output file.
-
-Sun May 18 07:48:31 1997  J.T. Conklin  <jtc@netbsd.org>
-
-	* m68k.md (mov[qhs]i,movstrict[qs]i, mulsi3): Use 'Q' constraint
-	for TARGET_5200.
-	* m68k.h (EXTRA_CONSTRAINT): New macro. 
-
-	* m68k.h (TARGET_SWITCHES): Add 68020-60.
-	Mask out bits which indicate a particular processor when a different
-	processor is selected.
-	(MASK_68040_ALSO): Remove.
-	(MASK_68040): Change to be a single bit.
-
-	* m68k.h (TARGET_ALIGN_INT, MASK_ALIGN_INT): New macros.
-	(BIGGEST_ALIGNMENT): Determine according to TARGET_ALIGN_INT.
-	(TARGET_SWITCHES): Add align-int and no-align-int.
-
-	* m68k.md (mov[qhs]i}): Add pair of constraints which allow
-	offsetable memory addresses to be moved to the same for TARGET_5200.
-
-	* m68k.c (output_move_strict{hi,qi}): New functions.
-	* m68k.h (output_move_strict{hi,qi}): Declare.
-	* m68k.md (movstrict*): Changed into define_expands.
-	Split insns into m68k and coldfire specific versions with appropriate
- 	constraints.
-
-Sun May 18 07:26:40 1997  Philippe De Muyter  <phdm@info.ucl.ac.be>
-
-	* libgcc2.c (atexit): Cast malloc and realloc calls.
-
-Sat May 17 16:26:51 1997  Bernd Schmidt  <crux@Pool.Informatik.RWTH-Aachen.DE>
-
-	* final.c (profile_function): Call function_section, not
-	text_section.
-
-Sat May 17 16:01:00 1997  Philippe De Muyter  <phdm@info.ucl.ac.be>
-
-	* cse.c (notreg_cost): New function, extracted from COST macro.
-	(COST): Use notreg_cost.
-
-Sat May 17 15:13:23 1997  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
-
-	* cse.c (cse_insn): Don't record a SRC that's a MEM and the same
-	as a REG_EQUIV note if DEST is set more than once.
-
-Fri May 16 14:50:57 1997  Jeffrey A Law  (law@cygnus.com)
-
-	* pa.c (output_move_double): Handle loading a general register
-	from a scaled indexed memory address.
-	* pa.md (movdf, movdi): Allow scaled loads into general registers.
-
-Fri May 16 13:31:08 1997  Mike Stump  <mrs@cygnus.com>
-
-	* rs6000.c (rs6000_stack_info): Only do eabi setup for "main",
-	when main is the global main, not some nested routine that
-	happens to be called main.
-
-Thu May 15 17:19:50 1997  Mike Stump  <mrs@cygnus.com>
-
-	* except.c (expand_start_all_catch): If the machine needs to
-	perform any actions at the start of an expcetion handler that
-	hasn't already been done, use gen_exception_receiver to emit it.
-	(expand_leftover_cleanups): Likewise.
-	* alpha/alpha.md (exception_receiver): Use it.
-	* pa/pa.h (exception_receiver): Use it.
-
-Thu May 15 08:36:59 1997  Jeffrey A Law  (law@cygnus.com)
-
-	* dbxout.c (dbxout_function_end): Don't subtract one from
-	the end of function scoping stab.
-
-Wed May 14 23:27:09 1997  Jeffrey A Law  (law@cygnus.com)
-
-	* mn10300.md (adddi3, subdi3): Remove expanders and patterns.
-
-Wed May 14 18:51:35 1997  Mike Stump  <mrs@cygnus.com>
-
-	* function.c (expand_function_end): Make sure we finish off any
-	leftover exception handlers.
-
-Tue May 13 14:07:01 1997  Mike Stump  <mrs@cygnus.com>
-
-	* expr.c (expand_builtin_setjmp): Remove setting of
-	current_function_has_nonlocal_goto, as this isn't a goto.
-
-Tue May 13 14:47:40 1997  Richard Earnshaw (rearnsha@cambridge.arm.com)
-
-	* arm.h (CPP_SPEC): Fix typo invoking cpp_endian.
-	* arm/t-semi (LIB2FUNCS_EXTRA): Build fp-bit.c when compiling
-	with -msoft-float.
-	* arm.c: Add prototypes for all static functions.
-	(output_multi_immediate, int_log2): Make static.
-
-	* arm.h (*_SPEC): Remove all references to mle/mbe.
-	* arm/coff.h (MULTILIB_DEFAULTS): Likewise.
-	* arm/t-bare (MULTILIB_OPTIONS): Change options mbe/mle to mbig-endian
-	and mlittle-endian.
-	(MULTILIB_MATCHES): Nothing matches that matters.
-
-Mon May 12 20:42:20 1997  Mike Stump  <mrs@cygnus.com>
-
-	* except.c (expand_start_all_catch): If the machine needs a
-	nonlocal_goto_receiver, add one at the start of the exception
-	handler.
-	(expand_leftover_cleanups): Likewise.
-
-Mon May 12 17:36:28 1997  Jeffrey A Law  (law@cygnus.com)
-
-	* mips.c (move_operand): Accept any general operand after reload
-	has started.
-
-Fri May  9 14:29:33 1997  Jeffrey A Law  (law@cygnus.com)
-
-	* mn10300.md (udivmodhi4, divmodhi4): Remove expander, give
-	corresponding pattern [u]divmodhir4 name.  Clear MDR register
-	in the udivmodhi4 pattern itself.
-	(clear_mdr): Delete pattern.
-
-Thu May  8 18:20:30 1997 Richard Earnshaw (rearnshaw@cambridge.arm.com)
-
-	* arm/aout.h (ASM_OUTPUT_LONG_DOUBLE): Delete call to 
-	arm_increase_location.
-	(ASM_OUTPUT_{DOUBLE,FLOAT,INT,SHORT,CHAR,BYTE,ASCII,SKIP}): Likewise.
-	(ASM_OUTPUT_ALIGN): Delete all code refering to arm_text_location.
-
-	* arm.c (arm_increase_location, get_prologue_size): Delete.
-	(arm_naked_function_p): Add declaration.
-	(arm_pic_register): Define.
-	(all_procs): Delete entries for arm{60,620,70,7d,7di,700i,710c}; add
-	entries for arm{7m,7500fe,8}, strongarm and strongarm110.
-	(arm_override_options): Rework so that configure can properly set
-	the default processor type. Add a warning that PIC code is not yet 
-	supported.
-	(legitimate_pic_operand_p, legitimize_pic_address): New functions.
-	(is_pic, arm_finalize_pic): New functions.
-	(arm_adjust_cost): New function.
-	(const_pool_offset, arm_backwards_branch, short_branch): Delete.
-	(arm_insn_not_targeted): Delete.
-	(add_constant): If generating AOF syntax, then handle pic specially.
-	(output_ascii_pseudo_op): Delete calls to arm_increase_location.
-	(function_really_clobbers_lr): Calls followed by a barrier don't
-	clobber the link register.
-	(output_func_prologue): Handle AOF syntax pic code.
-	(output_func_epilogue): Handle cases where lr_save_eliminated is set.
-	Delete call to arm_increase_location.
-	(arm_asm_output_label): Simplify, since we no-longer need to cache the
-	label's address.
-	(aof_pic_entry): New function to keep track of pic symbols.
-	(aof_dump_pic_table): New function.
-
-	* arm.h (TARGET_CPU_arm*, TARGET_CPU_strongarm*, TARGET_CPU_generic):
-	define.
-	(CPP_ARCH_DEFAULT_SPEC): Set up based on setting of TARGET_CPU_DEFAULT.
-	(CPP_SPEC): Split up into sub-rule calls.
-	(CPP_CPU_SPEC): Add default definition.
-	(CPP_APCS_PC_SPEC, CPP_APCS_PC_DEFAULT_SPEC): Add definitions.
-	(CPP_FLOAT_SPEC, CPP_FLOAT_DEFAULT_SPEC): Add definitions.
-	(CPP_ENDIAN_SPEC, CPP_ENDIAN_DEFAULT_SPEC): Add definitions.
-	(CC1_SPEC): Map legacy -m[236] onto -mcpu=.. and -mapcs-{26,32} as
-	appropriate. Similarly for -mbe and -mle to -m{big,little}-endian.
-	(EXTRA_SPECS): Define.
-	(enum processor_type): New types for arm8 and strongarm.
-	(CONDITIONAL_REGISTER_USAGE): Handle flag_pic.
-	(LEGITIMIZE_ADDRESS): Likewise.
-	(ADJUST_COST): Define.
-	(PIC_OFFSET_TABLE_REGNUM): Define.
-	(FINALIZE_PIC): Define.
-	(LEGITIMATE_PIC_OPERAND_P): Define.
-	(OUTPUT_INT_ADDR_CONST): Define.
-	(ASM_OUTPUT_MI_THUNK): Delete calls to arm_increase_location.
-	(MASK_RETURN_ADDR): Use TARGET_APCS_32 not TARGET_6.
-
-	* arm.md (attr cpu): Add new cpu types for arm8 and strongarm.
-	(attr ldsched): New attribute, set if processor has a load_delay slot.
-	(function_unit core): Rework to handle load delay slots.
-	(function_unit loader): New function unit.
-	(movsi): Handle pic.
-	(pic_load_addr): New expand.
-	(*pic_load_addr_based_insn, pic_add_dot_plus_eight): New patterns.
-	(peepholes to cause flow to return to a label after a function call):
-	Delete, these have been disabled for a while now.
-
-	* arm/riscix.h (CPP_SPEC): Rewrite using new sub-components.
-	(SUBTARGET_CPU_DEFAULT): Set to TARGET_CPU_arm2.
-	* arm/riscix1-1.h (CPP_SPEC): Rewrite using new sub-components.
-	(SUBTARGET_CPU_DEFAULT): Set to TARGET_CPU_arm2.
-	* arm/semi.h: (CPP_SPEC): Delete.
-	(PROCESSOR_DEFAULT): Delete.
-	(CPP_APCS_PC_DEFAULT_SPEC): Define.
-	* arm/semiaof.h (CPP_SPEC): Delete.
-	(CPP_APCS_PC_DEFAULT_SPEC): Define.
-	* arm/t-semi (LIBGCC1_TEST): Don't build it.
-	(MULTILIB_{OPTIONS,DIRNAMES,EXCEPTIONS}): Build a suitable set of
-	cross libraries.
-	(LIBGCC): Set to stmp-multilib.
-	(INSTALL_LIBGCC): Set to install-multilib.
-
-Thu May  8 15:20:46 1997  Stan Cox  <coxs@dg-rtp.dg.com>
-
-	* i386.c (output_float_compare): For pentiumpro use fcomip
-	followed by a float stack pop for "compare;pop;pop" cases.
-
-Thu May  8 13:20:20 1997  Chris Torek  <torek@elf.bsdi.com>
-
-	* fold-const.c (fold, truth_andor): Disable optimization for 
-	side effects on RHS.
-
-Wed May  7 15:43:57 1997  Mike Stump  <mrs@cygnus.com>
-
-	* except.c (start_dynamic_handler): Fix so that we can use
-	__builtin_setjmp, and default to using __builtin_setjmp instead of
-	setjmp.
-	* expr.c (expand_builtin_setjmp): New routine, split out from
-	existing inline code from expand_builtin.
-	(expand_builtin): Split out code into expand_builtin_setjmp.
-	* expr.h (expand_builtin_setjmp): Add declaration.
-	* libgcc2.c (__sjthrow): Default to using __builtin_setjmp instead
-	of setjmp.
-	(__sjpopnthrow): Likewise.
-	* optabs.c (init_optabs): Likewise.
-
-Wed May  7 18:01:24 1997  Samuel Figueroa  <Samuel_Figueroa@next.com>
-
-	* rs6000.md (insv): Only combine insert with shift if
-	remaining source bits >= destination field size.
-
-Tue May  6 15:48:52 1997  Jason Merrill  <jason@gerbil.cygnus.com>
-
-	* dwarf2out.c (dwarf2out_begin_prologue): Increment
- 	current_funcdef_number here.
-	(dwarf2out_end_epilogue): Not here.
-
-Mon May  5 18:52:32 1997  Jeffrey A Law  (law@cygnus.com)
-
-	* h8300.c (notice_update_cc): Use CC_SET_ZN and CC_SET_ZNV.
-	(shift_one, shift_two): Set CC_NO_CARRY as needed.  Remove
-	references to CC_OVERFLOW_0.
-	(emit_a_shift): Similarly.
-	* h8300.h (CC_OVERFLOW_0): Remove.
-	* h8300.md: Use set_zn and set_znv for cc0 tracking.
-	(bCC): Restore the comparison is CC_OVERFLOW_UNUSABLE is set and
-	the comparison needs the overflow bits.
-
-	* mn10300.c (notice_update_cc): Use CC_SET_ZN and CC_SET_ZNV.
-	* mn10300.h (CC_NO_CARRY): Define.
-	* mn10300.md: Use "set_zn" and "set_znv" to more accurately
-	describe cc0 status.
-
-Fri May  2 17:00:33 1997  Jason Merrill  <jason@yorick.cygnus.com>
-
-	* dwarf2out.c: Reorganize, moving .debug_frame support to the top
-	of the file, and compile it if INCOMING_RETURN_ADDR_RTX is defined
-	even if DWARF2_DEBUGGING_INFO isn't.
-	(EH_FRAME_SECTION): New macro.
-	(output_call_frame_info): Handle .eh_frame variant.
-	(dwarf2out_def_cfa): Update cfa_*{reg,offset}.
-	(dwarf2out_frame_debug): Move cfa_*{reg,offset} to file scope.
-	(dwarf2out_end_epilogue): Increment current_funcdef_number here.
-	(dwarf2out_decl): Not here.
-	(dwarf2out_frame_init, dwarf2out_frame_finish): New fns.
-	(dwarf2out_init, dwarf2out_finish): Call them.
-	(output_die): Add missing 'case 8:'
-	(dwarf2out_decl): Revert other context_die = NULL change.
-	(add_bound_info): Restore default case.
-
-Fri May  2 15:30:16 1997  Doug Evans  <dje@seba.cygnus.com>
-
-	* m32r/m32r.h (LIT_NAME_P): New macro.
-	(SMALL_NAME_P): Use it.
-	(ASM_OUTPUT_ALIGNED_COMMON): Don't output to scommon if -msdata=none.
-	* m32r/m32r.c (addr24_operand): Handle literals.
-	(m32r_output_function_prologue): Use IMMEDIATE_PREFIX.
-	(m32r_output_function_epilogue): Likewise.  Use shorter add insn if
-	able.
-
-Fri May  2 14:40:44 1997  David Edelsohn  <edelsohn@mhpcc.edu>
-
-	* rs6000.h (RS6000_ALIGN): Macro renamed from ALIGN.
-	* rs6000.c (rs6000_stack_info): Use it.
-
-Fri May  2 14:15:54 1997  Ian Lance Taylor  <ian@cygnus.com>
-
-	* reload1.c (reload_cse_noop_set_p): When checking the values
-	equivalent to sreg, make sure the mode is right.
-
-Fri May  2 12:53:03 1997  Jeffrey A Law  (law@cygnus.com)
-
-	* reload1.c (reload_cse_invalidate_regno): Properly set
-	the mode for invalidate_regno_rtx.
-
-Thu May  1 14:57:35 1997  Jeffrey A Law  (law@cygnus.com)
-
-	* pa.md (call_internal_symref): Fix typo.
-
-Thu May  1 14:44:17 1997  Jim Wilson  <wilson@cygnus.com>
-
-	* mips.c (mips_asm_file_start): Use new macro TARGET_FILE_SWITCHING.
-	(mips_asm_file_end): Likewise.
-	* mips.h (TARGET_FILE_SWITCHING): Define.
-	(NO_DBX_FUNCTION_END): Define.
-
-Thu May  1 09:08:40 1997  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>
-
-	* m68k.c (output_addsi3): Replace "\\;" by "\n\t" in
-	assembler templates.
-
-Thu May  1 09:00:42 1997  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
-
-	* integrate.c (subst_constants, case SUBREG): Cancel changes once
-	done with result.
-
-Wed Apr 30 19:45:56 1997  Jim Wilson  <wilson@cygnus.com>
-
-	* mips.c (override_options): Set mips_split_addresses only if
-	TARGET_SPLIT_ADDRESSES is set.
-	* mips.h (MASK_SPLIT_ADDR, TARGET_SPLIT_ADDRESSES): New macros.
-	(TARGET_SWITCHES): Add -msplit-addresses, -mno-split-addresses.
-	* configure (mips*-*-ecoff*, mips*-*-elf*): Set MASK_SPLIT_ADDR
-	bit in target_cpu_default2.
-
-	* flags.h (current_function_is_thunk): Add extern to declaration.
-
-	* dbxout.c (dbxout_function): Test NO_DBX_FUNCTION_END at run time
-	instead of compile time.
-
-	* unroll.c (set_dominates_use): In second loop, add check for copy_end.
-
-	* mips.md (paradoxical_extendhidi2, paradoxical_extendqidi2): New
-	patterns.
-
-Wed Apr 30 02:23:24 1997  Jason Merrill  <jason@yorick.cygnus.com>
-
-	* output.h (named_section): Add reloc argument.
-	(DECL_READONLY_SECTION): New macro.
-	* varasm.c (named_section): Add reloc argument, pass it to
- 	ASM_OUTPUT_SECTION_NAME.
-	(UNIQUE_SECTION, UNIQUE_SECTION_P): Provide defaults.
-	(function_section): Pass reloc argument to named_section.
-	(variable_section, exception_section): Likewise.
-	(output_constant_def_contents): Likewise.
-	(assemble_start_function): Use UNIQUE_SECTION_P.  UNIQUE_SECTION is
- 	now a statement.
-	(assemble_variable): Likewise.
-	* mips/iris6.h (ASM_OUTPUT_SECTION_NAME): Add reloc arg,
- 	use DECL_READONLY_SECTION.
-	* psos.h, ptx4.h, a29k.h, alpha/elf.h, arm/coff.h, h8300.h: Likewise.
-	* i386/go32.h, i386/sco5.h, m68k/coff.h, mips/elf64.h: Likewise.
-	* mips/netbsd.h, pa.h, rs6000/sysv4.h, sh.h, sparc/sysv4.h: Likewise.
-	* config/svr4.h	(SELECT_SECTION): Use DECL_READONLY_SECTION.
-	(ASM_OUTPUT_SECTION_NAME): Likewise, add reloc argument.
-	(MAKE_DECL_ONE_ONLY): Just set DECL_WEAK.
-	(UNIQUE_SECTION, UNIQUE_SECTION_P): Define.
-	* i386/cygwin32.h (UNIQUE_SECTION_P): Define.
-	(SUPPORTS_ONE_ONLY): Define.
-	(MAKE_DECL_ONE_ONLY): Lose.
-	(ASM_OUTPUT_SECTION_NAME): Add reloc arg, use DECL_READONLY_SECTION.
-	* i386/winnt.c (i386_pe_unique_section): Add reloc arg, 
-	use DECL_READONLY_SECTION.
-
-	* mips/iris6.h (CTORS_SECTION_ASM_OP): Change aligment based on ABI.
-	(DTORS_SECTION_ASM_OP): Likewise.
-
-Tue Apr 29 16:08:07 1997  Jeffrey A Law  (law@cygnus.com)
-
-	* pa/lib1funcs.asm (divnorm, modnorm, exitdiv): Fix code to
-	negate SImode values.
-
-Tue Apr 29 12:54:14 1997  Mike Stump  <mrs@cygnus.com>
-
-	* except.c (expand_eh_region_start_tree): Add DECL argument so we
- 	can better track why the region was made for error reporting.
-	* except.h (expand_eh_region_start_tree): Likewise.
-	* tree.h (expand_dhc_cleanup): Likewise.
-	(expand_dcc_cleanup): Likewise.
-	* except.c (expand_eh_region_start_for_decl): New routine.
-	* except.h (expand_eh_region_start_for_decl): Likewise.
-	* stmt.c (expand_decl_cleanup): Add DECL to call of
-	expand_eh_region_start_tree.
-	(expand_dcc_cleanup): Likewise.
-	(expand_dhc_cleanup): Likewise.
-	
-	(expand_start_case): Switches introduce conditional contexts.
-	(expand_start_case_dummy): Likewise.
-	(expand_start_case_dummy): Likewise.
-	(expand_end_case): Likewise.
-
-Tue Apr 29 11:45:09 1997  Jason Merrill  <jason@yorick.cygnus.com>
-
-	* dwarf2out.c (dwarf2out_decl): Undo earlier change.
-	(constant_size): Likewise.
-	(gen_subprogram_die): Handle NULL context_die.
-
-	* mips/iris6.h (ASM_OUTPUT_CONSTRUCTOR): Fix for -mabi=64.
-	(ASM_OUTPUT_DESTRUCTOR): Likewise.
-
-Mon Apr 28 09:10:19 1997  Jeffrey A Law  (law@cygnus.com)
-
-	* h8300.c (push_order, pop_order): Add missing initializer
-	entries.
-
-Fri Apr 25 19:39:43 1997  J"orn Rennecke <amylaar@cygnus.co.uk>
-
-	* h8300.c (output_adds_subs): check for adding 0.
-
-Fri Apr 25 14:52:31 1997  Jim Wilson  <wilson@cygnus.com>
-
-	* configure (i[3456]86-*-freebsdelf*, i[3456]86-*-freebsd*): Use
-	t-freebsd instead of x-freebsd.
-	* i386/t-freebsd: Renamed from x-freebsd.
-
-Fri Apr 25 12:16:20 1997  Stan Cox  <coxs@dg-rtp.dg.com>
-
-	* go32.h (DBX_*): Use definitions from config/dbxcoff.h instead.
-
-Fri Apr 25 11:55:54 1997  Jason Merrill  <jason@yorick.cygnus.com>
-
-	* i386/cygwin32.h (MULTIPLE_SYMBOL_SPACES): Define.
-
-Thu Apr 24 18:32:56 1997  Jason Merrill  <jason@yorick.cygnus.com>
-
-	* i386/winnt.c (i386_pe_unique_section): New fn.
-	* i386/cygwin32.h (UNIQUE_SECTION): Define.
-	(MAKE_DECL_ONE_ONLY): Define.
-	(ASM_OUTPUT_SECTION_NAME): Support DECL_ONE_ONLY.
-
-	* c-decl.c (implicitly_declare): Don't set DECL_ARTIFICIAL.
-
-Thu Apr 24 17:11:23 1997  Jim Wilson  <wilson@cygnus.com>
-
-	* m68k.h (MACHINE_STATE_SAVE, MACHINE_STATE_RESTORE): Add
-	TARGET_5200 support.
-
-Thu Apr 24 16:39:25 1997  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
-
-	* stmt.c (pushcase_range): Check for null range first.
-
-Wed Apr 23 23:06:28 1997  Ian Lance Taylor  <ian@cygnus.com>
-
-	* reload1.c (reload_cse_record_set): Use push_operand to check for
- 	changes to the stack pointer.
-
-Wed Apr 23 19:56:01 1997  Jason Merrill  <jason@yorick.cygnus.com>
-
-	* calls.c (expand_call): If we're in a thunk, pass through invisible
- 	references instead of making a copy.
-	* flags.h: Add current_function_is_thunk.
-	* function.c: Likewise.
-	(init_function_start): Initialize it.
-	(push_function_context_to): Save it.
-	(pop_function_context_from): Restore it.
-	* function.h (struct function): Add is_thunk.
-
-Wed Apr 23 17:47:25 1997  Jeffrey A Law  (law@cygnus.com)
-
-	* mn10300.c (secondary_reload_class): Handle more cases where we
-	need secondary reloads.
-	(impossible_plus_operand): Accept anything that involves addition
-	of the stack pointer.
-	* mn10300.md (reload_insi): Always load the stack pointer into
-	the destination (which is always an address register).
-	* mn10300.h (STORE_FLAG_VALUE): Remove definition.
-	* xm-mn10300.h: Declare malloc, realloc, calloc and free.
-
-Wed Apr 23 14:28:30 1997  Mike Stump  <mrs@cygnus.com>
-
-	* expr.h (sjthrow_libfunc): Add support for setjmp/longjmp based
-	exception handling.
-	(sjpopnthrow_libfunc): Likewise.
-	(terminate_libfunc): Likewise.
-	(setjmp_libfunc): Likewise.
-	(longjmp_libfunc): Likewise.
-	(get_dynamic_handler_chain_libfunc): Likewise.
-	* expr.c (expand_expr, case TRY_CATCH_EXPR): Likewise.
-	(expand_expr, case POPDCC_EXPR): Likewise.
-	(expand_expr, case POPDHC_EXPR): Likewise.
-	* stmt.c (mark_block_as_eh_region): Likewise.
-	(mark_block_as_not_eh_region): Likewise.
-	(is_eh_region): Likewise.
-	(conditional_context): Likewise.
-	(expand_start_bindings): Likewise.
-	(expand_end_bindings): Likewise.
-	(expand_decl_cleanup): Likewise.
-	(expand_dcc_cleanup): Likewise.
-	(expand_dhc_cleanup): Likewise.
-	(expand_cleanups): Likewise.
-	* tree.h (mark_block_as_eh_region): Likewise.
-	(mark_block_as_not_eh_region): Likewise.
-	(is_eh_region): Likewise.
-	(conditional_context): Likewise.
-	(expand_dhc_cleanup): Likewise.
-	* except.c (exception_via_longjmp): Likewise.
-	(protect_cleanup_actions_with_terminate): Likewise.
-	(current_function_dhc): Likewise.
-	(current_function_dcc): Likewise.
-	(add_partial_entry): Likewise.
-	(get_dynamic_handler_chain): Likewise.
-	(get_dynamic_cleanup_chain): Likewise.
-	(start_dynamic_cleanup): Likewise.
-	(start_dynamic_handler): Likewise.
-	(expand_eh_region_start_tree): Likewise.
-	(expand_eh_region_start): Likewise.
-	(expand_eh_region_end): Likewise.
-	(emit_throw): Likewise.
-	(expand_leftover_cleanups): Likewise.
-	(expand_start_all_catch): Likewise.
-	(expand_end_all_catch): Likewise.
-	(protect_with_terminate): Likewise.
-	(start_eh_unwinder): Likewise.
-	(end_eh_unwinder): Likewise.
-	(init_eh_for_function): Likewise.
-	(save_eh_status): Likewise.
-	(restore_eh_status): Likewise.
-	(exception_optimize): Likewise.
-	* optabs.c (sjthrow_libfunc): Likewise.
-	(sjpopnthrow_libfunc): Likewise.
-	(terminate_libfunc): Likewise.
-	(setjmp_libfunc): Likewise.
-	(longjmp_libfunc): Likewise.
-	(get_dynamic_handler_chain_libfunc): Likewise.
-	(init_optabs): Likewise.
-	* except.h: Likewise.
-	* libgcc2.c (__default_terminate): Likewise.
-	(__terminate): Likewise.
-	(__get_dynamic_handler_chain): Likewise.
-	(__sjthrow): Likewise.
-	(__sjpopnthrow): Likewise.
-	* toplev.c (f_options): Likewise.
-	* tree.def (TRY_CATCH_EXPR): Likewise.
-	(POPDHC_EXPR): Likewise.
-	(POPDCC_EXPR): Likewise.
-	* config/pa/pa.h: JMP_BUF_SIZE define.
-	* config/sparc/sparc.h: JMP_BUF_SIZE define.
-
-	* expr.h (cleanups_this_call): Transform uses of cleanups_this_call
-	into uses of the cleanups managed by the block code
-	(expand_start_bindings and friends).  Remove defer_cleanups_to and
-	expand_cleanups_to, and use start_cleanup_deferal and
-	end_cleanup_deferal instead.  Add exception_region,
-	target_temp_slot_level, conditional_code,
-	last_unconditional_cleanup and cleanup_ptr to struct nesting to
-	facilitate conditional cleanups.
-	* expr.c (cleanups_this_call): Likewise.
-	(init_expr): Likewise.
-	(save_expr_status): Likewise.
-	(restore_expr_status): Likewise.
-	(store_expr): Likewise.
-	(expand_expr): Likewise.
-	(defer_cleanups_to): Likewise.
-	(expand_cleanups_to): Likewise.
-	(do_jump, case TRUTH_ANDIF_EXPR): Likewise.
-	(do_jump, case TRUTH_ORIF_EXPR): Likewise.
-	(do_jump, case COND_EXPR): Likewise.
-	* stmt.c (struct nesting): Likewise.
-	(expand_return): Likewise.
-	(expand_start_bindings): Likewise.
-	(expand_end_bindings): Likewise.
-	(expand_cleanups): Likewise.
-	(start_cleanup_deferal): Likewise.	
-	(end_cleanup_deferal): Likewise.	
-	* tree.h (start_cleanup_deferal): Likewise.
-	(end_cleanup_deferal): Likewise.
-	* calls.c (expand_call): Likewise.
-	* function.h (struct function): Likewise.
-
-	* except.c (asynchronous_exceptions): Support
-	-fasynchronous_exceptions.
-	(can_throw): Likewise.
-	* toplev.c (f_options): Likewise.
-
-	* flags.h (flag_short_temps): Remove support for short temps.
-	* calls.c (expand_call): Likewise.
-	* toplev.c (flag_short_temps): Likewise.
-
-	* stmt.c (expand_start_target_temps): Add for convenience.
-	(expand_end_target_temps): Likewise.
-	* except.c (jumpif_rtx): Likewise.
-	* except.c (jumpifnot_rtx): Likewise.
-
-	* stmt.c: Remove all traces of empty_cleanup_list.
-
-Wed Apr 23 17:26:40 1997  Ian Lance Taylor  <ian@cygnus.com>
-
-	* reload1.c (reload_cse_mem_conflict_p): Don't assume that a
-	SUBREG can not conflict with a MEM.
-
-Wed Apr 23 09:48:58 1997  Oliver Kellogg  (oliver.kellogg@space.otn.dasa.de)
-
-	* 1750a.md (cmphi): Fixed when next CC user is unsigned.
-	(mov[hq]i-[23]): New patterns for mem-indirect moves.
-	(movhf,movtqf): Corrected.
-	* 1750a.c (memop_valid): Memory indirection now valid.
-	(nonindirect_operand): Remove.
-	(print_operand): Fix the 'J' output modifier.
-	* 1750a.h (FRAME_POINTER_REQUIRED): Not required.
-	(INITIAL_FRAME_POINTER_OFFSET,FIX_FRAME_POINTER_ADDRESS): Undefine.
-	(FUNCTION_PROLOGUE,FUNCTION_EPILOGUE): Honor -fomit-frame-pointer.
-	(ELIMINABLE_REGS,CAN_ELIMINATE,INITIAL_ELIMINATION_OFFSET): Defined.
-	(PREFERRED_RELOAD_CLASS): Corrected.
-	(CONST_COSTS,ADDRESS_COST,REGISTER_MOVE_COST,MEMORY_MOVE_COST):
-	Slight adjustments.
-	(ASM_APP_ON,ASM_APP_OFF): Corrected.
-	* ms1750.inc (DUCR.M,DUC.M): Defined.
-
-Wed Apr 23 09:41:35 1997  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>
-
-	* reload.c (push_reload): Fix last argument of the call to
-	find_dummy_reload.
-
-Wed Apr 23 09:29:14 1997  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
-
-	* configure (i[3456]86-next-*, m68k-next-nextstep{2,3}*):
-	Remove out_file and add extra_objs.
-	* config/nextstep.c: Add includes for config.h, stdio.h, and flags.h.
-	* {i386,m68k}/t-next (nextstep.o): New rule.
-	* m68k/next.h: Remove include of machmode.h.
-	* {i386,m68k}/next.c: Files deleted.
-
-Tue Apr 22 20:45:29 1997  Jason Merrill  <jason@yorick.cygnus.com>
-
-	* sparc.h (DBX_CONTIN_LENGTH): Shrink to 1000.
-
-Tue Apr 22 18:21:20 1997  Jim Wilson  <wilson@cygnus.com>
-
-	* dwarf2out.c (gen_variable_dir):  Add test for DW_AT_declaration to
-	the old_die if statement, and delete assertion for it.
-	(decl_ultimate_origin): Remove last change.
-
-Tue Apr 22 10:22:27 1997  Jeffrey A Law  (law@cygnus.com)
-
-	* mn10300.c (expand_prologue): End the current sequence before
-	counting the tst insns in the current function.  Start a new
-	one before emitting any prologue instructions.
-
-	* mn10300.h (REGISTER_MOVE_COST): Bump up cost of moves in the
-	same class.
-
-	* mn10300.md (untyped_call): New expander.
-
-Mon Apr 21 16:30:21 1997  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
-
-	* cse.c (fold_rtx, case PLUS): When seeing if negative of constant
-	is around, make sure not dealing with largest negative.
-
-Mon Apr 21 13:57:53 1997  Jim Wilson  <wilson@cygnus.com>
-
-	* mips/t-ecoff: Set TARGET_LIBGCC2_CFLAGS instead of LIBGCC2_CFLAGS.
-
-	* m68k.c (output_addsi3): New function.  From addsi3 pattern.
-	* m68k.h (output_addsi3): Add declaration.
-	* m68k.md (movqi+2): Add address registers.
-	(movxf+1): Disable for TARGET_5200.
-	(movxf+2): New pattern for TARGET_5200.
-	(addsi3): Add define_expand.  Move code to output_addsi3.
-	(addsi3_internal): Renamed from addsi3.  Disable for TARGET_5200.
-	(addsi3_5200): New pattern for TARGET_5200.
-
-Sun Apr 20 10:45:35 1997  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
-
-	* fold-const.c (operand_equal_p): Constants are not equal if there
-	has been an overflow.
-
-	* toplev.c (compile_file): Shorten "branch-probabilities" in
- 	output of times.
-
-	* alpha/vms.h (MOD[SD]I3_LIBCALL): Call ots$rem, not ots$mod.
-	(DWARF2_DEBUGGING_INFO): Define.
-
-	* alpha.c (alpha_need_linkage): Call get_identifier.
-
-	* rs6000.c (rs6000_output_load_toc_table): New function.
-	(output_prolog): Call it instead of doing it directly.
-	* rs6000.md (nonlocal_goto_receiver): New pattern.
-
-	* dwarf2out.c: Major cleanup; mostly reformatting.
-	Include expr.h.
-	Undefine inline ifndef __GNUC__; never define to include static.
-	Add "static" to header of all inlined functions.
-	Add declarations for all static functions, with prototypes.
-	(addr_const_to_string): Use HOST_WIDE_INT_PRINT_* macros.
-	(add_AT_*, new_{die,loc_descr,cfi): Don't check for xmalloc
-	returning zero.
-	(modified_type_die): Add missing parm on recursive call.
-	({reg,based}_loc_descriptor): Add missing arg to call to new_loc_descr.
-	(add_const_value_attribute): Use REAL_VALUE_TYPE for fp calculations.
-	(output_call_frame_info): Add missing arg to output_cfi call.
-	(dwarf2out_def_cfa): Local variable OLD_REG must be unsigned long.
-	* Makefile.in (dwarf2out.o): Includes expr.h.
-	
-	* dwarf2out.c: Cast first arg in all calls to bzero to char *.
-	(decl_ultimate_origin): Return NULL if equal to decl.
-	(constant_size): Never return more than 4.
-	(value_format, case 8): New case.
-	(dwarf2out_frame_debug): Use HARD_FRAME_POINTER_REGNUM.
-	(based_loc_descr): Likewise.
-	(add_bound_info): Delete default case.
-	Add cases for CONVERT_EXPR and NON_LVALUE_EXPR; treat like NOP_EXPR.
-	Change NOP_EXPR to to recursive call.
-	(add_type_attribute): Ignore unnamed subtype of integral or FP.
-	(gen_subprogram_die): Use reg_loc_descriptor.
-	(dwarf2out_decl): Ignore nested functions.
-
-	* fix-header.c, protoize.c, gcov.c: Use symbolic codes for exit.
-
-	* final.c (profile_function): Only call ASM_OUTPUT_REG_{PUSH,POP}
-	if defined.
-
-	* expr.c ({move,clear}_by_pieces_1, expand_assignment): Ensure
-	we have unshared rtx before changing flags.
-	(store_{constructor,field}): Likewise.
-	(expand_expr, case COMPONENT_REF): Likewise.
-	(store_expr): Check if TEMP and TARGET are same with rtx_equal_p.
-
-	* emit-rtl.c (change_address, init_emit): Delete forward references.
-	(rtl_obstack, stack_depth, max_stack_depth): Delete extern decls.
-
-Fri Apr 18 18:25:52 1997  Jim Wilson  <wilson@cygnus.com>
-
-	* function.c (instantiate_decls): For DECL_INCOMING_RTL, use max
-	of type size and mode size in instantiate_decl call.
-
-	* fixincludes (sys/lc_core.h): Fix OSF1/4.x namespace pollution.
-
-Wed Apr 16 19:36:53 1997  Jason Merrill  <jason@yorick.cygnus.com>
-
-	* dwarf2out.c (add_bound_info): Use a DIE instead of a location
-	expression for variable bounds.  Trust a MEM rtx even when
-	optimizing.
-	(DWARF_FRAME_RETURN_COLUMN): Default to FIRST_PSEUDO_REGISTER.
-
-	* expr.c (expand_expr, case RTL_EXPR): If there is no sequence,
- 	don't set it to const0_rtx.
-	* tree.c (array_type_nelts): Don't return any SAVE_EXPRs.
-
-Mon Apr 14 18:12:57 1997  David Edelsohn  <edelsohn@mhpcc.edu>
-
-	* rs6000.h (RS6000_ITRUNC, RS6000_UITRUNC): Prepend underscores.
-	(RS6000_MCOUNT): New macro.
-	(ASM_FILE_START): Use RS6000_MCOUNT.
-	* rs6000.c (output_function_profiler): Use RS6000_MCOUNT.
-	* rs6000/aix31.h (RS6000_{ITRUNC,UITRUNC,MCOUNT}): New macros.
-
-Mon Apr 14 14:37:27 1997  Jeffrey A Law  (law@cygnus.com)
-
-	* mn10300.c (can_use_return_insn): Include outgoing argument
-	area in size computation.
-	(expand_prologue): Likewise.  No longer diddle with sequences.
-	Put register saves just before outgoing argument area.
-	(expand_epilogue): Similarly.
-	(impossible_plus_operand): New function.
-	* mn10300.h (FRAME_POINTER_REQUIRED): Never require a frame pointer.
-	(ACCUMULATE_OUTGOING_ARGS, OUTGOING_REG_PARM_STACK_SPACE): Define.
-	(impossible_plus_operand): Declare.
-	* mn10300.md (reload_insi): New expander to handle pathological
-	reload cases.
-	(addsi3): Fix CC status.
-
-	* mn10300.h (FUNCTION_VALUE): Return addresses in $a0.
-	(FUNCTION_VALUE_REGNO_P): Corresponding changes.
-	* mn10300.md (call_value_internal): Allow output to be in an
-	address register.
-
-	* calls.c (emit_library_call): Handle saving of stack slots when
-	ACCUMULATE_OUTGOING_ARGS is defined.
-	(emit_library_call_value): Likewise.
-
-Mon Apr 14 14:48:15 1997  Jim Wilson  <wilson@cygnus.com>
-
-	* sh.md (xtrct_left, xtrct_right): New patterns.
-
-	* combine.c (get_last_value_validate): New argument insn.
-	Add check for memory reference clobbered by later store.
-	(record_value_for_reg, get_last_values): Pass in new argument.
-
-Mon Apr 14 14:03:18 1997  Mike Meissner  <meissner@cygnus.com>
-
-	* configure (powerpc --with-cpu=x): Add embedded powerpcs and 604e.
-
-	* rs6000.c (rs6000_override_options): Recognize -mcpu=801, -mcpu=823,
-	and -mcpu=604e.
-
-Sun Apr 13 18:43:16 1997  Ian Lance Taylor  <ian@cygnus.com>
-
-	* reload1.c (invalidate_regno_rtx): New static variable.
-	(reload_cse_invalidate_regno): Check whether any earlier registers
-	have a multi-register value which includes the register we are
-	invalidating.
-	(reload_cse_regs): Initialize invalidate_regno_rtx.
-
-	* reload1.c (reload_cse_record_set): When setting reg_values for a
-	copy from one register to another, use gen_lowpart_common to
-	adjust the value correctly if the mode changes.
-
-Sun Apr 13 17:24:48 1997  Doug Evans  <dje@cygnus.com>
-
-	* expr.c (move_block_from_reg): Try using an integral mov operation
-	first.
-
-	* calls.c (expand_call): When copying unaligned values into a register,
-	zero out the register first rather than emitting a clobber.
-
-	* integrate.c (copy_rtx_and_substitute): If FRAME_GROWS_DOWNWARD
-	and regno == VIRTUAL_STACK_VARS_REGNUM,	round size of stack slot up
-	before calling assign_stack_temp.
-
-Sun Apr 13 15:29:38 1997  Ulrich Drepper  <drepper@cygnus.com>
-
-	* enquire.c (fake_f_rep): Add missing element name in cast.
-
-Sun Apr 13 15:20:05 1997  J"orn Rennecke <amylaar@cygnus.co.uk>
-
-	* stor-layout.c (layout_record, PCC_BITFIELD_TYPE_MATTERS):
-	Fix sign bug in last change.
-
-Sun Apr 13 15:03:38 1997  J.T. Conklin  <jtc@netbsd.org>
-	
-	* m68k.md (movstricthi): Remove extraneous comparisons.
-
-	* configure (*-*-netbsd): tmake_file now t-netbsd; delete xmake_file.
-	* config/t-netbsd: New file.
-	* config/x-netbsd: Removed.
-
-Sun Apr 13 14:51:25 1997  Richard Earnshaw (rearnsha@armltd.co.uk)
-
-	* cse.c (canon_reg, cse_insn): Don't examine insn_n_dups if
-	recog_memoized fails to find a match.
-
-Sun Apr 13 14:17:26 1997  Ian Lance Taylor  <ian@cygnus.com>
-
-	* reload1.c (reload_cse_noop_set_p): Add insn parameter.  Change
-	all callers.  If deleting the instruction, remove any earlier
-	REG_DEAD note for DREG.
-	(reload_cse_simplify_set): If simplifying, remove any earlier
-	REG_DEAD note for the new source register.
-
-Sun Apr 13 14:12:08 1997  Pat Rankin  <rankin@eql.caltech.edu>
-
-	* libgcc2 (L_bb, L_exit): Use 0 rather than NULL for null pointers.
-
-Sun Apr 13 12:53:03 1997  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>
-
-	* m68k/linux.h (ASM_SPEC): Define.
-	(STRUCT_VALUE_REGNUM, STATIC_CHAIN_REGNUM, INITIALIZE_TRAMPOLINE):
-	Remove definitions, undoing the change of Mar 20 1996. 
-
-	* m68k.c (output_move_qimode): Optimize pushing one byte if source
-	operand does not use stack pointer.
-
-	* m68k.md (rotl[shq]i3, rotl[hq]i3+1): Don't directly modify operand.
-
-	* m68k.md (tstdi): Add missing parallel around the pattern.
-
-Sun Apr 13 12:51:00 1997  Paul Eggert  <eggert@twinsun.com>
-
-	* cccp.c, cpplib.c (do_include): Diagnose #import and
-	#include_next if pedantic and if not in a system header.
-	(do_warning): #warning now causes an error if -pedantic-errors
-	is given; this is needed since #warning isn't ANSI.
-
-	* toplev.c (lang_options): Add -Wundef, -Wno-undef.
-	* c-decl.c (c_decode_option): Ignore -Wundef, -Wno-undef.
-
-	* cccp.c, cexp.y (warn_undef): New variable.
-	* cpplib.h (struct cpp_options): New member warn_undef.
-	(CPP_WARN_UNDEF): New macro.
-
-	* cccp.c (main), cpplib.c (cpp_handle_options): Set warn_undef
-	from -Wundef and -Wno-undef.
-
-	* cppexp.c (cpp_lex) New arg skip_evaluation.
-	(cpp_parse_expr): Pass skip_evaluation to cpp_lex.
-	Abort if cpp_lex returns NAME.
-
-	* cexp.y (exp), cppexp.c (cpp_lex): Optionally warn about undefined
-	identifiers that evaluate to 0.
-
-Sun Apr 13 11:43:16 1997  Joel Sherrill  <joel@OARcorp.com>
-
-        * configure (hppa1.1-*-rtems*): New target.
-        * mips/rtems.h: New file.
-
-Sun Apr 13 09:48:26 1997  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
-
-	* gcov.c (print_usage, open_files): Use FATAL_EXIT_CODE.
-	* collect2.c (fatal_perror, fatal, collect_wait): Likewise.
-
-	* sparc.c (eligible_for_delay_slot): Clean up and make to agree
-	precisely with patterns in MD file.
-	* sparc.md (*return_addsi): Change condition to exclude both ints.
-	(*return_adddi): Likewise.
-	(*return_subsi): New pattern.
-
-	* recog.c (validate_replace_rtx_1, case MINUS): New case.
-	
-Sun Apr 13 08:20:24 1997  Thomas Bushnell  <thomas@gnu.ai.mit.edu>
-
-	* i386/gnu.h (TARGET_VERSION): Redefine.
-
-Sun Apr 13 08:15:31 1997  Bernd Schmidt  <crux@Pool.Informatik.RWTH-Aachen.DE>
-
-	* c-typeck.c (lookup_field): Don't recurse unless FIELD is
-	a RECORD_TYPE or UNION_TYPE.
-
-	* final.c (profile_function): Save the static chain register
-	around the call to the profiler function.
-
-	* loop.c (invariant_p, case REG): Pointers into frame are not
-	invariants if function has nonlocal gotos.
-	* reload1.c (reload): If function has nonlocal label, mark all
-	caller-saved regs as used.
-
-Fri Apr 11 16:49:06 1997  Doug Evans  <dje@seba.cygnus.com>
-
-	* m32r.h (REG_ALLOC_ORDER): Restore to original setting.
-
-	* m32r.h (UPPER16_P): Fix calculation.
-	* m32r.c (two_insn_const_operand): New function.
-	(m32r_print_operand): Handle 'X'.
-	* m32r.md (movsi): Tweak.
-	(*movsi_insn): Output hex value of constants too.
-	(movsi define_split): Add.
-	(andsi3,orsi3,xorsi3): Output hex value of constants too.
-
-Thu Apr 10 18:39:33 1997  Jim Wilson  <wilson@cygnus.com>
-
-	* sh.md (sne): Modified to use negc instead of xor.
-	(sne+1): New define_split for new sne pattern.
-	* sh.c (output_stack_adjust): Reorganize code for readability.
-	If size is negative, negate and subtract it instead of adding it.
-
-Wed Apr  9 13:51:07 1997  J"orn Rennecke <amylaar@cygnus.co.uk>
-
-	* sh.c (output_stack_adjust): When splitting an adjustment into two
-	parts, make sure the stack is aligned at all times.
-
-Tue Apr  8 12:34:38 1997  Jeffrey A Law  (law@cygnus.com)
-
-	* mn10300.h (RETURN_ADDR_RTX): Define.
-
-Mon Apr  7 19:19:57 1997  Jeffrey A Law  (law@cygnus.com)
-
-	* mn10300.c (count_tst_insns): New function.
-	(expand_prologue): Load zero into data and/or address registers
-	if any are free and the function has optimizable tst insns.
-	(output_tst): If a suitable register is known to have the
-	value zero, use it instead of searching for a suitable register.
-	* mn10300.h (zero_dreg, zero_areg): Declare.
-	(FRAME_POINTER_NEEDED): Frame pointers are not needed if the
-	outgoing argument size is zero.
-	* mn10300.md (movXX): Optimize loading zero into an address
-	register if possible.  Optimize loading a DF/DI mode value
-	into an address register from a constant memory address.
-	(addsi3): Provide alternative which doesn't require a matching
-	inout operand.
-	(return): Optimize consecutive return instructions.
-
-Mon Apr  7 17:30:35 1997  J"orn Rennecke <amylaar@cygnus.co.uk>
-
-	* mips/iris5.h (SUBTARGET_CC1_SPEC): Define.
-	(LINK_SPEC, STARTFILE_SPEC): Support -static.
-	* mips/iris6.h (SUBTARGET_CC1_SPEC): Define.
-	(STARTFILE_SPEC, LINK_SPEC): Support -static.
-	* mips.h: (SUBTARGET_CC1_SPEC): Define.
-	(CC1_SPEC): Add subtarget_cc1_spec.
-	(EXTRA_SPECS): Add subtarget_cc1_spec.
-
-Sun Apr  6 12:24:53 1997  Richard Earnshaw (rearnsha@armltd.co.uk)
-
-	* arm.md (incscc): Use a match_operand with cc_register to match
-	the condition code register.
-	(decscc, *condbranch, *condbranch_reversed, *mov_scc): Likewise.
-	(*mov_negscc, *mov_notscc, *cond_return): Likewise.
-	(*cond_return_inverted, *ior_scc, *cond_move): Likewise.
-	(insv): New expand.
-	(andsi_notsi_si): Renamed from *andsi_notsi_si.
-	(andsi_not_shiftsi_si): New insn.
-	(*minmax_arithsi): Don't match this insn if operand1 is an
-	eliminable register.
-	({sin,cos}*): Delete, since the ARM always emulates these its
-	faster to call a library function.
-	(movsicc, *movsicc_insn): Make operand0 an s_register_operand,
-	and operand3 an arm_not_operand.  Use cc_register to match the
-	condition code register.
-	(mov[sd]fcc*): Make operand[0,2] s_register_operands, and operand3
-	the nonmemory_operand.  Use cc_register to match the condition
-	code register.
-	(*ifcompare_plus_move): Move before *ifcompare_arith_move.  Just do
-	a split for the output.
-	(*ifcompare_move_plus): Similarly, but relative
-	to *ifcompare_move_arith.
-	(*if_plus_move, *if_move_plus): New patterns.
-	(*ifcompare_arith_arith): Simplify the alternatives down to just one,
-	and split the insn before output.
-	(*if_arith_arith, *if_arith_move, *if_move_arith): New patterns.
-	(*ifcompare_move_not, *ifcompare_not_move): Simplify and split the
-	insn before output.
-	(*if_move_not, *if_not_move): New patterns.
-	(*ifcompare_shift_move, *ifcompare_move_shift): Simplify and split the
-	insn before output.
-	(*if_shift_move, *if_move_shift): New patterns.
-	(*ifcompare_shift_shift): Simplify and split the insn before output.
-	(*if_shift_shift): New pattern.
-	(*ifcompare_not_arith, *ifcompare_arith_not): Simplify and split the
-	insn before output.
-	(*if_not_arith, *if_arith_not): New patterns.
-	(*ifcompare_neg_move, *ifcompare_move_neg): Simplify and split the
-	insn before output.
-	(*if_neg_move, *if_move_neg): New patterns.
-
-Sat Apr  5 20:17:43 1997  Michael Meissner  <meissner@cygnus.com>
-
-	* rs6000/sol-ci.asm (_environ): Don't make _envrion a common
-	variable, the lastest assembler doesn't let common variables also
-	be a weak symbol.
-
-Fri Apr  4 18:30:12 1997  Jim Wilson  <wilson@cygnus.com>
-
-	* rs6000/rs6000.md (adddi3): Use non_short_cint_operand instead of
-	non_add_cint_operand.
-
-Thu Apr  3 15:08:39 1997  Jeffrey A Law  (law@cygnus.com)
-
-	* mn10300.c (can_use_return_insn): Add size of fixed stack space
-	for function calls into the size of the frame.  */
-	(expand_prologue, expand_epilogue): Likewise.
-	(initial_offset): Corresponding changes..
-	* mn10300.h (OUTGOING_REG_PARM_STACK_SPACE): No longer define.
-	(STACK_POINTER_OFFSET): Define.
-	* mn10300.md (call, call_value expanders): Don't adjust the stack
-	pointer here anymore.
-
-	* mn10300.md (ashlsi3): Remove some alternatives which are no longer
-	needed or desired.
-
-Thu Apr  3 15:06:53 1997  Jim Wilson  <wilson@cygnus.com>
-
-	* local-alloc.c (no_conflict_p): Reject sequences with foreign insns.
-
-	* combine.c (move_deaths): Handle partial REG_DEAD note for
-	multi-reg hard register.
-
-	* function.c (expand_function_start): Emit queue after expanding
-	each dynamic parameter type.
-
-	* mips.c (mips_move_2words): Add SIGN_EXTEND support for SYMBOL_REF,
-	LABEL_REF, and CONST operands.
-
-	* dwarf2out.c: Delete comment referring to README.DWARF.
-
-Wed Apr  2 17:21:23 1997  Jim Wilson  <wilson@cygnus.com>
-
-	* rs6000.md (ashrdi3_power): Mark alternative 0 as early_clobber
-	output.
-
-	* rs6000.md (abssi3_nopower define_split): Switch operands of MINUS.
-	(nabssi3_nopower define_split): Likewise.
-
-Tue Apr  1 19:30:01 1997  Mike Stump  <mrs@cygnus.com>
-	
-	* libgcc2.c (find_exception_table): Fix to logic to deal with
-	functions that are in their own section, such as template
-	instantiations, that cause overlapping EH tables.
-
-Tue Apr  1 17:16:22 1997  Jeffrey A Law  (law@cygnus.com)
-
-	* Makefile.in (USER_H): Add va-mn10300.h
-
-	* ginclude/stdarg.h: Include va-mn10300.h.
-	* ginclude/varargs.h: Likewise.
-	* ginclude/va-mn10300.h: New file.
-	* mn10300.c (expand_prologue): If current_function_varargs is nonzero,
-	flush d0/d1 back into stack.
-	(mn10300_builtin_saveregs): New function.
-	(function_arg, function_arg_partial_nregs): New functions.
-	(initial_offset): Tweak now that the RP save area is allocated
-	and deallocated around each call again.
-	* mn10300.h (FIRST_PARM_OFFSET): Now 4.
-	(FRAME_POINTER_REQUIRED): Require frame pointer for all non-leaf fcns.
-	(REG_PARM_STACK_SPACE): Now 8 bytes.
-	(FUNCTION_ARG_REGNO_P): Update for new parameter passing conventions.
-	(CUMULATIVE_ARGS, INIT_CUMULATIVE_ARGS): Likewise.
-	(FUNCTION_ARG_ADVANCE, FUNCTION_ARG): Likewise.
-	(FUNCTION_ARG_PARTIAL_NREGS): Likewise.
-	(TRAMPOLINE_TEMPLATE): Don't clobber d0 anymore.
-	(TRAMPOLINE_SIZE, INITIALIZE_TRAMPOLINE): Corresponding changes.
-	(EXPAND_BUILTIN_SAVEREGS): Define.
-	* mn10300.md (call, call_value patterns): Allocate and deallocate
-	stack slot for return pointer around each call.
-
-	* mn10300.h (RTX_COSTS): Refine.
-	(CASE_VALUES_THRESHHOLD, NO_FUNCTION_CSE): Likewise.
-	* mn10300.c (output_tst): New function.
-	* mn10300.md (movdi, movdf): Improve code to load constants into regs.
-	(tst insns): Use output_tst to optimize some cases.  Add versions to
-	encourage more zero extensions instead of sign extensions of HImode
-	and QImode values.
-	(divsi3, udivsi3): Remove patterns.  Replaced by...
-	(divmodsi4, udivmodsi4): New expanders/patterns.
-	(andsi3): Optimize "and" operations with certain constants.
-
-Tue Apr  1 09:14:29 1997  J"orn Rennecke <amylaar@cygnus.co.uk>
-
-	* sh.h: (ADJUST_COSTS): Define.
-
-Fri Mar 28 17:46:13 1997  Jim Wilson  <wilson@cygnus.com>
-
-	* Makefile.in (LANGUAGES): Add gcov.
-	(OBJS): Add profile.o.
-	(STAGESTUFF): Add gcov.
-	(profile.o, gcov.o, gcov): Add rules to build them.
-	(cpp.info, gcc.info, gcc.dvi): Add gcov.texi.
-	(install-common): Install gcov.
-	* combine.c (distribute_notes): Handle REG_BR_PROB and REG_EXEC_COUNT
-	REG_NOTES.
-	* sparc.h (OVERRIDE_OPTIONS): Check profile_arc_flag.
-	* final.c (LONG_TYPE_SIZE): Define.
-	(count_instrumented_arcs): New variable.
-	(end_final, profile_after_prologue, leaf_function_p): Add support
-	for profile_arc_flag.
-	(add_bb): Only call CC_STATUS_INIT if HAVE_cc0.
-	* flags.h (profile_arc_flag, flag_test_coverage,
-	flag_branch_probabilities): Declare.
-	* function.c (expand_function_end): Output NOTE_REPEATED_LINE_NUMBER
-	for last line of function.
-	* integrate.c (expand_inline_function): Output
-	NOTE_REPEATED_LINE_NUMBER after inlined call.
-	* jump.c (jump_optimize, follow_jumps, mark_jump_label): Disable some
- 	optimizations when flag_test_coverage and there is a line number note
- 	in the way.
-	(invert_jump): Add REG_BR_PROB when flag_branch_probabililties.
-	* libgcc2.c (__bb_exit_func): Support gcov style output.
-	* reorg.c (mostly_true_jump): Use REG_BR_PROB notes when
-	flag_branch_probabilities.
-	* rtl.c (note_insn_name): Add NOTE_REPEATED_LINE_NUMBER.
-	(reg_note_name): Add REG_BR_PROB and REG_EXEC_COUNT.
-	* rtl.h (enum reg_note): Add REG_BR_PROB and REG_EXEC_COUNT.
-	(REG_BR_PROB_BASE): Define.
-	(NOTE_REPEATED_LINE_NUMBER): Define.
-	* sched.c (update_flow_info): Handle REG_EXEC_COUNT and REG_BR_PROB
-	notes.
-	* toplev.c (branch_prob_dump, profile_arc_flag, flag_test_coverage,
-	flag_branch_probabilities, branch_prob_dump_file, branch_prob_time):
-	New variables.
-	(f_options): Add profile-arcs, test-coverage, and
-	branch-probabilities.
-	(compile_file): Set branch_prob_time.  Pass flag_test_coverage to
-	init_emit_once.  Handle branch_prob_dump.  Call init_branch_prob.
-	Call end_branch_prob. Call output_func_start_profiler.
-	(rest_of_compilation): Handle branch_prob_dump.  Call new
-	branch_prob pass.
-	(main): Set branch_prob_dump.
-	* gcov.c, profile.c, gcov-io.h, gcov.texi: New files.
-
-Thu Mar 27 16:52:52 1997  Stan Cox  <coxs@dg-rtp.dg.com>
-
-	* i386.h (CPP_CPU_DEFAULT): Define if TARGET_CPU_DEFAULT is not set.
-	* i386.h (STACK_BOUNDARY): Define to always be 32.
-
-	From J"orn Rennecke <amylaar@cygnus.co.uk>
-	* i386.md: (zero_extendhisi2+[12]): use true_regnum instead of REGNO for
- 	operand 0.  
-	(zero_extendqisi2+3: use reg_overlap_mentioned_p instead of REGNO
- 	comparison; use true_regnum instead of REGNO for rtx generation.
-
-Wed Mar 26 12:34:21 1997  Ian Lance Taylor  <ian@cygnus.com>
-
-	* reload1.c (reload): Call reload_cse_regs.
-	(reg_values): New static variable.
-	(reload_cse_invalidate_regno): New static function.
-	(reload_cse_mem_conflict_p): New static function.
-	(reload_cse_invalidate_mem): New static function.
-	(reload_cse_invalidate_rtx): New static function.
-	(reload_cse_regs): New static function.
-	(reload_cse_regno_equal_p): New static function.
-	(reload_cse_noop_set_p): New static function.
-	(reload_cse_simplify_set): New static function.
-	(reload_cse_check_clobbered): New static variable.
-	(reload_cse_check_src): New static variable.
-	(reload_cse_check_clobber): New static function.
-	(reload_cse_record_set): New static function.
-
-Wed Mar 26 07:34:06 1997  Ulrich Drepper  <drepper@cygnus.com>
-
-	* ginclude/stdarg.h (__va_copy): New definition.
-
-Tue Mar 25 13:43:36 1997  Michael Meissner  <meissner@cygnus.com>
-
-	* gcc.c (init_spec): If -v, print out that the default spec values
-	were being used.  Fix prototype to reflect no arguments.
-	(set_spec): If specs has not been set, set it up with the default
-	specs.
-	(read_specs): Move to later in the file so that startfile_prefixes
-	has been declared.  Process "%include <file>" to include another
-	specs file, aborting if the file can't be found.  Process
-	"%include_noerr <file>: to include another specs file, giving no
-	error if the file can't be found.  Process "%rename var1 var2" to
-	rename a specs variable.  Take new argument that indicates whether
-	we are processing the main file.  Only process % commands if this
-	is not the main specs file.  Change callers.
-	(main): Do not call init_spec if a specs file was found.
-	(set_spec,read_specs,do_spec_1): If DEBUG_SPECS is defined, print
-	debug information.
-	
-Tue Mar 25 14:43:58 1997  Doug Evans  <dje@cygnus.com>
-
-	* expr.c (emit_push_insn): Delete emission of CLOBBER
-	when doing partial push, no longer necessary.
-
-	* c-decl.c (grokdeclarator): Pedwarn qualified void function return
-	type.
-
-Tue Mar 25 14:28:15 1997  Richard Earnshaw (rearnsha@armltd.co.uk)
-
-	* reload.c (find_dummy_reload): New parameter earlyclobber.  If set
-	then don't use IN for the reload if it also appears elsewhere in
-	the insn.  All callers changed.
-
-Tue Mar 25 13:20:18 1997  J.T. Conklin	<jtc@cygnus.com>
-
-	* m68k/lb1sf68.asm (udivsi3): Fix hunk from previous patch that
-	did not apply correctly.
-
-	* m68k.md (tablejump): Use extl to explicitly sign extend
-	index registeron TARGET_5200.
-	* m68k/{apollo68.h,coff.h,linux.h,mot3300.h,pbb.h} 
-	(ASM_RETURN_CASE_JUMP): Likewise.
-
-	* m68k.md (mulsi3): Changed into define_expand.  Split insn into
- 	m68k and coldfire specific versions with appropriate constraints.
-
-	* m68k.md (movqi): Disable use of address registers for 
-	TARGET_5200.
-
-	* m68k/lb1sf68.asm (__modsi3, __umodsi3): Use mulsl instruction
-	instead of __mulsi3 function call on the coldfire.
-
-	* m68k.md (bne0_di): Fix typo in last change.
-
-	* m68k.md (xorsi3_5200): Correct constraints.
-
-	* m68k.c (output_move_{si,hi,qi}mode): New functions.
-	* m68k.h (output_move_{si,hi,qi}mode): Declare.
-
-	* m68k.md (move{si,hi,qi,di}): Changed into define_expands.  Split
-	insns into m68k and coldfire specific versions with appropriate
-	constraints.
-
-Tue Mar 25 12:18:41 1997  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
-
-	* Makefile.in (GCC_PASSES): Revert previous change; use
- 	cc1$(exeext).
-
-Mon Mar 24 16:12:20 1997  Doug Evans  <dje@cygnus.com>
-
-	* m32r/*: New files.
-	* config.sub: Add m32r.
-	* configure: Add m32r.
-	* longlong.h: Add m32r support.
-	* ginclude/{stdarg.h,varargs.h}: Add m32r support.
-	* ginclude/va-m32r.h: New file.
-
-Mon Mar 24 15:53:15 1997  Joel Sherrill <joel@OARcorp.com>
-
-	* rs6000/rtems.h: Change to a near clone of the powerpc-eabi target.
-	* configure (powerpc*-*-rtems): Move before Linux configuration.
-
-Mon Mar 24 14:26:37 1997  Gavin Koch  <gavin@cygnus.com>
-
-	* ginclude/va-mips.h:  For little endian, eabi, objects
-	less than __va_reg_size are passed in registers.
-
-Fri Mar 21 00:48:02 1997  Jeffrey A Law  (law@cygnus.com)
-
-	* mn10300.c (print_operand): Handle 'N'.
-
-	* mn10300.c (expand_epilogue): Correctly handle functions
-	with large frames, but no callee register saves.
-
-	* mn1300.md (movdf, movdi): Handle overlapping moves.
-
-	* pa.c (compute_movstrsi_length): Handle residuals correctly.
-
-Thu Mar 20 13:53:30 1997  Michael Meissner  <meissner@cygnus.com>
-
-	* rs6000.c (easy_fp_constant): If -mrelocatable, consider all fp
-	constants to be hard.
-
-Mon Mar 20 13:53:30 1997  Jim Wilson  <wilson@cygnus.com>
- 
-	* rs6000.md (movdf/movsf define_splits): Add SUBREG support.
- 
-	* rs6000.c (fp_reg_or_mem_operand): Delete.
-	* rs6000.h (PREDICATE_CODES): Remove fp_reg_or_mem_operand.
-	(fp_reg_or_mem_operand): Delete declaration.
-	* rs6000.md (movsf_hardfloat): Use nonimmediate_operand instead
-	of fp_reg_or_mem_operand.
-
-Thu Mar 20 08:52:27 1997  Jeffrey A Law  (law@cygnus.com)
-
-	* mn10300.md (cmpsi): Handle comparing a register with
-	itself by adding zero to the reg.  Z bit for such an insn is
-	inverted.
-	* mn10300.c (notice_update_cc): Handle CC_INVERT.
-
-	* pa.c (emit_move_sequence): Don't lose for a secondary reload
-	to the SAR register if the input is a MEM with an offset that won't
-	fit in 14bits.
-
-Wed Mar 19 17:10:44 1997  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>
-
-	* m68k/linux.h (ASM_OUTPUT_MI_THUNK): Define.
-
-Wed Mar 19 16:59:34 1997  Paul Eggert  <eggert@twinsun.com>
-
-	* cccp.c, cpplib.c (do_error, do_warning): Fix memory leak.
-
-	* cccp.c (output_line_directive): Do not output negative line
-	numbers when analyzing directives like `#line 0'.
-
-	* cexp.y (parse_number, yylex), cccp.c (rescan), cpplib.c
-	(cpp_get_token): Unless -lang-c89 is specified, allow C9X-style
-	hexadecimal floating-point numbers as preprocessor numbers.
-	* cccp.c (c89): New decl.
-	(main): Set it to 1 if -lang-c89.
-	* cpplib.h (struct cpp_options): New member c89.
-	(CPP_C89): New macro.
-	* cpplib.c (unsafe_chars): `p' is unsafe before `-' or `+', since it
-	might generate a C9X-style hexadecimal floating-point number.
-	(cpp_handle_options): Set c89 option to 1 if -lang-c89.
-
-Tue Mar 18 17:05:57 1997  Stan Cox  <coxs@dg-rtp.dg.com>
-
-        * i386.h (STACK_BOUNDARY): Determine according to TARGET_ALIGN_DOUBLE.
-	
-	* i386.c (override_options) Make the default alignment 4 for 486,
-	otherwise 2.
-	
-	* i386/freebsd-elf.h (CPP_SPEC): Remove TARGET_CPU_DEFAULT reference.
-	* i386/linux{,-aout,-oldld}.h (CPP_SPEC): Likewise.
-	
-	* i386/go32.h (DBX_DEBUGGING_INFO, PREFERRED_DEBUGGING_TYPE,
-	NO_STAB_H, ASM_FILE_START, DBX_BLOCKS_FUNCTION_RELATIVE,
-	DBX_FUNCTION_FIRST, DBX_OUTPUT_MAIN_SOURCE_FILE_END,
-	ASM_OUTPUT_SOURCE_LINE): Added to support stabs.
-	(ASM_OUTPUT_SECTION_NAME): Support section attribute.
-
-Tue Mar 18 16:12:28 1997  Jim Wilson  <wilson@cygnus.com>
-
-	* final.c (shorten_branches): Split all insns before computing insn
-	lengths.
-	(final_scan_insn, case default): If HAVE_ATTR_length defined, call
-	abort for any insn that has a '#' output template.
-
-	* expr.c (emit_group_load): Call operand_subword instead of creating
-	an explicit SUBREG.
-
-	* reload1.c (reload_reg_free_before_p, case
-	RELOAD_FOR_OPERAND_ADDRESS): Conflicts with RELOAD_FOR_OPADDR_ADDR
-	reloads.
-
-	* configure (alpha-dec-osf[23456789]*): Use install-headers-cpio
-	for osf4.
-
-	* gcc.c (init_spec): Delete parameter.  Always initialize extra_specs.
-	(process_command, main): Change all callers.
-
-	* combine.c (if_then_else_cond): Call copy_rtx to prevent sharing.
-
-Tue Mar 18 14:59:12 1997  Ian Lance Taylor  <ian@cygnus.com>
-
-	* function.c (assign_parms): Add a REG_EQUIV note to the
- 	instruction which copies a parameter into a pseudo-register
- 	whenever there is an associated stack slot, even if the parameter
- 	actually arrived in a register.
-
-Tue Mar 18 14:24:48 1997  Doug Evans  <dje@cygnus.com>
-
-	* configure (alpha-dec-osf[23]): Separate osf[23] case.
-	* alpha.h (LIB_SPEC): -lprof1 requires -lpdf for OSF 4.
-	* alpha/osf2or3.h: New file.
-
-Tue Mar 18 11:32:10 1997  Jeffrey A Law  (law@cygnus.com)
-
-	* m68k.c (m68k_last_compare_had_fp_operands): New variable.
-	* m68k.h (m68k_last_compare_had_fp_operands): Declare it.
-	* m68k.md (tst*, cmp*): Turn into define_expand/define_insn pairs.
-	Keep track of whether test/compare has fp operands.
-	(seq, sne, sgt, slt, sge, sle): Turn into define_expand/define_insn
-	pairs.  Make expanders FAIL if TARGET_68060 and last comparison/test
-	had fp operands.
-
-Tue Mar 18 04:29:29 1997  Richard Earnshaw <rearnsha@armltd.co.uk>
-
-	* arm.md (movhi): Handle generation of large constants during
-	and after reload.
-
-Mon Mar 17 17:30:24 1997  Brendan Kehoe  <brendan@lisa.cygnus.com>
-
-	* gmicro.h (RETURN_POPS_ARGS): Make sure FUNDECL is non-nil
-	before we try to use it.
-	* m68k.h (RETURN_POPS_ARGS): Likewise.
-	* ns32k.h (RETURN_POPS_ARGS): Likewise.
-	* pyr.h (RETURN_POPS_ARGS): Likewise.
-
-Mon Mar 17 17:13:44 1997  J"orn Rennecke <amylaar@cygnus.co.uk>
-
-	* stor-layout.c (layout_record, PCC_BITFIELD_TYPE_MATTERS):
-	Only add padding if a bit field would otherwise span more units
-	of alignment than its base type.
-
-Mon Mar 17 17:03:55 1997  J.T. Conklin  <jtc@cygnus.com>
-
-	* m68k.md (beq0_di, bne0_di, bge0_di, blt0_di): Use cmpw #0
- 	instead of tstl when testing address registers on the 68000.
-	
-	* m68k/lb1sf68.asm: Fix prologues/epilogues to deal with the lack
- 	of predecrement/postincrement addressing modes in the coldfire
-	moveml instruction.
-
-Mon Mar 17 17:00:14 1997  Scott Christley <scottc@net-community.com>
-
-	* Fix long standing bug where first method call for a class could
-	result in a garbled stack or produce an incorrect return value.
-	* objc/sendmsg.c (__objc_block_return): Remove function.
-	(__objc_word_return, __objc_double_return): Remove functions.
-	(__objc_get_forward_imp): New function.
-	(__objc_init_dispatch_tables): Install zero instead of
-	__objc_init_install_dtable.
-	(__objc_init_install_dtable): No longer call the method but
-	allow objc_msg_lookup return it for normal execution.
-	(obj_msg_lookup): Differentiate between when a method isn't
-	implemented and when the dispatch table needs to be installed.
-	Return the IMP when the dispatch table is installed versus
-	having __objc_init_install_dtable call it.
-	(get_imp): Install dispatch table if needed and return IMP
-	from the newly installed dispatch table.
-	(__objc_responds_to): Install dispatch table if needed before
-	checking if method is implemented.
-
-Mon Mar 17 16:29:38 1997  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
-
-	* tree.c (build_{index,range}_type): Ensure expressions for min
-	and max value are in same obstack as type.
-
-Mon Mar 17 15:44:18 1997  Pat Rankin  <rankin@eql.caltech.edu>
-
-	* cccp.c [#if VMS] (O_RDONLY, O_WRONLY): Delete (redundant).
-	(BSTRING): Delete (obsolete; usage occurs prior to definition).
-	(do_include): Handle old VAX C style includes better.
-
-Mon Mar 17 13:46:47 1997  Paul Eggert  <eggert@twinsun.com>
-
-	* cexp.y, cppexp.c (parse_number): Invalid integer constants are
-	errors if pedantic.
-	* cexp.y (yylex): Invalid multibyte characters are errors if pedantic.
-	* cppexp.c (cpp_lex): Likewise.
-	* cppexp.c (cpp_parse_escape): Character constants that do not fit are
-	errors if pedantic.
-
-	* c-parse.in (expr_no_commas): Do not store temporary
-	skip_evaluation increments on yacc value stack.
-
-Sun Mar 16 19:54:49 1997  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
-
-	* expr.c (expand_expr, case PLACEHOLDER_EXPR): Refine which
-	object is picked.
-
-Sun Mar 16 15:45:45 1997  Jeffrey A Law  (law@cygnus.com)
-
-	* loop.c (strength_reduce): Adjust BENEFIT appropriately if an
-	autoincrement memory reference will eliminate add insns.
-
-Sun Mar 16 08:41:40 1997  Scott Christley <scottc@net-community.com>
-
-	* i386.md (untyped_call): Re-enable code.
-	* objc/sendmsg.c (__objc_block_return): New function.
-	(__objc_word_return, __objc_double_return): New functions.
-	(__objc_init_install_dtable): Call appropriate return function
-	based upon method type.
-	* objc/thr-pthreads.c: Correct include path.
-
-Sat Mar 15 07:58:33 1997  Scott Christley <scottc@net-community.com>
-
-	* objc-act.c (OBJC_VERSION): Increment version.
-	* objc/init.c (OBJC_VERSION): Likewise.
-
-Sat Mar 15 07:58:00 1997  Ovidiu Predescu <ovidiu@net-community.com>
-
-	* Implement +load.
-	* objc/init.c (objc_send_load, __objc_send_load): New functions.
-	(__objc_send_message_in_list): New function.
-	(__objc_force_linking): New function.
-	(__objc_exec_class): Don't call _objc_load_callback here.
-	* objc/linking.m: New file.
-	* objc/sendmsg.c (class_add_method_list): Check for the +load method
-	when adding a methods list to a class.
-	* objc/Makefile (OBJC_O): Add linking.m.
-
-	* Allow methods defined in categories to override methods that are
-	defined in the class implementation.
-	* objc/sendmsg.c (__objc_install_methods_in_dtable): New function.
-	(class_add_method_list): Don't check anymore for duplicate methods.
-
-	* config/nextstep.h (INCLUDE_DEFAULTS): Define to something useful
-	when cross-compiling.
-
-	* The static instances list moved from the objc_module struct to 
-	objc_symtab struct, at the end of defs array. This now allows the NeXT
-	gdb to work with binaries generated for the GNU ObjC runtime.
-	* objc-act.c (build_objc_symtab_template): Make sure
-	defs in objc_symtab is a NULL terminated array.
-	(init_def_list): Attach statics to end of def list.
-	(init_objc_symtab): Take statics list into account.
-	(init_module_descriptor, build_module_descriptor): Don't add statics.
-	(generate_static_references): Indicate that statics are used.
-	(finish_objc): Process statics in the beginning.
-	* objc/objc-api.h (objc_module): Eliminate statics variable.
-	* objc/init.c (__objc_exec_class): Access statics from their
-	new place in the defs variable.
-
-Sat Mar 15 07:29:15 1997  J"orn Rennecke <amylaar@cygnus.co.uk>
-
-	* reload.c: Include expr.h.
-	(find_reloads_address, find_reloads_address_1): New argument INSN.
-	(find_reloads_address_1): Reload inside of p{re,ost}_{in,de}c
-	instead of entire p{re,ost}_{in,de}c where appropriate.
-	* Makefile.in (reload.o): Added expr.h to dependencies list.
-
-Sat Mar 15 07:17:12 1997  Richard Henderson  <rth@tamu.edu>
-
-	* reload.h (eliminate_regs): Add STORING arg.
-	* reload1.c (eliminate_regs): Likewise.
-	(eliminate_regs, case SET): Pass that we are storing to recursive call.
-	(eliminate_regs, case SUBREG): If storing and same number of words,
-	use larger mode.
-	* caller-save.c, dbxout.c, dwarfout.c, dwarf2out.c, reload.c, sdbout.c:
-	Change all calls to eliminate_regs.
-
-Fri Mar 14 14:18:49 1997  Ian Lance Taylor  <ian@cygnus.com>
-
-	* cplus-dem.c: Add prototypes for all static functions.
-	(mystrstr): Make static.  Make arguments and result const.
-	(cplus_match): Remove; not used.
-
-Fri Mar 14 10:15:35 1997  Jeffrey A Law  (law@cygnus.com)
-
-	* mn10300.c (const_costs): Remove unused function.
-	* mn10300.h (CONST_COSTS): Rework to generate better code.
-
-	* mn10300.c (print_operand): Handle 'H' and 'L' output
-	modifers for high/low part of a 64bit value.
-	* mn10300.h (CONST_DOUBLE_OK_FOR_LETTER_P): Handle 'G'
-	(LEGITIMATE_CONSTANT_P): Allow any constant.
-	* mn10300.md (movdi, movdf): Implement.
-	(adddi3, subdi3): New expanders and patterns.
-
-	* mn10300.c (print_operand): Handle 'A' modifier for an
-	address which can't be simple register indirect.
-	* mn10300.h (EXTRA_CONSTRAINT): Handle 'R' for bit ops.
-	* mn10300.md: Add patterns to test, set and clear bitfields.
-
-	* mn10300.c (can_use_return_insn): New function.
-	(expand_epilogue): Emit a RETURN insn if possible.
-	* mn10300.md (return): New pattern.
-
-	* mn10300.h (CONST_OK_FOR_LETTER_P): Handle 'N'.
-	* mn10300.md (andsi3): Catch "and 255,dn" and "and 65535,dn"
-	which were not turned into zero_extend patterns.
-
-	* mn10300.h (GO_IF_LEGITIMATE_ADDRESS): Handle symbolic
-	constant as an index/base too.
-
-	* mn10300.md (movsi): Allow SP to be loaded/saved with
-	reg+d8 addresses.
-
-	* mn10300.md (cmpsi): Allow second operand to be a constant.
-	(subsi3): Likewise.
-
-	* mn10300.md (sign extension patterns): Fix thinko when
-	extending from memory.
-
-	* mn10300.md (tst peepholes): Add peepholes for test/branch
-	based on N bit being set/clear and the data value being tested dies.
-
-Tue Mar 11 17:07:51 1997  Jeffrey A Law  (law@cygnus.com)
-
-	* mn10300.c (expand_prologue): Rework so that eliminating
-	the frame pointer produces faster/smaller code.
-	(expand_epilogue): Likewise.
-	(initial_offset): New function for argument pointer and frame pointer
-	elimination.
-	* mn10300.h (FIRST_PSEUDO_REGISTER): Bump to 10.
-	(FIXED_REGISTERS): Add argument pointer register, it's a fake fixed
-	register.
-	(CALL_USED_REGISTERS, REG_ALLOC_ORDER): Corresponding changes.
-	(REGNO_REG_CLASS, REG_CLASS_CONTENTS): Likewise.
-	(REG_OK_FOR_BASE_P, REGISTER_NAMES): Likewise.
-	(reg_class, REG_CLASS_NAMES): Delete unwanted DATA_OR_SP_REGS class.
-	(PREFERRED_OUTPUT_RELOAD_CLASS): Define.
-	(FIRST_PARM_OFFSET): No longer include register save area in
-	computation.
-	(STACK_POINTER_REGNUM): Is now register 9.
-	(ARG_POINTER_REGNUM): Is now register 8.
-	(FRAME_POINTER_REQUIRED): Refine.
-	(ELIMINABLE_REGS, INITIAL_ELIMINATION_OFFSET): Define.
-	(CAN_DEUG_WITHOUT_FP): Define.
-	* mn10300.md (return_internal): Break into two patterns.
-	
-	* mn10300.h (CONST_OK_FOR_LETTER_P): Handle 'M' too.
-	(REGISTER_MOVE_COST): Fix errors and refine.
-
-	* mn10300.c (notice_update_cc): SET_ZN_C0 insns leave the
-	overflow bit in an unuseable state.  Rename CC_SET to CC_TST.
-	* mn10300.md (cc attributes): "set" is gone, replaced by
-	"tst".  Update attributes on various insns.
-
-	* mn10300.md: Improve sign and zero extension instructions.
-	(ashlsi3): Improve.  Handle address registers too.
-	(add peephole): Combine two consecutive adjustments of a register
-	into a single adjustment.
-
-Tue Mar 11 17:18:40 1997  Brendan Kehoe  <brendan@melange.gnu.ai.mit.edu>
-
-	* cplus-dem.c (gnu_special): Call demangled_fund_type for other
-	__t* symbols.
-
-Mon Mar 10 16:10:34 1997  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
-
-	* emit-rtl.c (subreg_lowpart_p): Return 0 if SUBREG_REG is VOIDmode.
-	* combine.c (simplify_rtx, case SUBREG): Fix direction of test when
-	calling operand_subword; use inline code intead of subreg_lowpart_p.
-
-Fri Mar  7 09:22:28 1997  Jeffrey A Law  (law@cygnus.com)
-
-	* mn10300.c (expand_{pro,epi}logue): Rework to avoid
-	unnecessary "add" operations.
-	(expand_epilogue): Likewise.
-	* mn10300.h (STARTING_FRAME_OFFSET): Is zero after the last
-	round of prologue/epilogue changes.
-	(FIRST_PARM_OFFSET): Is now 16 (-4 for REG_PARM_STACK_SPACE + 20 for
-	register save area).
-	(REG_PARM_STACK_SPACE): Define as 4 bytes.
-	(OUTGOING_REG_PARM_STACK_SPACE): Define so caller allocates it.
-	* mn10300.md (call{,_value} expander): Don't emit insns to adjust the
-	stack here anymore.
-
-	* mn10300.md (bCC patterns): Just use "bCC target".
-
-Tue Mar  4 13:21:41 1997  Jim Wilson  <wilson@cygnus.com>
-
-	* rs6000.md (movsi): Don't emit a USE insn for LABEL_REFs.
-
-Thu Mar  6 16:29:13 1997  Jim Wilson  <wilson@cygnus.com>
-
-	* dwarf2out.c (modified_type_die): Initialize item_type to NULL.
-	Move equate_type_number_to_die call before use of sub_die, and move
-	recursive modified_type_die calls on item_type after it.
-
-	* dwarfout.c (root_type_1, write_modifier_bytes_1): New functions.
-	(root_type): Call root_type_1.
-	(write_modifier_bytes): Call write_modifier_bytes_1.
-	(output_type, case POINTER_TYPE): Set TREE_ASM_WRITTEN before
-	recursive call.
-
-Wed Mar  5 14:30:49 1997  Torbjorn Granlund  <tege@quiet.matematik.su.se>
-
-	Partially undo Jan 11 changes (nor takes only register ops):
-	* mips.md (*norsi3_const, *nordi3_const): Delete bogus patterns.
-	* mips.c (complemented_arith_operand): Delete function.
-	(print_operand): Don't handle `e' for CONST_INT.
-	* mips.h (PREDICATE_CODES): Delete complemented_arith_operand.
-
-Tue Mar  4 16:38:13 1997  Brendan Kehoe  <brendan@lisa.cygnus.com>
-
-	* i386.c (i386_return_pops_args): Make sure FUNDECL is non-nil
-	before we try to use it.
-	* i386/isc.h (RETURN_POPS_ARGS): Likewise.
-	* i386/next.h (RETURN_POPS_ARGS): Likewise.
-	* i386/sco.h (RETURN_POPS_ARGS): Likewise.
-	* i386/sco5.h (RETURN_POPS_ARGS): Likewise.
-	* i386/scodbx.h (RETURN_POPS_ARGS): Likewise.
-
-Mon Mar  3 20:17:54 1997  Gavin Koch  <gavin@cygnus.com>
-
-	* ginclude/va-mips.h: __mips_single_float should have
-	the same effect on vararg lists as __mips_soft_float.
-
-Mon Mar  3 18:12:01 1997  Michael Meissner  <meissner@cygnus.com>
-
-	* rs6000.h (DBX_CONTIN_LENGTH): Undo 2/26 change.
-
-Mon Mar  3 13:08:20 1997  Jeffrey A Law  (law@cygnus.com)
-
-	* combine.c (simplify_rtx): Do nothing with (truncate:mode) if
-	mode is a partial integer mode.
-
-Sun Mar  2 17:41:18 1997  Ulrich Drepper  <drepper@cygnus.com>
-
-	* ginclude/varargs.h: Add definition of __va_copy.
-	* va-alpha.h, va-clipper.h, va-h8300.h, va-i860.h: Likewise.
-	* va-i960.h, va-m88k.h, va-mips.h, va-pa.h, va-ppc.h: Likewise.
-	* va-sh.h, va-sparc.h, va-spur.h: Likewise.
-
-Sun Mar  2 13:25:49 1997  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)
-
-	* c-typeck.c (process_init_element): Warn and truncate if upper
-	bound of index is out of range.
-
-Fri Feb 28 16:08:47 1997  Michael Meissner  <meissner@cygnus.com>
-
-	* rs6000/sol-c0.c (_start): Disable loading up r13 and r2 with the
-	SDA base registers for now.
-
-	* rs6000.md (movsi): Emit a USE insn when putting the
-	label of constants into the TOC, so that the constant is still
-	emitted when expensive optimizations are used.
-
-Thu Feb 27 17:54:42 1997  Karl Heuer  <kwzh@gnu.ai.mit.edu>
-
-	* fixinc.ptx: Fix sed expression looking for <sys/types.h> in
-	pwd.h.
-
-Thu Feb 27 12:11:16 1997  Dennis Glatting  <dennis.glatting@plaintalk.bellevue.wa.us>
-
-	* fixincludes: Remove more cases of __const__ from math.h on
-	NeXT.
-
-Wed Feb 26 14:52:27 1997  Michael Meissner  <meissner@cygnus.com>
-
-	* reload.c (debug_reload): Remove extra argument to fprintf.
-
-	* rs6000.c (output_toc): Make fprintf calls type correct.
-
-	* rs6000.h (DBX_CONTIN_LENGTH): Define as 4000 to avoid AIX
-	assembler line limit.
-
-Mon Feb 24 17:56:17 1997  Brendan Kehoe  <brendan@lisa.cygnus.com>
-
-	* fixincludes: Fix need of prototypes for C++ in rpc/xdr.h on SunOS4.
-
-Mon Feb 24 17:33:57 1997  Michael Meissner  <meissner@cygnus.com>
-
-	* rs6000/xm-sysv4.h (HAVE_STRERROR): Define.
-
-Sun Feb 23 17:18:28 1997  Jim Wilson  <wilson@cygnus.com>
-
-	* rs6000.md (floatsidf2_loadaddr): Correct syntax for cau instruction.
-	(load_multiple, store_multiple): Call change_address instead of
-	creating MEM from scratch.
-
-Thu Feb 20 16:39:15 1997  Jim Wilson  <wilson@cygnus.com>
-
-	* unroll.c (unroll_loop): Add check for naive loop that ends with
-	conditional branch that does not branch back to loop start.
-
-	* reload1.c (reload): Move assign_stack_local call into main loop.
-
-Thu Feb 20 11:40:46 1997  Jeffrey A Law  (law@cygnus.com)
-
-	* pa.md (zero extension patterns): Turn into define_expand and
-	define_insn pair.
-
-Wed Feb 19 17:05:38 1997  Jeffrey A Law  (law@cygnus.com)
-
-	* pa.c (emit_move_sequence): Don't copy 0.0 (double precision)
-	directly to memory, go through a reg if reload hasn't started.
-	* pa.md (main movdf pattern): Don't allow 0.0 (double precision)
-	to be copied directly to memory.
-
-	* pa/pa-hpux10.h (MD_EXEC_PREFIX): Define appropriately for hpux10.
-	(MD_STARTFILE_PREFIX): Similarly.
-
-	* pa.h (ASM_OUTPUT_SECTION_NAME): Surround the section name
-	with '$' if not using GAS.
-
-Wed Feb 19 16:43:47 1997  J"orn Rennecke <amylaar@cygnus.co.uk>
-
-	* sched.c (schedule_insns): If there was no first scheduling pass,
-	split instructions after reload.
-	(update_flow_info): Tolerate some idiosyncrasies after reload.
-
-Wed Feb 19 11:13:51 1997  Jeffrey A Law  (law@cygnus.com)
-
-	* combine.c (find_split_point): Don't turn a SIGN_EXTEND into
-	a series of shifts if either mode is a partial integer mode.
-
-Mon Feb 17 08:06:02 1997  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)
-
-	* rs6000.c ({,non_}short_cint_operand): Use (unsigned HOST_WIDE_INT).
-	(non_add_cint_operand, includes_rshift_p): Likewise.
-	* rs6000.h (CONST_OK_FOR_LETTER_P): Likewise.
-	(LEGITIMATE_ADDRESS_INTEGER_P, LEGITIMIZE_ADDRESS): Likewise.
-
-Sun Feb 16 07:55:19 1997  J"orn Rennecke  (amylaar@cygnus.co.uk)
-
-	* libgcc2.c (__negdi2, __lshrdi3, __ashldi3, __ashrdi3, __ffsdi2):
-	Use ANSI style definition with full prototype.
-	(__muldi3, __udiv_w_sdiv, __udivmoddi4, __divdi3, __moddi3) : Likewise.
-	(__udivmoddi4, __udivdi3, __cmpdi2, __ucmpdi2) : Likewise.
-	(__fixunstfdi, __fixtfdi, __fixunsxfdi, __fixxfdi) : Likewise.
-	(__fixunsdfdi, __fixdfdi, __floatdixf, __floatditf) : Likewise.
-	(__floatdidf, __floatdisf, __fixunsxfsi, __fixunsdfsi) : Likewise.
-	(__gcc_bcmp, __eprintf, gopen, gclose, __bb_init_file) : Likewise.
-	(__bb_init_trace_func, __clear_cache, mprotect) : Likewise.
-	(__enable_execute_stack, cacheflush, exit) : Likewise.
-	(find_exception_table, __find_first_exception_table_match) : Likewise.
-
-Sun Feb 16 07:52:02 1997  Oliver Kellogg  (oliver.kellogg@space.otn.dasa.de)
-
-	* 1750a.md (mulqihi3): Corrected.
-	(tst{hf,tqf}): Simplified.
-	(movqi): Removed redundant alternative.
-	(addqi-3,addqi-2,addqi-1): Set/Reset Bit patterns by C. Nettleton.
-	(many patterns): Introduced operand output modifiers d,t,b,B,w.
-	* 1750a.c (print_operand): New operand output modifiers d,t,b,B,w.
-	(simple_memory_operand): Removed.
-	(one_bit_set_p, which_bit): Added from C. Nettleton's m1750 config.
-
-Sun Feb 16 07:43:37 1997  Paul Eggert  <eggert@twinsun.com>
-
-	* cccp.c (special_symbol): Don't treat "L" in "L'...'" as identifier.
-	(check_macro_name, collect_expansion, rescan): Likewise.
-	* cpplib.c (special_symbol, check_macro_name, collect_expansion):
-	Likewise.
-
-	* cexp.y (parse_c_expression): Don't check for null lexptr
-	or *lexptr == 0.  If yyparse returns nonzero value, abort.
-
-	* cexp.y (yylex): Use is_space, not is_hor_space, to find keyword end.
-	(is_space): New decl.
-	(is_hor_space): Removed.
-	* cccp.c (is_space): Now external.
-	(is_hor_space): Now static.
-
-Sun Feb 16 04:55:11 1997  Jason Merrill  <jason@yorick.cygnus.com>
-
-	* toplev.c, tree.h (decl_printable_name): Change arguments.
-	* c-common.c (declare_function_name): Reflect above change.
-	* final.c (final_start_function): Likewise.
-	* function.c (init_function_start): Likewise.
-	* toplev.c (decl_name): Likewise.
-	(announce_function): Likewise.
-	(v_message_with_decl): Likewise.
-	* dwarf2out.c (dwarf2_name): New fn, uses decl_printable_name.
-	(add_pubname): Use it.
-	(add_name_and_src_coords_attributes): Use it, add 
-	DW_AT_MIPS_linkage_name if appropriate.
-	(output_aranges): Use DW_AT_MIPS_linkage_name if present.
-
-Sat Feb 15 18:45:30 1997  J.T. Conklin  <jtc@cygnus.com>
-
-	* m68k.md (cmpsi): Added insn with appropriate constraints for
-	TARGET_5200; changed condition of existing insn to !TARGET_5200.
-
-Sat Feb 15 18:26:50 1997  Philippe De Muyter  <phdm@info.ucl.ac.be>
-
-	* m68k/hp320.h (PRINT_OPERAND_FLOAT): Removed.
-	(ASM_OUTPUT_{FLOAT,DOUBLE,LONG_DOUBLE}_OPERAND): Defined.
-	(PRINT_OPERAND): Turned off: use default.
-	* m68k/news.h (PRINT_OPERAND): Turned off: use default.
-	(ASM_OUTPUT_{FLOAT,DOUBLE,LONG_DOUBLE}_OPERAND): Defined.
-	* m68k/tower-as.h (PRINT_OPERAND): Turned off: use default.
-	(ASM_OUTPUT_{FLOAT,DOUBLE}_OPERAND): Defined.
-	* m68k/crds.h (PRINT_OPERAND): Turned off: use default.
-	(ASM_OUTPUT_{FLOAT,DOUBLE}_OPERAND): Defined.
-	(SGS_NO_LI,STRUCTURE_SIZE_BOUNDARY,IMMEDIATE_PREFIX): Defined.
-	(NEED_PROBE): Defined instead of HAVE_probe and gen_probe.
-	(FUNCTION_{PRO,EPI}LOGUE): Do not access FPA registers.
-	* m68k.c (output_function_prologue): Add CRDS and MOTOROLA probe code.
-	(print_operand): Do not output '.' if CRDS.
-
-	* gcc.c (set_spec): Fix comment-in-comment typo.
-	
-Sat Feb 15 17:54:23 1997  H.J. Lu  (hjl@gnu.ai.mit.edu)
-
-	* Makefile.in (COMPILERS): Moved before GCC_PASSES.
-	(GCC_PASSES): Use $(COMPILERS) instead of cc1$(exeext).
-
-Sat Feb 15 17:25:44 1997  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>
-
-	* gcc.c (process_command): Allocate space for terminating null.
-
-Sat Feb 15 17:21:34 1997  Pat Rankin  <rankin@eql.caltech.edu>
-
-	* vax/vax.h (FUNCTION_PROLOGUE): Adjust size by STARTING_FRAME_OFFSET.
-	* vax/vms.h (FUNCTION_PROLOGUE): Delete.
-
-Sat Feb 15 08:48:14 1997  Douglas B. Rupp  (rupp@gnat.com)
-
-	* configure: Fix setting of CC in no-symlink case.
-
-Sat Feb 15 08:42:17 1997  Oliver Kellogg  (oliver.kellogg@space.otn.dasa.de)
-
-	* expmed.c (expand_divmod): Prefer divmod in same mode over div
-	in wider mode.
-
-Sat Feb 15 08:27:50 1997  J"orn Rennecke  (amylaar@cygnus.co.uk)
-
-	* fold-const.c (fold): Don't assume a nonexplicit constant cannot
-	equal an explicit one.
-
-	* i386.md (zero_extendqi[hs]i2+3): Ensure operating on REG.
-
-Sat Feb 15 08:11:04 1997  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)
-
-	* configure (i[3456]86-*-solaris2*): Correct tm.h filename in
-	stabs case.
-
-	* a29k.h (STORE_FLAG_VALUE): Write so works on both 32 and 64-bit host.
-
-Fri Feb 14 16:03:37 1997  Robert Lipe  <robertl@dgii.com>
-
-	* i386/t-sco5 (libgcc{1,2}-elf.a): correct target dependencies.
-
-Fri Feb 14 16:00:23 1997  H.J. Lu  <hjl@gnu.ai.mit.edu>
-
-	* config/svr4.h (DBX_OUTPUT_MAIN_SOURCE_FILE_END): Set 
-	current-section variable to text.
-
-Wed Feb 12 16:07:34 1997  Brendan Kehoe  <brendan@lisa.cygnus.com>
-
-	* fixinc.irix: New file.
-	* configure (mips-sgi-irix[56]): Set fixincludes to fixinc.irix.
-
-Wed Feb 12 15:40:20 1997  Jim Wilson  <wilson@cygnus.com>
-
-	* Makefile.in (LIBGCC2_DEBUG_CFLAGS): New macro.
-	(LIBGCC2_CFLAGS): Use it.
-
-	* dwarfout.c (output_type): Do early exit only if TYPE_CONTEXT is NULL
-	or if TYPE_CONTEXT is another type (e.g. a nested type).
-
-Tue Feb 11 15:53:51 1997  J"orn Rennecke <amylaar@cygnus.co.uk>
-
-	* sh.c (calc_live_regs): Exclude RETURN_ADDRESS_POINTER_REGNUM.
-
-	* sh.c (calc_live_regs): Need not save MACL/MACH when not live
-	or in leaf function.
-
-Mon Feb 10 14:46:32 1997  Jeffrey A Law  (law@cygnus.com)
-
-	* stmt.c (group_case_nodes): Recognize more opportunities to
-	group case nodes.
-
-Sun Feb  9 14:05:48 1997  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)
-
-	* function.c (assign_stack_temp): Clear MEM flags from reuse.
-
-Sat Feb  8 17:37:47 1997  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)
-
-	* local-alloc.c (update_equiv_regs): Fix error in last change.
-
-Fri Feb  7 12:42:34 1997  Mike Stump  <mrs@cygnus.com>
-
-	* pa.h (RETURN_ADDR_RTX): Fix to ignore export stubs.
-	* pa.c (return_addr_rtx): Define.
-
-Fri Feb  7 13:56:56 1997  Doug Evans  <dje@cygnus.com>
-
-	* cse.c (invalidate_from_clobbers): Delete unnecessary test for
-	(clobber nil).
-
-	* toplev.c (main): Delete redundant settings of flag_no_inline
-	and warn_inline if not optimizating.
-
-Fri Feb  7 10:45:02 1997  Jeffrey A Law  (law@cygnus.com)
-
-	* Makefile.in (stmp-multilib-sub): Add missing "else true"
-	clauses to work around make bug on some systems.
-
-Fri Feb  7 08:19:43 1997  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)
-
-	* fold-const.c (const_binop): Don't call size_int if low < 0.
-
-	* function.c (instantiate_virtual_regs_1, case USE, CLOBBER):
-	Fix error in last change.
-
-Thu Feb  6 17:09:17 1997  Mike Stump  <mrs@cygnus.com>
-
-	* except.c (find_exception_handler_labels): Initialize label array
-	with zeroes.
-
-Wed Feb  5 22:11:55 1997  Jeffrey A Law  (law@cygnus.com)
-
-	* pa.md (post_ldwm): Fix typos.
-
-Wed Feb  5 15:57:42 1997  Doug Evans  <dje@cygnus.com>
-
-	* m68k/vxm68k.h (WCHAR_TYPE,WCHAR_TYPE_SIZE,SIZE_TYPE): Fix.
-	(PTRDIFF_TYPE): Define.
-
-Wed Feb  5 11:19:13 1997  Ian Lance Taylor  <ian@cygnus.com>
-
-	* reload1.c (alter_reg): Don't ask assign_stack_local to round up
-	to a multiple of BIGGEST_ALIGNMENT, unless a register appears in a
-	paradoxical subreg.
-
-Tue Feb  4 19:29:40 1997  Jim Wilson  <wilson@cygnus.com>
-
-	* reload.c (find_reloads_address_1, case POST_INC): Don't use
-	ADDR_TYPE here.
-
-Tue Feb  4 12:33:45 1997  Jeffrey A Law  (law@cygnus.com)
-
-	* flow.c (life_analysis): Delete obvious no-op moves
-	which use SUBREGs.
-
-Mon Feb  3 20:00:35 1997  Jim Wilson  <wilson@cygnus.com>
-
-	* jump.c (find_cross_jump): Don't allow old-style and volatile asms
-	to match.
-
-Mon Feb  3 15:51:31 1997  Doug Evans  <dje@cygnus.com>
-
-	* sparc/sol2.h (ASM_SHORT,ASM_LONG): Set to .uahalf/.uaword.
-	* sparc/sysv4.h (ASM_LONG): Define.
-	(ASM_OUTPUT_{FLOAT,DOUBLE,LONG_DOUBLE}): Use ASM_LONG.
-
-Mon Feb  3 13:01:46 1997  Ian Lance Taylor  <ian@cygnus.com>
-
-	* reload.h (enum reload_type): Add RELOAD_FOR_INPADDR_ADDRESS and
-	RELOAD_FOR_OUTADDR_ADDRESS.
-	* reload.c (ADDR_TYPE): New macro.
-	(push_secondary_reload): Check for new reload types.
-	(combine_reloads): Likewise.
-	(find_reloads): Likewise.  Convert INPADDR_ADDRESS and
-	OUTADDR_ADDRESS to OPADDR_ADDR.  Check OPADDR_ADDR when looking
-	for merges.
-	(find_reloads_address): When reloading an address, use the
-	ADDR_TYPE macro to get the type of the new reload.
-	(find_reloads_address_1): Likewise.
-	(reload_when_needed_name): Add new reload types.
-	* reload1.c (reload): Add in_addr_addr and out_addr_addr fields to
-	insn_needs struct.  Use them for new reload types, and when
-	computing in_max and out_max.
-	(reg_used_in_inpaddr_addr): New static array.
-	(reg_used_in_outaddr_addr): New static array.
-	(mark_reload_reg_in_use): Handle new reload types.
-	(clear_reload_reg_in_use, reload_reg_free_p): Likewise.
-	(reload_reg_free_before_p, reload_reg_reaches_end_p): Likewise.
-	(reloads_conflict, merge_assigned_reloads): Likewise.
-	(emit_reload_insns): Likewise.
-	(choose_reload_regs): Save arrays for new reload types.
-
-Sun Feb  2 19:43:17 1997  Scott Christley <scottc@net-community.com>
-
-	* objc/selector.c (__sel_register_typed_name): Eliminate compiler
-	warnings with explicit cast.
-
-	* Add condition mutex support to the objc runtime.
-	* objc/thr-mach.c (objc_condition_{,de}allocate): New functions.
-	(objc_condition_{wait,broadcast,signal}): New functions.
-	* objc/thr-pthreads.c (objc_condition_{,de}allocate): New functions.
-	(objc_condition_{wait,broadcast,signal}): New functions.
-	* objc/thr-solaris.c (objc_condition_{,de}allocate): New functions.
-	(objc_condition_{wait,broadcast,signal}): New functions.
-	* objc/thr.h: Prototypes for new functions.
-
-	* objc/init.c (__objc_runtime_mutex): Eliminate leading underscore
-	from name of objc mutex and thread structures.
-	* objc/runtime.h: Likewise.
-	* objc/thr-{decosf1,irix,mach,os2,posix,pthreads,single}.c: Likewise.
-	* objc/thr-{solaris,win32}.c: Likewise.
-	* objc/thr.{c,h}: Likewise.
-
-	* Major reorganization of objc error handling.
-	* objc/Object.m (-error:): Call objc_error function instead of
-	using function pointer.
-	* objc/archive.c: Replace call to abort or __objc_fatal functions
-	with call to objc_error function throughout the complete file.
-	* objc/class.c (objc_get_class): Replace call to abort function
-	with call to objc_error function.
-	* objc/encoding.c (objc_sizeof_type, objc_alignof_type): Replace
-	call to abort function with call to objc_error function.
-	(objc_skip_typespec): Likewise.
-	* objc/init.c (init_check_module_version): Replace call to
-	abort function with call to objc_error function.
-	* objc/misc.c (objc_verror): New function.
-	(objc_fatal): Remove function.
-	(objc_set_error_handler): New function.
-	(_objc_error_handler): New global variable.
-	(__alpha__): Remove unneeded code.
-	(objc_error): Allow user specified error handler function to
-	trap and handle the objc error.  Added an error code parameter
-	which indicates the specific error that occured.
-	(objc_malloc, objc_atomic_malloc): Replace call to objc_fatal
-	function with call to objc_error function.
-	(objc_valloc, objc_realloc, objc_calloc): Likewise.
-	* objc/objc-api.h: Declare error handling functions and typedef
-	for user specified error handler function.  Define error codes
-	used by the runtime library.
-	* objc/runtime.h: Remove error handling declarations.
-	* objc/sendmsg.c (__objc_forward): Replace call to abort function
-	with call to objc_error function.
-	
-Sun Feb  2 19:42:52 1997  Thomas Baier <baier@ci.tuwien.ac.at>
-
-	* objc/hash.c (hash_delete): Step through the hash nodes
-	versus using hash_next to increase efficiency.
-	* objc/archive.c (__objc_finish_read_root_object): Use hash
-	table instead of list.
-
-Sun Feb  2 08:25:05 1997  Ovidiu Predescu  <ovidiu@net-community.com>
-
-	* objc-act.c (encode_aggregate_within): New function.
-	(encode_aggregate): Generates encodings for unions similar 
-	to those for structs except surrounded by parenthesis instead
-	of braces.
-
-Sun Feb  2 07:15:54 1997  Mat Hostetter  (mat@lcs.mit.edu)
-
-	* c-decl.c (start_function): Fix improper installation of last change.
-
-Sun Feb  2 06:50:55 1997  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>
-
-	* m68k.c (output_scc_di): Add missing CC_STATUS_INIT.
-
-Sun Feb  2 06:39:55 1997  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)
-
-	* c-typeck.c (process_init_element): When popping levels, don't
-	blow up if constructor_max_index not set due to previous error.
-
-	* combine.c (find_split_point, case SET): Fix error in last change.
-
-Sun Feb  2 06:28:56 1997  Paul Eggert  <eggert@twinsun.com>
-
-	* cccp.c (rescan): Insert a space after `.' as well,
-	to prevent accidental token-pasting (e.g. `.x' -> `.10').
-
-Sun Feb  2 06:08:14 1997  Oliver Kellogg  (oliver.kellogg@space.otn.dasa.de)
-
-	* 1750a.c (modregno_adjust): Fixed case when reg_renumber invalid.
-
-Sat Feb  1 19:11:08 1997  J.T. Conklin  <jtc@rhino.cygnus.com>
-
-	* m68k.md (movqi): Enable use of clr and st insns on TARGET_5200.
-	* m68k.c (output_move_simode_const): Likewise.
-
-Sat Feb  1 18:54:00 1997  Douglas B. Rupp  (rupp@gnat.com)
-
-	* gcc.c (process_command): Fix improper use of strncpy.
-
-Fri Jan 31 15:35:08 1997  Mike Stump  <mrs@cygnus.com>
-
-	* libgcc2.c: Remove extern for malloc and realloc.
-
-Fri Jan 31 17:08:11 1997  Ian Lance Taylor  <ian@cygnus.com>
-
-	* local-alloc.c (update_equiv_regs): If a register which is
- 	equivalent to some value is only used in one place, and we can't
-	substitute the value for the use, then move the register assignment
-	to just before the use.
-
-Fri Jan 31 15:57:25 1997  Stan Cox  <coxs@dg-rtp.dg.com>
-
-	* i386.md (idiv,imul,fpmul): Added new functional units for pentiumpro.
-
-	* i386.c (pentiumpro_cost): Added new cost structure for pentiumpro.
-	(override_options): Set ix86_cost to appropriate cost structure.
-
-Thu Jan 30 09:34:26 1997  J.T. Conklin  <jtc@rhino.cygnus.com>
-
-	* m68k.md (stack adjust peepholes): Use lea instead of
-	add.w when adding 16 bit constants on all but TARGET_68040.
-
-Thu Jan 30 08:58:08 1997  Ralf Baechle  <ralf@waldorf-gmbh.de>
-
-	* function.c (TRAMPOLINE_ALIGNMENT): Provide default.
-	(expand_function_end): Use TRAMPOLINE_ALIGNMENT instead
-	of FUNCTION_BOUNDARY.
-	* varasm.c (TRAMPOLINE_ALIGNMENT): Provide default.
-	(assemble_trampoline_template): Use TRAMPOLINE_ALIGNMENT instead
-	of FUNCTION_BOUNDARY.
-
-Wed Jan 29 18:16:02 1997  J"orn Rennecke <amylaar@cygnus.co.uk>
-
-	* sh.h (REG_CLASS_CONTENTS): Add rap to GENERAL_REGS and its
-	superclasses.
-
-	* sh.md (movsi_i, movsi_ie, movhi_i, movhi+1): Use type pcload for
-	immediate operands where appropriate.
-	(movsf_ie+1): Fail when loading anything but a MEM into
-	a floating point reguister.
-
-Wed Jan 29 16:00:31 1997  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)
-
-	* varasm.c (force_const_mem): Set MARK instead of clearing it.
-	(output_constant_pool): Only mark constant pool if -O.
-	Check mark flag unconditionally.
-	(mark_constant_pool): Start by clearing all mark flags.
-
-	* tree.c (copy_node): Clear TREE_ASM_WRITTEN.
-
-	* flow.c (regno_uninitialized): Return 0 if reg is used for args.
-
-Wed Jan 29 15:23:59 1997  Ian Lance Taylor  <ian@cygnus.com>
-
-	* combine.c (try_combine): Clear reg_n_refs if i2dest is not
-	mentioned in newi2pat.
-
-Tue Jan 28 16:00:23 1997  Stan Cox       (coxs@dg-rtp.dg.com)
-
-	From Robert Lipe <robertl@dgii.com> 
-	* i386/sco5.h (SCO_DEFAULT_ASM_COFF): Remove bytecode stuff.
-	(ASM_OUTPUT_ASCII): Use .ascii in both ELF and COFF modes.
-	(ASM_OUTPUT_SECTION_NAME): Handle alternate sections for COFF.
-	The OpenServer 5.0.0 assembler gives an error for section
-	names over 6 characters long, so we catch the "obvious" case
-	and shorten it.
-
-	* m88k.h (ASM_OUTPUT_SECTION_NAME): Undefine; fails
-	for exception sections.  The 88k ABI specifies 'section'
-	instead of '.section'.
-
-Mon Jan 27 13:32:46 1997  J"orn Rennecke <amylaar@cygnus.co.uk>
-
-	* sh.c (shl_and_kind): Fix typo.
-	* sh.md (and_shl_scratch): Fix typo for length 8.
-
-Mon Jan 27 08:56:03 1997  Jeffrey A Law  (law@cygnus.com)
-
-	* fixincludes: Fix incorrect forward structure declaration in
-	sys/time.h on hpux10.20.
-
-Mon Jan 27 09:05:35 1997  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)
-
-	* combine.c (simplify_rtx): Don't do anything with if_then_else_cond
-	result if both one arm and the input are a comparison.
-	(simplify_{rtx,if_then_else,logical,shift_const}): Don't
-	test STORE_FLAG_VALUE with #if; properly test for just sign bit.
-	(num_sign_bit_copies, if_then_else_cond): Likewise.
-	* expmed.c (emit_store_flag): Properly test for STORE_FLAG_VALUE
-	of just sign bit.
-	* fold-const.c (fold): Don't make COND_EXPR when both expr and
-	one part are comparisons.
-	* a29k.h (STORE_FLAG_VALUE): Make negative.
-
-Fri Jan 24 16:42:26 1997  Ian Lance Taylor  <ian@cygnus.com>
-
-	* varasm.c (struct pool_constant): Add mark field.
-	(force_const_mem): Clear mark field in new constant pool entry.
-	(output_constant_pool): Call mark_constant_pool.
-	(mark_constant_pool, mark_constants): New static functions.
-
-Thu Jan 23 15:04:17 1997  Ian Lance Taylor  <ian@cygnus.com>
-
-	* cse.c (COST): Get the right cost for a SUBREG of a register when
- 	truncation is free.
-
-Thu Jan 23 11:19:40 1997  Mike Stump  <mrs@cygnus.com>
-
-	* Makefile.in (objc-headers): Don't try and install the headers if
-	the objc directory has been removed.
-
-Wed Jan 22 13:26:25 1997  Brendan Kehoe  <brendan@lisa.cygnus.com>
-
-	* i960.c (process_pragma): Call ungetc on the last character
-	that was read by the while loop, to make sure the parser sees it.
-
-Tue Jan 21 17:20:30 1997  Michael Meissner  <meissner@tiktok.cygnus.com>
-
-	* rs6000.c (output_toc): Move STRIP_NAME_ENCODING to common
-	code, so the test for vt's works with -mminimal-toc.
-
-Tue Jan 21 16:03:35 1997  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)
-
-	* function.c (mark_all_temps_used): Set KEEP as well.
-
-Tue Jan 21 12:16:15 1997  Doug Evans  <dje@seba.cygnus.com>
-
-	* stor-layout.c (layout_record): Correct test for whether
-	field spans its unit of alignment in case where
-	field_size == type_align.
-
-Mon Jan 20 20:27:54 1997  Ian Lance Taylor  <ian@cygnus.com>
-
-	* mips.md (probe): Comment out.
-
-Sun Jan 19 20:54:45 1997  John F. Carr  <jfc@mit.edu>
-
-	* integrate.c (expand_inline_function): Handle a PARALLEL containing
-	a RETURN the same as a RETURN.
-
-Sun Jan 19 20:35:28 1997  Pat Rankin  <rankin@eql.caltech.edu>
-
-	* vmsconfig.com: Change all hardcoded references of "vax" to
-	use variable expansion instead.
-	(arch_indx, arch): New variables.
-
-	* vax.c (not_qsort):  Don't declare alloca.
-	* vax/xm-vms.h: Declare alloca here.
-	Do most of the VAX C-specific set up for DEC C.
-	#if DEC C, undefine QSORT_WORKAROUND and qsort.
-	* make-gcc.com, make-cccp.com, make-cc1.com:  Support building
-	with GNU C vs VAX C vs DEC C from the DCL command line.
-
-Sun Jan 19 17:20:50 1997  Oliver Kellogg  (oliver.kellogg@space.otn.dasa.de)
-
-	* 1750a.md (movh[if]-1): Corrected.
-	(movtqf-1): Deleted.
-	* 1750a.c (add_1_to_mem): Deleted.
-	(output_operand_address): Added output modifier 'A'.
-
-Sun Jan 19 17:17:54 1997  Philippe De Muyter  <phdm@info.ucl.ac.be>
-
-	* m68k.md (ashrdi_const, ashrdi3): Allow 31 as shift count.
-
-	* m68k.h (CONST_OK_FOR_LETTER_P): Recognize 'N', 'O' and 'P'.
-	* m68k.md (rotl[shq]i3, strict_low_part rotl): Allow 'N', 'O'
-	or 'P' operands.
-
-Sun Jan 19 17:09:17 1997  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>
-
-	* m68k.md (addsi3): Fix previous change: {add,sub}qw should
-	be {add,sub}ql. For other uses of {add,sub}q don't check for address
-	register and always use {add,sub}ql.
-
-Sun Jan 19 15:05:42 1997  Peter Seebach  <seebs@solon.com>
-
-	* c-decl.c (start_decl): Add code for -Wmain.
-	(c_decode_option): Add -fhosted, -ffreestanding, and -Wmain.
-	* toplev.c (lang_options): Likewise.
-	* c-tree.h (warn_main, flag_hosted): New variables.
-
-Sun Jan 19 14:35:41 1997  Alex Garthwaite  (alex@samwise.cis.upenn.edu)
-
-	* fixinc.svr4: Fix problems with symlinks to ".".
-
-Sun Jan 19 14:21:46 1997  Craig Burley  <burley@gnu.ai.mit.edu>
-
-	* loop.c (check_final_value): Handle insns with no luid's.
-
-Sun Jan 19 08:57:26 1997  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)
-
-	* alpha.md (arg_home): Add CLOBBER of MEM and USE of arg regs.
-	* vms.h (SETUP_INCOMING_VARARGS): Delete duplicate definition.
-
-	* toplev.c (set_float_handler): Set up signal catcher on first call
-	in case a front end has disabled it.
-
-	* cccp.c, cexp.y: #define __attribute__ to be null if 
-	compiling with GCC older than 2.7, not 2.6.
-
-	* toplev.c (main): If PREFERRED_DEBUGGING_TYPE used and set
-	to NO_DEBUG, say debugging not supported.
-	* mips/sni-svr4.h (PREFERRED_DEBUGGING_TYPE): Undefine.
-
-	* i386/xm-cygwin32.h (DIR_SEPARATOR): Define.
-
-	* explow.c (convert_memory_address, case SYMBOL_REF):
-	Copy CONSTANT_POOL_ADDRESS_P.
-	* integrate.c (save_constants): Make (address (const ..)) to record
-	both modes.
-	(copy_for_inline, copy_rtx_and_substitute, restore_constants): Use
-	both modes when restoring constant pool entry for ADDRESS.
-
-	* alpha.h (MINIMUM_ATOMIC_ALIGNMENT): New macro.
-
-	* function.c (instantiate_virtual_regs_1, case USE, case CLOBBER):
-	Properly handle case of shared MEM whose replacement is not valid.
-
-Sat Jan 18 14:08:31 1997  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)
-
-	* tree.c (get_unwidened): Don't crash if FIELD_DECL not layed out.
-
-	* varasm.c (const_hash): Treat NON_LVALUE_EXPR like CONVERT_EXPR.
-	(compare_constant_1, copy_constant, bc_assemble_integer): Likewise.
-	(const_hash, compare_constant_1): Use switch, not if-then-else.
-
-Fri Jan 17 17:10:20 1997  Ian Lance Taylor  <ian@cygnus.com>
-
-	* mips.h (STACK_POINTER_OFFSET): Don't define.
-
-Thu Jan 16 14:51:03 1997  Bob Manson  <manson@charmed.cygnus.com>
-
-	* cplus-dem.c: Fix indenting; note that this file also lives in
-	libiberty.
-	(do_type, case 'M'): Check for a template as well as a class.
-
-Thu Jan 16 15:08:26 1997  Michael Meissner  <meissner@tiktok.cygnus.com>
-
-	* gcc.c (cross_compile): Change to be a char * like all of the
-	other specs.
-	(process_command): Change how cross_compile is tested.
-	(main): Likewise.
-	(struct spec_list): Merge with the format used by EXTRA_SPECS.
-	Add name length field to speed up repeated calls to strcmp.  Add
-	flag to say spec was allocated.  Add pointer to char * so that
-	static spec fields can be updated.
-	(extra_specs): Use struct spec_list as type.
-	(static_specs): Static list of predefined specs.
-	(init_specs): New function, initialize the specs list.  Link in
-	the default specs and any specs defined via EXTRA_SPECS.
-	(set_spec): No longer special case predefined specs.
-	(process_command,validate_all_switches): Ditto.
-	(process_command): Call init_specs for -dumpspecs.
-	(do_spec_1): Use name length field to avoid calling strncmp when
-	it is going to fail.
-	(main): Call init_spec.  Don't handle EXTRA_SPECS here.
-
-Thu Jan 16 17:07:54 1997  Eddie C. Dost  <ecd@skynet.be>
-
-	* configure: Add sparc-linux{,aout} support.
-	* ginclude/va-sparc.h: Likewise.
-	* sparc/linux.h: New file.
-	* sparc/linux-aout.h: New file.
-	* sparc/xm-linux.h: New file.
-
-Thu Jan 16 16:19:13 1997  Jim Wilson  <wilson@cygnus.com>
-
-	* configure (sparc-*-aout*): Add libgloss.h to tm_file.
-	(sparclite-*-coff*): Change "= to =".
-
-Thu Jan 16 12:53:15 CST 1997  Joel Sherrill <joel@OARcorp.com>
-
-	* rs6000/rtems.h: Change from being sysv4 based to being eabi based.
-
-Thu Jan 16 13:40:51 1997  Jim Wilson  <wilson@cygnus.com>
-
-	* mips.h (LINKER_ENDIAN_SPEC): Define.
-	(LINK_SPEC): Add linker_endian_spec.
-	(EXTRA_SPECS): Add linker_endian_spec.
-
-Thu Jan 16 08:02:13 1997  Jeffrey A Law  (law@cygnus.com)
-
-	* mn10300.md (bCC, inverted bCC): Use bCC .+X instead of bCC 0f.
-
-Wed Jan 15 14:06:28 1997  Ian Lance Taylor  <ian@cygnus.com>
-
-	* reload.h (reload_address_base_reg_class): Declare.
-	(reload_address_index_reg_class): Declare.
-	* reload1.c (reload_address_base_reg_class): Define.
-	(reload_address_index_reg_class): Define.
-	(init_reload): Initialize reload_address_{base,index}_reg_class.
-	* reload.c (find_reloads_address): Use
-	reload_address_base_reg_class rather than BASE_REG_CLASS.  Use
-	reload_address_index_reg_class rather than INDEX_REG_CLASS.
-	(find_reloads_address_1): Likewise.
-
-Tue Jan 14 15:26:33 1997  Ian Lance Taylor  <ian@cygnus.com>
-
-	* reload.c (REGNO_MODE_OK_FOR_BASE_P): Define if not defined.
-	(REG_MODE_OK_FOR_BASE_P): Define if not defined.
-	(find_reloads_address): Use REG[NO]_MODE_OK_FOR_BASE_P rather than
-	REG[NO]_OK_FOR_BASE_P.
-	(find_reloads_address_1): Likewise.
-	Add mode parameter; change all callers.
-
-	* reload1.c (eliminate_regs_in_insn): Handle more cases when
-	eliminating the frame pointer to the hard frame pointer.
-
-	* varasm.c (force_const_mem): Copy a CONST_INT rtx like a CONST rtx.
-
-	* varasm.c (assemble_end_function): Call
-	output_after_function_constants.
-	(after_function_constants): New static variable.
-	(output_after_function_constants): New static function.
-	(output_constant_def): Check CONSTANT_AFTER_FUNCTION_P.
-
-Mon Jan 13 16:44:40 1997  David Edelsohn  <edelsohn@mhpcc.edu>
-
-	* rs6000/aix41.h (CPP_PREDEFINES): Add -D_AIX41.
-
-Sun Jan 12 20:54:01 1997  Jim Wilson  <wilson@cygnus.com>
-
-	* libgloss.h (LINK_SPEC): Delete.
-	(STARTFILE_SPEC): Delete spurious newline.
-
-Sat Jan 11 00:13:03 1997  Torbjorn Granlund  <tege@quiet.matematik.su.se>
-
-	* mips.md (norsi3, nordi3): Use canonical RTL.  Prepend `*' to pattern
-	name.  Don't match immediates.
-	(norsi3_const, nordi3_const): New patterns.
-	(anddi3, iordi3, xordi3): Test TARGET_64BIT, not mips_isa
-	in length attribute calculation.
-	* mips.c (complemented_arith_operand): New function.
-	(print_operand): Handle `e' for CONST_INT.
-	* mips.h (PREDICATE_CODES): Add complemented_arith_operand.
-	
-Fri Jan 10 14:11:53 1997  David Edelsohn  <edelsohn@mhpcc.edu>
-
-	* rs6000/aix41.h (SUBTARGET_SWITCHES): Add threads and pe.
-	(CPP_SPEC): Add mpe and mthreads cases.
-	(LIB_SPEC): Add mpe and mthreads cases to variant from rs6000.h.
-	(STARTFILE_SPEC): Add mpe and mthreads support.
-
-Fri Jan 10 07:12:26 1997  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)
-
-	* i386/cygwin32.h (LINK_SPEC): New definition.
-
-	* Makefile.in (FLAGS_TO_PASS): Add STAGE_PREFIX, set by configure.
-	* configure: Initialize exeext.
-	Update STAGE_PREFIX in Makefile.
-
-	* dwarfout.c (dwarfout_line): Push to LINE_SECTION after calling
-	lookup_filename.
-
-Thu Jan 9 12:06:04 1997  Jim Wilson  <wilson@cygnus.com>
-
-        * i386.md (addsidi3_2): Add & to operand 0 of alternative 5.
-
-Thu Jan 9 12:06:04 1997  Stan Cox  <coxs@dg-rtp.dg.com>
-
-        From Linus Torvalds and Mat Hostetter:
-	* i386.c (i386_sext16_if_const): Added to sign extend an HImode constant.
-	(i386_aligned_reg_p): Added to tell if an rtx is aligned.
-	(i386_cc_probably_useless_p): Don't trust cc bits.
-	* i386.h (TARGET_ZERO_EXTEND_WITH_AND): Don't do this for p6.
-	* i386.md (cmpsf_ccfpeq+2): Use SImode test instruction.
-	(movhi+1): Use movz instead of mov on p6.
-	(addsi3): Add 128 by subtracting -128.
-	(zero_extendhisi2): Use SImode move if aligned.
-	(addhi3): Likewise.
-	(subhi3): Likewise.
-	(andhi3): Likewise.
-	(iorhi3): Likewise.
-	(xorhi3): Likewise.
-
-Tue Jan  7 16:58:27 1997  Jason Merrill  <jason@yorick.cygnus.com>
-
-	* c-parse.in (extension): New rule for __extension__.
-	(extdef, unary_expr, decl, component_decl): Use it.
-
-Mon Jan  6 15:44:37 1997  Oliver Kellogg  (oliver.kellogg@space.otn.dasa.de)
-
-	* 1750a.c: Now includes regs.h.
-	({movcnt,mod}_regno_adjust): Corrected typos.
-	* 1750a.md (movhi): Corrected case of moving constant to memory.
-
-Mon Jan  6 08:00:57 1997  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)
-
-	* mips.h: Delete redundant definitions of compiler and library fns.
-
-	* dwarfout.c (type_attribute): Ignore any subtype for now.
-
-	* fold-const.c (operand_equal_p): Rework to consider two
-	expressions that have embedded identical SAVE_EXPRs as
-	equivalent; also handle some more cases.
-
-Sun Jan  5 23:54:34 1997  Jeffrey A Law  (law@cygnus.com)
-
-	* pa.md (pic_load_label): Fix test for using just an
-	ldo rather than an addil;ldo sequence to load the label's
-	address.
-
-Sun Jan  5 07:26:47 1997  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)
-
-	* expr.c (expand_expr, case COMPONENT_REF): Fix error in last
-	change: don't suppress conversion if just EXPAND_SUM.
-
-Sat Jan  4 18:44:01 1997  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)
-
-	* tree.h (struct tree_decl): saved_insns.i is HOST_WIDE_INT.
-
-	* fold-const.c (const_binop): Rework to only make constants in
-	one place; always use size_int if small enough and of sizetype.
-	(size_int): Call force_fit_type.
-	(fold): Avoid ever changing type of input tree.
-
-	* expr.c (get_inner_reference): Fix type error.
-	(expand_expr, case COMPONENT_REF): Don't convert if modifier
-	is EXPAND_CONST_ADDRESS, EXPAND_SUM, or EXPAND_INITIALIZER.
-	* tree.c (staticp, case COMPONENT_REF, BIT_FIELD_REF): Not
-	static if bitfield.
-
-	* expr.c (expand_expr, case COMPONENT_REF):  If taking value
-	from a CONSTRUCTOR, must mask/sign-extend if bitfield.
-	(expand_builtin, case BUILT_IN_LONGJMP): Pass type, not IDENTIFIER,
-	to second arg of RETURN_POPS_ARGS.
-
-	* expr.c (expand_expr, case COND_EXPR): Add additional cases
-	to "singleton" cases.
-	* tree.c (integer_pow2): Mask value to width of type.
-	(tree_log2): New function.
-
-	* expmed.c (store_fixed_bit_field): If not SLOW_UNALIGNED_ACCESS,
-	treat everything as maximally aligned.
-
-	* combine.c (find_split_point, case SET): If SET_SRC is NE and
-	STORE_FLAG_VALUE is -1, see if we can convert into NEG of shift.
-	(force_to_mode, case NE): Make condition stricter.
-
-	* calls.c (emit_library_call_value): Remove redundant check for
-	outmode != VOIDmode.
-
-Sat Jan  4 08:12:16 1997  J.T. Conklin  <jtc@rhino.cygnus.com>
-
-	* Optimizations from John Vickers (john@rhizik.demon.co.uk):
-	* m68k.c (output_function_{pro,epi}logue): Use addq/subq when
-	adjusting stack pointer by small displacements.
-	* m68k.md (addsi3, addhi3): Use two addqw (or subqw) insns when
-	adding (or subtracting) small integer constants (8 < N <= 16) to
-	both address and data registers.
-
-Sat Jan  4 07:06:07 1997  Kamil Iskra  <iskra@student.uci.agh.edu.pl>
-
-	* loop.c (basic_induction_var): Return 0 if SUBREG is not a
-	promoted variable.
-
-Sat Jan  4 06:22:36 1997  Doug Rupp  (rupp@gnat.com)
-
-	* alpha.c (vmskrunch): Try to not chop trailing uppercase letters.
-	* alpha/vms.h (ENDFILE_SPEC): Use "gnu", not "gnu_cc".
-
-	* cccp.c (PRINTF_PROTO): Use __printf__ in __attribute__, not printf.
-	* cexp.y (PRINTF_PROTO): Likewise.
-
-Fri Jan  3 09:01:00 1997  Craig Burley  <burley@gnu.ai.mit.edu>
-
-	* alpha.md (cmov): Fix operand numbers in case involving DF target,
-	DF comparison, and SF source.
-
-Fri Jan  3 08:19:46 1997  Paul Eggert  <eggert@twinsun.com>
-
-	* cpplib.c (macroexpand): Delete any no-reexpansion marker following
-	identifier at beginning of an argu concatenated with what precedes it.
-
-Fri Jan  3 07:59:21 1997  Ken Rose  (rose@netcom.com)
-
-	* reorg.c (fill_slots_from_thread): Skip moved insn in all three cases.
-
-Fri Jan  3 07:51:44 1997  Bob Manson  <manson@cygnus.com>
-
-	* function.c ({push,pop}_function_context_to): Save and restore
-	current_function_args_info.
-	* function.h (struct function): New field args_info.
-
-Fri Jan  3 06:55:09 1997  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)
-
-	* jump.c (rtx_equal_for_thread_p): Return 0 for floating-point.
-
-	* reload.c (find_reloads): If replaced a PLUS or MULT with a
-	simple operand, start over again.
-
-	* va-alpha.h: Check for __VMS__, not VMS.
-
-Thu Jan  2 08:52:51 1997  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
-
-	* configure: Finish restoring change of default of objc threads to
- 	"single" for Linux.
-
-Mon Dec 30 17:03:46 1996  Jeffrey A Law  (law@cygnus.com)
-
-	* pa.c (fmpy_operands): Remove.  No longer needed.
-	(combinable_add, combinable_copy, combinable_fmpy): Likewise.
-	(combinable_fadd, combineable_fsub): Likewise.
-	(pa_reorg): Call pa_combine_instructions.
-	(pa_combine_instructions): Combine instructions to make things
-	like fmpyadd and fmpysub.
-	(pa_can_combine_p): Helper function for pa_combine_instructions.
-	* pa.md (pa_combine_type): New attribute.  Set it appropriately
-	for various insns.
-	(define_delays): Use a separate define_delay for unconditional
-	branches.
-	(fmpyadd, fmpysub peepholes): Remove, no longer needed.
-	(fmpyadd, fmpysub insns): Add variant with fadd/fsub first,
-	then the fmpy.
-
-Mon Dec 30 14:43:51 1996  Jim Wilson  <wilson@cygnus.com>
-
-	* reg-stack.c (subst_stack_regs_pat): Set src_note explicitly, instead
-	of using invalid aggregate initialization.
-
-	* print-tree.c (print_node): Don't try to print nonexistent
-	TYPE_ATTRIBUTES field of a decl node.
-
-1996-12-30  Richard Stallman  <rms@ethanol.gnu.ai.mit.edu>
-
-	* config.sub: Handle hiuxmpp as system type.
-
-Thu Dec 26 13:33:27 1996  Michael Meissner  <meissner@tiktok.cygnus.com>
-
-	* rs6000.md (init_v4_pic): Explicitly set the length.
-
-Mon Dec 23 19:39:38 1996  Jim Wilson  <wilson@cygnus.com>
-
-	* mips.h (FUNCTION_ARG_REGNO_P): Correct for TARGET_SOFT_FLOAT and
-	TARGET_FLOAT64 cases.
-
-	* integrate.c (function_cannot_inline_p): Reject function with
-	PARALLEL result.
-	(expand_inline_function): Abort if function result not handled.
-
-Sat Dec 21 04:02:46 1996  Jason Merrill  <jason@gerbil.cygnus.com>
-
-	* mips.c (save_restore_insns): Mark large frame setup insns
-	as frame-related.
-	(mips_expand_prologue): Likewise.
-
-	* dwarf2out.c (dwarf2out_frame_debug): Support MIPS large frames.
-	(add_bound_info): Use default lower bounds.
-	Handle simple variable bounds with a DIE ref.
-	Don't generate a NULL loc descr.
-	(add_subscript_info): Always add lower bound.
-	(gen_formal_parameter_die): Always equate_decl_number_to_die.
-	(gen_variable_die): Likewise.  Don't use the old die for automatic
-	variables.
-
-Wed Dec 18 10:23:46 1996  Jeffrey A Law  (law@cygnus.com)
-
-	* mn10300.c (notice_update_cc): Enable this code.
-	* mn10300.h (CC_OVERFLOW_UNUSABLE): Define.
-	* mn10300.md (tstsi): Use "set_zn_c0" instead of "set" for cc status.
-	(addsi3 pattern): Break "inc" into two different alternatives
-	since "inc dn" sets cc0, but "inc an" does not.
-	(multiply and divide patterns): Fix cc status.
-	(bCC, inverted bCC): Restore any comparison which needs the
-	overflow bits when CC_OVERFLOW_UNUSABLE is set.
-	(zero and sign extensions): Fix cc status.
-	(movm_store): Likewise.
-
-Tue Dec 17 15:02:44 1996  Jim Wilson  <wilson@cygnus.com>
-
-	* sched.c (update_flow_info): When add REG_DEAD notes for dest of
-	last insn, add check for global_regs.
-
-Tue Dec 17 11:07:26 1996  Michael Meissner  <meissner@tiktok.cygnus.com>
-
-	* rs6000/win-nt.h (HAS_INIT_SECTION): Delete, so that __main is
-	called from main.
-
-Mon Dec 16 15:28:44 1996  Jim Wilson  <wilson@cygnus.com>
-
-	* combine.c (nonzero_bits): Ifdef out calls to num_sign_bit_copies.
-	Add dummy define/undef for num_sign_bit_copies.
-
-	* dwarfout.c (location_or_const_value_attribute, case CONCAT): Add.
-
-	* combine.c (simplify_comparison): Use mode_width as shift count
-	only if it is less than or equal to HOST_BITS_PER_WIDE_INT.
-
-Mon Dec 16 10:10:11 1996  Jeffrey A Law  (law@cygnus.com)
-
-	* mn10300.c (expand_epilogue): Restore registers in the
-	"ret" instruction instead of a separate movm instruction.
-	Support possible stack deallocation in "ret" instruction too.
-	* mn10300.md (return_internal): Use "ret" instead of "rets";
-	restore registers and deallocate stack as needed.
-	(load_movm): Delete unused pattern.
-
-	* mn10300.h (SMALL_REGISTER_CLASSES): Define.
-
-Fri Dec 13 14:46:54 1996  J"orn Rennecke <amylaar@cygnus.co.uk>
-
-	* sh.md (dect): Rewrite pattern so that it can be combined.
-
-Fri Dec 13 13:14:51 1996  Ian Lance Taylor  <ian@cygnus.com>
-
-	* varasm.c (output_constant_pool): If ASM_OUTPUT_POOL_EPILOGUE is
-	defined, call it.
-
-Thu Dec 12 20:04:55 1996  Jason Merrill  <jason@yorick.cygnus.com>
-
-	* rtl.h (RTX_FRAME_RELATED_P): New macro.
-	(struct rtx_def): Add frame_related bitfield.
-	* final.c (final_scan_insn): Call dwarf2out_frame_debug.  
-	Don't call dwarf2out_begin_function.
-	(final): Initialize dwarf2out_frame_debug.
-	* dwarf2out.c (dwarf2out_begin_function): Remove.
-	(dwarf2out_init): Use INCOMING_RETURN_ADDR_RTX.
-	(DWARF_CIE_DATA_ALIGNMENT): Generalize.
-	(DWARF_FRAME_REGNUM): Don't add 1.
-	(decode_cfi_rtl): Lose.
-	(dwarf2out_def_cfa): Now takes reg and offset directly.
-	(reg_save): Likewise.
-	(dwarf2out_reg_save): Now takes offset.
-	(initial_return_save): Grok INCOMING_RETURN_ADDR_RTX.
-	Replaces dwarf2out_return_save.
-	(dwarf2out_cfi_label): New fn.
-	(add_fde_cfi): Use it.
-	(dwarf2out_frame_debug): New fn.
-	* mips.h (DWARF_FRAME_REGNUM): Tweak r31.
-	(INCOMING_RETURN_ADDR_RTX): Define.
-	* mips.c (mips_expand_prologue): Set RTX_FRAME_RELATED_P as needed.
-	(save_restore_insns): Likewise.
-	* i386.c (ix86_expand_prologue): Likewise.
-	* i386.h (INCOMING_RETURN_ADDR_RTX): Define.
-	(DWARF_FRAME_RETURN_COLUMN): Define.
-
-	* dwarf2out.c (add_AT_long_long): Renamed from add_AT_double for
-	clarity.
-	(print_die): Adjust.
-	(add_AT_float): New fn.
-	(add_const_value_attribute): Support fp values.
-	(size_of_die): Use blocks for long_long and fp values.
-	(value_format): Likewise.
-	(output_die): Likewise.
-	(output_loc_operands): Don't support DW_OP_const8?.
-
-Thu Dec 12 19:49:09 1996  Ian Lance Taylor  <ian@cygnus.com>
-
-	* varasm.c (CONSTANT_POOL_BEFORE_FUNCTION): Define if not
-	defined.
-	(assemble_start_function): Check CONSTANT_POOL_BEFORE_FUNCTION
-	to decide whether to call output_constant_pool.
-	(assemble_end_function): Likewise.
-
-	* calls.c: Check SMALL_REGISTER_CLASSES at run time as well as at
-	compile time.
-	* combine.c, cse.c, function.c, jump.c, local-alloc.c: Likewise.
-	* loop.c, reload.c, reload1.c: Likewise.
-	* dsp16xx.h (SMALL_REGISTER_CLASSES): Define with value.
-	* h8300.h (SMALL_REGISTER_CLASSES): Likewise.
-	* i386.h (SMALL_REGISTER_CLASSES): Likewise.
-	* pdp11.h (SMALL_REGISTER_CLASSES): Likewise.
-	* sh.h (SMALL_REGISTER_CLASSES): Likewise.
-
-Thu Dec 12 15:25:39 1996  Michael Meissner  <meissner@tiktok.cygnus.com>
-
-	* rs6000.md (sysv call insns): If flag_pic add @plt suffix.
-
-	* rs6000.md (fix_truncdfsi2_store): Fix offsets > 32k.
-
-	* rs6000/t-ppccomm: New file for common parts of embedded and
-	System V target Makefile support.
-
-	* rs6000/t-ppcos: New file for System V OS target Makefile
-	support.
-
-	* rs6000/t-solaris: Delete, merge into rs6000/t-ppcos.
-
-	* rs6000/t-{ppc,ppcgas}: Only keep the multilib specific parts,
-	moving the rest to rs6000/t-ppccomm.
-
-	* configure (powerpc*-*-*): For embedded and System V
-	configurations, add rs6000/t-ppccomm.  For Linux and Solaris, use
-	t-ppcos.
-
-	* ginclude/ppc-asm.h (cr*, f*): Add new macros for register names.
-
-	* rs6000/sol-c0.c (_start): Fix uninitialized data bug.
-
-	* rs6000.md (init_v4_pic): Add @local to call.
-	(icbi,dcbst,sync,isync): Delete PowerPC cache control insns.
-
-	* rs6000/sysv4.h (ASM_SPEC): On explicit -mcall-solaris, pass
-	-msolaris to the assembler.
-
-	* rs6000.c (rs6000_sync_trampoline): Delete.
-	(rs6000_trampoline_template): Aix & System V don't need template now.
-	(rs6000_initialize_trampoline): For System V, call the function
-	__trampoline_setup to set up the trampoline.
-
-	* rs6000.h (TRAMPOLINE_TEMPLATE): Delete here.
-	* rs6000/win-nt.h (TRAMPOLINE_TEMPLATE): Add it here.
-
-	* rs6000/tramp.asm: New file, setup trampolines properly on System
-	V systems, properly flushing the caches.
-
-Thu Dec 12 10:53:10 1996  Jeffrey A Law  (law@cygnus.com)
-
-	* reorg.c (fill_slots_from_thread): Don't call eligible_for_delay
-	with an insn with asm operands.
-
-	* expmed.c (emit_store_flag_force): Fix typos/thinkos.
-
-Thu Dec 12 08:09:20 1996  J"orn Rennecke <amylaar@cygnus.co.uk>
-
-	* i386.c (i386_return_pops_args): Libcalls ignore TARGET_RTD.
-
-Thu Dec 12 07:56:03 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)
-
-	* tree.h (maybe_get_identifier): New declaration.
-
-	* calls.c (emit_library_call): Don't pass VOIDmode to type_for_mode.
-
-	* va-alpha.h: Add definitions for VMS; they differ from Unix.
-
-	* Makefile.in (stamp-objlist): Handle first character of object 
-	file being a digit.
-
-	* 1750a.h (function_arg, {movcnt,mod}_regno_adjust): Add decls.
-	(branch_or_jump): Likewise.
-	(FUNCTION_ARG): Remove cast of function_arg result to rtx.
-	* 1750a.md: Remove unneeded casts to char *.
-
-Thu Dec 12 05:55:27 1996  Richard Earnshaw (rearnsha@armltd.co.uk)
-
-	* arm.c (arm_gen_constant, case [IX]OR): Don't invert constant if
-	loading into temporary.
-
-Wed Dec 11 18:57:21 1996  Brendan Kehoe  <brendan@lisa.cygnus.com>
-
-	* toplev.c (rest_of_compilation): Make sure unwinder RTL is saved.
-
-	* collect2.c (write_c_file): Wrap the ctor/dtor lists and fns
-	with `extern "C" { ... }'.
-
-Wed Dec 11 17:46:48 1996  John F. Carr  <jfc@mit.edu>
-
-	* tree.h (tree_decl): Reorder field declarations to reduce size
-	on 64 bit machines.
-
-	* combine.c (try_combine): When splitting an insn, check for the
-	new I2 setting a SUBREG.
-
-Wed Dec 11 17:00:47 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)
-
-	* alpha.c (print_operand): Use HOST_WIDE_INT_PRINT_DEC instead of
-	using "%ld".
-	(output_prolog): Don't print useless comment for VMS.
-
-	* alpha.c (output_prolog): SIZE is now HOST_WIDE_INT.
-	* alpha.md (mov[hq]i unnamed): Split up for TARGET_BYTE_OPS and not.
-
-	* function.c (fixup_var_refs_1, case ZERO_EXTRACT): Don't call
-	fixup_memory_subreg if no longer SUBREG of MEM.
-
-Wed Dec 11 14:10:48 1996  Jeffrey A Law  (law@cygnus.com)
-
-	* mn10300.c: New file for Matsushita MN10300 port.
-	* mn10300.h, mn10300.md, t-mn10300, xm-mn10300.h: Likewise.
-	* config.sub: Recognize mn10300 as a basic machine type.
-	* configure: Similarly.
-	* ginclude/stdarg.h: mn10300 is little endian.
-	* ginclude/varargs.h: Likewise.
-
-Wed Dec 11 09:09:10 1996  Nagai Takayuki <nagai@ics.es.osaka-u.ac.jp>
-
-	* libgcc2.c (cacheflush): Add SONY NEWS-OS 4.2 version.
-
-Wed Dec 11 09:01:39 1996  J"orn Rennecke <amylaar@cygnus.co.uk>
-
-	* calls.c (emit_library_call, emit_library_call_value):
-	Don't pass an identifier node as function type for
-	library functions, but rather build a function type that
-	has a return type with the correct mode.
-	* i386.c (i386_return_pops_args): Don't test for IDENTIFIER_NODE.
-	* i386/isc.h (obsolete RETURN_POPS_ARGS): Test first argument
-	for IDENTIFIER_NODE.
-	* i386/next.h (RETURN_POPS_ARGS): Likewise.
-	* i386/sco.h (RETURN_POPS_ARGS): Likewise.
-	* i386/sco5.h (RETURN_POPS_ARGS): Likewise.
-	* i386/scodbx.h (RETURN_POPS_ARGS): Likewise.
-	* m68k.h (RETURN_POPS_ARGS): Likewise.
-	* ns32k.h (RETURN_POPS_ARGS): Likewise.
-	* pyr.h (RETURN_POPS_ARGS): Likewise.
-	* gmicro.h (RETURN_POPS_ARGS): Likewise; fix typo.
-
-Tue Dec 10 17:36:47 1996  J.T. Conklin  <jtc@rhino.cygnus.com>
-
-	* Add optimizations from John Vickers (john@rhizik.demon.co.uk)
-	* m68k.h (TARGET_CPU32): New macro.
-	* m68k.md (add[hs]i3): Only use two addq.w or subq.w instructions
-	when adding or subtracting constants 8 < N < 16 on TARGET_CPU32.
-	Use lea instead of add.w when adding 16 bit constants to address
-	registers on all but TARGET_68040.
-	* m68k.c (output_function_{pro,epi}logue): Use lea instead of add.w
-	when adjusting stack pointer on all but TARGET_68040.
-	
-Tue Dec 10 15:55:23 1996  Ian Lance Taylor  <ian@cygnus.com>
-
-	* optabs.c (emit_unop_insn): Treat ZERO_EXTEND like SIGN_EXTEND.
-
-Tue Dec 10 13:47:24 1996  Joern Rennecke <amylaar@cygnus.co.uk>
-
-	* combine.c (combinable_i3pat): Bring back to sync with can_combine_p.
-
-	* sh.h (ADJUST_INSN_LENGTH): Don't break from loop when LOOP_BEG found.
-	Calculate padding in new variable pad.
-
-Mon Dec  9 18:00:38 1996  Jason Merrill  <jason@yorick.cygnus.com>
-
-	* dwarf2out.c (output_uleb128): Output the value in a human-readable
- 	comment.
-	(output_sleb128): Likewise.
-	(various): Adjust.
-	(output_call_frame_info): Only output info if it's interesting.
-	(add_src_coords_attributes): New fn.
-	(add_name_and_src_coords_attributes): Split out from here.
-	(gen_enumeration_type_die): Add src coordinates.
-	(gen_struct_or_union_type_die): Likewise.
-	(dwarf2out_finish): Call output_call_frame_info for all targets.
-
-Thu Dec  5 11:25:30 1996  Jason Merrill  <jason@yorick.cygnus.com>
-
-	* dwarf2out.c (add_pure_or_virtual_attribute): Only add 
-	AT_containing_type if -g2 or higher.
-
-	* dwarf2out.c (gen_struct_or_union_type_die): Make sure that
-	the type for AT_containing_type has been generated.
-	(gen_decl_die): Likewise.
-
-	* dwarf2out.c (type_tag): Check DECL_IGNORED_P.
-	(add_pure_or_virtual_attribute): Check DECL_VINDEX instead.
-	(scope_die_for): Likewise.
-	* dwarfout.c (type_tag): Likewise.
-
-Wed Dec  4 22:51:38 1996  Jason Merrill  <jason@yorick.cygnus.com>
-
-	* dwarf2out.c (decode_cfi_rtl): Support getting a CONST_INT.
-	(dwarf2out_begin_function): Adjust.
-	(reg_save): Divide offset by the alignment.
-	(output_cfi): Support having more than one advance_loc.
-	(output_call_frame_info): Re-initialize current_label.
-	(dwarf2out_begin_prologue): Initialize current_label to NULL.
-	(lookup_cfa, lookup_cfa_1): New fns.
-	(dwarf2out_def_cfa): Call lookup_cfa.
-	(dwarf2out_finish): Don't generate CIE CFIs.
-	(dwarf2out_init): Generate them here.
-	(DWARF_FRAME_RETURN_COLUMN): Use PC_REGNUM.
-
-	(add_pure_or_virtual_attribute): Note virtual context.
-	(gen_formal_parameter_die): Return the die.
-	(gen_formal_types_die): Set AT_artificial on `this'.
-	(gen_subprogram_die): Add AT_accessibility.
-	(gen_variable_die): Likewise.
-	(gen_field_die): Likewise.  Don't generate location attribute for
-	union members.
-	(gen_struct_or_union_type_die): Note where our vtable lives.
-	(gen_decl_die): Handle anonymous union fields.
-	(dwarf2out_decl): Always output `bool'.
-
-Mon Dec  2 03:55:15 1996  Jason Merrill  <jason@yorick.cygnus.com>
-
-	* final.c (final_end_function): Don't call dwarf2out_end_function.
-
-	* dwarf2out.c (output_line_info): Emit special opcodes for each line
-	entry, even if the line number doesn't change.
-	(pend_type, output_pending_types_for_scope): New fns.
-	(gen_struct_or_union_type_die): Use them to defer generating member
-	dies if we're in the middle of some other context.
-	(gen_type_die): Still put nested types in the right place.
-	(dwarf2out_decl): Call output_pending_types_for_scope.
-
-	* dwarf2out.c (dw_fde_struct): Replace end_prologue, begin_epilogue
-	with current_label.
-	(DWARF_CIE_INSN_SIZE, DWARF_CIE_SIZE): Remove.
-	(DWARF_CIE_HEADER_SIZE): The size without the initial insns.
-	(size_of_cfi): Revert.
-	(decode_cfi_rtl, add_fde_cfi, dwarf2out_def_cfa, reg_save,
-	dwarf2out_reg_save, dwarf2out_return_save): New fns.
-	(dwarf2out_begin_function): Use them to generate CFIs.
-	(dwarf2out_finish): Use them to generate E CFIs.  
-	Don't set next_fde_offset.
-	(calc_fde_sizes): Initialize cie_size.
-	(output_call_frame_info): Don't generate CIE CFIs.
-	(dwarf2out_end_function): Remove.
-
-	* tree.c (maybe_get_identifier): New fn.
-	* varasm.c (assemble_name): Use it instead of get_identifier.
-
-Fri Nov 29 15:13:39 1996  Stan Cox  <coxs@dg-rtp.dg.com>
-
-	* jump.c (jump_optimize): Don't move initialization if there is a
-	label between it and the jump for if (foo) bar++ to bar += (foo !=0)
-	
-Wed Nov 27 16:21:14 1996  Stan Cox  <coxs@dg-rtp.dg.com>
-	
-	* Remove change of Oct 4.
-	* i386.h (outer_function_chain): Remove.
-	(current_function_calls_alloca): Remove.
-	(rtx_equal_function_value_matters): Remove.
-	(N_REGS_USED, N_ALLOCATABLE_REGISTERS): Remove.
-	* i386.md (adddi3_1, subdi3_1): Remove.
-	(adddi3, subdi3): Revert.
-	(movsf, movsf_mem, movsf_normal, movdf, movdf_mem, movdf_mem+1):
-	Likewise. 
-	(movxf, movxf_mem, movxf_mem+1, addsidi3_1, addsidi3_2): Likewise.
-	(adddi3_1, subsidi3, subdi3_1): Likewise.
-	(addsidi3_1, addsidi3_2, subsidi3): Likewise.
-	(addsidi3_1, addsidi3_2, adddi3, subsidi3): Disable the problem
-	reload alternatives. 
-	
-Wed Nov 27 16:21:14 1996  J"orn Rennecke <amylaar@cygnus.co.uk>
-
-	* i386.md (ashldi3_non_const_int, ashrdi3_non_const_int):
-	Use a hidden branch to handle shifts > 32 bit.
-	(lshrdi3_non_const_int): Likewise.
-	(floatdixf2): Don't use unnecessary XFmode operation.
-
-Wed Nov 27 15:23:41 1996  Jason Merrill  <jason@yorick.cygnus.com>
-
-	* varasm.c (assemble_variable): Don't emit DWARF.
-
-	* toplev.c (rest_of_type_compilation): Don't emit DWARF.
-	(main): Just let -gdwarf mean DWARF v1; remove -gdwarf-1.
-
-	* dwarfout.c (decl_class_context): New fn.
-	(output_global_subroutine_die): Fix declaration case.
-	(output_global_variable_die): Likewise.
-	(output_type): Note when we are in a class defn.  If we're a nested
-	type and our context hasn't been written, do that.  Do early exit
-	for nested types.
-	(output_decl): Output the class context for fns and vars.
-	Don't emit detailed parm info for a fn declaration.
-	Use TYPE_DECL_IS_STUB, is_redundant_typedef.
-	(type_ok_for_scope): Support emitting nested types later.
-	(is_redundant_typedef): New fn.
-	(TYPE_DECL_IS_STUB): New macro.
-	(output_compile_unit_die): Check use_gnu_debug_info_extensions.
-	(output_local_subroutine_die, output_global_subroutine_die,
-	dwarfout_begin_function, dwarfout_end_function, dwarfout_line,
-	generate_macinfo_entry, dwarfout_init, dwarfout_finish): Likewise.
-
-	* dwarf2out.c (decl_class_context): Static.
-	(lookup_type_die): Use TYPE_SYMTAB_POINTER.
-	(equate_type_number_to_die): Likewise.
-	(gen_subprogram_die): If we're in class context, it's a decl.
-	(gen_variable_die): Likewise.
-	(gen_decl_die): Output the containing type.
-	(dwarf2out_init): Lose type_die_table code.
-
-Wed Nov 27 08:30:54 1996  Brendan Kehoe  <brendan@lisa.cygnus.com>
-
-        * Makefile.in (DRIVER_DEFINES): New macro, with the macro
-        definitions for the driver.
-        (gcc.o): Make rule use $(DRIVER_DEFINES).
-        * gcc.c (process_command) [LANG_SPECIFIC_DRIVER]: Call
-        lang_specific_driver, passing along the addr of FATAL for errors
-        along with our ARGC and ARGV.
-
-Wed Nov 27 08:21:13 1996  Philippe De Muyter  <phdm@info.ucl.ac.be>
-
-	* m68k.md (iorsi_zexthi_ashl16): New pattern.
-	(ashrsi_16): New name for old unnamed pattern.
-
-	* objc/misc.c (stdlib.h): Define __USE_FIXED_PROTOTYPES__ before
-	including stdlib.h.
-
-Wed Nov 27 08:17:34 1996  Joern Rennecke <amylaar@cygnus.co.uk>
-
-        * i386.md (decrement_and_branch_until_zero+[3-8]): Add missing
-	CC_STATUS_INIT.
-	(decrement_and_branch_until_zero+[5-8]): Delete redundant assignment.
-
-Wed Nov 27 07:56:27 1996  J.T. Conklin  <jtc@rhino.cygnus.com>
-
-	* m68k.md ({and,ior,xor}si3_internal): Removed !TARGET_5200 from
- 	conditionals now that entire insn is disabled when !TARGET_5200.
-	
-Wed Nov 27 07:52:32 1996  Oliver Kellogg  <kellogg@space.otn.dasa.de>
-
-	* 1750a.md (movhi pattern):  Fixed MEM to MEM move problem.
-
-Tue Nov 26 14:50:54 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)
-
-	* expr.c (move_by_pieces): Abort only if length positive at end.
-	* function.c (frame_offset, get_frame_size): Make HOST_WIDE_INT.
-	* function.h (struct function): Make frame_offset be HOST_WIDE_INT.
-	(get_frame_size): Add definition.
-	* reload1.c (reload): Make starting_frame_size be HOST_WIDE_INT.
-
-Mon Nov 25 16:55:14 1996  Jason Merrill  <jason@yorick.cygnus.com>
-
-	* dwarf2out.c (dwarf2out_finish): Don't emit call frame info
-	for non-MIPS targets.
-	(is_redundant_typedef): New fn.
-	(modified_type_die): Refer to typedef DIEs where appropriate.
-	(gen_typedef_die): Support DECL_ORIGINAL_TYPE.
-	(gen_type_die): Likewise.  Use is_redundant_typedef.
-	(gen_subprogram_die): Don't force a spec DIE for local class methods.
-
-Mon Nov 25 15:09:12 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)
-
-	* gcc.c (handle_braces): Rework last change.
-
-Mon Nov 25 13:49:51 1996  Jim Wilson  <wilson@cygnus.com>
-
-	* configure (build_exeext, exeext): New variables.  Use sed to insert
-	build_exeext value into Makefile exeext rule.
-	(*-*-cygwin32): Set exeext.
-	* i386/x-cygwin32 (exeext): Delete.
-	* rs6000/x-cygwin32 (exeext): Delete.
-
-	* dwarf.h (enum dwarf_location_atom): Add OP_MULT.
-	* dwarfout.c (output_mem_loc_descriptor, case MULT): Add.
-	* dwarfout2.c (mem_loc_descriptor, case MULT): Add.
-
-	* dwarfout.c (dwarf_fund_type_name, case FT_unsigned_int64): Fix typo.
-
-Sun Nov 24 21:42:01 1996  J.T. Conklin  <jtc@rhino.cygnus.com>
-
-	* m68k.md (andsi3): Changed into define_expand.
-	(andsi3_internal): Rename from old andsi3, changed condition
-	to !TARGET_5200.
-	(andsi2_5200): New insn.
-	(iorsi3): Change into define_expand.
-	(iorsi2_internal): Rename from old iorsi3, changed condition 
-	to !TARGET_5200.
-	(iorsi2_5200): New insn.
-	(xorsi3): Change into define_expand.
-	(xorsi2_internal): Rename from old xorsi3, changed condition 
-	to !TARGET_5200.
-	(xorsi2_5200): New insn.
-
-Sun Nov 24 21:31:32 1996  John F. Carr  <jfc@mit.edu>
-
-	* i386.h (N_ALLOCATABLE_REGISTERS): Remove extra backslash at
-	end of macro definition.
-
-	* cpplib.c (LOCAL_INCLUDE_DIR): Remove default definition.
-	(include_defaults_array): Do not use LOCAL_INCLUDE_DIR or
-	TOOL_INCLUDE_DIR if they are not defined.
-	* cccp.c: Likewise.
-
-	* Makefile.in (cppmain.o): New rule.
-
-Sun Nov 24 19:14:50 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>
-
-	* fold-const.c (merge_ranges): In (+,-) case, if lower bounds are
-	the same the result is always false.
-
-Sun Nov 24 18:48:31 1996  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
-
-	* c-typeck.c (build_indirect_ref): Don't give warning for
- 	dereferencing void * if evaluation is being skipped.
-
-	* c-decl.c (poplevel): Don't call output_inline_function if
-	DECL_SAVED_INSNS is not set.
-
-	* gcc.c (give_switch): Add new arg, INCLUDE_BLANKS.
-	(handle_braces): All callers changed.
-	Add support for new construct: %{S*^}.
-
-Sun Nov 24 18:44:48 1996  Paul Eggert  <eggert@twinsun.com>
-
-	* c-parse.in (unary_expr, expr_no_commas): Increment skip_evaluation
-	when analyzing an expression that is known not to be evaluated.
-	(sizeof, alignof): New rules.
-	* c-tree.h (skip_evaluation): New variable.
-	* c-common.c (skip_evaluation): Likewise.
-	(overflow_warning, unsigned_conversion_warning): Don't warn about
-	potential runtime errors when skipping evaluation.
-	* c-typeck.c (build_binary_op): Likewise.
-	(build_conditional_expr): op1 now always nonnull.
-
-Sun Nov 24 17:06:58 1996  Bernd Schmidt  (crux@Pool.Informatik.RWTH-Aachen.DE)
-
-	* toplev.c (rest_of_compilation): Call regscan before each
-	jump threading pass.
-
-Sun Nov 24 16:37:18 1996  Dave Love  <d.love@dl.ac.uk>
-
-	* configure (objc_thread_file): Set conditionally in each case so
-	may be overidden with `--enable-objcthreads=posix'.
-	Change Linux default to `single'.
-
-Fri Nov 22 17:53:15 1996  Jason Merrill  <jason@yorick.cygnus.com>
-
-	* varasm.c (assemble_variable): Output DWARF in the third case, too.
-
-	* dwarf2out.c (decls_for_scope): Only add DIEs with no parents to
-	our scope.
-	(gen_subroutine_type_die): Parm types go under the fn type DIE.
-
-	* Makefile.in ($(T)crt{begin,end}.o): Move CRTSTUFF_T_CFLAGS after 
-	general flags.
-
-	* mips/t-iris6 (CRTSTUFF_T_CFLAGS): Define.
-	* mips.c (compute_frame_size): Fix fp_save_offset.
-
-	* dwarf2out.c (new_die): If we get a NULL parent, inc limbo_die_count.
-	(decls_for_scope): Decrement limbo_die_count as appropriate.
-	(dwarf2out_finish): Check for good limbo_die_count.
-	(size_of_cfi): If regno too big for DW_CFA_offset, use offset_extended
-	instead.
-	(output_call_frame_info): Add disabled code for specifying ABI.
-	(dwarf2out_begin_function): Note all saved regs.
-
-	* dwarf2out.c (gen_subprogram_die): Have a DIE for each fn at
-	toplevel.
-	(scope_die_for): Only use the NULL for fns and tags.
-
-Tue Nov 21 15:53:51 1996  Joern Rennecke <amylaar@cygnus.co.uk>
-
-	* sh.c (output_stack_adjust): New argument TEMP.  Changed all callers. 
-	If the adjust cannot be done with one, but can be done with two 
-	CONST_OK_FOR_I constants, do it that way.
-
-Thu Nov 21 14:25:55 1996  Ian Lance Taylor  <ian@cygnus.com>
-
-	* fixincludes: Include <stdio.h> in <assert.h> even if not C++ if
-	stderr needs to be defined.
-
-Wed Nov 20 15:38:13 1996  Jason Merrill  <jason@yorick.cygnus.com>
-
-	* toplev.c (rest_of_type_compilation): Do output function-scope tags
-	for DWARF 2.
-	* c-decl.c (pushtag): Set TYPE_CONTEXT on the tag.
-	* toplev.c, varasm.c: s/dwarf2out_file_scope_decl/dwarf2out_decl/g.
-	* dwarf2out.c (add_prototyped_attribute): Use a value of 1.
-	(gen_subprogram_die): Support AT_static_link.
-	(dwarf2out_decl): Rename from dwarf2out_file_scope_decl.
-	Give nested fns and tags a die_parent of NULL.
-	(decls_for_scope): Fix the die_parent for nested fns and tags.
-	(scope_die_for): If we get a context of NULL, just return it.
-
-Tue Nov 19 18:21:11 1996  Jason Merrill  <jason@yorick.cygnus.com>
-
-	* dwarf2out.c (gen_subprogram_die): Support block extern decls.
-	(gen_variable_die): Likewise.
-	(gen_decl_die): Emit block extern function decls.
-
-	* c-decl.c (implicitly_declare): Set DECL_ARTIFICIAL.
-
-Tue Nov 19 16:50:32 1996  Michael Meissner  <meissner@tiktok.cygnus.com>
-
-	* configure (powerpc*-{sysv,elf,eabi{,aix,sim}}): Set
-	extra_headers to ppc-asm.h.
-	(powerpc*-{linux,solaris,rtems,vxworks}): Ditto.
-	(powerpc*-{winnt,pe,cygwin32}): Ditto.
-
-	* rs6000/t-{ppc,ppcgas,solaris,winnt} (EXTRA_HEADERS): Don't set
-	it here.
-
-Mon Nov 18 14:51:46 1996  Jason Merrill  <jason@yorick.cygnus.com>
-
-	* dwarf2out.c (DWARF_CIE_INSN_SIZE): New macro.
-	(DWARF_CIE_HEADER_SIZE): Use it.
-	(DWARF_FRAME_RETURN_COLUMN, DWARF_FRAME_REGNUM): New macros.
-	(output_call_frame_info, dwarf2out_begin_function): Use them.  
-	For the MIPS, output the first CFA insn in the CIE.
-	* dwarf2.h (enum dwarf_call_reg_usage): Lose.
-	(dwarf_macinfo_record_type): Fix spelling.
-	* mips/mips.h (DWARF_FRAME_REGNUM, DWARF_FRAME_RETURN_COLUMN): Define.
-
-	* dwarf2out.c (base_type_die): Just generate the DIEs as needed,
- 	rather than building up some table.
-	(init_base_type_table): Lose.
-	(add_subscript_info): Use add_type_attribute.  Don't give an upper
-	bound for an array of unknown size.
-	(gen_unspecified_parameters_die): Remove DWARF-1 kludge.
-	(dwarf2out_init): Lose call to init_base_type_table.
-	(is_c_family, is_fortran): New fns.
-	(gen_compile_unit_die): Recognize GNU F77.
-	(gen_array_type_die): Use AT_declaration for an array of unknown size.
-	(modified_type_die): Take TYPE_MAIN_VARIANT before passing it
-	to build_type_variant, so we ignore named variants.
-	(dwarf2out_file_scope_decl): Don't generate DIEs for built-in structs,
-	either; they will be emitted if they are used.
-	From wilson:
-	(gen_array_type_die): Force the element type out first on IRIX 6.
-
-Sun Nov 17 20:23:11 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)
-
-	* expr.c (get_inner_reference): Fix error in previous change.
-
-Sat Nov 16 06:08:27 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)
-
-	* emit-rtl.c (operand_subword): Avoid confusion if sizeof (float)
-	is less than a full word.
-
-	* alpha.h (MASK_BYTE_OPS): Now define as 1024.
-	* alpha/vms.h (TARGET_DEFAULT): Use symbolic values.
-
-	* expr.c (get_inner_reference): Add new arg PALIGNMENT and compute it.
-	(expand_assignment, do_jump): Pass new arg to get_inner_reference.
-	(expand_expr, case COMPONENT_REF): Likewise.
-	* fold-const.c (optimize_bit_field_compare, decode_field_reference):
-	Likewise.
-	* tree.h (get_inner_reference): Add new arg.
-
-	* Add support for Alpha/VMS, mostly from
-	Klaus Kaempf (kkaempf@progis.de)
-	* configure (alpha-dec-vms*): New target.
-	* alpha.c (override_options): Handle VAX format floating-point.
-	(print_operand, case ',', '-'): New cases.
-	(alpha_builtin_saveregs): Handle VMS convention.
-	(alpha_sa_{mask,size}, alpha_pv_save_size, alpha_using_fp):
-	New versions for VMS.
-	(output_{pro,epi}logue, function_arg): Likewise.
-	(direct_return): Never true on VMS.
-	(check_float_value): Return 0 for VMS.
-	(vmskrunch, alpha_{need,write}_linkage): New function.
-	* alpha.h ({MASK,TARGET}_{OPEN_VMS,FLOAT_VAX}): New macros.
-	(TARGET_SWITCHES): Add float-vax and float-ieee.
-	({FUNCTION,LIBCALL}_VALUE, FUNCTION_VALUE_REGNO_P): R1 and R33
-	are also return registers.
-	(ASM_OUTPUT_DOUBLE): Support both floating-point formats.
-	(PRINT_OPERAND_FUNCT_VALID_P): Add ',' and '-'.
-	* alpha.md ({div,mod}[sd]i3): Only for VMS.
-	(fp operations): Add modifiers for multiple floating-point formats.
-	(call patterns): Handle new calling sequence for VMS.
-	(tablejump): Make new pattern for VMS.
-	(nonlocal_goto_receiver, arg_home): New patterns.
-	* alpha/t-vms, alpha/vms.h, alpha/xm-vms.h: New files.
-
-Fri Nov 15 17:38:20 1996  Doug Evans  <dje@seba.cygnus.com>
-
-	* sdbout.c (current_file): New global.
-	(PUT_SDB_SRC_FILE): New PUT_SDB_FOO macro.
-	(sdbout_init): Initialize current_file ifdef MIPS_DEBUGGING_INFO.
-	(sdbout_{start_new,resume_previous}_source_file): New functions.
-	* toplev.c (debug_{start,end}_source_file): Call them if SDB_DEBUG.
-	* mips.h (PUT_SDB_SRC_FILE): Define.
-
-Fri Nov 15 16:11:25 1996  Jason Merrill  <jason@yorick.cygnus.com>
-
-	* dwarfout.c (dwarfout_line): Don't emit line number info for
-	functions outside of .text.
-
-Fri Nov 15 15:52:42 1996  Stan Cox  <coxs@dg-rtp.dg.com>
-
-	* i386/386bsd.h (COMMENT_BEGIN): Delete.
-	* i386/freebsd.h (COMMENT_BEGIN): Likewise.
-	* i386/netbsd.h (COMMENT_BEGIN): Likewise.
-	* i386/unix.h (COMMENT_BEGIN): Likewise.
-
-Fri Nov 15 13:22:42 1996  Jim Wilson  <wilson@cygnus.com>
-
-	* fold-const.c (unextend): Rewrite type conversions to avoid overflow.
-
-Fri Nov 15 12:11:28 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)
-
-	* combine.c (try_combine): Properly copy an rtvec.
-	* emit-rtl.c (gen_rtvec_vv): New function.
-	(copy_rtx_if_shared): Call it.
-	* integrate.c (copy_for_inline): Likewise.
-	* reload1.c (eliminate_regs): Likewise.
-	* rtl.h (gen_rtvec_vv): Declare.
-	* genattrtab.c (simplify_cond): Make TESTS an array of rtunions.
-	* genextract.c (main): Use loop, not bcopy, to set recog_operands
-	from an rtvec.
-	* rtl.c (rtvec_alloc): Clear rtwint instead of rtvec.
-
-	* machmode.h (HOST_PTR_PRINTF): Handle char * wider than long.
-	(HOST_WIDE_INT_PRINT_{DEC,UNSIGNED,HEX,DOUBLE_HEX}): New macros.
-	* final.c (asm_fprintf): Use "ll" prefix for a long long HOST_WIDE_INT.
-	(output_{asm_insn,addr_const}): Use HOST_WIDE_INT_PRINT_*.
-	* print-tree.c (print_node{,_brief}, case INTEGER_CST): Likewise.
-	* print-rtl.c (print_rtx, case 'w'): Use HOST_WIDE_INT_PRINT_DEC.
-
-	* unroll.c (iteration_info): Fix code so that it knows iteration_var
-	is a HOST_WIDE_INT, not a long.
-
-	* fold-const.c (operand_equal_p): Do real comparison with
-	REAL_VALUES_EQUAL.
-	(make_range): Properly decide when to get TREE_TYPE of arg0.
-	Handle EXP being an INTEGER_CST at end.
-	(fold_range_test): Handle return of 0 from make_range.
-	(fold, case TRUTH_AND_EXPR): Handle first arg of 0.
-	(fold, case TRUTH_OR_EXPR): Handle first arg of 1.
-
-	* c-common.c (decl_attributes, case A_ALIAS): Add missing parens.
-
-Fri Nov 15 06:37:54 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>
-
-	* fold-const.c (range_binop): Set SNG1 to zero if ARG1 is a
-	not a lower or upper bound.
-
-Thu Nov 14 23:08:25 1996  Jason Merrill  <jason@yorick.cygnus.com>
-
-	* flags.h (debug_info_type): Add DWARF2_DEBUG.
-	* toplev.c (main): Support DWARF2_DEBUG.  Add -gdwarf-1, -gdwarf-2
- 	options.  Check debug level after choosing type.
-	(debug_{start,end}_source_file, debug_{define,undef}): New functions.
-	(compile_file): Support dwarf2 separately from dwarf1. 
-	(rest_of_type_compilation, rest_of_compilation): Likewise.
-	* final.c (final_start_function): Likewise.
-	(final_end_function, final_scan_insn, output_source_line): Likewise.
-	* varasm.c (assemble_variable): Likewise.
-	* dwarfout.c: Don't check DWARF_VERSION.
-	* dwarf2out.c: s/dwarfout/dwarf2out/g.  Check DWARF2_DEBUGGING_INFO.
-	* c-lex.c (check_newline): Use debug_* instead of calling *out
- 	functions directly.
-	* svr4.h (DWARF2_DEBUGGING_INFO): Define.
-	* mips/iris6.h (PREFERRED_DEBUGGING_TYPE): DWARF2_DEBUG.
-	(DWARF2_DEBUGGING_INFO): Define instead of DWARF_DEBUGGING_INFO.
-	(LINK_SPEC): Pass -w through.
-	* mips.h (PREFERRED_DEBUGGING_TYPE): Don't check `len'.
-
-Thu Nov 14 17:25:47 1996  Jeffrey A Law  (law@cygnus.com)
-
- 	* h8300.c (dosize): Don't clobber static chain reg if needed by
-	current function.
-
-Wed Nov 13 17:05:19 1996  Jason Merrill  <jason@yorick.cygnus.com>
-
-	* Makefile.in (stage?-start): Keep a copy of EXTRA_MULTILIB_PARTS
-	in the build directory.
-
-Tue Nov 12 23:17:17 1996  Jeffrey A Law  (law@cygnus.com)
-
-	* pa.c (print_operand, case 'Y'): Fix comparisons to handle
-	NaNs properly in all cases.
-
-Tue Nov 12 18:47:24 1996  Jim Wilson  <wilson@cygnus.com>
-
-	* expr.c (emit_group_store): For REG case, call gen_lowpart if
-	modes are different.
-
-Tue Nov 12 18:24:40 1996  Doug Rupp  (rupp@gnat.com)
-
-	* gcc.c (exit): If VMS, define as __posix_exit.
-	(option_map): Add define-macro and undefine-macro.
-
-Tue Nov 12 17:55:10 1996  Torbjorn Granlund  <tege@tege.pdc.kth.se>
-
-	* alpha.c (input_operand): If TARGET_BYTE_OPS accept HImode and QImode.
-	* alpha.h (MASK_BYTE_OPS): New define.
-	(TARGET_BYTE_OPS): New define.
-	(TARGET_SWITCHES): Handle -mbyte.
-	(LOAD_EXTEND_OP): When MODE is not SImode, return ZERO_EXTEND.
-	* alpha.md (zero_extendqidi2): Handle TARGET_BYTE_OPS.
-	(zero_extendhidi2): Likewise.
-	(zero_extendqisi2): Likewise.
-	(zero_extendhisi2): Likewise.
-	(extendqisi2): Use extendqidi2x if TARGET_BYTE_OPS.
-	(extendqidi2): Likewise.
-	(extendqidi2x): New pattern.
-	(extendhisi2): Use extendhidi2x if TARGET_BYTE_OPS.
-	(extendhidi2): Likewise.
-	(extendhidi2x): New pattern.
-	(movhi): Handle TARGET_BYTE_OPS.
-	(movhi matcher): Output ldwu and stw.
-	(movqi): Handle TARGET_BYTE_OPS.
-	(movqi matcher): Output ldbu and stb.
-
-Tue Nov 12 16:53:37 1996  Rob Savoye  <rob@chinadoll.cygnus.com>
-
-	* configure (hppa1.1-pro*, i960-*-coff*,m68k-*-aout*): Add libgloss.h.
-	(m68k-*-coff*, mips*-*-elf*, sparc*-*-aout*, sparc*-*-coff*): Likewise.
-	* config/libgloss.h: New file.
-
-Tue Nov 12 16:21:45 1996  Joern Rennecke <amylaar@cygnus.com>
-
-	* jump.c (jump_optimize): Fix bug in Sep 23 change.
-
-Tue Nov 12 16:15:31 1996  Andrew Cagney  (cagney@tpgi.com.au)
-
-	* global.c (prune_references): Add missing symmetic CONFLICTP call.
-
-Tue Nov 12 14:34:40 1996  Philippe De Muyter  <phdm@info.ucl.ac.be>
-
-	* m68k.c (output_function_{pro,epi}logue): Save and restore
-	fp-registers only if TARGET_68881.
-
-	* m68k/mot3300.h (ASM_OUTPUT_INTERNAL_LABEL): Prefix labels with "L%".
-	(ASM_GENERATE_INTERNAL_LABEL, ASM_OUTPUT_CASE_LABEL): Likewise.
-	(ASM_OUTPUT_ADDR_VEC_ELT, ASM_OUTPUT_ADDR_DIFF_ELT): Likewise.
-
-	* m68k/mot3300.h (TARGET_DEFAULT): Use MASK_68040_ALSO, not MASK_68040.
-	* m68k/next.h, m68k/ccur-GAS.h (TARGET_DEFAULT): Likewise.
-
-	* fixproto (std_files): Add sys/socket.h.
-
-	* m68k.md (movqi): Emit 'st' for INTVAL & 255 == 255, not INTVAL == -1.
-	(seq,sne,sgt,sgtu,slt,sltu,sge,sgeu,sle,sleu): Allow "m" as operand 0.
-
-Tue Nov 12 14:17:45 1996  Paul Eggert  <eggert@twinsun.com>
-
-	* c-decl.c (grokdeclarator): Generate a warning if -Wimplicit,
-	unless a warning was already generated by -Wreturn-type.
-
-Tue Nov 12 14:11:02 1996  Pat Rankin  <rankin@eql.caltech.edu>
-
-	* Make qsort callback routines conform to the ANSI/ISO standard.
-	* c-decl.c (field_decl_cmp): Use `const void *' arguments.
-	* global.c (allocno_compare): Likewise.
-	* reload1.c (hard_reg_use_compare, compare_spill_regs): Likewise.
-	(reload_reg_class_lower): Likewise.
-	* stupid.c (stupid_reg_compare): Likewise.
-	* local-alloc.c (qty_compare_1, qty_sugg_compare_1): Likewise.
-	(QTY_CMP_PRI, QTY_CMP_SUGG): New macros.
-	(qty_compare_1, qty_sugg_compare_1): Use them.
-
-Tue Nov 12 13:20:25 1996  Jim Wilson  <wilson@cygnus.com>
-
-	* fold-const.c (merge_ranges): In (+,-) case, treat subset specially
-	if lower bounds are the same.
-
-Tue Nov 12 13:10:01 1996  J.T. Conklin  <jtc@cygnus.com>
-
-	* m68k.md (addsi3): If TARGET_5200, use the lea insn to add small
-	constants to address registers.
-	(negsi2): Change into define_expand.
-	(negsi2_internal): Rename from old negsi2, changed condition
-	to !TARGET_5200.
-	(negsi2_5200): New insn.
-	(one_cmplsi2): Change into define_expand.
-	(one_cmplsi2_internal): Rename from old one_cmplsi2, changed
-	condition to !TARGET_5200.
-	(one_cmplsi2_5200): New insn.
-	(negdi2_5200): Corrected constraints.
-	(one_cmpldi2): Changed condition to !TARGET_5200.
-
-	* m68k.c (m68k_align_loops_string, m68k_align_jumps_string): New vars.
-	(m68k_align_funcs_string, m68k_align_loops): Likewise.
-	(m68k_align_jumps, m68k_align_funcs): Likewise.
-	(override_options): New function.
-	* m68k.h (TARGET_OPTIONS): Added alignment options.
-	(MAX_CODE_ALIGN, ASM_OUTPUT_LOOP_ALIGN, ASM_OUTPUT_ALIGN_CODE):
-	New macros.
-	(FUNCTION_BOUNDARY): Use value derrived from  m68k_align_funcs
-	instead of constant.
- 
-	* m68k.c (output_function_{pro,epi}logue): Fix typo in last change.
-
-Tue Nov 12 09:26:51 1996  Torbjorn Granlund  <tege@wombat.gnu.ai.mit.edu>
-
-	* i386.md (parallel inc/dec and branch-if-zero/nonzero): Use `+' in
-	constraint.
-
-Mon Nov 11 15:12:22 1996  Jason Merrill  <jason@yorick.cygnus.com>
-
-        * libgcc2.c: Also define WEAK_ALIAS if ASM_OUTPUT_WEAK_ALIAS.
-	* mips/iris6.h (ASM_OUTPUT_WEAK_ALIAS): Define.
-	* varasm.c (assemble_alias): Use ASM_OUTPUT_WEAK_ALIAS.
-
-	* dwarf2out.c (TYPE_USED_FOR_FUNCTION): Lose.
-	(gen_compile_unit_die): Only append -g with -g2 or better.
-	(scope_die_for): Don't emit any type info with -g1.
-	(gen_subprogram_die): Likewise.
-	(gen_decl_die): Likewise.
-	(dwarfout_file_scope_decl): Likewise.
-	(dwarfout_init): Likewise.
-
-	* mips/iris6.h (TYPE_ASM_OP): Define.
-	(SIZE_ASM_OP): Define.
-	(ASM_WEAKEN_LABEL): Define.
-	(BSS_SECTION_ASM_OP): Define.
-	(ASM_OUTPUT_ALIGNED_LOCAL): Don't use ASM_DECLARE_OBJECT_NAME.
-	(ASM_OUTPUT_ALIGNED_BSS): Define.
-	(ASM_DECLARE_OBJECT_NAME): Redefine to emit .size directive.
-	(ASM_FINISH_DECLARE_OBJECT): Define.
-	(ASM_OUTPUT_DEF): Don't define.
-
-Fri Nov  8 20:38:51 1996  Jim Wilson  <wilson@cygnus.com>
-
-	* function.c (expand_function_end): Handle BLKmode structures returned
-	in registers.
-
-Fri Nov  8 20:27:07 1996  Jason Merrill  <jason@yorick.cygnus.com>
-
-	* stor-layout.c (layout_record): Check for VAR_DECL instead 
-	of TREE_STATIC.
-
-	* varasm.c (assemble_variable): Do write out DWARF for 
-	record-scope variables.
-	* toplev.c (rest_of_type_compilation): Do write out DWARF for
- 	record-scope types.
-
-	* dwarf2out.c (gen_enumeration_type_die): Set TREE_ASM_WRITTEN on a
-	complete enum type.
-	(gen_struct_or_union_type_die): Don't recurse between nested classes.
-	(gen_type_die): Write out nested classes by writing out their context.
-
-Fri Nov  8 17:40:27 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)
-
-	* emit-rtl.c (change_address): If MEMREF isn't changing,
-	return the old one.
-
-	* expr.c (expand_assignment): Remove bogus resetting of alignment
-	to inner alignment.
-	(expand_expr, case COMPONENT_REF): Likewise.
-
-Fri Nov  8 16:31:31 1996  Stan Cox  <coxs@dg-rtp.dg.com>
-
-	* reg-stack.c (compare_for_stack_reg, subst_stack_regs_pat): 
-	Add support for float conditional move.
-
-Thu Nov  7 07:46:07 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)
-
-	* stor-layout.c (layout_record): Treat constant size as variable if
-	it overflows.
-	* fold-const.c (const_binop, case *_DIV_EXPR): Don't do special
-	sizetype case if a constant overflows.
-	(size_binop): Use integer_{zero,one}p instead of explicit test.
-	* tree.c (integer_{zero,one,all_ones,pow2}p, real_{zero,one,two}p):
-	Return 0 if TREE_CONSTANT_OVERFLOW.
-
-Wed Nov  6 17:53:33 1996  Torbjorn Granlund  <tege@wombat.gnu.ai.mit.edu>
-
-	* i386.md (parallel inc and branch-if-zero/nonzero): Add two
-	new pattern variants.  Change incrementing pattern to use incl/jnz.
-
-Wed Nov  6 09:46:10 1996  Stan Cox  <coxs@dg-rtp.dg.com>
-
-	* i386.c (override_options): Set defaults for -march and -mcpu.
-	(output_float_compare): Use cc_status.flags to mark if this
-	comparison can be done with fcomi.
-	(output_fp_cc0_set): A conditional move may be in a PARALLEL.
-
-	* i386.h (CC_FCOMI): Define
-
-	* i386.md (sgt,sgtu,sge,sle,bgt,blt,bge,ble): Use CC_FCOMI
-	(movsicc_1,movhicc_1): Use correct size suffix.
-	(movsfcc_1,movdfcc_1): Cleanup default move case.
-
-Wed Nov  6 09:46:10 1996  J"orn Rennecke <amylaar@cygnus.co.uk>
-
-	* i386.h (HARD_REGNO_MODE_OK): If long double isn't XFmode, can't
-	allow XFmode.
-
-Tue Nov  5 22:49:56 1996  J"orn Rennecke <amylaar@cygnus.co.uk>
-
-	* sh.md (define_split for and_shl_scratch):
-	Use rtx_equal_p on the operands to find out which alternative is used.
-	* sh.c (gen_shl_and): Try to generate shorter constant for and.
-
-Mon Nov  4 19:13:52 1996  Jason Merrill  <jason@yorick.cygnus.com>
-
-	* dwarf2out.c: Clean up unused variables.
-	Use ASM_{GENERATE,OUTPUT}_INTERNAL_LABEL, shorten label names.
- 	(loc_descriptor): Use reg_loc_descriptor.
-	(TYPE_DECL_IS_STUB): New macro.
-	(gen_decl_die): Use it.
-	(dwarfout_file_scope_decl): Use it.
-
-Mon Nov  4 10:23:46 1996  Michael Meissner  <meissner@tiktok.cygnus.com>
-
-	* ginclude/va-ppc.h (__va_regsave_t,va_start,va_end): Wrap macro
-	and structures inside #ifndef __VA_PPC_H__ to allow reinclusion.
-
-	* rs6000/rs6000.h (LEGITIMATE_SMALL_DATA_P): Don't allow -fpic or
-	TARGET_TOC.
-	(LEGITIMATE_LO_SUM_ADDRESS_P): Ditto.
-	(LEGITIMIZE_ADDRESS): Ditto.
-
-	* rs6000/rs6000.md (movsi): Don't call elf_{high,low} if -fpic.
-
-	* rs6000/cygwin32.h (STARTFILE_SPEC): Eliminate empty %{}.
-
-Sun Nov  3 15:56:35 1996  Michael Meissner  <meissner@tiktok.cygnus.com>
-
-	* rs6000/sysv4.h (TARGET_TOC): Plain -fpic does not require a TOC.
-	({MINIMAL_TOC,CONST}_SECTION_ASM_OP): -fpic should be treated like
-	-mrelocatable in these cases.
-	(ASM_OUTPUT_INT): Ditto.
-	(ASM_OUTPUT_SECTION_NAME): Ditto.
-	(ASM_OUTPUT_ALIGNED_LOCAL): Use sdata_section, not sbss_section.
-
-Fri Nov  1 19:57:13 1996  Jason Merrill  <jason@yorick.cygnus.com>
-
-	* dwarf2out.c (based_loc_descr): Use DBX_REGISTER_NUMBER.  The 
-	"frame base" is just the frame or stack reg without an offset.
-	(gen_subprogram_die): Likewise.
-	(dwarfout_begin_function): Use DBX_REGISTER_NUMBER.
-
-Fri Nov  1 09:50:05 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)
-
-	* fold-const.c (make_range): Don't merge unsigned case with range
-	containing upper bound; instead merge just with zero and convert
-	a range with no upper bound to opposite one with no lower bound.
-	(merge_ranges): In (+,-) case, don't treat subset specially if
-	the upper bounds are the same; fix typo in others case here.
-
-Thu Oct 31 20:12:13 1996  Jeffrey A Law  (law@cygnus.com)
-
-	* fold-const.c (make_range, case PLUS_EXPR): Correct
-	normalization of an unsigned range that wraps around zero.
-
-Thu Oct 31 21:06:37 1996  Jason Merrill  <jason@yorick.cygnus.com>
-
-	* mips/t-iris6 (EXTRA_MULTILIB_PARTS): Define.
-	(EXTRA_PARTS): Don't define.
-
-	* dwarf2out.c (gen_struct_or_union_type_die): Use AT_specification
-	for nested types defined outside their containing class.  Lose 
-	is_complete.
-	(gen_enumeration_type_die): Lose is_complete.
-	(gen_type_die): Lose is_complete.
-	(add_name_and_src_coords_attributes): Tweak.
-	(gen_subroutine_type_die): Use scope_die_for.
-	(gen_ptr_to_mbr_type_die): Likewise.
-	(gen_subprogram_die): Support AT_artificial.
-	(gen_variable_die): Likewise.
-	(dwarfout_file_scope_decl): Lose finalizing.
-
-Thu Oct 31 18:43:18 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)
-
-	* pa.c (emit_move_sequence): Refine previous change.
-
-Thu Oct 31 13:25:32 1996  Jim Wilson  <wilson@cygnus.com>
-
-	* crtstuff.c: Put HAS_INIT_SECTION ifdefs around Irix6 support.
-
-	* tree.c (decl_function_context): Handle QUAL_UNION_TYPE.
-
-	* calls.c (expand_call): Disable special handling for const calls
-	that return a PARALLEL rtx.
-	* expr.c (expand_expr, case CONSTRUCTOR): Don't use a PARALLEL
-	target.
-
-Thu Oct 31 11:45:00 1996  Michael Meissner  <meissner@tiktok.cygnus.com>
-
-	* rs6000/t-{ppcgas,ppc,solaris} (EXTRA_MULTILIB_PARTS): Add
-	{e,s}crt{i,n,0}.o.
-	({stmp,install}-crt): Delete, no longer used.
-	({,INSTALL_}LIBGCC): Remove {stmp,install}-crt rule.
-
-Thu Oct 31 02:49:58 1996  Torbjorn Granlund  <tege@nada.kth.se>
-
-	* i386.md (parallel inc and branch-if-zero/nonzero):
-	Check for -1, not zero.
-
-Wed Oct 30 15:50:49 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)
-
-	* fold-const.c (range_binop): Strip NOPs from result and
-	verify it's an INTEGER_CST.
-	(make_range, case BIT_NOT_EXPR): Fix typo in constant for PLUS_EXPR.
-
-	* stor-layout.c (layout_record): Use HOST_WIDE_INT for size.
-
-	* stmt.c (expand_asm_operands): Disallow matching constraints
-	on output and validate the numbers on inputs.
-
-Tue Oct 29 16:21:59 1996  Michael Meissner  <meissner@tiktok.cygnus.com>
-
-	* gcc.c (process_command,main): Process -specs=file and -specs
-	file after reading the main specs file to allow the user to
-	override the default.
-	(DEFAULT_WORD_SWITCH_TAKES_ARG): Add specs to list.
-	(option_map): Ditto.
-
-Tue Oct 29 15:49:18 1996  Jason Merrill  <jason@yorick.cygnus.com>
-
-	* Makefile.in (stmp-multilib): Pass $flags to s-m-sub in 
-	MULTILIB_CFLAGS.
-	(stmp-multilib-sub): Build EXTRA_MULTILIB_PARTS.
-	($(T)crt*.o): Add $(T), lose stamp-crt rule, use MULTILIB_CFLAGS.
-	(install-multilib): Install EXTRA_MULTILIB_PARTS.
-
-Mon Oct 28 20:09:39 1996  J"orn Rennecke <amylaar@cygnus.co.uk>
-
-	* sh.md (shl_sext_ext): Don't accept simple left/right shift
-	variant.
-	* sh.c (EXT_SHIFT_SIGNED): New macro.
-	(shl_sext_kind, gen_shl_sext): try left shift - sign extend -
-	left shift - arithmetic right shift in case 2.
-
-Mon Oct 28 14:55:42 1996  Jim Wilson  <wilson@cygnus.com>
-
-	* configure (sh-*-*): Set float_format to sh.
-	* config/float-sh.h: New file.
-
-Mon Oct 28 14:26:08 1996  Ian Lance Taylor  <ian@cygnus.com>
-
-	* mips/mips.h (RTX_COSTS): Add cases for SIGN_EXTEND and
-	ZERO_EXTEND.
-
-	* m68k/lb1sf68.asm: Change # to IMM in udivsi3 __mcf5200__.
-
-	* combine.c (simplify_rtx): Add some optimizations for TRUNCATE.
-	(expand_compound_operation): Add some optimizations for
-	ZERO_EXTEND.
-
-Mon Oct 28 14:11:20 1996  Gavin Koch  <gavin@cygnus.com>
-        
-	* varasm.c (make_decl_rtl,assemble_variable):
-	Allow named sections for uninitialized variables.
-
-Mon Oct 28 13:08:51 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)
-
-	* pa.c (emit_move_sequence): If reload in progress, replace
-	reference to pseudo with reference to corresponding MEM.
-
-	* c-typeck.c ({un,}signed_type): If can't do anything, call
-	signed_or_unsigned_type.
-	(signed_or_unsigned_type): If already right signedness, return.
-
-Mon Oct 28 13:05:26 1996  Stephen Williams (steve@icarus.com)
-
-	* i960.h: Add specification for -Jx types.
-	* i960/t-960bare: Include multilib support for Jx types.
-
-Mon Oct 28 10:06:00 1996  Michael Meissner  <meissner@tiktok.cygnus.com>
-
-	* rs6000/t-{ppc{,gas},solaris} (install-crt): Depend on
-	installdirs, not install-dir.
-
-	* rs6000/sysv4.h (TARGET_TOC): -fpic does not use a TOC area.
-
-Mon Oct 28 09:07:42 1996  J"orn Rennecke <amylaar@cygnus.co.uk>
-
-	* reload1.c (delete_output_reload): Don't use delete_insn
-	when deleting all stores into a replaced pseudo.
-
-	* sh.md (movsf_ieq, movsf_ie): Merged the former into the latter.
-	Changed matching define_split appropriately.
-	(movsf): Changed appropriately.
-	(reload_insf) Define.
-	* sh.h (SECONDARY_INPUT_RELOAD_CLASS): Define.
-
-Mon Oct 28 08:38:23 1996  J"orn Rennecke <amylaar@cygnus.co.uk>
-
-	* dsp16xx.h (ASM_OUTPUT_BYTE): adjust definition to actual type of
-	VALUE, which is HOST_WIDE_INT.
-
-Mon Oct 28 07:36:07 1996  Ulrich Drepper  <drepper@cygnus.com>
-
-	* ginclude/stddef.h: Make sure file is processed if some of the
-	known __need_* macros is defined.
-
-Sun Oct 27 21:37:59 1996  J.T. Conklin  <jtc@cygnus.com>
-
-	* m68k.c (output_function_prologue): Adjust SP then use movmel with
-	plain address indirect mode for TARGET_5200.
-	(output_function_epilogue): Disable moveml and use several movel's
-	instead for TARGET_5200.
-	(output_function_{pro,epi}logue): Use lea instruction to adjust
- 	stack pointer for short displacements for TARGET_5200.
-
-Sun Oct 27 15:27:45 1996  Jeffrey A Law  (law@cygnus.com)
-
-	* fold-const.c (merge_ranges): Fix thinko/typo.
-
-Sat Oct 26 22:07:04 1996  Ian Lance Taylor  <ian@cygnus.com>
-
-	* expr.c (convert_modes): Before returning a const_double for a
-	large unsigned value, zero extend an integer value if necessary.
-
-Sat Oct 26 15:24:55 1996  Philippe De Muyter  <phdm@info.ucl.ac.be>
-
-	* m68k/x-mot3300 (XCFLAGS): Disable native assembler's jump
-	optimization for expr.o and cp/decl.o.
-
-Sat Oct 26 14:04:09 1996  Ben Harris  <bjh21@cam.ac.uk>
-
-	* m68k.c (output_function_prologue): Add REGISTER_PREFIX to stack
-	probe instruction.
-
-Sat Oct 26 13:59:05 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)
-
-	* explow.c (allocate_dynamic_stack_space): Delete reference to
-	nonexistant macro ALLOCATE_OUTGOING_ARGS.
-
-	* next.h (CPP_PREDEFINES): Add -D_NEXT_SOURCE.
-
-Sat Oct 26 13:50:49 1996  Mark Mitchell  (mitchell@centerline.com)
-
-	* configure (i486-ncr-sysv4*): Use i386/sysv4gdb if stabs and gas.
-
-Sat Oct 26 12:20:35 1996  John F. Carr  <jfc@mit.edu>
-
-	* configure: Support --with-cpu=* for SPARC.  Or target default
-	values instead of adding them.
-	* sparc.c (cpu_default): Add entries for v8 and supersparc.
-	* sparc.h: Define TARGET_CPU values for v8 and supersparc.
-
-Sat Oct 26 11:38:01 1996  Kamil Iskra  <iskra@student.uci.agh.edu.pl>
-
-	* collect2.c (dump_file): Call fclose() for opened files.
-
-Sat Oct 26 11:29:29 1996  J"orn Rennecke  (amylaar@cygnus.co.uk)
-
-	* jump.c (jump_optimize): Fix second error in last change.
-
-	* svr3.h: Fix typo which makes comment text be non-comment.
-
-Fri Oct 25 16:18:39 1996  Michael Meissner  <meissner@tiktok.cygnus.com>
-
-	* rs6000/t-winnt (LIBGCC1): Don't build libgcc1.
-	(EXTRA_PARTS): Build crti.o, crtn.o.
-	(stmp-crt): Remove old multilib support.
-
-Thu Oct 24 15:09:14 1996  Jim Wilson  <wilson@cygnus.com>
-
-	* fold-const.c (make_range, case PLUS_EXPR): Normalize an unsigned
-	range that wraps around 0.
-
-Thu Oct 24 14:37:17 1996  Ian Lance Taylor  <ian@cygnus.com>
-
-	* mips.md: Change predicates for 64 bit arithmetic operations
-	so that they accept sign extended registers as operands.
-	(extendsidi2): Accept hi or lo as input.
-	* mips.c (movdi_operand, se_register_operand,
-	se_reg_or_0_operand, se_uns_arith_operand, se_arith_operand,
-	se_nonmemory_operand, se_nonimmediate_operand): New functions.
-	(mips_move_2words): Handle a SIGN_EXTEND source.
-	(print_operand): Handle a SIGN_EXTEND operand.
-	(mips_secondary_reload_class): Handle a SIGN_EXTEND rtx.
-	* mips.h: Declare new mips.c functions.
-	(PREDICATE_CODES): Add new functions.
-
-Thu Oct 24 07:41:14 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)
-
-	* fold-const.c (make_range, comparison cases): When making range
-	for unsigned to merge in, use full range.
-
-	* stor-layout.c (GET_MODE_ALIGNMENT): Delete definition; duplicate.
-
-Thu Oct 24 07:28:53 1996  J"orn Rennecke <amylaar@cygnus.co.uk>
-
-	* reload1.c (emit_reload_insns): Check for second_reloadreg
-	in SECONDARY_OUTPUT_RELOAD_CLASS / PRESERVE_DEATH_INFO_REGNO_P case.
-
-Wed Oct 23 14:27:43 1996  Mike Stump  <mrs@cygnus.com>
-
-	* crtstuff.c (__do_global_dtors_aux): Allow finalization code to
-	be run more than once.
-	* libgcc2.c (__do_global_dtors): Ditto.
-	
-Wed Oct 23 20:42:23 1996  Joern Rennecke <amylaar@cygnus.co.uk>
-
-	* sh.c (dump_table): handle SFmode and DFmode.
-	(broken_move): handle simple PARALLEL.
-	(machine_dependent_reorg, pc-relative move generation): Likewise.
-	* sh.h (CONST_DOUBLE_OK_FOR_LETTER_P): always true for 'F' .
-	(LEGITIMATE_CONSTANT_P): accept SFmode and DFmode.
-	* sh.md (movdf_k, movsf_i, movsf_ie): new alternative for
-	pc-relative load.
-	(movsf_ieq): new define_insn with matching define_split.
-	(movsf): use it where appropriate.
-	(consttable_sf, consttable_df): new define_insns.
-
-Wed Oct 23 17:48:32 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>
-
-	* svr4.h (MAKE_DECL_ONE_ONLY): Fix typo in use of macro parameter.
-
-Wed Oct 23 17:46:13 1996  Pat Rankin  <rankin@eql.caltech.edu>
-
-	* cexp.y (yylex): Cast string literal to U_CHAR* for lookup() call.
-
-Wed Oct 23 14:50:04 1996  Jason Merrill  <jason@yorick.cygnus.com>
-
-	* stmt.c (expand_return): Expand cleanups.  Make sure we get a
- 	pseudo-reg and provide a target in the non-BLKmode case.  Get return
- 	type of fn properly.
-
-Wed Oct 23 14:16:06 1996  Ian Lance Taylor  <ian@cygnus.com>
-
-	* reload.c (find_reloads): Handle any unary operator.
-	* recog.c (constrain_operands): Likewise.
-
-	* mips.md: Remove extendsidi2 define_expand. 
-	Rename extendsidi2_internal define_insn to extendsidi2, and add a
-	register to register case.
-
-Wed Oct 23 14:08:31 1996  Jim Wilson  <wilson@cygnus.com>
-
-	* a29k.c (a29k_makes_calls): New global variable.
-	(compute_regstack_size, a29k_compute_reg_names): New functions.
-	(output_prolog): Much code moved to two new functions.  Use
-	a29k_makes_calls instead of makes_calls.
-	* a29k.h (ASM_DECLARE_FUNCTION_NAME): Call a29k_compute_reg_names.
-
-	* calls.c (expand_call): In target code, move PARALLEL case above
-	target != case.
-
-	* mips.c (block_move_load_store, block_move_sequence): Delete.
-	(block_move_loop): New parameter orig_dest.  Call change_address to
-	create new MEM instead of gen_rtx.
-	(expand_block_move): New local orig_dest.  Pass it to block_move_loop.
-	Call change_address to create new MEM instead of gen_rtx.
-
-Wed Oct 23 10:30:32 1996  J"orn Rennecke <amylaar@cygnus.co.uk>
-
-	* loop.c (combine_givs): When combining a DEST_REG giv with its
-	only use, always set the benefit of the combined giv to that of
-	the DEST_REG giv.
-
-	* emit-rtl (gen_lowpart_common): When converting a floating
-	point value into an integer, use WORD as (first) word.
-
-	* combine.c (can_combine_p): When SMALL_REGISTER_CLASSES is defined,
-	avoid substituting a return register into I3.
-
-	* optabs.c (emit_libcall_block): Before adding an REG_EQUAL note,
-	check that it will really apply to a single instruction.
-	(expand_binop, expand_fix): Likewise.
-
-Wed Oct 23 10:20:52 1996  Stephen L Moshier  (moshier@world.std.com)
-
-	* real.c (exact_real_inverse): New function, if REAL_ARITHMETIC.
-	* fold-const.c (exact_real_inverse): Likewise, if no REAL_ARITHMETIC.
-	(fold, case RDIV_EXPR): Turn divide by constant into multiplication
-	by the reciprocal, if optimizing and result is exact.
-	* real.h (exact_real_inverse): Declare.
-
-Wed Oct 23 00:12:52 1996  Torbjorn Granlund  <tege@nada.kth.se>
-
-	* expr.h (emit_store_flag_force): Declare.
-
-Tue Oct 22 18:32:20 1996  Jim Wilson  <wilson@cygnus.com>
-
-	* unroll.c (unroll_loop): Always reject loops with unbalanced blocks.
-
-Tue Oct 22 18:27:06 1996  Ian Lance Taylor  <ian@cygnus.com>
-
-	* config/fp-bit.c (float_to_usi): Correct thinko: avoid a negative
-	shift.
-	(df_to_sf): Remember any discarded nonzero bits in the low order
-	guard bit.
-
-	* ginclude/va-mips.h: Add support for -mips1 and -msoft-float when
-	using -mabi=eabi.
-	* mips/abi64.h (SETUP_INCOMING_VARARGS): When MIPS EABI, handle
-	TARGET_SINGLE_FLOAT or ! TARGET_FLOAT64 correctly when saving
-	floating point registers to the stack.
-	* mips/mips.c (mips_function_value): If TARGET_SINGLE_FLOAT, use
-	GP_RETURN for floating point types larger than 4 bytes.
-
-Tue Oct 22 09:43:49 1996  Geoffrey Noer  <noer@cygnus.com>
-
-	* rs6000/cygwin32.h (LIB_SPEC): Add -lkernel32 all of the time,
-	and {user,gdi,comdlg}32 if -mwindows.
-
-Tue Oct 22 05:24:05 1996  Jason Merrill  <jason@yorick.cygnus.com>
-
-	* dwarf2out.c (scope_die_for): Don't skip lexical blocks.
-	(gen_lexical_block_die): Call push_decl_scope.
-	(gen_subprogram_die): Never refer to the function symbol.
-	(dwarfout_begin_prologue): Likewise.
-
-Mon Oct 21 20:22:49 1996  Torbjorn Granlund  <tege@nada.kth.se>
-
-	* expmed.c (emit_store_flag_force): New function.
-	* optabs.c (expand_binop): Use it.
-	
-	* expr.c (do_store_flag): Don't check if target is 0 in code
-	emitting store flag as compare-branch.
-
-Mon Oct 21 17:58:33 1996  Ian Lance Taylor  <ian@cygnus.com>
-
-	* mips.c (override_options): Correct typo (MASK_64BIT should
-	have been TARGET_64BIT).
-
-Mon Oct 21 13:58:54 1996  Jim Wilson  <wilson@cygnus.com>
-
-	* unroll.c (loop_comparison_code): New static variable.
-	(unroll_loop): Add check for loop_comparison_code
-	(loop_iterations): Set loop_comparison_code.
-
-	* sh.c (gen_shl_sext): Add missing parameter to shl_sext_kind call.
-
-	* mips.h (INITIAL_FRAME_POINTER_OFFSET): Delete.
-
-	* loop.c (strength_reduce): Add check for ! bl->reversed to
-	auto_inc_opt code.
-
-Mon Oct 21 12:28:15 1996  J"orn Rennecke  <amylaar@cygnus.co.uk>
-
-	jump.c (jump_optimize): Fix bug in Oct. 14 change.
-
-Mon Oct 21 07:59:16 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)
-
-	* expr.c (store_expr): Disable optimization of using convert
-	if exp's type is a subtype.
-
-	* c-typeck.c (build_array_ref): If -Wchar-subscripts, also warn
-	in case when pointer is being indexed.
-
-Mon Oct 21 07:39:31 1996  J"orn Rennecke  <amylaar@cygnus.co.uk>
-
-	* jump.c (jump_optimize): Use emit_store_flag even if branches
-	are cheap, if the store is even cheaper.
-
-Sun Oct 20 20:01:09 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)
-
-	* reload1.c (reload_reg_free_p, reloads_conflict): RELOAD_OTHER
-	and RELOAD_FOR_OTHER_ADDRESS conflict.
-
-	* i386.md (ffs[sh]i2): Add missing CC_STATUS_INIT.
-
-Fri Oct 18 13:32:13 1996  Michael Meissner  <meissner@tiktok.cygnus.com>
-
-	* rs6000.md (float conversion insns): Generate correct code
-	if the bit 15 of rs6000_fpmem_offset is non-zero.
-
-Thu Oct 17 23:22:03 1996  Jason Merrill  <jason@yorick.cygnus.com>
-
-	* dwarfout.c (data_member_location_attribute): Support binfos.
-	(output_inheritance_die): New fn.
-	(output_type): Use it.
-
-	* dwarf2out.c (value_format): Split out from...
-	(output_value_format): Here.
-	(build_abbrev_table): Use value_format.
-	(size_of_locs): New fn.
-	(size_of_die): Don't assume a loc needs a 2-byte length.
-	(value_format): Likewise.
-	(output_die): Likewise.
-
-Thu Oct 17 14:46:14 1996  Ian Lance Taylor  <ian@cygnus.com>
-
-	* mips.c (override_options): In 64 bit EABI mode, set TARGET_LONG64.
-
-Thu Oct 17 11:34:51 1996  Bob Manson  <manson@cygnus.com>
-
-	* expr.c (do_jump): Conditionalize cleanups for the COND_EXPR case,
- 	similarly to the way TRUTH_ANDIF_EXPR and TRUTH_ORIF_EXPR are
- 	handled.
-
-Thu Oct 17 01:20:16 1996  Jim Wilson  <wilson@cygnus.com>
-
-	* m68k.h (MASK_68040_ALSO): New macro.
-	(TARGET_SWITCHES): Option -m68020-40 includes MASK_68040_ALSO.
-
-Wed Oct 16 16:25:38 1996  Jason Merrill  <jason@yorick.cygnus.com>
-
-	* dwarf2out.c (scope_die_for): Also support decls, add asserts.
-	(modified_type_die): Modified types all go under comp_unit_die.
-	(add_type_attribute): Just pass context_die through.
-	(various): Revert useless lookup_type_die change.
-	(gen_subprogram_die): Use scope_die_for.  Call push_decl_scope.
-	(gen_inlined_subroutine_die): Call push_decl_scope.
-	(gen_struct_or_union_type_die): Likewise.
-	(gen_decl_die): Don't call push_decl_scope.
-
-	* mips/iris6.h (*_SPEC): Replace enumeration of !mabi= with !mabi*.
-	(ASM_OUTPUT_{CON,DE}STRUCTOR): Enable.
-	(STARTFILE_SPEC): Support -mips4, -shared.
-	(ENDFILE_SPEC): Likewise.
-	(LIB_SPEC): Support -shared, avoid warning 84.
-	(LIBGCC_SPEC): Define.
-	(LINK_SPEC): Support -shared, remove -woff 84.
-	* mips/t-iris6 (EXTRA_PARTS): Add crtstuff.
-	* crtstuff.c: Support Irix 6.
-	* configure: Don't use collect2 for Irix 6.
-	* libgcc2.c (__main): Don't use any of this stuff if HAS_INIT_SECTION.
-
-Wed Oct 16 11:46:37 1996  Mike Stump  <mrs@cygnus.com>
-
-	* elxsi.h (CHECK_FLOAT_VALUE): Removed.
-
-Wed Oct 16 14:19:38 1996  Jim Wilson  <wilson@cygnus.com>
-
-	* iris6.h (CPP_PREDEFINES): Add -D_LONGLONG.
-	(CPP_SPECS): Remove -D_LONGLONG.
-
-Wed Oct 16 03:34:42 1996  Torbjorn Granlund  <tege@nada.kth.se>
-
-	* i386.md (parallel inc/dec and branch-if-zero/nonzero): New patterns.
-
-Tue Oct 15 22:28:11 1996  Ian Lance Taylor  <ian@cygnus.com>
-
-	* mips.h (enum mips_abi_type): Add ABI_EABI.
-	(CPP_SPEC): Define __mips_soft_float if -msoft-float, and
-	__mips_eabi if -mabi=eabi.
-	(INITIAL_ELIMINATION_OFFSET, CUMULATIVE_ARGS,
-	GO_IF_LEGITIMATE_ADDRESS, CONSTANT_ADDRESS_P, LEGITIMATE_CONSTANT,
-	LEGITIMIZE_ADDRESS): Add support for MIPS EABI.
-	* mips/abi64.h (STACK_BOUNDARY, MIPS_STACK_ALIGN,
-	FUNCTION_ARG_PADDING, RETURN_IN_MEMORY, SETUP_INCOMING_VARARGS):
-	Add support for MIPS EABI.
-	(FUNCTION_ARG_PASS_BY_REFERENCE): Define.
-	(FUNCTION_ARG_CALLEE_COPIES): Define.
-	* mips.c (mips_const_double_ok, function_arg_advance,
-	function_arg, function_arg_partial_nregs, override_options,
-	compute_frame_size): Add support for MIPS EABI.
-	(function_arg_pass_by_reference): New function.
-	* ginclude/va-mips.h: Add support for MIPS EABI.
-
-Tue Oct 15 19:10:08 1996  Jason Merrill  <jason@yorick.cygnus.com>
-
-	* toplev.c (rest_of_type_compilation): Don't write out
-	DWARF for function-scope types yet.
-	(compile_file): Do send vars with no RTL to the DWARF code.
-
-Tue Oct 15 17:54:43 1996  Doug Evans  <dje@cygnus.com>
-
-	* loop.c (strength_reduce): Avoid taking PATTERN of a label.
-
-Tue Oct 15 16:52:33 1996  Ian Lance Taylor  <ian@cygnus.com>
-
-	* mips/iris6.h: (SUBTARGET_CPP_SIZE_SPEC): Define.
-	(SUBTARGET_CPP_SPEC): Remove definitions of __SIZE_TYPE__ and
-	__PTRDIFF_TYPE__, now in SUBTARGET_CPP_SIZE_SPEC.
-
-Tue Oct 15 11:19:17 1996  Lee Iverson  <leei@Canada.AI.SRI.COM>
-
-	* mips.h (CPP_SPEC): Restore -D_LANGUAGE_C for Objective C.
-
-Mon Oct 14 18:03:35 1996  Jason Merrill  <jason@yorick.cygnus.com>
-
-	* dwarf2out.c (gen_decl_die): Do generate dies for classes with -g1.
-	(dwarfout_file_scope_decl): Likewise.
-
-Mon Oct 14 16:31:44 1996  Joern Rennecke <amylaar@cygnus.co.uk>
-
-	* jump.c (jump_optimize): Check for if (...) { x = a; goto l; } x = b;
-
-Mon Oct 14 14:19:49 1996  Jason Merrill  <jason@yorick.cygnus.com>
-
-	* dwarf2out.c (modified_type_die): Don't bother with AT_address_class.
-	(add_data_member_location_attribute): Handle getting a binfo.
-	(add_location_or_const_value_attribute): Handle a decl with no RTL.
-	(add_pure_or_virtual_attribute): Add AT_vtable_elem_location.
-	(add_name_and_src_coords_attributes): Only use DECL_ASSEMBLER_NAME 
-	for staticp things.
-	(gen_subprogram_die): Set up AT_inline for abstract decls.
-	(gen_inheritance_die): New fn.
-	(gen_member_die): Also emit info for base classes.
-
-Sat Oct 12 00:07:00 1996  Doug Evans  <dje@cygnus.com>
-
-	* fold-const.c (make_range): Handle NULL operand 0
-	(like in BIND_EXPRs).
-
-Fri Oct 11 15:42:22 1996  Jason Merrill  <jason@yorick.cygnus.com>
-
-	* toplev.c (rest_of_compilation): If we did a
- 	save_for_inline_copying, reset DECL_ABSTRACT_ORIGIN for the
- 	function when we're done.
-
-	* toplev.c (main): DWARF works with C++ now.
-
-	* dwarf2out.c (gen_subprogram_die): Disable MIPS_AT_has_inline
- 	support for now.
-
-Fri Oct 11 14:31:10 1996  Torbjorn Granlund  <tege@nada.kth.se>
-
-	* dwarfout.c: (output_bound_representation): Fix typo in prototype.
-
-Fri Oct 11 12:19:21 1996  Ian Lance Taylor  <ian@cygnus.com>
-
-	* mips.h (MIPS_AS_ASM_SPEC): Define.
-	(SUBARGET_MIPS_AS_ASM_SPEC): Define.
-	(GAS_ASM_SPEC): Define.
-	(TARGET_ASM_SPEC): Define.
-	(SUBTARGET_ASM_OPTIMIZING_SPEC): Define.
-	(SUBTARGET_ASM_DEBUGGING_SPEC): Define.
-	(SUBTARGET_ASM_SPEC): Define.
-	(ASM_SPEC): Rewrite to use above specs.
-	(SUBTARGET_CPP_SIZE_SPEC): Define.
-	(SUBTARGET_CPP_SPEC): Define.
-	(CPP_SPEC): Use above specs.  Don't define _LANGUAGE_C if C++ or
-	Objective C.
-	(EXTRA_SPECS): Define.
-	(SUBTARGET_EXTRA_SPECS): Define.
-	* mips/dec-bsd.h (ASM_SPEC): Don't define.
-	(CPP_SPEC): Don't define.
-	* mips/dec-osf1.h (CPP_SPEC): Don't define.
-	(SUBTARGET_CPP_SIZE_SPEC): Define.
-	* mips/elf64.h (CPP_SPEC): Don't define.
-	(SUBTARGET_CPP_SPEC): Define.
-	* mips/gnu.h (TARGET_DEFAULT): Define.
-	(ASM_SPEC): Don't define.
-	* mips/iris3.h (CPP_SPEC): Don't define.
-	(SUBTARGET_CPP_SPEC): Define.
-	* mips/iris4loser.h (ASM_SPEC): Don't define.
-	(SUBTARGET_MIPS_AS_ASM_SPEC): Define.
-	(SUBTARGET_ASM_OPTIMIZING_SPEC): Define.
-	* mips/iris5.h (CPP_SPEC): Don't define.
-	(SUBTARGET_CPP_SPEC): Define.
-	* mips/iris6.h (CPP_SPEC): Don't define.
-	(SUBTARGET_CPP_SPEC): Define.
-	(ASM_SPEC): Don't define.
-	(SUBTARGET_ASM_SPEC): Define.
-	(SUBARGET_MIPS_AS_ASM_SPEC): Define.
-	(SUBTARGET_ASM_DEBUGGING_SPEC): Define.
-	* mips/netbsd.h (ASM_SPEC): Don't define.
-	(CPP_SPEC): Don't define.
-	(SUBTARGET_CPP_SPEC): Define.
-	* mips/osfrose.h (ASM_SPEC, ASM_FINAL_SPEC): Don't define.
-	(CPP_SPEC): Don't define.
-	(SUBTARGET_CPP_SIZE_SPEC): Define.
-	(SUBTARGET_CPP_SPEC): Define.
-	* mips/sni-svr4.h (CPP_SPEC): Don't define.
-	(SUBTARGET_CPP_SIZE_SPEC): Define.
-
-Thu Oct 10 17:58:49 1996  Jason Merrill  <jason@yorick.cygnus.com>
-
-	* mips/iris6.h (ASM_OUTPUT_SECTION_NAME): Define.
-	(DWARF_OFFSET_SIZE): Define.
-
-	* dwarf2out.c (most everywhere): Support SGI/MIPS -mabi=64 by fixing
- 	code which assumed that pointers are 4 bytes long, parameterizing
- 	many sizes on DWARF_OFFSET_SIZE and using DELTA instead of DELTA4,
- 	DATA instead of DATA4, FORM_ref instead of FORM_ref4. (DWARF_ROUND,
- 	UNALIGNED_DOUBLE_INT_ASM_OP, UNALIGNED_WORD_ASM_OP,
- 	ASM_OUTPUT_DWARF_DELTA, ASM_OUTPUT_DWARF_DATA, DW_FORM_data,
- 	DW_FORM_ref): New macros.
-	(gen_variable_die): Only equate_decl_number_to_die if
-	decl is TREE_STATIC.
-	(get_AT): Fix thinko.
-
-	* dwarf2out.c (constant_size): New fn.
-	(size_of_die): Use it instead of assuming 4 bytes;
- 	usually we only need one.
-	(output_value_format, output_die): Likewise.
-	(build_abbrev_table): We need a new abbrev if the size
- 	of the constant differs.
-	(dwarf_attr_name): Add new SGI/MIPS extensions.
-	(gen_subprogram_die): Support DW_AT_MIPS_has_inlines.
-	(gen_inlined_subroutine_die): Likewise.
-
-Thu Oct 10 16:38:58 1996  Ian Lance Taylor  <ian@cygnus.com>
-
-	* mips.md (mov[sd]fcc): Use register_operand, not reg_or_0_operand,
-	for source predicates.
-
-Thu Oct 10 15:19:38 1996  Michael Meissner  <meissner@tiktok.cygnus.com>
-
-	* rs6000.md (floatsidf2_load): For large stack frames, do not
-	generate an illegal memory reference.
-	(movdi, movdf define_splits): Fix code so that it works for either
-	big or little endian hosts generating code for either big or
-	little endian targets.
-
-	(from Jim Wilson)
-	* rs6000.c (rs6000_save_toc_p): Delete global variable.
-	(rs6000_{save,restore}_machine_status): Do not save/restore it.
-	(rs6000_init_expanders): Do not initialize it.
-	(rs6000_stack_info): Always create TOC save space.
-
-	* rs6000.md (NT indirect call insns): Do not set
-	rs6000_save_toc_p.
-
-	* rs6000.h (rs6000_save_toc_p): Delete declaration.
-
-Wed Oct  9 18:06:54 1996  Ian Lance Taylor  <ian@cygnus.com>
-
-	* mips.h (EMPTY_FIELD_BOUNDARY): Define as 32.
-	* mips/abi64.h (EMPTY_FIELD_BOUNDARY): Don't define.
-
-	* mips/abi64.h (TARGET_DEFAULT, TARGET_LONG64, CPP_PREDEFINES,
-	CPP_SPEC): Move from here...
-	* mips/iris6.h: ...to here.
-
-Wed Oct  9 16:43:51 1996  Jim Wilson  <wilson@cygnus.com>
-
-	* configure (i[3456]86-dg-dgux): Use install-headers-cpio.
-
-	* expr.c (store_constructor): Delete unnecessary increment.
-
-Wed Oct  9 16:29:22 1996  Gavin Koch <gavin@cetus.cygnus.com>
-
-	* cccp.c (do_include): Treat ENOTDIR like ENOENT when an open fails.
-
-Wed Oct  9 16:26:57 1996  Paul Eggert  <eggert@twinsun.com>
-
-	* gcc.c (default_compilers): -ansi no longer implies -$ to cpp.
-	* c-lex.c (yylex): Treat `$' just like `_', except issue a
-	diagnostic if !dollars_in_ident or if pedantic.
-	* c-decl.c (dollars_in_ident): DOLLARS_IN_IDENTIFIERS is now Boolean.
-	(c_decode_option): -fdollars-in-identifiers is now independent
-	of -ansi, of -traditional, and of DOLLARS_IN_IDENTIFIERS.
-	* cexp.y (initialize_random_junk): Ignore DOLLARS_IN_IDENTIFIERS.
-	* cccp.c (dollars_in_ident): Remove; replaced by is_idchar['$'].
-	(main): Initialize is_idchar and is_idstart directly when given -$.
-	Ignore DOLLARS_IN_IDENTIFIERS.
-	(rescan): Diagnose $ in identifier if pedantic.
-	(initialize_char_syntax): Assume $ is allowed in identifier;
-	`main' will change this if -$ is given.
-	* cpplib.h (DOLLARS_IN_IDENTIFIERS): Remove.
-	* cpplib.c (cpp_options_init): Ignore DOLLARS_IN_IDENTIFIERS.
-	(parse_name): Diagnose $ in identifier if pedantic.
-	(cpp_handle_options): -traditional no longer messes with
-	dollars_in_ident.
-	* i386/dgux.h, m68k/apollo68.h (DOLLARS_IN_IDENTIFIERS): Remove.
-	* m88k.h, mips.h, nextstep.h, pa.h (DOLLARS_IN_IDENTIFIERS): Remove.
-	* vax/ultrix.h, vax/vms.h (DOLLARS_IN_IDENTIFIERS): Remove.
-	* convex.h (OVERRIDE_OPTIONS): Don't need to set
-	dollars_in_ident any more, since -ansi doesn't change it.
-
-Wed Oct  9 07:35:47 1996  Doug Evans  <dje@cygnus.com>
-
-	* Allow prefix attributes in more places.
-	* c-parse.in: Update number of shift/reduce conflicts.
-	({typed_declspecs,reserved_declspecs,declmods}_no_prefix_attr): New.
-	(current_declspecs): Initialize to NULL_TREE.
-	(fndef): Pass current_declspecs, not $1, to start_function.
-	(old_style_parm_decls): Renamed from xdecls.
-	(datadecl, declmods): Add references to new rules.
-	(setspecs): Call split_specs_attrs.
-	(absdcl1): Remove case with setattrs.
-	* c-common.c (split_specs_attrs): New function.
-
-Wed Oct  9 05:48:43 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)
-
-	* sdbout.c: Include defaults.h.
-	* Makefile.in (sdbout.o): Make dependency list match included files.
-
-	* fold-const.c (range_test): Function deleted.
-	(range_binop, make_range, build_range_check): New functions.
-	(merge_ranges, fold_range_test): Likewise.
-	(fold_truthop): No longer call range_test.
-	(fold, case TRUTH_{AND,OR}{,IF}_EXPR): Call fold_range_test.
-
-Tue Oct  8 22:03:32 1996  Torbjorn Granlund  <tege@nada.kth.se>
-
-	* configure: Set cpu_type for pyramid.
-
-Tue Oct  8 21:54:04 1996  Jason Merrill  <jason@yorick.cygnus.com>
-
-	* final.c (final_start_function): Call dwarfout_begin_prologue.
-
-	* dwarf2out.c (pubname_*, arange_*): New data for .debug_pubnames
- 	and .debug_aranges sections.
-	(add_pubname): New fn.
-	(size_of_pubnames): Reimplement.
-	(output_pubnames): Likewise.
-	(add_arange): New fn.
-	(size_of_aranges): Include function sections.
-	(output_aranges): Likewise.
-	(gen_variable_die): Call add_pubname.
-	(add_name_and_src_coords_attributes): Use DECL_ASSEMBLER_NAME for now.
-	(decl_start_label): Renamed from function_start_label.
-	(gen_subprogram_die): If weak or one_only, use a local label for 
-	AT_low_pc.  Call add_pubname and add_arange.
-	(dwarfout_begin_prologue): New fn.  Start up FDE here. 
-	(dwarfout_begin_function): Not here.
-	(get_AT): Split out.  Look in specification and abstract_origin DIEs.
-	(get_AT_low_pc, get_AT_string, get_AT_flag, get_AT_unsigned, 
-	get_AT_hi_pc): Use it.
-	(dwarfout_finish): Variables can produce pubnames, too.
-
-Tue Oct  8 19:35:40 1996  Torbjorn Granlund  <tege@nada.kth.se>
-
-	* m88k/dgux.h (CPP_SPEC): Avoid newline in the string.
-
-	* final.c (final): Update insn_current_address before calling
-	final_scan_insn.
-
-Tue Oct  8 17:52:02 1996  Jim Wilson  <wilson@cygnus.com>
-
-	* unroll.c (unroll_loops): Set local_regno only if set_dominates_use
-	returns true.
-	(set_dominates_use): New function.
-
-Tue Oct  8 16:01:37 1996  Doug Evans  <dje@cygnus.com>
-
-	* c-typeck.c (decl_constant_value): Delete test for ! TREE_PUBLIC.
-
-Tue Oct  8 10:36:44 1996  Jeffrey A Law  (law@cygnus.com)
-
-	* pa.c (hppa_legitimize_address): Remove test code accidentally left
-	in during last change.
-
-Mon Oct  7 19:55:02 1996  Jim Wilson  <wilson@cygnus.com>
-
-	* sched.c (schedule_block): Before scheduling, add code to make all
-	call used regs that are not fixed or global live when we see a
-	CALL_INSN.  During scheduling, change existing code to use same test.
-
-	* varasm.c (bss_section): Delete unused parameters.
-
-Mon Oct  7 16:24:21 1996  Jason Merrill  <jason@yorick.cygnus.com>
-
-	* dwarf2.h: Add new SGI/MIPS attributes.
-
-	* dwarf2out.c (*_separate_line_info_*): Parallel line number
- 	information for functions defined in sections other than .text.
-	(size_of_line_info): Support it.
-	(output_line_info): Likewise.
-	(dwarfout_line): Likewise.
-	(gen_compile_unit_die): Don't add high/low_pc or stmt_list
- 	attributes here.
-	(dwarfout_finish): Add them here if appropriate.
-	(remove_AT): free removed attribute properly.
-	(gen_type_die): Don't assume a nested type is complete.
-	(dwarfout_finish): Don't emit line info if it would be empty.
-
-	* dwarfout.c (output_block): Don't emit a DIE for a body block.
-	(output_decls_for_scope): Don't increment next_block_number for the
- 	outer block.
-	(output_decl): Start from the outer block, not
- 	the first inner block since there can be more than one in C++.
-	(type_tag): Handle C++ TYPE_NAME.
-	(output_type): Fix handling of TYPE_METHODS.
-	(output_decl): Don't output a DIE for artificial typedefs.
-
-Mon Oct  7 15:47:29 1996  Michael Meissner  <meissner@tiktok.cygnus.com>
-
-	* rs6000.md (movdi define_splits): Fix previous change to work
-	on both little and big endian hosts.
-
-Sun Oct  6 16:52:34 1996  Jeffrey A Law  (law@cygnus.com)
-
-	* pa.h (combinable_fsub): Don't return without a value.
-
-Sun Oct  6 14:05:39 1996  Michael Meissner  <meissner@tiktok.cygnus.com>
-
-	* rs6000.md (mov{df,di} define_splits): Use split_double to
-	properly split CONST_DOUBLEs.
-	(movdi): Likewise.
-
-Sat Oct  5 08:43:14 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)
-
-	* i386/cygwin32.h (LIB_SPEC): Add support for -mwindows.
-	Always pass -lkernel32.
-	(LIBGCC_SPEC): Don't delete.
-	(STARTFILE_SPEC): Remove always-true conditionalization.
-	(LONG_DOUBLE_TYPE_SIZE): Use default.
-
-Fri Oct  4 17:22:53 1996  Jason Merrill  <jason@yorick.cygnus.com>
-
-	* toplev.c (rest_of_type_compilation): Don't emit DWARF for member
- 	types of a type we haven't emitted yet.
-	(compile_file): Still emit DWARF for pending tagged types.
-
-	* final.c (final_scan_insn): Do emit DWARF labels for level 1 blocks.
-
-	* dwarf2out.c (gen_subprogram_die): Start from the outer block, not
- 	the first inner block since there can be more than one in C++.
-	(gen_lexical_block_die): Keep track of the block depth.
-	(gen_block_die): Don't emit a DIE for a body block.
-	(gen_inlined_subroutine_die): Don't emit anything for an
-	abstract instance.
-	(decls_for_scope): Don't increment next_block_number for the
- 	outer block.
-
-Fri Oct  4 15:27:55 1996  J"orn Rennecke <amylaar@cygnus.co.uk>
-
-	* sh.h (PRESERVE_DEATH_INFO_REGNO_P): Define.
-
-	* sh.c (sfunc_uses_reg): New function.
-	(noncall_uses_reg, machine_dependent_reorg, final_prescan_insn):
-	Handle special functions like function calls for purposes of relaxing.
-	(noncall_uses_reg): Added some missing cases of registers
-	being used in non-call instructions.
-
-Fri Oct  4 10:51:40 1996  Jason Merrill  <jason@yorick.cygnus.com>
-
-	* dwarf2out.c: Tear out backchaining brain damage.
-	(remove_AT, remove_children): New functions.
-	(modified_type_die): Call gen_type_die instead of backchaining.
-	(gen_subprogram_die): Don't generate a new specification DIE for 
-	member functions defined in the class; use the declaration DIE instead.
-	(gen_struct_or_union_type_die): Support DW_AT_declaration.
-	(gen_type_die): Don't set TREE_ASM_WRITTEN on incomplete structs.
-	(gen_decl_die): Revert previous change; it's much simpler to emit 
-	the class from rest_of_type_compilation.
-
-Fri Oct  4 09:54:21 1996  J"orn Rennecke <amylaar@cygnus.co.uk>
-
-	* Make sure we have enough registers for the insns we recognize.
-	* i386.h (flag_omit_frame_pointer, outer_function_chain): Declare.
-	(current_function_calls_alloca): Likewise
-	(rtx_equal_function_value_matters): Likewise
-	(N_REGS_USED, N_ALLOCATABLE_REGISTERS): Define.
-
-	* i386.md (adddi3_1, subdi3_1): Insns renamed from adddi3 and subdi3;
-	added missing earlyclobbers.
-	(adddi3_1): Removed duplicates from commutativity.
-	(adddi3, subdi3): New define_expands.
-	(movsf, movsf_mem, movsf_normal, movdf, movdf_mem , movdf_mem+1): Take
-	number of used vs. available registers into account.
-	(movxf, movxf_mem, movxf_mem+1, addsidi3_1, addsidi3_2): Likewise.
-	(adddi3_1, subsidi3, subdi3_1): Likewise.
-	(addsidi3_1, addsidi3_2, subsidi3): Need no generate function.
-
-	* i386.c (asm_output_function_prefix): Don't use
-	ASM_DECLARE_FUNCTION_NAME if it is not defined.
-
-Fri Oct  4 07:01:55 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)
-
-	* stor-layout.c (layout_decl): Don't turn off DECL_BIT_FIELD
-	if DECL's alignment is less than its type.
-
-Thu Oct  3 19:42:30 1996  Jason Merrill  <jason@yorick.cygnus.com>
-
-	* toplev.c (rest_of_type_compilation): Also do this for DWARF.
-	(compile_file): Don't try to write out DWARF for vars with no RTL.
-
-Thu Oct  3 18:31:28 1996  Doug Evans  <dje@cygnus.com>
-
-	* ginclude/{stdarg.h,varargs.h}: Use #include "", not #include <>.
-
-Wed Oct  2 17:29:53 1996  Ian Lance Taylor  <ian@cygnus.com>
-
-	* fixincludes: Add a hack to the big sed script to work around a
-	bug in the sed implementation on HP/UX 10.20.
-
-Wed Oct  2 16:53:56 1996  Jason Merrill  <jason@yorick.cygnus.com>
-
-	* dwarf2out.c (modified_type_die): Don't generate redundant DIEs.
-	(gen_{array,pointer,reference,ptr_to_mbr}_type_die): Likewise.
-	(gen_{subroutine,string,set}_type_die): Likewise.
-
-	* dwarf2out.c: Undo text_end_label, add_src_coords changes.
-	(addr_const_to_string): Fix typos.
-	(decl_class_context): New fn.
-	(get_AT_unsigned): New fn.
-	(gen_subprogram_die): Only emit src coords info for a specification
-	if they changed.
-	(gen_variable_die): Support DW_AT_declaration and DW_AT_specification.
-	(gen_decl_die): Avoid generating redundant DIEs for member functions
-	and variables.
-
-Wed Oct  2 11:22:50 1996  Jeffrey A Law  (law@cygnus.com)
-
-	* pa.h (EXTRA_CONSTRAINT): Loosen conditions for match of
-	'Q' and 'T' while reload is running.
-	* pa.c (hppa_legitimize_address): Rework to generate more
-	indexed and scaled indexed addressing.
-	* pa.md (scaled indexed store): Add define_splits to undo
-	pessimizations created by hppa_legitimize_address for integer
-	stores.
-
-	* pa.c (remove_useless_addtr_insns): New function.
-	(pa_reorg): Delete code to remove useless add,tr insns.
-	Instead call remove_useless_addtr_insns.
-	(output_function_prologue): Call remove_useless_addtr_insns
-	to catch any add,tr insns created by reorg.
-
-	* pa.c (secondary_reload_class): Remove duplicate/useless code.
-
-	* pa.h (PARSE_LDD_OUTPUT): Handle output from hpux10.20 "chatr".
-
-Tue Oct  1 17:23:32 1996  Jason Merrill  <jason@yorick.cygnus.com>
-
-	* dwarf2out.c (text_end_label): New static.
-	(size_of_line_info): The final entry is smaller.
-	(output_aranges): Use TEXT_SECTION instead of TEXT_BEGIN_LABEL and
- 	text_end_label instead of TEXT_END_LABEL.
-	(gen_compile_unit_die): Likewise.
-	(output_line_info): Likewise.  Use a fixed advance for the last entry.
-	(dwarfout_init): Don't output starting labels.
-	(dwarfout_finish): Set up text_end_label.  Don't output ending labels.
-
-	(add_pure_or_virtual_attribute): Don't say pure virtual for now.
-	(type_tag): Handle C++ TYPE_NAME.
-	(gen_formal_parameter_die): Support DW_AT_artificial.
-	(gen_formal_types_die): Do emit the type for 'this'.
-	(gen_member_die): Fix handling of TYPE_METHODS.
-	(gen_decl_die): Do output a DIE for member function declarations.
-	Don't output a DIE for artificial typedefs.
-
-	(add_member_attribute): Remove, not in DWARF-II.
-	(gen_array_type_die): Remove ref to add_member_attribute.
-	(gen_set_type_die, gen_entry_point_die, gen_enumeration_type_die,
- 	gen_subprogram_die, gen_variable_die, gen_field_die,
- 	gen_pointer_type_die, gen_reference_type_die, gen_ptr_to_mbr_type_die,
- 	gen_string_type_die, gen_struct_or_union_type_die,
- 	gen_subroutine_type_die, gen_typedef_die): Likewise.
-
-	(get_AT_flag): New fn.
-	(add_src_coords_attributes): Split out...
-	(add_name_and_src_coords_attributes): From here.
-	(gen_subprogram_die): Support DW_AT_declaration and 
-	DW_AT_specification. 
-
-	(gen_compile_unit_die): Don't emit full pathname for source file; 
-	comment claimed that SGI required it, but they don't emit it either.
-	Append -g to producer rather than replacing it.
-
-Tue Oct  1 14:19:23 1996  Jim Wilson  <wilson@cygnus.com>
-
-	* gcc.c (used_arg): When call xmalloc for mswitches, pass 1 if
-	n_switches is zero.
-
-Mon Sep 30 17:46:26 1996  J"orn Rennecke <amylaar@cygnus.co.uk>
-
-	* sh.c (gen_shl_and, gen_shl_sext): Use gen_lowpart to
-	generate rtx in the appropriate mode for zero/sign-extension.
-	Don't generate a zero bit shift.
-	(gen_shl_sext) Directly use gen_ashift instead of gen_ashrsi3.
-
-Mon Sep 30 17:17:56 1996  Ian Lance Taylor  <ian@cygnus.com>
-
-	* fixinc.svr4: In math.h, redefine exception to __math_exception
-	for C++, to avoid conflict with <exception>.
-	* fixincludes: Likewise.
-	Fix check for class in math.h to not match fp_class.
-
-Mon Sep 30 17:15:19 1996  Jim Wilson  <wilson@cygnus.com>
-
-	* iris6.h (ASM_SPEC): Add -w.
-	(STARTFILE_SPEC): Add mips3 to n32 pathnames.
-	Add -L/usr/lib32/mips for n32 cases.
-	(ENDFILE_SPEC): Add mips3 to n32 pathnames.
-
-Mon Sep 30 13:20:31 1996  Ian Lance Taylor  <ian@cygnus.com>
-
-	* genopinit.c (gen_insn): Look through the modes in reverse order,
-	to avoid stopping early on CC when EXTRA_CC_MODES is used.
-
-	* fixincludes: Add extern "C" to <sys/mman.h> on HP/UX.
-
-Sun Sep 29 12:39:18 1996  Michael Meissner  <meissner@tiktok.cygnus.com>
-
-	* c-typeck.c (pointer_diff): Do not do default conversions when
-	doing the minus expression, in case restype is a short type.
-
-Sun Sep 29 11:22:10 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)
-
-	* tree.c (build_complex): Add new argument, TYPE.
-	* tree.h (build_complex): Likewise.
-	* c-lex.c (yylex): Add new arg, TYPE, to call to build_complex.
-	* fold-const.c (const_binop): Likewise.
-	(fold, case CONJ_EXPR, COMPLEX_EXPR): Likewise.
-	* varasm.c (copy_constant, case COMPLEX_CST): Likewise.
-	* expr.c (expand_expr, case COMPONENT_REF): Don't try to directly
-	load a complex.
-	* recog.c (register_operand): Don't reject subreg of complex mode.
-	* emit-rtl.c (mark_user_reg): New function.
-	* function.c (assign_parms): Use it.
-	* stmt.c (expand_decl): Likewise, and simplify code.
-
-	* tree.c (contains_placeholder): Return 1 for PLACEHOLDER_EXPR.
-
-	* expr.c (store_expr): memset/bzero gets ptr_mode, not Pmode.
-
-	* stmt.c (expand_asm_operands): Fix errors in previous patches.
-
-	* x-linux: Simplify, but ensure headers aren't changed.
-
-	* getpwd.c: No longer include direct.h for _WIN32.
-
-	* configure (i[3456]86-*-isc*): Remove bogus echo.
-	(m68k-apple-aux*): a-ux.h renamed from aux.h.
-	(CC): Escape "$" char in "no-symlink" case for bash/cygwin32 bug.
-
-	* Makefile.in (installdirs): Renamed from install-dir.
-	Create $(prefix) and $(exec_prefix) if doesn't exist.
-	(install-float): Reflect new name for installdirs.
-	(install-{common,info,man,libgcc,multilib,libobjc}): Likewise.
-	(install-{include-dir,assert-h,collect2}): Likewise.
-
-	* reload1.c (gen_reload): Handle SUBREG in PLUS specially too.
-	Change calls to emit_move_insn to recursive calls.
-
-	* stmt.c (fixup_gotos): When running undefined labels, if no cleanup
-	actions for this block, don't clear BEFORE_JUMP.
-
-Fri Sep 27 13:48:21 1996  Michael Meissner  <meissner@tiktok.cygnus.com>
-
-	* c-decl.c (init_decl_processing): Create short int types before
-	creating size_t in case a machine description needs to use
-	unsigned short for size_t.
-
-Fri Sep 27 12:28:54 1996  Stan Cox  <coxs@dg-rtp.dg.com>
-
-        * gcc.c (do_spec_1): Allow -A in %[Spec].
-	
-	* i386.h (CPP_CPU_SPEC): New. Added for defining the submodel.
-
-	* i386.c (asm_output_function_prefix, function_prologue,
-	ix86_expand_prologue): Make the routine that sets the GOT (when pic
-	is enabled) a function, to assist debugging.
-
-	* i386.md (gen_prologue_get_pc): Call the function created above.
-	(divdf3): Added. 
-	
-	* i386/dgux.h (CPP_PREDEFINES, CPP_SPEC): Reference CPP_CPU_SPEC.
-	Use svr4 assembler directive .backalign instead of .align.  
-	(align to x bytes if it takes no more than y bytes to do so.)
-
-	* i386/{aix386ng.h,dgux.h} (CPP_SPEC): Use %[cpp_cpu].
-	* i386/{freebsd-elf,gas,isc,linux-aout}.h: Likewise.
-	* i386/{linux-oldld,linux,osfelf,osfrose,sco,sco4}.h: Likewise.
-	* i386/{sco4dbx,sco5,sol2,sysv3}.h: Likewise.
-
-Thu Sep 26 17:58:34 1996  Torbjorn Granlund  <tege@matematik.su.se>
-
-	* m68k.md (mulsidi3 matcher): Change predicate const_int_operand
-	to const_sint32_operand.  Get rid of bogus range condition.
-
-Thu Sep 26 17:12:00 1996  Jim Wilson  <wilson@cygnus.com>
-
-	* Makefile.in (stmp-int-hdrs): Don't cd to srcdir before copying
-	header files to objdir.
-
-Wed Sep 25 21:22:57 1996  Jeffrey A Law  (law@cygnus.com)
-
-	* h8300.h (FIRST_PSEUDO_REGISTER): Bump up by one.
-	(ARG_POINTER_REGNUM): Likewise.
-	(FIXED_REGISTERS): Add entry for MAC register.
-	(CALL_USED_REGISTERS< REG_ALLOC_ORDER): Likewise.
-	(HARD_REGNO_NREGS): Handle MAC register.
-	(HARD_REGNO_MODE_OK< REGNO_OK_FOR_BASE_P): LIkewise.
-	(REGISTER_NAMES): Likewise.
-	(enum reg_class): New MAC_REGS register class.
-	(REG_CLASS_CONTENTS, REGNO_REG_CLASS): Corresponding changes.
-	(REG_CLASS_FROM_LETTER): LIkewise.
-	(REGISTER_MOVE_COST): Make copies to/from the MAC register
-	expenseive.
-	(CONDITIONAL_REGISTER_USAGE): Define.
-	* h8300.md (movsi_h8300hs): Renamed from movsi_h8300h.
-	Handle moves to/from the MAC register.
-	(mac): Two new patterns to use the mac instruction.
-
-	* h8300.c (notice_update_cc): Fix CC_SET case.
-	(restore_compare_p): Remove unused function.
-	* h8300.md: Handle "set" vs "set_zn_c0" correctly.
-	(bCC patterns): No longer need to call restore_compare_p.
-
-	* h8300.c (get_shift_alg): Fix HImode ASHIFTRT by 13 or 14 bits.
-
-Wed Sep 25 18:52:19 1996  Joern Rennecke <amylaar@cygnus.co.uk>	
-
-	* sh.md (insv): New pattern.
-
-Wed Sep 25 16:47:26 1996  Doug Evans  <dje@seba.cygnus.com>
-
-	* sparc/t-sunos41 (MULTILIB_{OPTIONS,DIRNAMES,MATCHES}): Create
-	multilib versions of -fpic and -fPIC.
-	(TARGET_LIBGCC2_CFLAGS): Comment out.
-
-	* sparc.c (print_operand): Handle new codes H/L.
-	* sparc.md (lo_sum_di_sp32): Add little endian support.
-	(adddi3_sp32,subdi3_sp32,mulsidi3_sp32,const_mulsidi3): Likewise.
-	(umulsidi3_sp32,const_umulsidi3,smacdi,umacdi,anddi3_sp32): Likewise.
-	(iordi3_sp32,xordi3_sp32,negdi2_sp32): Likewise.
-
-Wed Sep 25 15:32:35 1996  Jim Wilson  <wilson@cygnus.com>
-
-	* expmed.c (store_bit_field): Don't make flag_force_mem disable insv
-	for memory operands.
-	
-	* function.c (instantiate_decl): Always store addr back into x.
-
-Tue Sep 24 19:37:00 1996  Jim Wilson  <wilson@cygnus.com>
-
-	* reload.c (push_secondary_reload): Do strip paradoxical SUBREG
-	even if reload_class is CLASS_CANNOT_CHANGE_SIZE.  Change reload_mode
-	to mode in SECONDARY_MEMORY_NEEDED and get_secondary_mem calls.
-
-	* reload1.c (emit_reload_insns): For output part of RELOAD_OTHER,
-	emit after RELOAD_FOR_OUTPUT, in reverse order of reload number,
-	but not separately.
-
-Tue Sep 24 18:13:07 1996  Michael Meissner  <meissner@tiktok.cygnus.com>
-
-	* expr.c (emit_group_load): Allow target to be smaller than source.
-
-Tue Sep 24 17:40:39 1996  Doug Evans  <dje@cygnus.com>
-
-	* m68k/a-ux.h: Renamed from aux.h because of MSDOS.
-
-Tue Sep 24 08:33:53 1996  David S. Miller  (davem@caip.rutgers.edu)
-
-	* tree.c (copy_node): Fix error in last change.
-
-Tue Sep 24 08:29:03 1996  James G. Smith  <jsmith@cygnus.co.uk>
-
-	* gcc.c (used_arg): Fix multilib_matches parsing to not corrupt
-	entry parameter.
-
-Tue Sep 24 08:22:18 1996  J"orn Rennecke <amylaar@cygnus.co.uk>
-
-	* loop.c (get_condition): Use rtx_equal_p to compare rtx.
-
-Tue Sep 24 08:14:01 1996  Christian Iseli  <Christian.Iseli@lslsun.epfl.ch>
-
-	* integrate.c (expand_inline_function): Avoid creating paradoxical
-	subreg wider than BITS_PER_WORD as inlined function result.
-
-Tue Sep 24 08:00:15 1996  Paul Eggert  <eggert@twinsun.com>
-
-	* cccp.c (struct directive, directive_table, handle_directive):
-	pass_thru now 1 for #define and 2 for #pragma.
-	(handle_directive): When deciding whether to suppress comment at end
-	of directive, ignore tabs and spaces after comment.  Remove redundant
-	limit test.  With -dD -C, copy comment when isolating definition.
-	(skip_to_end_of_comment): With -C, don't copy newline at end
-	of C++ comment.
-
-	* fixinc.ptx, fixinc.svr4, fixincludes: Insert newlines just before
-	end of 'sed' command strings if last 'sed' command is 'a' or 'i'.
-
-Tue Sep 24 07:28:58 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)
-
-	* toplev.c (PREFERRED_DEBUGGING_TYPE): If no debugging formats are
-	supported, set to NO_DEBUG.
-	(main): Don't do setting of PREFERRED_DEBUGGING_TYPE here.
-
-Mon Sep 23 22:45:15 1996  Sean McNeil  <sean@mcneil.com>
-
-	* rs6000/vxppc.h, sparc/vxsim.h: New files.
-	* configure (powerpc-*-vxworks*, sparc-*-vxsim*): New targets.
-	* objc/objc.h (BOOL): Define BOOL as int for VxWorks.
-
-Mon Sep 23 21:23:27 1996  Klaus K"ampf  (kkaempf@progis.de)
-
-	* explow.c (promote_mode, case REFERENCE_TYPE): New case.
-
-Mon Sep 23 21:15:43 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>
-
-	* c-decl.c (finish_struct): Check PCC_BITFIELD_TYPE_MATTERS value.
-
-	* dbxout.c (dbxout_symbol): Fix forgotten case in last change:
-	check DECL_ARTIFICIAL also when using the short cut way.
-
-Mon Sep 23 15:55:24 1996  David S. Miller  (davem@caip.rutgers.edu)
-
-	* tree.c (copy_node): Abort if don't know size of node.
-
-	* tree.c (build1): Clean up initialization of OBSTACK.
-
-Mon Sep 23 15:35:33 1996  Jason Merrill  <jason@yorick.cygnus.com>
-
-	* Makefile.in (stmp-multilib): Depend on $(LANG_LIB2FUNCS).
-
-	* dbxout.c (dbxout_function): Don't check DECL_SECTION_NAME before
-	calling dbxout_function_end.
-
-Mon Sep 23 14:41:12 1996  J"orn Rennecke <amylaar@cygnus.co.uk>
-
-	* combine.c (can_combine_p): Even if SMALL_REGISTER_CLASSES,
-	know lifetime not extended if all_adjacent set.
-
-	* stmt.c (expand_asm_operands): Handle '+' constraint.
-	* cse.c (fold_rtx): Fold inside ASM_OPERANDS.
-
-	* expr.c (expand_increment): If postincrement for MEM can't use add
-	directly, load address in reg and enqueue increment and store of reg.
-
-	* loop.c (check_dbra_loop): Don't assume label must be second part of
-	if_then_else in condjump.
-
-        * jump.c (jump_optimize): In no-nop move deletion, don't
-	test PRESERVE_DEATH_INFO_REGNO_P; instead test if optimization is
-	performed.
-	Check for REG_UNUSED note on to-be deleted insn before searching for
-	preceding instruction to delete note from.
-	If PRESERVE_DEATH_INFO_REGNO_P is true for SREG, replace INSN with USE.
-
-	* reload1.c (reload): Initialize the previous_offset fields
-	in reg_eliminate before calling setup_save_areas.
-
-	* reload1.c (emit_reload_insns): Declare and set this_reload_insn.
-
-	* expr.c (var_rtx): New function.
-	(expand_expr, case COND_EXPR): Also use target if same as singleton.
-
-Mon Sep 23 14:22:34 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)
-
-	* recog.c (constrain_operands): Don't test clobbered constraints.
-
-	* reload1.c (emit_reload_insns): For output part of RELOAD_OTHER,
-	put in front of anything previous for that output, but not separately.
-
-Sun Sep 22 21:06:46 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)
-
-	* c-common.c (decl_attribtes, case A_SECTION): Allow for static
-	local variable.
-
-Sun Sep 22 11:30:27 1996  Christian Iseli  (christian.iseli@di.epfl.ch)
-
-	* expr.c (convert_move): Replace explicit checks for FP extend ops
-	with use of can_extend_p.
-	Add missing tests for FP trunc operations.
-
-Sun Sep 22 11:20:02 1996  Pat Rankin  <rankin@eql.caltech.edu>
-
-	* dwarfout.c (DWARF_VERSION): Define as 1 if not already defined.
-	* dwarf2out.c (DWARF_VERSION): Likewise.
-
-Sun Sep 22 11:12:20 1996  Joern Rennecke <amylaar@cygnus.co.uk>
-
-        * c-decl.c (pushdecl): Check new declaration actually conflicts before
-	warning about implicit external vs. static declarations.
-
-	* loop.c (combine_givs): Improve combining DEST_REG giv with
-	its only use.
-
-Sun Sep 22 10:50:03 1996  Scott Christley <scottc@net-community.com>
-
-	* Create consistent mechanism for memory allocation and release
-	so that garbage collection routines can be easily subsititued
-	for the ANSI standard malloc, realloc, free, etc.
-	* objc/archive.c: Replace use of __objc_xmalloc and free 
-	with objc_malloc and objc_free.
-	* objc/hash.c: Replace use of __objc_xcalloc and free
-	with objc_calloc and objc_free.
-	* objc/init.c: Replace use of free with objc_free.
-	* objc/misc.c (objc_malloc): Renamed from __objc_xmalloc.
-	(objc_realloc): Renamed from __objc_realloc.
-	(objc_atomic_malloc): New function.
-	(objc_valloc): New function.
-	(objc_calloc): Renamed from __objc_calloc.
-	(objc_free): New function.
-	* objc/objc-api.h (_objc_malloc): New function pointer.
-	(_objc_atomic_malloc, _objc_valloc): Likewise.
-	(_objc_realloc, _objc_calloc, _objc_free): Likewise
-	* objc/objc-list.h: Replace use of __obj_xmalloc and free
-	with objc_malloc and objc_free.
-	* objc/objects.c: Likewise.
-	* objc/sarray.c: Replace use of __objc_xmalloc and free
-	with objc_malloc and objc_free.
-	* objc/sarray.h (__objc_xmalloc, __objc_xrealloc): Delete.
-	* objc/selector.c: Replace use of __objc_xcalloc, __objc_xrealloc,
- 	and __objc_xmalloc with objc_calloc, objc_realloc, and objc_malloc.
-	* objc/thr-decosf1.c: Replace use of __objc_xmalloc and free
-	with objc_malloc and objc_free.
-	* objc/thr-irix.c, objc/thr-mach.c, objc/thr-os2.c: Likewise.
-	* objc/thr-posix.c, objc/thr-pthreads, objc/thr-single: Likewise.
-	* objc/thr-solaris.c, objc/thr-win32.c, objc/thr.c: Likewise.
-
-Sun Sep 22 05:26:01 1996  Jason Merrill  <jason@yorick.cygnus.com>
-
-	* configure: Set up LANG_LIB2FUNCS and LANG_EXTRA_HEADERS.
-	* Makefile.in (libgcc2.a): Include LANG_LIB2FUNCS.
-	(USER_H): Add LANG_EXTRA_HEADERS.
-	(LANG_LIB2FUNCS): New macro.
-	(LANG_EXTRA_HEADERS): New macro.
-	(stmp-int-hdrs): Don't hardwire ginclude.
-	(stamp-objlist): Don't depend on Makefile.
-
-Sat Sep 21 18:00:10 1996  Stephen L Moshier  (moshier@world.std.com)
-
-	* alpha.md (alpha_swapped_comparison_operator pattern): Fix asm
-	operand typo in last change.
-
-Sat Sep 21 07:11:51 1996  J"orn Rennecke <amylaar@cygnus.co.uk>
-
-	* defaults.h (ASM_OUTPUT_LABELREF): Provide default definition
-	if not already defined.
-	* 1750a.h (USER_LABEL_PREFIX): Define instead of ASM_OUTPUT_LABELREF.
-	* a29k.h, alpha.h, convex.h, dsp16xx.h, elxsi.h, fx80.h: Likewise.
-	* gmicro.h, h8300.h, i386/sun386.h, i860.h, i960.h, ns32k.h: Likewise.
-	* pdp11.h, pyr.h, romp.h, sh.h, sparc.h, spur.h, tahoe.h: Likewise.
-	* vax.h, we32k.h: Likewise.
-	* i386/att.h (USER_LABEL_PREFIX): Redefine, not ASM_OUTPUT_LABELREF.
-	* i386/bsd.h, i386/lynx.h, i386/sco5.h, i860/fx2800.h: Likewise.
-	* m68k/3b1.h, m68k/mot3300.h, m68k/tower-as.h, m68k/tower.h: Likewise.
-	* ptx4.h, sparc/pbd.h, svr3.h, svr4.h: Likewise.
-	* i386/osfrose.h, m88k.h (USER_LABEL_PREFIX): Redefine.
-	* nextstep.h (USER_LABEL_PREFIX): Redefine.
-	(ASM_OUTPUT_LABELREF) Use USER_LABEL_PREFIX.
-	* arm/aout.h, mips.h (ASM_OUTPUT_LABELREF): Delete.
-	* rs6000/lynx.h (USER_LABEL_PREFIX): Undefine.
-	* rs6000.h, rs6000/win-nt.h (USER_LABEL_PREFIX): Define.
-
-Thu Sep 19 00:05:53 1996  Jason Merrill  <jason@yorick.cygnus.com>
-
-	* configure: Move i[3456]86-*-gnu* case after linux and don't
- 	treat linux-gnu like other gnu systems.
-
-Wed Sep 18 20:51:09 1996  Jason Merrill  <jason@yorick.cygnus.com>
-
-	* cplus-dem.c (demangle_template): Fix handling of address args.
-	(gnu_special): Handle type_info stuff.
-
-Wed Sep 18 17:57:55 1996  Patrik Lantto (patrik@opq.se)
-
-	* jump.c (jump_optimize): Insert conditional move after jump
-	insn instead of before. 
-
-Wed Sep 18 17:33:36 1996  Richard Henderson  <rth@tamu.edu>
-
-	* alpha.h (PREDICATE_CODES): Add alpha_swapped_comparison_operator.
-	* alpha.c (alpha_swapped_comparison_operator): New function.
-	(print_operand): Support unsigned codes for %D, %c, and %d.
-	* alpha.md: Add pattern for b%c with swapped comparisons with 0.
-	Delete three unnamed cmp patterns that are strict subsets of it.
-
-	* alpha.c (alpha_emit_set_long_const): Save one instruction
-	when -O2 and high word == low word.
-
-Tue Sep 17 22:46:15 1996  Jason Merrill  <jason@yorick.cygnus.com>
-
-	* i386/unix.h (ASM_OUTPUT_MI_THUNK): Handle functions
-	returning an aggregate.
-
-	* varasm.c (supports_one_only): New function.
-	(make_decl_one_only): Likewise.
-	* svr4.h (MAKE_DECL_ONE_ONLY): Define.
-	* tree.h (DECL_ONE_ONLY): New macro.
-
-	* varasm.c (assemble_variable): Fix setting of
- 	first_global_object_name.
-	(assemble_start_function): Likewise.
-
-Tue Sep 17 19:42:39 1996  Doug Evans  <dje@wabamun.cygnus.com>
-
-	* i386/t-cygwin32 (winnt.o): Compile properly.
-
-Tue Sep 17 15:47:20 1996  Ian Lance Taylor  <ian@cygnus.com>
-
-	* Add support for VR5000, and finish MIPS4 support.
-	* mips.h (enum processor_type): Add PROCESSOR_R5000.
-	(gen_conditional_move): Declare.
-	(CONDITIONAL_REGISTER_USAGE): Mark ST_REGS as fixed if not
-	HARD_FLOAT, or if mips_isa < 4.
-	(FIRST_PSEUDO_REGISTER): Change to 76.
-	(FIXED_REGISTERS): Add condition code registers.
-	(CALL_USED_REGISTERS): Likewise.
-	(ST_REG_LAST): Change to 74.
-	(RAP_REG_NUM): Change to 75.
-	(ST_REG_P): Look for any condition code register.
-	(REG_CLASS_CONTENTS): Update for new condition code registers.
-	(RTX_COSTS): Add cases for R5000.
-	(REGISTER_MOVE_COST): Add cases for condition code registers.
-	(PREDICATE_CODES): Add "const_float_1_operand".
-	(EXTRA_CC_MODES): Remove.
-	(EXTRA_CC_NAMES): Remove.
-	(SELECT_CC_MODE): Remove.
-	(REGISTER_NAMES): Add entries for new condition code registers.
-	(DEBUG_REGISTER_NAMES): Likewise.
-	(ADDITIONAL_REGISTER_NAMES): Remove FPSW_REGNUM.
-	* mips.md (cpu attribute): Add R5000.
-	(function units): Add cases for the R5000.
-	(madd.d): Only available if TARGET_DOUBLE_FLOAT.
-	(msub.d, nmadd.d, nmsub.d): Likewise.
-	(recip.d, recip.s, rsqrt.d, rsqrt.s): New define_insn patterns.
-	(movcc): New pattern to move condition code values.
-	(reload_incc, reload_out_cc): New define_expand patterns.
-	(lwxc1, ldxc1, swxc1, sdxc1): Several new define_insn patterns.
-	(various): Replace CC_FP with CC.
-	(branch_fp_ne, branch_fp_eq): Match any condition code register.
-	(branch_fp_ne_rev, branch_fp_eq_rev): Remove.
-	(seq_df, slt_df, sle_df): Match any condition code register.
-	(sgt_df, sge_df, seq_sf, slt_sf, sle_sf): Likewise.
-	(sgt_sf, sge_sf): Likewise.
-	(sne_df, sne_sf): Remove.
-	(FP conditional moves): Match any condition code register.
-	Require TARGET_HARD_FLOAT and, if appropriate,
-	TARGET_DOUBLE_FLOAT.
-	(movsicc): Just call gen_conditional_move.
-	(movdicc, movsfcc, movdfcc): New define_expand patterns.
-	* mips.c (mips_reg_names): Add condition code registers.
-	(mips_sw_reg_names): Likewise.
-	(mips_regno_to_class): Likewise.
-	(const_float_1_operand): New function.
-	(mips_move_1word): Treat CCmode as SImode.  Handle move from
-	ST_REG to GR_REG if mips_isa >= 4.  Only permit move from GR_REG
-	to ST_REG is mips_isa < 4.
-	(gen_conditional_branch): Rewrite.  Just use CCmode, not extra
-	condition modes.
-	(gen_conditional_move): New function.
-	(override_options): Recognize vr5000.  Look for just CCmode, not
-	extra condition modes.  If mips_isa >= 4, permit CCmode in GR_REGS
-	and FP_REGS.
-	(print_operand): Handle %Z.
-	(mips_secondary_reload_class): Require a data register to copy a
-	value out of a condition code register.  Require a floating point
-	register to copy a value into a condition code register.
-
-Tue Sep 17 15:10:29 1996  Joern Rennecke <amylaar@cygnus.co.uk>
-
-	* sh.md: New define_splits to recombine output from LEGITIMIZE_ADDRESS.
-	* sh.h (LEGITIMIZE_ADDRESS): Typo fixes (x -> X).
-
-Mon Sep 16 23:00:35 1996  Jim Wilson  <wilson@cygnus.com>
-
-	* configure (build_broken_install): Renamed from host_broken_install.
-	Set from build not host.
-	(build_install_headers): Renamed from host_install_headers.  Set from
-	build not host.
-
-Mon Sep 16 22:38:55 1996  Stu Grossman  (grossman@critters.cygnus.com)
-
-	* configure (m68k-*-coff*): Use dbx debug format by default.
-	* gcc.c (link_command_spec): Move -T to end of link command line.
-	* m68k/m68kemb.h (LINK_SPEC, SUBTARTGET_SWITCHES): Delete.
-	(LIB_SPEC): Define to just -lc.
-	(STARTFILE_SPEC): Define to empty.
-
-Mon Sep 16 13:12:27 1996  J"orn Rennecke <amylaar@cygnus.co.uk>
-
-	* sh.c (ext_shift_insns, ext_shift_amounts): new arrays.
-	(gen_ashift_hi, gen_shifty_hi_op, shl_and_kind): new functions.
-	rtx_equal_function_value_matters: declare.
-	(shl_and_length, shl_and_src_length, gen_shl_and): new functions.
-	(shl_sext_kind, shl_sext_length, gen_shl_sext): new functions.
-	* sh.md (ashlhi3_k, lshrhi3_m): new insn pattern.
-	(lshrhi3, shl_sext_ext, shl_sext_sub):
-	new insn pattern with matching define_split.
-	(and_shl_scratch): Likewise, but also with unnamed variants.
-
-Sat Sep 14 17:05:07 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)
-
-	* gcc.c (convert_filename): Don't start looking for '.' until
-	after last directory separator.
-
-	* i386.md (clrstrsi): Correct check for constant size.
-
-	* Based on code by sac@cygnus.com.
-	* i386/cygwin32.h (CHECK_STACK_LIMIT): Make consistent with MD file.
-	* i386.c ({function,ix86_expand}_prologue): Use __alloca to allocate
-	stack if desired and beyond CHECK_STACK_LIMIT in size.
-	* i386.h ({MASK,TARGET}_STACK_PROBE): New macros.
-	(TARGET_SWITCHES): Add -mstack-arg-probe.
-	* i386.md (allocate_stack{,_worker}): New patterns.
-
-Fri Sep 13 18:23:18 1996  Joel Sherrill <joel@OARcorp.com>
-
-	* sparc/lb1spc.asm (.div, .rem): Fixed typo so sign is returned
-	correctly.  TOPBITS was 2 and should have been 4.
-
-Thu Sep 12 21:51:56 1996  Jim Wilson  <wilson@cygnus.com>
-
-	* mips.md (call_value_multiple_internal0): Change from define_insn to
-	define_expand.
-
-Thu Sep 12 19:22:14 1996  Doug Evans  <dje@seba.cygnus.com>
-
-	* sparc.md (move_pic_label_si): Operand one is label_ref now.
-	* sparc.c (emit_move_sequence): Pass label_ref to
-	gen_move_pic_label_si to not lose flags.
-
-Wed Sep 11 12:10:08 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)
-
-	* Makefile.in (GCC_PASSES): Add $(exeext) to names.
-	(FLAGS_TO_PASS): Add CLIB.
-	(c-pragma.o): Add dependencies on except.h, function.h, defaults.h.
-
-Tue Sep 10 22:25:03 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)
-
-	* configure (i[3456]86-*-cygwin32): Use xm-cygwin32.h and xm-i386.h.
-	Set fixincludes to Makefile.in and objc_thread_file to win32.
-	* i386/xm-cywin32.h: Don't include xm-i386.h.
-	* i386/x-cygwin32, rs6000/x-cygwin32 (STMP_FIXPROTO, exeext): New defs.
-
-	* gcc.c (HAVE_EXECUTABLE_SUFFIX): New macro.
-	(convert_filename): New function.
-	(process_command, case 'o'): Call it.
-	(process_command, default case): Likewise; delete old code.
-
-Tue Sep 10 21:08:43 1996  Torbjorn Granlund  <tege@albert.gnu.ai.mit.edu>
-
-	* i386.md (decrement_and_branch_until_zero matcher): Fix typo.
-
-Tue Sep 10 19:04:19 1996  Jim Wilson  <wilson@cygnus.com>
-
-	* mips.c (mips_move_2words): Rewrite 32 bit shifts as 16 bit shifts.
-
-Tue Sep 10 10:39:07 1996  Jeffrey A Law  (law@cygnus.com)
-	
-	* pa/pa-gas.h (DBX_DEBUGGING_INFO): Remove all #define
-	and #undef statements related to debugging information.
-	* pa/pa-hpux.h, pa-hpux7.h: Likewise
-	* pa.c (override_options): Disable "-g" and issue a warning
-	if it's used when !TARGET_GAS.
-
-Mon Sep  9 17:57:49 1996  Doug Evans  <dje@wabamun.cygnus.com>
-
-	* sparc.h ({MASK,TARGET}_FPU_SET): Define.
-	(TARGET_SWITCHES): Record if -m{,no-}fpu passed.
-	* sparc.c (sparc_override_options): Don't clobber explicit
-	-m{,no-}fpu setting with cpu default.
-
-Mon Sep  9 15:57:57 1996  Joel Sherrill  <joel@OARcorp.com>
-
-        * configure (mips64orion-*-rtems*): New target.
-        * mips/rtems64.h: New file.
-
-Sat Sep  7 22:07:53 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)
-
-	* expr.c (store_field): If storing a record on big endian targets,
-	set up so we store the high-order bits.
-	(expand_expr, case COMPONENT_REF): Likewise for loads.
-
-Thu Sep  5 14:59:47 1996  J"orn Rennecke <amylaar@cygnus.co.uk>
-
-	* sh.h (LEGITIMIZE_ADDRESS): Define nonempty.
-
-Thu Sep  5 10:43:36 1996  Jeffrey A Law  (law@cygnus.com)
-
-	* pa.md (movsi, movdi, movsf patterns): Handle
-	'R' constraints as needed.
-
-Wed Sep  4 17:13:28 1996  Bob Manson  <manson@charmed.cygnus.com>
-
-	* except.c: (add_partial_entry): New routine.
-	(expand_start_try_stmts): Moved from cp/except.c.
-	(expand_start_all_catch): Move functionality of expand_end_try_stmts
-	here.
-
-Wed Sep  4 12:30:02 1996  Mike Stump  <mrs@cygnus.com>
-
-	* except.c (emit_unwinder): Ensure that CLOBBER and USE insns come
-	last, if present.
-
-Tue Sep  3 12:01:43 1996  Ian Lance Taylor  <ian@cygnus.com>
-
-	* configure (sh-*-elf*): New target.
-	* sh/elf.h: New file.
-
-Fri Aug 30 17:52:26 1996  Jim Wilson  <wilson@cygnus.com>
-
-	* dwarf2out.c (gen_formal_types_die): Delete extra argument from
-	gen_type_die call.
-
-Fri Aug 30 15:40:40 1996  James G. Smith  <jsmith@cygnus.co.uk>
-
-	* mips/elf64.h: Allow MULTILIB_DEFAULTS to be defined
-	before this file is included.
-
-Fri Aug 30 15:00:06 1996  Stan Cox  <coxs@dg-rtp.dg.com>
-
-	* i386.md: (movsicc,movhicc): Allow reload from memory.
-	
-	* i386.c (override_options): Don't thread the prologue if profiling.
-
-Fri Aug 30 15:00:06 1996  James Hawtin  <cgjwh@sunrise.co.uk>
-	
-	* i386/t-sol2 (gcrt1.o): Added for profiling Solaris 2
-	* i386/sol2.h (STARTFILE_SPEC): New.
-	* i386/gmon-sol2.c, i386/sol2-gc1.asm: New files.
-	
-Thu Aug 29 22:08:03 1996  Jim Wilson  <wilson@cygnus.com>
-
-	* except.c (add_eh_table_entry): Multiply realloc size by sizeof int.
-
-Thu Aug 29 15:15:31 1996  Jeffrey A Law  (law@cygnus.com)
-
-	* pa.md (fcmp patterns): Don't try to eliminate useless add,tr
-	insns here.
-	* pa.c (pa_reorg): Do elimination of useless add,tr insns here instead.
-	(print_operand, case 'y'): Remove this code.
-
-Wed Aug 28 16:19:34 1996  Doug Evans  <dje@cygnus.com>
-
-	* toplev.c (print_single_switch): Ultrix fprintf returns 0 for success.
-
-	* toplev.c (main): Rewrite -g parsing.
-
-Mon Aug 26 16:15:49 1996  Fred Fish  <fnf@cygnus.com>
-
-	* Makefile.in (objc-parse.y): Fix typo in name of temp file.
-
-Mon Aug 26 14:08:37 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)
-
-	* function.c (mark_all_temps_used): Fix error in last change.
-
-Sun Aug 25 22:27:19 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)
-
-	* function.c (mark_all_temps_used): New function.
-
-Fri Aug 23 11:34:57 1996  Michael Meissner  <meissner@tiktok.cygnus.com>
-
-	* rs6000/sysv4.h (SUBTARGET_OVERRIDE_OPTIONS): Fixes to make -fPIC
-	really the same as -mrelocatable.
-	(ASM_SPEC): Pass -K PIC to the assembler if -fpic/-fPIC.
-
-	* rs6000/sol2.h (ASM_CPU_SPEC): Remove passing -K PIC to the
-	assembler if -fpic/-fPIC.
-
-	* bi-{arity,opcode,opname}.c (fancy_abort): Define, so that
-	-Dabort=fancy_abort works again.
-
-Thu Aug 22 11:39:34 1996  Michael Meissner  <meissner@tiktok.cygnus.com>
-
-	* rs6000/t-ppcgas ({stmp,install}-crt): Only build and install the
-	eabi ecrt[in].o object files in eabi multilib directories, only
-	build and install the solaris scrt[in0].o object files in solaris
-	directories.
-	(MULTILIB_MATCHES): Remove matches for solaris, linux to other
-	switches.
-
-Tue Aug 20 18:49:55 1996  Michael Meissner  <meissner@tiktok.cygnus.com>
-
-	* rs6000/sysv4.h (ASM_OUTPUT_SECTION_NAME): If -mrelocatable or
-	-mrelocatable-lib, don't make read-only sections, since if there
-	are pointers to be fixed up, the assembler complains.
-
-Mon Aug 19 18:42:13 1996  Doug Evans  <dje@cygnus.com>
-
-	* sparc.h ({MASK,TARGET}_LITTLE_ENDIAN): Define.
-	(LIBGCC2_WORDS_BIG_ENDIAN): Add little endian support.
-	* sparc/sp64-elf.h ({CPP,ASM,LINK}_SPEC): Add little endian support.
-	(SUBTARGET_SWITCHES): Recognize -m{big,little}-endian.
-	({BYTES,WORDS}_BIG_ENDIAN): Likewise.
-	* sparc/splet.h (SUBTARGET_SWITCHES): Recognize -m{big,little}-endian.
-	({CPP,ASM,LINK}_SPEC): Add little endian support.
-	({BYTES,WORDS}_BIG_ENDIAN): Likewise.
-	* sparc/t-splet (MULTILIB_{OPTIONS,DIRNAMES}): Likewise.
-
-	* sparc/lynx-ng.h (CPP_SPEC): Use %(cpp_cpu).
-
-Sat Aug 17 15:23:39 1996  Geoffrey Noer  <noer@cygnus.com>
-
-	* i386/cygwin32.h (CPP_PREDEFINES): Define _WIN32, not WIN32.
-	Define only __CYGWIN32__, not CYGWIN32 or __CYGWIN32.
-	* rs6000/cygwin32.h (CPP_PREDEFINES): Likewise.
-	* cccp.c (absolute_filename): Drive specifiers make the pathname
-	absolute in cygwin32.
-	* choose-temp.c: Delete !defined(_WIN32) condition when including
-	sys/file.h (NO_SYS_FILE_H is still used).
-	* gcc.c: Change ifndef _WIN32 to ifndef NO_SYS_FILE_H when deciding
-	whether to include sys/file.h.
-	(execute): -pipe is supported for cygwin32.
-	* getopt.c: Change win32 test from WIN32 to _WIN32.
-	* pexecute.c: Update test for win32 (&& ! cygwin32).
-	* protoize.c: Likewise.
-	(kill): Delete decl.
-	* toplev.c: Update test for win32 (&& ! cygwin32).
-	* ginclude/stdarg.h: Change __WIN32__ to _WIN32.
-	* ginclude/varargs.h: Likewise.
-	* ginclude/va-ppc.h: Likewise.
-
-Fri Aug 16 16:02:09 1996  Michael Meissner  <meissner@tiktok.cygnus.com>
-
-	* rs6000.c (rs6000_got_register): Make sure pic_offset_table_rtx
-	allocated, even if current_function_uses_pic_offset_table set.
-
-Fri Aug 16 15:56:04 1996  J. Kean Johnston  <hug@netcom.com>
-
-	* i386/sco5.h (CLASS_LIKELY_SPILLED_P): Deleted.
-	(STARTFILE_SPEC): Insert crtbegin.o in correct place, and correct
-	versions of values-X?.o.
-	(SWITCH_TAKES_ARG): Extend DEFAULT_SWITCH_TAKES_ARG, not replace.
-	(CPP_SPEC): Add -Di386, and correctly include extra directories.
-	Define HAVE_ATEXIT in ELF mode for global destructors.
-
-Thu Aug 15 16:42:44 1996  Doug Evans  <dje@cygnus.com>
-
-	* sparc.c (label_ref_operand): New function.
-	(emit_move_sequence): Pass label_ref to gen_move_label_di to not
-	lose flags.
-	* sparc.md (move_label_di): Operand one is label_ref now.
-	* genattrtab.c (write_test_expr): Allow label_ref in match_dup.
-
-	* sys-protos.h (gethostid): Make return type `int' ifdef __alpha__.
-	* gen-protos.c: Delete support for SYS_PROTO_OVERRIDES.
-	* alpha.h (SYS_PROTO_OVERRIDES): Delete.
-
-Thu Aug 15 17:36:09 1996  Mike Stump  <mrs@cygnus.com>
-
-	* libgcc2.c (__throw): New routine.
-	(__eh_pc): New data object for exception handling.
-
-	* except.c (eh_saved_pc): New object so we can call
-	assemble_external.
-	(expand_internal_throw_indirect): Call assemble_external for __eh_pc.
-	(end_eh_unwinder): Likewise.
-	(init_eh): Initialize eh_saved_pc.
-
-Thu Aug 15 13:02:42 1996  Mike Stump  <mrs@cygnus.com>
-
-	* arm.h (RETURN_ADDR_RTX): Define.
-
-	* expr.c (expand_builtin_return_addr): Fix order of parameters.
-
-Wed Aug 14 19:48:00 1996  Torbjorn Granlund  <tege@spiff.gnu.ai.mit.edu>
-
-	* stmt.c (expand_return): In code for doing scc with jumps,
-	stick to default handling if we have corresponding scc pattern.
-
-Wed Aug 14 10:31:28 1996  Jeffrey A Law  (law@cygnus.com)
-
-	* pa.c (override_options): Treat TARGET_FAST_INDIRECT_CALLS
-	just like TARGET_NO_SPACE_REGS.
-	(output_millicode_call): Likewise.
-	* pa.h (TARGET_FAST_INDIRECT_CALLS): Define.
-	(TARGET_SWITCHES): Add "fast-indirect-calls".
-	* pa.md: Treat TARGET_FAST_INDIRECT_CALLS just like
-	TARGET_NO_SPACE_REGS in various call/millicode call patterns.
-
-	* pa.c (print_operand): Use the right comparison operator
-	for reversed EQ and NE comparisons.
-
-	* pa.h (OUTPUT_MI_THUNK): Define.
-
-Wed Aug 14 11:40:49 1996  Michael Meissner  <meissner@tiktok.cygnus.com>
-
-	* ginclude/va-ppc.h: Add Windows NT support.
-	* ginclude/{varargs,stdarg}.h: For PowerPC Windows NT, include
-	va-ppc.h, instead of using the default handling.
-
-Tue Aug 13 18:30:10 1996  Ian Lance Taylor  <ian@cygnus.com>
-
-	* fixincludes: Remove duplicate volatile from sig_atomic_t in AIX
-	sys/signal.h
-
-Tue Aug 13 16:51:37 1996  Jim Wilson  <wilson@cygnus.com>
-
-	* i960-coff.h (LIB_SPEC): Undef.
-
-	* sh.h (PROFILE_BEFORE_PROLOGUE): Define.
-
-Tue Aug 13 11:36:02 1996  Michael Meissner  <meissner@tiktok.cygnus.com>
-
-	* gcc.c (set_spec,process_command): Dump and load the compiler
-	version number in the specs file.
-
-	* rs6000.c (output_toc): Fix last change, so that it doesn't use
-	an uninitialized variable if -mminimal-toc.
-	(output_prolog): Increment probe_labelno after last use.
-
-	* rs6000/t-ppcgas (MULTILIB_*): Build far fewer multilib
-	libraries.  Build all libraries with -mrelocatable-lib and
-	-mno-eabi.  Build special Linux and Solaris libraries.
-	* rs6000/eabi{,aix,le}.h (MULTILIB_DEFAULTS): Adapt to changes in
-	t-ppcgas.
-	* rs6000/(linux,sol2).h (MULTILIB_DEFAULTS): Ditto.
-	* rs6000/{sysv4,sysv4le} (MULTILIB_DEFAULTS): Ditto.
-
-Tue Aug 13 11:36:02 1996  Jeffrey A Law  (law@cygnus.com)
-
-	* rs6000.c (handle_mac_pragma): Initialize "psize".
-
-Mon Aug 12 18:14:35 1996  Jim Wilson  <wilson@cygnus.com>
-
-	* gcc.c (used_arg): Initialize cnt to zero.
-
-Mon Aug 12 14:03:16 1996  Jim Wilson  <wilson@cygnus.com>
-
-	From Mike Stump:
-	* sh.c (regno_reg_class): Change entry 23 from NO_REGS to GENERAL_REGS.
-	(initial_elimination_offset): New variable live_regs_mask.  Add
-	code to handle RETURN_ADDRESS_POINTER_REGNUM.
-	* sh.h (RAP_REG, RETURN_ADDRESS_POINTER_REGNUM): Define.
-	(ELIMINABLE_REGS): Add RETURN_ADDRESS_POINTER_REGNUM support.
-	(RETURN_ADDR_RTX): Define.
-	(REGISTER_NAMES): Add rap.
-
-	* iris5.h (DOLLARS_IN_IDENTIFIERS): Undefine.
-
-	* m68kemb.h (LIB_SPEC): Always emit -lc.
-
-Mon Aug 12 12:30:25 1996  Michael Meissner  <meissner@tiktok.cygnus.com>
-
-	* rs6000.c (rs6000_got_register): Test variable
-	current_function_uses_pic_offset_table to see whether or not a GOT
-	register has been created already.
-
-	* Makefile.in (multilib.h): Move to stamp-mlib.
-	(stamp-mlib): Use move-if-change to conditionally update
-	multilib.h.  Pass MULTILIB_EXTRA_OPTS to genmultilib.
-	(STAGESTUFF): Add stamp-mlib.
-	(mostlyclean): Delete tmp-mlib.h.
-
-	* genmultilib: Take a fifth argument to add options to pass on to
-	all multilib builds.  Restructure output so that we pass the
-	synonym switches and extra arguments separately, and not
-	exponentially slow down genmultilib.
-
-	* gcc.c (toplevel): Rearrange multilib support so that we support
-	passing the synonyms separately from the normal switches.  Add
-	support for passing additional switches to be used on all multilib
-	builds.  Dump and restore the value of MULTILIB_DEFAULTS so that
-	gcc cover programs for other targets will correctly chose the
-	appropriate multilib directory.
-	(setspec,process_command,main): Ditto
-	(used_arg,default_arg,print_multilib_info): Ditto.
-
-Mon Aug 12 07:46:47 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)
-
-	* expr.c (expand_builtin, case BUILT_IN_SETJMP): Add test
-	and call for nonlocal_goto_receiver pattern.
-	* stmt.c (expand_end_bindings): Likewise.
-
-	* stmt.c (expand_asm_operands): Fix off-by-one error when
-	scanning constraints.
-
-Sun Aug 11 22:48:02 1996  Jason Merrill  <jason@yorick.cygnus.com>
-
-	* expr.c (store_expr): Handle COND_EXPR cleanups like expand_expr.
-
-Sun Aug 11 22:42:36 1996  J"orn Rennecke  <amylaar@cygnus.co.uk>
-
-	* optabs.c (expand_abs): When OP0 and TARGET are the same
-	pseudo register, it is safe to use TARGET.
-
-	* local-alloc.c (reg_equiv_replace): New variable.
-	(update_equiv_regs): Set reg_equiv_replacement for all REG_EQUIV
-	notes encountered or generated.
-
-Sun Aug 11 22:27:14 1996  Scott Christley <scottc@net-community.com>
-
-	* objc/hash.c (hash_is_key_in_hash): Function somehow got lost.
-
-Sun Aug 11 21:43:15 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>
-
-	* ginclude/stddef.h (__need_wint_t): Move #undef to right place.
-
-Sun Aug 11 17:46:22 1996  J"orn Rennecke <amylaar@cygnus.co.uk>
-
-	* c-decl.c (finish_struct): If pedantic, also warn if struct/union
-	has no named members.
-
-Sun Aug 11 17:32:52 1996  Joel Sherrill <joel@OARcorp.com>
-
-	* i386/rtems.h: Renamed from i386/i386-rtems.h
-	* i960/rtems.h: Renamed from i960/i960-rtems.h
-	* m68k/rtems.h: Renamed from m68k/m68k-rtems.h
-	* rs6000/rtems.h: Renamed from rs6000/powerpc-rtems.h
-	* sparc/rtems.h: Renamed from sparc/sparc-rtems.h
-	* config/t-rtems: New file.
-	* configure (i386-*-rtems*): Added t-rtems to tmake_file.
-	Renamed i386/i386-rtems.h to i386/rtems.h.
-	(i960-*-rtems*): Added t-rtems to tmake_file.
-	Renamed i960/i960-rtems.h to i960/rtems.h.
-	Added original tm.h file and dbxcoff.h.
-	(m68k-*-rtems*): Added t-rtems to tmake_file.
-	Renamed m68k/m68k-rtems.h to m68k/rtems.h.
-	(powerpc-*-rtems*): Added t-rtems to tmake_file.
-	Renamed rs6000/powerpc-rtems.h to rs6000/rtems.h.
-	(sparc-*-rtems*): Added t-rtems to tmake_file.
-	Renamed sparc/sparc-rtems.h to sparc/rtems.h.
-
-Fri Aug  9 16:05:13 1996  Stan Cox  <coxs@dg-rtp.dg.com>
-
-	* i386.md: (untyped_call) Avoid SIGFPE.
-
-	* i386.c (output_float_compare): Don't try to initialize
-	aggregate local variable; use assignment statements instead.
-
-	* i386.h (RTX_COSTS): rtx_cost should pass two parameters.
-	
-	* i386/go32.h (ASM_OUTPUT_SECTION_NAME): New.
-
-Fri Aug  9 16:00:11 1996  Jim Wilson  <wilson@cygnus.com>
-
-	* winnt.c (gen_stdcall_suffix): Round parameter size to PARM_BOUNDARY.
-
-Thu Aug  8 17:42:35 1996  Michael Meissner  <meissner@tiktok.cygnus.com>
-
-	* rs6000.c (output_toc): If we are emitting a reference to a
-	vtable, don't put in the section name, just use the symbol.
-
-Wed Aug  7 19:03:36 1996  Jim Wilson  <wilson@cygnus.com>
-
-	* sh.md (casesi_jump): New pattern.
-	(casesi): Generate RTL to match it.
-
-Wed Aug  7 14:10:07 1996  Jason Merrill  <jason@yorick.cygnus.com>
-
-	* ginclude/stddef.h (NULL): Use __null for G++.
-
-Tue Aug  6 17:37:53 1996  Michael Meissner  <meissner@tiktok.cygnus.com>
-
-	* rs6000/sysv4.h (STACK_BOUNDARY): Always define as 64.
-	(ABI_STACK_BOUNDARY): Define as 64/128 based on the -mno-eabi
-	switch.
-
-	* rs6000.c (rs6000_stack_info): Use ABI_STACK_BOUNDARY, not
-	STACK_BOUNDARY.  Define ABI_STACK_BOUNDARY as STACK_BOUNDARY #ifndef.
-
-Tue Aug  6 14:29:43 1996  Doug Evans  <dje@fallis.cygnus.com>
-
-	* gen-protos.c (overrides): New static local.
-	(add_hash,parse_fn_proto): New static functions.
-	(main): Add prototypes from SYS_PROTO_OVERRIDES to hash table before
-	parsing sys-protos.h.  Reserve entry 0 in std_protos.
-	* alpha.h (SYS_PROTO_OVERRIDES): Define.
-
-Mon Aug  5 16:53:36 1996  Doug Evans  <dje@fallis.cygnus.com>
-
-	* sparc/t-splet (MULTILIB_OPTIONS): Add mbroken-saverestore.
-	(MULTILIB_DIRNAMES): Add brknsave.
-
-	* stor-layout.c (layout_record): Correct overflow test for 0 sized
-	fields.
-
-Mon Aug  5 16:12:19 1996  Jim Wilson  <wilson@cygnus.com>
-
-	* alpha.c (alpha_output_filename): When emitting stabs, don't
-	disable them if using GNU as.
-	(alpha_output_lineno): Likewise, when not using GNU as.
-
-	* sh.c (arith_reg_operand): Reject SUBREG of an invalid hard reg.
-
-	* sparc/lite.h (aoutos.h): Don't include it.
-	* configure (sparclite-*-aout*): Add aoutos.h to tm_file.
-
-Sat Aug  3 23:13:55 1996  Jeffrey A Law  (law@cygnus.com)
-
-	* combine.c (rtx_equal_for_field_assignment_p): Check for
-	get_last_value returning (CLOBBER (CONST_INT 0)).
-
-Sat Aug  3 20:19:14 1996  Jim Wilson  <wilson@cygnus.com>
-
-	* i960.md (subsi3+1): Handle case where first operand is constant
-	but second operand is not.
-
-	* m68k/vxm68k.h (WCHAR_TYPE_SIZE): Undef, then define to 16.
-
-Fri Aug  2 15:46:19 1996  Jeffrey A Law  (law@cygnus.com)
-
-	* pa/pa-hpux.h (LINK_SPEC): Don't link in PA1.1 specific
-	libraries when creating shared libraries.
-	* pa/pa-hpux9.h, pa/pa-hpux10.h: Likewise.
-
-Fri Aug  2 13:36:42 1996  Stan Cox  <coxs@dg-rtp.dg.com>
-
-	* i386.c (output_float_compare): fcomi should be followed by the
-	correct conditional jump instead of fcom/pfstsw/and/jne
-	(override_options): Added -mbranch-cost to set BRANCH_COST.
-	
-	* i386.md (sgt+1,slt+1,sge+1,sle+1,bgt+1,blt+1,bge+1,ble+1,bleu+4)
-	Added TARGET_CMOVE check for fcomi.
-	(movsicc_1+1,movhicc_1+1): Added to handle the general case.
-	
-	* i386.h (i386_branch_cost, i386_branch_cost_string): Added.
-
-Fri Aug  2 11:53:55 1996  Brendan Kehoe  <brendan@lisa.cygnus.com>
-
-	* sparc/vxsparc.h (CPP_PREDEFINES): Add `-DCPU=SPARC'.
-
-Thu Aug  1 23:56:01 1996  Jeffrey A Law  (law@cygnus.com)
-
-	* pa.h (ASM_OUTPUT_INT): Remove all hacks for exception table.
-
-Thu Aug  1 10:08:14 1996  Torbjorn Granlund  <tege@spiff.gnu.ai.mit.edu>
-
-	* m68k.h (RTX_COSTS, case PLUS): Get operand order right.
-
-Wed Jul 31 15:06:46 1996  Doug Evans  <dje@cygnus.com>
-
-	* sparc.md (negtf2,abstf2): Fix v9 case.
-
-Wed Jul 31 09:49:25 1996  Jeffrey A Law  (law@cygnus.com)
-
-	* pa.h (ASM_OUTPUT_INT): Use an 'E%' prefix for items in
-	the exception table if TARGET_GAS && ! TARGET_PORTABLE_RUNTIME.
-
-Tue Jul 30 15:37:31 1996  Jim Wilson  <wilson@cygnus.com>
-
-	* i386/cygwin32.h (dbxcoff.h): Include.
-	(DBX_DEBUGGING_INFO, SDB_DEBUGGING_INFO, PREFERRED_DEBUGGING_TYPE):
-	Move definitions before include of dbxcoff.h.
-	(ASM_OUTPUT_SOURCE_LINE, DBX_OUTPUT_MAIN_SOURCE_FILE_END): Delete.
-	(DBX_BLOCKS_FUNCTION_RELATIVE, DBX_FUNCTION_FIRST): Delete.
-
-Tue Jul 30 15:03:53 1996  Torbjorn Granlund  <tege@spiff.gnu.ai.mit.edu>
-
-	* i960.md (eq reg (const_int 0)): New pattern.
-
-Tue Jul 30 11:15:44 1996  Jeffrey A Law  (law@cygnus.com)
-
-	* pa.h (RETURN_ADDR_RTX): Offset is -20 from the frame, not +20!
-
-Mon Jul 29 12:16:17 1996  Jeffrey A Law  (law@cygnus.com)
-
-	* pa.h (GO_IF_LEGITIMATE_ADDRESS): Fix thinko in last change.
-
-Fri Jul 26 18:19:47 1996  Doug Evans  <dje@cygnus.com>
-
-	* dwarfout.c (output_bound_representation): Fix typo.
-
-Thu Jul 25 16:00:10 1996  Mike Stump  <mrs@cygnus.com>
-
-	* expr.c (do_jump, case TRUTH_ORIF_EXPR): Ensure end of an
-	exception region comes after its start.
-	(do_jump, case TRUTH_ANDIF_EXPR): Likewise.
-
-Thu Jul 25 13:36:42 1996  Stan Cox  <coxs@equinox>
-
-	* i386.c (output_float_compare): Added support for Pentium Pro
-	fcomi instruction which sets EFLAGS instead of FPU Status Word.
-
-Wed Jul 24 21:48:08 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)
-
-	* cse.c (canon_hash, cse_insn): MEM is not unchanging if it is
-	in the frame (since the temp slot might be reused).
-
-Wed Jul 24 17:34:06 1996  J"orn Rennecke (amylaar@cygnus.com)
-
-	* sh.md (branch_true, branch_false, inverse_branch_true): Express
-	tests of the T bit as comparisons against zero, rather than one.
-	(inverse_branch_false, beq, bne, bgt, blt, ble, bge, bgtu): Likewise.
-	(bltu, bgeu, bleu, casesi): Likewise.
-
-Wed Jul 24 15:58:06 1996  Stan Cox  <coxs@dg-rtp.dg.com>
-
-	* i386.md: (mov{sf,df,xf}cc{,_1}): New patterns for P6 FP cmove.
-	* i386.c (put_condition_code, print_operand, output_fp_cc0_set):
-	Support fcmov suffixes.
-
-Wed Jul 24 10:53:38 1996  Jeffrey A Law  (law@cygnus.com)
-
-	* pa.c (move_operand): Relax "mode" test.  Allow scaled
-	indexed addressing modes.
-	(output_fp_move_double): Tweak output strings to work with updated
-	'F' and 'M' output modifiers.
-	(print_operand): Collapse 'F' and 'M' into a single hunk of code.
-	For auto-increment modes output "s,ma" and "s,mb".
-	For scaled indexing modes output "x,s"
-	For other addresses, output nothing for 'M' and "s" for 'F'.
-	* pa.h (EXTRA_CONSTRAINT): Don't accept scaled indexed addresses
-	for 'Q' and 'T'.  Do accept scaled indexed addresses for 'R'.
-	(GO_IF_LEGITIMATE_ADDRESS): Accept scaled indexed addresses
-	for SFmode and DFmode.
-	* pa.md: Remove all scaled indexed load patterns.
-	(movsi patterns): Accept scaled indexed addresses in some
-	cases.  Update output strings for updated 'M' and 'F' output modifiers.
-	(movhi, movqi, movsf, movdf, movdi patterns): Likewise.
-
-Tue Jul 23 23:10:41 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)
-
-	* tree.h (struct tree_int_cst): Add field for TREE_CST_RTL.
-	* varasm.c (decode_addr_const, output_constant_def): AllowINTEGER_CST.
-
-Tue Jul 23 16:42:09 1996  Jim Wilson  <wilson@cygnus.com>
-
-	* sh.c (reg_unused_after): Handle JUMP_INSN inside a sequence.
-
-Tue Jul 23 16:33:25 1996  Mike Stump  <mrs@cygnus.com>
-
-	* Make exception handling work better when optimizations are on.
-	* except.c, except.h: New files.
-	* Makefile.in (OBJS): Add except.o.
-	(except.o): Add.
-	(stmt.o, final.o): Add except.h.
-	* rtl.c (note_insn_name): Add NOTE_INSN_EH_REGION_{BEG,END}.
-	* rtl.h: Likewise.
-	* arm.h (MASK_RETURN_ADDR): Define.
-	* pa.h (MASK_RETURN_ADDR, RETURN_ADDR_RTX): New macros.
-	* sparc.h (DOESNT_NEED_UNWINDER): Define if not doing a flat function.
-	* mips.h (RETURN_ADDR_RTX): Improve.
-	* vax.h (RETURN_ADDR_RTX): Improve.
-	* toplev.c (rest_of_compilation): Use find_handler_labels.
-	(main, interim_eh{,_hook}): Remove interim_eh_hook support.
-	(flag_exceptions): New flag; also add to table.
-	(compile_file): Emit the exception table in the backend now.
-	* final.c (final_scan_insn): Support ASM_OUTPUT_EH_REGION_{BEG,END}.
-	(final_scan_insn): Redo handler labels, implement
-	NOTE_INSN_EH_REGION_BEG and NOTE_INSN_EH_REGION_END and use them
-	instead of CODE_LABELs.
-	(final): Add call to check_handler_labels.
-	* libgcc2.c (L_eh): Add support for EH_TABLE_LOOKUP.
-	* sparc.md (return): Add a reference to the return address register.
-	* flow.c (find_basic_blocks): Add support for handler_labels.
-	* loop.c (find_and_verify_loops): Likewise.
-	* jump.c (jump_optimize): Likewise.
-	Add call to check_handler_labels.  Add call to exception_optimize.
-	* sched.c (sched_analyze): Smuggle exception region notes around.
-	(unlink_notes, reemit_notes, schedule_block): Likewise.
-	(sched_analyze): Add extra element since we remove two at a time.
-	* integrate.c (save_for_inline_copying): Add support for exception
-	regions.
-	(expand_inline_function): Likewise.
-	(function_cannot_inline_p): Don't inline functions that have EH
-	regions before NOTE_INSN_FUNCTION_BEG.
-	(finish_inline): Use FIRST_FUNCTION_INSN, not NEXT_INSN.
-	* function.c (expand_start_all_catch): New function.
-	* function.h: Add exception handling support information.
-	* expr.c (expand_expr, {defer,expand}_cleanups_to, do_jump): Transform
-	interim_eh_hook into calls to expand_ehregion_{start,end}.
-	* stmt.c (expand_{decl_cleanup,cleanups}): Likewise.
-	(init_stmt_for_function): Call init_eh.
-	(save_stmt_status): Call save_eh_status.
-	(restore_stmt_status): Call restore_eh_status.
-	* expr.h (throw_libfunc): Add.
-	* optabs.c (throw_libfunc): Initialize.
-	* print-rtl.c (print_rtx): Add support for exception regions.
-	* rs6000.c (EXCEPTION_SECTION): Define.
-	* output.h (exception_section): Declare.
-	* varasm.c (exception_section): Define.
-	* i386.c, i960.c, rs6000.c: Include except.h for function.h.
-	* c-pragma.c, emit-rtl.c, expr.c, final.c, flow.c: Include except.h.
-	* function.c, integrate.c, jump.c, loop.c, objc-act.c: Likewise.
-	* stmt.c, stor-layout.c, toplev.c, tree.c, varasm.c: Likewise.
-	
-Tue Jul 23 12:32:54 1996  Michael Meissner  <meissner@tiktok.cygnus.com>
-
-	* rs6000.c (rs6000_replace_regno): Set pic_offset_table_rtx so
-	that other phases will use the PIC register instead of the
-	placeholder.
-
-	* rs6000.md (movsi_got*): Eliminate -fPIC code, keep -fpic code.
-	(movsi): Only call movsi_got if -fpic, not -fPIC.
-
-	* sysv4.h (OVERRIDE_OPTIONS): Improve error messages.  Always set
-	-msdata=data by default, even if -fpic/-fPIC/-mrelocatable.  Treat
-	-fPIC the same as -mrelocatable-lib and vica versa.
-
-	* t-ppcgas: (MULTILIB_*): Use -mreloctable-lib, instead of
-	-mrelocatable.  Map Solaris into mcall-sysv-noeabi case.  Build
-	-mrelocatable-lib libraries under non-eabi case.  When linking, if
-	-fpic, -fPIC, or -shared, link in the -mrelocatable-lib libraries.
-
-Mon Jul 22 19:34:20 1996  Jim Wilson  <wilson@cygnus.com>
-
-	* iris6.h (ASM_SPEC): Change {% to %{.
-
-	* dwarf2out.c (output_call_frame_info): Change FDE CIE offset to
-	be section name rather than 0.
-	(gen_subprogram_die): Only emit DW_AT_external if origin is NULL.
-	Only call equate_decl_number_to_die if origin is NULL.
-	(dwarfout_begin_function): In code that computes offset of frame
-	pointer, change 4 to UNITS_PER_WORD.
-
-	* combine.c (undo_all): Clear previous_undos field.
-
-Mon Jul 22 19:10:45 1996  Ian Lance Taylor  <ian@cygnus.com>
-
-	* configure: Don't change target_alias to target in Makefile.
-
-Sat Jul 20 09:28:38 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)
-
-	* dwarfout.c (output_bound_representation): Treat default case
-	as variable bounds, then look inside for SAVE_EXPR.
-
-	* mips.h (INITIALIZE_TRAMPOLINE): Use `_flush_cache'; flush data
-	cache too.
-
-Sat Jul 20 09:24:13 1996  Marco Walther  (Marco.Walther@mch.sni.de).
-
-	* configure (mips-sni-sysv4): New target.
-	* mips/sni-gas.h, mips/sni-svr4.h, mips/x-sni-svr4: New files.
-
-Fri Jul 19 17:44:13 1996  Stan Coxs  <coxs@dg-rtp.dg.com>
-
-	* i386.md: (leave): Clobbers esp and ebp.
-
-	* i386.h: (TARGET_USE_Q_REG): Support inline strlen on PentiumPro
-
-Fri Jul 19 15:56:18 1996  Ian Lance Taylor  <ian@cygnus.com>
-
-	* m68k/t-m68kbare (MULTILIB_OPTIONS): Add m5200.
-	(MULTILIB_EXCEPTIONS): Define.
-	* m68k/lb1sf68.asm: Add MCF5200 support.
-	* m68k.md (adddi_sexthishl32): Set condition to !TARGET_5200.
-	(subdi_sexthishl32, ashrdi3, ashrhi3): Likewise.
-	(negdi2): Change into define_expand.
-	(negdi2_internal): Rename from old negdi2; condition now !TARGET_5200.
-	(negdi2_5200): New insn.
-	* m68k.c (output_function_prologue): Don't use add.w if TARGET_5200.
-	(output_function_epilogue): Likewise.
-
-	* m68k.md (movqi): Remove complex cases which move between address reg
-	and memory; rely on secondary reloads instead.
-
-Fri Jul 19 12:22:50 1996  Brendan Kehoe  <brendan@lisa.cygnus.com>
-
-	* fixproto (std_files): Add utime.h.
-
-Fri Jul 19 10:59:46 1996  Jeffrey A Law  (law@cygnus.com)
-
-	* m68k/m68kemb.h: Remove '\' at EOF.
-
-Fri Jul 19 09:59:00 1996  Joel Sherrill <joel@OARcorp.com>
-
-	* m68k/coff.h (STARTFILE_SPEC): Add #undef before definition.
-
-Fri Jul 19 09:44:45 1996  J.T. Conklin  <jtc@rtl.cygnus.com>
-
-	* m68k.h (LEGITIMATE_INDEX_P): Coldfire does not have scale
-	by 8 addressing modes.
-
-	* m68k-none.h: Use MASK_* macros instead of explicit constants.
-
-Fri Jul 19 09:08:53 1996  Philippe De Muyter  <phdm@info.ucl.ac.be>
-
-	* m68k.md (negdi2): Undo last change: don't apply neg to address regs.
-
-Fri Jul 19 09:03:01 1996  Robert Wilhelm  (rwilhelm@Physik.TU-Muenchen.DE)
-
-	* toplev.c (main): Correct typo in error message.
-
-Thu Jul 18 20:29:33 1996  Jim Wilson  <wilson@cygnus.com>
-
-	* Makefile.in (OBJS): Add dwarf2out.o.
-	(dwarf2out.o): New rule.
-	* dwarf2.h, dwarf2out.c: New files.
-	* dwarfout.c: Check DWARF_VERSION macro.
-
-	* mips/iris6.h (DWARF_DEBUGGING_INFO, PREFERRED_DEBUGGING_TYPE):
-	Move after header files are included.
-	(iris5.h): Include instead of iris5gas.h.
-	(MACHINE_TYPE): Change 5.x to 6.x.
-	(DEBUG_SECTION, LINE_SECTION): Add debug_ to name, fix attributes.
-	(SFNAMES_SECTION, SRCINFO_SECTION, MACINFO_SECTION, PUBNAMES_SECTION,
-	ARANGES_SECTION): Fix attributes.
-	(DWARF_VERSION, MIPS_DEBUGGING_INFO, ASM_DECLARE_FUNCTION_NAME,
-	ASM_DECLARE_FUNCTION_SIZE, FUNCTION_NAME_ALREADY_DECLARED,
-	FRAME_SECTION, ABBREV_SECTION): Define.
-	(DBX_DEBUGGING_INFO, SDB_DEBUGGING_INFO, MIPS_DEBUGGING_INFO,
-	DWARF_DEBUGGING_INFO, PREFERRED_DEBUGGING_INFO): Delete undefs at
-	end of file.
-	* mips/mips.c (function_prologue): Use FUNCTION_NAME_ALREADY_DECLARED.
-	(function_epilogue): Likewise.
-
-Thu Jul 18 19:24:19 1996  David Mosberger-Tang  <davidm@azstarnet.com>
-
-	* alpha/elf.h (INT_ASM_OP): Change from ".long" to ".quad".
-
-Thu Jul 18 19:20:58 1996  Ulrich Drepper  <drepper@myware.rz.uni-karlsruhe.de>
-
-	* stddef.h: Undefine __need_wint_t.
-
-Thu Jul 18 19:06:35 1996  J.T. Conklin  <jtc@hippo.cygnus.com>
-
-	* longlong.h (mc680x0): Define umul_ppmm, udiv_qrnnd, sdiv_qrnnd
-	for the '020, '030, '040, and '332.  Define count_leading_zeros
-	for the '020, '030, '040, and '060.
-
-	* m68k.md: Add TARGET_5200 to conditions which determine whether
-	the extbl instruction is emitted.
-	(mulsi3): Enable pattern with TARGET_5200.
-
-	* m68k.md (add patterns): Don't use two addqw instructions when
-	adding small (8 < N <= 16) integers to address registers on 68040.
-
-Thu Jul 18 18:06:15 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)
-
-	* configure: Write target_alias in Makefile.
-	(i[3456]86-*-sco3.2v4*): Set truncate_target.
-	* Makefile.in (target_alias): New and used for all current uses
-	of `target'.
-
-Thu Jul 18 17:46:02 1996  Dave Love  <d.love@dl.ac.uk>
-
-	* gcc.c (default_compilers): Extra Fortran extensions.
-
-Wed Jul 17 10:28:10 1996  Torbjorn Granlund  <tege@spiff.gnu.ai.mit.edu>
-
-	* expmed.c (expand_mult_highpart): Revert last change.
-
-Tue Jul 16 12:51:59 1996  Doug Evans  <dje@cygnus.com>
-
-	* sparc/sparc-rtems.h: #include "sparc/sparc-aout.h" -> sparc/aout.h.
-
-Mon Jul 15 14:42:06 1996  Jim Wilson  <wilson@cygnus.com>
-
-	* mips/iris6.h (LINK_SPEC): Add -woff 84.
-
-Fri Jul 12 17:34:01 1996  Michael Meissner  <meissner@tiktok.cygnus.com>
-
-	* rs6000/eabi.asm (__eabi): Convert pointers in the Global Offset
-	Table if -mrelocatable.  Move loops into separate subroutines for
-	ease of debugging.  Reorganize code somewhat.
-
-	* rs6000/rs6000.c (small_data_operand): Allow small data under
-	Solaris.
-
-	* rs6000/sol-c0.c (_start): Initialize r13 to point to the small
-	data operand.
-
-	* rs6000/sol-c{i,n}.asm (_init, _fini): Enable shared library
-	support.
-
-	* rs6000/sysv4.h (SUBTARGET_OVERRIDE_OPTIONS): Default to
-	-msdata=data, even if -fpic or -mrelocatable.  Allow -mrelocatable
-	and -mno-eabi.
-	(CPP_SYSV_SPEC): If -fpic, define __PIC__ and __pic__ to 1.  If
-	-fPIC, define them to 2.
-	(CPP_ENDIAN_SPEC): Push definition of macros for specific endian
-	targets to new specs.
-	(CPP_ENDIAN_DEFAULT_SPEC): Define to use CPP_ENDIAN_BIG_SPEC.
-	(CPP_ENDIAN_{LITTLE,BIG,SOLARIS}_SPEC): New specs for little
-	endian mode, big endian mode, and Solaris, which can't define
-	_LITTLE_ENDIAN.  Define __LITTLE_ENDIAN__ in all cases for little
-	endian systems.  Define __BIG_ENDIAN__ in all cases for big endian
-	systems.
-	(SUBTARGET_EXTRA_SPECS): Add new specs.
-
-	* rs6000/{eabile,sysv4le}.h (CPP_ENDIAN_DEFAULT_SPEC): Define to
-	use CPP_ENDIAN_LITTLE_SPEC.
-
-	* rs6000/sol2.h (CPP_ENDIAN_LITTLE_SPEC): Define as
-	CPP_ENDIAN_SOLARIS_SPEC so that _LITTLE_ENDIAN is not define.
-
-Fri Jul 12 17:34:01 1996  David Edelsohn  <edelsohn@mhpcc.edu>
-
-	* rs6000.c (function_arg): Add IBM AIX XL compiler broken FP arg
-	passing compatibility mode.
-	* rs6000.h (TARGET_XL_CALL): Define default.
-	* aix3newas.h (TARGET_XL_CALL, SUBTARGET_SWITCHES): Define.
-	* aix41.h (TARGET_XL_CALL, SUBTARGET_SWITCHES): Define.
-
-Fri Jul 12 15:04:43 1996  Doug Evans  <dje@cygnus.com>
-
-	* arm/arm.h (ASM_OUTPUT_MI_THUNK): Handle fns returning structures.
-
-	* ptx4.h ({ASM,LINK}_SPEC): %{V} %{v:%{!V:-V}} -> %{v:-V}.
-	* svr4.h ({ASM,LINK}_SPEC): Likewise.
-	* dsp16xx/dsp16xx.h ({ASM,LINK}_SPEC): Likewise.
-	* i386/dgux.h (LINK_SPEC): Likewise.
-	* i386/sol2.h (LINK_SPEC): Likewise.
-	* m88k/dgux.h ({LINK,ASM_CPU}_SPEC): Likewise.
-	* sparc/sol2.h ({ASM,LINK}_SPEC): Likewise.
-	* sparc/sp64-elf.h ({ASM,LINK}_SPEC): Likewise.
-	* sparc/sysv4.h (ASM_SPEC): Likewise.
-
-Thu Jul 11 17:29:33 1996  Michael Meissner  <meissner@tiktok.cygnus.com>
-
-	* rs6000.h (GOT_TOC_REGNUM): New macro for r2, which is used as a
-	marker for the GOT/TOC register to be allocated later.
-	(MACHINE_DEPENDENT_REORG): Call rs6000_reorg.
-	(rs6000_reorg): Add declaration.
-
-	* rs6000.c (rs6000_got_register): Return REG 2, not a pseudo
-	register in order to work with inlined functions.
-	(rs6000_replace_regno): New function to replace a register with a
-	new pseudo register.
-	(rs6000_finalize_pic): Loop through all of the insns, replacing
-	any GOT_TOC_REGNUM registers with a new pseudo register, and
-	adding the initialization of of the GOT register if it was
-	created.
-	(rs6000_reorg): New function to check whether the GOT_TOC register
-	marker was removed.
-
-Thu Jul 11 10:12:50 1996  Jeffrey A Law  (law@cygnus.com)
-
-	* h8300/h8300.h (OK_FOR_U): If generating H8/S code, accept
-	SYMBOL_REF and SYMBOL_REF + CONST_INT.
-
-	* h8300/h8300.c (shift_one): Emit tabs between opcode and
-	operands to be consistent with the rest of the compiler.
-	(rotate_one): Likewise.
-	(shift_two, rotate_two): Define.
-	(get_shift_alg): Accept new argument "assembler2_p" for
-	rotate/shift by two insns.  All callers changed.  Rework
-	to generate more efficient code on the H8/300, H8/300H, and
-	H8/S.  Try to simplify somewhat.
-	(emit_a_shift): Use shift-by-two insns when they're available.
-	Emit tabs between opcode and operands to be consistent with
-	the rest of the compiler.
-
-Wed Jul 10 19:32:17 1996  Jim Wilson  <wilson@cygnus.com>
-
-	* mips/iris6.h (ASM_SPEC): Correct typos in Jun 18 change.
-
-Wed Jul 10 18:56:38 1996  Ian Lance Taylor  <ian@cygnus.com>
-
-	* sh/sh.c (machine_dependent_reorg): When looking for the
-	instruction that sets a register in LOG_LINKS, skip the link if
-	REG_NOTE_KIND is not zero.
-
-Wed Jul 10 15:02:18 1996  Michael Meissner  <meissner@tiktok.cygnus.com>
-
-	* rs6000.c (rs6000_got_register): New function to return a pseudo
-	register to hold the pic register.  Abort if reload is in progress
-	or done.
-	(num_insns_constant): Allow SFmode and DFmode.
-
-	* rs6000.h (CONST_DOUBLE_OK_FOR_LETTER_P): Redo 'G' so that it
-	means a constant that takes exactly two insns.
-	(rs6000_got_register): Add declaration.
-
-	* rs6000.md (movsi_got): Move setup of pic register to
-	rs6000_got_register.
-	(movsf): If -msoft-float, don't force constants to memory.
-	(mov{sf,df} insns): If soft floating point, allow any constant to
-	be loaded.  Add define_splits that allow the 604 to use both
-	integer units for loading constants.  Make sure insn length is
-	correct.
-
-Tue Jul  9 17:05:10 1996  Michael Meissner  <meissner@tiktok.cygnus.com>
-
-	* rs6000.c (easy_fp_constant): All FP constants are considered
-	hard for -fpic and hardware floating point, so that the GOT
-	register is created.
-
-Tue Jul  9 15:21:27 1996  Jim Wilson  <wilson@cygnus.com>
-
-	* x-iris6 (FIXPROTO_DEFINES): Add -D_SGI_SOURCE.
-
-Mon Jul  8 18:00:33 1996  Jim Wilson  <wilson@cygnus.com>
-
-	* sh/sh.h (enum reg_class): Add new class GENERAL_FP_REGS.
-	(REG_CLASS_NAMES, REG_CLASS_CONTENTS): Likewise.
-
-	* cse.c (note_mem_written): Varying structure memory access with
-	AND address can alias scalars.
-	* sched.c (true_dependence, anti_dependence, output_dependence):
-	Likewise.
-
-	* sh.c (calc_live_regs): For pragma_interrupt case, exclude call
-	clobbered regs that are fixed, explicitly add MACH_REG and MACL_REG.
-
-	* calls.c (expand_call): For assign_stack_temp call in PARALLEL case,
-	get mode from type instead of using BLKmode.
-	* function.c (aggregate_value_p): If hard_function_value returns
-	a non-REG, then return 0.
-
-	* mips/mips.c (function_arg): Add explicit checks for FIELD_DECLs.
-	(mips_function_value): Add explicit checks for FIELD_DECLs, and save
-	them in the array FIELDS.  When returning structure with 1 float field,
-	enclose it in a PARALLEL and set the PARALLEL mode correctly.
-	* mips/mips.md (call_value): Call gen_call_value_multiple_internal0
-	only if there are multiple return values.  Strip the PARALLEL off
-	if there there is only one return value.
-
-Mon Jul  8 16:27:33 1996  Jeffrey A. Law  <law@cygnus.com>
-
-	* First cut at support for the H8/S.
-	* h8300/h8300.c (h8300_init_once): Handle the H8/S (treat it
-	like the H8/300H).
-	(dosize, adds_subs_operand, one_insn_adds_subs_operand): Likewise.
-	(output_adds_subs, const_costs, print_operand): Likewise.
-	(output_simode_bld, h8300_adjust_insn_length): Likewise.
-	(push_order, pop_order): Reverse.
-	(function_prologue): Try to use ldm.l and stm.l insns
-	on the H8/S.  Minor cleanups.
-	(function_epilogue): Likewise.
-	(asm_file_start): Emit ".h8300s" when compiling for the H8/S.
-	* h8300/h8300.h (CPP_SPEC): Handle the H8/S.
-	(TARGET_H8300S): New target.
-	(TARGET_SWITCHES): Add "-ms" and "-mno-s".
-	(BITS_PER_WORD): Handle the H8/S (treat it like the H8/300H).
-	(UNITS_PER_WORD, POINTER_SIZE, PARM_BOUNDARY): Likewise.
-	(BIGGEST_ALIGNMENT, BIGGEST_FIELD_ALIGNMENT): Likewise.
-	(INITIALIZE_TRAMPOLINE, MOVE_MAX, Pmode): Likewise.
-	* h8300/h8300.md: Handle H8/S just like H8/300H
-	throughout the entire file.
-	* h8300/t-h8300 (MULTILIB_OPTIONS): Build "-ms" libraries
-	too.
-	(MULTILIB_DIRNAMES): Put H8/S libraries in "h8300s" directory.
-	* h8300/lib1funcs.asm: Emit ".h8300s" pseudo-op when generating
-	h8300s object files.  Otherwise treat the H8/S just like the H8/300H.
-	* ginclude/stdarg.h: Handle the H8/S.
-	* ginclude/varargs.h: Likewise.
-
-Mon Jul  8 14:50:58 1996  Doug Evans  <dje@cygnus.com>
-
-	* sparc/sol2.h (LINK_SPEC): Don't pass `-z text' if
-	-shared -mimpure-text.
-
-Sun Jul  7 18:03:46 1996  Torbjorn Granlund  <tege@noisy.tmg.se>
-
-	* m68k/lb1sf68.asm (__udivsi3): Use faster tstw instead of btst.
-
-Thu Jul  4 11:44:39 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)
-
-	* expr.c (get_inner_reference): Delete using alternate mode for
-	bitfield; we don't make bitfields anymore if not needed.
-
-Wed Jul  3 18:23:17 1996  Stephen L Moshier  (moshier@world.std.com)
-
-	* c-common.c (record_function_format): Define as static.
-	
-	* collect2.c (at SUNOS4_SHARED_LIBRARIES): Fix reference to unistd.h.
-
-Wed Jul  3 17:35:20 1996  Gavin Koch  <gavin@cygnus.com>
-
-        * c-typeck.c (default_conversion): Add bitfield promotions.
-                
-Wed Jul  3 17:09:22 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)
-
-	* gcc.c (default_compilers): Add null entries for languages we
-	heard of.
-	(main): If found one of those entries, say compiler not installed.
-
-Wed Jul  3 12:52:53 1996  Jeffrey A. Law  <law@cygnus.com>
-
-	* pa.c (fmpy_operands): Define.
-	(combinable_fmpy): New function.
-	(combinable_fadd, combinable_fsub): Likewise.
-	* pa.md (parallel_addb, parallel_movb): New patterns.
-	(fmpyadd, fmpysub): New patterns.
-
-	* pa.c (fmpyaddoperands): Tighten checks.  Allow SFmode.
-	(fmpysuboperands): Similarly.
-
-Tue Jul  2 18:57:15 1996  Jeffrey A. Law  <law@cygnus.com>
-
-	* pa.c (ireg_or_int5_operand): New function.
-	(output_parallel_movb, output_parallel_addb): Likewise.
-	(combinable_copy, combinable_add, following_call): Likewise.
-	(pa_adjust_insn_length): Handle parallel unconditional branches.
-	(output_movb): Handle case were destination is %sar.
-	* pa.h: Declare new functions.
-	* pa.md (parallel_branch): New "type" attribute.
-	(delay slot descriptions): Don't allow "parallel_branches" in
-	delay slots.  Fill "parallel_branches" like "branch" insns.
-	(movb patterns): Handle %sar as destination register.
-
-	* expr.c (compare): If function pointers need canonicalization
-	before comparisons, canonicalize them.
-	(do_store_flag): Do not use an sCC insn for a function pointer
-	comparison if function pointers need canonicalization before
-	comparing.
-
-Tue Jul  2 17:56:37 1996  Michael Meissner  <meissner@tiktok.cygnus.com>
-
-	* rs6000/sysv4.h ({START,END}FILE_LINUX_SPEC): If -mnewlib is not
-	used, use the crtbegin/crtend that 2.7.2 used.
-
-Sat Jun 29 07:10:02 1996  Michael Meissner  <meissner@tiktok.cygnus.com>
-
-	* rs6000.h (INIT_EXPANDERS): Define, call rs6000_init_expanders.
-	(RS6000_VARARGS_OFFSET): fpmem area no longer next to outgoing
-	argument area.
-	(STARTING_FRAME_OFFSET): Ditto.
-	(STACK_DYNAMIC_OFFSET): Ditto.
-	(frame_pointer_needed): Add external declaration.
-	(rs6000_{save,restore}_machine_status): Ditto.
-	(rs6000_init_expanders): Ditto.
-
-	* rs6000.c (rs6000_{save,restore}_machine_status): New functions
-	to save and restore the globals needed on a per function basis.
-	(rs6000_init_expanders): Initialize globals needed on a per
-	function basis, and set up so the above save/restore functions are
-	called when processing nested functions.
-	(output_epilog): Don't initialize per function globals here.
-	(rs6000_stack_info): Change where the fpmem save area is to below
-	the local variables, and not just below the outgoing argument
-	area.
-
-	* rs6000.md (floatsidf2*, fix_truncdfsi2*): Rewrite conversion
-	routines to track new location of the fpmem save area.  Allocate a
-	new base register temp for the routines in case the stack frame is
-	more than 32k in size.
-
-Sat Jun 29 05:44:37 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)
-
-	* explow.c (convert_memory_address, case PLUS): Fix error in
-	last change.
-
-Fri Jun 28 23:30:48 1996  Jeffrey A. Law  <law@cygnus.com>
-
-	* reload1.c (choose_reload_regs): Properly mark spill registers
-	as in use for inherited reloads.
-
-Fri Jun 28 18:37:20 1996  Stephen L Moshier  <moshier@world.std.com>
-
-	* objc/sarray.c (ifdef __alpha__): Don't declare `free'.
-	* objc/thr-decosf1.c (objc_thread_id): Use pthread_getunique_np
-	to obtain a thread ID value.
-	(objc_mutex_allocate): Cast mutex->owner to _objc_thread_t.
-	(objc_mutex_deallocate): Likewise.
-	(objc_mutex_unlock): Likewise.
-	(objc_mutex_trylock):  Declare thread_id as _objc_thread_t.
-	(objc_mutex_lock): Likewise.
-	(objc_mutex_unlock): Likewise.
-
-	* real.c (asctoeg): `0.0eX' is zero, regardless of the exponent X.
-
-Fri Jun 28 18:33:13 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)
-
-	* vax.md (rotl): Remove extraneous `$'.
-
-	* combine.c (previous_num_undos): Deleted variable.
-	(MAX_UNDO): Deleted macro.
-	(struct undo): New field, next.
-	(struct undobuf): Deleted num_undos and undo.
-	New fields undos, frees, and previous_undos.
-	(SUBST, SUBST_INT): Rework to allocate memory and chain undo entries.
-	(combine_instructions): Initialize undobuf.{undos,previous_undos},
-	not undobuf.num_undo and previous_num_undos.
-	(try_combine): Likewise.
-	(undo_all, gen_rtx_combine): Rework to use new data structures.
-
-Fri Jun 28 16:48:25 1996  Scott Christley <scottc@net-community.com>
-
-	* objc/sendmsg.c (__objc_block_forward): New function.
-	(get_imp, objc_msg_lookup): Use different forwarding function
-	when the returning a floating point value.
-
-Fri Jun 28 16:25:25 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>
-
-	* configure: Allow multiple makefile frags.
-	(i[3456]86-*-linux*oldld*): Add i386/t-crtstuff as target frag.
-	(i[3456]86-*-linux*aout*, i[3456]86-*-linux*): Likewise.
-	(m68k-*-linux*aout*): Add t-linux-aout as target frag.
-	(m68k-*-linux*): Add t-linux as target frag.
-	* Makefile.in (Makefile): xmake_file and tmake_file now already
-	contain the $(srcdir)/config prefix.
-
-	* config/t-linux (BOOT_CFLAGS): Removed, no longer necessary.
-	(CRTSTUFF_T_CFLAGS): Don't define.
-	(CRTSTUFF_T_CFLAGS_S): Define this instead.
-	* config/t-linux-aout (BOOT_CFLAGS): Removed.
-	* m68k/t-linux: Remove variables now in t-linux.
-
-Fri Jun 28 15:06:05 1996  John F. Carr  <jfc@mit.edu>
-
-	* alpha.c (alpha_emit_conditional_move): Emit correct code when
-	incoming comparison code is NE.
-
-Fri Jun 28 14:35:45 1996  J.T. Conklin  <jtc@hippo.cygnus.com>
-
-	* c-decl.c (init_decl_processing): Register __builtin_memset 
-	and memset as builtin functions.
-	* expr.c (expand_builtin, case BUILTIN_MEMSET): Open code memset
-	where val == 0.
-
-Fri Jun 28 14:10:03 1996  Richard Henderson  <rth@tamu.edu>
-
-	* alpha/linux.h (FUNCTION_PROFILER): _mcount has non-standard linkage.
-	* alpha/elf.h (LINK_SPEC): Bring emulation name into sync
-	with Cygnus snapshot.
-
-	* alpha.h ({MASK,TARGET}_BUILD_CONSTANTS): New macros.
-	(TARGET_SWITCHES): New target option build-constants.
-	* alpha.c (alpha_emit_set_long_const): New function.
-	* alpha.md (movdi): Call it.
-	* expmed.c (expand_mult_highpart): Use op1 not wide_op1 in
-	expansion of mul_highpart.
-	
-	* alpha.c (output_{pro,epi}log): Flag_inhibit_size_directive
-	should supress .ent, .end, and accompanying directives.
-	(alpha_output_lineno): Fix polarity on GAS test.
-	* alpha.h (NO_DBX_FUNCTION_END): New macro.
-	* dbxout.c (dbxout_function): Respect NO_DBX_FUNCTION_END.
-	* alpha/elf.h: New file.
-	* alpha/linux.h (INITIALIZE_TRAMPOLINE): New definition.
-	* alpha/xm-linux.h (HAVE_STRERROR): Define.
-	* configure (alpha*-linux*ecoff*): New target, was alpha-*-linux*.
-	(alpha-*-linux*): Use elf.h.
-	* crtstuff.c (init_dummy): Only i386-linux (at most)
-	needs ___brk_addr hack.
-	
-Thu Jun 27 20:23:30 1996  Jon Buller  (jonb@metronet.com)
-
-	* ns32k.c (split_di): New; from i386.c.
-	* ns32k.md (adddi3, subdi3, negdi3): New patterns.
-
-Thu Jun 27 19:42:50 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)
-
-	* combine.c (force_to_mode, case NE): Fix typo and logical error.
-	(simplify_comparison): Don't swap args if op1 is CONST_INT.
-
-Thu Jun 27 18:49:35 1996  Jim Wilson  <wilson@cygnus.com>
-
-	* expmed.c (extract_bit_field): Check TRULY_NOOP_TRUNCATION before
-	making a SUBREG of a REG.
-
-Thu Jun 27 11:03:59 1996  Ian Lance Taylor  <ian@cygnus.com>
-
-	* mips/mips.h (CC1_SPEC): Put spaces between the -mips* cases.
-	* mips/osfrose.h (CC1_SPEC): Likewise.
-
-	* sh/sh.c (output_branch): Don't call ADJUST_INSN_LENGTH if the
-	insn is inside a sequence.
-
-Wed Jun 26 19:09:43 1996  Jeffrey A. Law  <law@cygnus.com>
-
-	* pa/pa.h (CMP_PSI): Delete.
-	(FUNCTION_POINTER_COMPARISON_MODE): Likewise.
-	* pa/pa.md (cmppsi); Delete expander.
-	(canonicalize_funcptr_for_compare): Renamed from plabel_dereference,
-	turned into an expander + anonymous pattern.
-
-Tue Jun 25 22:36:11 1996  Doug Evans  <dje@seba.cygnus.com>
-
-	* gcc.c (PEXECUTE_VERBOSE): Define.
-	(execute): Pass PEXECUTE_VERBOSE to pexecute if -v.
-
-Tue Jun 25 12:23:54 1996  Michael Meissner  <meissner@tiktok.cygnus.com>
-
-	* rs6000.h (FINALIZE_PIC): Define to call rs6000_finalize_pic.
-	(rs6000_finalize_pic): Add declaration.
-	(svr4_traceback): Delete unused declaration.
-
-	* rs6000.md (movsi_got): Don't emit gen_init_v4_pic insn.
-	(V.4 call insns): Do not use @plt for PIC calls.
-
-	* rs6000.c (print_operand_address): Handle LABEL_REF just like
-	SYMBOL_REF.
-	(rs6000_finalize_pic): Define, emit the gen_init_v4_pic insn
-	before all other insns if needed for V.4 PIC calls.
-
-	* eabi-ci.asm (_GLOBAL_OFFSET_TABLE_): Do not provide a default
-	definition, since it interferes with the linker generated version.
-
-Tue Jun 25 01:17:50 1996  Jeffrey A. Law  <law@cygnsu.com>
-
-	* h8300/h8300.c (function_prologue): Update "monitor" prologues.
-	(function_epilogue): Similarly.
-
-	* pa/pa.h (PARSE_LDD_OUTPUT): Handle dynamic libraries that are
-	loaded "statically".
-
-Mon Jun 24 19:48:36 1996  Joel Sherrill  <joel@merlin.gcs.redstone.army.mil>
-
-	* configure ({i386,i960,m68k,powerpc,sparc}-rtems): New targets.
-	* i386/go32-rtems.h, i386/i386-rtems.h: New files.
-	* i960/i960-rtems.h: New file.
-	* m68k/m68k-rtems.h: New file.
-	* rs6000/powerpc-rtems.h: New file.
-	* sparc/sparc-rtems.h: New file.
-
-Mon Jun 24 23:09:22 1996  Paul Eggert  <eggert@twinsun.com>
-
-	* cccp.c: (create_definition): Diagnose `#define #' only once.
-
-Mon Jun 24 11:42:58 1996  Jim Wilson  <wilson@cygnus.com>
-
-	* i386/cygwin32.h, rs6000/cygwin32.h (CPP_PREDEFINES): For consistency,
-	change to define WIN32, WINNT, and CYGWIN32.
-
-Mon Jun 24 10:46:50 1996  Michael Meissner  <meissner@tiktok.cygnus.com>
-
-	* rs6000.md (floatsidf2*): Move the xor of the argument into the
-	define_insn, since it confuses inline function expands.
-
-Fri Jun 21 20:40:17 1996  Jim Wilson  <wilson@cygnus.com>
-
-	* mips.md (call_internal1, call_value_internal1): Delete obsolete code.
-	(call_internal2, call_value_internal2, call_value_multiple_internal2):
-	Delete obsolete code.  Explicitly load SYMBOL_REF into register.
-	(call_value): Change Pmode to SImode in gen_call_value_internal0 call.
-
-Thu Jun 20 12:20:33 1996  Michael Meissner  <meissner@tiktok.cygnus.com>
-
-	* configure (*-aix*): If building a cross compiler, use t-xnewas
-	instead of t-newas.
-
-	* rs6000.c (num_insns_constant_wide): Fix typo if HOST_WIDE_INT
-	has more than 32 bits.
-
-Wed Jun 19 17:50:33 1996  Richard Henderson  <richard@atheist.tamu.edu>
-
-	* combine.c (move_deaths): New parameter maybe_kill_insn.
-	Don't move note if reg killed by maybe_kill_insn.
-	(try_combine): Pass new arg to move_deaths.
-	
-Wed Jun 19 10:44:47 1996  Brendan Kehoe  <brendan@lisa.cygnus.com>
-
-	* toplev.c (flag_keep_static_consts): Define.
-	(f_options): Add "keep-static-consts" entry.
-	(compile_file): Check it in addition to !optimize for emitting
-	static const variables.
-
-Tue Jun 18 23:37:20 1996  Doug Evans  <dje@cygnus.com>
-
-	* i386/cygwin32.h (ASM_OUTPUT_SOURCE_LINE): Local symbols begin with L.
-
-Tue Jun 18 12:00:11 1996  Jason Merrill  <jason@yorick.cygnus.com>
-
-	* varasm.c (asm_output_aligned_bss): Don't emit a skip of size 0.
-
-Tue Jun 18 06:24:28 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)
-
-	* integrate.c (expand_inline_function): Add missing call to
-	force_operand when getting structure_value_addr into reg.
-
-	* alpha.c (override_options): Allow EV4/5 or 21064/21164 for cpu.
-	Clean up handling of floating-point options.
-	* alpha.h (TARGET_SWITCHES): Have all -mieee options turn
-	on MASK_IEEE_CONFORMANT.
-	(TARGET_DEFAULT): Use symbolic value.
-	* alpha.md: When not involving named pattern, update condition
-	to include alpha_tp != ALPHA_TP_INSN.
-	Don't do float_extend as part of other pattern when ALPHA_TP_INSN.
-	(extendsfsd2): Split into two patterns, depending on 
-	value of alpha_tp.
-
-	* mips/iris6.h (ASM_SPEC): Treat -o32 as -32 and -n64 same as -64.
-	* mips.c (override_options): Likewise.	
-
-	* genattrtab.c (fatal): Declare A1 and A2 as char *.
-
-	* function.c (find_temp_slot_from_address): Check for overlap
-	from BASE_OFFSET if X is PLUS of virtual_stack_vars_rtx and const.
-
-	* flow.c (flow_analysis): Fix typo in last change.
-
-	* expr.c (expand_builtin, case BUILT_IN_{SET,LONG}JMP): Properly
-	handle case when ptr_mode != Pmode.
-
-	* combine.c (try_combine): Don't use split if dest of new I2
-	is used between I2 and I3.
-
-	* c-typeck.c (pointer_int_sum): Convert integer to both signedness
-	and precision of sizetype.
-	* explow.c (convert_memory_address, case PLUS, MULT): Don't commute
-	operation with extension if not adding small integer.
-
-	* Makefile.in (BOOT_LANGUAGES): New variable.
-	(bootstrap): Use it to select languages for stage1.
-	* configure (extra_host_objs): New variable.
-	Separate files needed for target and host and concatenate list.
-	(extra_gcc_objs): Use setting for host, not target.
-	(objc_thread_file): Start with it as null, then don't include "thr-".
-	Print name of file after others and in same format.
-	(alpha-*-winnt*, i[3456]86-*-winnt): oldnames.o is in extra_host_objs.
-	(all_boot_languages): New variable.
-	Set from boot_language variable in config-lang.in.
-	Defines value of BOOT_LANGUAGES in Makefile.
-	(Makefile): Set target to the canonical form of target.
-
-Mon Jun 17 22:37:07 1996  Mike Meissner  <meissner@rtl.cygnus.com>
-
-	* rs6000/win-nt.h (ASM_DECLARE_FUNCTION_NAME): Put function
-	descriptor in .reldata, not .text.
-
-Mon Jun 17 16:05:34 1996  Brendan Kehoe  <brendan@lisa.cygnus.com>
-
-	* ginclude/stddef.h (wint_t): Don't wrap with #ifndef __cplusplus.
-
-Mon Jun 17 15:03:20 1996  Jim Wilson  <wilson@cygnus.com>
-
-	* mips.c (mips_split_addresses): New variable.
-	(simple_memory_operand): Add comment about mode check.  Add check
-	for LO_SUM.
-	(call_insn_operand): OP is now an addresses instead of a MEM.
-	(move_operand, mips_check_split): New functions.
-	(mips_count_memory_refs): Add check for LO_SUM.
-	(mips_move_1word): Add HIGH support.
-	(mips_address_cost): Delete check for HIGH.
-	(output_block_move): Handle LO_SUM addresses.
-	(override_options): Set mips_split_addresses.
-	(print_operand_address): Add LO_SUM support.
-	* mips.h (mips_split_addresses, mips_check_split, move_operand):
-	New declarations
-	(GO_IF_LEGITIMATE_ADDRESS): Reject constant addresses when
-	mips_split_addresses is TRUE.  Add LO_SUM support.
-	(LEGITIMIZE_ADDRESS): Add LO_SUM support.
-	(PREDICATE_CODES): Modify call_insn_operand support.  Add
-	move_operand.
-	* mips.md (memory): Change r4100/r4300 support.
-	(imuldiv): Add r4300 support.
-	(high, low): New patterns.
-	(movsi, movdi): Add LO_SUM support.
-	(movsi_internal1, movsi_internal2): Use move_operand instead of
-	general_operand.
-	(movstrsi_internal, movstrsi_internal2): Delete R constraint.
-	(call, call_value): Pass address instead of MEM to call_insn_operand.
-	Call gen_call_{value_}internal0 instead of internal1.
-	(call_internal0, call_value_internal0, call_multiple_internal0):
-	New patterns.
-	(call_internal1, call_internal2, call_value_internal1,
-	call_value_internal2, call_value_multiple_internal2): Add explicit
-	MEM before target address.
-
-Sun Jun 16 23:05:16 1996  Jeffrey A. Law  <law@cygnus.com>
-
-	* configure (hppa*-hp-hpux10*): Use new pa-hpux10 configuration file.
-	(hppa*-hp-hpux*): Use hpux9 configuration files by default.
-	* pa/pa-hpux10.h: New file.
-	* pa/pa-ghpux9.h: Deleted.  No longer used.
-
-Sat Jun 15 04:35:51 1996  Roland McGrath  <roland@delasyd.gnu.ai.mit.edu>
-
-	* i386/gnu.h (LINK_SPEC): Remove -rpath /lib/ option.
-	Ignore -ibcs option.
-
-Thu Jun 13 14:49:41 1996  Jim Wilson  <wilson@cygnus.com>
-
-	* gen-protos.c (main): Change argv[i] to argv[0][i].
-
-Thu Jun 13 10:46:24 1996  Doug Evans  <dje@cygnus.com>
-
-	* gcc.c (pfatal_pexecute): Delete code to check errno < sys_nerr.
-
-Wed Jun 12 21:47:10 1996  Eliot Dresselhaus  <dresselh@rft30.nas.nasa.gov>
-
-	* alpha.c (alpha_cpu, alpha_cpu_string): New variables.
-	(override_options): Process -mcpu= value.
-	(alpha_adjust_cost): Handle adjustments for EV5.
-	* alpha.h (enum processor_type): New enum.
-	(alpha_cpu, alpha_cpu_string): New declarations.
-	(target_options): Add "cpu=".
-	(RTX_COSTS): Adjust values for EV5.
-	* alpha.md: Add scheduling rules for EV5.
-
-Tue Jun 11 17:51:03 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)
-
-	* c-common.c (check_format_info): Change text of message about use
-	of `0' with precision.
-
-Tue Jun 11 15:14:10 1996  Stan Cox  <coxs@dg-rtp.dg.com>
-
-	* i386.h (TARGET_SCHEDULE_PROLOGUE): New. Allows prologue to
-	be emitted as asm or rtl.
-
-	* i386.c (function_prologue): Emit prologue as asm.
-	(override_options): Don't emit rtl for prologue if -fpic.
-
-Tue Jun 11 14:41:01 1996  Michael Meissner  <meissner@tiktok.cygnus.com>
-
-	* rs6000/eabi.asm (__eabi): Fix normal code so that it properly
-	loads up r2/r13 if needed again.
-
-	* rs6000/sysv4.h (CPP_ENDIAN_SPEC): Call cpp_endian_default, not
-	cpp_endian_default_spec.
-
-Mon Jun 10 15:10:56 1996  Jeffrey A. Law  <law@cygnus.com>
-
-	* local-alloc.c (update_equiv_regs): Ignore insns that read or
-	write registers that are likely to be spilled.
-
-	* pa.h (cmp_type): Add CMP_PSI.
-	(FUNCTION_POINTER_COMPARISON_MODE): Define.
-	* pa.md (cmppsi): New expander.
-	(plabel_dereference): New pattern
-
-Mon Jun 10 14:56:14 1996  Michael Meissner  <meissner@tiktok.cygnus.com>
-
-	* rs6000/sol2.h (SKIP_ASM_OP): Delete, Solaris accepts .space,
-	like rest of PowerPC V4 ports.
-
-	* rs6000/sysv4.h (ASM_OUTPUT_ALIGNED_LOCAL): Emit .lcomm if not
-	using the .sbss area.  If using the .sbss area, put out
-	appropriate .size directive.
-
-Mon Jun 10 14:53:38 1996  Doug Evans  <dje@cygnus.com>
-
-	Move fork/exec/wait handling into file of its own.
-	* pexecute.c: New file.
-	* Makefile.in (pexecute.o): Add rule.
-	(xgcc): Link in pexecute.o.
-	(protoize,unprotoize): Likewise.
-	* gcc.c (_WIN32): Don't include process.h or declare spawnv{,p}.
-	(pexecute,pwait): Add prototypes.
-	(PEXECUTE_{FIRST,LAST,SEARCH}): Define.
-	(execv,execvp): Delete decls.
-	(perror_exec): Delete.
-	(pfatal_pexecute): New function.
-	(pexecute support): Delete.
-	(execute): -pipe not supported if _WIN32 or OS2.
-	Update call to pexecute.  Fatal error if pexecute fails.  Call pwait.
-	* protoize.c: Include gansidecl.h.
-	(my_execvp): Delete.
-	(choose_temp_base,pexecute,pwait): Declare.
-	(PEXECUTE_{FIRST,LAST,SEARCH}): Define.
-	(execvp): Delete decl.
-	(usage): Fix typo.
-	(gen_aux_info_file): Rewrite to use pexecute/pwait.
-
-	* gcc.c (do_spec_1): Allow leading text in version string.
-	Delete support for default minor number = 0.
-
-Mon Jun 10 11:49:53 1996  Scott Christley <scottc@net-community.com>
-
-	* objc/Makefile (libobjc.a): Don't delete the library.
-
-	* objc/thr.h (objc_set_thread_callback): New function.
-	(objc_thread_callback): Typedef for the hook function.
-	* objc/thr.c (__objc_thread_detach_function): Clear thread storage.
-	Call the thread hook function when first becoming multi-threaded.
-	(objc_set_thread_callback): New function.
-
-	* objc/selector.c (__sel_register_typed_name): Additional parameter
-	that indicates whether name and type parameters are constant or not.
-	* objc/runtime.h (__sel_register_typed_name): Likewise.
-	* objc/init.c (__sel_register_typed_name): Likewise.
-
-	* objc/init.c (__objc_init_protocols): Need to unlock mutex.
-
-Mon Jun 10 11:44:44 1996  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
-
-	* sparc/t-sol2 (gmon.o): Depend on stmp-int-hdrs.
-	(crt1.o, crti.o, crtn.o, gcrt1.o): Depend on $(GCC_PASSES).
-
-Mon Jun 10 11:29:46 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)
-
-	* flow.c (flow_analysis, find_basic_blocks): Ignore
-	nonlocal_label_list for CALL_INSN that has a REG_RETVAL.
-
-	* c-common.c (decl_attributes, case A_T_UNION): Don't look at fields
-	of union if there aren't any.
-
-Sat Jun  8 22:13:33 1996  Stan Cox <coxs@dg-rtp.dg.com>
-
-	* i386.c (ix86_expand_prologue): Keep pic register load ahead
-	of reference which may use a pic register.
-
-Sat Jun  8 22:13:33 1996  Jim Wilson <wilson@cygnus.com>
-
-	* i386.md (strlensi_unroll4, strlensi_unroll5): Use + not =& for
-	constraint for input/output operand 2.
-
-Sat Jun  8 22:13:33 1996  J"orn Rennecke (amylaar@meolyon.hanse.de)
-
-	* i386.h (CONST_COSTS): Even integer constants have a cost.
-	(RTX_COSTS): Take costs of subexpressions into account.
-	If a multiply is actually a shift, use the cost of the shift.
-	* i386/unix.h (SHIFT_DOUBLE_OMITS_COUNT): New macro.
-	* i386/{gas, next, seq-gas}.h (SHIFT_DOUBLE_OMITS_COUNT): Redefine
-	as zero.
-	* i386.c (print_operand): new letter 's'.
-
-Sat Jun  8 15:13:33 1996  Jim Wilson  <wilson@cygnus.com>
-
-	* mips/mips.c (override_options): Add vr4100 and vr4300 support.
-	* mips/mips.h (enum processor_type): Likewise.
-	(MASK_4300_MUL_FIX, TARGET_4300_MUL_FIX): New macros.
-	(TARGET_SWITCHES): Add -mfix4300 option.
-	* mips/mips.md (cpu, memory, imuldiv, adder, mult, divide): Add
-	vr4100 and vr4300 support.
-	(muldf3, mulsf3): Add vr4300 support.
-	(muldf3_internal, muldf_r4300, mulsf3_internal, mulsf_r4300): New
-	patterns.
-
-Sat Jun  8 14:35:23 1996  David Edelsohn  <edelsohn@mhpcc.edu>
-
-	* toplev.c (main): Re-enable -gxcoff+.
-
-Sat Jun  8 14:20:14 1996  J.T. Conklin  <jtc@rtl.cygnus.com>
-
-	* m68k/lb1sf68.asm (__{eq,ne,gt,lt,ge,le}{df,sf}2): Removed
- 	extraneous comments, constants, labels, etc.
-
-	* m68k/altos3068.h (TARGET_DEFAULT): Use MASK_* macros
- 	instead of explicit constants in definitions or conditionals.
-	* m68k/{apollo68, aux, ccur-GAS, dpx2, hp320, hp3bsd}.h: Likewise.
-	* m68k/{hp3bsd44, isi-nfp, isi, linux-aout, linux}.h): Likewise.
-	* m68k/{lynx-ng, lynx, m68k-none, m68k-psos, m68kv4}.h): Likewise.
-	* m68k/{mot3300, netbsd, news, next, pbb, plexus, sun2o4}.h): Likewise.
-	* m68k/{sun3, sun3n, tower}.h): Likewise.
-
-Sat Jun  8 13:55:23 1996  Matthias Pfaller  (leo@marco.de)
-
-	* ns32k.md (define_insns for ffs[qhs]i2): Deleted.
-	(define_expand for ffssi2): New pattern.
-
-Sat Jun  8 13:44:14 1996  Stephen L Moshier  (moshier@world.std.com)
-
-	* reload.c (find_equiv_reg): Set need_stable_sp if GOAL is the
-	stack pointer.
-
-Sat Jun  8 13:36:05 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)
-
-	* function.c (fixup_var_refs_1, case SIGN_EXTEND): Handle
-	paradoxical SUBREGs as first operand.
-	(fixup_var_regs_1, case SET): Handle paradoxical SUBREGs as
-	first operand of a ZERO_EXTRACT in SET_DEST.
-
-	* c-common.c (enum attrs): Add A_FORMAT_ARG.
-	(init_attribute): Initialize it.
-	(decl_attributes, case A_FORMAT): Clean up error messages.
-	(decl_attributes, case A_FORMAT_ARG): New case.
-	(struct international_format_info): New structure and typedef.
-	(international_format_list): New variable.
-	(record_international_format): New function.
-	(init_format_info): Call it for gettext, dcgettext, and dcgettext.
-	(check_format_info): See if format arg is call to
-	internationalization function.
-
-Fri Jun  7 20:04:40 1996  Jim Wilson  <wilson@cygnus.com>
-
-	* gcc.c (MULTILIB_SELECT): Delete definition.
-	(multilib_select): Delete static initializer.
-	(multilib_obstack, multilib_raw): New global variables.
-	(multilib.h): Include inside multilib_raw definition.
-	(main): Set multilib_select from multilib_raw.
-	* genmultilib: Change output to be a sequence of short strings
-	separated by commas rather than a single long macro definition.
-
-	* cse.c (simplify_binary_operation, case MULT): Check for case
-	where width is larger than HOST_BITS_PER_WIDE_INT, and upper most
-	bit is set.  We can not generate a simple shift in this case.
-
-	* gsyms.h (enum sdb_type): Add T_LNGDBL if EXTENDED_SDB_BASIC_TYPES.
-	(enum sdb_masks): Add EXTENDED_SDB_BASIC_TYPES masks.
-	* sdbout.c (gsyms.h): Include if CROSS_COMPILE is defined.
-	(plain_type_1): Use TYPE_PRECISION instead of TYPE_SIZE.
-	Add check for LONG_DOUBLE_TYPE_SIZE if EXTENDED_SDB_BASIC_TYPES.
-	* i960/i960.h (EXTENDED_SDB_BASIC_TYPES): Define.
-	(PUT_SDB_TYPE): Delete now unnecessary shifting and masking.
-
-	* i960/i960.h (i960_output_move_{double,quad}): Declare.
-
-Fri Jun  7 19:22:09 1996  Scott Christley <scottc@net-community.com>
-
-	* Makefile.in (OBJC_THREAD_FILE): New variable.
-	* configure (objc_thread_file): Set new variable to appropriate
-	values based upon target operating system; default is `thr-single'.
-	* objc/Makefile (OBJC_THREAD_FILE): Add target and dependency.
-	(thr.o): Remove OS specific thread files as dependencies.
-	* objc/thr-decosf1.c: Now compiles as a separate source file, so
-	include appropriate Objective-C headers.
-	* objc/thr-{mach,os2,posix,irix,single,solaris,win32}.c: Likewise.
-	* objc/thr.c: Remove inclusion of source files.
-	* objc/thr.h (__objc_thread_exit_status): Declare global variable.
-	* objc/thr-pthreads.c: New file.
-
-Fri Jun  7 19:04:04 1996  J.T. Conklin  <jtc@rtl.cygnus.com>
-
- 	* m68k.h (TARGET_SWITCHES): Treat -m68302 like -m68000 and -m68332
-	like -m68020; remove -mno-68302 and -mno-68332.
-
-Fri Jun  7 12:06:12 1996  Per Bothner  <bothner@deneb.cygnus.com>
-
-	* expr.c (safe_from_p):  Allow Chill-style variable-sized arrays.
-
-Thu Jun  6 23:11:11 1996  Jeffrey A. Law  <law@cygnus.com>
-
-	* h8300.c (h8300_monitor_function_p): New function.
-	(h8300_os_task_function_p): Likewise.
-	(os_task, monitor): Variables to note if the current
-	function is an os_task or monitor.
-	(function_prologue): Set monitor and/or os_task as needed.  Handle
-	os_task and monitor functions.
-	(function_epilogue): Clear monitor and os_task.  Handle os_task and
-	monitor functions.
-	(h8300_valid_machine_decl_attribute): Accept "OS_Task" and
-	"monitor".
-
-Thu Jun  6 20:01:54 1996  Per Bothner  <bothner@cygnus.com>
-
-	* gen-protos.c (progname):  New variable (needed by cppalloc.c).
-	(main):  Set progname.
-
-	* cpplib.h (struct parse_file):  Removed.
-	(CPP_FATAL_LIMIT, CPP_FATAL_ERRORS, CPP_OUT_BUFFER):  New macros.
-	* cpphash.c (cpp_lookup):  Change struct parse_file -> cpp_reader.
-
-	* cpplib.c (init_parse_option):  Renamed to cpp_options_init.
-	(push_parse_file):  Renamed to ...
-	(cpp_start_read):  Change to return 1 on success, 0 on failure.
-	(init_parse_file):  Renamed to cpp_reader_init.
-	* cppmain.c (main):  Use CPP_SET_WRITTEN and cpp_fatal.
-	Use renamed function names, and return protocols.
-	* fix-header.c (read_scan_file):  Likewise.
-
-	* cpperror.c (cpp_message):  Generalize for "fatal" errors.
-	(cpp_fatal):  New function (just calls cpp_message).
-	* cpplib.c (cpp_start_read, cpp_handle_options, cpp_finish,
-	parse_goto_mark, parse_move_mark):  Use cpp_fatal rather than fatal.
-
-	* fix-header.c (check_macro_names):  Fix struct parse_file->cpp_reader.
-	* cpplib.c (newline_fix):  Remove unused function.
-
-Thu Jun  6 19:47:26 1996  Jim Wilson  <wilson@cygnus.com>
-
-	Changes to support parameters and return values in multiple
-	non-contiguous locations.
-	* calls.c (expand_call): Handle NIL in PARALLEL.  Handle PARALLEL
-	parameter in REG.  Handle PARALLEL return value in VALREG.
-	(emit_library_call, emit_library_call_value): Abort for PARALLEL.
-	(store_one_arg): Delete code for handling EXPR_LIST.
-	* expr.c (emit_group_load, emit_group_store): New functions.
-	(use_group_regs): New function.
-	(emit_push_insn): Handle PARALLEL parameter in REG.
-	(expand_assignment): Handle PARALLEL to_rtx.
-	(store_expr): Handle PARALLEL target.
-	* expr.h (emit_group_load, emit_group_store, use_group_regs): New
-	declarations.
-	* function.c (assign_parms): Handle PARALLEL parameter in ENTRY_PARM.
-	* stmt.c (expand_value_return): Handle PARALLEL return_reg.
-
-	* mips/abi64.h (TYPE_DEPENDENT_REG): Delete.
-	* mips/mips.c (function_arg): Return PARALLEL for structure with
-	aligned double fields.
-	(type_dependent_reg): Delete.
-	(mips_function_value): Return PARALLEL for structure
-	with two floating point fields.
-	* mips/mips.md (call_value): Handle PARALLEL in operands[0].
-	(call_value_multiple_internal2): New pattern.
-	* pa/pa.h (FUNCTION_ARG): General PARALLEL instead of EXPR_LIST.
-	* rs6000/rs6000.c (init_cumulative_args): Change EXPR_LIST to PARALLEL
-	in comments.
-	(function_arg): Generate PARALLEL instead of EXPR_LIST.
-
-Thu Jun  6 18:21:27 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)
-
-	* function.c (assign_parms): Tighten up code that makes REG_EQUIV
-	notes for parms.
-
-	* fold-const.c (fold): Don't do anything with evaluated SAVE_EXPR.
-
-Thu Jun  6 17:54:07 1996  J.T. Conklin  <jtc@cygnus.com>
-
-	* m68k.h (TARGET_SWITCHES): Group all floating point options.
-	When an fp option is selected, unset bits used for other mutually
-	exclusive fp options.
-	(OVERRIDE_OPTIONS): Remove special case for SUPPORT_SUN_FPA;
-	bits used for 68881 and SKY are now cleared by TARGET_SWITCHES.
-
-	* m68k.md (movsi_const0, movhi): Favor clr with TARGET_5200.
-	(add[qhs]3): Don't use two addqw/subqw insns to add small integers to
-	an address register with TARGET_68060.
-	(stack push peephole): Use moveq.l with TARGET_5200 (when appropriate).
-
-	* m68k.h (MASK_5200, TARGET_5200): New macros.
-	(TARGET_SWITCHES): Add "m5200".
-	(LEGITIMATE_INDEX_P): Add TARGET_5200 to conditional expression.
-	* m68k.c (const_method): Do not synthesize long constants
- 	with byte or word operations with TARGET_5200.
-	* m68k.md: Disable byte and word arithmetic, rotate, integer
- 	divide, dbcc, etc. insns for TARGET_5200.
-	* m68k-none.h: (CPU_FPU_SPEC, CPP_SPEC, ASM_SPEC): Support m5200.
-
-Thu Jun  6 17:32:32 1996  Paul Eggert  <eggert@twinsun.com>
-
-	* fixproto (subdirs): Work around Solaris 2.5
-	/usr/xpgr/bin/sed problem with \+\+.
-
-Thu Jun  6 15:06:27 1996  Jim Wilson  <wilson@cygnus.com>
-
-	* c-decl.c (grokdeclarator): Call pop_obstacks after creating
-	TYPE_DECL.
-
-	* loop.c (strength_reduce): If HAVE_cc0 defined, disable auto_inc_opt
-	if it would put an insn between a cc0 setter/user pair.
-
-Thu Jun  6 13:06:54 1996  Michael Meissner  <meissner@tiktok.cygnus.com>
-
-	* rs6000/sysv4.h (LIBGCC2_WORDS_BIG_ENDIAN): If __sun__ is
-	defined, treat that as little endian.
-
-Wed Jun  5 20:04:53 1996  Jim Wilson  <wilson@cygnus.com>
-
-	* i960/i960.h (ROUND_TYPE_ALIGN): Add check for TYPE_PACKED.
-
-	* sh/sh.h (SHORT_IMMEDIATES_SIGN_EXTEND): Define.
-	* sh/sh.md (branch_true): Add comment about T-bit compares.
-
-Tue Jun  4 23:08:34 1996  Per Bothner  <bothner@deneb.cygnus.com>
-
-	* cpplib.h, cpplib.c:  Remove support for !STATIC_BUFFERS.
-	* cpplib.h:  Use unsigned char rather than U_CHAR.
-	* cpplib.h (cpp_reader):  Add destructor #ifdef __cplusplus.
-	(cpp_cleanup):  New prototype.
-	* cpplib.c (special_symbol, do_once, do_include, cpp_get_token):
-	Compare cpp_buffer against CPP_NULL_BUFFER, not NULL.
-
-	* cpplib.c (dump_special_to_buffer):  New function.
-	(initialize_builtins):  Use it.
-
-Wed Jun  5 19:10:22 1996  Jeffrey A. Law  <law@cygnus.com>
-
-	* pa/pa.h (TEXT_SPACE_P): Fix thinko in last change.
-
-Wed Jun  5 16:25:51 1996  Michael Meissner  <meissner@tiktok.cygnus.com>
-
-	* rs6000.h (ASM_DEFAULT_SPEC): Default to "", not -mpwr.
-
-	* sysv4.h (SUBTARGET_SWITCHES): Add -mshlib.
-	(LINK_PATH_SPEC): Add -compat-bsd support from Solaris.
-	(LINK_SPEC): Eliminate %{b} and %{G}, since they conflict with GCC
-	switches.  Defer shared library support to LINK_SHLIB_SPEC.  Defer
-	target selection to LINK_TARGET_SPEC.
-	(LINK_SHLIB_SPEC): Provide two different versions, depending on
-	whether shared libraries are default or not.  Make shared
-	libraries not default until linker is fixed.
-	(LINK_OS_*_SPEC): New specs for OS specific linker switches.
-	(SUBTARGET_EXTRA_SPECS): Add new specs.
-
-	* {sol2,sysv4}.h (LINK_SPEC): Move Solaris link into the general
-	link spec.
-
-	* {sysv4,sysv4le,eabile}.h (LINK_TARGET_SPEC): Only pass -oformat
-	to the linker if the user is changing the default endian format.
-
-	* {sol2,linux,eabisim,eabilesim}.h (LINK_OS_DEFAULT_SPEC): Define
-	to use the appropriate OS link spec.
-
-Wed Jun  5 16:35:10 1996  Ian Lance Taylor  <ian@cygnus.com>
-
-	* ginclude/stddef.h: Fix typo: TYPE_ptrdiff_t to _TYPE_ptrdiff_t.
-
-Wed Jun  5 15:52:57 1996  Per Bothner  <bothner@kalessin.cygnus.com>
-
-	* varasm.c (output_constructor):  Handle RANGE_EXPR in array index.
-
-Wed Jun  5 13:45:54 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)
-
-	* sparc.md (*call_{address,symbolic}_struct_value_sp32): Allow
-	operand 2 to be const0_rtx.
-
-Tue Jun  4 16:43:44 1996  Jason Merrill  <jason@yorick.cygnus.com>
-
-	* varasm.c (make_decl_rtl): Don't update DECL_ASSEMBLER_NAME for
- 	local statics.
-
-	* c-decl.c (start_decl): Always set DECL_COMMON on statics.
-	* varasm.c (assemble_variable): Only treat vars with DECL_COMMON
- 	as common.
-
-Tue Jun  4 14:55:49 1996  Jeffrey A. Law  <law@cygnus.com>
-
-	* pa.c (reloc_needed): New function.
-	* pa.h (TEXT_SPACE_P): Variables/constants with initializers
-	requiring relocs never live in the text space.
-
-Tue Jun  4 14:10:46 1996  Ian Lance Taylor  <ian@cygnus.com>
-
-	* sh.c (fp_zero_operand): Do not accept minus zero.
-
-	* sh.h (ASM_OUTPUT_LOOP_ALIGN): Define.
-	(ASM_OUTPUT_ALIGN_CODE): Define.
-	(ADJUST_INSN_LENGTH): Add in bytes that may be added by
-	alignment.
-	* sh.c (output_branch): Run ADJUST_INSN_LENGTH in reverse to get
-	correct length.  Just call abort rather than returning "bad".
-	(find_barrier): Adjust limits for possible alignment.
-
-Tue Jun  4 09:35:05 1996  Michael Meissner  <meissner@tiktok.cygnus.com>
-
-	* rs6000/t-solaris: New target config file for PowerPC Solaris
-	without gas.
-
-	* rs6000/t-ppc: Eliminate all multilib varients except for
-	software floating point.
-
-	* configure (powerpcle-*-solaris*): If not --with-gnu-as, use
-	t-solaris, not t-ppc.
-
-	* rs6000/sol2.h (MULTILIB_DEFAULTS): Add correct defaults for
-	Solaris.
-
-	* rs6000/sysv4.h (ASM_OUTPUT_SECTION_NAME): Clone from svr4.h, omit
-	@progbits, since Solaris assembler doesn't like it.
-	(LIB_SOLARIS_SPEC): If -msolaris-cclib, add libabi.a.
-	({START,END}FILE_SOLARIS_SPEC): If -msolaris-cclib, use explicit
-	pathnames for the Solaris compiler start/end files.
-	(ASM_SPEC): Pass -mno-regnames to the assembler.
-
-Mon Jun  3 19:40:10 1996  Jim Wilson  <wilson@cygnus.com>
-
-	* mips/abi64.h (CPP_SPEC): Make -mabi=n32 the default.
-	* mips/iris6.h (MIPS_ISA_DEFAULT, MIPS_ABI_DEFAULT, MULTILIB_DEFAULTS,
-	ASM_SPEC, STARTFILE_SPEC, ENDFILE_SPEC, LINK_SPEC): Likewise.
-	* mips.md (tablejump_internal4+1): Fix typo in condition.
-	* mips/x-iris6 (CC, OLDCC): Define to be `cc -32'.
-
-Mon Jun  3 07:57:35 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)
-
-	* tree.def ([LR]SHIFT_EXPR): Remove `a' from printed names.
-
-	* sparc.md (call): Mask unimp operand to 12 bits, just like Sun.
-
-	* expr.c (store_field): Fix typo in last change; update TARGET addr.
-
-	* c-decl.c (start_struct): Set TYPE_PACKED from flag_pack_struct.
-	(start_enum): Likewise but from flag_short_enums.
-	(finish_enum): Test TYPE_PACKED, not flag_short_enums.
-	* stor-layout.c (layout_decl): Test DECL_PACKED and TYPE_PACKED
-	instead of flag_pack_struct.
-	(layout_record): Likewise.
-
-Sun Jun  2 19:41:14 1996  Jim Wilson  <wilson@cygnus.com>
-
-	* mips.md (tablejump_internal3, tablejump_internal4): New patterns.
-	(tablejump): Use them for PIC code.
-
-Fri May 31 17:26:53 1996  Stan Cox  <coxs@dg-rtp.dg.com>
-
-	* i386.c (ix86_expand_epilogue): Don't generate references to an
-	exposed vacated stack.
-	* i386.md (epilogue_set_stack_ptr): New.
-
-Fri May 31 15:07:49 1996  Jim Wilson  <wilson@cygnus.com>
-
-	* mips/abi64.h: Add -mabi=n32 support.
-	(ABI_64BIT): Delete.
-	(TARGET_LONG64, CPP_SPEC, STACK_BOUNDARY, MIPS_STACK_ALIGN,
-	GP_ARG_LAST, FP_ARG_LAST, SUBTARGET_CONDITIONAL_REGISTER_USAGE,
-	MAX_ARGS_IN_REGISTER, FUNCTION_ARG_PADDING, RETURN_IN_MEMORY,
-	SETUP_INCOMING_VARARGS): Modify.
-	(REG_PARM_STACK_SPACE): Ifdef out.
-	(TARGET_DEFAULT, SUBTARGET_TARGET_OPTIONS): Define.
-	* mips/iris6.h: Add -mabi=n32 support.
-	(TARGET_DEFAULT, ASM_OUTPUT_INTERNAL_LABEL,
-	ASM_GENERATE_INTERNAL_LABEL): Delete.
-	(MULTILIB_DEFAULTS, ASM_SPEC, EXTRA_SECTION_FUNCTIONS,
-	ASM_OUTPUT_ALIGNED_LOCAL, STARTFILE_SPEC, ENDFILE_SPEC, LINK_SPEC):
-	Modify.
-	(MIPS_ABI_DEFAULT, LOCAL_LABEL_PREFIX): Define.
-	* mips/mips.c: Add -mabi=n32 support.
-	(mips_const_double_ok, mips_move_1word, mips_move_2words,
-	function_arg, override_options, mips_asm_file_start,
-	compute_frame_size, save_restore_insns, function_prologue,
-	mips_expand_prologue, function_epilogue, mips_function_value): Modify.
-	(mips_abi, mips_abi_string): Define
-	* mips/mips.h: Add -mabi=n32 support.
-	(ABI_64BIT): Delete.
-	(TARGET_OPTIONS, INITIAL_ELIMINATION_OFFSET, GO_IF_LEGITIMATE_ADDRESS,
-	CONSTANT_ADDRESS_P, LEGITIMATE_CONSTANT_P, LEGITIMIZE_ADDRESS,
-	ASM_OUTPUT_ADDR_DIFF_ELT): Modify.
-	(enum mips_abi_type, SUBTARGET_TARGET_OPTIONS): Define.
-	(mips_abi, mips_abi_string): Declare.
-	* mips/mips.md (jump, tablejump_internal1, tablejump_internal2): Add
-	-mabi=n32 support.
-	* mips/t-iris6 (MULTILIB_OPTIONS): Add -mabi=n32 support.
-	* mips/xm-irix6.h (HOST_BITS_PER_LONG): Use _MIPS_SZLONG not 64.
-	* ginclude/va-mips.h (va_start): Add -mabi=n32 support.
-
-Fri May 31 14:45:30 1996  Michael Meissner  <meissner@tiktok.cygnus.com>
-
-	* rs6000/sysv4.h (SUBTARGET_SWITCHES): Add -msolaris-cclib to use
-	the Sun compiler's crt files instead of ours.
-	({START,END}FILE_SOLARIS_SPEC): If -msolaris-cclib, use the Sun
-	compiler's crt files instead of ours.
-	(SUBTARGET_OVERRIDE_OPTIONS): Don't set -msdata=data for Solaris.
-	(SBSS_SECTION_ASM_OP): For Solaris, don't use @nobits.
-	(CPP_OS_SOLARIS_SPEC): Remove -Asystem(unix) and -Asystem(svr4).
-
-	* rs6000/t-ppc{,gas} (MULTILIB*): Add Solaris specific multilibs.
-
-	* rs6000/eabi{,le}sim.h (*_DEFAULT_SPEC): Rather than using
-	duplicate definitions, just use %(...) so that there is only one
-	place in the specs file where the switches are defined.
-	* rs6000/{linux,sol2}.h (*_DEFAULT_SPEC): Ditto.
-
-	* rs6000/sol2.h (CPP_PREDEFINES): Use the standard one in sysv4.h.
-	(RS6000_ABI_NAME): Default is solaris.
-	(ASM_OUTPUT_ALIGNED_LOCAL): Don't redefine.
-
-	* rs6000/sol-c{i.asm,n.asm,c0.c}: Provide more things that Solaris
-	needs for program startup.
-
-Thu May 30 21:57:34 1996  Mike Stump  <mrs@cygnus.com>
-
-	* tree.def (OFFSET_REF): Remove.
-	* expr.c (expand_expr, case OFFSET_REF): Likewise.
-	* tree.c (substitute_in_expr): Remove OFFSET_REF code.
-
-Wed May 29 14:54:44 1996  Michael Meissner  <meissner@tiktok.cygnus.com>
-
-	* rs6000/eabi.asm (__eabi): If not -mrelocatable, don't assemble
-	relocatable functions, so that it can be assembled with the
-	Solaris assembler.
-
-	* rs6000/sysv4.h (CPP_SYSV_SPEC): Define _RELOCATABLE if
-	-mrelocatable-lib as well as -mrelocatable.
-
-	* rs6000.c (rs6000_file_start): New function to print some more
-	information to the asm file.
-	* rs6000/{sysv4,win-nt,rs6000}.h (ASM_FILE_START): Call it.
-
-Tue May 28 15:21:24 1996  Michael Meissner  <meissner@tiktok.cygnus.com>
-
-	* rs6000.h (FIRST_PSEUDO_REGISTER): Bump to 77.  The new fpmem
-	register represents the memory location used for float/int
-	conversions.
-	({FIXED,CALL_USED}_REGISTERS): Add support for the fpmem pseudo
-	register.
-	(REG_ALLOC_ORDER): Ditto.
-	(HARD_REGNO_{NREGS,MODE_OK}): Ditto.
-	(REGISTER_MOVE_COST): Ditto.
-	(reg_class): Ditto.
-	(REG_CLASS_{NAMES,CONTENTS}): Ditto.
-	(REGNO_REG_CLASS): Ditto.
-	(PREFERRED_RELOAD_CLASS): Ditto.
-	(CLASS_{MAX_NREGS,CANNOT_CHANGE_SIZE,MAX_NREGS}): Ditto.
-	(rs6000_stack): Ditto.
-	({,DEBUG_}REGISTER_NAMES): Ditto.
-	(FPMEM_{REGNO_P,REGNUM}): New macros for fpmem register.
-	(rs6000_fpmem_{offset,size}): New global variables.
-	(RS6000_VARARGS_OFFSET): Fpmem temporary storage is located
-	between outgoing arg area and varargs save area.
-	(STARTING_FRAME_OFFSET): Ditto.
-	(STACK_DYNAMIC_OFFSET): Ditto.
-	(PREDICATE_CODES): Add fpmem_operand.
-	({count_register,fpmem}_operand): Add declarations.
-
-	* rs6000.c ({rs6000,alt}_reg_names): Add support for fpmem
-	'register'.
-	(rs6000_fpmem_{offset,size}): New global variables.
-	(fpmem_operand): Return true for fpmem registers.
-	(gpc_reg_operand): The fpmem register is not general purpose.
-	(includes_rshift_p): Add casts to silence warnings from Solaris
-	PowerPC host compiler.
-	(print_operand): Add 'v' operand type for the upper 16 bits of
-	signed constants, to placate the Solaris assembler.
-	({rs6000,debug}_stack_info): Add support for fpmem 'register'.
-	(output_epilog): Ditto.
-
-	* rs6000.md (addsi3,movsi,movsf,movdi): Use %v for constants with
-	the upper 16 bits, to get the sign correct for PowerPC Solaris.
-	(float{,uns}sidf2,fix_truncdfsi2): Rewrite to use 'register' 76
-	for the memory location used to convert between float and integer.
-
-	* sysv4.h (ASM_OUTPUT_{CON,DE}STRUCTOR): Use code laid down in
-	.init and .fini for making constructors and destructors under
-	Solaris.
-	(ASM_SPEC): Do not pass -u to the assembler.
-	(CC1_SPEC): -mrelocatable implies -meabi.
-
-	* sol2.h (RS6000_ABI_NAME): Default ABI is Solaris, not System
-	V.4.
-	(ASM_OUTPUT_ALIGNED_LOCAL): Don't define a Solaris specific
-	method.
-
-Mon May 27 06:39:13 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)
-
-	* expr.c (expand_builtin, case BUILT_IN_{LONG,SET}JMP):
-	Convert block address from ptr_mode to Pmode.
-
-Sun May 26 20:05:43 1996  Doug Evans  <dje@cygnus.com>
-
-	* gcc.c (MSDOS pexecute): Call xmalloc, not malloc.
-
-Sun May 26 08:31:54 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)
-
-	* configure (vax-*-{sysv}): tm_file and xm_file now list.
-	(vax-*-ultrix): tm_file is now list.
-	(we32k-att-sysv*): xm_file now list.
-	* vax/xm-netbsd.h: Deleted.
-	* vax/netbsd.h: No longer include vax.h and config/netbsd.h.
-	* vax/ultrix.h, vax/vaxv.h: No longer include vax.h.
-	* vax/xm-vaxv.h: No longer include xm-vax.h.
-	* xm-we32k.h: No longer include xm-svr3.h.
-
-	* configure: Separately set target_cpu_default for two
-	case statements and then combine if both set.
-	(alpha-*-winnt3): tm_file and xm_file are now list.
-	Set target_cpu_default to 64.
-	* winnt/config-nt.bat: Make .h files properly for Alpha.
-	* alpha.h (WINDOWS_NT): No longer defined and used.
-	(MASK_WINDOWS_NT, TARGET_WINDOWS_NT): New macros.
-	(ASM_OUTPUT_ADDR_DIFF_ELT): Use TARGET_WINDOWS_NT.
-	* alpha.c (output_prolog): Test TARGET_WINDOWS_NT, not WINDOWS_NT.
-	* alpha.md: Likewise.
-	* alpha/config-nt.sed: Properly set tm_file and {build,host}_xm_file.
-	* alpha/win-nt.h: Don't include alpha.h
-	(WINDOWS_NT): No longer define.
-	* alpha/xm-winnt.h: Don't include xm-alpha.h and winnt/xm-winnt.h.
-
-Fri May 24 12:34:22 1996  Doug Evans  <dje@seba.cygnus.com>
-
-	* configure (cpu_type): Add case for arm.
-	(sparclet-*-aout*): Delete extra_headers.
-
-	* varasm.c (asm_output_bss): New argument DECL.
-	Use ASM_DECLARE_OBJECT_NAME if defined.
-	(asm_output_aligned_bss): Likewise.
-	(assemble_variable): Pass DECL to ASM_OUTPUT{,_ALIGNED}_BSS.
-	* arm/aout.h (ASM_OUTPUT_ALIGNED_BSS): Update.
-	* h8300/h8300.h (ASM_OUTPUT_BSS): Update.
-	* i386/linux.h (ASM_OUTPUT_ALIGNED_BSS): Update.
-	* i386/sysv4.h (ASM_OUTPUT_ALIGNED_BSS): Update.
-	* m68k/coff.h (ASM_OUTPUT_ALIGNED_BSS): Update.
-	* m68k/linux.h (ASM_OUTPUT_ALIGNED_BSS): Update.
-	* m68k/m68k-aout.h (ASM_OUTPUT_BSS): Update.
-	* rs6000/sysv4.h (ASM_OUTPUT_ALIGNED_BSS): Update.
-	* rs6000/win-nt.h (ASM_OUTPUT_ALIGNED_BSS): Update.
-	* sparc/sysv4.h (ASM_OUTPUT_ALIGNED_BSS): Update.
-
-Thu May 23 19:55:52 1996  Jim Wilson  <wilson@cygnus.com>
-
-	* combine.c (set_nonzero_bits_and_sign_copies): Set
-	reg_sign_bit_copies to one not zero to indicate that the value
-	is unknown.
-
-Thu May 23 18:39:24 1996  J.T. Conklin  <jtc@rtl.cygnus.com>
-
-	* config/netbsd.h (SWITCH_TAKES_ARG): Add -R.
-	(LINK_SPEC): Add %{R*}.
-
-	* m68k/lb1sf68.asm: Construct exception masks at compile time
- 	instead of or'ing in bits at run time.
-
-Thu May 23 15:53:06 1996  Ian Lance Taylor  <ian@cygnus.com>
-
-	* sh/sh.md: Add new instruction types fp and fpdiv.  Set new
-	instruction types where appropriate.  Add function unit fp.
-	Claim that store instructions use function unit memory.
-
-Thu May 23 00:36:19 1996  Jeffrey A. Law  <law@cygnus.com>
-
-	* h8300/h8300.h (CONSTANT_ADDRESS_P): Don't accept CONST or HIGH
-	on the H8/300H.
-	* h8300/h8300.md: Use "m" rather than "o" constraint everywhere
-	appropriate.  Cleanup use of "i" and "n" constraints.
-
-Wed May 22 17:43:37 1996  Jim Wilson  <wilson@cygnus.com>
-
-	* fixincludes (pthread.h): Add extern to __page_size* declarations
-	for AIX 4.1.x.
-
-	* combine.c (nonzero_bits): Don't assume arg pointer has same
-	alignment as stack pointer.
-
-Wed May 22 16:09:05 1996  Michael Meissner  <meissner@tiktok.cygnus.com>
-
-	* rs6000/sysv4.h (LINK_START_DEFAULT_SPEC): Spell macro correctly.
-	(LIB_DEFAULT_SPEC): Provide default version.
-
-Wed May 22 11:23:57 1996  J"orn Rennecke (amylaar@meolyon.hanse.de)
-
-	* i386.md (return_pop_internal): new pattern.
-	(pop): disable emitting of bogus move instruction.
-	* i386.c (ix86_expand_epilogue): use gen_return_pop_internal to
-	simultanously return and pop args; removed stray semicolon.
-	* config/linux-aout.h, config/linux.h (SET_ASM_OP): Added for
-	__attribute__ ((alias ())) support.
-
-Wed May 22 08:06:42 1996  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu.edu>
-
-	* combine.c (init_reg_last_arrays, setup_incoming_promotions):
-	Correct prototypes.
-
-Tue May 21 13:42:17 1996  Jeffrey A. Law  <law@cygnus.com>
-
-	* h8300/h8300.md (div patterns): Rewrite.
-	(mod patterns): Likewise.
-
-	* pa/pa.c (basereg_operand): Never accept a CONST_INT.
-
-Tue May 21 12:26:40 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)
-
-	* pa/pa-hpux9.h, pa-osf.h (LINK_SPEC): Provide version for Snake.
-
-Tue May 21 07:20:48 1996  Pat Rankin  <rankin@eql.caltech.edu>
-
-	* vax.h (TARGET_NAME): Define unless already defined.
-	(TARGET_VERSION): Print TARGET_NAME.
-	* vax/vms.h (TARGET_NAME): Always redefine.
-	(TARGET_VERSION): Delete; retain vax.h definition.
-
-Mon May 20 14:00:44 1996  Jim Wilson  <wilson@cygnus.com>
-
-	* sh.c (output_file_start): Delete misplaced semicolon.
-
-Mon May 20 11:58:15 1996  Jeffrey A. Law  <law@cygnus.com>
-
-	* reorg.c (relax_delay_slots): Call update_block before
-	redirecting a branch past a redundant insn.
-
-Sun May 19 16:40:53 1996  Philippe De Muyter  <phdm@info.ucl.ac.be>
-
-	* Makefile.in (libobjc.a, sublibobjc.a): 'specs' added to
-	dependencies.
-
-Sun May 19 12:25:48 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)
-
-	* configure: Add new switch to provide default for cpu_type;
-	delete numerous settings of it in main switch.
-	(hppa): Reflect rerrangements below; use new configure features.
-	* pa/pa-gas.h, pa/pa-pro-end.h: New files.
-	* pa/pa1.h, pa/pa1-osf.h, pa/pa1-ghpux.h, pa/pa1-oldas.h: Deleted.
-	* pa/pa1-ghpux9.h, pa/pa1-hpux9.h, pa/pa1-hpux.h: Deleted.
-	* pa/pa1-ghiux.h, pa/pa1-hiux.h, pa/pa-ghpux.h: Deleted.
-	* pa/pa-gux7.h, pa/pa-ghiux.h: Deleted.
-	* pa/pa-hiux.h: No longer include pa-hpux.h.
-	* pa/pa-hpux.h: No longer include pa.h.
-	(TARGET_DEFAULT): Unset before setting.
-	(LINK_SPEC): Provide option for pa1.
-	* pa/pa-hpux7.h: No longer include pa.h.
-	(HP_FP_ARG_DESCRIPTOR_REVERSED): Don't define here.
-	* pa/pa-hpux9.h, pa/pa-oldas.h: No longer include pa-hpux.h.
-	(TARGET_DEFAULT): Don't need to set here.
-	* pa/pa-osf.h: No longer include pa.h.
-	(TARGET_DEFAULT): Don't define; identical to default.
-	* pa/pa-pro.h: No longer include pa.h.
-	Move definitions after include to new file pa-pro-end.h.
-	* pa.h (TARGET_SWITCHES): Include TARGET_CPU_DEFAULT.
-	(TARGET_CPU_DEFAULT): Provide default value.
-	(CPP_SPEC): Test TARGET_CPU_DEFAULT too.
-
-	* Makefile.in (function.o): Includes bc-emit.h.
-	(reg-stack.o): Includes insn-flags.h.
-	* expr.h (function_value): Deleted; no such function.
-	(bc_build_calldesc, bc_runtime_type_code): New declarations.
-	* c-decl.c: Add prototypes for all static functions.
-	* c-iterate.c: Likewise.
-	* dbxout.c: Likewise.
-	(adspath): Delete; never used and has numerous parse errors.
-	* dwarfout.c: If not GNUC, make `inline' null; otherwise, leave alone.
-	Add `static' to inline functions.
-	Add prototypes for static function.
-	* expr.c (bc_runtime_type_code): Delete redundant declaration.
-	* function.c: Include bc-emit.h.
-	({save,restore}_machine_status): Add prototype for args.
-	(bc_runtime_type_code, bc_build_calldesc): Delete redundant decls.
-	(bc_emit_trampoline, bc_end_function): Likewise.
-	* reg-stack.c: Include insn-flags.h.
-	Add prototypes for static functions.
-	(gen_jump, gen_movdf, gen_movxf): Delete redundant declarations.
-	(find_regno_note, emit_jump_insn_before, emit_label_after): Likewise.
-	(swap_rtx_condition): Now static.
-	* sdbout.c: Add prototypes for static functions.
-	(sdbout_parms, sdbout_reg_parms): Delete extra parm to plain_type.
-
-Sun May 19 11:50:10 1996  John Carr <jfc@mit.edu>
-
-	* alpha.c (alpha_emit_conditional_move): Compare to 0 in correct mode.
-
-Sat May 18 20:17:27 1996  Jim Wilson  <wilson@cygnus.com>
-
-	* sh.c (prepare_move_operands): If source is r0, and dest is reg+reg
-	MEM, then copy source to a pseudo-reg.
-	* sh.md (untyped_call): New pattern.
-
-	* unroll.c (copy_loop_body): When update split DEST_ADDR giv,
-	check to make sure it was split.
-	(find_splittable_givs): Fix reversed test of verify_addresses result.
-
-Sat May 18 10:26:04 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)
-
-	* tree.c (unsave_expr_now): Avoid use of NULL_RTX since no rtl.h.
-
-	* configure: Set cpu_default, tm_file, and xm_file early.
-	Remove redundant settings of those, tmake_file, and xmake_file.
-	Use ${tm_file} and ${xm_file} to refer to the main files.
-	Sort some entries for consistency and reformat some others.
-	(rs6000, powerpc): Remove bogus test on host == target.
-	(alpha-*-linux): xm-linux.h no longer includes xm-alpha.
-	(alpha-*-osf*): Remove redundant setting of target_cpu_default.
-	(*-convex-*): Use target_cpu_default instead of separate .h files.
-	(clipper-intergraph-clix*): clix.h no longer includes any files.
-	(i860, i960, pdp11): Reflect removal of includes listed below.
-	* alpha/xm-linux.h: No longer include xm-alpha.h.
-	* clipper/clix.h: No longer include clipper.h and svr3.h.
-	* convex.h: Provide a default for TARGET_DEFAULT.
-	Take "or" of TARGET_DEFAULT and TARGET_CPU_DEFAULT everywhere.
-	* convex/convex{1,2,32,34,38}.h: Deleted.
-	* i860/bsd-gas.h: No longer include bsd.h.
-	* i860/bsd.h: No longer include i860.h.
-	* i860/fx2800.h: No longer include i860/sysv4.h.
-	(OUTPUT_TDESC): No longer define.
-	(ASM_FILE_END): Move redefinition to here.
-	* i860/mach.h: No longer include i860.h.
-	* i860/paragon.h, i860/sysv3.h: No longer include i860.h and svr3.h.
-	* i860/sysv4.h: No longer include i860.h and svr4.h.
-	(ASM_FILE_END): Delete redefinition from here.
-	* i860/xm-fx2800.h: No longer include xm-i860.h.
-	* i860/xm-paragon.h, i860/xm-sysv{3,4}.h: Deleted.
-	* i960/i960-coff.h: No longer include i960.h and dbxcoff.h.
-	* i960/vx960-coff.h: No longer include i960-coff.h.
-	* i960/vx960.h: No longer include i960.h.
-	* pdp11/2bsd.h: No longer include pdp11.h.
-
-	* i370/i370.h: Renamed from mvs.h.
-	* i370/i370.c: Renamed from mvs370.c.
-	* i370/t-i370: Renamed from t-mvs.
-	* i370/xm-i370.h: Renamed from xm-mvs.h.
-	* configure (i370-*-mvs*): Use default names for all files.
-
-	* c-parse.in: Update number of shift/reduce conflicts for objc.
-
-Sat May 18 08:20:17 1996  Dennis Glatting  (dennisg@plaintalk.bellevue.wa.us)
-
-	* m68k/next.h (FINALIZE_TRAMPOLINE): Add missing backslashes.
-
-Fri May 17 19:57:20 1996  Pat Rankin  <rankin@eql.caltech.edu>
-
-	* vax/xm-vms.h (dbxout_resume_previous_source_file): New macro.
-
-Fri May 17 14:20:13 1996  Mike Stump  <mrs@cygnus.com>
-
-	* expr.c (expand_expr, cond TARGET_EXPR): Make TARGET_EXPRs
-	redoable for UNSAVE_EXPR.
-	* stmt.c (expand_decl_cleanup): Wrap the cleanup in an UNSAVE_EXPR
-	to that we can redo it.
-	* tree.c (unsave_expr_now): Handle TARGET_EXPRs fully now.
-	* tree.def (TARGET_EXPR): Add a fourth field so that TARGET_EXPRs
-	are redoable.
-
-	* expr.c (expand_expr, cond UNSAVE_EXPR): Move from the C++
-	frontend to the backend where it belongs.
-	* tree.c (unsave_expr): Likewise.
-	(unsave_expr_now): Likewise.
-	* tree.def (UNSAVE_EXPR): Likewise.
-	* tree.h (unsave_expr): Likewise.
-	(unsave_expr_now): Likewise.
-
-Fri May 17 15:04:40 1996  Michael Meissner  <meissner@tiktok.cygnus.com>
-
-	* rs6000.md (lshrsi3 insns): Add special case code for shifting by
-	0 to avoid bad code generated with no optimization.
-
-Fri May 17 13:50:55 1996  Jason Merrill  <jason@yorick.cygnus.com>
-
-        * i386/unix.h (ASM_OUTPUT_MI_THUNK): Define.
-	* i386/{att.h,bsd.h,sun386.h} (ASM_OUTPUT_MI_THUNK): Delete.
-
-Fri May 17 13:34:28 1996  Ian Lance Taylor  <ian@cygnus.com>
-
-	* config/fp-bit.c (_fpdiv_parts): Correct sign handling when
-	dividing zero or infinity by something.
-
-Fri May 17 12:36:36 1996  Doug Evans  <dje@seba.cygnus.com>
-
-	Standardize option output in assembler files.
-	* Makefile.in (toplev.o): Pass -DTARGET_NAME.
-	* arm/aout.h (ASM_OUTPUT_OPTIONS): Delete.
-	(ASM_FILE_START): Delete option output support.
-	* arm/arm.c (output_option, output_options, m_options): Delete.
-	* m88k/m88k.c (output_file_start): Delete option output support.
-	* m88k/m88k.h (ASM_COMMENT_START): Define.
-	* mips/mips.c (target_switches, print_options): Delete.
-	(mips_asm_file_start): Put output of -G,Cpu,ISA here.
-	* mips/mips.h (ASM_COMMENT_START): Change from "\t\t#" to " #".
-	* rs6000/rs6000.c (output_option, m_options, output_options): Delete.
-	* rs6000/rs6000.h (ASM_OUTPUT_OPTIONS): Delete.
-	(ASM_COMMENT_START): Define.
-	(ASM_FILE_START): Delete option output support.
-	* rs6000/sysv4.h (ASM_FILE_START): Likewise.
-	* rs6000/win-nt.h (ASM_FILE_START): Likewise.  Delete duplicate.
-	* sh/sh.c (output_option, m_options, output_options): Delete.
-	(output_file_start): Delete option output support.
-	* sh/sh.h (ASM_FILE_START): Likewise.
-	(ASM_COMMENT_START): Define.
-	* dwarfout.c (*): flag_verbose_asm renamed to flag_debug_asm.
-	* flags.h (flag_debug_asm): Declare.
-	* toplev.c (print_version): New function.
-	(print_single_switch): New arguments pos, max, indent, sep, term.
-	(print_switch_values): New arguments pos, max, indent, sep, term.
-	Update call to print_single_switch.  Output options passed and
-	options enabled.
-	(MAX_LINE): New macro.
-	(flag_debug_asm): Define.
-	(compile_file): Output options to assembler file.
-	(main): Recognize -dA.  Call print_version.  Update call to
-	print_switch_values.
-	(line_position): Deleted.
-
-Fri May 17 10:50:44 1996  Stan Cox  (coxs@dg-rtp.dg.com)
-
-	* i386.c (function_prologue, ix86_expand_prologue,
-	function_epilogue, ix86_expand_epilogue): Generate prologue and
-	epilogue as RTL (prior to scheduling) instead of emitting asm.
-	(override_options): If only -march is given, make it the default -mcpu.
-	* i386.h (FUNCTION_BEGIN_EPILOGUE): Renamed from FUNCTION_EPILOGUE.
-	* i386.md (return, return_internal, prologue, prologue_set_got,
-	prologue_get_pc, epilogue, leave, pop): New patterns for emitting
-	asm from prologue and epilogue RTL.
-	* m88k/t-dgux (T_CFLAGS): Delete.
-	* m88k/x-dgux (X_CFLAGS): New.
-
-Fri May 17 09:54:23 1996  Jim Meyering  (meyering@asic.sc.ti.com)
-
-	* Makefile.in (stamp-crt{,S}): Use -o to avoid conflicts if
-	both of these are built in parallel.
-
-Fri May 17 08:55:19 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)
-
-	* expmed.c (store_split_bit_field): Don't assume the alignment
-	of VALUE is the same as the record.
-
-	* configure: Write #define TARGET_CPU_DEFAULT into tm.h
-	instead of defining MAYBE_TARGET_DEFAULT in Makefile.
-	(alpha-*-linux): Set target_cpu_default to 4 and xmake_file to none.
-	(alpha-*-osf*): Set target_cpu_default to 4 if --gas.
-	* Makefile.in (gcc.o, toplev.o, $(out_object_file)):
-	Remove MAYBE_TARGET_DEFAULT.
-
-	* combine.c (insn_cuid): New function.
-	(INSN_CUID): Sometimes call it.
-
-Fri May 17 08:12:37 1996  Scott Christley <scottc@net-community.com>
-
-	* objc/sendmsg.c (objc_get_uninstalled_dtable): New function.
-	* objc/objc-api.h (objc_get_uninstalled_dtable): New declaration.
-
-        * objc/thr-os2.c, objc/thr-posix.c, objc/thr-mach.c: New files.
-        * objc/THREADS.MACH: New file.
-
- 	* objc/sendmsg.c (nil_method): Deleted from here.
- 	* objc/nil_method.c: New file.
- 	* Makefile (OBJC_O): Add dependency for nil_method.c.
-
-	* objc/hash.c (hash_is_key_in_hash): New function.
-	* objc/hash.h: Include objc/objc.h here instead of in objc/hash.c
-	to get BOOL typedef.
-
-Fri May 17 08:01:48 1996  Doug Rupp  (rupp@gnat.com)
-
-	* msdos/configur.bat: If Ada subdirectory present, adjust Makefile.
-
-Fri May 17 07:40:04 1996  Ulrich Drepper  (drepper@cygnus.com)
-
-	* stddef.h: If need_wint_t defined, nothing in this file is needed.
-	(_WINT_T, __WINT__TYPE__, wint_t): Define under certain circumstances.
-
-Thu May 16 18:53:25 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)
-
-	* fold-const.c (fold, case EQ_EXPR): When folding VAR++ = CONST,
-	mask the new const if VAR is a bitfield reference; also for VAR--.
-
-Thu May 16 18:29:03 1996  Doug Evans  <dje@seba.cygnus.com>
-
-	* varasm.c (function_section): Delete flag_function_sections support.
-	(assemble_start_function): Put it here.  Use UNIQUE_SECTION if defined.
-
-Wed May 15 13:35:11 1996  Michael Meissner  <meissner@tiktok.cygnus.com>
-
-	* rs6000.{h,c,md} (rs6000_pic_register): Delete all uses, use
-	pic_offset_table_rtx instead.
-
-	* rs6000.md (move_to_float): Rewrite so that it uses the register
-	allocator to allocate the stack temp, instead of calling
-	rs6000_stack_temp.
-	(fix_truncdfsi2): Ditto.
-
-	* rs6000.c (rs6000_stack_temp): Delete, no longer used.
-
-Wed May 15 10:39:27 1996  Jeffrey A. Law  <law@cygnus.com>
-
-	* h8300/h8300.h (DBX_OUTPUT_MAIN_SOURCE_FILE_END): Define.
-
-Sat May 11 07:42:59 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)
-
-	* expr.c (store_field): Support BLKmode bitfield if aligned on
-	byte boundary using emit_block_move.
-	(expand_expr, case COMPONENT_REF): Likewise.
-
-Fri May 10 18:33:39 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)
-
-	* configure (alpha-*-linux): Reverse order in tm_file list.
-	Delete xmake_file.
-	* alpha/x-linux: Deleted.
-	* alpha/linux.h (ASM_FINAL_SPEC): Add #undef.
-	* alpha/xm-linux.h: Remove bogus trailing #endif.
-
-	* loop.c (maybe_eliminate_biv_1): Disable all but two cases
-	of biv elimination with givs and restrict those two cases to
-	an ADD_VAL that is an address.
-
-	* flow.c (mark_set_1, mark_used_regs): Clean up usages
-	of ALL_NEEDED; change to SOME_NOT_NEEDED and set properly.
-
-Fri May 10 11:37:38 1996  Jason Merrill  <jason@yorick.cygnus.com>
-
-	* toplev.c (compile_file): Don't warn about artificial functions
- 	declared static and not defined.
-
-Thu May  9 22:03:28 1996  Doug Evans  <dje@cygnus.com>
-
-	* varasm.c (assemble_start_function): ASM_DECLARE_FUNCTION_NAME
-	needn't consider bytecodes.
-	(assemble_variable): ASM_DECLARE_OBJECT_NAME needn't
-	consider bytecodes.
-	* toplev.c (rest_of_decl_compilation): Likewise with
-	ASM_FINISH_DECLARE_OBJECT.
-	* arm/aof.h (ASM_DECLARE_{FUNCTION,OBJECT}_NAME): Delete bytecode
-	support.
-	* vax/vms.h (ASM_DECLARE_OBJECT_NAME): Likewise.
-
-Thu May  9 19:36:13 1996  Jim Wilson  <wilson@cygnus.com>
-
-	* sh.h (SET_ASM_OP): Define.
-
-Thu May  9 13:31:58 1996  Michael Meissner  <meissner@tiktok.cygnus.com>
-
-	* rs6000/sysv4.h (SUBTARGET_{SWITCHES,OPTIONS}): Add support for
-	finer grain control on -msdata, so that eabi people can specify to
-	compile sdata code to only use r13 instead of r2/r13.  Make
-	-mrelocatable-lib turn off -msdata, just like -m relocatable does.
-	(SUBTARGET_OVERRIDE_OPTIONS): Ditto.
-	(ENCODE_SECTION_INFO): Move to rs6000.c.
-	(ASM_SPEC): -msdata=eabi sets -memb also.
-	(CC1_SPEC): -mno-sdata gets converted to -msdata=none.
-
-	* rs6000.c (rs6000_sdata{,_name}): Add support for finer grain
-	control on -msdata.
-	(output_options): Ditto.
-	(small_data_operand): Ditto.
-	(print_operand): Ditto.
-	(rs6000_select_section): Ditto.
-	(rs6000_encode_section_info): Move here from sysv4.h, section
-	names are stored as STRING nodes, not IDENTIFIER.
-
-Wed May  8 21:04:49 1996  Doug Evans  <dje@cygnus.com>
-
-	* function.c (aggregate_value_p): Return 1 if TREE_ADDRESSABLE.
-	* pa/pa.h (RETURN_IN_MEMORY): No longer test for TREE_ADDRESSABLE.
-
-Tue May  7 13:42:57 1996  Jeffrey A. Law  <law@cygnus.com>
-
-	* h8300/h8300.c: Include obstack.h.
-	(bit_memory_operand): New function.
-	(print_operand): Append ":16" to a memory reference to
-	the tiny data area.
-	(h8300_tiny_data_p): New function.
-	(h8300_valid_machine_decl_attribute): Accept "tiny_data".  Fix
-	typo.
-	(h8300_encode_label): New function.
-	(h8300_adjust_insn_length): References to the tiny data section
-	are two bytes shorter than normal accesses on the H8/300H.
-	* h8300/h8300.h (OK_FOR_U): Fix thinko.
-	(ENCODE_SECTION_INFO): Encode info for tiny data variables.
-	(STRIP_NAME_ENCODING): Define.
-	* h8300/h8300.md (movqi insn): Fix length for a constant load.
-	(movstrictqi): Likewise.
-	(movhi, movstricthi): Likewise.
-	(memory btst patterns): Add register to the constraints to keep
-	reload happy.
-
-	* h8300/h8300.h (OK_FOR_U): (const (plus (symbol_ref) (const_int)))
-	is a valid U operand if SYMBOL_REF_FLAG is set on the
-	SYMBOL_REF.
-	* h8300/h8300.md (memory btst patterns): New patterns.
-
-	* h8300/h8300.c (h8300_eightbit_data_p): Renamed from
-	h8300_tiny_data_p.
-	(h8300_eightbit_data_p): Check for the "eightbit_data"
-	attribute instead of "tiny_data".
-	(h8300_valid_machine_decl_attribute): Likewise.
-	* h8300/h8300.h (ENCODE_SECTION_INFO): Call h8300_eightbit_data_p
-	instead of h8300_tiny_data_p.
-
-	* h8300/h8300.h (READONLY_DATA_SECTION): Define.
-	(EXTRA_SECTIONS): Add in_readonly_data.
-	(READONLY_DATA_SECTION_ASM_OP): Define.
-	(EXTRA_SECTION_FUNCTINOS): Add readonly_data.
-
-Tue May  7 09:26:24 1996  Jason Merrill  <jason@yorick.cygnus.com>
-
-	* varasm.c (make_decl_rtl): Update DECL_ASSEMBLER_NAME for local
- 	statics.  Remove reference to flag_no_common.
-
-Mon May  6 21:38:36 1996  Paul Eggert  <eggert@twinsun.com>
-
-	* cpplib.c (skip_comment, handle_directive): Don't use uninit vars.
-
-Mon May  6 18:47:36 1996  Doug Evans  <dje@cygnus.com>
-
-	* dbxout.c (dbxout_function): When deciding to call dbxout_function_end
-	change test from flag_function_sections to DECL_SECTION_NAME != NULL.
-
-	* varasm.c (named_section): Accept any decl.
-
-Mon May  6 16:41:08 1996  Stan Cox  (coxs@dg-rtp.dg.com)
-
-	* final.c (final_scan_insn): Modify conditional moves whose cc is
-	nonstandard.
-
-	* c-common.c (decl_attributes): Chain multiple attributes correctly.
-
-Mon May  6 15:41:43 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)
-
-	* stmt.c (expand_decl): Don't deduce alignment of SIZE from
-	DECL_ALIGN; use TYPE_ALIGN instead.
-
-	* function.c (assign_parms): Set RTX_UNCHANGING_P in stack_parm
-	if parm is read-only.
-
-	* c-common.c (truthvalue_conversion, case ADDR_EXPR): Don't
-	treat address of external decl as always nonzero.
-
-Mon May  6 11:33:57 1996  Jason Merrill  <jason@yorick.cygnus.com>
-
-	* c-decl.c (start_decl): Check -fno-common here.
-	* varasm.c (assemble_variable): Instead of here.
-	* final.c (end_final): Likewise.
-	* c-common.c (init_attributes, decl_attributes): Add A_COMMON.
-
-Mon May  6 11:12:39 1996  Mike Stump  <mrs@cygnus.com>
-
-	* expr.c (expand_increment): Add third parameter to know when to
-	ignore the result value.
-	(store_constructor): Likewise
-	(expand_expr, case {PRE,POST}{INC,DEC}REMENT_EXPR): Likewise.
-	* tree.c (stabilize_reference): Always ignore the first operand of
-	COMPOUND_EXPRs.
-
-Mon May  6 13:14:45 1996  Jim Wilson  <wilson@cygnus.com>
-
-	* sh.c (gen_shifty_op): Truncate VALUE to avoid out of bounds array
-	access.
-
-	* expr.c (expand_expr, case INDIRECT_REF): Delete obsolete code
-	to special case a SAVE_EXPR operand.
-
-Mon May  6 10:00:12 1996  Pat Rankin  <rankin@eql.caltech.edu>
-
-	* vax.h (ASM_OUTPUT_MI_THUNK): Define.
-
-Mon May  6 09:49:10 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>
-
-	* m68k/linux.h: Use the new trampoline definition.
-	(TRAMPOLINE_TEMPLATE, TRAMPOLINE_SIZE): Deleted.
-	(INITIALIZE_TRAMPOLINE): Changed.
-	(FINALIZE_TRAMPOLINE, CLEAR_INSN_CACHE): New.
-
-Mon May  6 09:43:55 1996  Patrick J. LoPresti  (patl@lcs.mit.edu)
-
-	* rtlanal.c (rtx_addr_varies_p): Scan operands of type `E'.
-
-Mon May  6 09:04:40 1996  H.J. Lu  (hjl@gnu.ai.mit.edu)
-
-	* x-linux{,-aout} (BOOT_CFLAGS, STMP_FIXPROTO, STMP_FIXPROTO): Deleted.
-	* config/t-linux (BOOT_CFLAGS, STMP_FIXPROTO, STMP_FIXPROTO): New,
-	moved from x-linux.
-	* t-linux-aout: New file.
-	* configure (i[3456]86-*-linux*oldld*, i[3456]86-*-linux*aout*):
-	Set tmake_file to t-linux-aout.
-
-Sun May  5 22:13:22 1996  H.J. Lu  (hjl@gnu.ai.mit.edu)
-
-	* Makefile.in (gxx_include_dir): Change to $(prefix)/include/g++.
-	(old_gxx_include_dir): New - defined as $(libdir)/g++-include.
-	(cccp.o, cpplib.o): Also pass OLD_GPLUSPLUS_INCLUDE_DIR (set
-	from $(old_gxx_include_dir)).
-	* cccp.c (include_defaults_array): For C++, also search
-	OLD_GPLUSPLUS_INCLUDE_DIR.
-	* cpplib.c (default_include): Likewise.
-	* configure: Remove no-longer-needed support for --gxx-include-dir.
-
-Sun May  5 21:59:53 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>
-
-	* c-lex.c (check_newline): Fix #pragma parsing; issue error message
- 	for directive that starts with `p' but isn't `pragma'.
-
-Sun May  5 13:13:40 1996  Jeremy Bettis  <jeremy@hksys.com>
-
-	* objc/hash.c (hash_value_for_key): Prevent endless loop when 0 was
-	stored in a hashtable.
-
-Sun May  5 13:09:54 1996  Satoshi Adachi  (adachi@wisdom.aa.ap.titech.ac.jp)
-
-	* m68k/newsgas.h (SET_ASM_OP, ASM_WEAKEN_LABEL): Define.
-
-Sun May  5 12:48:08 1996  Stephen L Moshier  (moshier@world.std.com)
-
-	* tree.c (build_real_from_int_cst): Remove spurious test for
-	 REAL_IS_NOT_DOUBLE.
-
-Sat May  4 12:17:58 1996  Richard Earnshaw (rearnsha@armltd.co.uk)
-
-	* arm.h (ASM_OUTPUT_MI_THUNK): Moved here from aout.h.  Rewrite to be
-	independent of the selected assembler, and to use optimal number of
-	instructions.
-	* arm/aout.h (ASM_OUTPUT_MI_THUNK): Delete.
-
-	* arm/aout.h (ASM_OUTPUT_OPTIONS): Define.
-	(ASM_FILE_START): Call ASM_OUTPUT_OPTIONS.
-	(BSS_SECTION_OP): Define.
-	(ASM_OUTPUT_ALIGN): Don't output anything if byte alignment is wanted.
-	(ASM_OUTPUT_ALIGNED_BSS): Define.
-	* arm.h (target_cpu_name): Delete.
-	(TARGET_SWITCHES): Delete "be" and "le".
-	(TARGET_OPTIONS): Delete "cpu-", add "tune=".
-	(struct arm_cpu_select): New struct.
-	(PROCESSOR_DEFAULT, TARGET_CPU_DEFAULT): Define.
-	(EXTRA_CC_MODES, EXTRA_CC_NAMES): Add CC_Cmode.
-	(CANONICALIZE_COMPARISON): Define.
-	* arm.c (arm_select): Declare and initialize.
-	(all_procs): Add arm7100.
-	(arm_override_options): Parse arm_select structure to determine
-	selected architecture and tuning parameters.
-	(output_option, output_options): New functions.
-	(arm_canonicalize_comparison): New function.
-	(arm_gen_movstrqi): Don't add a writeback of the index registers for
-	the last instructions.
-	(arm_select_cc_mode): Detect case where mode is carry out of unsigned
-	arithmetic.
-	(output_lcomm_directive): Use bss_section (), and use alignment
-	rather than rounding.
-	(get_arm_condition_code): Handle CC_Cmode.
-	(final_prescan_insn): Avoid boundary case where we would occasionally
-	inline MAX_INSNS_SKIPPED+1 insns.  Allow call_insns to be inlined in
-	APCS_32 mode if they are the last insn in the block.
-	* arm.md (*addsi3_compareneg): Delete potentially unsafe insn.
-	(*addsi3_compare_op[12]): New insns.
-	(*compare_addsi2_op[01]): New insns.
-	(*addsi3_carryin, *addsi3_carryin_alt[12]): New insns.
-	(*cmp_ite1): Use arm_add_operand instead of arm_rhs_operand.
-	* semi.h (PROCESSOR_DEFAULT): Default to PROCESSOR_ARM6.
-
-Fri May  3 10:52:11 1996 1996  Stan Cox  (coxs@dg-rtp.dg.com)
-
-	* i386.md (movesicc, movehicc) Pentium Pro conditional move insns.
-
-	* i386.h (TARGET_PENTIUMPRO, TARGET_CMOVE, BRANCH_COST,
-	ASM_OUTPUT_FUNCTION_PREFIX): New macros for conditional move.
-
-	* i386.c (asm_output_function_prefix, function_prologue): Setup
-	pic on Pentium Pro so a return will match the call.
-	(print_operand, put_condition_code): Output conditional move suffixes.
-
-Fri May  3 10:52:11 1996  Jason Merrill  <jason@yorick.cygnus.com>
-
-	* i386/{att.h,gas.h,bsd.h,sub386.h} (ASM_OUTPUT_MI_THUNK): Define.
-
-Wed May  1 17:54:51 1996  Doug Evans  <dje@cygnus.com>
-
-	* sparc.h (ASM_OUTPUT_MI_THUNK): Fix for sparc64, optimize.
-
-Wed May  1 13:28:32 1996  Jason Merrill  <jason@yorick.cygnus.com>
-
-	* i386/linux.h (ASM_OUTPUT_ALIGNED_BSS): Define.
-	* i386/sysv4.h: Likewise.
-	* sparc/sysv4.h: Likewise.
-
-Wed May  1 01:44:47 1996  Jeffrey A. Law  <law@cygnus.com>
-
-	* h8300/h8300.c (h8300_adjust_insn_length): Adjust the cost of
-	shifts by small constant values.
-	* h8300/h8300.md: Refine comments.  Remove names from many
-	patterns which don't need them.
-	(compare insns): Don't underestimate lengths.
-	(andqi3 expander): Remove constrains.
-	(andhi3): Don't underestimate length.
-	(andsi3): Don't underestimate length.  Improve code when upper
-	or lower half of destination is being cleared.
-	(indirect_jump_h8300, indirect_jump_h8300h): Simplify.
-	(shift insns): Remove useless "I" constraint.
-
-	* h8300/h8300.md (bcs type): Remove "bcs" type attribute and
-	all references.
-	(bcs insns): Delete.  No longer needed.
-	(setcc from bitfield): Rewrite to use zero_extract.  Provide
-	QImode, HImode and SImode variants.
-
-Tue Apr 30 18:13:09 1996  Jason Merrill  <jason@yorick.cygnus.com>
-
-	* svr4.h (SELECT_SECTION): If RELOC is true, put it in data.
-
-Tue Apr 30 17:26:30 1996  Jason Merrill  <jason@yorick.cygnus.com>
-
-	* fold-const.c (fold): Don't call convert to recreate tree nodes
-	we already have.
-
-Tue Apr 30 16:52:41 1996  Jeffrey A. Law  <law@cygnus.com>
-
-	* h8300/h8300.c (one_insn_adds_subs_operand): New function.
-	(h8300_adjust_insn_length): New function.
-	* h8300/h8300.h (ADJUST_INSN_LENGTH): Define.
-	* h8300/h8300.md: Remove obsolete comments.
-	(move patterns): Tweak constraints.
-	(tst patterns): Use "register_operand" for predicate.
-	(adds pattern): Use one_insn_adds_subs_operand to get length
-	computation correct.
-	(subs pattern): Similarly.
-	(movstrhi): Remove unused expander.
-	(fancy*, pxor, and-not patterns): Remove.  No longer needed.
-
-Tue Apr 30 13:35:06 1996  Michael Meissner  <meissner@tiktok.cygnus.com>
-
-	* rs6000/sol-c0.c (_start): Temporarily display calling
-	__do_global_ctors, since the Solaris linker doesn't handle the
-	relocations properly.
-
-Mon Apr 29 13:03:12 1996  Doug Evans  <dje@cyguns.com>
-
-	* sparc/vxsparc.h: sparc-aout.h renamed to aout.h.
-
-Mon Apr 29 00:35:15 1996  Jeffrey A. Law  <law@cygnus.com>
-
-	* h8300/h8300.c (names_small): Remove "BAD" postfix from
-	%r7 byte registers.
-	(rtx_equal_function_value_matters): Remove extra declaration.
-	(output_simode_bld): New function.
-	* h8300/h8300.h (NO_FUNCTION_CSE): Do define this.  Register
-	pressure makes cse-ing function addresses rarely a win.
-	(reg_class): Remove unnecessary register classes LONG_REGS,
-	SP_REG, SP_AND_G_REGS.
-	(REG_CLASS_NAMES): Corresponding changes.
-	(REG_CLASS_CONTENTS): Corresponding changes.
-	(REGNO_REG_CLASS): Corresponding changes.
-	(REG_CLASS_FROM_LETTER): Corresponding chagnes.
-	(output_simode_bld): Declare.
-	* h8300/h8300.md: Nuke comments for stuff which has been fixed.
-	(all patterns): Remove references to register class "a" (SP_REGS)
-	which no longer exists.
-	(many patterns): Accept auto-inc auto-dec addresses in more cases.
-	(zero_extendqisi2): New pattern for the H8/300.
-	(zero_extendhisi2): Only use zero_extendhisi2_h8300 when not optimizing.
-	(extendhisi2): Only use extendhisi2_h8300 when not optimizing.
-	(extendqisi2): New pattern for the H8/300.
-	(bitfield related patterns): Completely rewrite.
-	(fancy_bclr, fancy_btst): Deleted.  Redundant with new bitfield
-	patterns.
-	(addhi3 pattern for h8300): Handle case where we can't make matching
-	constraints (works around hard to fix reload problem).
-	(stack_pointer_manip): Delete.
-	(and not patterns): New combiner patterns.
-
-	* pa/pa.h (DBX_OUTPUT_MAIN_SOURCE_FILE_END): Make sure the
-	final $CODE$ subspace is in the $TEXT$ space.
-
-Sun Apr 28 14:52:21 1996  Jason Merrill  <jason@yorick.cygnus.com>
-
-	* svr4.h (ASM_OUTPUT_SECTION_NAME): If no decl is specified,
- 	make the section read/write data.
-
-Sat Apr 27 10:28:59 1996  Michael Meissner  <meissner@wogglebug.tiac.net>
-
-	* rs6000/t-ppcgas (MULTILIB_EXCEPTIONS): Don't allow -mrelocatable
-	and -mcall-sysv-noeabi.
-
-	* rs6000/sysv.h (SUBTARGET_OVERRIDE_OPTIONS): The -mcall-aix
-	option sets -meabi.  Don't allow -mrelocatable without -meabi.
-
-Fri Apr 26 16:10:46 1996  Doug Evans  <dje@cygnus.com>
-
-	* sparc/sparc.md (*smacsi,*smacdi,*umacdi): Fix constraint on
-	operand 0.
-
-Fri Apr 26 14:36:33 1996  Michael Meissner  <meissner@tiktok.cygnus.com>
-
-	* gcc/config/i960/t-{960bare,vxworks960} (MULTILIB*): Add
-	soft-float multilib support.
-
-Fri Apr 26 06:38:56 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)
-
-	* stor-layout.c (layout_decl): Turn off DECL_BIT_FIELD for BLKmode
-	that's properly aligned and a multiple of a byte.
-
-Thu Apr 25 22:43:19 1996  Doug Evans  <dje@cygnus.com>
-
-	* i386/gas.h (ASM_OUTPUT_ALIGN): #if 0 out again.
-	Undoes change of Apr. 9.
-	* i386/go32.h (ASM_OUTPUT_ALIGN): Define.
-
-Thu Apr 25 14:05:33 1996  Richard Kenner  (kennervlsi1.ultra.nyu.edu)
-
-	* calls.c (expand_call): In inlining case, if BEFORE_CALLS is
-	zero, start looking at first insn (one more place).
-
-	* expr.c (expand_builtin, case BUILT_IN_SETJMP): CLOBBER the
-	static chain after label at setjmp point.
-
-Thu Apr 25 09:02:24 1996  Michael Meissner  <meissner@tiktok.cygnus.com>
-
-	* rs6000.c (print_operand{,_address}): Correct compile error if
-	TARGET_EABI is not defined.  Also, just call small_data_operand,
-	without testing the ABI.
-	(rs6000_select_section): Ditto.
-
-	* rs6000/sysv4.h (CC1_SPEC): For -mcall-solaris, don't pass
-	-mno-main-init.
-
-Wed Apr 24 18:26:48 1996  Brendan Kehoe  <brendan@lisa.cygnus.com>
-
-	* collect2.c (handler): Delete export_file when we get a signal.
-
-Wed Apr 24 14:54:44 1996  Jeffrey A. Law  <law@cygnus.com>
-
-	* pa/pa1-ghpux.h (LINK_SPEC): Define.  Link in PA1.1 libraries
-	by default.
-	* pa/{pa1-ghpux9.h, pa1-hpux.h, pa1-hpux9.h}: Likewise.
-
-Wed Apr 24 11:12:06 1996  Michael Meissner  <meissner@tiktok.cygnus.com>
-
-	* configure (powerpc{,le}-*-eabi*): Use t-ppc{,gas}, instead of
-	t-eabi{,gas}.
-	(powerpc-*-linux,powerpcle-*-solaris): Add definitions.
-	(MULTILIB_DIRNAMES): Pick shorter names for the multilib
-	directories.
-	(MULTILIB_*): Do not build -msdata versions of the library.  Build
-	both system V and eabi versions of the libraries.
-
-	* rs6000/t-ppc{,gas} (MULTILIB*): Don't build -msdata versions of
-	the libraries.  Split -mcall-sysv libraries into
-	-mcall-sysv-{eabi,noeabi} varients.
-	(LIB2FUNCS_EXTRA): Add eabi.S, eabi-ctors.c.
-	(eabi.S): Use eabi.S, not eabi.s for eabi.asm.
-	(crt files): Add support for Solaris crt files.
-
-	* rs6000/sol{2.h,-c0.c,-ci.asm,-cn.asm}: New files for Solaris
-	support.
-
-	* rs6000/linux.h: New file for Linux support.
-
-	* rs6000/eabi-ci.asm (ppc-asm.h): Include.
-	(.got section): Correct attribute.
-
-	* rs6000/eabi-c{i,n}.asm (.init,.finit): Add support for System V
-	style .init/.fini sections, that constructors and destructors
-	place a bl <func> in the appropriate section.
-
-	* rs6000/eabi-ctors.c (__do_global_{c,d}tors): Call __init, and
-	__fini to handle constructors/destructors in the .init, .fini
-	sections.
-
-	* rs6000/{eabi,sysv}.h: Move most eabi configuration stuff from
-	eabi.h to sysv.h.
-
-	* rs6000/sysv.h (TARGET_*): Convert -mcall-xxx from a switch into
-	an option.  Add -mcall-{solaris,linux,sysv-eabi,sysv-noeabi}
-	options.  Add -m{,no-}eabi options to control whether we adhere to
-	the System V spec or the EABI spec.  Add -m{,no-}regnames to
-	control whether registers are printed out as %r0 instead of 0.
-	(SUBTARGET_OVERRIDE_OPTIONS): Add support for new -mcall options.
-	(FP_ARG_MAX_REG): Use new macros for ABI conformance.
-	(RS6000_REG_SAVE): Ditto.
-	(STACK_BOUNDARY,BIGGEST_ALIGNMENT): If eabi, align to 8 byte
-	boundary, otherwise 16 byte.
-	(EXTRA_SECTIONS): Add .init, .fini sections.
-	(*_SPEC): Reorganize so that the different targets all have sub
-	specs that go in the specs file.  Add support for linux and
-	Solaris targets.
-
-	* rs6000/{sysv4,eabi}*.h (*_SPECS): Only override the default
-	spec, all other specs moved to sysv4.h.
-	(RS6000_ABI_NAME): Use RS6000_ABI_NAME to set the default ABI
-	name, not TARGET_DEFAULTS.
-
-	* rs6000/xm-sysv4.h (alloca): Properly declare alloca if compiler
-	is not GCC.
-	(DONT_DECLARE_SYS_SIGLIST): Define.
-
-	* rs6000.c (rs6000_abi_name): New global for getting the results
-	of -mcall-xxx.
-	(rs6000_reg_names): New global for holding the normal register
-	names.
-	(alt_reg_names): Alternate register names for -mregnames.
-	(rs6000_override_options): If -mregnames, copy alt_reg_names into
-	rs6000_reg_names.
-	(input_operand): Recognize ABI_SOLARIS.
-	(small_data_operand): Ditto.
-	(init_cumulative_args): Ditto.
-	(function_arg{,_boundary,_advance,_partial_nregs}): Ditto.
-	(function_arg_pass_by_reference): Ditto.
-	(setup_incoming_varargs): Ditto.
-	({rs6000,debug}_stack_info): Ditto.
-	(output_{prolog,epilog}): Ditto.
-	(print_operand): %$ prints '.' on Solaris, '$' elsewhere.
-	(print_operand{,_address}): If not eabi, use @sdarel for small
-	data references.
-	(rs6000_stack_info): Only emit __eabi call if TARGET_EABI.
-
-	* rs6000.h (*_SPECS): Move the System V specs to svr4.h.
-	(ABI_SOLARIS): New ABI, mostly like System V.
-	(EXTRA_CONSTRAINT): Use ABI_SOLARIS like ABI_V4.
-	(RETURN_ADDRESS_OFFSET): Ditto.
-	(LEGITIMATE_SMALL_DATA_P): Ditto.
-	(RETURN_IN_MEMORY): On Solaris, small structures are returned in
-	registers.
-	(REGISTER_NAMES): Use rs6000_reg_names array, instead of string
-	literals.
-	(DEBUG_REGISTER_NAMES): Define.
-	(ADDITIONAL_REGISTER_NAMES): Add sp, toc aliases.
-	(PRINT_OPERAND_PUNCT_VALID_P): Recognize $ as a punctuation char.
-
-	* rs6000.md (got & call patterns): Use ABI_SOLARIS to mean the
-	same as ABI_V4.
-	(branch patterns): Use %$ for the current location, not just $.
-
-	* va-ppc.h: Add Solaris support.
-
-Tue Apr 23 20:02:13 1996  Doug Evans  <dje@cygnus.com>
-
-	* sparc/sparc.c (output_function_prologue): In -mbroken-saverestore
-	case, %sp = %fp - size.
-	* sparc/t-splet (TARGET_LIBGCC2_CFLAGS): Delete.
-	* sparc/sparc.md (isa attribute): Add sparclet.
-	(*smacsi,*smacdi,*umacdi): Use match_operand, not match_dup
-	for third arg.
-	(*mulsidi3_sp32,const_mulsidi3,*umulsidi3_sp32,const_umulsidi3): Use
-	smuld,umuld for sparclet.
-
-Tue Apr 23 16:28:28 1996  Michael Meissner  <meissner@wombat.gnu.ai.mit.edu>
-
-	* config/m68k/m68kemb.h: Add {LINK,STARTFILE,LIB,SUBTARGET}_SPEC, so
-	gcc will use libgloss for supported target boards {idp,mvme,bcc}.
-
-Tue Apr 23 16:00:28 1996  Per Bothner  <bothner@cygnus.com>
-
-	* expr.c (store_constructor):  Fix test for missing array elements.
-
-Tue Apr 23 11:21:09 1996  Stephen L Moshier  (moshier@world.std.com)
-
-	* config/i386/sco5.h (BSS_SECTION_ASM_OP): Use `data' directive.
-	(ASM_OUTPUT_ALIGNED_LOCAL): Generate an `lcomm' directive.
-	(TARGET_DEFAULT): Include TARGET_IEEE_FP.
-	(CPP_PREDEFINES): Include Di386.
-
-Mon Apr 22 12:00:46 1996  David Edelsohn  <edelsohn@mhpcc.edu>
-
-	* rs6000.h (BIGGEST_FIELD_ALIGNMENT): Delete.
-	(ADJUST_FIELD_ALIGN, ROUND_TYPE_ALIGN): Define.
-	* sysv4.h (BIGGEST_FIELD_ALIGNMENT): Delete.
-	(ADJUST_FIELD_ALIGN, ROUND_TYPE_ALIGN): Undefine.
-	* win-nt.h (ADJUST_FIELD_ALIGN, ROUND_TYPE_ALIGN): Undefine.
-
-Sun Apr 21 17:52:36 1996  Jim Wilson  <wilson@cygnus.com>
-
-	* m68k/coff.h (ASM_OUTPUT_SECTION): Test DECL before
-	dereferencing it.
-
-	* cse.c (cse_process_notes): Handle SUBREG like ZERO_EXTEND.
-
-Sun Apr 21 12:57:12 1996  Doug Evans  <dje@cygnus.com>
-
-	* arm/aout.h (ASM_OUTPUT_MI_THUNK): Define.
-
-Sun Apr 21 09:50:09 1996  Stephen L Moshier  (moshier@world.std.com)
-
-	* choose-temp.c: Include sys/types.h before sys/file.h for sco3.2v5.
-
-Sun Apr 21 08:42:13 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)
-
-	* alpha.c (check_float_value): Cast args of bcopy to avoid warnings.
-
-Sat Apr 20 21:22:21 1996  David Edelsohn  <edelsohn@mhpcc.edu>
-
-	* stor-layout.c (layout_record): Use ADJUST_FIELD_ALIGN to modify
-	alignment of fields within records.
-
-Sat Apr 20 19:55:33 1996  Niels Moller  <nisse@lysator.liu.se>
-
-	* c-parse.in (typespec): Made <SomeProtocol> equivalent
-	to (id <SomeProtocol>).
-	(non_empty_protocolrefs): New nonterminal.
-
-Sat Apr 20 08:34:02 1996  J"orn Rennecke (amylaar@meolyon.hanse.de)
-
-        * stmt.c (check_for_full_enumeration_handling): Call case_tree2list
-	before checking for case expressions not corresponding to enumerators.
-	(mark_seen_cases): If SPARSENESS == 2, exploit AVL order.
-	Else, convert tree to list.
-	Set xlo to -1 if SPARSENESS == 1 search failed.
-	(expand_end_case): Avoid calling case_tree2list on list.
-
-Fri Apr 19 16:54:57 1996  Michael Meissner  <meissner@tiktok.cygnus.com>
-
-	* rs6000/win-nt.h (BIGGEST_FIELD_ALIGNMENT): Set to 64, not
-	32 that AIX uses.
-
-Fri Apr 19 16:40:38 1996  Stan Cox  <coxs@dg-rtp.dg.com>
-
-	* i386.md (movqi): Handle QImode values in %si and %di.
-
-Thu Apr 18 20:56:56 1996  Jim Wilson  <wilson@cygnus.com>
-
-	* sh.md (lshrsi3): Change gen_ashlsi3_d to gen_lshrsi3_d.
-
-Thu Apr 18 15:49:28 1996  Per Bothner  <bothner@cygnus.com>
-
-	* sparc.h (ASM_OUTPUT_MI_THUNK): Define.
-
-Thu Apr 18 15:19:26 1996  Jeffrey A. Law  <law@cygnus.com>
-
-	* h8300.md: Remove "type" attribute from all patterns
-	except those which have varying length branches.  Eliminate
-	obsolete "type" attributes.  Add additional comments about insn
-	length computation problems and further optimizations.  Add
-	"length" and "cc" attributes to insns without them, fix a few
-	length computations.  Remove patterns which are commented out.
-
-	* h8300.md (zero extension expanders and insns): Simplify, fix various
-	length problems, provide optimized versions for the h8300 and h8300h.
-	(sign extension expanders and insns): Likewise.  Make them
-	nearly identical to zero_extension patterns and insns.
-
-Wed Apr 17 18:50:16 1996  Jeffrey A. Law  <law@cygnus.com>
-
-	* pa.h (SELECT_SECTION): Define.  Never place a something
-	into the read-only data section if it requires a reloc.
-
-	* pa.md (rotlsi3): Delete unnecessary and incorrect pattern.
-
-Wed Apr 17 17:15:40 1996  Michael Meissner  <meissner@tiktok.cygnus.com>
-
-	* rs6000.md (movdi): Never FAIL, even if operand[1] is not a
-	general operand, due to being in volatile memory.
-
-Wed Apr 17 15:20:10 1996  Brendan Kehoe  <brendan@lisa.cygnus.com>
-
-	* c-lex.c (check_newline): Rewrite to use tokens.
-	(handle_sysv_pragma): Take a token instead of a character.
-	* i960.c (process_pragma): Take the IDENTIFIER_POINTER tree
-	node instead of a character.
-	* sh.c (handle_pragma): Likewise.
-	* config/nextstep.c (handle_pragma): Likewise.
-	* h8300.c (handle_pragma): Likewise.
-	* i960.h (HANDLE_PRAGMA): Expect/pass 2nd arg of NODE, not CH.
-	* sh.h (HANDLE_PRAGMA): Likewise.
-	* config/nextstep.h (HANDLE_PRAGMA): Likewise.
-	* h8300.h (HANDLE_PRAGMA): Likewise.
-
-Wed Apr 17 14:28:43 1996  Doug Evans  <dje@cygnus.com>
-
-	* choose-temp.c: Don't include sys/file.h ifdef NO_SYS_FILE_H.
-	#include <stdio.h>.
-	(choose_temp_base): Make tmp,usrtmp, static locals.
-
-Wed Apr 17 08:41:02 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)
-
-	* alpha.c (alpha_emit_conditional_move): Fix some bugs in previous
-	change and do some cleanup.
-
-Tue Apr 16 18:53:05 1996  Jim Wilson  <wilson@cygnus.com>
-
-	* reload.c (push_reload): Add extra reload for inside of SUBREG if
-	it is CONSTANT_P.
-
-	* expr.c (do_store_flag): Rewrite last change to avoid compiler
-	warnings.
-
-	* reload.c (push_reload): When reuse an old reload, set the modes
-	to be the larger of the old and new modes.
-
-        * i960/t-960bare (xp-bit.c): Fix typo in source file name.
-
-Tue Apr 16 18:09:16 1996  Jeffrey A. Law  <law@cygnus.com>
-
-	* h8300/h8300.md (andhi3): If 2nd operand is a CONST_INT that
-	meets the 'J' constraint, then only two bytes are needed for
-	this insn.  Improve code generated for the h8300h when both
-	operands are registers.
-	(iorhi3, xorhi3): Likewise.  Rework to be nearly identical to andhi3.
-	(andsi3): If 2nd operand is a CONST_INT that meets the 'J'
-	constraint, then only two bytes are need for this insn.
-	Improve code generated for the h8300h regardless of the
-	type of the 2nd operand.  Make this pattern work on the h8300 too.
-	(iorsi3, xorsi3): Likewise.  Rework to be nearly identical to andsi3.
-	(iorqi3_internal): Make this pattern look more like andqi3_internal.
-	(one_cmplhi2, one_cmplsi2): Fix length computation for H8300H.
-
-Tue Apr 16 17:43:25 1996  J"orn Rennecke (amylaar@meolyon.hanse.de)
-
-	* i386.md (addsidi3_2): Handle non-MEM overlap case.
-
-Tue Apr 16 16:59:49 1996  Richard Henderson  <rth@tamu.edu>
-
- 	* function.c (expand_function_end): Allow TRAMPOLINE_TEMPLATE
-	to be omitted on systems for which it is not cost effective.
-	* varasm.c (assemble_trampoline_template): No such function
-	if no TRAMPOLINE_TEMPLATE.
-	* m68k.h: Greatly simplify the run-time trampoline code:
-	(TRAMPOLINE_TEMPLATE, TRANSFER_FROM_TRAMPOLINE): Delete define.
-	(TRAMPOLINE_SIZE, INITIALIZE_TRAMPOLINE): Changed.
-	(TRAMPOLINE_ALIGN): No point aligning to cache line.
-	(FINISH_INIT_TRAMPOLINE): New define.
-	* m68k/next.h: Instead of redefining INITIALIZE_TRAMPOLINE,
-	make use of the new FINISH_INIT_TRAMPOLINE.
-	* m68k/{m68k.h,next.h,aux.h} (FINISH_INIT_TRAMPOLINE):
-	Rename to FINALIZE_TRAMPOLINE.
-	* m68k/{linux.h,m68kv4.h}: Override trampoline macros.
-
-Tue Apr 16 16:02:50 1996  David Edelsohn  <edelsohn@mhpcc.edu>
-
-	* combine.c (make_field_assignment): Allow XOR in final case.
-
-Tue Apr 16 11:33:53 1996  J.T. Conklin  <jtc@rtl.cygnus.com>
-
-	* m68k.h (TARGET_SWITCHES): Don't remove MASK_68060 with -msoft-float.
-
-	* m68k.h (MULL_COST, MULW_COST, RTX_COSTS): Add costs for TARGET_68060.
-	* m68k.md (ashlsi_16, lshrsi_16): Disable pattern for TARGET_68060;
-	this special case is not faster for that cpu.
-
-Tue Apr 16 10:54:55 1996  Eliot Dresselhaus  <dresselh@rft30.nas.nasa.gov>
-
-	* alpha.c (alpha_emit_conditional_move): New function.
-	* alpha.h (alpha_emit_conditional_move): Declare it.
-	* alpha.md (cmov* define_expands): Use it.
-
-Tue Apr 16 09:06:17 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>
-
-	* function.h (struct function): New field returns_pointer.
-	* function.c (push_function_context_{to,from}): Save and restore
-	current_function_returns_pointer.
-
-	* config/svr4.h (ENDFILE_SPEC): Add missing `%s'.
-
-	* configure (m68k-*-linux*aout*): Set tmake_file to m68k/t-linux-aout.
-	(m68k-*-linux*): Set extra_parts.
-	* m68k/t-linux (INSTALL_ASSERT_H): New definition.
-	(CRTSTUFF_T_CFLAGS_S, TARGET_LIBGCC2_CFLAGS): New definitions.
-	* m68k/t-linux-aout: New file.
-	* m68k/linux.h (LIB_SPEC): Deleted.
-	(BSS_SECTION_ASM_OP, ASM_OUTPUT_ALIGNED_BSS): Define.
-
-	* m68k.h (TRAMPOLINE_ALIGNMENT): Specify alignment in bits, not bytes.
-
-Tue Apr 16 08:53:17 1996  Philippe De Muyter  <phdm@info.ucl.ac.be>
-
-	* final.c (final_scan_insn): Allow removal of redundant test and
-	compare instructions that use clobbers.
-
-Tue Apr 16 06:22:00 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)
-
-	* c-decl.c (clear_limbo_values): New function.
-	(pushdecl): Call it for function body blocks.
-
-	* objc/thr-decosf1.c (_objc_thread_id): Correct return type from
- 	int to _objc_thread_id.
-
-	* expr.c (expand_builtin, case BUILT_IN_LONGJMP): Make a decl
-	for __dummy, so we can call make_function_rtl on it.
-
-	* expr.c (expand_assignment): Don't pre-evaluate RHS if a CALL_EXPR
-	with a variable-size return.
-
-Mon Apr 15 17:38:45 1996  Ian Lance Taylor  <ian@cygnus.com>
-
-	* fixincludes: Fix undefined VOIDFUNCPTR in VxWorks 5.2 <time.h>.
-
-Mon Apr 15 15:12:16 1996  Jim Wilson  <wilson@cygnus.com>
-
-	* expr.c (do_store_flag): Before calling exact_log2, remove any
-	sign extension bits.
-
-	* reload1.c (emit_reload_insns): Call reload_reg_reaches_end_p for
-	every reg of multi-reg spill register.  Invalidate old info for multi
-	reg spill registers when only part survives to the end.
-
-Mon Apr 15 14:49:12 1996  Mike Stump  <mrs@cygnus.com>
-
-	* function.c (preserve_temp_slots): Only preserve temporaries that
-	happen to be at the current level.
-
-Mon Apr 15 14:08:12 1996  Doug Evans  <dje@canuck.cygnus.com>
-
-	* gansidecl.h: New file.
-	* choose-temp.c: New file.
-	* Makefile.in (xgcc): Depend on and link in choose-temp.o.
-	(collect2): Likewise.
-	(choose-temp.o): Add rule for.
-	* collect2.c: #include "gansidecl.h".
-	(const,PROTO): Delete.
-	(P_tmpdir): Delete.
-	(choose_temp_base): Declare as extern, delete internal copy.
-	(main): Update call to choose_temp_base.
-	* cpphash.c: #include "gansidecl.h".
-	(NULL,const,volatile): Delete.
-	* demangle.h: #include "gansidecl.h".
-	(PROTO,PTR,const): Delete.
-	* expr.h (const): Delete.
-	* fix-header.c: #include "gansidecl.h".
-	(const): Delete.
-	* gcc.c: #include "gansidecl.h".
-	(PROTO,VPROTO,PVPROTO,VPROTO,VA_START,NULL): Delete.
-	(GENERIC_PTR,NULL_PTR,P_tmpdir): Delete.
-	(choose_temp_base): Declare as extern, delete internal copy.
-	(concat): Rewrite to take a variable number of arguments.
-	(choose_temp_base_try,concat[346]): Delete.
-	(translate_options,set_spec,process_command,do_spec_1,
-	is_directory,main): Always use concat, not concat[346].  Pass
-	NULL_PTR as trailing arg to concat.
-	* genattr.c (main): Delete printing of "#define PROTO".
-	* machmode.h: #include "gansidecl.h".
-	(PROTO): Delete.
-	(HAVE_MACHINE_MODES): Move definition to standard place.
-	* recog.h: #include "gansidecl.h".
-	(PROTO,const): Delete.
-	* rtl.h: #include "gansidecl.h".
-	(PROTO,VPROTO,PVPROTO,VPROTO,VA_START,STDIO_PROTO): Delete.
-	(NULL,GENERIC_PTR,NULL_PTR): Delete.
-	* tree.h: Likewise.
-
-Mon Apr 15 08:49:20 1996  Tom May  (ftom@netcom.com)
-
-	* cse.c (invalidate_skipped_set): Ignore CLOBBER after calling
-	note_mem_written, not before.
-
-Mon Apr 15 08:22:03 1996  Philippe De Muyter  <phdm@info.ucl.ac.be>
-
-	* m68k.md (tstdi): Optimized for "d" case.
-	(movqi): Allow moving "i" into "a".
-	(zero_extendsidi2): Alternatives merged.
-	(extendplussidi): Fixed when operands 0 and 1 share a register.
-	(adddi_sexthishl32): Constraints reordered for better reload.
-	(adddi3,subdi_sexthishl32,subdi3,negdi2): Likewise.
-	(ashldi_sexthi): Accept "m" as operand 0.
-	(ashldi_const32): Alternatives merged.
-	(ashift patterns): Output "lsl" instead of "asl".
-	(beq0_di): If condition codes already set, output only branch insn.
-	(bne0_di,bge0_di,blt0_di): Likewise.
-	* m68k.c (notice_update_cc, case ASHIFT{,RT}, LSHIFTRT, ROTATE{,RT}):
-	Don't set CC_NO_OVERFLOW.
-	* m68k.h (TARGET_SWITCHES): Fix typo in "c68000" entry.
-
-Mon Apr 15 08:06:17 1996  Stephen L Moshier  (moshier@world.std.com)
-
-	* real.c (eadd1): Check for overflow on X plus X.
-
-Mon Apr 15 08:02:24 1996  J.T. Conklin  <jtc@cygnus.com>
-
-	* i386/netbsd.h (HAVE_SYSV_PRAGMA): Removed definition.
-	* config/netbsd.h (HAVE_SYSV_PRAGMA): Define.
-	(SET_ASM_OP): Define.
-
-Mon Apr 15 07:28:54 1996  Fila Kolodny <fila@ibi.com>
-
-	* configure: Add definition for host= into Makefile.
-	* build-make (CC): Pass -b $(host), not target.
-
-Mon Apr 15 05:12:39 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)
-
-	* expr.c (bc_expand_increment): Change declaration to return void.
-
-	* toplev.c (max_label_num_after_reload): New variable.
-	(rest_of_compilation): Set it.
-	* reorg.c (find_dead_or_set_registers): Only kill spill regs after
-	label made before jump2.
-
-	* combine.c (expand_field_assignment): Take SUBREG_WORD into
-	account when have STRICT_LOW_PART.
-	(make_extraction): Make a STRICT_LOW_PART at any low-order word.
-
-Mon Apr 15 03:43:11 1996  Jeffrey A. Law  <law@cygnus.com>
-
-	* flags.h (flag_function_sections): Declare.
-	* toplev.c (flag_function_sections): Define.
-	(compile_file): Add warnings when -ffunction-sections is
-	used with -g, or profiling.  Disable -ffunction-sections
-	when profiling is used.  Add warning when -ffunction-sections
-	is used on a target that doesn't support it.
-	* varasm.c (named_section): Make a copy of the section name
-	in case the original is in temporary storage.
-	(function_section): Set DECL_SECTION_NAME for each function
-	if flag_function_sections is on and the target supports it.
-	* dbxout.c (dbxout_function_end): New function.
-	(dbxout_function): Call dbxout_function_end if using extensions
-	and flag_function_sections is on.
-	* sparc/sysv4.h (ASM_OUTPUT_SECTION_NAME): Prefix a function
-	section's name with ".text%" when -ffunction-sections.
-
-Sun Apr 14 19:37:43 1996  Doug Evans  <dje@cygnus.com>
-
-	* toplev.c (main): Delete redundant test for -p used with -fbytecode.
-
-Sun Apr 14 19:01:59 1996  John F. Carr <jfc@mit.edu>
-
-	* c-decl.c (finish_enum): Don't crash if no type can represent all
-	enumeration values.
-
-Sun Apr 14 18:56:40 1996  J.T. Conklin  <jtc@rtl.cygnus.com>
-
-	* m68k.md (ftruncdf2): Enable for m68060 systems.
-
-Sun Apr 14 18:49:30 1996  David L. Reese  (david.reese@east.sun.com)
-
-	* fold-const.c (range_test):  Don't convert hi_cst or lo_cst
-	to unsigned when folding signed range tests.
-
-Sun Apr 14 08:56:27 1996  Stephen L Moshier  <moshier@world.std.com>
-
-	* real.h (ereal_from_{int,uint}): Add new arg, MODE.
-	(REAL_VALUE_FROM{,_UNSIGNED}_INT): New arg, MODE.
-	* real.c (ereal_from_{int,uint}): New arg, MODE.
-	* cse.c (simplify_unary_operation): Add new arg to REAL_VALUE_FROM_INT.
-	* fold-const.c (fold_convert): Likewise.
-	* tree.c (real_value_from_int_cst): New arg, TYPE.
-	Pass mode to REAL_VALUE_FROM_INT.
-	(build_real_from_int_cst): Properly deal with truncation.
-
-Sun Apr 14 08:21:29 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)
-
-	* combine.c (try_combine): When substituting in output of I2,
-	ensure dest isn't clobbered in I2.
-
-	* combine.c (combine_instructions): In initial scan of insns,
-	handle a REG_INC note's affect on sign bit copies and nonzero bits.
-	(set_nonzero_bits_and_sign_copies): Treat a zero SET arg as a CLOBBER.
-
-Sun Apr 14 07:52:28 1996  Manor Askenazi  <manor@santafe.edu>
-
-	* objc/encoding.c (objc_skip_typespec): Don't abort for _C_UNDEF.
-
-Sat Apr 13 20:35:36 1996  Richard Henderson  (richard@atheist.tamu.edu)
-
-	* configure (m68k-apple-aux*): Rework to take advantange
-	of list of tm.h files and support all four gas/gld options.
-	* m68k/auxas.h, m68k/auxgas.h, m68k/auxgld.h, m68k/auxld.h: New files.
-	* m68k/auxstd.h, m68k/auxgnu.h: Deleted.
-
-Sat Apr 13 20:18:11 1996  Stephen L Moshier  <moshier@world.std.com>
-
-	* alpha.c (check_float_value): New function.
-	* alpha.h (CHECK_FLOAT_VALUE): Define.
-	(ASM_OUTPUT_FLOAT): Print the value in hex.
-
-Sat Apr 13 15:08:45 1996  Doug Evans  <dje@canuck.cygnus.com>
-
-	* configure: New target arm{,el}-*-coff*.
-	(cpu_default): Sort alphabetically.
-	* arm/coff.h: New file.
-	* arm/t-bare: New file.
-	* arm/arm.c (use_return_insn): Don't use return for naked functions.
-	(arm_valid_machine_decl_attribute): New function.
-	(arm_naked_function_p): New function.
-	(output_func_prologue): Naked functions don't have prologues.
-	(arm_expand_prologue): Likewise.
-	(output_func_epilogue): Likewise with epilogues.
-
-Sat Apr 13 11:31:32 1996  Jeffrey A. Law  <law@cygnus.com>
-
-	* h8300.c (adds_subs_operand): Fix thinko in last change.
-
-	* h8300.md (subhi3): Turn into a define_expand.
-	(subhi3 using adds_subs): New pattern.
-	(H8300 subhi): Derived from old subhi pattern.  Simplified.
-	(H8300H subhi): Likewise.
-	(subsi using adds_subs): New pattern.  Only used on H8300H.
-	(subsi_h8300): Allow "a" registers as destination.
-	(subsi_h8300h): Allow "a" registers as destination.  Simplify.
-
-	* h8300.md (bcs_qiqi, bcs_hihi, bs_hiqi): Fix thinkos
-	in last change.
-
-Sat Apr 13 08:59:48 1996  Fila Kolodny <fila@ibi.com>
-
-	* i370/mvs.h (ASM_DECLARE_FUNCTION_NAME): Don't write anything to
-	asm file, because everything is handled in FUNCTION_PROLOGUE.
-
-Sat Apr 13 07:55:38 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)
-
-	* alpha.c (alpha_emit_set_const_1): Renamed from
-	alpha_emit_set_const and static.
-	Remove change of Nov 26; again use normal mechanism for SImode.
-	(alpha_emit_set_const): New function.
-
-Fri Apr 12 18:19:39 1996  Jeffrey A. Law  <law@cygnus.com>
-
-	* h8300.c (adds_subs_operand, output_adds_subs): New functions.
-	* h8300.md (addhi3): Turn into a define_expand.
-	(addhi3 using adds_subs): New pattern.
-	(H8300 addhi): Derived from old addhi pattern.  Simplified.
-	(H8300H addhi): Likewise.
-	(addsi using adds_subs): New pattern.  Only used on H8300H.
-	(addsi_h8300): Allow "a" registers as destination.
-	(addsi_h8300h):  Simplify.  Allow "a" registers as destination.
-
-	* h8300.md (bcs): New attribute type.
-	(default_length): Compute correct length for bcs insns.
-	(bcs_qiqi, bcs_hihi, bs_hiqi): Use new type and update
-	to account for correct length computation.
-
-	* h8300/h8300.md (movhi_internal): Demand at least one operand to
-	be a register.
-	(movsi_h8300): Optimize loading certain constants.
-	(movsi_h8300h): Likewise.
-
-	* h8300.h (NO_FUNCTION_CSE): Comment out.
-	(FUNCTION_ARG_REGNO_P): Properly define for TARGET_QUICKCALL.
-	(RETURN_IN_MEMORY): Don't return small structs in regs.
-
-	* h8300.c (const_costs): -4 and 4 are cheap on the h8300h.
-	(notice_update_cc): Remove references to "value2" field.
-
-	* h8300.c (dosize): Remove unused "fped" argument.  All callers
-	changed.  Handle add/sub of 5-8 bytes efficiently on the h8300h.
-
-	* h8300.c (print_operand): Handle new 'R' case for accessing
-	the 8-bit area.  Make code for 'Y' fall into code for 'R' when
-	operand is not a register.  Update some comments.
-	(h8300_tiny_data_p): New function.
-	(h8300_valid_machine_decl_attribute): Handle "tiny_data" attribute.
-	* h8300.h (OK_FOR_U): Handle memory references into the
-	8-bit area.
-	(ENCODE_SECTION_INFO): Mark SYMBOL_REFs which refer to 8-bit area.
-	* h8300.md (many patterns): Use 'R' rather than 'X' for
-	operands that may be memory accesses into the 8-bit area.
-	(btst pattern): New pattern to set the cc0 (zbit) based on
-	data in the 8-bit area.
-
-	* h8300.md (one_cmplsi2): Fix length computation for h8300h.
-
-Fri Apr 12 14:34:39 1996  Doug Evans  <dje@cygnus.com>
-
-	* arm.md (*ldmsi,*stmsi): Use (mem (match_operand ...))
-	to avoid using indirect_operand (reload problems).
-	* arm/semi.h (CPP_PREDEFINES): Define __semi__ instead of semi.
-	* arm/aout.h (ASM_GENERATE_INTERNAL_LABEL): Use LOCAL_LABEL_PREFIX.
-	(ASM_OUTPUT_ADDR_{VEC,DIFF_ELT}): Likewise.
-
-Fri Apr 12 09:43:30 1996  Jason Merrill  <jason@yorick.cygnus.com>
-
-	* dbxout.c (dbxout_typedefs): Don't emit incomplete types yet.
-	(dbxout_symbol): Use DECL_ARTIFICIAL to recognize C++ implicit
-	typedefs.
-
-Thu Apr 11 21:56:26 1996  Doug Evans  <dje@cygnus.com>
-
-	* i386/t-winnt (winnt.o): Rewrite based on .c.o rule.
-	(oldnames.o,spawnv.o): Add rules for.
-
-Thu Apr 11 07:25:06 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)
-
-	* calls.c (expand_call): In inlining case, if BEFORE_CALLS is
-	zero, start looking at first insn.
-
-	* expr.c (preexpand_calls, case CALL_EXPR): Rework to properly
-	avoid expanding functions returning variable size objects.
-
-	* integrate.c (expand_inline_function): When comparing types
-	of formal and actual, use TYPE_MAIN_VARIANT.
-
-Thu Apr 11 00:48:29 1996  Jeffrey A. Law  <law@cygnus.com>
-
-	* h8300/lib1funcs.asm (modnorm): New function(s).  Like divnorm,
-	but gets the sign bit right for modulo operations.
-	(__modhi3, modsi3): Use modnorm.
-
-	* h8300/h8300.c (dosize): On the h8300h, do 4 byte adjustments
-	using adds and subs.
-	* h8300/h8300.h (LONG_LONG_TYPE_SIZE): Always make this 32bits.
-	Reverses change from Apr 2, 1996.
-
-Wed Apr 10 18:39:52 1996  Doug Evans  <dje@canuck.cygnus.com>
-
-	* sparc.h (ASM_OUTPUT_INTERNAL_LABELREF): Delete.
-	(FUNCTION_PROFILER): Use ASM_GENERATE_INTERNAL_LABEL instead.
-
-	* sparc.c (sparc_override_options): 90c701 renamed to tsc701.
-	(eligible_for_epilogue_delay_slot): Don't allow anything if
-	-mbroken-saverestore.
-	(output_function_prologue): Only use trivial save's if
-	-mbroken-saverestore.
-	* sparc.h (CPP_SPEC): Handle -mcpu={sparclet,tsc701}.
-	(ASM_SPEC): Likewise.
-	({MASK,TARGET}_BROKEN_SAVERESTORE): Define.
-	(enum processor_type): 90C701 renamed to TSC701.
-	* sparc.md (attr cpu): 90c701 renamed to tsc701.
-	* sparc/splet.h (SUBTARGET_SWITCHES): Recognize -mbroken-saverestore.
-
-Wed Apr 10 17:56:02 1996  Stan Cox  <coxs@dg-rtp.dg.com>
-
-	* m88k/dgux.h (EXTRA_SPECS): Define.
-	(ASM_SPEC,CPP_SPEC,STARTFILE_SPEC): Use EXTRA_SPECS.
-	* m88k/dguxbcs.h (ASM_SPEC,CPP_SPEC,STARTFILE_SPEC): Use EXTRA_SPECS.
-	* m88k/m88k.c (output_ascii) Output literal HT.
-
-Wed Apr 10 17:28:37 1996  James Carlson  (carlson@xylogics.com)
-
-	* configure: Work around AIX bug when defining SUBDIRS.
-
-Wed Apr 10 17:22:42 1996  Paul Eggert  <eggert@twinsun.com>
-
-	* cexp.y (parse_number): Don't reject long long constants unless
-	pedantic.
-
-Wed Apr 10 17:19:56 1996  Stephen L. Moshier  (moshier@world.std.com)
-
-	* real.c (e64toe): Properly distinguish between NaN and infinity
-	bit patterns for real-words-big-endian targets.
-
-Wed Apr 10 17:17:26 1996  Richard Earnshaw  (rearnsha@armltd.co.uk)
-
-	* real.c (endian): Add two explicit casts.
-	(e64toe): Support ARM extended precision fp format.
-	Check negative infinities properly for NaNs.
-	(toe64): Support ARM extended precision fp format.
-
-Tue Apr  9 12:53:31 1996  Doug Evans  <dje@canuck.cygnus.com>
-
-	* i386/gas.h (ASM_OUTPUT_ALIGN): Define and use .balign.
-
-Tue Apr  9 12:48:45 1996  Stephen L Moshier  (moshier@world.std.com)
-
-	* sparc.c (fp_zero_operand): Exclude -0.0.
-
-Tue Apr  9 07:11:24 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)
-
-	* alpha.c: Fix typo in last change.
-
-	* tree.c (substitute_in_expr): Don't return new expression if
-	nothing changed.
-	(substitute_in_type): Deleted, not used.
-	* tree.h (substitute_in_type): Delete declaration.
-
-Mon Apr  8 16:30:18 1996  Jeffrey A. Law  <law@cygnus.com>
-
-	* flow.c (find_auto_inc): Also make sure there aren't
-	any sets of the incremented register between the memory
-	reference and increment insn.
-
-Mon Apr  8 15:41:14 1996  John Polstra  (jdp@polstra.com)
-
-	* configure (i[3456]86-*-freebsdelf*): New target.
-	* i386/freebsd-elf.h: New file.
-	* i386/x-freebsd (USER_H): New define; to null.
-
-Mon Apr  8 14:44:41 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)
-
-	* c-decl.c (finish_function): Always warn if main doesn't return int.
-
-Mon Apr  8 13:01:37 1996  Michael Meissner  <meissner@tiktok.cygnus.com>
-
-	* rs6000.c (got_operand): New function, returns true if the
-	operand can go in V.4's GOT.
-	(rs6000_pic_register): New variable.
-	(output_epilog): Reset rs6000_pic_register.
-
-	* rs6000.h (rs6000_pic_register,got_operand,flag_pic): Add
-	declarations.
-	(PREDICATE_CODES): Add got_operand.
-
-	* rs6000.md (movsi): Add support for V.4's -fpic and -FPIC.
-	(init_v4_pic): Initialize the V4 pic register if needed.
-	(call patterns): If -fpic/-fPIC, call function with @plt suffix.
-
-	* t-eabigas (MULTILIB_DIRNAMES): Remove errant pic directory.
-
-	* rs6000.c (output_prolog): Correctly store & restore the
-	arguments to main in their correct save location, when calling the
-	start function.
-
-Mon Apr  8 13:01:37 1996  David Reese  <Dave.Reese@East.Sun.COM>
-
-	* rs6000.c (print_operand): Use reg_names to print registers.
-
-Fri Apr  5 00:40:19 1996  Jeffrey A. Law  <law@cygnus.com>
-
-	* h8300.c (h8300_valid_machine_decl_attribute): Use underscores,
-	not dashes in attributes.
-	(h8300_funcvec_function_p): Corresponding changes.
-	(h8300_interrupt_function_p): Likewise.
-
-	* pa.h (INIT_CUMULATIVE_INCOMING_ARGS): Initialize "indirect"
-	field to zero.
-
-Thu Apr  4 12:52:11 1996  Jim Wilson  <wilson@chestnut.cygnus.com>
-
-	* loop.c (combine_givs): Use new macro GIV_SORT_CRITERION.
-	New variable giv_array.  Loop over giv_array instead of following
-	next_iv links.
-	(giv_sort): New function.
-	* sh.h (GIV_SORT_CRITERION):  Define.
-
-	* c-typeck.c (push_init_level): When output alignment for structure
-	field, add check to verify it is the next field to be output.
-
-Thu Apr  4 12:19:26 1996  David Mosberger-Tang  <davidm@AZStarNet.com>
-
-	* alpha.c: Don't include stamp.h for Linux.
-
-Thu Apr  4 12:17:08 1996  Richardg Kenner  (kenner@vlsi1.ultra.nyu.edu)
-
-	* objc/Makefile: Rename thread* to thr*.
-	* objc/thread.c: Rename thread-* to thr-*.
-	* objc/thr-decosf1.c: Renamed from thread-decosf1.c
-	* objc/thr-irix.c: Renamed from thread-irix.c.
-	* objc/thr-single.c: Renamed from thread-single.c.
-	* objc/thr-solarius.c: Renamed from thread-solaris.c.
-	* objc/thr-win32.c: Renamed from thread-win32.c.
-	* objc/objc-api.h: Include thr.h, not thread.h.
-	* objc/runtime.h, objc/sarray.h: Likewise.
-
-	* i386.md (ashldi3_const_int): Don't recognize if won't match
-	constraint of operand 2.
-
-Thu Apr  4 11:40:55 1996  Michael Meissner  <meissner@tiktok.cygnus.com>
-
-	* config/fp-bit.c (EXTENDED_FLOAT_STUBS): If EXTENDED_FLOAT_STUBS
-	is defined, define all of the XF/TF functions that might be
-	generated that we don't have code for yet.
-
-	* i960/t-(vxworks960,960bare): (LIB2FUNCS_EXTRA): Make and
-	compile xp-bits.c that defines EXTENDED_FLOAT_STUBS.
-
-	From: steve chamberlain  <sac@slash.cygnus.com>
-	* i386/x-cygwin32 (LANGUAGES): Delete.
-	* i386/xm-cygwin32.h (EXECUTABLE_SUFFIX): Set to .exe.
-	* rs6000/xm-cygwin32.h (EXECUTABLE_SUFFIX): Set to .exe.
-
-Wed Apr  3 14:10:16 1996  Jim Wilson  <wilson@chestnut.cygnus.com>
-
-	* expr.c (emit_push_insn): Clobber register only if it is non-zero.
-
-Wed Apr  3 11:31:55 1996  Jeffrey A. Law  <law@cygnus.com>
-
-	* h8300.h (h8300_funcvec_function_p): Declaration moved here.
-	* h8300.c (h8300_funcvec_function_p): Declaration removed from here.
-	* h8300.md (tstqi): Tweak to work like other tstXX patterns.
-	(cmphi): Turn into a define_expand.  Add two anonymous
-	matterns to match the output of the cmphi expander.
-	(cmpsi): Accept constants as the second input operand.
-
-Tue Apr  2 13:52:30 1996  Jeffrey A. Law  <law@cygnus.com>
-
-	* h8300.md (movqi_internal): Remove useless alternative(s).  Fix
-	lengths and simplify by reordering remaining alternatives.
-	(movstrictqi, movhi_internal, movstricthi): Likewise.
-	(movsi_h8300h, movsf_h8300h): Likewise.
-
-	* h8300/h8300.c (extra_pop): Remove unused variable.
-	(current_function_anonymous_args): Likewise.
-	(function_prologue): Remove incorrect varargs/stdarg
-	related code.
-	(function_epilogue): Likewise.
-	(function_arg): Never pass unnamed arguments in registers.
-	* h8300.h (LONG_LONG_TYPE_SIZE): Use 64bits when ints are 32bits.
-	(SETUP_INCOMING_VARARGS): Remove definition.
-
-Mon Apr  1 16:59:48 1996  Ian Lance Taylor  <ian@cygnus.com>
-
-	* fixincludes: Fix signal prototype on SunOS to avoid pedantic C++
-	error.
-
-Mon Apr  1 16:16:34 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)
-
-	* expr.c (get_inner_reference): When finding mode to access bitfield
-	that ends up properly aligned, use mode class of its type unless
-	type's mode was BLKmode.
-
-Mon Apr  1 13:45:30 1996  Jeffrey A. Law  <law@cygnus.com>
-
-	* h8300.c (interrupt_handler): Renamed from pragma_interrupt.
-	All references changed.
-	(function_prologue): Set interrupt_handler if the current
-	function has the "interrrupt-handler" attribute.
-	(small_call_insn_operand): New function.
-	(h8300_interrrupt_function_p): New function.
-	(h8300_funcvec_function_p): New function.
-	(h8300_valid_machine_decl_attribute): New function.
-	* h8300.h (VALID_MACHINE_DECL_ATTRIBUTE): Define.
-	* h8300.md (call insns): Handle calls through the
-	function vector.  Indirect calls and calls through
-	the function vector have a length of two bytes.
-
-See ChangeLog.10 for earlier changes.
diff --git a/gcc/Makefile.in.flc b/gcc/Makefile.in.flc
deleted file mode 100644
index 556715e..0000000
--- a/gcc/Makefile.in.flc
+++ /dev/null
@@ -1,7 +0,0 @@
-
-(fast-lock-cache-data 2 (quote (12789 . 11914)) (quote (t ("^\\([^ 
-	][^:#= 	
-]*\\)[ 	]*[*:+]?:?=" (1 font-lock-variable-name-face)) ("\\$[({]\\([a-zA-Z0-9_]+\\)[})]" (1 font-lock-reference-face prepend)) ("^\\([^ 
-	#:]+\\([ 	]+[^ 	
-#:]+\\)*\\)[ 	]*:\\([ 	]*$\\|\\([^=
-].*$\\)\\)" (1 font-lock-function-name-face prepend)) ("^[ 	]+$" (0 makefile-space-face)) ("^	+#" (0 makefile-space-face t)) ("^\\( +\\)	" (1 makefile-space-face)))) (quote ((font-lock-comment-face 102861 102907 102502 102720 101919 102022 101122 101225 100334 100437 99537 99640 99254 99323 98857 98902 98300 98505 97693 97738 97090 97132 96999 97089 95823 96183 95550 95740 95066 95202 94825 94977 94716 94786 93736 93843 93457 93495 93038 93130 92978 93003 92953 92960 92939 92946 92929 92938 92908 92922 92880 92901 92857 92873 92843 92850 92718 92727 92662 92711 92461 92486 92420 92460 91942 91997 91861 91881 91818 91852 91643 91716 90754 91175 90560 90604 90384 90559 90181 90224 89994 90055 89393 89525 89247 89313 88913 88950 88385 88426 88063 88086 87432 87457 87161 87187 86294 86305 86239 86287 86193 86227 85632 85671 85474 85523 84753 84820 84362 84535 83326 83349 83287 83320 83234 83281 83171 83228 82927 82964 82604 82725 82497 82569 82377 82454 82131 82292 81833 81980 81590 81797 81468 81589 81042 81164 80270 80372 79839 79928 79531 79606 79445 79477 79079 79278 78955 79034 78913 78934 78818 78865 78661 78702 78513 78551 78346 78392 78025 78056 77951 77977 77683 77715 77528 77593 77319 77379 77123 77166 76402 77048 76162 76205 76007 76050 75632 75657 74969 75156 74663 74863 72933 72973 72430 72476 71833 71871 71656 71696 71522 71543 70905 71126 70764 70845 70608 70763 69332 69406 67542 67670 66190 66291 66162 66184 65655 65681 65627 65654 62956 62981 62775 62911 61110 61346 57843 57901 57638 57842 57626 57630 57493 57625 57385 57486 53468 53760 53141 53467 53068 53140 52864 53067 52624 52710 52302 52469 52199 52249 51824 51875 45282 45312 45173 45209 44393 44432 43433 43509 43151 43222 41731 41760 41636 41730 41591 41635 41207 41289 40578 40694 39908 40059 39481 39545 38853 38894 37698 37746 36879 36944 36542 36693 36387 36516 35892 36167 35644 35709 35594 35643 35577 35588 35540 35566 35416 35532 34472 34785 33831 34155 33679 33810 33217 33418 32579 32776 31746 32205 31440 31596 30422 30735 29600 30055 29197 29513 28853 29098 28834 28846 28549 28648 28360 28486 28102 28359 27807 27861 27644 27712 27395 27485 26998 27176 26871 26919 26776 26808 26298 26461 26152 26223 25788 25965 25515 25645 25381 25492 24889 25014 24729 24851 24375 24567 24275 24316 24119 24176 23939 24029 23809 23856 23664 23740 23548 23611 23255 23425 22931 23000 22891 22929 22808 22890 22788 22807 22725 22787 22269 22714 22237 22268 22075 22077 22064 22068 21702 22052 21155 21195 20790 20814 19670 19726 19587 19669 19306 19497 18670 18707 18548 18625 18456 18516 18277 18327 18116 18156 17988 18074 17948 17987 17062 17315 16957 17005 16836 16956 16714 16823 16627 16652 16604 16621 16340 16557 16038 16138 15892 15987 15613 15789 15380 15572 14946 15007 14878 14890 14746 14800 14606 14709 14520 14583 14379 14518 14290 14367 14061 14271 14020 14060 13950 13997 13874 13928 13792 13853 13722 13771 13657 13691 13605 13639 13474 13529 13346 13402 12900 13144 12743 12887 12607 12716 12535 12593 12356 12451 12199 12315 11862 12174 11715 11837 11632 11696 11553 11599 11506 11538 11391 11477 11258 11371 11125 11238 10959 11124 10848 10942 10743 10830 10618 10729 10451 10603 10378 10432 10149 10362 10058 10120 9954 10039 9836 9938 9747 9810 9631 9727 9312 9508 9241 9291 9081 9210 8923 9060 8856 8890 8789 8838 8688 8770 8637 8681 8600 8622 8462 8559 8395 8434 8301 8361 8250 8276 8120 8219 8033 8083 7930 7990 7837 7891 7711 7780 7617 7683 7524 7589 7434 7500 7343 7408 5894 5931 5618 5863 5496 5564 5430 5465 5333 5396 4972 5125 4803 4880 4620 4723 4362 4532 4329 4332 4313 4320 4161 4303 4039 4124 3355 3447 3206 3312 3145 3194 3027 3128 2832 3015 2718 2776 2678 2702 2475 2673 2392 2458 2231 2281 2180 2210 1946 2018 1536 1887 1378 1470 1273 1345 1192 1262 1091 1191 1014 1084 808 1013 592 807 359 591 135 358 104 134 1 103) (font-lock-string-face 99107 99109 99091 99101 99084 99087 99062 99078 98710 98712 98694 98704 98687 98690 98665 98681 98034 98036 98018 98028 98011 98014 97989 98005 97427 97429 97411 97421 97404 97407 97382 97398 96995 96997 96983 96986 96932 96934 96917 96920 96906 96908 96892 96895 96861 96884 96827 96829 96815 96818 96764 96766 96749 96752 96738 96740 96724 96727 96693 96716 96662 96664 96650 96653 96599 96601 96584 96587 96573 96575 96559 96562 96528 96551 96494 96496 96482 96485 96431 96433 96416 96419 96405 96407 96391 96394 96360 96383 96329 96331 96317 96320 96266 96268 96251 96254 96240 96242 96226 96229 96195 96218 95804 95806 95787 95790 95757 95759 95752 95755 95447 95458 95423 95432 95411 95419 95391 95402 95367 95376 95355 95363 94077 94085 93500 93640 93389 93440 93337 93339 93311 93326 91269 91280 89854 89938 89770 89779 89759 89767 89706 89742 89687 89697 89630 89647 89548 89593 89533 89539 88531 88562 88497 88517 88480 88483 85337 85345 85151 85159 84558 84582 84544 84552 80836 80839 80564 80567 80450 80453 80424 80427 79803 79825 79779 79787 79750 79752 79730 79734 79666 79668 79645 79649 77213 77220 77201 77207 76366 76399 76352 76360 75477 75479 75458 75461 75411 75417 75213 75275 73966 73977 73949 73962 73933 73945 73920 73929 73204 73206 73195 73198 73137 73139 73104 73120 73088 73098 73072 73076 73058 73062 73041 73044 72874 72876 72861 72864 72843 72846 72823 72835 72811 72815 72790 72792 72779 72782 72767 72769 72762 72765 72644 72651 72632 72638 72614 72619 71239 71284 71134 71139 70340 70474 70328 70332 70287 70322 70129 70141 69975 70109 69963 69967 69922 69957 67349 67377 67335 67343 66666 66692 66652 66660 62622 62647 62393 62418 61967 61992 61698 61723 61441 61466 57977 57989 52575 52603 52561 52569 46427 46455 46413 46421 45689 45714 45675 45683 44910 44928 44892 44906 44859 44883 44783 44835 44242 44272 44178 44208 44050 44102 43981 44000 43844 43874 43830 43838 42260 42275 42245 42256 42206 42236 42130 42182 39904 39906 39885 39888 39865 39867 39852 39855 39804 39835 39781 39783 39770 39773 39758 39760 39753 39756 39640 39647 39628 39634 39610 39615 39337 39339 39318 39321 39298 39300 39285 39288 39265 39268 39245 39257 39233 39237 39210 39212 39199 39202 39187 39189 39182 39185 39065 39072 39053 39059 39035 39040 38403 38405 38386 38389 38361 38363 38345 38348 38328 38330 38314 38317 38292 38294 38283 38286 38273 38275 38268 38271 38262 38264 38251 38254 38239 38241 38234 38237 38221 38223 38204 38207 38016 38018 37999 38002 37976 37978 37960 37963 37943 37945 37929 37932 37909 37911 37900 37903 37890 37892 37885 37888 37879 37881 37868 37871 37856 37858 37851 37854 37840 37842 37823 37826 37594 37596 37587 37591 37573 37575 37563 37566 37552 37554 37542 37545 37524 37526 37514 37519 37497 37500 37472 37474 37456 37459 37439 37441 37425 37428 37403 37405 37389 37392 37374 37376 37365 37368 37348 37350 37339 37342 37329 37331 37324 37327 37318 37320 37307 37310 37295 37297 37290 37293 37277 37279 37260 37263 37183 37230 37139 37170 37105 37125 37088 37091 36862 36864 36840 36843 36837 36839 36818 36821 36815 36817 36795 36798 36787 36789 36768 36771 34961 34982 34947 34957 34887 34932 34874 34883 33191 33193 33162 33166 33140 33151 33062 33071 30837 30882 30824 30833 28682 28695 27332 27340 27254 27306 27197 27229 25767 25771 25752 25761 25725 25748 25713 25715 25702 25706 25694 25698 25232 25259 25215 25218 25070 25121 17943 17945 17921 17934 17915 17917 17899 17909 17893 17895 17875 17886 17869 17871 17853 17863 17847 17849 17821 17836 17815 17817 17799 17809 17793 17795 17777 17787 17771 17773 17757 17766 17751 17753 17703 17729 17697 17699 17659 17680 17653 17655 17623 17640 17617 17619 17597 17609 17591 17593 17571 17583 17565 17567 17555 17562 17549 17551 17531 17542 17525 17527 17493 17511 17487 17489 17471 17481 17446 17467 17440 17442 17416 17430 17410 17412 17396 17405 17390 17392 17360 17377 17354 17356 17334 17346 15367 15378 15352 15355 15324 15341 15302 15312 15272 15283 15258 15261 15230 15247 15209 15219 15180 15191 15166 15169 15141 15155 15127 15136 15110 15116 15093 15103 15063 15075 15045 15057 15031 15040 15019 15029 13580 13603 13546 13552 13449 13472 13421 13427 7312 7333 7010 7300 6956 6988 6934 6949 6882 6912 6814 6875 6666 6749 6578 6657 6444 6514 6371 6435 6238 6311 6164 6229 6040 6109 5963 6031) (font-lock-variable-name-face 62981 62987 22190 22200 22134 22140 22088 22093 22077 22085 21195 21204 20814 20823 19726 19736 19577 19581 19497 19500 18707 18711 18625 18631 18516 18523 18327 18336 18156 18162 18074 18083 17315 17328 17040 17058 17022 17037 17005 17019 16557 16565 16300 16310 16261 16273 16230 16238 16138 16147 15987 15991 15789 15801 15572 15579 15284 15300 15192 15207 15076 15091 15007 15017 14890 14902 14800 14810 14709 14724 13997 14015 13928 13945 13853 13869 13771 13778 13691 13705 13639 13642 13529 13543 13402 13418 13321 13333 13299 13310 13277 13288 13247 13260 13223 13235 13205 13214 13179 13190 13165 13172 13144 13157 12887 12898 12716 12723 12593 12596 12451 12460 12315 12325 12174 12196 11837 11848 11696 11706 11599 11614 11538 11548 11477 11490 11371 11386 11238 11253 10942 10955 10830 10844 10729 10739 10603 10614 10432 10446 10362 10374 10120 10132 10039 10046 9938 9950 9810 9831 9727 9743 9508 9522 9291 9298 9210 9223 9060 9067 8890 8904 8838 8844 8770 8777 8681 8685 8622 8628 8559 8566 8434 8440 8385 8391 8373 8379 8361 8367 8276 8283 8219 8228 8083 8093 7990 8009 7891 7906 7780 7789 7683 7689 7589 7595 7500 7511 7408 7420 6792 6808 6560 6572 6358 6365 6148 6158 5951 5957 5931 5946 5863 5881 5564 5577 5465 5478 5396 5413 5273 5295 5226 5243 5201 5220 5162 5175 5126 5143 4915 4943 4880 4902 4773 4788 4723 4737 4532 4542 4332 4346 4124 4140 3447 3453 3312 3331 3194 3199 3128 3138 3015 3020 2776 2787 2702 2708 2673 2674 2458 2471 2372 2380 2356 2369 2336 2344 2310 2322 2281 2296 2210 2217 2164 2169 2150 2158 2133 2144 2125 2127 2114 2122 2103 2106 2090 2100 2076 2081 2068 2070 2054 2064 2041 2051 2029 2037 2018 2026 1919 1930 1907 1913 1897 1904 1887 1894 1514 1527 1499 1511 1490 1496 1470 1484 1345 1354 1262 1269))))
diff --git a/gcc/README-bugs b/gcc/README-bugs
deleted file mode 100644
index 06e15bb..0000000
--- a/gcc/README-bugs
+++ /dev/null
@@ -1,144 +0,0 @@
-The purpose of GCC pretesting is to verify that the new GCC
-distribution, about to be released, works properly on your system *with
-no change whatever*, when installed following the precise
-recommendations that come with the distribution.
-
-Here are some guidelines on how to do pretesting so as to make it
-helpful.  All of them follow from common sense together with the
-nature of the purpose and the situation.
-
-* It is absolutely vital that you mention even the smallest change or
-departure from the standard sources and installation procedure.
-
-Otherwise, you are not testing the same program that I wrote.  Testing
-a different program is usually of no use whatever.  It can even cause
-trouble if you fail to tell me that you tested some other program
-instead of what I know as GCC.  I might think that GCC works, when in
-fact it has not been properly tried, and might have a glaring fault.
-
-* Even changing the compilation options counts as a change in the
-program.  The GCC sources specify which compilation options to use.
-Some of them are specified in makefiles, and some in machine-specific
-configuration files.
-
-You have ways to override this--but if you do, then you are not
-testing what ordinary users will do.  Therefore, when pretesting, it
-is vital to test with the default compilation options.
-
-(It is okay to test with nonstandard options as well as testing with
-the standard ones.)
-
-* The machine and system configuration files of GCC are parts of
-GCC.  So when you test GCC, you need to do it with the
-configuration files that come with GCC.
-
-If GCC does not come with configuration files for a certain machine,
-and you test it with configuration files that don't come with GCC,
-this is effectively changing GCC.  Because the crucial fact about
-the planned release is that, without changes, it doesn't work on that
-machine.
-
-To make GCC work on that machine, I would need to install new
-configuration files.  That is not out of the question, since it is
-safe--it certainly won't break any other machines that already work.
-But you will have to rush me the legal papers to give the FSF
-permission to use a large piece of text.
-
-* Look for recommendations for your system.
-
-You can find these recommendations in the Installation node of the
-manual, and in the file INSTALL.  (These two files have the same text.)
-
-These files say which configuration name to use for your machine, so
-use the ones that are recommended.  If you guess, you might guess
-wrong and encounter spurious difficulties.  What's more, if you don't
-follow the recommendations then you aren't helping to test that its
-recommendations are valid.
-
-These files may describe other things that you need to do to make GCC
-work on your machine.  If so, you should follow these recommendations
-also, for the same reason.
-
-Also look at the Trouble chapter of the manual for items that
-pertain to your machine.
-
-* Don't delay sending information.
-
-When you find a problem, please double check it if you can do so
-quickly.  But don't spend a long time double-checking.  A good rule is
-always to tell me about every problem on the same day you encounter
-it, even if that means you can't find a solution before you report the
-problem.
-
-I'd much rather hear about a problem today and a solution tomorrow
-than get both of them tomorrow at the same time.
-
-* Make each bug report self-contained.
-
-If you refer back to another message, whether from you or from someone
-else, then it will be necessary for anyone who wants to investigate
-the bug to find the other message.  This may be difficult, it is
-probably time-consuming.
-
-To help me save time, simply copy the relevant parts of any previous
-messages into your own bug report.
-
-In particular, if I ask you for more information because a bug report
-was incomplete, it is best to send me the *entire* collection of
-relevant information, all together.  If you send just the additional
-information, that makes me do extra work.  There is even a risk that
-I won't remember what question you are sending me the answer to.
-
-* Always be precise when talking about changes you have made.  Show
-things rather than describing them.  Use exact filenames (relative to
-the main directory of the distribution), not partial ones.  For
-example, say "I changed Makefile" rather than "I changed the
-makefile".  Instead of saying "I defined the MUMBLE macro", send a
-diff that shows your change.
-
-* Always use `diff -c' to make diffs.  If you don't include context,
-it may be hard for me to figure out where you propose to make the
-changes.  I might have to ignore your patch because I can't tell what
-it means.
-
-* When you write a fix, keep in mind that I can't install a change
-that would break other systems.
-
-People often suggest fixing a problem by changing machine-independent
-files such as toplev.c to do something special that a particular
-system needs.  Sometimes it is totally obvious that such changes would
-break GCC for almost all users.  I can't possibly make a change like
-that.  All I can do is send it back to you and ask you to find a fix
-that is safe to install.
-
-Sometimes people send fixes that *might* be an improvement in
-general--but it is hard to be sure of this.  I can install such
-changes some of the time, but not during pretest, when I am trying to
-get a new version to work reliably as quickly as possible.
-
-The safest changes for me to install are changes to the configuration
-files for a particular machine.  At least I know those can't create
-bugs on other machines.
-
-* Don't try changing GCC unless it fails to work if you don't change it.
-
-* Don't even suggest changes that would only make GCC cleaner.
-Every change I install could introduce a bug, so I won't install
-a change unless I see it is necessary.
-
-* If you would like to suggest changes for purposes other than fixing
-serious bugs, don't wait till pretest time.  Instead, send them just
-after I make a release.  That's the best time for me to install them.
-
-* In some cases, if you don't follow these guidelines, your
-information might still be useful, but I might have to do more work to
-make use of it.  Unfortunately, I am so far behind in my work that I
-just can't get the job done unless you help me to do it efficiently.
-
-
-				Thank you
-				   rms
-
-Local Variables:
-mode: text
-End:
diff --git a/gcc/auto-config.h b/gcc/auto-config.h
deleted file mode 100644
index 477fdf5..0000000
--- a/gcc/auto-config.h
+++ /dev/null
@@ -1,43 +0,0 @@
-/* auto-config.h.  Generated automatically by configure.  */
-/* config.in.  Generated automatically from configure.in by autoheader.  */
-/* Whether malloc must be declared even if <stdlib.h> is included.  */
-/* #undef NEED_DECLARATION_MALLOC */
-
-/* Whether realloc must be declared even if <stdlib.h> is included.  */
-/* #undef NEED_DECLARATION_REALLOC */
-
-/* Whether calloc must be declared even if <stdlib.h> is included.  */
-/* #undef NEED_DECLARATION_CALLOC */
-
-/* Whether free must be declared even if <stdlib.h> is included.  */
-/* #undef NEED_DECLARATION_FREE */
-
-/* Define if `sys_siglist' is declared by <signal.h>.  */
-#define SYS_SIGLIST_DECLARED 1
-
-/* Define if you have the strerror function.  */
-#define HAVE_STRERROR 1
-
-/* Define if you have the <inttypes.h> header file.  */
-/* #undef HAVE_INTTYPES_H */
-
-/* Define if you have the <limits.h> header file.  */
-#define HAVE_LIMITS_H 1
-
-/* Define if you have the <stddef.h> header file.  */
-#define HAVE_STDDEF_H 1
-
-/* Define if you have the <stdlib.h> header file.  */
-#define HAVE_STDLIB_H 1
-
-/* Define if you have the <string.h> header file.  */
-#define HAVE_STRING_H 1
-
-/* Define if you have the <strings.h> header file.  */
-#define HAVE_STRINGS_H 1
-
-/* Define if you have the <time.h> header file.  */
-#define HAVE_TIME_H 1
-
-/* Define if you have the <unistd.h> header file.  */
-#define HAVE_UNISTD_H 1
diff --git a/gcc/config/i386/xm-freebsd.h b/gcc/config/i386/xm-freebsd.h
deleted file mode 100644
index 007a609..0000000
--- a/gcc/config/i386/xm-freebsd.h
+++ /dev/null
@@ -1,4 +0,0 @@
-/* Configuration for GCC for Intel i386 running FreeBSD as host.  */
-
-#include <i386/xm-i386.h>
-#include <xm-freebsd.h>
diff --git a/gcc/config/i386/xm-netbsd.h b/gcc/config/i386/xm-netbsd.h
deleted file mode 100644
index 3a9f324..0000000
--- a/gcc/config/i386/xm-netbsd.h
+++ /dev/null
@@ -1,4 +0,0 @@
-/* Configuration for GCC for Intel i386 running NetBSD as host.  */
-
-#include <i386/xm-i386.h>
-#include <xm-netbsd.h>
diff --git a/gcc/config/i860/xm-fx2800.h b/gcc/config/i860/xm-fx2800.h
deleted file mode 100644
index f1ab6d8..0000000
--- a/gcc/config/i860/xm-fx2800.h
+++ /dev/null
@@ -1,7 +0,0 @@
-/* Alliant FX/2800 running Concentrix 2.x. */
-
-/* vfprintf is not present prior to Concentrix 2.2. Unfortunately, there
-   does not seem to be a cpp symbol that identifies OS revision. Undefine
-   the following if running 2.1 or older.  */
-
-#define HAVE_VPRINTF
diff --git a/gcc/config/m68k/xm-netbsd.h b/gcc/config/m68k/xm-netbsd.h
deleted file mode 100644
index 27a33cd..0000000
--- a/gcc/config/m68k/xm-netbsd.h
+++ /dev/null
@@ -1,4 +0,0 @@
-/* Configuration for GCC for Motorola 68k running NetBSD as host.  */
-
-#include <m68k/xm-m68k.h>
-#include <xm-netbsd.h>
diff --git a/gcc/config/m68k/xm-sun3.h b/gcc/config/m68k/xm-sun3.h
deleted file mode 100644
index eafe716..0000000
--- a/gcc/config/m68k/xm-sun3.h
+++ /dev/null
@@ -1,5 +0,0 @@
-/* Configuration for GCC for Motorola m68k on sun3. */
-
-#define HAVE_POPEN
-
-#include "m68k/xm-m68k.h"
diff --git a/gcc/config/m68k/xm-tower.h b/gcc/config/m68k/xm-tower.h
deleted file mode 100644
index fcb456f..0000000
--- a/gcc/config/m68k/xm-tower.h
+++ /dev/null
@@ -1,4 +0,0 @@
-#include "m68k/xm-m68k.h"
-#include "xm-svr3.h"
-
-#define HAVE_VPRINTF
diff --git a/gcc/config/mips/xm-netbsd.h b/gcc/config/mips/xm-netbsd.h
deleted file mode 100644
index b9d3c70..0000000
--- a/gcc/config/mips/xm-netbsd.h
+++ /dev/null
@@ -1,2 +0,0 @@
-#include "mips/xm-mips.h"
-#include "config/xm-netbsd.h"
diff --git a/gcc/config/ns32k/xm-netbsd.h b/gcc/config/ns32k/xm-netbsd.h
deleted file mode 100644
index 4040751..0000000
--- a/gcc/config/ns32k/xm-netbsd.h
+++ /dev/null
@@ -1,10 +0,0 @@
-/* Configuration for GCC for ns32k running NetBSD as host.  */
-
-#include <ns32k/xm-ns32k.h>
-
-/* ns32k/xm-ns32k.h defines these macros, but we don't need them */
-#undef memcmp
-#undef memcpy
-#undef memset
-
-#include <xm-netbsd.h>
diff --git a/gcc/config/sparc/xm-netbsd.h b/gcc/config/sparc/xm-netbsd.h
deleted file mode 100644
index 5f11b8d..0000000
--- a/gcc/config/sparc/xm-netbsd.h
+++ /dev/null
@@ -1,4 +0,0 @@
-/* Configuration for GCC for Sun SPARC running NetBSD as host.  */
-
-#include <sparc/xm-sparc.h>
-#include <xm-netbsd.h>
diff --git a/gcc/config/xm-freebsd.h b/gcc/config/xm-freebsd.h
deleted file mode 100644
index b71ff56..0000000
--- a/gcc/config/xm-freebsd.h
+++ /dev/null
@@ -1,24 +0,0 @@
-/* Configuration for GNU C-compiler for hosts running FreeBSD.
-   Copyright (C) 1994, 1995 Free Software Foundation, Inc.
-
-This file is part of GNU CC.
-
-GNU CC is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU CC is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU CC; see the file COPYING.  If not, write to
-the Free Software Foundation, 59 Temple Place - Suite 330,
-Boston, MA 02111-1307, USA.  */
-
-/* This file defines machine-independent things specific to a host
-   running FreeBSD.  This file should not be specified as $xm_file itself;
-   instead $xm_file should be CPU/xm-freebsd.h, which should include both
-   CPU/xm-CPU.h and this file xm-freebsd.h.  */
diff --git a/gcc/config/xm-netbsd.h b/gcc/config/xm-netbsd.h
deleted file mode 100644
index 099a923..0000000
--- a/gcc/config/xm-netbsd.h
+++ /dev/null
@@ -1,26 +0,0 @@
-/* Configuration for GNU C-compiler for hosts running NetBSD.
-   Copyright (C) 1995 Free Software Foundation, Inc.
-
-This file is part of GNU CC.
-
-GNU CC is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU CC is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU CC; see the file COPYING.  If not, write to
-the Free Software Foundation, 59 Temple Place - Suite 330,
-Boston, MA 02111-1307, USA.  */
-
-/* This file defines machine-independent things specific to a host
-   running NetBSD.  This file should not be specified as $xm_file itself;
-   instead $xm_file should be CPU/xm-netbsd.h, which should include both
-   CPU/xm-CPU.h and this file xm-netbsd.h.  */
-   
-#define HAVE_VPRINTF
diff --git a/gcc/cstamp-h b/gcc/cstamp-h
deleted file mode 100644
index 8b13789..0000000
--- a/gcc/cstamp-h
+++ /dev/null
@@ -1 +0,0 @@
-
diff --git a/gcc/fixinc.wrap b/gcc/fixinc.wrap
deleted file mode 100755
index 406c87e..0000000
--- a/gcc/fixinc.wrap
+++ /dev/null
@@ -1,86 +0,0 @@
-#! /bin/sh
-# Create wrappers for include files instead of replacing them.
-#
-# This script is designed for systems whose include files can be fixed
-# by creating small wrappers around them.
-# An advantage of this method is that if the system include files are changed
-# (e.g. by OS upgrade), you need not re-run fixincludes.
-#
-# See README-fixinc for more information.
-
-# Directory containing the original header files.
-# (This was named INCLUDES, but that conflicts with a name in Makefile.in.)
-INPUT=${2-${INPUT-/usr/include}}
-
-# Directory in which to store the results.
-LIB=${1?"fixincludes: output directory not specified"}
-
-# Make sure it exists.
-if [ ! -d $LIB ]; then
-  mkdir $LIB || exit 1
-fi
-
-echo Building fixed headers in ${LIB}
-
-# Some math.h files define struct exception, which conflicts with
-# the class exception defined in the C++ file std/stdexcept.h.  We
-# redefine it to __math_exception.  This is not a great fix, but I
-# haven't been able to think of anything better.
-file=math.h
-if [ -r $INPUT/$file ]; then
-  echo Checking $INPUT/$file
-  if grep 'struct exception' $INPUT/$file >/dev/null
-  then
-    echo Fixed $file
-    rm -f $LIB/$file
-    cat <<'__EOF__' >$LIB/$file
-#ifndef _MATH_H_WRAPPER
-#ifdef __cplusplus
-# define exception __math_exception
-#endif
-#include_next <math.h>
-#ifdef __cplusplus
-# undef exception
-#endif
-#define _MATH_H_WRAPPER
-#endif /* _MATH_H_WRAPPER */
-__EOF__
-    # Define _MATH_H_WRAPPER at the end of the wrapper, not the start,
-    # so that if #include_next gets another instance of the wrapper,
-    # this will follow the #include_next chain until we arrive at
-    # the real <math.h>.
-    chmod a+r $LIB/$file
-  fi
-fi
-
-# Avoid the definition of the bool type in the Solaris 2.x curses.h when using
-# g++, since it's now an official type in the C++ language.
-file=curses.h
-if [ -r $INPUT/$file ]; then
-  echo Checking $INPUT/$file
-  w='[	 ]'
-  if grep "typedef$w$w*char$w$w*bool$w*;" $INPUT/$file >/dev/null
-  then
-    echo Fixed $file
-    rm -f $LIB/$file
-    cat <<'__EOF__' >$LIB/$file
-#ifndef _CURSES_H_WRAPPER
-#ifdef __cplusplus
-# define bool __curses_bool_t
-#endif
-#include_next <curses.h>
-#ifdef __cplusplus
-# undef bool
-#endif
-#define _CURSES_H_WRAPPER
-#endif /* _CURSES_H_WRAPPER */
-__EOF__
-    # Define _CURSES_H_WRAPPER at the end of the wrapper, not the start,
-    # so that if #include_next gets another instance of the wrapper,
-    # this will follow the #include_next chain until we arrive at
-    # the real <curses.h>.
-    chmod a+r $LIB/$file
-  fi
-fi
-
-exit 0
diff --git a/gcc/gengenrtl.c b/gcc/gengenrtl.c
deleted file mode 100644
index 977305d..0000000
--- a/gcc/gengenrtl.c
+++ /dev/null
@@ -1,287 +0,0 @@
-/* Generate code to allocate RTL structures.
-   Copyright (C) 1997 Free Software Foundation, Inc.
-
-This file is part of GNU CC.
-
-GNU CC is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU CC is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU CC; see the file COPYING.  If not, write to
-the Free Software Foundation, 59 Temple Place - Suite 330,
-Boston, MA 02111-1307, USA.  */
-
-
-#include "hconfig.h"
-#include <stdio.h>
-
-#include "obstack.h"
-#define	obstack_chunk_alloc	xmalloc
-#define	obstack_chunk_free	free
-
-#define NO_GENRTL_H
-#include "rtl.h"
-
-
-struct rtx_definition 
-{
-  const char *enumname, *name, *format;
-};
-
-#define DEF_RTL_EXPR(ENUM, NAME, FORMAT, CLASS) { # ENUM, NAME, FORMAT },
-
-struct rtx_definition defs[] = 
-{  
-#include "rtl.def"		/* rtl expressions are documented here */
-};
-
-const char *formats[NUM_RTX_CODE];
-
-static const char *
-type_from_format (char c)
-{
-  switch (c)
-    {
-    case 'i':
-      return "int";
-    case 'w':
-      return "HOST_WIDE_INT";
-    case 's':
-      return "char *";
-    case 'e':
-    case 'u':
-      return "rtx";
-    case 'E':
-      return "rtvec";
-    default:
-      abort ();
-    }
-}
-
-static const char *
-accessor_from_format (char c)
-{
-  switch (c)
-    {
-    case 'i':
-      return "XINT";
-    case 'w':
-      return "XWINT";
-    case 's':
-      return "XSTR";
-    case 'e':
-    case 'u':
-      return "XEXP";
-    case 'E':
-      return "XVEC";
-    default:
-      abort ();
-    }
-}
-
-static int
-special_format (fmt)
-     const char *fmt;
-{
-  return (strchr (fmt, '*') != 0
-	  || strchr (fmt, 'V') != 0
-	  || strchr (fmt, 'S') != 0
-	  || strchr (fmt, 'n') != 0);
-}
-
-static int
-special_rtx (idx)
-     int idx;
-{
-  return (strcmp (defs[idx].enumname, "CONST_INT") == 0
-	  || strcmp (defs[idx].enumname, "REG") == 0);
-}
-
-static void
-find_formats ()
-{
-  int i;
-
-  for (i = 0; i < NUM_RTX_CODE; ++i)
-    {
-      const char **f;
-
-      if (special_format (defs[i].format))
-	continue;
-
-      for (f = formats; *f ; ++f)
-	if (!strcmp(*f, defs[i].format))
-	  break;
-
-      if (!*f)
-	*f = defs[i].format;
-    }
-}
-
-static void
-gendecl (f, format)
-     FILE *f;
-     const char *format;
-{
-  const char *p;
-  int i;
-  
-  fprintf (f, "extern rtx gen_rtx_fmt_%s PROTO((RTX_CODE, enum machine_mode mode",
-	   format);
-  for (p = format, i = 0; *p ; ++p)
-    if (*p != '0')
-      fprintf (f, ", %s arg%d", type_from_format (*p), i++);
-  fprintf (f, "));\n");
-}
-
-static void 
-genmacro (f, idx)
-     FILE *f;
-     int idx;
-{
-  const char *p;
-  int i;
-
-  fprintf (f, "#define gen_rtx_%s%s(mode",
-	   (special_rtx (idx) ? "raw_" : ""), defs[idx].enumname);
-
-  for (p = defs[idx].format, i = 0; *p ; ++p)
-    if (*p != '0')
-      fprintf (f, ", arg%d", i++);
-  fprintf (f, ")   ");
-
-  fprintf (f, "gen_rtx_fmt_%s(%s,(mode)", defs[idx].format, defs[idx].enumname);
-  for (p = defs[idx].format, i = 0; *p ; ++p)
-    if (*p != '0')
-      fprintf (f, ",(arg%d)", i++);
-  fprintf (f, ")\n");
-}
-
-static void
-gendef (f, format)
-     FILE *f;
-     const char *format;
-{
-  const char *p;
-  int i, j;
-  
-  fprintf (f, "rtx\ngen_rtx_fmt_%s (code, mode", format);
-  for (p = format, i = 0; *p ; ++p)
-    if (*p != '0')
-      fprintf (f, ", arg%d", i++);
-
-  fprintf (f, ")\n     RTX_CODE code;\n     enum machine_mode mode;\n");
-  for (p = format, i = 0; *p ; ++p)
-    if (*p != '0')
-      fprintf (f, "     %s arg%d;\n", type_from_format (*p), i++);
-
-  /* See rtx_alloc in rtl.c for comments.  */
-  fprintf (f, "{\n");
-  fprintf (f, "  register int length = sizeof (struct rtx_def)");
-  fprintf (f, " + %d * sizeof (rtunion);\n", strlen (format) - 1);
-  fprintf (f, "  rtx rt = (rtx)obstack_alloc (rtl_obstack, length);\n");
-
-  fprintf (f, "  if (sizeof(struct rtx_def) - sizeof(rtunion) == sizeof(int))\n");
-  fprintf (f, "    *(int *)rt = 0;\n");
-  fprintf (f, "  else if (sizeof(struct rtx_def) - sizeof(rtunion) == sizeof(HOST_WIDE_INT))\n");
-  fprintf (f, "    *(HOST_WIDE_INT *)rt = 0;\n");
-  fprintf (f, "  else\n");
-  fprintf (f, "    bzero(rt, sizeof(struct rtx_def) - sizeof(rtunion));\n\n");
-
-  fprintf (f, "  PUT_CODE (rt, code);\n");
-  fprintf (f, "  PUT_MODE (rt, mode);\n");
-
-  for (p = format, i = j = 0; *p ; ++p, ++i)
-    if (*p != '0')
-      {
-	fprintf (f, "  %s (rt, %d) = arg%d;\n",
-		 accessor_from_format (*p), i, j++);
-      }
-
-  fprintf (f, "\n  return rt;\n}\n\n");
-}
-
-static void
-genlegend (f)
-     FILE *f;
-{
-  fprintf (f, "/* Generated automaticaly by the program `gengenrtl'\n");
-  fprintf (f, "   from the RTL description file `rtl.def' */\n\n");
-}
-
-static void
-genheader (f)
-     FILE *f;
-{
-  int i;
-  const char **fmt;
-
-  for (fmt = formats; *fmt; ++fmt)
-    gendecl (f, *fmt);
-
-  fprintf(f, "\n");
-
-  for (i = 0; i < NUM_RTX_CODE; i++)
-    {
-      if (special_format (defs[i].format))
-	continue;
-      genmacro (f, i);
-    }
-}
-
-static void
-gencode (f)
-     FILE *f;
-{
-  const char **fmt;
-
-  fprintf(f, "#include \"config.h\"\n");
-  fprintf(f, "#include \"obstack.h\"\n");
-  fprintf(f, "#include \"rtl.h\"\n\n");
-  fprintf(f, "extern struct obstack *rtl_obstack;\n\n");
-
-  for (fmt = formats; *fmt; ++fmt)
-    gendef (f, *fmt);
-}
-
-int
-main(argc, argv)
-     int argc;
-     char **argv;
-{
-  FILE *f;
-
-  if (argc != 3)
-    exit (1);
-
-  find_formats ();
-
-  f = fopen (argv[1], "w");
-  if (f == NULL)
-    {
-      perror(argv[1]);
-      exit (1);
-    }
-  genlegend (f);
-  genheader (f);
-  fclose(f);
-
-  f = fopen (argv[2], "w");
-  if (f == NULL)
-    {
-      perror(argv[2]);
-      exit (1);
-    }
-  genlegend (f);
-  gencode (f);
-  fclose(f);
-
-  exit (0);
-}
diff --git a/gcc/ginclude/va-mips.h.hold b/gcc/ginclude/va-mips.h.hold
deleted file mode 100644
index c8c84ee..0000000
--- a/gcc/ginclude/va-mips.h.hold
+++ /dev/null
@@ -1,211 +0,0 @@
-/* ---------------------------------------- */
-/*           VARARGS  for MIPS/GNU CC       */
-/*                                          */
-/*                                          */
-/*                                          */
-/*                                          */
-/* ---------------------------------------- */
-
-
-/* These macros implement varargs for GNU C--either traditional or ANSI.  */
-
-/* Define __gnuc_va_list.  */
-
-#ifndef __GNUC_VA_LIST
-#define __GNUC_VA_LIST
-#if defined (__mips_eabi) && ! defined (__mips_soft_float)
-
-typedef struct {
-  /* Pointer to FP regs.  */
-  char *__fp_regs;
-  /* Number of FP regs remaining.  */
-  int __fp_left;
-  /* Pointer to GP regs followed by stack parameters.  */
-  char *__gp_regs;
-} __gnuc_va_list;
-
-#ifdef __mips64
-#define __va_reg_size 8
-#else
-#define __va_reg_size 4
-#endif
-
-enum {
-  __no_type_class = -1,
-  __void_type_class,
-  __integer_type_class,
-  __char_type_class,
-  __enumeral_type_class,
-  __boolean_type_class,
-  __pointer_type_class,
-  __reference_type_class,
-  __offset_type_class,
-  __real_type_class,
-  __complex_type_class,
-  __function_type_class,
-  __method_type_class,
-  __record_type_class,
-  __union_type_class,
-  __array_type_class,
-  __string_type_class,
-  __set_type_class,
-  __file_type_class,
-  __lang_type_class
-};
-
-#else /* ! (defined (__mips_eabi) && ! defined (__mips_soft_float)) */
-
-typedef char * __gnuc_va_list;
-
-#endif /* ! (defined (__mips_eabi) && ! defined (__mips_soft_float)) */
-#endif /* not __GNUC_VA_LIST */
-
-/* If this is for internal libc use, don't define anything but
-   __gnuc_va_list.  */
-#if defined (_STDARG_H) || defined (_VARARGS_H)
-
-/* In GCC version 2, we want an ellipsis at the end of the declaration
-   of the argument list.  GCC version 1 can't parse it.  */
-
-#if __GNUC__ > 1
-#define __va_ellipsis ...
-#else
-#define __va_ellipsis
-#endif
-
-#ifdef __mips64
-#define __va_rounded_size(__TYPE)  \
-  (((sizeof (__TYPE) + 8 - 1) / 8) * 8)
-#else
-#define __va_rounded_size(__TYPE)  \
-  (((sizeof (__TYPE) + sizeof (int) - 1) / sizeof (int)) * sizeof (int))
-#endif
-
-/* Get definitions for _MIPS_SIM_ABI64 etc.  */
-#ifdef _MIPS_SIM
-#include <sgidefs.h>
-#endif
-
-#ifdef _STDARG_H
-#if defined (__mips_eabi) && ! defined (__mips_soft_float)
-#define va_start(__AP, __LASTARG)					\
-  (__AP.__gp_regs = ((char *) __builtin_next_arg (__LASTARG)		\
-		     - (__builtin_args_info (2) < 8			\
-			? (8 - __builtin_args_info (2)) * __va_reg_size	\
-			: 0)),						\
-   __AP.__fp_left = 8 - __builtin_args_info (3),			\
-   __AP.__fp_regs = __AP.__gp_regs - __AP.__fp_left * __va_reg_size)
-#else /* ! (defined (__mips_eabi) && ! defined (__mips_soft_float)) */
-#define va_start(__AP, __LASTARG) \
-  (__AP = (__gnuc_va_list) __builtin_next_arg (__LASTARG))
-#endif /* ! (defined (__mips_eabi) && ! defined (__mips_soft_float)) */
-#else /* ! _STDARG_H */
-#define va_alist  __builtin_va_alist
-#ifdef __mips64
-/* This assumes that `long long int' is always a 64 bit type.  */
-#define va_dcl    long long int __builtin_va_alist; __va_ellipsis
-#else
-#define va_dcl    int __builtin_va_alist; __va_ellipsis
-#endif
-#if defined (__mips_eabi) && ! defined (__mips_soft_float)
-#define va_start(__AP)							\
-  (__AP.__gp_regs = ((char *) __builtin_next_arg ()			\
-		     - (__builtin_args_info (2) < 8			\
-			? (8 - __builtin_args_info (2)) * __va_reg_size	\
-			: 8)),						\
-   __AP.__fp_left = 8 - __builtin_args_info (3),			\
-   __AP.__fp_regs = __AP.__gp_regs - __AP.__fp_left * __va_reg_size)
-/* Need alternate code for _MIPS_SIM_ABI64.  */
-#elif defined(_MIPS_SIM) && (_MIPS_SIM == _MIPS_SIM_ABI64 || _MIPS_SIM == _MIPS_SIM_NABI32)
-#define va_start(__AP)							\
-  (__AP = (__gnuc_va_list) __builtin_next_arg ()			\
-   + (__builtin_args_info (2) >= 8 ? -8 : 0))
-#else
-#define va_start(__AP)  __AP = (char *) &__builtin_va_alist
-#endif
-#endif /* ! _STDARG_H */
-
-#ifndef va_end
-void va_end (__gnuc_va_list);		/* Defined in libgcc.a */
-#endif
-#define va_end(__AP)	((void)0)
-
-#if defined (__mips_eabi) && ! defined (__mips_soft_float)
-
-#ifdef __mips64
-#define __va_next_addr(__AP, __type)					\
-  ((__builtin_classify_type (*(__type *) 0) == __real_type_class	\
-    && __AP.__fp_left > 0)						\
-   ? (--__AP.__fp_left, (__AP.__fp_regs += 8) - 8)			\
-   : (__AP.__gp_regs += __va_reg_size) - __va_reg_size)
-#else
-#define __va_next_addr(__AP, __type)					\
-  ((__builtin_classify_type (*(__type *) 0) == __real_type_class	\
-    && __AP.__fp_left > 0)						\
-   ? (--__AP.__fp_left, (__AP.__fp_regs += 8) - 8)			\
-   : (((__builtin_classify_type (* (__type *) 0) < record_type_class	\
-	&& __alignof__ (__type) > 4)					\
-       ? __AP.__gp_regs = (__AP.__gp_regs + 8 - 1) & -8),		\
-      (__AP.__gp_regs += __va_reg_size) - __va_reg_size))
-#endif
-
-#ifdef __MIPSEB__
-#define va_arg(__AP, __type)						\
-  ((__va_rounded_size (__type) <= __va_reg_size)			\
-   ? *(__type *) (void *) (__va_next_addr (__AP, __type)		\
-			   + __va_reg_size				\
-			   - sizeof (__type))				\
-   : (__builtin_classify_type (*(__type *) 0) >= __record_type_class	\
-      ? **(__type **) (void *) (__va_next_addr (__AP, __type)		\
-				+ __va_reg_size				\
-				- sizeof (char *))			\
-      : *(__type *) (void *) __va_next_addr (__AP, __type)))
-#else
-#define va_arg(__AP, __type)						\
-  (__builtin_classify_type (* (__type *) 0) >= __record_type_class	\
-   ? **(__type **) (void *) __va_next_addr (__AP, __type)		\
-   : *(__type *) (void *) __va_next_addr (__AP, __type))
-#endif
-
-#else /* ! (defined (__mips_eabi) && ! defined (__mips_soft_float)) */
-
-/* We cast to void * and then to TYPE * because this avoids
-   a warning about increasing the alignment requirement.  */
-/* The __mips64 cases are reversed from the 32 bit cases, because the standard
-   32 bit calling convention left-aligns all parameters smaller than a word,
-   whereas the __mips64 calling convention does not (and hence they are
-   right aligned).  */
-#ifdef __mips64
-#ifdef __MIPSEB__
-#define va_arg(__AP, __type)                                    \
-  ((__type *) (void *) (__AP = (char *) ((((__PTRDIFF_TYPE__)__AP + 8 - 1) & -8) \
-					 + __va_rounded_size (__type))))[-1]
-#else
-#define va_arg(__AP, __type)                                    \
-  ((__AP = (char *) ((((__PTRDIFF_TYPE__)__AP + 8 - 1) & -8)	\
-		     + __va_rounded_size (__type))),		\
-   *(__type *) (void *) (__AP - __va_rounded_size (__type)))
-#endif
-
-#else /* not __mips64 */
-
-#ifdef __MIPSEB__
-/* For big-endian machines.  */
-#define va_arg(__AP, __type)					\
-  ((__AP = (char *) ((__alignof__ (__type) > 4			\
-		      ? ((int)__AP + 8 - 1) & -8		\
-		      : ((int)__AP + 4 - 1) & -4)		\
-		     + __va_rounded_size (__type))),		\
-   *(__type *) (void *) (__AP - __va_rounded_size (__type)))
-#else
-/* For little-endian machines.  */
-#define va_arg(__AP, __type)						    \
-  ((__type *) (void *) (__AP = (char *) ((__alignof__(__type) > 4	    \
-					  ? ((int)__AP + 8 - 1) & -8	    \
-					  : ((int)__AP + 4 - 1) & -4)	    \
-					 + __va_rounded_size(__type))))[-1]
-#endif
-#endif
-#endif /* ! (defined (__mips_eabi) && ! defined (__mips_soft_float)) */
-
-#endif /* defined (_STDARG_H) || defined (_VARARGS_H) */
diff --git a/gcc/install1.texi b/gcc/install1.texi
deleted file mode 100644
index 82ef9b6..0000000
--- a/gcc/install1.texi
+++ /dev/null
@@ -1,15 +0,0 @@
-@setfilename INSTALL
-@set INSTALLONLY
-
-@c This file itself, install1.texi, does not apear in the GCC distribution.
-@c The immediately following lines apply to the INSTALL file
-@c which is generated using this file.
-This file documents the installation of the GNU compiler.
-Copyright (C) 1988, 1989, 1992, 1994, 1995 Free Software Foundation, Inc.
-You may copy, distribute, and modify it freely as long as you preserve
-this copyright notice and permission notice.
-
-@node Installation,,, (dir)
-@chapter Installing GNU CC
-@include install.texi
-@bye
diff --git a/gcc/regmove.c b/gcc/regmove.c
deleted file mode 100644
index 639059b..0000000
--- a/gcc/regmove.c
+++ /dev/null
@@ -1,983 +0,0 @@
-/* Move registers around to reduce number of move instructions needed.
-   Copyright (C) 1987, 88, 89, 92-5, 1996, 1997 Free Software Foundation, Inc.
-
-This file is part of GNU CC.
-
-GNU CC is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU CC is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU CC; see the file COPYING.  If not, write to
-the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
-
-
-/* This module looks for cases where matching constraints would force
-   an instruction to need a reload, and this reload would be a register
-   to register move.  It then attempts to change the registers used by the
-   instruction to avoid the move instruction.  */
-
-#include "config.h"
-#ifdef __STDC__
-#include <stdarg.h>
-#else
-#include <varargs.h>
-#endif
-
-/* Must precede rtl.h for FFS.  */
-#include <stdio.h>
-
-#include "rtl.h"
-#include "insn-config.h"
-#include "recog.h"
-#include "output.h"
-#include "reload.h"
-#include "regs.h"
-
-static int stable_but_for_p PROTO((rtx, rtx, rtx));
-
-#if defined (HAVE_POST_INCREMENT) || defined (HAVE_POST_DECREMENT) \
-    || defined (HAVE_PRE_INCREMENT) || defined (HAVE_PRE_DECREMENT)
-
-/* INC_INSN is an instruction that adds INCREMENT to REG.
-   Try to fold INC_INSN as a post/pre in/decrement into INSN.
-   Iff INC_INSN_SET is nonzero, inc_insn has a destination different from src.
-   Return nonzero for success.  */
-static int
-try_auto_increment (insn, inc_insn, inc_insn_set, reg, increment, pre)
-     rtx reg, insn, inc_insn ,inc_insn_set;
-     HOST_WIDE_INT increment;
-     int pre;
-{
-  enum rtx_code inc_code;
-
-  rtx pset = single_set (insn);
-  if (pset)
-    {
-      /* Can't use the size of SET_SRC, we might have something like
-	 (sign_extend:SI (mem:QI ...  */
-      rtx use = find_use_as_address (pset, reg, 0);
-      if (use != 0 && use != (rtx) 1)
-	{
-	  int size = GET_MODE_SIZE (GET_MODE (use));
-	  if (0
-#ifdef HAVE_POST_INCREMENT
-	      || (pre == 0 && (inc_code = POST_INC, increment == size))
-#endif
-#ifdef HAVE_PRE_INCREMENT
-	      || (pre == 1 && (inc_code = PRE_INC, increment == size))
-#endif
-#ifdef HAVE_POST_DECREMENT
-	      || (pre == 0 && (inc_code = POST_DEC, increment == -size))
-#endif
-#ifdef HAVE_PRE_DECREMENT
-	      || (pre == 1 && (inc_code = PRE_DEC, increment == -size))
-#endif
-          )
-            {
-              if (inc_insn_set)
-                validate_change
-                  (inc_insn, 
-                   &SET_SRC (inc_insn_set),
-		   XEXP (SET_SRC (inc_insn_set), 0), 1);
-              validate_change (insn, &XEXP (use, 0),
-                               gen_rtx (inc_code,
-                                        Pmode,
-                                        reg), 1);
-              if (apply_change_group ())
-                {
-                  REG_NOTES (insn)
-                    = gen_rtx (EXPR_LIST, REG_INC,
-                               reg, REG_NOTES (insn));
-                  if (! inc_insn_set)
-                    {
-                      PUT_CODE (inc_insn, NOTE);
-                      NOTE_LINE_NUMBER (inc_insn) = NOTE_INSN_DELETED;
-                      NOTE_SOURCE_FILE (inc_insn) = 0;
-                    }
-		  return 1;
-                }
-            }
-        }
-    }
-  return 0;
-}
-#endif  /* defined (HAVE_POST_INCREMENT) || defined (HAVE_POST_DECREMENT) */
-
-void
-regmove_optimize (f, nregs, regmove_dump_file)
-     rtx f;
-     int nregs;
-     FILE *regmove_dump_file;
-{
-#ifdef REGISTER_CONSTRAINTS
-  rtx insn;
-  int matches[MAX_RECOG_OPERANDS][MAX_RECOG_OPERANDS];
-  int modified[MAX_RECOG_OPERANDS];
-  int early_clobber[MAX_RECOG_OPERANDS];
-  int commutative;
-  int pass;
-
-  /* A forward/backward pass.  Replace output operands with input operands.  */
-
-  for (pass = 0; pass < 2; pass++)
-    {
-      if (regmove_dump_file)
-	fprintf (regmove_dump_file, "Starting %s pass...\n",
-		 pass ? "backward" : "forward");
-
-      for (insn = pass ? get_last_insn () : f; insn;
-	   insn = pass ? PREV_INSN (insn) : NEXT_INSN (insn))
-	{
-	  if (GET_RTX_CLASS (GET_CODE (insn)) == 'i')
-	    {
-	      int insn_code_number = recog_memoized (insn);
-	      int operand_number, match_number;
-	      
-	      if (insn_code_number < 0)
-		continue;
-    
-	      insn_extract (insn);
-	      if (! constrain_operands (insn_code_number, 0))
-		continue;
-	      
-	      commutative = -1;
-    
-	      /* Must initialize this before the loop, because the code for
-		 the commutative case may set matches for operands other than
-		 the current one.  */
-	      bzero (matches, sizeof (matches));
-    
-	      for (operand_number = 0;
-		   operand_number < insn_n_operands[insn_code_number];
-		   operand_number++)
-		{
-		  int output_operand = 0;
-		  int matching_operand = operand_number;
-		  char *p, c;
-		  int i = 0;
-    
-		  modified[operand_number] = 0;
-		  early_clobber[operand_number] = 0;
-    
-		  p = insn_operand_constraint[insn_code_number][operand_number];
-
-		  if (*p == '=')
-		    modified[operand_number] = 2;
-		  else if (*p == '+')
-		    modified[operand_number] = 1;
-
-		  for (;*p && i < which_alternative; p++)
-		    if (*p == ',')
-		      i++;
-    
-		  while ((c = *p++) != '\0' && c != ',')
-		    switch (c)
-		      {
-		      case '=':
-			break;
-		      case '+':
-			break;
-		      case '&':
-			early_clobber[operand_number] = 1;
-			break;
-		      case '%':
-			commutative = operand_number;
-			break;
-		      case '0': case '1': case '2': case '3': case '4':
-		      case '5': case '6': case '7': case '8': case '9':
-			c -= '0';
-			matches[operand_number][c] = 1;
-			if (commutative >= 0)
-			  {
-			    if (c == commutative || c == commutative + 1)
-			      {
-				int other = c + (c == commutative ? 1 : -1);
-				matches[operand_number][other] = 1;
-			      }
-			    if (operand_number == commutative
-				|| operand_number == commutative + 1)
-			      {
-				int other = (operand_number
-					     + (operand_number == commutative
-						? 1 : -1));
-				matches[other][c] = 1;
-			      }
-			  }
-			break;
-		      }
-		}
-    
-	      /* Now scan through the operands looking for a source operand
-		 which is supposed to match the destination operand.
-		 Then scan forward for an instruction which uses the dest
-		 operand.
-		 If it dies there, then replace the dest in both operands with
-		 the source operand.  */
-    
-	      for (operand_number = 0;
-		   operand_number < insn_n_operands[insn_code_number];
-		   operand_number++)
-		{
-		  for (match_number = 0;
-		       match_number < insn_n_operands[insn_code_number];
-		       match_number++)
-		    {
-		      rtx set, p, src, dst, src_subreg;
-		      rtx post_inc = 0, post_inc_set = 0, search_end = 0;
-		      rtx src_note, dst_note;
-		      int success = 0;
-		      int num_calls = 0;
-		      enum rtx_code code = NOTE;
-		      HOST_WIDE_INT insn_const, newconst;
-		      rtx overlap = 0; /* need to move insn ? */
-    
-		      /* Nothing to do if the two operands aren't supposed to
-			 match.  */
-		      if (matches[operand_number][match_number] == 0)
-			continue;
-    
-		      src = recog_operand[operand_number];
-		      dst = recog_operand[match_number];
-    
-		      if (GET_CODE (src) != REG
-			  || REGNO (src) < FIRST_PSEUDO_REGISTER)
-			continue;
-    
-		      src_subreg = src;
-		      if (GET_CODE (dst) == SUBREG
-			  && GET_MODE_SIZE (GET_MODE (dst))
-			     >= GET_MODE_SIZE (GET_MODE (SUBREG_REG (dst))))
-			{
-			  src_subreg
-			    = gen_rtx(SUBREG,  GET_MODE (SUBREG_REG (dst)),
-				      src, SUBREG_WORD (dst));
-			  dst = SUBREG_REG (dst);
-			}
-		      if (GET_CODE (dst) != REG
-			  || REGNO (dst) < FIRST_PSEUDO_REGISTER)
-			continue;
-    
-		      /* If the operands already match, then there is nothing
-			 to do.  */
-		      if (operands_match_p (src, dst))
-			continue;
-    
-		      set = single_set (insn);
-		      if (! set)
-			continue;
-    
-		      /* operand_number/src must be a read-only operand, and
-			 match_operand/dst must be a write-only operand.  */
-		      if (modified[match_number] != 2)
-			continue;
-    
-		      if (early_clobber[match_number] == 1)
-			continue;
-    
-		      if (modified[operand_number] != 0)
-			continue;
-    
-		      /* Make sure match_operand is the destination.  */
-		      if (recog_operand[match_number] != SET_DEST (set))
-			continue;
-		  
-		      src_note = find_reg_note (insn, REG_DEAD, src);
-    
-		      if (! src_note)
-			{
-			  /* Look for (set (regX) (op regA constX))
-				      (set (regY) (op regA constY))
-			     and change that to
-				      (set (regA) (op regA constX)).
-				      (set (regY) (op regA constY-constX)).
-			     This works for add and shift operations, if
-			     regA is dead after or set by the second insn.  */
-
-			  code = GET_CODE (SET_SRC (set));
-			  if ((code == PLUS || code == LSHIFTRT
-			       || code == ASHIFT || code == ASHIFTRT)
-			      && XEXP (SET_SRC (set), 0) == src
-			      && (GET_CODE (XEXP (SET_SRC (set), 1))
-				  == CONST_INT))
-			    insn_const = INTVAL (XEXP (SET_SRC (set), 1));
-			  else if (! stable_but_for_p (SET_SRC (set), src, dst))
-			    continue;
-			  else
-			    /* We might find a src_note while scanning.  */
-			    code = NOTE;
-			}
-
-		      if (regmove_dump_file)
-			fprintf (regmove_dump_file,
-				 "Could fix operand %d of insn %d matching operand %d.\n",
-				 operand_number, INSN_UID (insn), match_number);
-    
-		      /* ??? If src is set once, and is set equal to a
-			 constant, then do not use it for this optimization,
-			 as this would make it no longer equivalent to a
-			 constant?  */
-    
-		      /* Scan forward to find the next instruction that
-			 uses the output operand.  If the operand dies here,
-			 then replace it in both instructions with
-			 operand_number.  */
-    
-		      for (p = NEXT_INSN (insn); p; p = NEXT_INSN (p))
-			{
-			  if (GET_CODE (p) == CODE_LABEL
-			      || GET_CODE (p) == JUMP_INSN
-			      || (GET_CODE (p) == NOTE
-				  && ((NOTE_LINE_NUMBER (p)
-				       == NOTE_INSN_LOOP_BEG)
-				      || (NOTE_LINE_NUMBER (p)
-					  == NOTE_INSN_LOOP_END))))
-			    break;
-    
-			  if (GET_RTX_CLASS (GET_CODE (p)) != 'i')
-			    continue;
-    
-			  if (reg_set_p (src, p) || reg_set_p (dst, p)
-			      || (GET_CODE (PATTERN (p)) == USE
-				  && reg_overlap_mentioned_p (src,
-							      XEXP (PATTERN (p),
-							      0))))
-			    break;
-    
-			  /* See if all of DST dies in P.  This test is
-			     slightly more conservative than it needs to be.  */
-			  if ((dst_note
-				= find_regno_note (p, REG_DEAD, REGNO (dst)))
-			      && (GET_MODE (XEXP (dst_note, 0))
-				  == GET_MODE (dst)))
-			    {
-			      if (! src_note)
-				{
-				  rtx q;
-				  rtx set2;
-    
-				  /* If an optimization is done, the value
-				     of SRC while P is executed will be
-				     changed.  Check that this is OK.  */
-				  if (reg_overlap_mentioned_p (src,
-							       PATTERN (p)))
-				    break;
-				  for (q = p; q; q = NEXT_INSN (q))
-				    {
-				      if (GET_CODE (q) == CODE_LABEL
-					  || GET_CODE (q) == JUMP_INSN
-					  || (GET_CODE (q) == NOTE
-					      && ((NOTE_LINE_NUMBER (q)
-						   == NOTE_INSN_LOOP_BEG)
-						  || (NOTE_LINE_NUMBER (q)
-						      == NOTE_INSN_LOOP_END))))
-					{
-					  q = 0;
-					  break;
-					}
-				      if (GET_RTX_CLASS (GET_CODE (q)) != 'i')
-					continue;
-				      if (reg_overlap_mentioned_p (src,
-								   PATTERN (q))
-					  || reg_set_p (src, q))
-					break;
-				    }
-				  if (q)
-				    set2 = single_set (q);
-				  if (! q || ! set2
-				      || GET_CODE (SET_SRC (set2)) != code
-				      || XEXP (SET_SRC (set2), 0) != src
-				      || (GET_CODE (XEXP (SET_SRC (set2), 1))
-					  != CONST_INT)
-				      || (SET_DEST (set2) != src
-					  && !find_reg_note (q, REG_DEAD, src)))
-				    {
-				      /* If this is a PLUS, we can still save
-					 a register by doing
-					 src += insn_const;
-					 P;
-					 src -= insn_const; .
-					 This also gives opportunities for
-					 subsequent optimizations in the
-					 backward pass, so do it there.  */
-				      if (code == PLUS && pass == 1
-#ifdef HAVE_cc0
-					  /* We man not emit an insn directly
-					     after P if the latter sets CC0.  */
-					  && ! sets_cc0_p (PATTERN (p))
-#endif
-					  )
-
-					{
-					  search_end = q;
-					  q = insn;
-					  set2 = set;
-					  newconst = -insn_const;
-					  code = MINUS;
-					}
-				      else
-					break;
-				    }
-				  else
-				    {
-				      newconst
-					= (INTVAL (XEXP (SET_SRC (set2), 1))
-					   - insn_const);
-				      /* Reject out of range shifts.  */
-				      if (code != PLUS
-					  && (newconst < 0
-					      || (newconst
-						  >= GET_MODE_BITSIZE (GET_MODE (SET_SRC (set2))))))
-					break;
-				      if (code == PLUS)
-					{
-					  post_inc = q;
-					  if (SET_DEST (set2) != src)
-					    post_inc_set = set2;
-					}
-				    }
-				  /* We use 1 as last argument to
-				     validate_change so that all changes
-				     are accepted or rejected together by
-				     apply_change_group when it is called
-				     by validate_replace_rtx .  */
-				  validate_change (q, &XEXP (SET_SRC (set2), 1),
-						   GEN_INT (newconst), 1);
-				}
-			      validate_change (insn,
-					       recog_operand_loc[match_number],
-					       src, 1);
-			      if (validate_replace_rtx (dst, src_subreg, p))
-				success = 1;
-			      break;
-			    }
-    
-			  if (reg_overlap_mentioned_p (dst, PATTERN (p)))
-			    break;
-			  if (! src_note
-			      && reg_overlap_mentioned_p (src, PATTERN (p)))
-			    {
-			      /* INSN was already checked to be movable when
-				 we found no REG_DEAD note for src on it.  */
-			      overlap = p;
-			      src_note = find_reg_note (p, REG_DEAD, src);
-			    }
-    
-			  /* If we have passed a call instruction, and the
-			     pseudo-reg SRC is not already live across a call,
-			     then don't perform the optimization.  */
-			  if (GET_CODE (p) == CALL_INSN)
-			    {
-			      num_calls++;
-    
-			      if (REG_N_CALLS_CROSSED (REGNO (src)) == 0)
-				break;
-			    }
-			}
-    
-		      if (success)
-			{
-			  /* Remove the death note for DST from P.  */
-			  remove_note (p, dst_note);
-			  if (code == MINUS)
-			    {
-			      post_inc
-				= emit_insn_after (copy_rtx (PATTERN (insn)),
-						   p);
-#if defined (HAVE_PRE_INCREMENT) || defined (HAVE_PRE_DECREMENT)
-			      if (search_end
-				  && try_auto_increment (search_end, post_inc,
-							 0, src, newconst, 1))
-				post_inc = 0;
-#endif
-			      validate_change (insn, &XEXP (SET_SRC (set), 1),
-					       GEN_INT (insn_const), 0);
-			      REG_N_SETS (REGNO (src))++;
-			    }
-			  if (overlap)
-			    {
-			      /* The lifetime of src and dest overlap,
-				 but we can change this by moving insn.  */
-			      rtx pat = PATTERN (insn);
-			      if (src_note)
-				remove_note (overlap, src_note);
-#if defined (HAVE_POST_INCREMENT) || defined (HAVE_POST_DECREMENT)
-			      if (code == PLUS
-				  && try_auto_increment (overlap, insn, 0,
-							 src, insn_const, 0))
-				insn = overlap;
-			      else
-#endif
-				{
-				  emit_insn_after_with_line_notes
-				    (pat, PREV_INSN (p), insn);
-				  PUT_CODE (insn, NOTE);
-				  NOTE_LINE_NUMBER (insn) = NOTE_INSN_DELETED;
-				  NOTE_SOURCE_FILE (insn) = 0;
-				  /* emit_insn_after_with_line_notes
-				     has no return value, so search
-				     for the new insn.  */
-				  for (insn = p; PATTERN (insn) != pat; )
-				    insn = PREV_INSN (insn);
-				}
-			    }
-			  /* Sometimes we'd generate src = const; src += n;
-			     if so, replace the instruction that set src
-			     in the first place.  */
-			
-			  if (! overlap && (code == PLUS || code == MINUS))
-			    {
-			      rtx note
-				= find_reg_note (insn, REG_EQUAL, NULL_RTX);
-			      rtx q, set2;
-			      int num_calls2 = 0;
-
-			      if (note && CONSTANT_P (XEXP (note, 0)))
-				{
-				  for (q = PREV_INSN (insn); q;
-				       q = PREV_INSN(q))
-				    {
-				      if (GET_CODE (q) == JUMP_INSN)
-					{
-					  q = 0;
-					  break;
-					}
-				      if (GET_RTX_CLASS (GET_CODE (q)) != 'i')
-					continue;
-				      if (reg_set_p (src, q))
-					{
-					  set2 = single_set (q);
-					  break;
-					}
-				      if (reg_overlap_mentioned_p (src,
-					  PATTERN (q)))
-					{
-					  q = 0;
-					  break;
-					}
-				      if (GET_CODE (p) == CALL_INSN)
-					num_calls2++;
-				    }
-				  if (q && set2 && SET_DEST (set2) == src
-				      && CONSTANT_P (SET_SRC (set2))
-				      && validate_change (insn, &SET_SRC (set),
-							  XEXP (note, 0), 0))
-				    {
-				      PUT_CODE (q, NOTE);
-				      NOTE_LINE_NUMBER (q) = NOTE_INSN_DELETED;
-				      NOTE_SOURCE_FILE (q) = 0;
-				      REG_N_SETS (REGNO (src))--;
-				      REG_N_CALLS_CROSSED (REGNO (src))
-					-= num_calls2;
-				      insn_const = 0;
-				    }
-				}
-			    }
-			  if (0) ;
-#if defined (HAVE_PRE_INCREMENT) || defined (HAVE_PRE_DECREMENT)
-			  else if ((code == PLUS || code == MINUS)
-				   && insn_const
-				   && try_auto_increment (p, insn, 0,
-							  src, insn_const, 1))
-			    insn = p;
-#endif
-#if defined (HAVE_POST_INCREMENT) || defined (HAVE_POST_DECREMENT)
-			  else if (post_inc
-				   && try_auto_increment (p, post_inc,
-							  post_inc_set, src,
-							  newconst, 0))
-			    post_inc = 0;
-#endif
-#if defined (HAVE_PRE_INCREMENT) || defined (HAVE_PRE_DECREMENT)
-			  /* If post_inc still prevails, try to find an
-			     insn where it can be used as a pre-in/decrement.
-			     If code is MINUS, this was already tried.  */
-			  if (post_inc && code == PLUS
-			  /* Check that newconst is likely to be usable
-			     in a pre-in/decrement before starting the
-			     search.  */
-			      && (0
-#if defined (HAVE_PRE_INCREMENT)
-				  || (newconst > 0 && newconst <= MOVE_MAX)
-#endif
-#if defined (HAVE_PRE_DECREMENT)
-				  || (newconst < 0 && newconst >= -MOVE_MAX)
-#endif
-				 ) && exact_log2 (newconst))
-			    {
-			      rtx q, inc_dest;
-
-			      inc_dest
-				= post_inc_set ? SET_DEST (post_inc_set) : src;
-			      for (q = post_inc; q = NEXT_INSN (q); )
-				{
-				  if (GET_CODE (q) == CODE_LABEL
-				      || GET_CODE (q) == JUMP_INSN
-				      || (GET_CODE (q) == NOTE
-					  && ((NOTE_LINE_NUMBER (q)
-					       == NOTE_INSN_LOOP_BEG)
-					      || (NOTE_LINE_NUMBER (q)
-						  == NOTE_INSN_LOOP_END))))
-				    break;
-				  if (GET_RTX_CLASS (GET_CODE (q)) != 'i')
-				    continue;
-				  if (src != inc_dest
-				      && (reg_overlap_mentioned_p (src,
-								   PATTERN (q))
-					  || reg_set_p (src, q)))
-				    break;
-				  if (reg_set_p (inc_dest, q))
-				    break;
-				  if (reg_overlap_mentioned_p (inc_dest,
-							       PATTERN (q)))
-				    {
-				      try_auto_increment (q, post_inc,
-							  post_inc_set,
-							  inc_dest,
-							  newconst, 1);
-				      break;
-				    }
-				}
-			    }
-#endif /* defined (HAVE_PRE_INCREMENT) || defined (HAVE_PRE_DECREMENT) */
-			  /* Move the death note for DST to INSN if it is used
-			     there.  */
-			  if (reg_overlap_mentioned_p (dst, PATTERN (insn)))
-			    {
-			      XEXP (dst_note, 1) = REG_NOTES (insn);
-			      REG_NOTES (insn) = dst_note;
-			    }
-    
-			  if (src_note)
-			    {
-			      /* Move the death note for SRC from INSN to P.  */
-			      if (! overlap)
-				remove_note (insn, src_note);
-			      XEXP (src_note, 1) = REG_NOTES (p);
-			      REG_NOTES (p) = src_note;
-    
-			      REG_N_CALLS_CROSSED (REGNO (src)) += num_calls;
-			    }
-    
-			  REG_N_SETS (REGNO (src))++;
-			  REG_N_SETS (REGNO (dst))--;
-    
-			  REG_N_CALLS_CROSSED (REGNO (dst)) -= num_calls;
-    
-			  /* ??? Must adjust reg_live_length, and reg_n_refs for
-			     both registers.  Must keep track of loop_depth in
-			     order to get reg_n_refs adjustment correct.  */
-    
-			  if (regmove_dump_file)
-			    fprintf (regmove_dump_file,
-				     "Fixed operand %d of insn %d matching operand %d.\n",
-				     operand_number, INSN_UID (insn),
-				     match_number);
-    
-			  goto done_forwards;
-			}
-		    }
-		}
-	    done_forwards:
-	      ;
-	    }
-	}
-    }
-
-  /* A backward pass.  Replace input operands with output operands.  */
-
-  if (regmove_dump_file)
-    fprintf (regmove_dump_file, "Starting backward pass...\n");
-
-  for (insn = get_last_insn (); insn; insn = PREV_INSN (insn))
-    {
-      if (GET_RTX_CLASS (GET_CODE (insn)) == 'i')
-	{
-	  int insn_code_number = recog_memoized (insn);
-	  int operand_number, match_number;
-	  
-	  if (insn_code_number < 0)
-	    continue;
-
-	  insn_extract (insn);
-	  if (! constrain_operands (insn_code_number, 0))
-	    continue;
-	  
-	  commutative = -1;
-
-	  /* Must initialize this before the loop, because the code for
-	     the commutative case may set matches for operands other than
-	     the current one.  */
-	  bzero (matches, sizeof (matches));
-
-	  for (operand_number = 0;
-	       operand_number < insn_n_operands[insn_code_number];
-	       operand_number++)
-	    {
-	      int output_operand = 0;
-	      int matching_operand = operand_number;
-	      char *p, c;
-	      int i = 0;
-
-	      modified[operand_number] = 0;
-	      early_clobber[operand_number] = 0;
-
-	      p = insn_operand_constraint[insn_code_number][operand_number];
-
-	      if (*p == '=')
-		modified[operand_number] = 2;
-	      else if (*p == '+')
-		modified[operand_number] = 1;
-
-	      for (; *p && i < which_alternative; p++)
-		if (*p == ',')
-		  i++;
-
-	      while ((c = *p++) != '\0' && c != ',')
-		switch (c)
-		  {
-		  case '=':
-		    break;
-		  case '+':
-		    break;
-		  case '&':
-		    early_clobber[operand_number] = 1;
-		    break;
-		  case '%':
-		    commutative = operand_number;
-		    break;
-		  case '0': case '1': case '2': case '3': case '4':
-		  case '5': case '6': case '7': case '8': case '9':
-		    c -= '0';
-		    matches[c][operand_number] = 1;
-		    if (commutative >= 0)
-		      {
-			if (c == commutative || c == commutative + 1)
-			  {
-			    int other = c + (c == commutative ? 1 : -1);
-			    matches[other][operand_number] = 1;
-			  }
-			if (operand_number == commutative
-			    || operand_number == commutative + 1)
-			  {
-			    int other = (operand_number
-					 + (operand_number == commutative
-					    ? 1 : -1));
-			    matches[c][other] = 1;
-			  }
-		      }
-		    break;
-		  }
-	    }
-
-	  /* Now scan through the operands looking for a destination operand
-	     which is supposed to match a source operand.
-	     Then scan backward for an instruction which sets the source
-	     operand.  If safe, then replace the source operand with the
-	     dest operand in both instructions.  */
-
-	  for (operand_number = 0;
-	       operand_number < insn_n_operands[insn_code_number];
-	       operand_number++)
-	    {
-	      for (match_number = 0;
-		   match_number < insn_n_operands[insn_code_number];
-		   match_number++)
-		{
-		  rtx set, p, src, dst;
-		  rtx src_note, dst_note;
-		  int success = 0;
-		  int num_calls = 0;
-
-		  /* Nothing to do if the two operands aren't supposed to
-		     match.  */
-		  if (matches[operand_number][match_number] == 0)
-		    continue;
-
-		  dst = recog_operand[operand_number];
-		  src = recog_operand[match_number];
-
-		  if (GET_CODE (src) != REG
-		      || REGNO (src) < FIRST_PSEUDO_REGISTER)
-		    continue;
-
-		  if (GET_CODE (dst) != REG
-		      || REGNO (dst) < FIRST_PSEUDO_REGISTER)
-		    continue;
-
-		  /* If the operands already match, then there is nothing
-		     to do.  */
-		  if (operands_match_p (src, dst))
-		    continue;
-
-		  set = single_set (insn);
-		  if (! set)
-		    continue;
-
-		  /* operand_number/dst must be a write-only operand, and
-		     match_operand/src must be a read-only operand.  */
-		  if (modified[match_number] != 0)
-		    continue;
-
-		  if (early_clobber[operand_number] == 1)
-		    continue;
-
-		  if (modified[operand_number] != 2)
-		    continue;
-
-		  /* Make sure operand_number is the destination.  */
-		  if (recog_operand[operand_number] != SET_DEST (set))
-		    continue;
-	      
-		  if (! (src_note = find_reg_note (insn, REG_DEAD, src)))
-		    continue;
-
-		  /* Can not modify an earlier insn to set dst if this insn
-		     uses an old value in the source.  */
-		  if (reg_overlap_mentioned_p (dst, SET_SRC (set)))
-		    continue;
-
-		  if (regmove_dump_file)
-		    fprintf (regmove_dump_file,
-			     "Could fix operand %d of insn %d matching operand %d.\n",
-			     operand_number, INSN_UID (insn), match_number);
-
-		  /* ??? If src is set once, and is set equal to a constant,
-		     then do not use it for this optimization, as this would
-		     make it no longer equivalent to a constant?  */
-
-		  /* Scan backward to find the first instruction that uses
-		     the input operand.  If the operand is set here, then
-		     replace it in both instructions with operand_number.  */
-
-		  for (p = PREV_INSN (insn); p; p = PREV_INSN (p))
-		    {
-		      rtx pset;
-
-		      if (GET_CODE (p) == CODE_LABEL
-			  || GET_CODE (p) == JUMP_INSN
-			  || (GET_CODE (p) == NOTE
-			      && (NOTE_LINE_NUMBER (p) == NOTE_INSN_LOOP_BEG
-				  || NOTE_LINE_NUMBER (p) == NOTE_INSN_LOOP_END)))
-			break;
-
-		      if (GET_RTX_CLASS (GET_CODE (p)) != 'i')
-			continue;
-
-		      /* ??? See if all of SRC is set in P.  This test is much
-			 more conservative than it needs to be.  */
-		      pset = single_set (p);
-		      if (pset && SET_DEST (pset) == src)
-			{
-			  /* We use validate_replace_rtx, in case there
-			     are multiple identical source operands.  All of
-			     them have to be changed at the same time.  */
-			  if (validate_replace_rtx (src, dst, insn))
-			    {
-			      if (validate_change (p, &SET_DEST (pset),
-						   dst, 0))
-				success = 1;
-			      else
-				{
-				  /* Change all source operands back.
-				     This modifies the dst as a side-effect.  */
-				  validate_replace_rtx (dst, src, insn);
-				  /* Now make sure the dst is right.  */
-				  validate_change (insn,
-						   recog_operand_loc[operand_number],
-						   dst, 0);
-				}
-			    }
-			  break;
-			}
-
-		      if (reg_overlap_mentioned_p (src, PATTERN (p))
-			  || reg_overlap_mentioned_p (dst, PATTERN (p)))
-			break;
-
-		      /* If we have passed a call instruction, and the
-			 pseudo-reg DST is not already live across a call,
-			 then don't perform the optimization.  */
-		      if (GET_CODE (p) == CALL_INSN)
-			{
-			  num_calls++;
-
-			  if (REG_N_CALLS_CROSSED (REGNO (dst)) == 0)
-			    break;
-			}
-		    }
-
-		  if (success)
-		    {
-		      /* Remove the death note for SRC from INSN.  */
-		      remove_note (insn, src_note);
-		      /* Move the death note for SRC to P if it is used
-			 there.  */
-		      if (reg_overlap_mentioned_p (src, PATTERN (p)))
-			{
-			  XEXP (src_note, 1) = REG_NOTES (p);
-			  REG_NOTES (p) = src_note;
-			}
-		      /* If there is a REG_DEAD note for DST on P, then remove
-			 it, because DST is now set there.  */
-		      if (dst_note = find_reg_note (p, REG_DEAD, dst))
-			remove_note (p, dst_note);
-
-		      REG_N_SETS (REGNO (dst))++;
-		      REG_N_SETS (REGNO (src))--;
-
-		      REG_N_CALLS_CROSSED (REGNO (dst)) += num_calls;
-		      REG_N_CALLS_CROSSED (REGNO (src)) -= num_calls;
-
-		      /* ??? Must adjust reg_live_length, and reg_n_refs for
-			 both registers.  Must keep track of loop_depth in
-			 order to get reg_n_refs adjustment correct.  */
-
-		      if (regmove_dump_file)
-			fprintf (regmove_dump_file,
-				 "Fixed operand %d of insn %d matching operand %d.\n",
-				 operand_number, INSN_UID (insn), match_number);
-
-		      goto done_backwards;
-		    }
-		}
-	    }
-	done_backwards:
-	  ;
-	}
-    }
-#endif /* REGISTER_CONSTRAINTS */
-}
-
-/* return nonzero if X is stable but for mentioning SRC or mentioning /
-   changing DST .  If in doubt, presume it is unstable.  */
-static int
-stable_but_for_p (x, src, dst)
-     rtx x, src, dst;
-{
-  RTX_CODE code = GET_CODE (x);
-  switch (GET_RTX_CLASS (code))
-    {
-    case '<': case '1': case 'c': case '2': case 'b': case '3':
-      {
-	int i;
-	char *fmt = GET_RTX_FORMAT (code);
-	for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--)
-	  if (fmt[i] == 'e' && ! stable_but_for_p (XEXP (x, i), src, dst))
-	      return 0;
-	return 1;
-      }
-    case 'o':
-      if (x == src || x == dst)
-	return 1;
-      /* fall through */
-    default:
-      return ! rtx_unstable_p (x);
-    }
-}
