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.
