Fri Dec 31 19:10:31 1999  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>

	* function.c (update_temp_slot_address): Handle case where sum of
	temporary address plus offset in register is a valid address.

1999-12-30  Herman A.J. ten Brugge  <Haj.Ten.Brugge@net.HCC.nl>

	* genrecog.c (change_state) Corrected typo.

1999-12-30  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* system.h (bcopy, bcmp, bzero, index, rindex, atof, atol, free,
	getcwd, getenv, getwd, sbrk, strstr, malloc, calloc, realloc,
	strerror, getrlimit, setrlimit, abort): Add prototype arguments.

1999-12-30  Bernd Schmidt  <bernds@cygnus.co.uk>

	* i386.c (ix86_expand_fp_compare): In non-sahf non-TARGET_IEEE
	case, expand GT comparisons correctly.  Fix a comment before this
	part of the code.

1999-12-30  Gabriel Dos Reis  <dosreis@cmla.ens-cachan.fr>

	* dwarfout.c: Include "frame.h"
	* dwarf2out.c: Likewise.
	* Makefile.in (dwarfout.o): Depend on frame.h
	(dwarf2out.o): Likewise.

1999-12-29  "Martin v. Löwis" <martin@loewis.home.cs.tu-berlin.de>

	Restore i386 binary compatibility in Dwarf EH info.
	* config/i386/i386.h (DWARF_FRAME_REGISTERS): Define as 17, the old
	value of FIRST_PSEUDO_REGISTER.
	* frame.h (DWARF_FRAME_REGISTERS): Default to FIRST_PSEUDO_REGISTER.
	(struct frame_state): Use DWARF_FRAME_REGISTERS.
	* dwarfout.c (output_reg_number): Ditto.
	* dwarf2out.c (reg_number, expand_builtin_init_dwarf_reg_sizes): Ditto.
	(DWARF_FRAME_RETURN_COLUMN): Default to DWARF_FRAME_REGISTERS.

1999-12-29  Bruce Korb  <autogen@linuxbox.com>

	* fixinc/fixincl.c(wait_for_pid): sometimes a WSTOPSIG of zero is OK
	* fixinc/fixincl.tpl(<hack>TEST_CT): Just do the existence test once
	(<hack>_RE_CT): not needed
	* fixinc/fixlib.c(is_cxx_header): moved from fixtests.c
	rewritten to scan the file text once only
	"template<..." test added
	* fixinc/fixlib.h(apply_fix_p_t): moved from fixtests.c
	(is_cxx_header): declaration added
	* fixinc/fixtests.c(is_cxx_header): removed
	(apply_fix_p_t): removed
	(double_slash_test): is_cxx_header is only called once now
	* fixinc/hackshell.tpl: indexing the fixes is now done under DEBUG
	* fixinc/inclhack.def(FIXINC_DEBUG): added for testing DEBUG state
	within the templates.
	The borken spelling of "broken" was fixed.
	* fixinc/inclhack.tpl: The $VERBOSE level is used on various messages
	The default level depends on FIXINC_DEBUG.

1999-12-29  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* crtstuff.c: If !inhibit_libc, include stdlib.h/unistd.h.
	Otherwise provide a declaration for atexit.
	(init_dummy): Make sure dummy call to atexit is nevertheless
	called with correct number of args.

	* frame.c: Update comments referring to other files.

	* libgcc2.c: Likewise.

1999-12-29  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* cse.c (free_element, get_element): Remove unused prototypes.

	* fold-const.c (extract_muldiv): Initialize variables `op0' and
	`op1'.

	* jump.c (invert_exp): Add explicit braces to avoid ambiguous
	`else' clauses.

Wed Dec 29 12:44:54 1999  Donald Lindsay  <dlindsay@cygnus.com>

	* configure.in,configure: case arm for mn10200-*-* now sets
	float_format=i32 so that float.h will correctly claim "double"
	to be 32 bits. Ran autoconf to generate configure from .in file.

Wed Dec 29 10:53:21 1999  Jeffrey A Law  (law@cygnus.com)

	* pa.md (conditional zero): If op1 is a register, force it into
	the same register as op0.

1999-12-28  Mark Mitchell  <mark@codesourcery.com>

	* tree.h (BINFO_BASETYPES): Improve documentation.

1999-12-28  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* configure.in (--enable-checking): Use a more portable `for'
	loop syntax.

1999-12-28  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* configure.in (AC_DECL_SYS_SIGLIST, xm-siglist.h,
	arm/xm-netbsd.h, NO_SYS_SIGLIST): Don't use.

	* xm-siglist.h, arm/xm-netbsd.h, mips/xm-news.h, mips/xm-sysv4.h:
	Delete files.

	* gcc.texi (NO_SYS_SIGLIST, sys_siglist, SYS_SIGLIST_DECLARED):
	Delete descriptions.

	* i386/osf1elf.h, i386/xm-cygwin.h, i386/xm-mingw32.h, m68k/3b1.h,
	m68k/a-ux.h, m68k/dpx2.h, m68k/plexus.h, m68k/xm-hp320.h,
	m88k/xm-m88k.h, mips/x-sni-svr4, pa/xm-pa.h, pa/xm-pahpux.h,
	pa/xm-papro.h, we32k/xm-we32k.h, winnt/xm-winnt.h, xm-interix.h,
	xm-svr4.h: Remove all instances of sys_siglist handling.

1999-12-27  Jakub Jelinek  <jakub@redhat.com>

	* config/sparc/sparc.md (cmp_zero_qi,
	cmp_zero_extendqisi2_andcc_set, cmp_zero_qi_sp64,
	cmp_zero_extendqidi2_andcc_set): New patterns.

1999-12-28  Manfred Hollstein  <mhollstein@cygnus.com>

	* m68k/t-mot3300-gald (CROSS_LIBGCC1): Define to libgcc1-asm.a.
	(LIB1ASMSRC, LIB1ASMFUNCS, LIB2FUNCS_EXTRA): Define.
	(fpgnulib.c, xfgnulib.c): Add rules.
	* m68k/t-mot3300-gas: Likewise.

1999-12-27  Ian Lance Taylor  <ian@zembu.com>

	* configure.in: Avoid [[ by using test and changequote.  Add
	changequote required by 1999-12-14 change.
	* configure: Rebuild.

1999-12-27  Clinton Popetz  <cpopetz@cygnus.com>

	* config/mips/mips.h: Fix typo from 12/17/99 libgcc2 fix.

1999-12-27  Christophe Jaillet  <jaillet.christophe@caramail.com>

	* alias.c (nonlocal_reference_p): Add else for disjoint ifs.
	* flow.c (find_use_as_address): Likewise.
	* function.c (fixup_var_refs_1): Likewise.
	(walk_fixup_memory_subreg, fixup_stack_1): Likewise.
	* jump.c (invert_exp, redirect_exp): Likewise.
	* loop.c (replace_call_address): Likewise.
	(count_nonfixed_reads): Likewise.
	* rtlanal.c (modified_between_p): Likewise.
	(modified_in_p, volatile_insn_p, volatile_refs_p): Likewise.
	(side_effects_p, replace_regs, jmp_uses_reg_or_mem): Likewise.
	* unroll.c (remap_split_bivs): Likewise.

1999-12-27  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* diagnostic.c (v_message_with_decl): Use .* format specifier
	instead of building the format specifier width manually.

	* system.h (strsignal): Don't check HAVE_STRSIGNAL when
	determining whether to provide a prototype.  Remove the
	sys_siglist clause in the conditional.

1999-12-23  Martin v. Löwis  <loewis@informatik.hu-berlin.de>

	* fold-const.c (operand_equal_p): Use memcmp to compare string
	constants.
	Suggested by D. J. Bernstein

1999-12-17  Jakub Jelinek  <jakub@redhat.com>

	* config/h8300/h8300.h (TARGET_H8300H, TARGET_H8300S): Make sure
	UNITS_PER_WORD and BITS_PER_WORD are compile time constants when
	compiling libgcc2.
	* config/mips/mips.h (TARGET_64BIT): Likewise.
	* config/rs6000/rs6000.h (TARGET_POWERPC64): Likewise.
	* libgcc2.c: Use {,U}{HW,W,DW}type and DWunion everywhere instead
	of {SI,DI}type and DIunion.  Define these types to QI/HI modes on
	dsps.  Give routines proper names if SI/DI modes are not used.
	* longlong.h: Use DWunion instead of DIunion.

1999-12-26  Zack Weinberg  <zack@wolery.cumb.org>

	* acconfig.h: New ENABLE flags: TREE_CHECKING, RTL_CHECKING,
	GC_CHECKING, GC_ALWAYS_COLLECT.
	* configure.in: Allow --enable-checking with an argument
	listing check modes to enable.
	* config.in, configure: Rebuilt.
	* ggc-page.c, ggc-simple.c: Define GGC_POISON (and
	GGC_ALWAYS_VERIFY for ggc-simple.c) only if
	ENABLE_GC_CHECKING.  Define GGC_ALWAYS_COLLECT only if
	ENABLE_GC_ALWAYS_COLLECT.
	* rtl.h, rtl.c: Change ENABLE_CHECKING to ENABLE_RTL_CHECKING
	throughout.
	* tree.h, tree.c: Change ENABLE_CHECKING to
	ENABLE_TREE_CHECKING throughout.

Sun Dec 26 07:48:20 1999  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>

	* fold-const.c (fold_truthop): Properly check for FP RHS.

1999-12-24  Mark Mitchell  <mark@codesourcery.com>

	* toplev.h (note_deferall_of_defined_inline_function): Declare.
	* toplev.c (note_deferral_of_defined_inline_function): New
	function, split out from ...
	(rest_of_compilation): ... here.  Use it.

Fri Dec 24 12:34:26 1999  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>

	* expr.c (store_constructor): Don't call clear_storage if size is
	variable.

1999-12-24  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

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

	* dwarfout.c: Include tm_p.h.

	* emit-rtl.c (restore_emit_status): Mark parameter with
	ATTRIBUTE_UNUSED.

	* final.c (final_scan_insn): Likewise.

	* flow.c (flow_nodes_print, flow_exits_print, flow_loops_cfg_dump,
	flow_loop_nested_p, flow_loop_exits_find, flow_loop_nodes_find,
	flow_depth_first_order_compute, flow_loop_pre_header_find,
	flow_loop_tree_node_add, flow_loops_tree_build,
	flow_loop_level_compute, flow_loops_level_compute,
	flow_loop_outside_edge_p): Add prototypes.
	(recompute_reg_usage): Mark parameters with ATTRIBUTE_UNUSED.

	* ggc-callbacks.c (lang_mark_tree, lang_mark_false_label_stack):
	Mark with ATTRIBUTE_NORETURN.

	* hash.c (hash_newfunc): Mark parameter with ATTRIBUTE_UNUSED.

	* local-alloc.c (no_conflict_p): Likewise.

	* loop.c (insert_bct): Hide definitions of variables with hidden
	usage.
	(note_reg_stored): Mark parameter with ATTRIBUTE_UNUSED.

	* regclass.c (memory_move_secondary_cost): Mark variable `mem'
	with ATTRIBUTE_UNUSED.
	(record_reg_classes): Mark parameter with ATTRIBUTE_UNUSED.
	(reg_scan): Likewise.

	* reload.c (find_reloads): Remove unused variables `changed'.

	* reload1.c (reload_reg_class_lower): Don't unnecessarily cast
	away const-ness.
	(allocate_reload_reg): Mark parameter with ATTRIBUTE_UNUSED.
	Remove unused variable `insn'.

	* toplev.c: Include loop.h.
	(report_file_and_line): Remove unnecessary prototype.

	* tree.c (build_block): Mark parameter with ATTRIBUTE_UNUSED.

	* unroll.c (biv_total_increment): Likewise.

Thu Dec 23 23:15:22 1999  J"orn Rennecke <amylaar@cygnus.co.uk>

	* reload1.c (emit_input_reload_insns): Restore old behavior
	wrt. 'special' reloads.

1999-12-23  Zack Weinberg  <zack@wolery.cumb.org>

	* Makefile.in (ggc-simple.c, ggc-page.c): Don't depend on
	hash.h.  (cse.c): Don't depend on hashtab.h.

	* cse.c: Don't include hashtab.h.
	(hash_cse_reg_info, cse_reg_info_equal_p): Delete prototypes
	of dead functions.
	* ggc-simple.c: Don't include hash.h.

1999-12-22  Jason Merrill  <jason@casey.cygnus.com>

	* dwarf2out.c (add_abstract_origin_attribute): Call
	gen_abstract_function on our function context.

Thu Dec 23 03:57:10 1999  Hans-Peter Nilsson  <hp@bitrange.com>

	* Makefile.in (INTEGRATE_H): Fix typo: INTEGRATE_H, not INTREGRATE_H.

1999-12-23  Michael Hayes  <m.hayes@elec.canterbury.ac.nz>

	* config/c4x/c4x.c (c4x_address_cost): Add statement to default
	case in switch.

1999-12-22  Michael Hayes  <m.hayes@elec.canterbury.ac.nz>

	* config/c4x/c4x.md (*addqi3_noclobber_reload): Change operand 0
	constraints to "a!r".

1999-12-21  Mark Mitchell  <mark@codesourcery.com>

	* Makefile.in (calls.o): Depend on function.h.
	(alias.o): Likewise.

1999-12-21  Bernd Schmidt  <bernds@cygnus.co.uk>

	* reload1.c (emit_reload_insns): Break out code and variables into...
	(input_reload_insns, other_input_address_reload_insns,
	other_input_reload_insns, input_address_reload_insns,
	inpaddr_address_reload_insns, output_reload_insns,
	output_address_reload_insns, outaddr_address_reload_insns,
	operand_reload_insns, other_operand_reload_insns,
	other_output_reload_insns): ... new static variables, and...
	(emit_input_reload_insns, emit_output_reload_insns, do_input_reload,
	do_output_reload): ... new functions.

Tue Dec 21 07:06:36 1999  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>

	* pa.h (FUNCTION_ARG_BOUNDARY): Never return 0.

1999-12-21  Michael Hayes  <m.hayes@elec.canterbury.ac.nz>

	* md.texi: Add c4x constraints documentation.

1999-12-21  Martin v. Löwis  <loewis@informatik.hu-berlin.de>

	* config/i386/dgux.c (struct option): Rename to
	lang_independent_option.
	(struct m_options): Add description field.
	(output_options): Rename option type, add sep declaration, output
	ix86_cpu_string and ix86_arch_string only if set.
	(output_file_start): Rename option type.

Mon Dec 20 23:15:36 1999  Mike Stump  <mrs@wrs.com>

	* Makefile.in (crtbegin.o, crtend.o, s-crtS): Depend on
	stmp-int-hdrs.
	(libgcc2.a): Similarly.

Mon Dec 20 23:06:47 1999  David Edelsohn  <edelsohn@gnu.org>

	* longlong.h (_ARCH_PPC): Only protect add_ssaaaa and sub_ddmmss
	with W_TYPE_SIZE == 32.  Do not fall through to POWER architecture
	for umul_ppmm and smul_ppmm if !_ARCH_PPC and !_ARCH_POWER.

Mon Dec 20 23:02:03 1999  Jeffrey A Law  (law@cygnus.com)

	* fold-const.c (real_hex_to_f): Remove unused "isldouble" variable.
	Remove redundant initialization of "frexpon" and "expon".

Mon Dec 20 15:00:04 1999  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>

	* tree.c (real_value_from_int_cst): Clear REAL_VALUE_TYPE object first.

	* expr.c (store_constructor): New argument SIZE; pass to clear_storage.
	(store_constructor_field, expand_expr): Pass new arg.

1999-12-20  Mark Mitchell  <mark@codesourcery.com>

	* Makefile.in (explow.o): Depend on function.h.

	* stor-layout.c (set_sizetype): Fix typo.

1999-12-20  Bernd Schmidt  <bernds@cygnus.co.uk>

	* function.c (cfun): Renamed from current_function.  All users
	changed.
	* function.h (cfun): Rename declaration as well.

	* reload.h (struct insn_chain): Change live_throughout and dead_or_set
	to be of type regset_head, not regset.  All users changed by adding
	address operator.
	* reload1.c (new_insn_chain): Don't allocate regsets, just clear them.

1999-12-20  Michael Hayes  <m.hayes@elec.canterbury.ac.nz>

	* config/c4x/rtems.h: New file.

1999-12-19  Bernd Schmidt  <bernds@cygnus.co.uk>

	* reload1.c (spill_failure): Take class of failed reload as argument
	and print it.  Caller changed.

Sun Dec 19 07:50:42 1999  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>

	* rs6000.h (SUBTARGET_DEFAULT): New macro.
	(TARGET_SWITCHES): Allow subtargets to default switches.
	* rs6000/vxppc.h (SUBTARGET_DEFAULT): New macro.

1999-12-18  Mark Mitchell  <mark@codesourcery.com>

	* crtstuff.c (__do_global_ctors_aux): Do not call __cxa_finalize
	in a main program.

Sat Dec 18 20:42:43 1999  Richard Henderson  <rth@cygnus.com>

	* cccp.c (main): Define __STDC_VERSION__ as necessary.
	* cppinit.c (cpp_handle_option): Likewise.

	* ginclude/stdarg.h (va_copy): Use __STDC_VERSION__ to
	determine when to define.

Sat Dec 18 20:34:00 1999  Richard Henderson  <rth@cygnus.com>

	* alpha.c (alpha_emit_conditional_move): If TARGET_FIX, handle
	cmove with mismatched test and data modes.

Sat Dec 18 20:30:15 1999  Richard Henderson  <rth@cygnus.com>

	* c-typeck.c (c_expand_start_case): Don't warn for long switch
	in system headers.

Sat Dec 18 16:28:43 1999  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>

	* alias.c: Minor reformatting.
	* flow.c: Likewise.
	* regs.h: Likewise.
	* stor-layout.c: Likewise.
	* fold-const.c: Likewise.
	(OVERFLOW_SUM_SIGN): Renamed from overflow_sum_sign.
	(struct cb_args, const_binop_1, const_binop): Pass type of arg,
	not arg itself.
	(size_int_wide): Cache nodes even if garbage collecting.
	(twoval_comparison_p): Reenable SAVE_EXPR case if operand
	of SAVE_EXPR has no side effects.
	* cse.c: Move a comment.
	* tree.c: Minor reformatting.
	(int_size_in_bytes): Return -1 if constant overflows.

Sat Dec 18 18:30:20 1999  J"orn Rennecke <amylaar@cygnus.co.uk>

	* unroll.c (copy_loop_body): Don't treat a REG like a PLUS.

1999-12-18 10:42 -0800  Zack Weinberg  <zack@wolery.cumb.org>

	* objc/objc-parse.c: Regenerate.  This file must be rebuilt
	after any change to c-parse.in, even if objc-parse.y didn't
	change.  Oops.

1999-12-18  David S. Miller  <davem@redhat.com>

	* toplev.c (rest_of_compilation): Restore BLOCK tree
	reconstruction and branch shortening changes lost in
	December 18th change.

Sat Dec 18 05:29:29 1999  Scott Bambrough  <scottb@netwinder.org>

	* config/arm/linux-elf.h: Change all instances of
	ARM_FLAG_SHORT_BYTES to ARM_FLAG_MMU_TRAPS.
	* config/arm/uclinux-elf.h: Likewise.

1999-12-18 Gabriel Dos Reis  <gdr@codesourcery.com>

	* toplev.c (notice, vmessage, v_message_with_file_and_line,
	v_message_with_decl, file_and_line_for_asm,
	v_error_with_file_and_line, v_error_with_decl, v_error_for_asm,
	verror, vfatal, v_warning_with_file_and_line, v_warning_with_decl,
	v_warning_for_asm, vwarning, vpedwarn, v_pedwarn_with_decl,
	v_pedwarn_with_file_and_line, vsorry, vnotice, count_error,
	pfatal_with_name, fatal_io_error, need_error_newline,
	last_error_function, last_error_tick, announce_function,
	default_print_error_function, print_error_function,
	report_error_function, fnotice, error_with_file_and_line,
	error_with_decl, error_for_asm, error, set_fatal_function, fatal,
	_fatal_insn, _fatal_insn_not_found, warning_with_file_and_line,
	warning_with_decl, warning_for_asm, warning, pedwarn,
	pedwarn_with_decl, pedwarn_with_file_and_line, sorry): Move to
	diagnostic.c
	(compile_file): Use fnotice instead of notice.  Adjust call.

	* diagnostic.c: New file.

	* Makefile.in (OBJS): Include diagnostic.o
	(diagnostic.o): Define dependence.

1999-12-18  Michael Hayes  <m.hayes@elec.canterbury.ac.nz>

	* config/c4x/c4x.h (ASM_OUTPUT_XXX): Wrap in do-while(0).
	Tweak formatting.

1999-12-18  Michael Hayes  <m.hayes@elec.canterbury.ac.nz>

	* config/c4x/c4x.md (rpts_top, rptb_top): Add clobbers for rs and re.

1999-12-17 13:21 -0800  Zack Weinberg  <zack@rabi.columbia.edu>

	* fixtests.c (is_cxx_header): New fn, split out of
	double_slash_test.
	(else_endif_label): Allow "#endif // comment" in C++ headers,
	as determined by is_cxx_header.
	* fixfixes.c (else_endif_label_fix): Update comment.
	* fixincl.c: Don't output VERB_PROGRESS lines if stdout is not
	a tty.
	* genfixes: Correct double thinko in commandline parsing.
	* hackshell.tpl: Generate correct sh syntax for bypass
	entries.

	* inclhack.def (all): Whenever an inserted preprocessor
	conditional is split over multiple lines, use double
	backslashes in this file so the fixed header will be readable.

	(AAB_fd_zero_glibc_1_0): Rename to AAB_fd_zero_asm_posix_types_h
	and add bypass entry for correct version of this header.
	(AAB_fd_zero_glibc_1_x): Rename to AAB_fd_zero_gnu_types_h.
	(AAB_fd_zero_glibc_2_0): Rename to AAB_fd_zero_selectbits_h.

	(hpux8_bogus_inlines): New fix, split from...
	(ultrix_atof_param) ... here.
	(math_expression): Add bypass entry keyed to glibc comment
	indicating the problem has been dealt with; disable
	unnecessary sed operations; update commentary.
	(math_gcc_ifndefs): Rename to math_huge_val_from_dbl_max,
	add select and bypass entries, simplify shell operation.
	(math_huge_val_ifndef): Split from math_gcc_ifndefs.

	(ip_missing_semi, rs6000_param, tinfo_cplusplus,
	 ultrix_atof_param): Add select entry.
	(stdio_va_list, sunos_mather_decl): Add bypass entry.
	(systypes_for_aix, sysv86_string, tinfo_cplusplus): Put the
	comments with the fixes they describe.

	* c-parse.in (string action): Do not warn about ANSI string
	concatenation in system headers.  Affects C parser only.
	* c-parse.y, c-parse.c, c-parse.h: Rebuild.

1999-12-16  Jakub Jelinek  <jakub@redhat.com>

	* config/sparc/sparc.h (TARGET_ARCH32): Exchange ifdefs so that if
	compiling libgcc2 the macro depends always on arch cpp defines.

Fri Dec 17 10:34:16 1999  Richard Earnshaw <rearnsha@arm.com>

	* loop.c (insert_loop_mem): Don't record MEMs from inside
	EXPR_LISTs.

Fri Dec 17 12:08:11 MET 1999  Jan Hubicka  <hubicka@freesoftr.cz>

	* regclass.c (regclass): Do not use flowgraph when not optimizing.

	* gcse.c (try_replace_reg): Do replacements in REG_EQUAL/REG_EQUIV
	notes too, create one when replacement failed, attempt to simplify
	resulting notes.
	(cprop_insn): Propagate even to registers mentioned only in REG_EQUAL
	or REG_EQUIV notes.

1999-12-16  Mark Mitchell  <mark@codesourcery.com>

	* crtstuff.c (__dso_handle): Declare.
	(__cxa_finalize): Likewise.
	(do_global_dtors_aux): Call __cxa_finalize if __dso_handle is
	non-NULL.

	* invoke.texi: Document -fuse-cxa-atexit.

	* tree.h (ptr_type_node): Document.
	(const_ptr_type_node): Likewise.

Fri Dec 17 01:32:38 MET 1999  Jan Hubicka  <hubicka@freesoft.cz>

	* regmove.c (optimize_reg_copy_1): Ignore LOOP notes.
	(optimize_reg_copy_2): Likewise.
	(optimize_reg_copy_3): Likewise.
	(fixup_match_2): Likewise.
	(regmove_optimize): Likewise.
	(fixup_match_1): Liekwise.

	* i386.md (HI to SImode promoting splitters): Rewrite.
	(pushsf mem peep2): New.
	(testhi to andhi peep2): Remove.
	* i386.h (x86_promote_QImode): New.
	(TARGET_PROMOTE_QImode): New.
	(PREDICATE_CODES): Add promotable_binary_operator.
	* i386.c (x86_promote_QImode0: New.
	(promotable_binary_operator): New.
	* i386-protos.h (promotable_binary_operator): New.

	* i386.md (test?i_1): Use "nonmemory_operand" predicate, simplify
	condition.
	(one_cmpl?i*): Pass "NOT" to unary_operator_ok.

1999-12-16  Mark Mitchell  <mark@codesourcery.com>

	* Makefile.in (INTREGRATE_H): Rename to INTEGRATE_H.
	* function.c (insert_block_after_note): Remove.
	(retrofit_block): Likewise.
	(identify_blocks): Fix indentation.
	(reorder_blocks): Don't NULL out NOTE_SOURCE_FILE for a
	NOTE_INSN_BLOCK_BEG or NOTE_INSN_BLOCK_END.
	* function.h (insert_block_after_note): Remove prototype.
	(retrofit_block): Likewise.
	* integrate.c (expand_inline_function): Don't call
	find_loop_tree_blocks.  Use expand_start_bindings_and_block, not
	just expand_start_bindings.  Use the block_map to remap old
	NOTE_BLOCKs to new ones.
	(integrate_decl_tree): Keep track of remapped blocks.
	* integrate.h (struct inline_remap): Add block_map.
	* stmt.c (expand_fixup): Don't try to retrofit_blocks.  Just set
	NOTE_BLOCK on the notes.
	(expand_start_bindings): Rename to ...
	(expand_start_bindings_and_block): Add parameter.  Set NOTE_BLOCK.
	(expand_end_bindings): Set NOTE_BLOCK.
	* toplev.c (rest_of_compilation): In function-at-a-time-mode,
	reconstruct the BLOCK tree.
	* tree.h (expand_start_bindings): Macroize.  Call ...
	(expand_start_bindings_and_block): New function.

1999-12-16  Jakub Jelinek  <jakub@redhat.com>

	* config/sparc/sparc.c (print_operand): Cast fprintf arguments
	to match the format.

1999-12-16  David S. Miller  <davem@redhat.com>

	* expr.c (emit_move_insn_1): Only emit clobbers if one of
	the outputs is a SUBREG.
	* rtlanal.c (reg_overlap_mentioned_p): Revert December 15th
	change.

	* config/sparc/sparc.c (epilogue_renumber): Add default case
	to switch stmt.

Thu Dec 16 11:33:57 MET 1999  Jan Hubicka  <hubicka@freesoft.cz>

	* toplev.c (rest_of_compilation): Run branch shortening after
	reg-stack.

	* regclass.c (loop_depth): Remove
	(scan_one_insn): Do not handle LOOP_NOTE insns.
	(regclass): Go through basic blocks and set loop_cost

Thu Dec 16 02:56:25 1999  Zack Weinberg  <zack@bitmover.com>

	* tree.h (DECL_FROM_INLINE): Check DECL_ABSTRACT_ORIGIN too.

Thu Dec 16 10:43:35 MET 1999  Jan Hubicka  <hubicka@freesoft.cz>

	* i386.md (movqi): Use "nonimmediate_operand" for output operand.
	(movstrictqi, movdi, movsf, movdf, movxf): Likewise.
	(adddi, addqi, addhi, subdi, subqi, subhi, ffs): Likewise.

Thu Dec 16 02:41:26 1999  Richard Henderson (rth@cygnus.com)

	* loop.c (insert_loop_mem): Ignore memory clobbers.

	* combine.c (simplify_comparison): Reduce (OP (MINUS A B) 0)
	to (OP A B).

Thu Dec 16 02:26:11 1999  Jeffrey A Law  (law@cygnus.com)

	* profile.c: Remove redundant #include "output.h".

	* h8300.md (HImode preinc peephole): Fix typo.

1999-12-15  Jason Merrill  <jason@casey.cygnus.com>

	* function.c (retrofit_block): Abort if we don't find a suitable insn.
	(insert_block_after_note): Abort if we don't have a previous block.
	Remove FN parameter.
	* function.h: Adjust.

1999-12-15  Mark Mitchell  <mark@codesourcery.com>

	* builtins.c (expand_builtin_mathfn): Make sure not to expand the
	argument more than once.

1999-12-15  Jason Merrill  <jason@casey.cygnus.com>

	* stmt.c (expand_decl): Expand upper bound of a dynamic array.

1999-12-15  Jakub Jelinek  <jakub@redhat.com>

	* expr.c (emit_group_load): Use dst mode if src is VOIDmode.

Wed Dec 15 16:11:55 MET 1999  Jan Hubicka  <hubicka@freesoft.cz>

	* function.c (PREFERRED_STACK_BOUDNARY): Provide default value.
	(assign_stack_local_1): Limit alignment to PREFERRED_STACK_BOUNDARY,
	update stack_alignment_needed.
	(prepare_function_start): Initialize stack_alignment_needed
	* function.h (struct function): Add field stack_alignment_needed.

Wed Dec 15 14:55:24 1999  J"orn Rennecke <amylaar@cygnus.co.uk>

	* caller-save.c (insert_one_insn): Returns struct insn_chain *.
	Handle live_throughout / dead_or_set instead of live_before /
	live_after.
	(save_call_clobbered_regs): Get register livenessinformation from
	chain->live_throughout.
	(add_stored_regs): New function.
	(insert_restore, insert_save): Add restored / saved registers to
	dead_or_set.
	* global.c (reg_dies): New parameter chain.
	(reg_becomes_live): Third parameter is regs_set now.
	Changed all callers.
	(reg_dies): New parameter chain.  Changed all callers.
	(build_insn_chain): Set live_throughout instead of
	live_before / live_after.
	* reload.h (struct insn_chain): Replace members live_before /
	live_after with live_throughout / dead_or_set.
	* reload1.c (new_insn_chain): Handle live_throughout / dead_or_set
	instead of live_before / live_after.
	(maybe_fix_stack_asms, find_reload_regs, finish_spills): Likewise.
	(order_regs_for_reload, find_reg, finish_spills): Likewise.
	(choose_reload_regs_init): Likewise.
	* stupid.c (current_chain, find_clobbered_regs): Delete.
	(stupid_life_analysis): Set chain->live_throughout chain->dead_or_set
	instead of chain->live_before / chain->live_after.
	(mark_hard_ref): New function.
	(stupid_mark_refs): Call mark_hard_ref. Clear chain->live_throughout.

1999-12-15  David S. Miller  <davem@redhat.com>

	* rtlanal.c (reg_overlap_mentioned_p): Handle CONCAT.

Wed Dec 15 15:05:30 MET 1999  Jan Hubicka  <hubicka@freesoft.cz>

	* flow.c (calculate_loop_depth): Make global, remove prototype,
	rewrite to use new loop infrastructure.
	(find_basic_block): Remove calculate_loop_depth call.
	* toplev.c (rest_of_compilation): Call find_basic_block.
	* output.h (calculate_loop_depth): Declare.

	* flow.c (dump_flow_info): Dump loop_depth.
	(flow_loops_nodes_find): Increase loop_depth for basic block in the
	body.
	(flow_loops_find): Initialize the loop_depth for each basic block.

1999-12-15  Jason Merrill  <jason@casey.cygnus.com>

	* tree.c (decl_function_context): Handle virtual functions.

	* tlink.c (scan_linker_output): Don't look in demangled name when
	looking for linker output keywords.

	* dwarfout.c (output_type): We can defer namespace-scope classes.

Wed Dec 15 01:23:29 1999  Jeffrey A Law  (law@cygnus.com)

	* regclass.c (record_reg_classes): Update comment for merging
	register class preferences in reg->reg copies.  Tighten conditions
	for merging register class preferences in reg->reg copies.

Wed Dec 15 02:19:32 1999  David Edelsohn  <edelsohn@gnu.org>

	* rs6000.md (tablejumpdi): Generate DImode LABEL_REF.

1999-12-14  Geoff Keating  <geoffk@cygnus.com>

	* config/m68k/m68020-elf.h (ENDFILE_SPEC): Delete.
	(INIT_SECTION_ASM_OP): Delete.
	(FINI_SECTION_ASM_OP): Delete.
	(STARTFILE_SPEC): Define to hold just crtbegin.o.

1999-12-14  Jason Merrill  <jason@casey.cygnus.com>

	* dwarf2out.c (add_abstract_origin_attribute): Do call abort if
	the abstract origin wasn't emitted.

	* dwarf2out.c (class_scope_p): New fn.
	(gen_subprogram_die): Use it.
	(gen_variable_die): Use it.  Tweak logic.
	(gen_struct_or_union_type_die): Check context_die to determine
	if we're function-local.
	(dwarf2out_decl): Check DECL_BUILT_IN, not DECL_FUNCTION_CODE.

1999-12-14  Bernd Schmidt  <bernds@cygnus.co.uk>

	* loop.c (check_dbra_loop): Can't reverse a biv that has
	maybe_multiple set.

1999-12-14  Nick Clifton  <nickc@cygnus.com>

	* config/arm/arm.c: Add support for -mcpu=arm720 command line
	switch.

Tue Dec 14 18:13:32 1999  J"orn Rennecke <amylaar@cygnus.co.uk>

	* loop.c (strength_reduce): Fix sign of giv lifetime calculation
	for givs made from biv increments.

Tue Dec 14 08:11:27 1999  Richard Henderson  <rth@cygnus.com>

	* configure.in (alpha-osf, alpha-linux): Handle ev6[78].
	* alpha.c (override_options): Recognize -mcpu=ev67.
	* alpha.h (CPP_CPU_EV67_SPEC): New.
	(CPP_CPU_DEFAULT_SPEC): Examine TARGET_CPU_DEFAULT to use it.
	(EXTRA_SPECS): Update.

Tue Dec 14 08:04:28 1999  Richard Henderson  <rth@cygnus.com>

	* cppp.c (main): Set trigraphs and __STRICT_ANSI__ as
	appropriate for -lang-c89 and -std=*.
	* cppinit.c (cpp_handle_option): Likewise.
	(new_pending_define): New, split out from cpp_handle_option.
	* gcc.c (default_compilers): Don't define __STRICT_ANSI__
	or enable trigraphs for -ansi/-std=*.

	* ginclude/stdarg.h (__va_copy): New.
	(va_copy): Don't define for C89.

Tue Dec 14 08:37:27 CST 1999 Clinton Popetz  <cpopetz@cygnus.com>

	* config/arm/arm.md (mulsidi3adddi, umulsidi3adddi): New patterns
	for long long multiply-accumulate.

Tue Dec 14 13:51:38 MET 1999  Jan Hubicka  <hubicka@freesoft.cz>

	* regclass.c (scan_one_insn): Set loop_cost to 1 when
	optimizing for size.

1999-12-14  Bernd Schmidt  <bernds@cygnus.co.uk>

	* reload1.c (reload): Can't avoid select_reload_regs/finish_spills
	if something changed.  Back out that part of yesterday's changes.

	* loop.c (loop_max_reg): New static variable.
	(loop_optimize): Initialize it.  Eliminate one unnecessary call to
	max_reg_num.
	(scan_loop): Call reg_scan_update whenever we may have added new
	registers, and update loop_max_reg.

Tue Dec 14 12:07:29 MET 1999  Jan Hubicka  <hubicka@freesoft.cz>

	* regclass.c  (record_reg_classes): Do not do the copying preferrencing
	when source does not die.

	* regclass.c (record_reg_classes): Handle INOUT operands properly.

1999-12-14  Jakub Jelinek  <jakub@redhat.com>

	* config/sparc/linux64.h (TARGET_LIVE_G0,
	TARGET_BROKEN_SAVERESTORE): Don't support weird SPARC
	variants on Linux.
	* config/sparc/linux.h (TARGET_LIVE_G0,
	TARGET_BROKEN_SAVERESTORE): Likewise.
	* config/sparc/linux-aout.h (TARGET_LIVE_G0,
	TARGET_BROKEN_SAVERESTORE): Likewise.

	* config/sparc/sparc.h (SPARC_DEFAULT_CMODEL): Default to CM_32.
	(CONDITIONAL_REGISTER_USAGE): For block profiling fix %g4 on sparc64,
	not %g2.
	(MACHINE_STATE_SAVE, MACHINE_STATE_RESTORE): Use %g4 instead of %g2
	as sparc64 block profiling register.
	* config/sparc/sparc.c (sparc_override_options): Allow block
	profiling with -m32.
	(sparc_block_profiler): Use %g4 instead of %g2 as sparc64 block
	profiling register.
	* config/sparc/linux64.h (MACHINE_STATE_*): Only provide these
	macros on TARGET_ARCH32. sparc.h has macros good enough for sparc64.
	* config/sparc/sol2.h (MACHINE_STATE_*): Likewise.

	* config/sparc/xm-sp64.h: Avoid using __sparc_v9__ when testing
	for sparc64.
	* config/sparc/sparc.h: Likewise.
	* config/sparc/xm-sysv4-64.h: Likewise.
	* config/float-sparc.h: Likewise.
	* glimits.h: Likewise.
	* longlong.h: Likewise.

	* config/sparc/linux64.h (DEFAULT_VTABLE_THUNKS): Define to 1.
	(ASM_IDENTIFY_GCC): Remove.

1999-12-14  Bernd Schmidt  <bernds@cygnus.co.uk>

	* combine.c (combine_simplify_rtx): Don't make shared rtl.
	(simplify_logical): Likewise.

1999-12-14  Mumit Khan  <khan@xraylith.wisc.edu>

	* cccp.c (INO_T_EQ): Disable inode-based optimization for Cygwin.
	* cppfiles.c (INO_T_EQ): Likewise.

1999-12-14  Mumit Khan  <khan@xraylith.wisc.edu>

	* i386/crtdll.h (STARTFILE_SPEC): Add -pg profiling support.
	* i386/mingw32.h (LIB_SPEC): Likewise.
	(STARTFILE_SPEC): Likewise.
	* i386/uwin.h (LIB_SPEC): Likewise.
	(STARTFILE_SPEC): Likewise.

	* i386/mingw32.h (SUBTARGET_PROLOGUE): Override Cygwin definition.
	* i386/uwin.h (SUBTARGET_PROLOGUE): Likewise.

Mon Dec 13 20:25:29 1999  Jeffrey A Law  (law@cygnus.com)

	* combine.c (combine_simplify_rtx): Fix order of checks for
	(ashiftrt foo C) -> (lt foo (const_int 0)) simplification.

1999-12-13  Clinton Popetz  <cpopetz@cygnus.com>

	* config/arm/arm.md  (*mulsidi3adddi, *umulsidi3adddi) Backed out
	12/10/99 change, reapplied to merged-arm-thumb-backend-branch.

1999-12-10  Bernd Schmidt  <bernds@cygnus.co.uk>

	* hard-reg-set.h (inv_reg_alloc_order): Declare if REG_ALLOC_ORDER is
	defined.
	* regclass.c (inv_reg_alloc_order): New array.
	(regclass_init): If REG_ALLOC_ORDER is defined, initialize it.

	* reload.h (struct insn_chain): Delete fields group_size, group_mode,
	counted_for_groups, counted_for_nongroups.  Add fields rld and
	n_reloads.
	* reload.c (push_secondary_reload): Don't set nongroup field of
	new reloads.
	(push_reload): Likewise.
	(find_reloads): Delete code to compute nongroup fields.
	* reload1.c (reload_insn_firstobj): New static variable.
	(pseudos_counted, spilled_pseudos): Now of type regset_head.  All
	users changed.
	(calculate_needs, find_tworeg_group, find_group, possible_group_p,
	count_possible_groups, modes_equiv_for_class_p, new_spill_reg,
	dump_needs, maybe_mark_pseudo_spilled, hard_reg_use_compare): Delete
	functions.
	(count_pseudo, select_reload_regs, copy_reloads, find_reg): New
	functions.
	(struct hard_reg_n_uses): Deleted.
	(potential_reload_regs): Deleted.
	(init_reload): Initialize spilled_pseudos and pseudos_counted.
	(reload): Don't try to allocate reload registers if we already know
	we have to make another pass.  Call select_reload_regs.  Free memory
	starting with reload_firstobj when starting another pass.
	Don't allocate spilled_pseudos.
	(calculate_needs_all_insns): Call copy_reloads for an insn that
	needs reloads; don't call calculate_needs.
	(spill_cost): New static array.
	(used_spill_regs_local): New static variable.
	(order_regs_for_reload): Rewrite to lose hard_reg_n_uses and the code
	to compute potential_reload_regs.
	(find_reload_regs): Completely rewritten to use find_reg.
	(allocate_reload_reg): Don't test counted_for_groups or
	counted_for_nongroups.  Lose NOERROR arg and code to give an error;
	all cllers changed.
	(choose_reload_regs): Add fallback code that uses the existing
	register allocation from find_reload_regs.

Mon Dec 13 00:54:14 1999  Philippe De Muyter  <phdm@macqel.be>

	* flow.c (create_edge_list): Cast xmalloc return value.

Mon Dec 13 00:47:58 1999  Jeffrey A Law  (law@cygnus.com)

	* doprnt.c: Remove incorrect comment closure.

	* cse.c: Fix a few minor whitespace goofs.

1999-12-13  Don Bowman  <don@pixstream.com>

	* mips/vxworks.h: Fix problem with comment termination.
	(EXTRA_SECTIONS): Add in_sbss.
	(EXTRA_SECTION_FUNCTIONS): Corresponding changes.

1999-12-12  David S. Miller  <davem@redhat.com>

	* cse.c (struct cse_reg_info): Add hash_next member,
	reorder rest of struct for better packing on 64-bit
	hosts.
	(cse_reg_info_tree): Kill.
	(REGHASH_SHIFT, REGHASH_SIZE, REGHASH_MASK, reg_hash,
	REGHASH_FN): New custom pow2 hash mechanism.
	(NBUCKETS): Kill.
	(HASH_SHIFT, HASH_SIZE, HASH_MASK, HASH, table): Rework to
	use a pow2 hash table.
	(get_cse_reg_info): Rework to use new REGHASH.
	(new_basic_block): Likewise, use HASH_SIZE, and inline
	free_element call.
	(remove_from_table): Rework to use HASH_SIZE/HASH_MASK,
	and inline free_element call.
	(lookup_as_function, insert, flush_hash_table, invalidate,
	remove_invalid_refs, remove_invalid_subreg_refs, rehash_using_reg,
	invalidate_for_call, use_related_value, find_comparison_args,
	fold_rtx, equiv_constant, cse_insn, invalidate_memory): Likewise.
	(hash_cse_reg_info, cse_reg_info_equal_p, free_element,
	get_element): Kill.

Sun Dec 12 21:31:44 1999  Jeffrey A Law  (law@cygnus.com)

	* cse.c (cse_basic_block): Free qty_table consistently.

1999-12-12  David S. Miller  <davem@redhat.com>
	    Jakub Jelinek    <jakub@redhat.com>

	* config/sparc/sparc.md (movtf reg/reg split): Don't generate
	SUBREGs by hand, gen the appropriate hard reg directly.
	(movtf reg/mem split): Likewise and alter_subreg on destination
	if necessary.
	(movtf mem/reg split): Similarly.
	(movdf_cc_sp64): Rename from hidden pattern.
	(movtf_cc_hq_sp64): Renamed from movtf_cc_sp64.
	(movtf_cc_sp64, following split): New pattern and splitter.
	(movdf_cc_reg_sp64): Rename from hidden pattern.
	(movtf_cc_reg_hq_sp64): Renamed from movtf_cc_reg_sp64, require
	TARGET_HARD_QUAD.
	(movtf_cc_reg_sp64, following split): New pattern and splitter.

1999-12-12  Stephen L Moshier <moshier@mediaone.net>

	* loop.c (load_mems): Don't hoist written floating point mem
	if -ffloat-store.

1999-12-12  Mark Mitchell  <mark@codesourcery.com>

	* except.h (struct eh_queue): Add `next' pointer.
	(struct eh_status): Make x_ehqueue a pointer.
	(push_ehqueue):  Declare.
	(pop_ehqueue): Likewise.
	* except.c (expand_eh_region_end): Adjust now that ehqueue is a
	pointer.
	(expand_fixup_region_end): Likewise.
	(expand_leftover_cleanups): Likewise.
	(push_ehqueue): Define.
	(pop_ehqueue): Likewise.
	(emit_cleanup_handler): Use push_ehqueue and pop_ehqueue rather
	than doing it inline.
	(expand_start_all_catch):  Adjust now that ehqueue is a
	pointer.
	(mark_eh_queue): Mark all level of the queue.
	(mark_eh_status):  Adjust now that ehqueue is a
	pointer.
	(init_eh_for_function): Allocate ehqueue.
	(free_eh_status): Free it.
	* stmt.c (expand_cleanups): Save the ehqueue around the cleanup
	expansion for a fixup.

1999-12-12  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* gthr-single.h (__gthread_active_p): Add prototype arguments.

	* libgcc2.c (__udivmoddi4): Remove unnecessary decls.
	(__dummy, __builtin_saveregs, __bb_exit_trace_func, __bb_init_prg,
	__bb_trace_func, __bb_trace_func_ret, __bb_trace_ret,
	function_ptr, getpagesize, __enable_execute_stack,
	__enable_execute_stack, __clear_insn_cache,
	__enable_execute_stack, __do_global_dtors, __do_global_ctors,
	_cleanup, _exit, __default_terminate, __terminate_func,
	__terminate, __empty, __throw, new_eh_context,
	eh_context_initialize, eh_context_static, eh_context_specific,
	get_eh_context, __get_eh_context, __get_eh_info,
	init_reg_size_table, eh_threads_initialize,
	__get_dynamic_handler_chain, __sjthrow, __sjpopnthrow,
	__unwinding_cleanup, throw_helper, __throw, __rethrow,
	__pure_virtual): Add prototype arguments.
	(__bb_exit_func): Cast a sizeof to long when comparing against one.
	Cast a signed value to unsigned long when comparing against one.
	(new_eh_context): Wrap in _GTHREADS macro.
	(__sjthrow, __sjpopnthrow): Initialize variable `cleanup' at
	declaration.
	(in_reg_window): Mark parameters with __attribute__ ((__unused__)).
	(throw_helper): Initialize variables `handler_p' and `pc_p'.

1999-12-11  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* combine.c (record_promoted_value): Remove unused variable
	`links2'.

	* emit-rtl.c (renumber_insns): Likewise for `old_max_uid'.

	* global.c (record_conflicts): Likewise for `j'.

	* genoutput.c (output_insn_data): Don't unnecessarily cast away
	const-ness.

1999-12-11  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* i386-protos.h (output_387_binary_op, output_fix_trunc,
	output_fp_compare): Constify a char*.

	* i386.c (ix86_split_to_parts, ix86_safe_length_prefix): Add
	static prototypes.
	(override_options, ix86_comp_type_attributes, print_operand,
	output_387_binary_op, output_fix_trunc, output_fp_compare):
	Constify a char*.
	(ix86_sched_reorder): Mark parameter `clock_var' with
	ATTRIBUTE_UNUSED.

	* i386.h (DEBUG_PRINT_REG): Constify a char*.

Fri Dec 10 16:12:13 1999  Alexandre Petit-Bianco  <apbianco@cygnus.com>

	* tree.def (EXPR_WITH_FILE_LOCATION): Temporarily add a third
	operand, for use in the Java front-end.

1999-12-10  Ben Collins  <bcollins@debian.org>

	* configure.in: Fix typo for "-64" in 64bit as check.
	* configure: Rebuilt.

1999-12-10  Jakub Jelinek  <jakub@redhat.com>

	* longlong.h (__sparc_v9__): Use %rDIGIT instead of %DIGIT where
	appropriate.

1999-12-10  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* c-parse.in (string): With -Wtraditional, warn if ANSI string
	concatenation is utilized.

	* invoke.texi (-Wtraditional): Document it.

1999-12-10  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* flow.c (flow_loops_dump): Avoid ANSI string concatenation.
	Cast a ptrdiff_t to long and pass it to printf with %ld.

1999-12-10  Geoff Keating  <geoffk@cygnus.com>

	* config/m68k/m68k.h (CONDITIONAL_REGISTER_USAGE): If we have no
	68881, we have no 68881 registers at all.
	(HARD_REGNO_MODE_OK): It is always OK to put a MODE_FLOAT
	value in a 68881 register if it is available.

1999-12-10  Clinton Popetz  <cpopetz@cygnus.com>

	* config/arm/arm.md (*mulsidi3adddi, *umulsidi3adddi): New patterns
	for long long multiply-accumulate.

1999-12-10  Bernd Schmidt  <bernds@cygnus.co.uk>

	* loop.c (insert_loop_mem): Undo last change.

1999-12-10  David S. Miller  <davem@redhat.com>

	* config/sparc/sparc.c (fp_sethi_p, fp_mov_p, fp_high_losum_p):
	New functions.
	* config/sparc/sparc-protos.h: Add them.
	* config/sparc/sparc.h: Add them to PREDICATE_CODES.
	(EXTRA_CONSTRAINT_BASE): New macro, handling Q, R, and S
	constraints which use those helpers.
	(EXTRA_CONSTRAINT): Use this new macro.
	* md.texi: Update sparc target constraints documentation.
	* config/sparc/sparc.md (clear_sf, clear_sfp, movsf_const_intreg,
	movsf_const_high, movsf_const_lo, movsf_insn): Delete.
	(movsf_insn_novis_liveg0, movsf_insn_novis_noliveg0,
	movsf_insn_vis, movsf_lo_sum, movsf_high): New patterns.
	(movsf high/lo_sum split): Rework for new patterns.
	(movsf expander): Allow storing fp_zero to memory if ! live_g0.

1999-12-09  Gavin Romig-Koch  <gavin@cetus.cygnus.com>

	* c-common.c (c_common_nodes_and_builtins):
	Create __builtin_ptrdiff_t and __builtin_size_t.

Thu Dec  9 18:05:48 1999  Jeffrey A Law  (law@cygnus.com)

	* pa/elf.h (MAX_OFILE_ALIGNMENT): Define.

Fri Dec 10 00:53:10 1999  J"orn Rennecke <amylaar@cygnus.co.uk>

	* regclass.c (globalize_reg): Re-instate test that allows
	fixed registers to be declared as a variable even after functions
	are defined.

Fri Dec 10 00:52:13 MET 1999  Jan Hubicka  <hubicka@freesoft.cz>

	* i386.md (cpu attribute): Add "athlon".
	(athlon_decode): New attribute.
	(Athlon scheduling units definitions): New.
	(fcmp and shld patterns): Set athlon_decode to "vector".
	* i386.c (athlon_cost): New.
	(m_ATHLON): New.
	(x86_use_leave, x86_push_memory, x86_movx, x86_cmove, x86_deep_branch,
	x86_use_sahf): Set for Athlon.
	(x86_use_fiop): Unset for Athlon.
	(override_options): Define Athlon alignments and "athlon" name.
	(x86_adjust_cost): Penalize AGI and delayed latencies for Athlon.
	* i386.h (TARGET_ATHLON): New.
	(enum processor_type): Add PROCESSOR_ATHLON.
	(TARGET_CPU_DEFAULT_SPEC): Set to "-D__tune_athlon__"
	for CPU_DEFAULT==5
	(TARGET_CPP_CPU_SPECS): Set -D__tune_athlon__ for Athlon.

1999-12-09  Andreas Jaeger  <aj@suse.de>

	* loop.c (record_biv): Declare parameter as int.

	* config/i386/i386-protos.h: Declare long_memory_operand.

1999-12-09  Mark Mitchell  <mark@codesourcery.com>

	* tree.c (copy_node): Do zero the TREE_CHAIN, even for an
	EXPR_WITH_FILE_LOCATION.

Thu Dec  9 11:36:24 MET 1999 Jan Hubicka  <hubicka@freesoft.cz>

	* i386.md (neg??, abs?f, one_cmpl?i): Use nonimmediate_operand
	in expander.

	* flow.c (recompute_reg_usage): Use basic block info to get loop_depth.

	* combine.c (try_combine, distribute_notes): Remove REG_N_REFS
	updating code.

1999-12-09  Jakub Jelinek  <jakub@redhat.com>

	* config/sparc/linux64.h (TARGET_DEFAULT): Make -mapp-regs
	default on linux64 again.
	* config/sparc/t-linux64: Add mno-app-regs and non-medlow code
	models for multilibing.
	* genmultilib: Accept | as alternative separator within a set in
	MULTILIB_OPTIONS.

	* config/sparc/sparc.h (PROMOTE_FOR_CALL_ONLY): Define.

	* calls.c (precompute_arguments): Make sure initial_value contains
	value pseudo which CSE expects.
	* cse.c (struct set): New entry orig_src.
	(cse_insn): Set it early on entry, use it for libcall EQUIV note
	replacement.

Wed Dec  8 22:24:15 1999  Richard Henderson  <rth@cygnus.com>

	* flow.c (count_basic_blocks): Don't add (use (const_int 0)) insns.

1999-12-08  Bernd Schmidt  <bernds@cygnus.co.uk>

	* loop.c (insert_loop_mem): Don't hoist volatile mems out of loops.

1999-12-08  Jakub Jelinek  <jakub@redhat.com>

	* config/sparc/sparc.c (ultra_cmove_results_ready_p,
	ultra_fpmode_conflict_exists, ultra_flush_pipeline): Typo fix.

	* config/sparc/sparc.h (SPARC_SETHI_P): Don't look at topmost 32 bits
	if TARGET_ARCH32.

	* longlong.h: Merge in changes from glibc.
	Also don't clobber %g2 register in 32bit SPARC assembly, so that
	-mno-app-regs libgcc can be compiled.
	* libgcc2.c: Add defines so that the updated longlong.h
	can be used in libgcc2.a. Also, make sure on most architectures
	(at least on all which have optimized code in longlong.h defined
	for) {SI,W}_TYPE_SIZE is suitable for preprocessor tests.

1999-12-08  Alexandre Oliva  <oliva@lsd.ic.unicamp.br>

	* config/sparc/sol2-64.h: Same as sol2-sld-64.h, except that
	`-m EMULATION' is added to non-default LINK_ARCH_SPECs.
	* configure.in: Use sol2-64.h instead of sol2-sld-64.h if linker
	is GNU ld.
	* configure: Rebuilt.

Wed Dec  8 03:45:40 1999  Richard Henderson  <rth@cygnus.com>

	* alpha.c (secondary_reload_class): For !BWX, sub-simode
	outputs require a register.

1999-12-08  Brendan Kehoe  <brendan@cygnus.com>

	* Makefile.in (FPBIT_FUNCS, DPBIT_FUNCS): Add _sf_to_usi
	_df_to_usi.  Required by some targets, so US_SOFTWARE_GOFAST calls to
	functions like dptoul will be resolved.
	(libgcc2.a): Make sure that the object files from DPBIT are named
	differently (prefix `_dp') from those that would be coming from
	FPBIT.

1999-12-08  Alexandre Oliva  <oliva@lsd.ic.unicamp.br>,  Jakub Jelinek  <jakub@redhat.com>

	* configure.in: When target is sparc* and tm_file contains 64,
	test for 64bit support in assembler.  If not supported, remove
	sparc/t-sol2-64 from target-dependent Makefile fragments.
	(AS_SPARC64_FLAG): Define to the assembler flag for 64bit.
	(HAVE_AS_OFFSETABLE_LO10): Rework test to use these flags.
	(HAVE_AS_REGISTER_PSEUDO_OP): Use config.cache.
	* acconfig.h (AS_SPARC64_FLAG): Added.
	* configure, config.in: Rebuilt.
	* config/sparc/sol2-sld-64.h: Same as sol2.h, if without 64bit
	support.  Use AS_SPARC64_FLAG.

1999-12-07  Jakub Jelinek  <jakub@redhat.com>

	* config/sparc/sparc.c (hard_32bit_mode_classes): Mark registers
	suitable for holding OFmode values so that gcc works with complex
	quad long doubles.
	(hard_64bit_mode_classes): Likewise.

	* config/sparc/sparc.md (sethi_di_medlow_embmedany_pic): Fix pattern
	so that it is actually matched.
	(sethi_di_medlow): Likewise.

	* config/sparc/sparc.h (LEGITIMATE_CONSTANT_P): Consider TFmode 0.0L
	as legitimate constant if -mvis.
	* config/sparc/sparc.md (movtf): Likewise.
	(clear_sf): Use const_double_operand.
	(clear_sfp, clear_dfp, clear_tf, clear_tfp): New patterns.

	* config/sparc/sparc.c (sparc_emit_float_lib_cmp): New function.
	* config/sparc/sparc-protos.h (sparc_emit_float_lib_cmp): Prototype.
	* config/sparc/sparc.h (*_LIBCALL): Only use for _Q_*
	routines, _Qp_* cannot be handled like that now.
	(INIT_TARGET_OPTABS): Likewise.
	* config/sparc/sparc.md (cmptf): Accept soft float ARCH64.
	(seq, sne, sgt, sge, slt, sle, beq, bne, bgt, bge, blt, ble): Call
	sparc_emit_float_lib_cmp if ARCH64 and soft float.
	(extendsftf2, extenddftf2, trunctfsf2, trunctfdf2, floatsitf2,
	floatditf2, fix_trunctfsi2, fix_trunctfdi2, addtf3, subtf3, multf3,
	divtf3, sqrttf3): New expanders.
	(extendsftf2_hq, extenddftf2_hq, trunctfsf2_hq, trunctfdf2_hq,
	floatsitf2_hq, floatditf2_hq, fix_trunctfsi2_hq, fix_trunctfdi2_hq,
	addtf3_hq, subtf3_hq, multf3_hq, divtf3_hq, sqrttf3_hq): Rename from
	non-_hq patterns.

	* configure.in (sparc64-*-linux*): Use posix threads if enabled.
	* configure: Rebuilt.
	* config/sparc/linux64.h: Default to -mcpu=ultrasparc if no
	-mcpu is given and we're doing 64bit compiles.

Tue Dec  7 19:22:06 1999  Richard Henderson  <rth@cygnus.com>

	* loop.h (struct induction): Add multi_insn_incr.
	* loop.c (basic_induction_var): New multi_insn_incr argument.
	Set it if we search back through previous insns for the biv.
	(record_biv): New multi_insn_incr argument; fill in struct induction.
	(strength_reduce): Discard an iv with multiple bivs, any of
	which require multiple insns to increment.

1999-12-07  Martin v. Löwis  <loewis@informatik.hu-berlin.de>

	* invoke.texi (C Dialect Options): Remove -flang-c9x, add -std
	documentation.

1999-12-06  David S. Miller  <davem@redhat.com>

	* combine.c (check_promoted_subreg): Do not conditionalize this	upon
	PROMOTE_FUNCTION_RETURN.

Mon Dec  6 15:12:14 1999  Jim Wilson  <wilson@cygnus.com>

	* regmove.c (optimize_reg_copy_1): If no REG_DEAD note, check for
	and handle REG_UNUSED note on insn.

	* combine.c (force_to_mode, case LSHIFTRT): New local inner_mask.  Set
	inner_mask instead of mask.

1999-12-06  Brendan Kehoe  <brendan@cygnus.com>

	* dwarf2out.c (field_byte_offset): As with dwarfout.c, size can be
	zero if there was an error.

1999-12-06  Jakub Jelinek  <jakub@redhat.com>

	* config/sparc/sparc.md (return_losum_di): Fix typo in asm
	output string.

	* longlong.h: Fix clobbers in SPARC asm statements.

	* config/sparc/sparc.c (input_operand): Allow HImode and QImode
	valid sethi operations when TARGET_ARCH64.

	* calls.c (save_fixed_argument_area): If save_mode is BLKmode,
	always use move_by_pieces to avoid infinite recursion.
	(restore_fixed_argument_area): Likewise.

	* combine.c (check_promoted_subreg, record_promoted_value): New
	functions.
	(combine_instructions): Use them to retain nonzero and sign bit
	information after SUBREGs are eliminated by optimizations in
	this pass if PROMOTE_FUNCTION_RETURN.

	* config/sparc/sparc.h (ASM_DECLARE_REGISTER_GLOBAL): Document
	.register declaration. Don't use variables with __ prefixes.

Mon Dec  6 12:24:52 1999  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>

	* fold-const.c (optimize_bit_field_compare): Only use one mode
	for both RHS and LHS in non-constant case.

1999-12-06  Nathan Sidwell  <nathan@acm.org>

	* frame.c (start_fde_sort): Only allocate erratic array, if
	linear one was allocated. Return allocated flag.
	(fde_insert): Only insert, if there's a valid array.
	(fde_end_sort): Split, sort and merge if linear and erratic
	arrays exist, else just sort linear one.
	(search_fdes): New function. Linear search through original fde
	structure.
	(frame_init): Permit multiple initializations. Cope with
	memory shortages.
	(find_fde): Fallback on linear search, if failed to sort array.
	(__deregister_frame_info): Only free sorted array, if we
	allocated it.

1999-12-06  Jakub Jelinek  <jakub@redhat.com>

	* config/sparc/sparc.h (MUST_PASS_IN_STACK): New macro.

1999-12-05  Jakub Jelinek  <jakub@redhat.com>

	* config/sparc/sparc.c (sparc64_initialize_trampoline): Use gen_flushdi.

1999-12-05  Mark Mitchell  <mark@codesourcery.com>

	* tree.h (special_function_p): Declare.
	* calls.c (special_function_p): Make it global.  Don't take `name'
	as a parameter.  Fix typo in 1999-11-28 change.
	(expand_cal): Adjust.

1999-12-04  Mark Mitchell  <mark@codesourcery.com>

	* tree.def (EXPR_WITH_FILE_LOCATION): Fix comment formatting.
	* tree.h (EXPR_WFL_FILENAME): Define in terms of
	EXPR_WFL_FILENAME_NODE.
	(EXPR_WFL_FILENAME_NODE): Use the second operand slot rather than
	the TREE_CHAIN.
	* print-tree.c (print_note): Print TREE_PRIVATE and
	TREE_PROTECTED.

	* dwarf2out.c (add_abstract_origin_attribute): Don't abort when
	the original die cannot be found.

	* varray.h (varray_head_tag): Add elements_used.
	(VARRAY_PUSH): New macro.
	(VARRAY_POP): Likewise.
	(VARRAY_TOP): Likewise.
	Add variants of VARRAY_PUSH and VARRAY_POP for all varray element
	types.
	* varray.c (varray_init): Initialize elements_used.
	* Makefile.in (BASIC_BLOCK_H): Add varray.h.
	(INTEGRATE_H): New variable.
	(integrate.o): Depend on INTEGRATE_H.
	(unroll.o): Likewise.

	* function.h (insert_block_after_note): Declare.
	* function.c (insert_block_after_note): Split out from ...
	(retrofit_block): ... here.

	* stmt.c (expand_fixup): Fix typo in comment.

Sat Dec  4 14:13:38 MET 1999  Jan Hubicka  <hubicka@freesoft.cz>

	* regmove.c (copy_src_to_dest): Remove loop_depth parameter.
	(optimize_reg_copy_1): Remove REG_N_REFS updating code.
	(optimize_reg_copy_2, copy_src_to_dest, fixup_match_2): Likewise.
	(regmove_optimize, fixup_match_1): Likewise.

1999-12-05  Michael Hayes  <m.hayes@elec.canterbury.ac.nz>

	* flow.c (flow_loops_dump): Add missing argument when calling
	flow_loop_nested_p.

1999-12-04  Geoffrey Keating  <geoffk@cygnus.com>
	    Greg McGary  <gkm@gnu.org>

	* c-common.c (enum attrs): Add A_NO_LIMIT_STACK.
	(init_attributes): Add A_NO_LIMIT_STACK.
	(decl_attributes): Handle A_NO_LIMIT_STACK.
	* c-decl.c (duplicate_decls): Handle DECL_NO_LIMIT_STACK.
	* explow.c (allocate_dynamic_stack_space) [!HAVE_allocate_stack]:
	Handle stack bounds checking.
	* flags.h (flag_stack_check): Use the word 'probe' rather than
	'check', because the flag doesn't actually cause any checking to
	be done.
	* function.c (expand_function_start): Set
	current_function_limit_stack.
	* function.h (struct function): Add limit_stack.
	(current_function_limit_stack): Define.
	* invoke.texi (Code Gen Options): Document new options.
	* rtl.h: Declare stack_limit_rtx.
	* toplev.c (stack_limit_rtx): New variable.
	(decode_f_option): Handle new options -fstack-limit-register=REG,
	-fstack-limit-symbol=IDENT, -fno-stack-limit.
	(main): Add stack_limit_rtx as GC root.
	* tree.h (DECL_NO_LIMIT_STACK): New macro.
	(struct tree_decl): New member no_limit_stack.

	* config/rs6000/rs6000.c (rs6000_allocate_stack_space): Handle
	stack_limit_rtx.
	* config/rs6000/rs6000.md (allocate_stack): Handle stack_limit_rtx.
	(conditional_trap+1): Get new mnemonic correct.
	(conditional_trap+2): New pattern for DImode traps.

	* config/m68k/m68k.c (output_function_prologue): Handle
	stack_limit_rtx.
	* config/m68k/m68k.md (trap): New insn.
	(conditional_trap): New insn.
	* md.texi (Standard Names): Document `trap' and
	`conditional_trap'.
	* optabs.c (gen_cond_trap): Use start_sequence()/end_sequence()
	so a cc0 setter doesn't get emitted at some random place in the
	function.

	* config/i960/i960.md (trap): New insn.
	(conditional_trap): New expander.
	(conditional_trap+1, conditional_trap+2): New insns for signed
	and unsigned cases.
	* config/i960/i960.c (i960_function_prologue): Use
	STARTING_FRAME_OFFSET.  Handle stack_limit_rtx.

Thu Dec  2 21:22:45 1999  Greg McGary  <gkm@gnu.org>
			  Geoffrey Keating  <geoffk@cygnus.com>

	* flags.h (warn_padded, warn_packed): Add global var decls.
	* toplev.c (warn_padded, warn_packed): Add global var defns.
	(W_options): Add warnings `-Wpacked' and `-Wpadded'.
	* stor-layout.c (layout_record): Add local variable `type'
	to hold often-used TREE_TYPE (field).  Add local variable
	`unpacked_align' to hold alignment that would be in force
	if no `packed' attribute were present.  Warn if `packed' attribute
	is unnecessary, or even harmful.  Warn when gcc inserts padding
	to satisfy alignment requirements of members.  Use NULL_TREE
	when checking whether var_size is set.
	* invoke.texi: Document new flags.

1999-12-03  Nathan Sidwell  <nathan@acm.org>

	* frame.c (fde_split): Reimplement to avoid variable sized array.

Thu Dec  2 18:59:48 1999  J"orn Rennecke <amylaar@cygnus.co.uk>

	* combine.c (try_combine): Before fixing up LOG_LINKS for the
	i3_subst_into_i2 case, check that GET_CODE (PATTERN (i2)) == PARALLEL.

1999-12-02  Gavin Romig-Koch  <gavin@cygnus.com>

	* invoke.texi: Document the mips option -mno-crt0

1999-12-02  Mike Karr  <mkarr@mathworks.com>

	* cccp.c (argdata): Added free_ptr member.
	(macroexpand): Initialize free_ptr of each argument. When an
	argument's buffers are freed, if the argument's free_ptr corresponds
	to a buffer on the input stack, then return the free_ptr to that stack
	frame, otherwise, free it.
	(macarg): If an argument begins and ends on the same input stack level,
	then transfer the free_ptr of that buffer to the argument in case
	the stack is popped during the processing of a subsequent argument.

1999-12-02  Bernd Schmidt  <bernds@cygnus.co.uk>

	* loop.c (note_reg_stored): New function.
	(struct note_reg_stored_arg): New structure.
	(try_copy_prop): Change to be more conservative; only replace within
	one extended basic block and stop replacing if a store to the
	replacement reg is seen.

1999-12-02  Nick Clifton  <nickc@cygnus.com>

	* config/fp-bit.c: Initialize all fields of the NAN
	constants.

	* c-lex.c (check_newline): Pass pragma_getc and pragma_ungetc
	to HANDLE_PRAGMA.

Wed Dec  1 18:16:38 1999  Jan Hubicka  <hubicka@freesoft.cz>

	* i386.md (extend?f?f2): Force the input into a register, not
	the output.

1999-12-01  Jakub Jelinek  <jakub@redhat.com>

	* config/sparc/sparc.md (movsf_const_intreg): Add constraints for
	regclass' sake.
	(movdf_const_intreg_sp32): Likewise. Prefer the memory load
	alternative because setting up 64bit constant is usually costly,
	especially when reload is in progress or completed.
	(movdf_const_intreg_sp64): Likewise.
	(movdf_const_intreg split): Fix building up constants when
	HOST_BITS_PER_WIDE_INT is 64 yet long is 32bit.

Wed Dec  1 16:51:22 1999  Jeffrey A Law  (law@cygnus.com)

	* combine.c (if_then_else_cond): Use const_true_rtx instead of
	const1_rtx for return values in EQ/NE comparison against (const_int 0)
	case.

	* mn10300.c (REG_SAVE_BYTES): Allocate space for AM33 registers.
	(asm_file_start): Emit .am33 into assembly file when compiling for
	the AM33.
	(print_operand_address): Handle POST_INC addresses.
	(can_use_return_insn, initial_offset): Check AM33 registers too.
	(expand_prologue): Check & save AM33 registers too.
	(expand_epilogue): Similarly.
	(secondary_reload_class): Handle AM33 specific secondary reloads.
	(output_tst): Emit efficient code for the AM33 too.
	* mn10300.h (CPP_SPEC, TARGET_AM33): Define.
	(TARGET_SWITCHES): Add -mam33 switch.
	(FIRST_PSEUDO_REGISTER): Handle new AM33 registers.
	(FIXED_REGISTERS, CALL_USED_REGISTERS): Likewise.
	(REG_ALLOC_ORDER, CONDITIONAL_REGISTER_USAGE): Likewise.
	(HARD_REGNO_MODE_OK, MODES_TIEABLE_P): Likewise.
	(enum reg_class, REG_CLASS_NAMES): Likewise.
	(REG_CLASS_CONTENTS, REGNO_REG_CLASS): Likewise.
	(INDEX_REG_CLASS, REG_CLASS_FROM_LETTER): Likewise.
	(REGNO_OK_FOR_INDEX_P, PREFERRED_RELOAD_CLASS): Likewise.
	(PREFERRED_OUTPUT_RELOAD_CLASS, LIMIT_RELOAD_CLASS): Likewise.
	(REGISTER_MOVE_COST, REGISTER_NAMES): Likewise.
	(HAVE_POST_INCREMENT): Define.
	(GO_IF_LEGITIMATE_ADDRESS): Allow POST_INC addresses for the AM33.
	(GO_IF_MODE_DEPENDENT_ADDRESS): POST_INC is a mode dependent address.
	* mn10300.md (movqi, movhi, addsi, subsi): Add AM33 variants.
	(mulsi, andsi, iorsi, xorsi, notsi): Likewise.
	(ashiftsi, lshiftrtsi, ashiftrtsi): Likewise.
	(zero_extend to SI from QI/HI): Likewise.
	(sign_extend to SI from QI/HI): Likewise.
	(mulsidi3, umulsidi3): New patterns for the AM33.
	(tstsi with zero extension from QI/HI): Add AM33 variants.
	(movsi, movsf, movdi, movdf): Generate efficient code for the AM33 too.
	(return_internal_regs, store_movm): Handle new AM33 registers.
	* t-mn10300 (MULTILIB_OPTIONS, MULTILIB_DIRNAMES): Define.
	(LIBGCC, INSTALL_LIBGCC): Likewise.
	* invoke.texi: Document new flags.

Fri Nov 26 10:59:12 CET 1999  Jan Hubicka  <hubicka@freesoft.cz>

	* i386.md (addsi3_cc): Add "binary_operator_ok" to the condition.
	(addsi3_carry): Likewise.
	(sbbsi3_cc): Add "binary_operator_ok" to the condition.
	(sbbsi3_carry): Likewise.
	(mulsi3): Rewrite to expander, ensure that only one operand is memory.
	(mulhi3): Likewise.
	(test?i_1): Ensure that only one operand is memory.
	(conditional move patterns): likewise.
	(shift and rotate patterns): Rewrite to expander, add
	"binary_operator_ok" to the condition.

	* i386.md (QImode patterns): Remove '*' before the 'r' constraints.
	* i386.h (procesor_costs): Add movzbl_load field.
	(HARD_REGNO_MODE_OK): Accept QImode on non PARTIAL_REGISTER_STALL in
	non-Q registers, accept DImode registers anywhere.
	(Q_CLASS_P): New.
	(MEMORY_MOVE_COST): Calculate QImode moves correctly.
	* i386.c (*_cost): Set value for movxbl_load field.

	* (addsi): New add to lea splitter.
	(ashlsi): Likewise.
	(lea to add/shift peep2): New.

1999-12-01  Mark Salter <msalter@cygnus.com>

	* config/mips/elf.h (STARTFILE_SPEC): Add no-crt0.
	* config/mips/elf64.h (STARTFILE_SPEC): Add no-crt0.
	* config/mips/mips.h (TARGET_SWITCHES): Add no-crt0.

Tue Nov 30 15:20:52 MET 1999  Jan Hubicka  <hubicka@freesoft.cz>

	* i386.c (ix86_expand_move): Never add clobbers to move patterns.
	* i386.md (movsi_xor): New.
	(movsi_or): New.
	(movsi_1, movhi_1, movqi_1): Remove.
	(movsi_2): Rename to movsi_1.
	(movhi_2): Rename to movhi_1.
	(movqi_2): Rename to movqi_1.
	(movdi_1): Remove; remove splitter.
	(movdi_2): Rename to movdi_1.
	(divmodsi4 splitter): Do not emit clobbers for move patterns.
	(long move peep2): Do not create QI or HI mode mov0s
	(mov -1,reg -> or peep2s): Enable again, rewrite to single peephole.

	* i386.md (zero_extend?i?i2): Rewrite to expanders; new patterns,
	rewrite splitters.

	* i386.md (neg?f2_if): Split "r" and "f" to separate alternatives.
	(abs?f2_if): Likewise.

1999-11-30  Alex Samuel  <samuel@codesourcery.com>

	* ggc.h (ggc_test_and_set_mark): New macro.
	(ggc_mark_rtx): Use ggc_test_and_set_mark.
	(ggc_mark_tree): Likewise.
	(ggc_mark_rtvec): Likewise.
	* ggc-common.c (ggc_mark_rtx_children): Reduce recursion.

1999-11-30  Jason Merrill  <jason@casey.cygnus.com>

	* dwarf2out.c (scope_die_for): Only handle types.  Only search for
	containing types.
	(decl_scope_table): Just an array of trees now.
	(push_decl_scope): Simplify.
	(dwarf2out_init): Adjust.
	(local_scope_p): New fn.
	(gen_inlined_enumeration_type_die): Don't call scope_die_for.
	(gen_inlined_union_type_die, gen_inlined_structure_type_die): Likewise.
	(gen_typedef_die): Likewise.
	(gen_lexical_block_die): Don't call push/pop_decl_scope.
	(gen_inlined_subroutine_die): Likewise.
	(gen_abstract_function): Set current_function_decl temporarily.
	(gen_subprogram_die): Don't check DECL_ABSTRACT to set declaration.
	Handle block extern declarations.  Don't call push/pop_decl_scope.
	(gen_decl_die): Fix logic for block externs.

1999-11-30  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* calls.c (special_function_p): Remove `realloc' and add `strdup'
	to the list of functions which have attribute malloc by default.

1999-11-30  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* c-lex.c (yylex): With -Wtraditional, when the ANSI type of an
	integer constant does not match the traditional type, limit the
	warnings to cases where the base of the type is ten.

	* invoke.texi (-Wtraditional): Document it.

Tue Nov 30 15:18:35 1999  Franz Sirl  <Franz.Sirl-kernel@lauterbach.com>

	* combine.c (try_combine): Only pass SET or CLOBBER to SET_DEST
	* rs6000.md: Only access a CONST_INT with INTVAL

Tue Nov 30 14:21:00 1999  Richard Henderson  <rth@cygnus.com>

	* lcm.c (compute_laterin): Cast bb->aux to size_t not int.
	(compute_nearerout): Likewise.
	* ggc-page.c (ggc_page_print_statistics): Explicitly cast
	size_t to unsigned long for formatting.

1999-11-30  Jakub Jelinek  <jakub@redhat.com>

	* config/sparc/sparc.h (FIXED_REGISTERS, CONDITIONAL_REGISTER_USAGE):
	Allow the user to override call-used/fixed state of %g2-5
	registers from the command line (with the exception of %g4 for
	embedded model).
	(REG_LEAF_ALLOC_ORDER): Move %g1 and %g4-7 registers to front, so that
	there is a higher chance of having a leaf function.
	(MACHINE_STATE_SAVE, MACHINE_STATE_RESTORE): Provide separate macros
	for ARCH64 which has %ccr register.
	* config/sparc/sparc.md (return_losum_si, return_losum_di): New
	patterns.
	* config/sparc/sparc.c (eligible_for_epilogue_delay): For the return
	insn accept into delay slot any insn which does not use %[ol]
	registers.  Accept some LO_SUM and shift left by 1 for the normal
	restore case.
	(output_function_epilogue): Likewise.
	(epilogue_renumber): Added argument which inhibits any renumbering
	and just tests if the rtx does not use any %[ol] registers.
	(output_return): Reflect above change.

1999-11-30  Jakub Jelinek  <jakub@redhat.com>

	* config/sparc/sparc.c (sparc_va_arg): Fix sparc64 va_arg
	aggregate passing for sizes <= 16 bytes.

1999-11-30  Bernd Schmidt  <bernds@cygnus.co.uk>

	* cse.c (FIXED_REGNO_P): Delete tests for OVERLAPPING_REGNO_P.
	* global.c (global_alloc): Delete [OVERLAPPING_REGNO_P] code.
	* reload.c (find_dummy_reload): Likewise.
	(find_equiv_reg): Likewise; also for INSN_CLOBBERS_REGNO_P.
	* reload1.c (reload_as_needed): Likewise.
	* stupid.c (stupid_find_reg): Likewise.
	* tm.texi (Obsolete Register Macros): Delete section.
	* gmicro.h: Remove all traces of the two macros.
	* i386.h: Likewise.
	* m88k.h: Likewise.
	* mips.h: Likewise.

1999-11-30  Brendan Kehoe  <brendan@cygnus.com>

	* sparc.h (MASK_FASTER_STRUCTS, TARGET_FASTER_STRUCTS): Define.
	(TARGET_SWITCHES): Add -mfaster-structs/-mno-faster-structs flags.
	(ROUND_TYPE_ALIGN): Use better value if -mfaster-structs.
	* sparc.md (sparclite86x_branch, sparclite86x_shift): New function
	units for the sparclite86x chip.
	(flush): Revert October 14th change; add SImode specifically.
	(flushdi): Copy of flush, but DImode, to avoid genrecog warnings.
	* invoke.texi: Document it.

Tue Nov 30 14:58:14 1999  Nick Clifton  <nickc@cygnus.com>

	* config/mn10200/mn10200.h (PREDICATE_CODES): Add
	psimode_truncation_operand.

	* config/mn10200/mn10200.c (psimode_truncation_operand): New
	function.  Return true if the operand is either a MEM valid
	for a PSImode address or not a MEM at all.

	* config/mn10200/mn10200.md (truncsipsi2): Use
	psimode_truncation_operand.

1999-11-30  Michael Hayes  <m.hayes@elec.canterbury.ac.nz>

	* flow.c (flow_nodes_print, flow_loops_cfg_dump): New functions.
	(flow_loop_nested_p, flow_loops_dump, flow_loops_free): Likewise.
	(flow_loop_exits_find, flow_loop_nodes_find): Likewise.
	(flow_depth_first_order_compute, flow_loop_pre_header_find): Likewise.
	(flow_loop_tree_node_add, flow_loops_tree_build): Likewise.
	(flow_loop_level_compute, low_loops_level_compute): Likewise.
	(flow_loops_find, flow_loop_outside_edge_p): Likewise.
	* basic-block.h: Protect from multiple inclusion.
	(flow_loops_find, flow_loops_free, flow_loop_dump): Add protoypes.
	(struct loops, struct loop): Define structures.
	* sbitmap.c (sbitmap_a_subset_b_p): New function.
	* sbitmap.h: Protect from multiple inclusion.
	(sbitmap_a_subset_b_p): Add prototype.
	* Makefile.in (LOOP_H): New macro.
	(stmt.o, integrate.o, loop.o, unroll.o): Replace loop.h with LOOP_H.

Tue Nov 30 01:34:47 1999  Philippe De Muyter  <phdm@macqel.be>

	* cppinit.c (CAT): The argument list of this macro may not contain
	spaces !

1999-11-29  David S. Miller  <davem@redhat.com>

	Move quantity tables and register equivalence chains into
	per-qty and per-register structure arrays respectively.
	* cse.c (qty_first_reg, qty_last_reg, qty_mode, qty_const,
	qty_const_insn, qty_comparison_code, qty_comparison_const,
	qty_comparison_qty): Delete, replace with...
	(qty_table): this structure table.
	(reg_next_eqv, reg_prev_eqv): Delete, replace with...
	(reg_eqv_table): this structure table.
	(make_new_qty): Add argument MODE.  Caller updated.
	Update to use qty_table and reg_eqv_table.
	(make_regs_eqv, delete_reg_equiv, insert_regs,
	insert, exp_equiv_p, cse_rtx_varies_p, canon_reg,
	fold_rtx, equiv_constant, record_jump_cond, cse_insn,
	cse_process_notes, cse_main, cse_basic_block): Likewise.

Mon Nov 29 16:56:42 1999  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>

	* fold-const.c (extract_muldiv, case {MIN,MAX}_EXPR): Reverse
	operation if C is negative.
	(extract_muldiv, case SAVE_EXPR): Supresss if arg has side effects.
	(extract_muldiv, case {PLUS,MINUS}_EXPR): Don't apply distributive
	law for some divisions if constant is negative and change other
	divisions to the opposite rounding.

	* expr.c (store_constructor_field): If bit position is not multiple
	of alignment of TARGET's mode, use BLKmode.

	* expr.c (expand_expr_unaligned): Add more code from full case
	that is needed when OP0 is in a register.

Mon Nov 29 18:09:39 1999  J"orn Rennecke <amylaar@cygnus.co.uk>

	* dwarfout.c (field_byte_offset): Size can be zero if there was
	an error.

1999-11-29  Bernd Schmidt  <bernds@cygnus.co.uk>

	* fold-const.c (split_tree): Delete unused vars ORIG_IN and TYPE.
	(associate_trees): Delete unused var TEM.
	(extract_muldiv): Delete unused var CANCEL_P.

	* fold-const.c [TARGET_FLOAT_FORMAT != IEEE_FLOAT_FORMAT]
	(target_isinf, target_isnan, target_negative): Add return types to
	function definitions.

1999-11-29  Bruce Korb  <autogen@linuxbox.com>

	* fixinc/fixincl.c(process): don't skip GLIBC files any more.
	* fixinc/hackshell.tpl: ditto
	* fixinc/fixtests.c(double_slash_test): more C++ header testing
	* fixinc/inclhack.def(AAB_fd_zero_glibc*): corrected spelling of mach

1999-11-29  Bernd Schmidt  <bernds@cygnus.co.uk>

	* reload.c (push_reload): When looking for a register to put into
	reg_rtx, make sure all hard regs in a multi-reg register are in the
	right class and nonfixed.

	* haifa-sched.c (reg_last_uses, reg_last_sets, reg_last_clobbers,
	pending_read_insns, pending_write_insns, pending_read_mems,
	pending_write_mems, pending_list_length, last_pending_memory_flush,
	last_function_call, sched_before_next_call): Move static variables
	into a structure.
	(bb_ prefixed versions): Replace with single array bb_deps.
	(struct deps): New structure.
	(add_insn_mem_dependence, flush_pending_lists, sched_analyze_1,
	sched_analyze_2, sched_analyze_insn, sched_analyze): Accept new
	argument of type "struct deps *"; use that instead of global
	variables.  All callers changed.
	(init_rgn_data_dependencies): Delete function.
	(init_rtx_vector): Delete function.
	(init_deps): New function.

	(free_pending_lists): Simplify, we always use the bb_deps array even
	if only one basic block.
	(compute_block_backward_dependences): Likewise.
	(schedule_region): Likewise.

	(propagate_deps): New function, broken out of
	compute_block_backward_dependences.
	(compute_block_backward_dependences): Use it.

	* alpha.md: Delete useless patterns that tried to work around
	register elimination problems.

	* unroll.c (loop_iterations): Don't abort if iteration variable
	was made by loop.

	From Joern Rennecke:
	* reload1.c (reloads_conflict): Reverse test comparing operand
	numbers when testing for conflict between output/outaddr reloads.

1999-11-29  David S. Miller  <davem@redhat.com>

	* config/sparc/sparc.c (init_cumulative_args): Fix type of third
	arg.
	* config/sparc/sparc-protos.h: Update proto, move into RTX_CODE.

1999-11-28  Robert Lipe  <robertl@cygnus.com>

	* i386/sco5.h (FINI_SECTION_ASM_OP_COFF): Move destructor fn
	table from .fini into .dtor.

1999-11-28  Anthony Green  <green@cygnus.com>

	* tree.h (struct tree_decl): Add malloc_flag.
	(DECL_IS_MALLOC): Define.
	* c-common.c (attrs): Add A_MALLOC attribute.
	(init_attributes): Add this attribute to the table.
	(decl_attributes): Handle malloc attribute.
	* calls.c (special_function_p): Check for the malloc attribute.
	* extend.texi (Function Attributes): Document malloc attribute.

Sun Nov 28 13:21:00 1999  Jeffrey A Law  (law@cygnus.com)

	* pa.md (reload shift-add patterns): Remove.

1999-11-28 Herman A.J. ten Brugge <Haj.Ten.Brugge@net.HCC.nl>

	* reorg.c (dbr_schedule) Print more statistics. Corrected
	problem when printing info when 3 delay slots are filled.

1999-11-28  Jakub Jelinek  <jakub@redhat.com>

	* combine.c (setup_incoming_promotions): Pass an outgoing
	regno to FUNCTION_ARG_REGNO_P which it expects.

1999-11-28  Andreas Jaeger  <aj@suse.de>

	* mips/linux.h (CPP_PREDEFINES): Undefine before redefining.

Sun Nov 28 00:48:15 1999  Philippe De Muyter  <phdm@macqel.be>

	* cccp.c (do_include): Avoid initialization of automatic variable.

	* integrate.c (mark_stores): Function definition made void, to match
	previous declaration.
	* regclass.c (dump_regclass): Ditto.
	* Makefile.in (WARN_CFLAGS): Macro augmented by `-Wtraditional'.

Sat Nov 27 08:38:26 1999  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>

	* expr.c (store_constructor): Use EXACT_DIV_EXPR when dividend is
	known to be multiple of divisor.

	* expr.c (store_constructor): Don't clobber TARGET if CLEARED.

	* combine.c (try_combine): Add code to try to merge a set of a
	two-word pseudo to a constant with a setting of one of those words
	to a constant.

	* fold-const.c (negate_expr, associate_trees, extract_muldiv): New.
	(split_tree): Completely rework to make more general.
	(make_range, fold): Call negate_expr.
	(fold, case NEGATE_EXPR): Simplify -(a-b) is -ffast-math.
	(fold, associate): Call new split_tree and associate_trees.
	(fold, case MULT_EXPR, case *_{DIV,MOD}_EXPR): Call extract_muldiv.

1999-11-26  Bernd Schmidt  <bernds@cygnus.co.uk>

	* loop.c (try_copy_prop): Avoid GNU C extension.

1999-11-25  Mark Mitchell  <mark@codesourcery.com>

	* except.c (init_eh_for_function): Still zero eh_return_context,
	eh_return_stack_adjust, and eh_return_handler.

	* except.h (eh_status): Adjust documentation for x_protect_list.
	(begin_protect_partials): New function.
	* except.c (enqueue_eh_entry): Fix formatting.
	(get_first_handler): Add consistency check.
	(add_partial_entry): Adjust usage of protect_list.
	(emit_cleanup_handler): Save and restore ehqueue.
	(expand_start_all_catch): Add comment.
	(begin_protect_partials): New function.
	(end_protect_partials): Adjust usage of protect_list.
	(init_eh_for_function): Use xcalloc.

1999-11-25  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* c-common.c (check_format_info): Don't call a variadic function
	with a non-literal format string.

	* c-decl.c (grokdeclarator, start_struct, finish_struct): Likewise.

	* c-typeck.c (build_component_ref, build_unary_op, lvalue_or_else,
	pedantic_lvalue_warning, error_init, pedwarn_init, warning_init):
	Likewise.

	* cccp.c (check_macro_name, do_xifdef, vwarning_with_line):
	Likewise.

	* collect2.c (collect_wait): Likewise.

	* dbxout.c (dbxout_type): Likewise.

	* gcc.c (do_spec_1): Likewise.

	* genemit.c (gen_insn, gen_expand): Likewise.

	* genrecog.c (write_switch, write_subroutine): Likewise.

	* mips-tfile.c (catch_signal, botch): Likewise.

	* print-rtl.c (print_rtx): Likewise.

	* toplev.c (default_print_error_function, report_error_function,
	_fatal_insn): Likewise.

1999-11-25  Mark Mitchell  <mark@codesourcery.com>

	* tree.c (unsave_expr_now): Handle NULL_TREE as input.

Wed Nov 24 17:08:09 MET 1999  Jan Hubicka  <hubicka@freesoft.cz>

	* reg-stack.c (subst_stack_regs_pat): Swap operands in commutative
	operations when needed.
	* i386.md (fop_?f_comm): New.
	(fop_?f_1): Do not accept commutative operands.

1999-11-25  Andreas Jaeger  <aj@suse.de>

	* config/mips/mips.md (casesi_internal): Add missing brace.

1999-11-25  Jason Merrill  <jason@casey.cygnus.com>

	* dwarf2out.c (pend_type, output_pending_types_for_scope): Lose.
	(splice_child_die): Handle moving a child DIE from the declaration
	DIE of a class to its specification.
	(gen_struct_or_union_type_die): Use 'complete' consistently.
	(gen_decl_die): Generate the virtual context DIE first.
	Use decl_ultimate_origin instead of DECL_ABSTRACT_ORIGIN.

1999-11-24  Gavin Romig-Koch  <gavin@cygnus.com>

	* config/mips/mips.md (call_value_multiple_interanal1): New.

1999-11-24  Jason Merrill  <jason@casey.cygnus.com>

	* dwarf2out.c (free_AT, free_die): New fns.
	(remove_children): Call them.
	(output_line_info): Disable removal of duplicate notes.

	Generate minimal debug info for types with TYPE_DECL_SUPPRESS_INFO set.
	* dwarf2out.c (gen_struct_or_union_type_die): TYPE_DECL_SUPPRESS_INFO
	means pretend the type isn't defined.
	Don't defer emitting types.
	(gen_type_die_for_member): New fn.
	(gen_decl_die): Call it.
	(splice_child_die): New fn.
	(gen_member_die): Call it rather than generate duplicate dies.

	Defer emitting information for the abstract instance of an inline
	until we either inline it or emit an out-of-line copy.
	* dwarf2out.c (decl_ultimate_origin): Ignore DECL_ABSTRACT_ORIGIN
	from output_inline_function if DECL_ABSTRACT is also set.
	(block_ultimate_origin): Likewise.
	(gen_abstract_function): New fn.
	(gen_decl_die, gen_inlined_subroutine_die): Call it.
	(gen_subprogram_die):  An abstract instance is not a declaration
	just because it doesn't match current_function_decl.  Don't abort
	because DECL_DEFER_OUTPUT isn't set.  Do abort if a declaration
	has an abstract origin.
	* toplev.c (rest_of_compilation): Don't emit dwarf2 info for the
	abstract instance here.

Wed Nov 24 18:39:18 1999  Andrew Haley  <aph@cygnus.com>

	* config/sh/sh.h (SECONDARY_OUTPUT_RELOAD_CLASS): Add the case
	where we need to reload fpul from a system register.

1999-11-24  Andreas Jaeger  <aj@suse.de>

	* config/mips/linux.h (CPP_PREDEFINES): Added.
	(LINK_SPEC): Remove -Y since this is only needed on sparc.

1999-11-24  Andreas Jaeger  <aj@suse.de>

	* config/mips/linux.h (TARGET_VERSION): Added.
	(HANDLE_SYSV_PRAGMA): Added.
	(DEFAULT_VTABLE_THUNKS): Added.

Wed Nov 24 14:12:15 MET 1999  Jan Hubicka  <hubicka@freesoft.cz>

	* local-alloc.c (qty): New structure and static variable.
	(qty_phys_reg): Remove, all references changed to qty.
	(qty_n_refs): Likewise.
	(qty_min_class): Likewise.
	(qty_birth): Likewise.
	(qty_death): Likewise.
	(qty_size): Likewise.
	(qty_mode): Likewise.
	(qty_n_calls_crossed): Likewise.
	(qty_alternate_class): Likewise.
	(qty_changes_size): Likewise.
	(qty_first_reg): Likewise.
	(alloc_qty): Rename variable QTY to QTYNO.
	(finf_free_reg): Likewise.
	(local_alloc): Allocate qty, do not allocate the removed variables.

Wed Nov 24 17:26:05 1999  Geoffrey Keating  <geoffk@cygnus.com>

	* config/mips/mips.h (ASM_SPEC): Don't pass -G to the assembler
	when -membedded-pic is passed.

	* config/mips/mips.md (casesi): Handle 64-bit case too.
	(casesi_internal_di): New insn.

	* config/mips/mips.c (embedded_pic_offset): Always make the
	embedded-pic subtractions relative to the name of the current
	function by use of the magic string "..CURRENT_FUNCTION".
	* config/mips/mips.h (ASM_OUTPUT_LABELREF): Make the magic happen.

1999-11-24  Geoffrey Keating  <geoffk@cygnus.com>

	* config/mips/mips.md (div_trap_normal): Don't ask for the REGNO
	of (const_int 0), when what we really care about is
	whether it's a zero constant anyway.
	(div_trap_mips16): Likewise.

1999-11-23  Mark Mitchell  <mark@codesourcery.com>

	* loop.c (loop_optimize): Always find_loop_tree_blocks and
	unroll_block_trees when generating debuggable code.

	* tree.h (unsave_expr_1): New function.
	(lang_unsave): New variable.
	(get_callee_fndecl): New function.
	* tree.c (unsave_expr_now_r): New function.
	(lang_unsave): Define.
	(unsave_expr_1): Likewise.
	(unsave_expr_now_r): Split out from unsave_expr_now.
	(unsave_expr_now): Call lang_unsave if it is non-NULL.  Otherwise,
	call unsave_expr_now_r.
	(get_callee_fndecl): Define.

	* Makefile.in (gencheck): Don't depend on lang_tree_files.
	(gencheck.o): Do depend on lang_tree_files.

	* integrate.h (copy_decl_for_inlining): New declaration.
	* integrate.c (copy_and_set_decl_abstract_origin): Remove.
	(copy_decl_for_inlining): New function.
	(integrate_parm_decls): Use it.
	(integrate_decl_tree): Likewise.

1999-11-23  Gavin Romig-Koch  <gavin@cygnus.com>

	* config/mips/mips.h (ISA_HAS_FP4,ISA_HAS_CONDMOVE,ISA_HAS_8CC): Split
	the second two from the first.
	(CONDITIONAL_REGISTER_USAGE): Use ISA_HAS_8CC rather than ISA_HAS_FP4.
	* config/mips/mips.md (movcc,reload_incc,reload_outcc,
	conditional move): Use ISA_HAS_CONDMOVE or ISA_HAS_8CC rather than
	ISA_HAS_FP4.
	* config/mips/mips.c (mips_move_1word,gen_conditional_branch,
	override_options): Use ISA_HAS_CONDMOVE or ISA_HAS_8CC rather than
	ISA_HAS_FP4.

Tue Nov 23 11:15:04 1999  Jeffrey A Law  (law@cygnus.com)

	* pa.md (call_internal_symref, call_value_internal_symref): No mode
	needed on the address operand.
	* pa.c (call_operand_address): Check for the correct mode.

1999-11-23  Bernd Schmidt  <bernds@cygnus.co.uk>

	* loop.c: Include "basic-block.h".
	(try_copy_prop, replace_loop_reg): New functions.
	(load_mems): Detect registers that just hold copies of the hoisted
	mem, and call try_copy_prop to eliminate them.
	* Makefile.in (loop.o): Update dependencies.

Tue Nov 23 01:03:29 1999  Hans-Peter Nilsson  <hp@axis.com>

	* Makefile.in (gencheck.o): Depend on gencheck.h.
	(insn-emit.o): Depend on flags.h, hard-reg-set.h and resource.h.
	(insn-peep.o): Depend on except.h and function.h.
	(insn-attrtab.o): Depend on RECOG_H.
	(insn-output.o): Depend on toplev.h and flags.h.
	(gengenrtl.o): Depend on real.h.
	(gen-protos.o): Depend on cpplib.h and cpphash.h.
	Unify all dependencies to be on RECOG_H rather than recog.h.

Tue Nov 23 00:57:10 1999  Rainer Orth  <ro@TechFak.Uni-Bielefeld.DE>

	From Casper H.S. Dik on comp.unix.solaris, 23 Oct 1998:
	* configure.in: Try building a bi-arch 32/64-bit compiler on
	sparc-*-solaris2.7 and higher.
	* configure: Rebuild.

Mon Nov 22 23:09:44 1999  David O'Brien  <obrien@FreeBSD.org>

	* config/freebsd.h: New, FreeBSD architecture independent file.
	* config/i386/freebsd-elf.h: removed FreeBSD architecturally
	independent pieces.
	* config/i386/freebsd.h: include i386/perform.h via tm.h rather than
	directly by i386/freebsd.h.
	* configure.in (*-*-freebsdelf): Include new FreeBSD architecturally
	independent configuration file.
	(*-*-freebsdelf): Include i386/perform.h via tm.h rather than
	directly by i386/freebsd.h.
	* configure: Rebuilt.

	* xm-i386.h: Define `__i386__' if not defined, rather than `i386'
	which is in the user's namespace.
	* libgcc2.c: Look for the ANSI-C approved `__i386__' symbol, vs.
	`i386' which is not in our namespace.

Mon Nov 22 22:58:01 1999  "R. Kelley Cook" <KelleyCook@attglobal.net>

	* invoke.texi (ARM Options): Add in -mno-alignment-traps

1999-11-22  Jason Merrill  <jason@casey.cygnus.com>

	* dwarf2out.c (die_struct): Remove die_attr_last and die_child_last.
	(add_dwarf_attr, add_child_die): Just push onto the front.
	(reverse_die_lists): New fn.
	(add_sibling_attributes): Use it.
	(push_decl_scope): Reorganize.
	(add_name_and_src_coords_attributes): Don't set file and line for
	an artificial decl.
	(gen_subprogram_die): An artificial function doesn't need to match
	file and line.
	(gen_compile_unit_die): Return the generated die.  Only add
	AT_comp_dir if the filename is relative.
	(remove_AT): Simplify loop.  Also free string values.
	(output_die): A DIE ref can't be null.
	(output_value_format, value_format): Take a dw_attr_ref.
	(dwarf_last_decl, is_extern_subr_die, sibling_offset): Remove.
	(AT_class, AT_flag, AT_int, AT_unsigned, AT_string, AT_ref, AT_loc,
	AT_addr, AT_lbl): New fns.
	(various): Use them.
	(various): Constify.

Mon Nov 22 23:53:50 1999  J"orn Rennecke <amylaar@cygnus.co.uk>

	* combine.c (combine_simplify_rtx): When handling a SUBREG,
	take SUBREG_WORD into account.
	(if_then_else_cond): Likewise.

1999-11-22  Jason Merrill  <jason@casey.cygnus.com>

	* gmon.c, i386/gmon-sol2.c, sparc/gmon-sol2.c: Remove advertising
	clause from BSD license, pursuant with

	  ftp://ftp.cs.berkeley.edu/pub/4bsd/README.Impt.License.Change

1999-11-22  Bernd Schmidt  <bernds@cygnus.co.uk>

	* loop.c (load_mems): Reformat slightly.
	* basic-block.h (regset_head): New typedef.
	(INIT_REG_SET): New macro.

1999-11-22  Bruce Korb  <autogen@linuxbox.com

	* fixinc/mkfisinc.sh(i?86-*-linux): disable script, run fixincl exe
	(mips-dec-bsd*): non-functional code
	(alpha*-*-linux-gnu*): redundant, duplicated by "*-*-linux-gnu*"

	* fixinc/inclhack.def(AAB_fd_zero_glibc_*):
	added three replacement fixes
	(no_double_slash): removed comments that are not (any longer) pertinent
	(bad_lval): this fix currently runs against many files.
	The comment seems to indicate that we should select for files
	containing 'pragma extern_prefix'.

	* fixinc/fixinc.x86-linux-gnu: deleted
	* fixinc/inclhack.sh:  regen
	* fixinc/fixincl.x:  regen
	* fixinc/fixincl.sh:  regen

Fri Nov 12 14:08:40 1999  Andrew Haley  <aph@cygnus.com>

	* emit-rtl.c (gen_sequence): Only return the pattern of an insn if
	its code is INSN and it has no notes.

1999-11-22  Andrew Haley  <aph@cygnus.com>

	* varasm.c (function_defined): Remove.
	(make_function_rtl): Don't set function_defined.
	(make_decl_rtl): Remove global register warning.
	* regclass.c (no_global_reg_vars): New variable.
	(globalize_reg): Warn if function has already been defined.
	(regclass_init): Set no_global_reg_vars.

Mon Nov 22 14:42:22 MET 1999  Jan Hubicka  <hubicka@freesoft.cz>

	* regclass.c (reg_pref): New structure and static variable
	(prefclass): Delete.
	(altclass): Delete.
	(all uses of prefclass and altclass): Use reg_pref instead.

1999-11-21  Nick Clifton  <nickc@cygnus.com>

	* invoke.texi (ARM Options): Replace -mshort-load-bytes with
	-malignment-traps.
	(arm.h): Replace -mshort-load-bytes with -malignment-traps.
	(arm.c): Replace TARGET_SHORT_BY_BYTES with TARGET_MMU_TRAPS.
	(arm.md): Replace TARGET_SHORT_BY_BYTES with TARGET_MMU_TRAPS.

Sun Nov 21 17:11:13 1999  Geoffrey Keating  <geoffk@cygnus.com>

	* varasm.c (output_constructor): Solve problem with long long
	bitfields, even on BYTES_BIG_ENDIAN machines (testcase 991118-1).

Fri Nov 19 05:48:45 CET 1999  Jan Hubicka  <hubicka@freesoft.cz>

	* global.c (allocno): New structure and static variable.
	(allocno_reg): Remove, all references replaced by allocno.
	(allocno_size): Likewise.
	(hard_reg_conflicts): Likewise.
	(hard_reg_preferences): Likewise.
	(hard_reg_copy_preferences): Likewise.
	(hard_reg_full_preferences): Likewise.
	(regs_someone_prefers): Likewise.
	(allocno_calls_crossed): Likewise.
	(allocno_n_refs): Likewise.
	(allocno_live_length): Likewise.
	(find_reg): Rename ALLOCNO to NUM.

	* regclass.c (may_move_in_cost): Rename from may_move_cost, all
	references updated.
	(may_move_out_cost): New variable.
	(init_reg_sets_1): Initialize may_move_out_cost.
	(record_reg_classes): Use may_move_out_cost.

	* regclass.c (dump_regclass): New function.
	(regclass): New parameter DUMP, call DUMP_REGCLASS.
	* toplev.c (rest_of_compilation): Open lreg dump file before regclass,
	pass rtl_dump_file to regclass.
	* rtl.h (regclass): Update prototype.

Fri Nov 19 06:32:19 CET 1999  Jan Hubicka  <hubicka@freesoft.cz>

	* i386.md (neg, not and abs patterns): Revmap to use
	ix86_expand_unary_operator and ix86_unary_operator_ok.
	(add?f and sub?f expanders): Force operand 1 to register.
	* i386.c (ix86_expand_unary_operator): Rewrite.
	(ix86_unary_operator_ok): Ensure that memory operands
	match real opcode.
	(ix86_binary_operator_ok): Do not allow operand 1 to
	come into memory and operand 0 not.
	(ix86_expand_binary_operator): Ensure that
	src1 is not non-matching memory.

	* i386.md (negs?2): Rewrite to expanders, new patterns and splitters
	to support integer registers and memory.
	(abss?2_integer): Likewise.

	* i386.h (enum reg_class): Add FLOAT_INT_REGS.
	(REG_CLASS_NAMES): Likewise.
	(REG_CLASS_CONTENTS): Define FLOAT_INT_REGS as union of FLOAT_REGS
	and GENERAL_REGS.
	* i386.md (pushsf): Do not preferre FLOAT_REGS over GENERAL_REGS.
	(movsf): Likewise; unify 4th and 5th alternative.
	(pushdf): Likewise.
	(movdf_1): Likewise; rename to movdf_integer.
	(pushxf): Likewise; rename to pushxf_integer; fix output template;
	remove redundant splitter.
	(movxf_1): Likewise; rename to movxf_integer; fix splitter's condition.
	(movdf_nointeger): New.
	(movxf_nointeger): New.
	(pushxf_nointeger): New.

	* i386.md (extend?f?f): Split to expander and pattern, refuse two
	memory operands in patterns.
	(fop*): Refuse two memory operands.

	* i386.md (ashrsi3_31): Allow cltd when optimizing for size even
	on !TARGET_USE_CLTD CPUs.

Fri Nov 19 10:41:15 GMT 1999  Nathan Sidwell  <nathan@acm.org>

	* extend.texi: Document C++ restricted pointers and references.

1999-11-19  Bernd Schmidt  <bernds@cygnus.co.uk>

	* cse.c (addr_affects_sp): No longer conditional on AUTO_INC_DEC.
	(invalidate_skipped_set): Call it unconditionally.
	(cse_set_around_loop): Likewise.

Thu Nov 18 17:29:34 MST 1999	Diego Novillo <dnovillo@cygnus.com>

	* rtl.texi (mem): Add documentation for alias-set argument
	to RTX `mem'.

Fri Nov 18 13:39:22 CET 1999  Jan Hubicka  <hubicka@freesoft.cz>

	* i386.h (struct_processor_costs): New fields int_load, int_store,
	fp_move, fp_load and fp_store
	(REGISTER_MOVE_COST): Fix comment, calculate exactly the cost of
	fp->int moves
	(MEMORY_MOVE_COST): New macro.
	* i386.c (386_cost): Define new fields.
	(i486_cost): Likewise.
	(pentium_cost): Likewise.
	(pentiumpro_cost): Likewise.
	(k6_cost): Likewise.

Fri Nov 19 11:11:55 1999  Greg McGary  <gkm@gnu.org>
			  Geoffrey Keating  <geoffk@cygnus.com>

	* config/m68k/m68kelf.h: Suppress '/* within comment' warning.

	* config/m68k/m68k.h (MASK_PCREL): Don't use same value as
	MASK_ALIGN_INT.

	* config/m68k/m68k.h (MASK_NO_STRICT_ALIGNMENT): New macro.
	(TARGET_STRICT_ALIGNMENT): New macro.
	(TARGET_SWITCHES): Add "strict-align" and "no-strict-align".
	(STRICT_ALIGNMENT): Depend on TARGET_STRICT_ALIGNMENT.
	* invoke.texi (M680x0 Options): Document -mstrict-align.

Thu Nov 18 11:10:03 1999  Jan Hubicka  <hubicka@freesoft.cz>
			  Richard Henderson  <rth@cygnus.com>

	* i386-protos.h (split_xf, ix86_split_movdi): Remove.
	(ix86_split_long_move): Declare.
	* i386.c (split_xf, ix86_split_movdi): Remove.
	(ix86_split_to_parts, ix86_split_long_move): New.
	* i386.md (dimode move splitters): Use ix86_split_long_move.
	(dfmode move splitters): Likewise.
	(xfmode move splitters): Likewise.
	(movsf_1): Allow F->r.
	(movdf_1, movxf_1): Allow F->ro.

1999-11-17  Mark Mitchell  <mark@codesourcery.com>

	* except.h (struct eh_entry): Add goto_entry_p.
	(eh_region_from_symbol): Remove prototype.
	* except.c (find_func_region_from_symbol): New function.
	(emit_cleanup_handler): Likewise.
	(eh_region_from_symbol): Make it static.
	(add_new_handler): Verify the argument.
	(find_func_region): Update comment.
	(expand_eh_region_end): Expand handlers here, rater than waiting
	until expand_leftover_cleanups or start_all_catch.
	(expand_leftover_cleanups): Don't expand here.
	(expand_start_all_catch): Or here.
	(expand_rethrow): Check the return value from find_func_region.
	* function.c (expand_function_end): Emit the catch_clauses.

1999-11-18  Gavin Romig-Koch  <gavin@cygnus.com>

	* integrate.c (expand_inline_function): Add necessary check for NULL.

1999-11-18  Nick Clifton  <nickc@cygnus.com>

	* toplev.c (main): Correctly detect an unrecognized option.

	* cppinit.c (cpp_handle_option): Do not claim to have consumed
	a -f option if it has not been recognized.

Thu Nov 18 00:59:11 1999  Michael Gschwind  <mikeg@alagoas.watson.ibm.com>

	* basic-block.h (update_life_extent): Remove trailing comma on
	enumeration type list.

1999-11-18 Herman A.J. ten Brugge <Haj.Ten.Brugge@net.HCC.nl>

	* varasm.c (output_constructor) Solved problem with long long
	bitfields. Corrected calculating this_time and shift. Also
	corrected calculating mask when BITS_PER_UNIT == 32 (c4x).

Wed Nov 17 23:46:14 1999  Jeffrey A Law  (law@cygnus.com)

	* flow.c (split_edge): Take looping structure into account when
	determining where to put the new block note.

Wed Nov 17 20:42:43 1999  Jeff Holcomb  <jeffh@cygnus.com>

	* Makefile.in (ggc-none.o): Provide host specific version if
	needed.

Wed Nov 17 16:51:23 1999  Richard Henderson  <rth@cygnus.com>

	* cse.c (delete_trivially_dead_insns): Identify no-op insns
	containing subregs too.

Wed Nov 17 17:39:48 MST 1999	Diego Novillo <dnovillo@cygnus.com>

	* invoke.texi: Add documentation for -muninit-const-in-rodata.
	* config/mips/mips.h (MASK_UNINIT_CONST_IN_RODATA): Define.
	(TARGET_UNINIT_CONST_IN_RODATA): Define.
	(text_section): Add switches -munint-const-in-rodata and
	-mno-uninit-const-in-rodata.
	(ASM_OUTPUT_COMMON): Remove.
	(ASM_OUTPUT_ALIGNED_DECL_COMMON): Define. Check if uninitialized
	const objects should be placed in read-only data. Otherwise declare
	them in common.

Wed Nov 17 16:38:32 1999  Richard Henderson  <rth@cygnus.com>

	* jump.c (jump_optimize_1): Revert last change.

Wed Nov 17 15:18:30 1999  Richard Henderson  <rth@cygnus.com>

	* jump.c (jump_optimize_1): Don't try to duplicate the loop exit
	test if optimizing for size.

1999-11-17  Mark Mitchell  <mark@codesourcery.com>

	* Makefile.in (toplev.o): Depend on except.h.
	(dwarf2out.o,loop.o,flow.o,haifa-sched.o): Likewise.

Mon Nov 15 22:45:39 CET 1999  Jan Hubicka  <hubicka@freesoft.cz>

	* i386.md (divmodsi4): Rewrite to expander.
	(*divmodsi4_nocltd): New.
	(*divmodsi4_cltd): New.
	(divmodsi4 splitter): Handle the case when input comes in edx.
	(udivmodhi4): Do not use constraints in exander.
	(ashrsi3_31): Conditionize by TARGET_USE_CLTD.

1999-11-17  Jason Merrill  <jason@yorick.cygnus.com>

	* dwarf2out.c (push_decl_scope): Still use decl_scope_depth - 1
	for the common case.

1999-11-16  Jakub Jelinek  <jakub@redhat.com>

	* explow.c (hard_function_value): Add outgoing argument.
	* expr.h (hard_function_value): Declare it.
	* calls.c (expand_call, emit_library_call_value): Update callers.
	* function.c (aggregate_value_p): Ditto.
	(diddle_return_value): Must look at the outgoing registers
	on archs with register windows.

Mon Nov 15 20:46:45 1999  Richard Henderson  <rth@cygnus.com>

	* alpha.c (alpha_build_va_list): Use make_lang_type and
	initialize TYPE_NAME for the va_list record.

	* flow.c (calculate_global_regs_live): Zero bb->aux to begin.

	* ggc-common.c (ggc_print_statistics): Cast size_t to unsigned long
	for printing.
	* ggc.h (struct ggc_statistics): Rearrange elements for better
	packing on 64-bit hosts.
	* lcm.c (compute_laterin): Store a size_t not an int in bb->aux.
	(compute_nearerout): Likewise.

Tue Nov 16 14:37:52 1999  Geoffrey Keating  <geoffk@cygnus.com>

	* config/rs6000/rs6000.c (first_reg_to_save): Save
	PIC_OFFSET_TABLE_REGNUM when -fpic even though it is fixed.

1999-11-15  Jason Merrill  <jason@casey.cygnus.com>

	* dwarf2out.c (scope_die_for): Don't rely on the decl_scope_table
	notion of nesting to find the DIE for a type or function.
	DIEs can go in limbo even if we got a context_die.
	(push_decl_scope): Our context doesn't need to be in decl_scope_table.
	(gen_struct_or_union_type_die): Don't use TREE_PERMANENT to test
	for local type.
	(gen_decl_die): Ignore NAMESPACE_DECLs for now.
	(gen_type_die): Writing out the context doesn't cause member class
	template instantiations to be written out as well.

Mon Nov 15 15:33:18 1999  Richard Henderson  <rth@cygnus.com>

	* rs6000.h (ASM_OUTPUT_DEF): New.
	Based on proposed addition from David Edelsohn.

1999-11-15  Robert Lipe  <RobertLipe@usa.net>
	    Bruce Korb  <autogen@linuxbox.com>

	* fixinc/inclhack.def
	(AAB_svr4_replace_byteorder): added.  Takes advantage of GCC features
	(unixware7_byteorder_fix): added.  Removes conflicts for new defs
		in net/inet.h.
	(svr5_mach_defines): added.  Like svr4_mach_defines, with new syntax
	(svr4_endian): enabled with SVR5
	(svr4_mkdev): simplified syntax and enabled with SVR5

Sun Nov 14 18:49:37 1999  David O'Brien  <obrien@FreeBSD.org>

	* configure.in: Handle libgcc2 threads support on FreeBSD platforms.
	* configure: Rebuilt.
	* config/t-freebsd-thread: New file.

Sun Nov 14 23:11:05 1999  Jeffrey A Law  (law@cygnus.com)

	* i386.c (ix86_decompose_address): Verify the base is a REG
	before trying to examine its register number.

	* basic-block.h: Remove all #defines and prototypes related to
	integer lists.
	(free_bb_mem, compute_preds_succs): Remove prototype.
	* rtl.h (free_bb_mem): Remove prototype.
	* flow.c (alloc_int_list_node); Remove function.
	(add_inst_list_node, free_int_list, add_pred_succ): Likewise.
	(compute_preds_succs, free_bb_mem): Likewise.
	* gcse.c (gcse_main): Do not call free_bb_mem anymore.
	* toplev.c (rest_of_compilation): Likewise.
	* haifa-sched.c (build_control_flow): Use flow generated edge
	list to build the haifa specific edge list.
	(find_rgns): Use new CFG data structures instead of pred/succ lists.
	(schedule_insns): Do not build pred/succ lists anymore.  Instead
	build the edge table.

	* basic-block.h (dump_bb_data): Remove declaration.
	* flow.c (dump_bb_data): Remove function.
	* sbitmap.c (sbitmap_intersect_of_predsucc): Delete function.
	(sbitmap_union_of_predsucc): Likewise.

	* gcse.c (delete_null_pointer_checks_1): Kill unused s_preds
	argument.  All callers changed.
	(delete_null_pointer_checks_1): No longer need to compute the
	pred/succ lists.

	* gcse.c (pre_expr_reaches_here_p): Kill CHECK_PRE_COM argument.
	All callers changed.
	(pre_expr_reaches_here_p_work): Likewise.
	(pre_edge_insert): No longer call pre_expr_reaches_here_p.
	* lcm.c (compute_laterin): Fix initialization of LATER.
	(compute_nearerout): Similarly for NEARER.

Sun Nov 14 12:41:57 1999  Bernd Schmidt  <bernds@cygnus.co.uk>

	* cse.c (set_nonvarying_address_components): Delete unused function.
	(refers_to_p): Likewise.

Fri Nov 12 20:53:22 1999  Jeffrey A Law  (law@cygnus.com)

	* function.c (diddle_return_value): Set REG_FUNCTION_VALUE_P as
	needed.

Sat Nov 13 16:20:09 1999  Michael Hayes  <m.hayes@elec.canterbury.ac.nz>

	* defaults.h (ASM_OUTPUT_ALTERNATE_LABEL_NAME): Wrap macro
	definition in do while (0).

Fri Nov 12 16:26:25 1999  Jim Wilson  <wilson@cygnus.com>

	* stmt.c (pushcase, pushcase_range): Partially revert Oct 28 change.

Fri Nov 12 12:43:49 1999  Richard Henderson  <rth@cygnus.com>

	* unroll.c (unroll_loop): Make temp an unsigned HOST_WIDE_INT.

Fri Nov 12 15:14:19 1999  Vladimir Makarov  <vmakarov@tofu.to.cygnus.com>

	* i960.h (CAN_DEBUG_WITHOUT_FP): Don't define it.
	(FRAME_POINTER_REQUIRED): Don't worry about nonlocal goto.
	(ELIMINABLE_REGS, CAN_ELIMINATE, INITIAL_ELIMINATION_OFFSET): New.
	(INITIAL_FRAME_POINTER_OFFSET): Remove it.

	* i960.c (i960_function_prologue): Don't allocate space for g8-g11
	saved on the stack.  Output more accurate stack frame statistics
	into assembler file.

1999-11-12 11:47 -0800  Zack Weinberg  <zack@bitmover.com>

	* genextract.c (record_insn_name): New function.
	(get_insn_name): No longer a stub.
	(main): Call record_insn_name for each insn.  After each label
	written, print the insn name in a comment.

Fri Nov 12 13:45:02 1999  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* output.h (const_section, init_section, fini_section): Add
	prototypes.

	* alpha/elf.h (const_section): Delete declaration.

	* svr4.h (const_section): Likewise.

Fri Nov 12 08:54:22 1999  Mark Mitchell  <mark@codesourcery.com>

	* tree.h (SAVE_EXPR_PERSISTENT_P): New macro.
	* tree.c (array_type_nelts): Don't handle SAVE_EXPRs specially.
	(unsave_expr_now): Don't unsave SAVE_EXPR_PERSISTENT_P
	expressions.
	* stor-layout.c (variable_size): Set SAVE_EXPR_PERSISTENT_P on
	variable-sized array bounds.

Fri Nov 12 08:04:45 1999  Catherine Moore  <clm@cygnus.com>

	* defaults.h (ASM_OUTPUT_ALTERNATE_LABEL_NAME):  Use
	ASM_OUTPUT_LABEL.

Fri Nov 12 13:31:54 1999  Bernd Schmidt  <bernds@cygnus.co.uk>

	* config/arm/arm.h (LEGITIMIZE_RELOAD_ADDRESS): Treat QImode
	addresses the same way GO_IF_LEGITIMATE_INDEX does.

Fri Nov 12 12:36:04 1999  Bernd Schmidt  <bernds@cygnus.co.uk>

	* cse.c (hash_arg_in_struct): Delete.
	(struct table_elt): Delete elt in_struct.
	(struct set): Delete elt src_in_struct.
	(merge_equiv_classes): Don't set either hash_arg_in_struct or
	the corresponding in_struct elts.
	(canon_hash): Likewise.
	(safe_hash): Likewise.
	(find_best_addr): Likewise.
	(record_jump_cond): Likewise.
	(cse_insn): Likewise.

Thu Nov 11 19:45:24 1999  Jim Wilson  <wilson@cygnus.com>

	* loop.c (invariant_p, case MEM): Put MEM_VOLATILE_P check back.

	* dbxout.c (dbxout_type, case INTEGER_TYPE): Handle too large
	unsigned types.

Thu Nov 11 18:54:24 1999  Jeffrey A Law  (law@cygnus.com)

	* function.c (diddle_return_value): Put back check that the DECL_RTL
	for the function is a register.

	* function.c (diddle_return_value): Use hard_function_value to
	get an rtx suitable for use in the USE/CLOBBER insn.

	* global.c (global_conflicts): Update comments.
	(record_conflicts): No need to record conflicts between pseudos here.

1999-11-11  Bruce Korb  <autogen@linuxbox.com>

	* fixinc/fixincl.c: Added verbose levels for status messages

Thu Nov 11 13:23:04 1999  Bernd Schmidt  <bernds@cygnus.co.uk>

	* jump.c (jump_optimize_1): Avoid passing an rtx that is not an
	operand as argument to expand_and or expand_binop.

Thu Nov 11 02:21:16 1999  Rodney Brown <RodneyBrown@pmsc.com>

	* xcoffout.c (xcoffout_source_file): Change ggc_add_root to
	gcc_add_string_root.

Wed Nov 10 21:24:19 1999  Jason Eckhardt  <jle@cygnus.com>

	* config/pa/pa.h (MASK_RETURN_ADDR): Change 0xfffffffc to -4.

Wed Nov 10 15:56:16 1999  Jeffrey A Law  (law@cygnus.com)

	* flow.c (compute_flow_dominators): Initially put all blocks on
	the worklist.
	* lcm.c (compute_antinout_edge, compute_available): Similarly.
	* gcse.c (compute_cprop_avinout): Remove.
	(compute_cprop_data): Use compute_available.
	(delete_null_pointer_checks_1): Use compute_available.

	* basic-block.h (compute_available): Returns a void now.
	* gcse.c (one_classic_gcse_pass): Do not expect compute_available
	to return a value anymore.
	* lcm.c (compute_available, compute_antinout_edge): Revamp to use
	worklists.  Fix boundary cases. Compute maximal solutions.
	(compute_laterin, compute_nearerout): Similarly.

	* dwarf2out.c (add_AT_location_description): Allow
	(mem (plus (pseudo) (...)) too.

Wed Nov 10 10:52:42 1999  Tom Tromey  <tromey@cygnus.com>

	* gcc.c (do_spec_1): Support text between `%u' and `%O'.

Wed Nov 10 12:43:21 1999  Philippe De Muyter  <phdm@macqel.be>
			  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* cppinit.c: Test `GCC_VERSION', not `HAVE_GCC_VERSION'.

	* gansidecl.h: Likewise.

	* rtl.c: Likewise.

	* rtl.h: Likewise.

	* toplev.h: Likewise.

	* tree.c: Likewise.

	* tree.h: Likewise.

	* varray.c: Likewise.

	* varray.h: Likewise.

Wed Nov 10 10:57:22 1999  Clinton Popetz  <cpopetz@cygnus.com>

	* gcov.c (struct arcdata): Add hits and total, remove prob.
	(output_branch_counts): New.
	(process_args): Set output_branch_counts if -c.
	(calculate_branch_probs): Store hits and total instead of
	percentage.
	(output_data): Emit counts if output_branch_counts is true.
	* gcov.texi (Invoking Gcov): Document -c switch..

Wed Nov 10 01:10:41 1999  Philippe De Muyter  <phdm@macqel.be>

	* genoutput.c (output_insn_data): Cast `INSN_OUTPUT_FORMAT_MULTI' and
	`INSN_OUTPUT_FORMAT_FUNCTION' to `PTR'-type.

Wed Nov 10 00:51:41 1999  Hans-Peter Nilsson  <hp@axis.se>

	* invoke.texi (C Dialect Options): Add missing builtins from
	c-common.c to list.
	* extend.texi (Other Builtins): Copy to this list.

Wed Nov 10 04:58:09 1999  Alexandre Oliva  <oliva@lsd.ic.unicamp.br>

	* Makefile.in (recog.o): Use BASIC_BLOCK_H macro.
	(print-rtl.o, $(HOST_PREFIX_1)print-rtl.o): Likewise.  Remove
	redundant bitmap.h.

Wed Nov 10 00:02:53 1999  Jeffrey A Law  (law@cygnus.com)

	* flow.c (compute_flow_dominators): No longer treat basic block 0
	or (n_basic_blocks - 1) specially.  Clear the AUX field before
	starting computation of doms/pdoms.  Fix initial state for pdoms.

Wed Nov 10 03:58:08 1999  Alexandre Oliva  <oliva@lsd.ic.unicamp.br>

	* Makefile.in ($(HOST_PREFIX_1)rtl.o): Update dependencies to
	match rtl.o's: added ggc.h and toplev.h
	($(HOST_PREFIX_1)print-rtl.o): Likewise: added system.h.
	($(HOST_PREFIX_1)rtlanal.o): Likewise: added system.h.
	($(HOST_PREFIX_1)obstack.o): Likewise: added $(CONFIG_H).

Tue Nov  9 10:30:08 1999  Tom Tromey  <tromey@cygnus.com>

	* config/i386/xm-djgpp.h (HAVE_DOS_BASED_FILE_SYSTEM): Renamed
	from HAVE_DOS_BASED_FILESYSTEM.
	* gcc.c (find_a_file): Use HAVE_DOS_BASED_FILE_SYSTEM, not
	HAVE_DOS_BASED_FILESYSTEM.
	(main): Likewise.
	(split_directories): Only special-case DOS file names if
	HAVE_DOS_BASED_FILE_SYSTEM is defined.  Use IS_DIR_SEPARATOR
	instead of explicit tests.  Conditionalize on !VMS.
	(make_relative_prefix): Use IS_DIR_SEPARATOR instead of explicit
	tests.  Conditionalize on !VMS.
	(process_command): Only use make_relative_prefix if !VMS.
	(free_split_directories): Conditionalize on !VMS.
	(DIR_UP): Conditionalize on !VMS.

Wed Jun  9 16:57:11 1999  Mumit Khan  <khan@xraylith.wisc.edu>

	* gcc.c (STANDARD_BINDIR_PREFIX): Provide default.

Fri Feb  5 14:22:01 1999  Mumit Khan  <khan@xraylith.wisc.edu>

	* gcc.c (make_relative_prefix): Handle the HAVE_EXECUTABLE_SUFFIX
	case.

Mon Nov  8 14:16:57 1999  Michael Meissner  <meissner@cygnus.com>

	* invoke.texi (Environment Variables): Document relative path
	lookup.
	* gcc.c (DIR_UP): If not defined, define as "..".
	(standard_bindir_prefix): New static, holds target location to
	install binaries.
	(split_directories): New function to split a filename into
	component directories.
	(free_split_directories): New function, release memory allocated
	by split_directories.
	(make_relative_prefix): New function, make a relative pathname if
	the compiler is not in the expected location.
	(process_command): If GCC_EXEC_PREFIX was not specified, see if we
	can figure out an appropriate prefix from argv[0].
	* Makefile.in (DRIVER_DEFINES): Use unlibsubdir in definition of
	STANDARD_STARTFILE_PREFIX and TOOLDIR_BASE_PREFIX.  Define
	STANDARD_BINDIR_PREFIX.

Wed Nov 10 11:47:54 1999  Michael Hayes  <m.hayes@elec.canterbury.ac.nz>

	* config/c4x/c4x-protos.h: New file.  Prototypes for functions defined
	in c4x.c.
	* config/c4x/c4x.h: Moved prototypes to c4x.h.
	* config/c4x/c4x.c (c4x_preferred_reload_class, c4x_limit_reload_class,
	c4x_secondary_memory_needed) Delete.
	(fp_zero_operand): Add mode argument.

Thu Nov  4 15:52:35 1999  Andrew Haley  <aph@cygnus.com>

	* reload1.c (reload_reg_free_for_value_p): Don't use a register
	that is in reload_reg_used.

Tue Nov  9 16:43:00 1999  Nick Clifton  <nickc@cygnus.com>

	* config/arm/arm-protos.h: New file: Prototypes for functions
	defined in arm.c and pe.c.
	* config/arm/arm.h: Fix compile time warnings.
	* config/arm/arm.c: Fix compile time warnings.
	* config/arm/pe.h: Fix compile time warnings.
	* config/arm/aout.h: Fix compile time warnings.

Tue Nov  9 14:55:44 1999  Nick Clifton  <nickc@cygnus.com>

	* config/m32r/m32r-protos.h: New file: Prototypes for functions
	defined in m32r.c

	* config/m32r/m32r.h: Move prototypes to m32r-protos.h
	Add support for subtargets.
	Add prototypes for new predicates.
	Add scheduling macros.

	* config/m32r/m32r.c: Fix compile time warnings.
	(int8_operand): New predicate function.
	(reg_or_cmp_int16_operand): New predicate function.
	(extend_operand): New predicate function.
	(m32r_adjust_code): New scheduling function.
	(m32r_adjust_priority): New scheduling function.
	(m32r_sched_init): New scheduling function.
	(m32r_sched_reorder): New scheduling function.
	(m32r_sched_variable_issue): New scheduling function.
	(direct_return): New codegen function.
	(m32r_not_same_reg): New rtl testsing function.

	* config/m32r/m32r.md: Fix compile time warnings.
	Add support for pre decrement and post increment memory
	references.
	Add S<cc> patterns.
	Add fabs patterns.

Mon Nov  8 22:20:13 1999  J"orn Rennecke <amylaar@cygnus.co.uk>

	* global.c (EXECUTE_IF_CONFLICT): Don't define.
	(prune_preferences): Use EXECUTE_IF_SET_IN_ALLOCNO_SET instead.
	(find_reg): Likewise.

Mon Nov  8 13:16:46 1999  Jason Eckhardt  <jle@cygnus.com>

	* config/pa/pa.md (fmpynfadd,{sgl,dbl} insns): Use %fr0 rather than 0
	to avoid assembler errors.

Mon Nov  8 15:38:41 1999  Nick Clifton  <nickc@cygnus.com>

	* config/v850/v850-protos.h: New file: Prototypes for functions
	defined in v850.c
	* config/v850/v850.h: Move prototypes to v850-protos.h
	* config/v850/v850.c: Move prototypes to v850-protos.h
	* config/v850/v850.md: Fix compile time warnings.

	* config/fr30/fr30-protos.h: New file: Prototypes for functions
	defined in fr30.c
	* config/fr30/fr30.h: Move prototypes to fr30-protos.h
	* config/fr30/fr30.c: Fix compile time warnings.
	* config/fr30/fr30.md: Fix compile time warnings.

Mon Nov  8 07:25:37 1999  Mark Mitchell  <mark@codesourcery.com>

	* tree.h (get_containing_scope): Declare it.
	* tree.c (get_containing_scope): New fucntion.
	(decl_function_context): Use it.
	* toplev.c (rest_of_compilation): Use get_containing_scope.

aMon Nov  8 03:03:07 1999  Alexandre Oliva  <oliva@lsd.ic.unicamp.br>

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

Sun Nov  7 20:55:14 1999  Mark Mitchell  <mark@codesourcery.com>

	* cse.c (delete_trivially_dead_insns): Replace alloca with
	xmalloc/xcalloc.
	* except.c (update_rethrow_references): Likewise.
	(init_eh_nesting_info): Likewise.
	* function.c (identify_blocks): Likewise.
	* gcse.c (dump_hash_table): Likewise.
	* graph.c (print_rtl_graph_with_bb): Likewise.
	* loop.c (combine_movables): Likewise.
	(move_movables): Likewise.
	(count_loop_regs_set): Likewise.
	(strength_reduce): Likewise.
	* profile.c (compute_branch_probabilities): New function, split
	out from ...
	(branch_prob): Here.  Replace alloca with xmalloc/xcalloc.
	* regclass.c (regclass): Likewise.
	* regmove.c (regmove_optimize): Likewise.
	* toplev.c (compile_file): Likewise.
	(main): Don't mess with the stack rlimit.

Sun Nov  7 19:41:17 1999  Catherine Moore  <clm@cygnus.com>

	* config/elfos.h (ASM_DECLARE_FUNCTION_NAME): Conditionally define.
	(ASM_DECLARE_FUNCTION_SIZE): Conditionally define.

Sun Nov  7 10:23:28 1999  Mark P. Mitchell  <mark@codesourcery.com>

	* integrate.c (save_for_inline_nocopy): Clear in_nonparm_insns.

Sun Nov  7 02:58:48 1999  Jeffrey A Law  (law@cygnus.com)

	* global.c (EXECUTE_IF_CONFLICT): Undo Robert's change.
	(EXECUTE_IF_SET_IN_ALLOCNO_SET): Put curleys around CODE in
	macro expansion.

Sat Nov  6 23:48:30 1999  Robert Lipe  (robertlipe@usa.net)

	* global.c (EXECUTE_IF_CONFLICT): Correct quoting typo.

Sat Nov  6 17:34:39 1999  Jeffrey A Law  (law@cygnus.com)

	* gcse.c (post_dominators): Kill.
	(alloc_code_hoist_mem, free_code_hoist_mem); Kill post_dominators.
	(compute_code_hoist_data): Use compute_flow_dominators.  Do not
	pass in a pdom array since we do not need pdoms.
	* haifa-sched.c (schedule_insns): Similarly.
	* flow.c (compute_dominators): Remove dead function.
	(compute_flow_dominators): Do not compute doms or pdoms if the
	caller does not request them.  Split up loop to build doms and
	pdoms.  Use a worklist to compute doms and pdoms.
	* basic-block.h (compute_dominators): Remove prototype.

Sat Nov  6 11:38:39 1999  Richard Henderson  <rth@cygnus.com>

	* haifa-sched.c (struct haifa_insn_data, h_i_d): New.
	(insn_luid, insn_priority, insn_costs, insn_units): Remove.
	(insn_reg_weight, insn_depend, insn_dep_count): Remove.
	(insn_blockage, insn_ref_count, line_note, insn_tick): Remove.
	(cant_move, fed_by_spec_load, is_load_insn): Remove.
	(schedule_region): Remove unused variable.
	(schedule_insns): Allocate h_i_d, and not all the separate arrays.

Sat Nov  6 10:00:34 1999  Mark Mitchell  <mark@codesourcery.com>

	* local-alloc.c (local_alloc): Use xmalloc/xcalloc, not alloca.
	(update_equiv_regs): Likewise.
	(block_alloc): Likewise.
	* reg-stack.c (reg_to_stack): Likewise.
	(convert_regs_2): Likewise.
	* reload1.c (reload_as_needed): Likewise.

Sat Nov  6 09:57:59 1999  Mark Mitchell  <mark@codesourcery.com>

	* Makefile.in (dbxout.o): Depend on ggc.h.
	(dwarf2out.o): Likewise.
	(xcoffout.o): Likewise.
	* dbxout.c: Include ggc.h.
	(dbxout_init): Register lastfile as a root.
	* dwarf2out.c: Include ggc.h.
	(dwarf2out_line): Register lastfile as a root.
	* xcoffout.c: Include ggc.h.
	(xcoffout_source_line): Register xcoff_lastfile as a root.

Sat Nov  6 09:52:09 1999  Richard Henderson  <rth@cygnus.com>

	* i386.md (movdf_1, movxf_1): Earlyclobber general regs destination.

Sat Nov  6 07:48:59 1999  Catherine Moore  <clm@cygnus.com>

	* config/svr4.h (ASM_DECLARE_FUNCTION): Check if already
	defined.
	(ASM_DECLARE_FUNCTION_SIZE): Likewise.

Fri Nov  5 18:33:39 1999  J"orn Rennecke <amylaar@cygnus.co.uk>

	* global.c (EXECUTE_IF_SET_IN_ALLOCNO_SET): New macro.
	(EXECUTE_IF_CONFLICT): Likewise.
	(ALLOCNO_LIVE_P): Avoid signed division.
	(SET_ALLOCNO_LIVE, CLEAR_ALLOCNO_LIVE): Likewise.
	(prune_preferences, find_reg): Use EXECUTE_IF_CONFLICT.
	(record_one_conflict): Use EXECUTE_IF_SET_IN_ALLOCNO_SET.

Fri Nov  5 12:04:02 1999  Richard Henderson  <rth@cygnus.com>

	* haifa-sched.c (schedule_block): Don't crash if there's no
	next insn for an interblock movement.
	(add_branch_dependences): Don't allow clobber insns to move either.

Fri Nov  5 10:18:11 1999  Richard Henderson  <rth@cygnus.com>

	* i386.c (split_xf): New.
	* i386-protos.h: Declare it.
	* i386.md (movxf_1): Add general regs alternatives.
	(movxf_1+1): New splitter for same.

Fri Nov  5 12:05:52 1999  Nick Clifton  <nickc@cygnus.com>

	* function.c (purge_addressof_1): Add missing return values.

Fri Nov  5 10:07:25 1999  Nick Clifton  <nickc@cygnus.com>

	* function.c (is_addressof): New function.  Returns true if
	the given piece of RTL is an ADDRESSOF.
	(purge_addressof_1): Make boolean.  Return false if the
	ADDRESSOFs could not be purged.
	(purge_addressof): If ADDRESSOFs could not be purged from the
	notes attached to an insn, remove the offending note(s),
	unless they are attached to a libcall.

1999-11-05  Andreas Jaeger  <aj@suse.de>

	* genoutput.c (null_operand =): Initialize all fields.

	* errors.h: Add extern to prototypes.

Fri Nov  5 01:44:09 1999  Jeffrey A Law  (law@cygnus.com)

	* configure.in (m68k-next-nextstep4): Handle Openstep 4.2.
	* configure: Rebuilt.

Fri Nov  5 01:24:37 1999  J"orn Rennecke <amylaar@cygnus.co.uk>

	* global.c (CONFLICTP, SET_CONFLICT): Avoid signed division.
	(mirror_conflicts): New function.
	(global_alloc): Call it.
	(expand_preferences): Remove redundant CONFLICTP test.
	(find_reg, dump_conflicts): Likewise.
	(prune_preferences): Process conflicts one word at a time.

Fri Nov  5 01:05:21 1999  Richard Henderson <rth@cygnus.com>

	* global.c (build_insn_chain): Use EXECUTE_IF_SET_IN_BITMAP
	instead of an explicit loop.

Thu Nov  4 23:07:14 1999  Jim Wilson  <wilson@cygnus.com>

	* cse.c (cse_insn): Revert Oct 31 change.  When computing src_elt,
	if REG_RETVAL check succeeds, then put classp in src_elt.

Thu Nov  4 23:48:14 1999  Jeffrey A Law  (law@cygnus.com)

	* function.c (pad_to_arg_alignment): Only update argument_pad
	if the argument's alignment is greater than STACK_BOUNDARY.

Thu Nov  4 16:44:53 1999  Richard Henderson  <rth@cygnus.com>

	* bitmap.h (BITMAP_XFREE): New.
	* flow.c (life_analysis): Use it.
	(life_analysis_1): Free blocks.

	* combine.c (undo_commit): New.
	(try_combine): Use it.  Don't zap undobuf.undos.
	(combine_instructions): Don't zap undobuf.undos; free the
	undobuf.frees list.

	* local-alloc.c (local_alloc): Free qty_phys_num_sugg.

	* stmt.c (cost_table_): New.
	(estimate_case_costs): Use it instead of xmalloc.

	* toplev.c (compile_file): Reuse dumpname memory instead
	of strdup'ing it.

Thu Nov  4 16:36:44 1999  Richard Henderson  <rth@cygnus.com>

	* reg-stack.c (convert_regs_1): Initialize target_stack->top
	after verifying an EH edge.

	* haifa-sched.c (init_rgn_data_dependences): Correctly
	size bb_pending_lists_length when zeroing.

Thu Nov  4 16:36:36 1999  Richard Henderson  <rth@cygnus.com>

	* function.c (diddle_return_value): New.
	(expand_function_end): Use it.
	* stmt.c (expand_null_return): Likewise.
	(expand_value_return): Likewise.

	* reg-stack.c (subst_stack_regs_pat): Handle clobbers at top-level.

	* reload1.c (reload): Don't remove return value clobbers.

Thu Nov  4 13:33:46 1999  Richard Henderson  <rth@cygnus.com>

	* rtl.c (read_rtx): Use fatal_with_file_and_line not fatal.

Thu Nov  4 12:49:52 1999  Richard Henderson  <rth@cygnus.com>

	* cse.c (cse_main): Use xmalloc, not alloca.
	(cse_basic_block): Likewise.
	* local-alloc.c (local_alloc): Likewise.

Thu Nov  4 14:22:12 1999  David Billinghurst  <David.Billinghurst@riotinto.com.au>
			  Alexandre Oliva  <oliva@lsd.ic.unicamp.br>

	* rtl.c: Include toplev.h.
	(fatal): Remove declaration.

Thu Nov  4 06:39:47 1999  Jeffrey A Law  (law@cygnus.com)

	* haifa-sched.c (schedule_block): Fix thinko.

1999-11-03  James McKelvey <mckelvey@fafnir.com>

	* fixinc/fixincl.c(create_file):  Allow for systems that do not have
	S_IR* defined values

1999-11-03  Philippe De Muyter  <phdm@macqel.be>

	* fixlib.c (load_file_data): Do not call `realloc' with a NULL pointer;
	call `malloc' instead.

Wed Nov  3 23:05:14 1999  Mark Mitchell  <mark@codesourcery.com>

	* flags.h (flag_renumber_insns): Declare.
	* emit-rtl.c (renumber_insns): Check flag_renumber_insns.  Print
	renumbering table.
	* rtl.h (renumber_insns): Change prototype.
	* toplev.c (flag_renumber_insns): Define.
	(rest_of_compilation): Pass rtl_dump_file to flag_renumber_insns.

Wed Nov  3 15:11:27 1999  David S. Miller  <davem@redhat.com>

	* config/sparc/sparc.md: Remove insn type fpsqrt, add fpsqrts
	and fpsqrtd.  Use them and create fdiv function unit to more
	accurately represent fpu sqrt pipeline semantics on UltraSPARC.
	* config/sparc/sparc.c: Account for fpsqrt{s,d} changes.

Wed Nov  3 15:11:27 1999  Matteo Frigo <athena@fftw.org>

	* config/sparc/sparc.md: Adjust FADD/FMUL result latencies to
	3 on UltraSPARC.
	* config/sparc/sparc.c (ultra_schedule_insn): Insert launched
	insn into ready list, do not use just a raw swap.

Wed Nov  3 14:51:59 1999  Mark P. Mitchell  <mark@codesourcery.com>

	* rtl.h (renumber_insns): New function.
	(remove_unnecessary_notes): Likewise.
	* emit-rtl.c (renumber_insns): Define.
	(remove_unnecessary_notes): Likewise.
	* toplev.c (rest_of_compilation): Remove dead code.
	Use renumber_insns and remove_unnecessary_notes.

	* gcse.c (struct null_pointer_info): New type.
	(get_bitmap_width): New function.
	(current_block): Remove.
	(nonnull_local): Likewise.
	(nonnull_killed): Likewise.
	(invalidate_nonnull_info): Take a null_pointer_info as input.
	(delete_null_pointer_checks_1): New function.
	(delete_null_pointer_checks): Use it.

	* haifa-sched.c (find_rgns): Replace uses of alloca with xmalloc.
	(split_edges): Likewise.
	(schedule_block): Likewise.
	(compute_block_backward_dependencies): Likewise.
	(schedule_region): Likewise.
	(schedule_insns): Likewise.

Wed Nov  3 15:40:23 1999  Catherine Moore  <clm@cygnus.com>

	* defaults.h (ASM_OUTPUT_ALTERNATE_LABEL_NAME): Provide default.
	* emit-rtl.c (gen_label_rtx): Support LABEL_ALTERNATE_NAME.
	* final.c (final_scan_insn): Emit LABEL_ALTERNATE_NAME.
	* ggc-common.c (ggc_mark_rtx_children): Mark LABEL_ALTERNATE_NAME.
	* jump.c (delete_unreferenced_labels): Don't delete if
	LABEL_ALTERNATE_NAME is set.
	* print-rtl.c (print_rtx): Dump alternate name.
	* rtl.def (CODE_LABEL): Change format to "iuuis00s".
	* rtl.h (LABEL_ALTERNATE_NAME): Define.
	* rtl.texi (LABEL_ALTERNATE_NAME): Document.
	* tm.texi (ASM_OUTPUT_ALTERNATE_LABEL_NAME): Document.

Wed Nov  3 15:39:19 1999  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* fix-header.c (recognized_extern, recognized_function): Constify
	a char*.

	* lcm.c (compute_laterin): Remove unused variable `temp_bitmap'.
	(pre_edge_lcm): Mark parameter `file' with ATTRIBUTE_UNUSED.
	(compute_available): Remove unused variable `last'.
	(compute_nearerout): Remove unused variable `temp_bitmap'.
	(pre_edge_rev_lcm): Mark parameter `file' with ATTRIBUTE_UNUSED.
	Remove unused variable `x'.

	* scan.h (recognized_function, recognized_extern): Constify a
	char*.

	* simplify-rtx.c (simplify_rtx): Remove unused variable `new'.

Wed Nov  3 10:40:53 1999  Franz Sirl  <Franz.Sirl-kernel@lauterbach.com>

	* varasm.c (decode_rtx_const): Use XSTR to access the string
	of a SYMBOL_REF.

Wed Nov  3 10:10:58 1999  Richard Henderson  <rth@cygnus.com>

	* c-decl.c (duplicate_decls): Copy DECL_MODE too.

Wed Nov  3 12:12:59 1999  Bernd Schmidt  <bernds@cygnus.co.uk>

	* reload1.c (eliminate_regs_in_insn): If copying insn, also copy notes.

Wed Nov  3 03:26:28 1999  Jeffrey A Law  (law@cygnus.com)

	* pa.c (ireg_operand): New function.
	* pa.h (PREDICATE_CODES): Handle ireg_operand.
	* pa.md (parallel_addb, parallel_movb): Use ireg_operand.
	Fix out of date comment.

	* pa.md (negdi2): Turn into expander + anonymous pattern.

	* reload.c (find_reloads): Fix typos in recent change.

	* dwarf2out.c: Do not include ctype.h.

Tue Nov  2 21:53:44 1999  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>

	* regclass.c (record_reg_classes): Always use may_move_cost when
	seeing how operand fits with various register classes.

Tue Nov  2 15:38:17 1999  Richard Henderson  <rth@cygnus.com>

	* resource.c: Revert Oct 26 20:42 and Oct 27 00:56 changes.
	* toplev.c: Revert Nov 1 13:22 change.

Tue Nov  2 14:21:37 1999  Jason Eckhardt  <jle@cygnus.com>

	* config/pa/pa.md (height reduction patterns): Add checks for
	overlapping operands to avoid semantic-destroying splits for
	height reduction patterns.

Tue Nov  2 15:27:31 1999  Alexandre Oliva  <oliva@lsd.ic.unicamp.br>

	* configure.in (m68k-hp-hpux*, xm_alloca.h): The underscore should
	have been an hyphen, fixed.
	* configure: Rebuilt.

Tue Nov  2 17:04:36 1999  Nick Clifton  <nickc@cygnus.com>

	* config/arm/tpe.h: Add prototypes for exported functions.
	* config/arm/pe.c: Fix compile time warnings.
	* config/arm/semi.h: Fix compile time warnings.
	* config/arm/arm.c: Fix compile time warnings.
	* config/arm/arm.h: Fix compile time warnings.
	* config/arm/arm.md: Fix compile time warnings.
	* config/arm/thumb.c: Fix compile time warnings.
	* config/arm/thumb.h: Fix compile time warnings.
	* config/arm/thumb.md: Fix compile time warnings.

Tue Nov  2 04:10:24 1999  Jan Hubicka  <hubicka@freesoft.cz>

	* jump.c (jump_optimize_1): Swap the incscc and the conditional mode
	detection code

	* unroll.c (unroll_loop): Remove LOOP notes when loop is
	completely unrolled.

Tue Nov  2 16:57:22 1999  Bernd Schmidt  <bernds@cygnus.co.uk>

	* cse.c (simplify_plus_minus, check_fold_const): Delete declarations.

Tue Nov  2 09:43:00 1999  Catherine Moore  <clm@cygnus.com>

	* Makefile.in (genattrtab): Don't use (HOST_RTLANAL).
	* rtl.h (rtx_equal_p): Move prototype.
	* rtl.c (rtx_equal_function_value_matters): Move from
	rtlanal.c
	(rtx_equal_p): Likewise.
	* rtlanal.c (rtx_equal_function_value_matters): Delete.
	(rtx_equal_p): Likewise.

Mon Nov  1 23:21:17 1999  Jason Merrill  <jason@yorick.cygnus.com>

	* libgcc2.c (__do_global_dtors): Only do EH frame stuff if
	! HAS_INIT_SECTION.

Mon Nov  1 23:37:38 1999  Jeffrey A Law  (law@cygnus.com)

	* gcc.1 (PA options): Remove obsolete -mshared-libs options.

	* pa.h (ADDR_VEC_ALIGN): Define.

	* jump.c (jump_optimize_1): Also move LOOP_VTOP and LOOP_CONT
	notes when presented with "if (foo) break; end_of_loop" and
	the break sequence gets moved out of the loop.

	* unroll.c (unroll_loop): Allocate memory for MAP using xcalloc.
	Remove explicit zero initializations of entries within MAP.

Mon Nov  1 18:09:14 1999  Richard Henderson  <rth@cygnus.com>

	* reg-stack.c (convert_regs_1): Handle EH edges specially.

Mon Nov  1 15:41:01 1999  Mark P. Mitchell  <mark@codesourcery.com>

	* bitmap.h (BITMAP_XMALLOC): New macro.
	* flow.c (CLEAN_ALLOCA): Remove.
	(delete_unreachable_blocks): Use xmalloc/xcalloc instead of alloca.
	(life_analysis): Likewise.
	(update_life_info): Don't use CLEAN_ALLOCA.
	(life_analysis_1): Use xmalloc/xcalloc instead of alloca.
	(calculate_global_regs_live): Likewise.
	(print_rtl_with_bb): Likewise.
	(verify_flow_info): Likewise.
	* global.c (global_alloc): Likewise.
	(global_conflicts): Likewise.
	* integrate.c (save_for_inline_nocopy): Likewise.
	(expand_inline_function): Likewise.
	* jump.c (jump_optimize_1): Likewise.
	(duplicate_loop_exit_test): Likewise.
	(thread_jumps): Likewise.
	* loop.c (loop_optimize): Likewise.
	(combine_givs): Likewise.
	(recombine_givs): Likewise.
	* reorg.c (dbr_schedule): Likewise.
	* unroll.c (unroll_loop): Likewise.

	* combine.c (combine_instructions): Use xmalloc instead of alloca.

Mon Nov  1 13:22:30 1999  Richard Henderson  <rth@cygnus.com>

	* toplev.c (rest_of_compilation): Don't optimize the CFG
	when rebuilding, just before dbr.

Mon Nov  1 14:35:50 1999  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* output.h (assemble_end_function, assemble_destructor,
	assemble_constructor, assemble_gc_entry, assemble_global,
	assemble_label, output_constant_pool) Constify a char*.

	* varasm.c (assemble_destructor, assemble_constructor,
	assemble_gc_entry, assemble_end_function, assemble_global,
	assemble_label, output_constant_pool): Likewise.

Mon Nov  1 14:22:51 1999  Nick Clifton  <nickc@cygnus.com>

	* config/arm/thumb.c (thumb_expand_prologue): Add comments
	explaining what is goin on in this function.

Mon Nov  1 08:03:15 1999  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>

	* regclass.c (record_reg_classes): In matching case, recompute
	costs since the direction of movement is different.

Sun Oct 31 21:59:34 MST 1999  Diego Novillo <dnovillo@cygnus.com>

	* resource.c (mark_target_live_regs): For unconditional branches,
	the resources found at the branch target should be added to the
	resources found so far, not intersected.

Sun Oct 31 15:48:49 1999  Philippe De Muyter  <phdm@macqel.be>

	* fixinc/fixtests.c, fixinc/fixfixes.c : Keep `#' in first column for
	old cpp's.
	* fixinc/fixincl.c (fcntl.h) : Do not include this file twice.
	(sys/mman.h): Include this file only if #HAVE_MMAP.
	(run_compiles): Initialize `esac_fmt' with one old KR string, not
	with automatically concatenated ANSI strings.

Sun Oct 31 23:57:07 1999  Mark Mitchell  <mark@codesourcery.com>

	* ggc-page.c (struct page_entry): Remove save_num_free_objects.
	(DIV_ROUND_UP): Robustify.
	(ggc_recalculate_in_use_p): New function.
	(release_pages): Don't inline it.
	(ggc_alloc_obj): Don't refuse to allocate objects on pages for
	outer contexts.
	(ggc_pop_context): Use ggc_recalculate_in_use_p.
	(clear_marks): Always save in_use_p.
	(sweep_pages): Use ggc_recalculate_in_use_p.
	(ggc_page_print_statistics): Avoid signed/unsigned comparisons.
	Release pages before counting statistics.

Sun Oct 31 23:42:37 1999  Mark Mitchell  <mark@codesourcery.com>

	* toplev.c (rest_of_compilation): Fix thinko in this change:

	Fri Oct 29 15:25:07 1999  Arnaud Charlet  <charlet@ACT-Europe.FR>

	(rest_of_compilation): If inside an inlined external function,
	pretend we are just being declared.

Sun Oct 31 23:03:25 1999  Jeffrey A Law  (law@cygnus.com)

	* flow.c (calculate_global_regs_live): Fix thinko.

	* integrate.c (expand_inline_function): Fix bugs in previous
	change from Oct 28, 1999.

Sun Oct 31 20:27:45 1999  Mark Mitchell  <mark@codesourcery.com>

	* stmt.c (expand_value_return): Fix typo in this change:

	Thu Oct 28 18:06:50 1999  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
	(expand_value_return): Correctly convert VAL when promoting function
	return; support RETURN_REG being a PARALLEL.

Sun Oct 31 20:25:42 1999  Mark P. Mitchell  <mark@codesourcery.com>

	* expr.c (readonly_fields_p): Ignore everything except FIELD_DECLs.

Sun Oct 31 20:42:17 1999  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* hard-reg-set.h (reg_names): Constify a char*.

	* regclass.c  (reg_names): Likewise.

	* regs.h (reg_names): Likewise

	* a29k/a29k.c (reg_names): Delete declaration.

	* a29k/a29k.h (CONDITIONAL_REGISTER_USAGE): Constify a char*.

	* arc/arc.c (arc_save_restore, arc_output_function_prologue,
	arc_output_function_epilogue): Likewise.

	* elxsi/elxsi.c (reg_names): Likewise.

	* gmicro/gmicro.h (FUNCTION_PROLOGUE, FUNCTION_EPILOGUE): Likewise.

	* m32r/m32r.c (m32r_output_function_epilogue, emit_cond_move):
	Likewise.

	* m88k/m88k.c (output_function_profiler): Likewise.

	* sparc/sparc.c (sparc_flat_output_function_prologue,
	sparc_flat_output_function_epilogue): Likewise.

Sun Oct 31 13:32:15 CET 1999  Marc Lehmann <pcg@goof.com>

	* toplev.c (rest_of_compilation): Separate the setjmp/vfork clobber
	warning from -Wuninitialized and put it under -W.
	* function.c (uninitialized_vars_warning): Warn only when the
	corresponding flag is set.

Sun Oct 31 01:53:30 1999  Jeffrey A Law  (law@cygnus.com)

	* cse.c (cse_insn): If an insn has only a single set, SRC_EQV
	is nonzero and the single set does not have an elt, then assign
	it an elt.

	* simplify-rtx.c: New file.
	* Makefile.in (OBJS): Add simplify-rtx.o
	(simplify-rtx.o): Add dependencies.
	* rtl.h (simplify_gen_binary, simplify_rtx): Add prototypes.
	* cse.c: Use simplify_gen_binary intead of cse_gen_binary.
	(cse_gen_binary, simplify_unary_operation): Delete.
	(simplify_binary_operation, simplify_plus_minus): Likewise.
	(check_fold_consts, simplify_relation_operation): Likewise.
	(simplify_ternary_operation): Likewise.
	(delete_trivially_dead_insns): Simplify the contents of the
	REG_EQUAL note before trying to substitute it into the source
	of the reg-reg copy at the end of a libcall sequence.

	* combine.c (combine_simplify_rtx): Renamed from simplify_rtx.  All
	references/callers changed.

	* mn10200.c (mn10200_va_arg): Force the return value into a
	register.

	* fr30.h (EXTRA_CC_NAMES): Remove obsolete macro.

	* cccp.c (macroexpand): Avoid out of range accesses for omitted
	arguments.

Sat Oct 30 22:42:50 1999  Stephen L Moshier <moshier@mediaone.net>

	* c-lex.c (yylex): Accept 'f' in mantissa of hex float constant.

Sat Oct 30 22:19:26 1999  Jeffrey A Law  (law@cygnus.com)

	* fold-const.c (fold): Fix thinko when optimizing comparisons
	against -0.0.

Sat Oct 30 21:32:17 1999  David Starner  <dstarner98@aasaa.ofe.org>

	* gcc.texi (Passes): Update front-end files to their current
	location.

Sat Oct 30 14:41:40 1999  Richard Henderson  <rth@cygnus.com>

	* alpha.h (SECONDARY_INPUT_RELOAD_CLASS): Call secondary_reload_class.
	(SECONDARY_OUTPUT_RELOAD_CLASS): Likewise.
	(PREDICATE_CODES): Add addition_operation.
	* alpha-protos.h (addition_operation): Declare.
	(secondary_reload_class): Likewise.
	* alpha.c (addition_operation): New.
	(secondary_reload_class): New, from old SECONDARY_INPUT_RELOAD_CLASS.
	* alpha.md (adddi3): Turn into expander.
	(*lda, *adddi_2): New.
	(movsf, movdf patterns): Don't preference integer regs.
	(movsi, movdi patterns): Don't preference fp regs.

Sat Oct 30 14:38:22 1999  Richard Henderson  <rth@cygnus.com>

	* genrecog.c (write_switch): Check for duplicate CODE cases.

Sat Oct 30 14:31:48 1999  Richard Henderson  <rth@cygnus.com>

	* ggc-common.c: Update pre-function commentary.
	* ggc-page.c: Likewise.
	(poison): Remove.
	(poison_pages): Use memset directly.
	(ggc_alloc_obj): Likewise.  Use a different pattern than poison_pages.
	(ggc_collect): Poison before sweeping.
	* ggc-simple.c: Update pre-function commentary.
	(ggc_alloc_obj): Poison nonzeroed memory.

Sat Oct 30 14:28:52 1999  Mark Mitchell  <mark@codesourcery.com>

	* ggc-common.c (ggc_print_statistics): Make arguments to fprintf
	match format string, even on 64-bit hosts.
	* gcc-page.c (ggc_page_print_statistics): Likewise.

Sat Oct 30 14:38:04 1999  Catherine Moore  <clm@cygnus.com>

	* config/i386/i386.c (ix86_cpu): Revert last patch.
	* config/i386/i386.h (ix86_cpu): Ditto.

Fri Oct 29 17:00:42 1999  Jim Wilson  <wilson@cygnus.com>

	* stor-layout.c (layout_type): When compute TYPE_SIZE_UNIT from
	TYPE_SIZE, convert type of result to sizetype.

Fri Oct 29 14:34:17 1999  Richard Henderson  <rth@cygnus.com>

	* flow.c (count_or_remove_death_notes): Equate NULL with the
	universal set.

	* jump.c, reg-stack.c, toplev.c: Revert Oct 27 change.
	* toplev.c (rest_of_compilation): Rebuild CFG immediately before
	dbr_schedule.

	* i386.c (pic_label_no): Delete.
	(ix86_attr_length_default): Don't use single_set to peek
	inside a parallel.

	* recog.c (peephole2_optimize): Allow recog_next_insn to index
	the first insn after bb->end.
	* i386.md (push mem peeps): Scratch is live after evaluation
	of the memory.
	(cmp mem peep): Similarly.

Fri Oct 29 11:50:11 1999  Catherine Moore  <clm@cygnus.com>

	* calls.c (emit_library_call_value): Fix declaration of alignment_pad.
	* function.c (pad_to_arg_alignment): Add missing braces.

Fri Oct 29 13:53:48 1999  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* alpha/alpha-protos.h (literal_section): Add prototype.
	(alpha_need_linkage, alpha_start_function,alpha_end_function):
	Constify a char*.

	* alpha/alpha.c (alpha_ra_ever_killed, set_frame_related_p): Add
	prototype.
	(alpha_start_function, alpha_end_function, float_strings,
	alpha_need_linkage): Constify a char*

	* alpha/alpha.h (ASM_OUTPUT_ASCII, ASM_OUTPUT_MI_THUNK): Likewise.

	* alpha/alpha32.h (ASM_OUTPUT_MI_THUNK): Likewise.

	* alpha/elf.h (ASM_FINISH_DECLARE_OBJECT): Likewise.

	* alpha/vms.h (ASM_OUTPUT_SECTION_NAME): Likewise.

Fri Oct 29 13:49:39 1999  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* flow.c (debug_flow_info): Add prototype.

	* gcc.c (main): Likewise.

	* gcse.c (expr_reaches_here_p_work, pre_expr_reaches_here_p_work):
	Likewise.

	* reload1.c (failed_reload, set_reload_reg): Likewise.

	* mips-tfile.c (main): Likewise.
	(pfatal_with_name, fancy_abort, botch, fatal, catch_signal): Mark
	with ATTRIBUTE_NORETURN.

Fri Oct 29 18:16:03 1999  Andrew Haley  <aph@cygnus.com>

	* config/i386/i386.h (ENCODE_SECTION_INFO): Don't do anything if
	DECL is not a memory ref.

Fri Oct 29 09:05:34 1999  Catherine Moore  <clm@cygnus.com>

	* config/i386/i386.h (ix86_cpu): Remove extern attribute.
	* config/i386/i386.c (ix86_cpu): Add extern attribute.

Fri Oct 29 16:30:04 1999  Andrew Haley  <aph@cygnus.com>

	* config/mips/elf.h: remove NAME__MAIN and SYMBOL__MAIN.
	* config/mips/elf64.h: ditto.

Fri Oct 29 08:03:57 1999  Catherine Moore  <clm@cygnus.com>

	* expr.c (emit_push_insn): New argument alignment_pad.
	Update all callers.  Adjust stack pointer based on alignment pad.
	* function.c (pad_to_arg_alignment):  New argument alignment_pad.
	Update all callers.  Track alignment_pad if boundary > PARM_BOUNDARY.
	(locate_and_pad_parm): New argument alignment_pad.  Update all
	callers.
	* expr.h (emit_push_insn): Update prototype.
	(locate_and_pad_parm): Update prototype.
	* calls.c (arg_data):  Add new field alignment_pad.
	(initialize_argument_information): Initialize alignment_pad.

Fri Oct 29 02:51:35 1999  Mark Mitchell  <mark@codesourcery.com>

	* except.c (free_eh_nesting_info): Free the info itself.
	* function.c (free_after_compilation): Don't free NULL.
	* gcse.c (alloc_pre_mem): Free the temp_bitmap, too.
	(pre_edge_insert): Free inserted.
	* stmt.c (free_stmt_status): Don't free NULL.

Fri Oct 29 15:25:07 1999  Arnaud Charlet  <charlet@ACT-Europe.FR>

	* gcov.c (DIR_SEPARATOR): Provide default.
	(output_data): Add test for MS-DOS format absolute filename.
	(fancy_abort): Correct program name.
	(open_files): Open all files in binary mode.
	* libgcc2.c (__bb_exit_func): Likewise.

	* profile.c (init_branch_prob): Specify binary when opening files.

	* flags.h (flag_unwind_tables): New decl.
	* toplev.c (flag_unwind_table): New definition.
	(f_options): Add -funwind-tables.
	(decode_g_option): Clarify warning when unknown -g option is given.
	(rest_of_compilation): If inside an inlined external function,
	pretend we are just being declared.

	* dwarf2out.c (dwarf2out_do_frame): Check -funwind_tables.
	(dwarf2out_frame_finish): Likewise.

Fri Oct 29 07:44:26 1999  Vasco Pedro  <vp@di.fct.unl.pt>

	* fold-const.c (merge_ranges): If not in0, but in1, handle
	upper bounds equal like subset case.

Thu Oct 28 19:22:24 1999  Douglas Rupp <rupp@gnat.com>

	* dbxout.c (dbxout_parms): Generate a second stabs line for parameters
	passed in a register but moved to the stack.

Thu Oct 28 19:12:57 1999  Sam Tardieu  <tardieu@act-europe.fr>

	* gcc.c (pass_exit_codes, greatest_status): New variables.
	(struct option_map): Add entry for "--pass-exit-codes".
	(execute): Update greatest_status if error.
	(display_help): Add documentation for -pass-exit-codes.
	(process_command): Handle -pass-exit-codes.
	(main): Look at pass_exit_codes and greatest_status on call to exit.

Thu Oct 28 18:06:50 1999  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>

	* reload.c (find_reloads): Refine test for no input reload
	case to not includes reloads emitted after insn.

	* function.c (find_temp_slots_from_address): Handle sum involving
	a register that points to a temp slot.
	(update_temp_slot_address): Make recursive call if both old and
	new are PLUS with a common operand.
	* calls.c (expand_call): Mark temp slot for result as having
	address taken.

	* rtlanal.c (reg_referenced_p, case IF_THEN_ELSE): New case.

	* gcc.c (process_command): Add standard_exec_prefix with "GCC"
	component as well as "BINUTILS".

	* integrate.h (copy_rtx_and_substitute): New arg, FOR_LHS.
	* integrate.c (copy_rtx_and_substitute): Likewise.
	(expand_inline_function, integrate_parm_decls, integrate_decl_tree):
	All callers changed.
	* unroll.c (inital_reg_note_copy, copy_loop_body): Likewise.

	* dbxout.c (dbxout_type, case INTEGER_TYPE_NODE): If can use
	gdb extensions, write size of type; also be more consistent
	in using references when this is a subtype.

	* pa.md (extv, extzv, insv): Use define_expand to reject constant
	that is out of range.

	* loop.c (unknown_constant_address_altered): New variable.
	(prescan_loop): Initialize it.
	(note_addr_stored): Set it for RTX_UNCHANGING_P MEM.
	(invariant_p, case MEM): Remove handling for volatile and readonly;
	check new variable if readonly.
	(check_dbra_loop): Chdeck unknown_constant_address_altered.

	* cse.c (canon_hash, case MEM): Do not record if BLKmode.
	(addr_affects_sp_p): Removed from note_mem_written and only
	define #ifdef AUTO_INC_DEC.

	* alpha.c (input_operand, case ADDRESSOF): Treat as REG.

	* regclass.c (record_reg_classes): Properly handle register move
	directions.

	* varasm.c (initializer_constant_valid_p, case MINUS_EXPR):
	Don't think valid if both operands are invalid.
	(struct constant_descriptor): New field RTL.
	(mark_const_hash_entry): Mark it.
	(record_constant{,_rtx}): Initialize it.
	(output_constant_def): Allocate RTL in permanent obstack and
	save in table.
	({record,compare}_constant_1): Modes must match for
	CONSTRUCTOR of ARRAY_TYPE.

	* c-common.h (initializer_constant_valid_p): Delete decl from here.
	* output.h (initializer_constant_valid_p): Move decl to here.
	* c-common.c (initializer_constant_valid_p): Delete function from here.
	* varasm.c (initializer_constant_valid_p): Move function to here.

	* tree.h (STRIP_SIGN_NOPS): New macro.
	* fold-const.c (optimize_minmax_comparison): New function.
	(invert_truthvalue, case WITH_RECORD_EXPR): New case.
	(fold): Use STRIP_SIGN_NOPS instead of STRIP_TYPE_NOPS.
	(fold, case EQ_EXPR): Call optimize_minmax_comparison and add
	cases with ABS_EXPR, NEGATE_EXPR, PLUS_EXPR, MINUS_EXPR, and
	widening conversions.
	(fold, case LE_EXPR): Rework changing unsigned to signed comparisons
	to look at size of mode, not precision of type; also add missing cases.
	(optimize_bit_field_compare, decode_field_reference): Don't try to
	optimize COMPONENT_REF of a PLACEHOLDER_EXPR.

	* dwarf2out.c (ctype.h): Include.
	(dwarf2out_set_demangle_name_func): New function.
	(size_of_line_info): Deleted.
	(output_line_info): Compute size of line info table from difference
	of labels.
	(base_type_die, add_name_attribute): Call demangle function, if any.
	(field_byte_offset): Use bits per word for variable length fields.
	(gen_array_type_die): Add array name.
	(gen_subprogram_die): Ignore DECL_INLINE if -fno-inline.
	(dwarf2out_add_library_unit_info): New function.

	* explow.c (set_stack_check_libfunc): New function.
	(stack_check_libfunc): New static variable.
	(probe_stack_range): Allow front-end to set up a libfunc to call.

	* combine.c (simplify_comparison): When making comparison in wider
	mode, check for having commuted an AND and a SUBREG.
	(contains_muldiv): New function.
	(try_combine): Call it when dividing a PARALLEL.
	(simplify_rtx, case TRUNCATE): Don't remove for umulsi3_highpart.
	(simplify_comparison, case ASHIFTRT): Recognize sign-extension of
	a PLUS.
	(record_value_for_reg): If TEM is a binary operation with two CLOBBERs,
	use one of the CLOBBERs instead.
	(if_then_else_cond): If comparing against zero, just return thing
	being compared.

	* optabs.c (expand_abs): If machine has MAX, ABS (x) is MAX (x, -x).
	Don't generate shifts and subtract if have conditional arithmetic.

	* rtl.h (delete_barrier): New declaration.
	* jump.c (jump_optimize): Set up to handle conditional call.
	In conditional arithmetic case, handle CALL_INSN followed by a BARRIER.
	(delete_barrier): New function.

	* rtl.c (read_rtx): Call fatal if bad RTL code; check for bad mode.

	* recog.c (nonmemory_operand): Accept ADDRESSOF.

	* tree.c (build_type_attribute_variant): Push to obstack of
	ttype around type_hash_canon call.

	* expr.c (placeholder_list): Move decl to file scope.
	(expand_expr): Don't force access to volatile just because its
	address is taken.
	If ignoring reference operations, just expand the operands.
	(expand_expr, case COMPONENT_REF): Propagate
	EXPAND_CONST_ADDRESS to recursive call when expanding inner.
	Refine test for using bitfield operations vs pointer punning.
	(expand_expr, case CONVERT_EXPR): If converting to
	BLKmode UNION_TYPE from BLKmode, just return inner object.
	Use proper mode in store_field call.
	Properly set sizes of object to store and total size in store_field
	call for convert to union.
	(expand_expr, case ARRAY_REF): If OP0 is in a register, put it in
	memory (like for ADDR_EXPR).  Also, don't put constant in register if
	we'll want it in memory.
	(readonly_fields_p): New function.
	(expand_expr, case INDIRECT_REF): Call it if LHS.
	(expand_assignment): Handle a RESULT_DECL where
	DECL_RTL is a PARALLEL.
	(do_jump, case WITH_RECORD_EXPR): New case.
	(get_inner_reference): Always go inside a CONVERT_EXPR
	and NOP_EXPR if both modes are the same.
	(store_field): Use bitfield operations if size of bitsize is not same
	as size of RHS's type.
	Check for bitpos not a multiple of alignment in BLKmode case.
	Do block move in largest possible alignment.
	(store_constructor): Set BITSIZE to -1 for variable size and properly
	in case of array of BLKmode.
	(expand_expr_unaligned): New function.
	(do_compare_and_jump): Call it.

	* mips/iris5.h (SWITCHES_NEED_SPACES): New macro.
	* collect2.c (main): Only allow -ofoo if SWITCHES_NEED_SPACES
	does not include 'o'.

	* function.c (instantiate_virtual_regs_1, case SET): Handle case where
	both SET_DEST and SET_SRC reference a virtual register.
	(gen_mem_addressof): Copy RTX_UNCHANGING_P from new REG to old REG.

	* integrate.c (expand_inline_function): Handle case of setting
	virtual stack vars register (from built in setjmp); when parameter
	lives in memory, expand virtual_{stack_vars,incoming_args}_rtx early.
	(subst_constant): Add new parm, MEMONLY.
	(expand_inline_function, integrate_parm_decls): Pass new parm.
	(integrate_decl_tree): Likewise.
	(copy_rtx_and_substitute, case MEM): Do copy RTX_UNCHANGING_P.
	(try_constants): Call subst_constants twice, with MEMONLY 0 and 1.
	(copy_rtx_and_substitute, case SET): Add explicit calls to
	copy_rtx_and_substitute for both sides.

	* stmt.c (expand_asm_operands): Don't use TREE_STRING_LENGTH for
	constraints.
	(pushcase{,_range}): Convert to NOMINAL_TYPE after checking for
	within INDEX_TYPE, instead of before.
	(fixup_gotos): Use f->target_rtl, not the next insn,
	since latter may be from a later fixup.
	(expand_value_return): Correctly convert VAL when promoting function
	return; support RETURN_REG being a PARALLEL.
	(expand_return): When checking for result in regs and having
	cleanup, consider PARALLEL in DECL_RTL as being in regs.

1999-10-28 21:27 -0700  Zack Weinberg  <zack@bitmover.com>

	* cpplib.h (struct cpp_buffer: fname, nominal_fname,
	last_nominal_fname): Mark const.
	(struct include_hash: name, nshort, control_macro): Mark
	const.
	(struct macrodef: symnam): Mark const.
	(struct if_stack: fname): Mark const.
	(is_idchar, is_idstart, is_hor_space, trigraph_table): Delete.
	(IStable): New character-syntax array which encompasses all
	the old is_foo arrays.
	(is_idchar, is_numchar, is_idstart, is_numstart, is_hspace,
	is_space): New macros for interrogating IStable.
	(check_macro_name): Kill last argument.  All callers changed.

	* cppinit.c (initialize_char_syntax): Delete.
	(is_idchar, is_idstart, is_hor_space, is_space,
	trigraph_table): Delete.
	(IStable): New.  Initialize with clever macros to avoid
	information duplication.
	(builtin_array): Table of builtins to get rid of explicit list
	in initialize_builtins.
	(initialize_builtins): Use builtins_array.
	(cpp_start_read): Call init_IStable, and set IStable['$'] if
	opts->dollars_in_ident.

	* cppexp.c: Change all refs to is_xyz[] arrays to use new
	is_xyz() macros.
	(cpp_parse_expr): Avoid 'format string is not constant'
	warning. Use ISGRAPH to identify printable chars.
	* cppfiles.c: Change all refs to is_xyz[] arrays to use new
	is_xyz() macros.
	(read_and_prescan): Map trigraphs to chars with open-coded
	if-else-if-... sequence, not a lookup table.
	* cpphash.c: Change all refs to is_xyz[] arrays to use new
	is_xyz() macros.
	* cpplib.c: Change all refs to is_xyz[] arrays to use new
	is_xyz() macros.  Kill SKIP_ALL_WHITE_SPACE (unused).
	(check_macro_name): Remove ability to report an invalid
	assertion name, which is never used.
	(do_line): Constify a couple of char *'s.
	* cppmain.c (main): Call cpp_cleanup before returning.

Thu Oct 28 21:16:35 1999  Mark Mitchell  <mark@codesourcery.com>

	* ggc.h (struct ggc_statistics): New type.
	(ggc_get_size): New function.
	(ggc_print_statistics): Likewise.
	* ggc-common.c (ggc_stats): New variable.
	(ggc_mark_rtx_children): Keep statistics.
	(ggc_mark_tree_children): Likewise.
	(ggc_print_statistics): New function.
	* ggc-page.c (struct globals): Add bytes_mapped field.
	(alloc_anon): Update it.
	(release_pages): Likewise.
	(ggc_get_size): New function.
	(ggc_page_print_statistics): New function.
	* ggc-simple.c (ggc_get_size): New function.

Fri Oct 29 06:32:44 1999  Geoffrey Keating  <geoffk@cygnus.com>

	* flow.c (propagate_block): When the last reference to a label
	before an ADDR_VEC is deleted because the reference is a dead
	store, delete the ADDR_VEC.

Thu Oct 28 12:28:50 1999  Richard Henderson  <rth@cygnus.com>

	* resource.c (find_free_register): Don't use the frame pointer
	if frame_pointer_needed.

Thu Oct 28 10:02:00 1999  Jim Wilson  <wilson@cygnus.com>

	* config/mips/mips.c (mips_va_arg): Delete gen_jump as emit_jump arg.
	(function_arg_pass_by_reference): Check for a NULL pointer in cum.

	* config/i960/i960.c (i960_va_start): New locals base, num.
	Use INDIRECT_REF instead of ARRAY_REF on valist.
	(i960_va_arg): Use INDIRECT_REF instead of ARRAY_REF on valist.

Thu Oct 28 09:45:48 1999  Mark Mitchell  <mark@codesourcery.com>

	* gcse.c (delete_null_pointer_checks): Fix typo in previous change.

Thu Oct 28 03:37:50 1999  Peter Gerwinski <peter@gerwinski.de>

	* tree.def (PLACEHOLDER_EXPR): Update comments.

Thu Oct 28 06:47:32 1999  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* c-common.c (check_format_info): Avoid non-literal format string
	warnings when `first_arg_num' is zero.

Thu Oct 28 12:28:48 1999  Bernd Schmidt  <bernds@cygnus.co.uk>

	* rtl.texi: Delete explicit Prev, Up and Next entries in "@node"s.

Thu Oct 28 11:05:13 1999  Richard Earnshaw <rearnsha@arm.com>

	* arm.md (casesi_insn): Add a clobber of the condition code
	register.

Mon Oct 18 21:16:06 1999  Fred Fish  <fnf@be.com>

	* tm.texi (CC1PLUS_SPEC): Make it clear in the docs that CC1_SPEC is
	used by both cc1 and cc1plus.

Thu Oct 28 10:00:48 1999  Nick Clifton  <nickc@cygnus.com>

	* config/arm/arm.c: Initialize arm_structure_size_boundary to
	DEFAULT_STRUCTURE_SIZE_BOUNDARY.
	* config/arm/arm.h (DEFAULT_STRUCTURE_SIZE_BOUNDARY): Define
	to the value 32 if it has not already been defined.
	* config/arm/netbsd.h (DEFAULT_STRUCTURE_SIZE_BOUNDARY):
	Override definition in arm.h with a value of 8.

Thu Oct 28 03:12:02 1999  David Starner  <dstarner98@aasaa.ofe.org>

	* c-pragma.c (push_alignment): Don't check the return value
	of xmalloc.

Thu Oct 28 03:08:38 1999  Matteo Frigo <athena@fftw.org>

	* sparc.h (ADJUST_COST): Fix thinko.

Thu Oct 28 02:44:03 1999  Glen Nakamura  <glen.nakamura@usa.net>

	* cccp.c (rescan): Fixed obp pointer handling around call to
	check_expand subroutine.

Thu Oct 28 02:15:22 1999  Jeffrey A Law  (law@cygnus.com)

	* gcse.c (delete_null_pointer_checks): Only record non-null info
	for pseudos when examining stores.

	* arm.md (adddi3, adddi_sesidi_di, adddi_sesidi_di): Add
	splitters for these patterns.  Use "#" for output templates.
	(addsi3_carryin_shift): New pattern.

Thu Oct 28 10:20:02 1999  Geoffrey Keating  <geoffk@cygnus.com>

	* config/rs6000/rs6000.md (movsf): Don't convert a SUBREG
	of the function return register into a plain REG until
	after function inlining is done.

Wed Oct 27 15:21:46 1999  Richard Henderson  <rth@cygnus.com>

	* jump.c (jump_optimize_1): If we did cross-jumping, and
	the data will matter, rebuild the CFG.
	* reg-stack.c (reg_to_stack): Only (re)build the CFG if
	not optimizing.  Don't run shorten_branches.
	* toplev.c (rest_of_compilation): Run shorten_branches after
	reg_to_stack.

Wed Oct 27 12:33:40 1999  Mark Mitchell  <mark@codesourcery.com>

	* rtl.h (note_stores): Add additional parameter.
	* rtlanal.c (reg_set_p_1): Take additional parameter.
	(reg_set_last_1): Likewise.
	(reg_set_p): Adjust call to note_stores.
	(reg_set_last): Likewise.
	(note_stores): Pass data parameter to worker function.
	* alias.c (record_set): Take additional parameter.
	(init_alias_analysis): Pass it.
	* caller-save.c (mark_set_regs): Take additional parameter.
	(save_call_clobbered_regs): Pass NULL to note_stores.
	* combine.c (set_nonzero_bits_and_sign_copies): Take additional
	parameter.
	(record_dead_and_set_regs_1): Likewise.
	(reg_dead_at_p_1): Likewise.
	(combine_instructions): Adjust calls to note_stores.
	(try_combine): Likewise.
	(record_dead_insn): Remove.
	(record_dead_and_set_regs): Adjust calls to note_stores.
	(reg_dead_at_p): Likewise.
	* cse.c (invalidate_skipped_set): Take additional parameter.
	(cse_check_loop_start): Likewise.
	(cse_check_loop_start_value): Remove.
	(cse_set_around_loop): Adjust calls to note_stores.
	* flow.c (notice_stack_pointer_modification): Take additional
	parameter.  Remove duplicate declaration.
	(record_volatile_insns): Adjust calls to note_stores.
	* gcse.c (record_set_info): Take additional parameter.
	(record_last_set_info): Likewise.
	(invalidate_nonnull_info): Likewise.
	(record_set_insn): Remove.
	(compute_sets): Adjust calls to note_stores.
	(last_set_insn): Remove.
	(compute_hash_table): Adjust calls to note_stores.
	(insert_insn_end_bb): Likewise.
	(delete_null_pointer_checks): Likewise.
	* global.c (mark_reg_store): Take additional parameter.
	(mark_reg_clobber): Likewise.
	(reg_becomes_live): Likewise.
	(global_conflicts): Adjust calls to note_stores.
	(build_insn_chain): Likewise.
	* integrate.c (note_modified_parmregs): Take additional parameter.
	(mark_stores): Likewise.  Make it static.
	(save_for_inline_nocopy): Adjust calls to note_stores.
	(try_constants): Likewise.
	* integrate.h (mark_stores): Remove declaration.
	* jump.c (mark_modified_reg): Take additional parameter.
	(thread_jumps): Adjust calls to note_stores.
	* local-alloc.c (validate_equiv_mem_from_store): Take additional
	parameter.
	(no_equiv): Likewise.
	(reg_is_set): Likewise.
	(validate_equiv_mem): Adjust calls to note_stores.
	(update_equiv_regs): Likewise.
	(block_alloc): Likewise.
	* loop.c (note_set_pseudo_multiple_uses_retval): Remove.
	(note_addr_stored): Take additional parameter.
	(note_set_pseudo_multiple_uses): Likewise.
	(record_initial): Likewise.
	(prescan_loop): Adjust calls to note_stores.
	(strength_reduce): Likewise.
	(check_dbra_loop): Likewise.
	* regmove.c (flags_set_1): Take additional parameter.
	(mark_flags_life_zones): Adjust calls to note_stores.
	* reload1.c (mark_not_eliminable): Take additional parameter.
	(forget_old_reloads_1): Likewise.
	(reload_cse_invalidate_rtx): Likewise.
	(reload_cse_check_clobber): Likewise.
	(reload_combine_note_store): Likewise.
	(move2add_note_store): Likewise.
	(reload): Adjust calls to note_stores.
	(reload_as_needed): Likewise.
	(emit_reload_insns): Likewise.
	(reload_cse_regs_1): Likewise.
	(reload_cse_record_set): Adjust calls to reload_cse_invalidate_rtx.
	(reload_combine): Adjust calls to note_stores.
	* resource.c (update_live_status): Take additional parameter.
	(mark_target_live_regs): Adjust calls to note_stores.
	* stupid.c (find_clobbered_regs): Take additional parameter.
	(stupid_life_analysis): Adjust calls to note_stores.

Wed Oct 27 19:26:12 1999  Nick Clifton  <nickc@cygnus.com>

	* config/arm/coff.h (STRUCTURE_SIZE_BOUNDARY): Delete
	definition.

	* config/arm/elf.h (STRUCTURE_SIZE_BOUNDARY): Delete
	definition.

	* config/arm/arm.h (STRUCTURE_SIZE_BOUNDARY): Define in terms
	of the variable arm_structure_size_boundary.

Wed Oct 27 02:05:58 1999  Mark P. Mitchell  <mark@codesourcery.com>

	* alias.c (init_alias_analysis): Allocate reg_known_value and
	reg_known_equiv_p on the heap.  Likewise for new_reg_base_value
	and reg_seen.
	(end_alias_analysis): Free reg_known_value and reg_known_equiv_p.
	* cse.c (cse_main): Call end_alias_analysis.
	* haifa-sched.c (schedule_insns): Likewise.
	* local-alloc. (update_equiv_regs): Likewise.
	* reload1.c (reload_cse_regs): Likewise.

Wed Oct 27 01:49:17 1999  Rainer Orth  <ro@TechFak.Uni-Bielefeld.DE>

	* sparc/sparc.c (sparc_override_options): Clear MASK_FPU_SET.
	* sparc/sparc.h (TARGET_SWITCHES): Add "fpu" entry for reverse
	mapping from MASK_FPU.

Wed Oct 27 01:42:26 1999  Scott Christley  <scottc@net-community.com>

	* sparc.md (call): Don't bound structure return size to 0xfff.

Wed Oct 27 00:56:59 1999  Richard Henderson  <rth@cygnus.com>

	* resource.c (mark_target_live_regs): Check that the target
	insn wasn't created after compute_bb_for_insn.

Tue Oct 26 23:15:03 1999  Mark Mitchell  <mark@codesourcery.com>

	* ggc-page.c (poison_pages): Don't be overzealous.

Tue Oct 26 23:29:18 1999  Jeffrey A Law  (law@cygnus.com)

	* alias.c: Update comments for ADDRESS.
	(nonlocal_reference_p): Look inside the ADDRESS to determine if
	it is a local memory reference.

	* c-typeck.c (build_function_call): Check that the built-in
	function is of class BUILT_IN_NORMAL before trying to recongize
	it as BUILT_IN_ABS.
	* calls.c (calls_function_1): Similarly for BUILT_IN_ALLOCA.
	* stmt.c (expand_end_cae): Similarly for BUILT_IN_CLASSIFY_TYPE.

Wed Oct 27 00:14:13 1999  Robert Lipe  <robertlipe@usa.net>

	* gcse.c (expr_reaches_here_p): Use xcalloc and explit free instead
	of alloca.
	(pre_gcse): Likewise.
	(hoist_expr_reaches_here_p): Likewise.
	(hoist_code): Likewise.
	(pre_expr_reaches_here_p): Replace alloca with xcalloc.  Move core
	code to ...
	(pre_expr_reaches_here_p_work): ... here.
	(expr_reaches_here_p): Replace alloca with xcalloc.  Move core
	code to ...
	(expr_reaches_here_p_work): ... here.

Tue Oct 26 20:42:45 1999  Richard Henderson  <rth@cygnus.com>

	* resource.c (find_basic_block): Delete.
	(mark_target_live_regs, incr_ticks_for_insn): Use BLOCK_NUM instead.
	(init_resource_info): Call compute_bb_for_insn.

Tue Oct 26 20:21:02 1999  Richard Henderson  <rth@cygnus.com>

	* flow.c (merge_blocks_move_predecessor_nojumps): Cope
	with already adjacent blocks, but no fallthru.
	(merge_blocks_move_successor_nojumps): Simplify.
	(debug_flow_info): New.

	* toplev.c (rest_of_compilation): Open jump1 dump file before
	jump and close after, as opposed to just using dump_rtl.

Wed Oct 27 03:09:23 1999  J"orn Rennecke <amylaar@cygnus.co.uk>

	* reload.h (earlyclobber_operand_p): Declare.
	* reload.c (earlyclobber_operand_p): Don't declare.  No longer static.
	* reload1.c (reload_reg_free_for_value_p):  RELOAD_OTHER reloads with
	an earlyclobbered output conflict with RELOAD_INPUT reloads - handle
	case where the RELOAD_OTHER reload is new.  Use earlyclobber_operand_p.

Tue Oct 26 18:23:38 1999  Jan Hubicka  <hubicka@freesoft.cz>
			  Richard Henderson  <rth@cygnus.com>

	* emit-rtl.c (emit_block_insn_before): New.
	(emit_block_insn_after): New.
	* basic-block.h: Declare them.

	* bitmap.h: Protect from multiple inclusion.

	* recog.c (scratch_operand): Handle VOIDmode correctly.

	* rtl.h (JUMP_CROSS_JUMP_DEATH_MATTERS): New.

	* builtins.c (expand_builtin_apply_args_1): Remove STACK_REGS hack.
	* function.c (assign_parms): Likewise.
	* global.c (global_conflicts): Clarify STACK_REGS commentary.

	* reg-stack.c (max_uid): Remove.
	(blocks, block_begin, block_end, block_drops_in): Remove.
	(block_stack_in, block_out_reg_set, block_number): Remove.
	(struct block_info_def, BLOCK_INFO): New.
	(enum emit_where): New.
	(current_block): New.
	(BLOCK_NUM): Remove.
	(mark_regs_pat, record_label_references): Remove.
	(record_reg_life_pat, record_reg_life, find_blocks): Remove.
	(nan): New.
	(goto_block_pat, print_blocks, dump_stack_info): Remove.
	(reg_to_stack): Simplified test for existence of fp code.  Use
	flow.c code.  Call shorten_branches after cross-jump opt.
	(check_asm_stack_operands): Renamed from record_asm_reg_life.
	Return false if the asm doesn't use stack regs.  Don't do life
	analysis on the asm.
	(emit_pop_insn): Replace function pointer arg `when' with
	enum `where'.  Update all callers.
	(change_stack): Likewise.  Update basic block end.
	(emit_swap_insn): Use current_block->head to limit reverse search
	for start of block.  Use emit_block_insn_after.
	(subst_stack_regs_pat): Handle USE and CLOBBER patterns.
	(subst_asm_stack_regs): Use check_asm_stack_operands.  Use direct
	structure assignment instead of bcopy.
	(print_stack): New.
	(convert_regs_entry, convert_regs_exit): New.
	(convert_regs_1, convert_regs_2): Split out from convert_regs.
	Work on basic blocks and the CFG.
	(convert_regs): Use them.

	* i386.c (output_fix_trunc): Remove code for DImode input operand
	not at top-of-stack.
	* i386.c (fix_truncdfdi2, fix_truncsfdi2): Use scratch with
	appropriate mode.
	(fix_truncdi_1): Allow any mode scratch.

Tue Oct 26 13:30:35 1999  Richard Henderson  <rth@cygnus.com>

	* alpha.h (TARGET_MEM_FUNCTIONS): Define here.
	* linux.h, netbsd.h, vms.h: Not here.

1999-10-26  Gavin Romig-Koch  <gavin@cygnus.com>

	* config/mips/mips.h (ISA_HAS_64BIT_REGS,ISA_HAS_BRANCHLIKELY,
	ISA_HAS_FP4,ISA_HAS_CONDMOVE): New.
	(GENERATE_BRANCHLIKELY,HAVE_SQRT_P,
	CONDITIONAL_REGISTER_USEAGE): Use them.
	* config/mips/mips.c (mips_move_1word,mips_move_2words,
	gen_conditional_branch,override_options) : Use them.
	* config/mips/mips.md : Use them.

Tue Oct 26 13:09:23 1999  Richard Henderson  <rth@cygnus.com>

	* i386.md (zero_extendqihi2): Use SImode register name with andl.

Tue Oct 26 12:35:38 1999  Richard Henderson  <rth@cygnus.com>

	* integrate.c (function_cannot_inline_p): Don't allow inlining
	if setjmp is used.

Tue Oct 26 14:10:23 1999  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* c-parse.in (cast_expr): Constify.

	* cccp.c (special_symbol): Likewise.

	* cse.c (hash_cse_reg_info, cse_reg_info_equal_p): Likewise.

	* dwarf2out.c (base_type_die): Likewise.

	* global.c (allocno_compare): Likewise.

	* local-alloc.c (qty_compare_1, qty_sugg_compare_1): Likewise.

	* regclass.c (fix_register): Likewise.

	* rtl.h (fix_register): Likewise.

	* stupid.c (stupid_reg_compare): Likewise.

	* toplev.c (decode_f_option): Likewise.

	* tree.c (build_complex_type): Likewise.

Tue Oct 26 18:35:25 1999  Richard Earnshaw  <rearnsha@arm.com>

	* output.h: Don't unnecessarily conditionalize prototypes on TREE_CODE.

Tue Oct 26 15:42:56 1999  Bernd Schmidt  <bernds@cygnus.co.uk>

	* reload.c (find_reloads): Compute mode and nregs fields of all
	reloads.
	* reload1.c (calculate_needs_all_insns): Simplify a bit.
	(calculate_needs): Use precomputed mode/nregs values.
	(allocate_reload_reg): Likewise.
	Break out two...
	(failed_reload, set_reload_reg): ... new functions.
	(choose_reload_regs_init): New function, mostly broken out from...
	(choose_reload_regs): ... here.  Lose all the save_xxx nonsense.
	Also lose one #if 0 block.

Tue Oct 26 02:48:32 1999  Marc Espie <espie@cvs.openbsd.org>

	* Makefile.in (AR_FOR_TARGET, RANLIB_FOR_TARGET):  Fix target name
	substitution.

Tue Oct 26 01:27:32 1999  Mark Mitchell  <mark@codesourcery.com>

	* tree.h (BLOCK_TYPE_TAGS): Remove.
	(BLOCK_END_NOTE): Likewise.
	(BLOCK_LIVE_RANGE_FLAG): Likewise.
	(BLOCK_LIVE_RANGE_START): Likewise.
	(BLOCK_LIVE_RANGE_END): Likewise.
	(tree_block): Remove live_range_flag, live_range_var_flag, and
	type_tags.  Remove end_note, live_range_start, and live_range_end.
	(remember_end_note): Remove prototype.
	* tree.c (build_block): Don't set BLOCK_TYPE_TAGS.
	* c-decl.c (poplevel): Don't set BLOCK_TYPE_TAGS or call
	remember_end_note.
	* ggc-common.c (ggc_mark_tree_children): Don't mark
	BLOCK_TYPE_TAGS or BLOCK_END_NOTE.
	* integrate.c (adjust_copied_decl_tree): Remove.
	* print-tree.c (print_node): Don't print BLOCK_TYPE_TAGS.
	* stmt.c (last_block_end_note): Remove.
	(init_stmt): Don't add a GC root for it.
	(expand_fixup): Don't set it.
	(remember_end_note): Remove.
	(expand_end_bindings): Don't set last_block_end_note.

Tue Oct 26 00:41:54 1999  Bernd Schmidt  <bernds@cygnus.co.uk>

	* reload1.c (reload_reg_free_for_value_p): Show
	RELOAD_FOR_OTHER_ADDRESS reloads can conflict with RELOAD_OTHER
	reloads.

Mon Oct 25 23:54:45 1999  Geoff Keating  <geoffk@cygnus.com>

	* expmed.c (extract_bit_field): Allow for the case of non-integer
	objects that are smaller than a word (like SFmode on a 64-bit
	machine).

	* loop.c (basic_induction_var): A non-integer variable which is
	being set by a paradoxical subreg is probably not a biv.

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

	* prefix.c (translate_name) Check for empty prefix string.

Mon Oct 25 23:10:45 1999  Andreas Schwab  <schwab@suse.de>

	* Makefile.in (CPP_CROSS_NAME): New variable.
	(install-cpp): Use it instead of CPP_INSTALL_NAME for the cross
	xcpp.
	(uninstall-cpp): Use CPP_INSTALL_NAME and CPP_CROSS_NAME for the
	names of the files to be uninstalled.

Mon Oct 25 23:03:09 1999  Jeffrey A Law  (law@cygnus.com)

	* collect2.c (IS_DIR_SEPARATOR): Define.
	(prefix_from_string): Use IS_DIR_SEPARATOR and DIR_SEPARATOR.

	* som.h (ASM_DECLARE_FUNCTION_NAME): Set PRIV_LEV for static
	functions too.

	* haifa-sched.c (add_dependence): Update the true dependency
	cache the first time we add a true dependence to the LOG_LINKS chain.

Mon Oct 25 22:27:40 1999  Jim Kingdon  <http://developer.redhat.com/>

	* fold-const.c (fold): Fix comment.

Mon Oct 25 22:49:34 1999  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* dbxout.c (lastfile, cwd, dbxout_type_method_1,
	dbxout_symbol_location, dbxout_symbol_name, dbxout_init,
	dbxout_start_new_source_file, dbxout_source_file,
	dbxout_source_line, dbxout_finish, dbxout_type_fields,
	dbxout_type_methods, dbxout_symbol, dbxout_prepare_symbol):
	Constify a char*.
	(dbxout_types, dbxout_args, dbxout_symbol): Delete prototypes.
	(dbxout_symbol): Mark parameter `local' with ATTRIBUTE_UNUSED.
	(dbxout_block): Initialize variable `blocknum'.

	* dbxout.h (dbxout_init, dbxout_finish,
	dbxout_start_new_source_file, dbxout_source_file, dbxout_types,
	dbxout_args, dbxout_source_line): Constify a char*.

	* dwarfout.c (dwarf_tag_name, dwarf_attr_name,
	dwarf_stack_op_name, dwarf_typemod_name, dwarf_fmt_byte_name,
	dwarf_fund_type_name, name_attribute, stmt_list_attribute,
	low_pc_attribute, high_pc_attribute, body_begin_attribute,
	body_end_attribute, comp_dir_attribute, sf_names_attribute,
	src_info_attribute, mac_info_attribute, producer_attribute,
	lookup_filename, generate_macinfo_entry, fundamental_type_code,
	dwarfout_line, dwarfout_start_new_source_file, dwarfout_define,
	dwarfout_undef): Constify a char*.
	(add_incomplete_type, retry_incomplete_types): Add prototypes.

	* dwarfout.h (dwarfout_define, dwarfout_undef,
	dwarfout_start_new_source_file, dwarfout_line): Constify a char*.

1999-10-25  Gavin Romig-Koch  <gavin@cygnus.com>

	* config/mips/mips.h (MIPS_ISA_DEFAULT): Insure it's defined.
	(MULTILIB_ISA_DEFAULT): New.
	(MULTILIB_DEFAULTS): Use it.
	* config/mips/mips.c (): Remove the now unnecessary definition
	of MIPS_ISA_DEFAULT.
	* config/mips/elf64.h (MULTILIB_DEFAULTS): Remove the now
	unnecessary definition.

Mon Oct 25 22:08:35 1999  Richard Earnshaw (rearnsha@arm.com)

	* arm.md (pic_load_addr): Add constraints to operand 1.

1999-10-25  Bruce Korb  <autogen@linuxbox.com>

	* fixinc/genfixes:  Provide a means for specifying -D options to
	AutoGen

Mon Oct 25 00:42:35 1999  Jeffrey A Law  (law@cygnus.com)

	* arm.c (arm_override_options): Correct initialization of
	arm_fast_multiply, arm_arch4, arm_arch5, arm_ld_sched,
	arm_is_strong, and arm_is_6_or_7.

	* loop.c (note_set_pseudo_multiple_uses_retval): New variable.
	(note_set_pseudo_multiple_uses): New function.
	(check_dbra_loop): Use not_set_pseudo_multiple_uses to determine
	if a pseudo set in the loop exit is used elsewhere.

Sun Oct 24 20:52:40 1999  Mark Mitchell  <mark@codesourcery.com>

	* i386.md (mulsi3): Tweak to work with SCO OSR5 COFF assembler.

Sun Oct 24 21:02:46 1999  Richard Henderson  <rth@cygnus.com>

	* i386.md (*lea_0): Collapse addsi_0, addsi_lea_[123] into
	a single load-address pattern.

Sun Oct 24 19:33:24 1999  Mark P. Mitchell  <mark@codesourcery.com>

	* haifa-sched.c (schedule_insns): Don't assign LUIDs differently
	depending on whether or not line-number notes are present.

Sun Oct 24 20:29:59 1999  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* cccp.c (progname, file_buf, default_include, include_file,
	macrodef, definition, hashval, wchar_type, user_label_prefix,
	directive, out_fname, if_stack, safe_write, index0, get_lintcmd,
	expand_to_temp_buffer, is_system_include, base_name,
	absolute_filename, read_name_map, open_include_file,
	record_control_macro, check_precompiled, check_preconditions,
	pcfinclude, pass_thru_directive, create_definition,
	check_macro_name, comp_def_part, collect_expansion,
	check_assertion, read_token_list, assertion_install,
	assertion_lookup, eval_if_expression, conditional_skip,
	validate_else, skip_quoted_string, quote_string, macarg1,
	error_from_errno, install, lookup, hashf, dump_defn_1,
	perror_with_name, pfatal_with_name, main, trigraph_pcp,
	check_white_space, rescan, handle_directive, monthnames,
	special_symbol, do_include, remap_include_file, write_output,
	arglist, do_assert, do_unassert, do_line, do_error, do_once,
	do_ident, do_sccs, do_xifdef, skip_if_group,
	output_line_directive, macroexpand, macarg, change_newlines,
	initialize_builtins, make_definition): Constify a char*.

	* pcp.h (stringdef): Likewise.

Sun Oct 24 13:29:28 1999  Richard Henderson  <rth@cygnus.com>

	* unroll.c (copy_loop_body): Examine SET_DEST of single_set
	not of pattern.

Sun Oct 24 13:14:20 1999  Graham  <grahams@rcp.co.uk>
			  Richard Henderson  <rth@cygnus.com>

	* alias.c: Include ggc.h.
	(reg_base_value, new_reg_base_value, reg_base_value_size): Make static.
	(record_set): Verify enough room in reg_base_value.
	(init_alias_analysis): Allocate reg_base_value with xcalloc.
	Register it as a GC root.
	(end_alias_analysis): Free reg_base_value.  Remove it as a GC root.
	* Makefile.in (alias.o): Depend on ggc.h.

	* unroll.c (unroll_loop): Verify the insn before a barrier
	is a JUMP_INSN before checking JUMP_LABEL.

Sun Oct 24 15:46:44 1999  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* mips/bsd-5.h (ASM_OUTPUT_ASCII): Constify a char*.
	* mips/iris4.h (ASM_OUTPUT_ASCII): Likewise.
	* mips/mips-5.h (ASM_OUTPUT_ASCII): Likewise.
	* mips/mips.h (ASM_OUTPUT_ASCII): Likewise.
	* mips/svr3-5.h (ASM_OUTPUT_ASCII): Likewise.
	* mips/svr4-5.h (ASM_OUTPUT_ASCII): Likewise.

Sun Oct 24 15:35:43 1999  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* output.h (ctors_section, dtors_section, bss_section): Prototype.

	* alpha/alpha-interix.h (text_section): Delete prototype.
	* alpha/elf.h (text_section): Likewise.
	* arm/linux-elf.h (text_section): Likewise.
	* arm/linux-telf.h (text_section): Likewise.
	* c4x/c4x.h (text_section): Likewise.
	* dsp16xx/dsp16xx.h (bss_section): Likewise.
	* elfos.h (text_section): Likewise.
	* i386/aix386ng.h (text_section): Likewise.
	* i386/i386-interix.h (text_section): Likewise.
	* i386/sco5.h (text_section): Likewise.
	* i386/svr3gas.h (text_section): Likewise.
	* nextstep.h (text_section): Likewise.
	* psos.h (text_section): Likewise.
	* ptx4.h (text_section): Likewise.
	* svr3.h (text_section): Likewise.
	* svr4.h (text_section, ctors_section, dtors_section): Likewise.

Sun Oct 24 15:20:59 1999  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* final.c (peephole): Delete prototype.

	* gcse.c (process_insert_insn, pre_edge_insert): Add prototypes.
	(pre_insert_copies): Remove unused variable `bb'.

	* genrecog.c (debug_decision_0, debug_decision_list, main): Add
	prototypes.

	* output.h (peephole): Add prototype.

Sun Oct 24 11:35:30 1999  Mark P. Mitchell  <mark@codesourcery.com>

	* config/mips/iris6.h (SUBTARGET_ASM_OPTIMIZING_SPEC): Define to
	-O0.

Sat Oct 23 21:13:00 1999  Mark Mitchell  <mark@codesourcery.com>

	* integrate.c (integrate_decl_tree): Tweak setting of DECL_CONTEXT
	for inlined declarations.

Fri Oct 22 18:05:43 1999  Jeffrey A Law  (law@cygnus.com)

	* arm.c (logical_binary_operator): New fucntion.
	* arm.h (logical_binary_operator): Declare it.
	(PREDICATE_CODES): Handle logical_binary_operator.
	* arm.md (anddi3, anddi_zesidi_di, anddi_sesdi_di): Use "#" for
	output constraints.  Add appropriate splitters.
	(anddi_notdi_di, anddi_notzesidi_di, anddi_notsesidi_di): Likewise.
	(iordi3, iordi_zesidi_di, iordi_sesidi_di): Likewise.
	(xordi3, xordi_zesidi_di, xordi_sesidi_di): Likewise.

Fri Oct 22 23:46:50 1999  Bernd Schmidt  <bernds@cygnus.co.uk>

	* genoutput.c (struct operand_data): New elt eliminable.
	(output_operand_data): Write it.
	(scan_operands): Set it for MATCH_OPERAND, clear for other matchers.
	(compare_operands): Take it into account.
	* recog.h (struct insn_operand_data): New elt eliminable.
	* reload1.c (check_eliminable_occurrences, elimination_effects): New
	functions.
	(old_asm_operands_vec, new_asm_operands_vec): Delete.
	(eliminate_regs): Move code that detects changes to elimination
	target regs into new function elimination_effects.
	Delete one #if 0 block.
	Abort for USE, CLOBBER, ASM_OPERANDS and SET.
	(eliminate_regs_in_insn): Return immediately for USEs, CLOBBERs,
	ADDR_VECs, ADDR_DIFF_VECs and ASM_INPUTs.
	Only call eliminate_regs for real operands of the insn, not for parts
	of its structure or parts matched by things like match_operator.
	Use elimination_effects and check_eliminable_occurrences.  Use
	copy_insn to duplicate the pattern when not in the final pass.

Fri Oct 22 09:03:44 1999  Mark Mitchell  <mark@codesourcery.com>

	* i386.md: Add missing `y' modifiers to uses of fst, fstp, fld,
	and fld.

1999-10-22  Bruce Korb  <autogen@linuxbox.com>

	* fixinc/README: document the "mach" machine matching test
	* fixinc/fixfixes.c: Implement the #else/#endif label fix
	* fixinc/fixtests.c: Implement the #else/#endif label test
	* fixinc/inclhack.def: utilize these tests and fixes
	* fixinc/inclhack.sh:  regen
	* fixinc/fixincl.x:  regen
	* fixinc/fixincl.sh:  regen

Thu Oct 21 20:37:19 1999  Jeffrey A Law  (law@cygnus.com)

	* Makefile.in (cse.o): Depend on hashtab.h, not splay-tree.h.  Also
	depend on ggc.h.

Thu Oct 21 20:30:19 1999  Matthias Klose  <doko@debian.org>

	* gcc.1: Document exit codes.

Thu Oct 21 12:49:05 1999  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* calls.c: Include tm_p.h later, so everything we need is defined.
	* expr.c: Likewise.
	* function.c: Likewise.

	* except.c: Include tm_p.h.

	* sparc.c: Likewise.
	(dwarf2out_cfi_label): Don't prototype.
	(check_return_regs, epilogue_renumber,
	ultra_cmove_results_ready_p, ultra_fpmode_conflict_exists,
	ultra_find_type, ultra_build_types_avail, ultra_flush_pipeline,
	ultra_rescan_pipeline_state, set_extends, ultra_code_from_mask,
	ultra_schedule_insn): Add static prototype.
	(data_segment_operand, text_segment_operand): Call itself with the
	proper number of arguments.
	(sparc_flat_save_restore, sparc_v8plus_shift): Constify a char*.

	* sparc.h: Move all declarations to sparc-protos.h.
	(SELECT_RTX_SECTION):  Pass a missing MODE argument to
	symbolic_operand.

	* sparc/sysv4.h (SELECT_RTX_SECTION): Likewise.

	* config/svr4.h (text_section, ctors_section, dtors_section): Add
	Prototypes.
	(ASM_OUTPUT_SECTION_NAME, UNIQUE_SECTION,
	ASM_FINISH_DECLARE_OBJECT, ASM_OUTPUT_LIMITED_STRING,
	ASM_OUTPUT_ASCII): Constify a char*.

	* sparc-protos.h: New file for sparc prototypes.

Thu Oct 21 12:23:40 1999  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* function.c (record_insns, contains): Always declare and define.
	(record_insns): Mark with ATTRIBUTE_UNUSED.

Thu Oct 21 13:03:49 1999  Jonathan Larmour  <jlarmour@cygnus.co.uk>

	* config/arm/telf.h (ASM_OUTPUT_SECTION_NAME): Add %nobits option
	to .section when outputting a .bss section to deal with multiple
	.bss input sections (as happens with -fdata-sections)
	Also output %progbits, not @progbits so the assembler doesn't treat as
	a comment.
	* config/arm/unknown-elf.h (ASM_OUTPUT_SECTION_NAME): Likewise

	* config/arm/lib1funcs.asm (_call_via_rX): Allow compilation of
	thumb parts even when building with non-thumb CPUs, by forcing
	thumb mode.

Wed Oct 20 22:57:58 1999  Jeffrey A Law  (law@cygnus.com)

	* sparc.md (movsf_const_intreg): If splitting, length must be > 1.
	(movdf_const_intreg_sp64): Similarly.

	* local-alloc.c (update_equiv_regs): Check the correct insn
	for pre-existing REG_EQUIV notes.

Wed Oct 20 20:41:46 1999  Mark Mitchell  <mark@codesourcery.com>

	* cse.c (cse_end_of_basic_block): Don't return the end of a basic
	block reached by a branch if we're not going to actually process
	this block.

Wed Oct 20 15:18:42 1999  Jim Wilson  <wilson@cygnus.com>

	* integrate.c (integrate_decl_tree): Set DECL_CONTEXT to 0 if this is
	a local extern function declaration.

Wed Oct 20 13:56:01 1999  Richard Henderson  <rth@cygnus.com>

	* i386.c (ix86_expand_prologue): Properly wrap USE around
	reg for CALL_INSN_FUNCTION_USAGE.

Thu Oct 14 18:51:37 1999  Andrew Haley  <aph@cygnus.com>

	* config/mips/mips.md (movdf_internal1a): Allow floating-point
	move between GP_REGs.

Wed Oct 20 15:36:11 1999  Andrew Haley  <aph@cygnus.com>

	* config/arm/thumb.h (GO_IF_LEGITIMATE_ADDRESS): Take account of
	the mode size when finding out if an offset is legal.

Wed Oct 20 06:26:58 1999  Richard Henderson  <rth@cygnus.com>

	* basic-block.h (PROP_*): Move constants from ...
	* flow.c: ... here.
	(compute_bb_for_insn): Free the array before reallocating.
	(update_life_info): New arg PROP_FLAGS; pass on to propagate_block.
	(allocate_reg_life_data): Reset all reg variables collected by
	propagate_block.
	(get_block_head_tail): Don't convert from bb to block.
	(get_bb_head_tail): New.  Update all callers of get_block_head_tail.
	(find_insn_reg_weight): Take block not bb.
	(schedule_block): Don't set block num for moved insns.
	(schedule_region): Don't update_life_info or find_insn_reg_weight.
	(schedule_insns): Do it here instead.
	* combine.c (combine_instructions): Invoke compute_bb_for_insn
	before update_life_info.
	* recog.c (split_all_insns, peephole2_optimize): Update for
	new arg to update_life_info.
	* rtlanal.c (remove_note): Cope with NULL note.
	* toplev.c (rest_of_compilation): Don't invoke recompute_reg_usage
	if we did sched1.

Wed Oct 20 10:46:41 1999  Richard Earnshaw (rearnsha@arm.com)

	* jump.c (jump_optimize_1): More accurately detect casesi insns.

	* flow.c (merge_blocks_move_predecessor_nojumps): Re-order the basic
	block records so that merge_blocks_nomove will clean up correctly.
	(split_edge): Handle casesi insns.

	* gcc-page.c: Try MAP_ANON if we don't have MAP_ANONYMOUS.

Tue Oct 19 23:43:50 1999  Jeffrey A Law  (law@cygnus.com)

	* pa.md (call, call_value): Do not emit a blockage after restoring
	the PIC register.

Tue Oct 19 17:22:39 1999  Mark Mitchell  <mark@codesourcery.com>

	* c-typeck.c (c_expand_asm_operands): Fix typo.

Tue Oct 19 18:42:58 1999  Bernd Schmidt  <bernds@cygnus.co.uk>

	* arm.c (fpu_rhs_operand): Verify modes.
	(fpu_add_operand): Likewise.
	(di_operand): Likewise.
	(soft_df_operand): Likewise.

Tue Oct 19 15:26:11 1999  Richard Earnshaw  (rearnsha@arm.com)

	* arm.c (arm_return_in_memory): APCS rules state that the elements
	of a structure returned in a register must be 'integer-like'.

1999-10-19  Bruce Korb  <autogen@linuxbox.com>

	* fixinc/Makefile.in: Change the generation rules to run `genfixes'
	in the source tree when the generated targets are out of date
	* fixinc/genfixes: Alter it to run individual fixes for make.
	* fixinc/README: rewrite
	* fixinc/inclhack.def: moved initial comments to README

Tue Oct 19 14:01:34 1999  Nick Clifton  <nickc@cygnus.com>

	* toplev.c (main): Do not generate an error message if an
	unrecognized command line switch is recognizable by another
	language.  If extra_warnings are enabled, then generate a
	warning message instead.

Tue Oct 19 11:41:12 1999  Mumit Khan  <khan@xraylith.wisc.edu>

	* c-pragma.h (PRAGMA_INSERT_ATTRIBUTES): Delete macro.
	(insert_pack_attributes): Delete prototype.

	* c-pragma.c (default_alignment): New static variable.
	(push_alignment): Initialize to current effective alignment.
	(pop_alignment): Use to set new alignment.
	(insert_pack_attributes): Delete function.
	(handle_pragma_token): Set default_alignment as well each time
	a #pragma pack(<n>) is encountered.

Tue Oct 19 02:03:00 1999  Jeffrey A Law  (law@cygnus.com)

	* reg-stack.c (stack_result): Aggregates are not returned in
	stack registers.

Tue Oct 19 01:26:48 1999  Alasdair Baird <alasdair@wildcat.demon.co.uk>

	* fold-const.c (fold): Fix thinko in x+(-0) -> x transformation.

Mon Oct 18 15:19:41 1999  Richard Henderson  <rth@cygnus.com>

	* basic-block.h (set_block_num): Declare.
	* flow.c (update_life_info): Don't call compute_bb_for_insn
	or free_basic_block_vars.
	* haifa-sched.c (remove_dependence): Conditionalize on HAVE_cc0.
	(insn_orig_block): Remove.
	(INSN_BLOCK): Remove.  Update all callers to use BLOCK_NUM.
	(schedule_block): Keep BLOCK_NUM up-to-date.
	(schedule_insns): Use compute_bb_for_insn.
	* recog.c (split_all_insns): Likewise.
	(peephole2_optimize): Likewise.

Mon Oct 18 18:50:51 1999  Andreas Schwab  <schwab@suse.de>

	* config/m68k/m68k.h (INITIAL_FRAME_POINTER_OFFSET): Add one word
	if the pic register is used.

Mon Oct 18 02:38:46 1999  Bernd Schmidt  <bernds@cygnus.co.uk>

	* c-decl.c (pushdecl): Use TYPE_CONTEXT rather than TREE_PERMANENT.
	(finish_decl): Duplicate test for TREE_ASM_WRITTEN in else branch of
	if that tests TREE_PERMANENT.

Mon Oct 18 01:41:35 1999  Jeffrey A Law  (law@cygnus.com)

	* cse.c (invalidate_for_call): Do not remove memory references from
	the table here.  It's handled elsewhere.

	* haifa-sched.c (add_dependence): Protect references to the
	true dependency cache with #ifdef INSN_SCHEDULING.
	(remove_dependence): Similarly.

	* mn10200.md (outline_epilogue_jump): Embed a (return) to indicate
	to the cfg code that this is a return instruction.
	* mn10300.md (return_internal): Similarly.

	* combine.c (get_last_value): If the last set of a register
	is after subst_low_cuid, then we can not use it to determine
	the register's last value.

Sun Oct 17 11:02:52 1999  Mark Mitchell  <mark@codesourcery.com>

	* Makefile.in: Back out previous change.

Sun Oct 17 15:22:50 1999  Jeffrey A Law  (law@cygnus.com)

	* pa.c (move_operand): Reject (lo_sum (reg) (unspec ...)).

	* haifa-sched.c (add_dependence): Only check/update the cache
	if it exists.
	(remove_dependence): Likewise.
	(schedule_insns): Only create the true_dependency_cache if the
	average number of instructions in a basic block is very large.

Sun Oct 17 11:02:52 1999  Mark Mitchell  <mark@codesourcery.com>

	* Makefile.in (ggc-common.o): Depend on genrtl.h.
	(ggc-simple.o): Likewise.
	(ggc-page.o): Likewise.

Sun Oct 17 02:09:50 1999  Andrew MacLeod  <amacleod@cygnus.com>

	* basic-block.h (pre_edge_lcm, pre_edge_rev_lcm, compute_available):
	Prototype for exported functions.
	(pre_lcm, pre_rev_lcm): Remove prototypes.
	* gcse.c (compute_ae_kill): Add ae_gen and ae_kill as parameters.
	(compute_available): Move to lcm.c, and change parameter order.
	(one_classic_gcse_pass): Call compute_ae_kill with parameters.
	(pre_insert, s_preds, s_succs, num_preds, num_succs): Delete.
	(gcse_main): No longer call compute_preds_succs.  Rebuild the
	set table after reach pre pass.
	(pre_insert_map, pre_delete_map, edge_list): New.
	(alloc_pre_mem): Allocate edge vectors.
	(free_pre_mem): Delete edge vectors.
	(compute_pre_data): Call new edge based lcm routines.
	(process_insert_insn): New function.
	(insert_insn_end_bb): Use it.
	(pre_edge_insert): New function.
	(pre_insert_copy_insn): Formatting fixes.  Update BLOCK_END as
	needed.
	(pre_insert_copies): Revamp using new edge based lcm outputs.
	(pre_delete): Likewise.
	(one_pre_gcse_pass): Insert & remove fake edges to the exit
	block.
	(compute_code_hoist_vbeinout): New new edge based routines.
	* lcm.c: Remove all the old LCM functions.  Replace with new ones
	that work with the new cfg datastructures and work with edges
	instead of blocks.

Sun Oct 17 00:44:17 1999  Bernd Schmidt  <bernds@cygnus.co.uk>

	* reload.h (struct reload): Add new fields "mode" and "nregs".
	* reload1.c: Change all occurrences of reload_mode and reload_nregs
	to reference the "mode" and "nregs" field within struct reload.

Sat Oct 16 21:50:28 1999  Jeffrey A Law  (law@cygnus.com)

	* haifa-sched.c (true_dependency_cache): New.
	(add_dependence): Use the true dependency cache to avoid expensive
	walks down the LOG_LINKS dependency list.  Add entries to the
	cache as necessary.
	(remove_dependence): Remove entries from the true dependency cache
	as needed.
	(schedule_insns): Allocate and initialize and free the true
	dependency cache.

	* haifa-sched.c (schedule_insns): Do not remove inter-block
	dependencies anymore.

Sat Oct 16 11:19:52 1999  Richard Henderson  <rth@cygnus.com>

	* i386/t-cygwin (winnt.o): Depend on RTL_H and TREE_H.
	* i386/t-winnt: Likewise.

Sat Oct 16 11:11:54 1999  Richard Henderson  <rth@cygnus.com>

	* ggc-page.c (init_ggc): Work around SunOS unaligned mmap bug.

1999-10-16  Manfred Hollstein  <mhollstein@cygnus.com>

	* Makefile.in (LANGUAGES): Omit "proto".
	(clean): Remove stale comment about removing unprotoize.c.

Sat Oct 16 11:29:14 1999  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* protoize.c (safe_read, safe_write): Avoid the gcc extension of
	using arithmetic on void pointers.

Sat Oct 16 02:48:22 1999  Jeffrey A Law  (law@cygnus.com)

	* haifa-sched.c (compute_block_forward_dependencies): Only check
	for notes, deleted insns and duplicates if ENABLE_CHECKING is defined.

Sat Oct 16 00:07:01 1999  Richard Henderson  <rth@cygnus.com>

	* gcse.c (hash_expr_1): Add in MEM_ALIAS_SET.
	(expr_equiv_p): Reject memories with different alias sets.

Fri Oct 15 15:17:29 1999  Greg McGary  <gkm@gnu.org>

	* flags.h (flag_bounds_check, flag_bounded_pointers): New extern decls.
	* toplev.c (flag_bounds_check, flag_bounded_pointers): New flags.
	(f_options): Add "bounded-pointers" and "bounds-check" entries.
	* c-lang.c (lang_init_options): Set flag_bounds_check as "unspecified".
	(lang_init): Set default for flag_bounds_check if still "unspecified".

Sat Oct 16 13:42:29 1999  Michael Hayes  <m.hayes@elec.canterbury.ac.nz>

	* config/c4x/c4x.md (HF mode patterns):  Add missing modes.

Sat Oct 16 13:37:46 1999  Michael Hayes  <m.hayes@elec.canterbury.ac.nz>

	* config/c4x/c4x.md (movstrqi_small): Utilize parallel move
	instructions.

Sat Oct 16 13:26:47 1999  Michael Hayes  <m.hayes@elec.canterbury.ac.nz>

	* config/c4x/c4x.md (*db_noclobber,
	*decrement_and_branch_until_zero_noclobber): New patterns and
	associated splitters.

Sat Oct 16 13:13:15 1999  Michael Hayes  <m.hayes@elec.canterbury.ac.nz>

	* config/c4x/c4x.md (parallel instruction patterns): Rework
	constraints to keep reload happy.

Sat Oct 16 13:03:16 1999  Michael Hayes  <m.hayes@elec.canterbury.ac.nz>

	* config/c4x/c4x.md (*absqi2_noclobber, *negqi2_noclobber,
	*one_cmplqi2_noclobber, *subqi3_noclobber, *andqi3_255_noclobber,
	*andqi3_65535_noclobber, *andnqi3_noclobber, *xorqi3_noclobber):
	Add new patterns and associated post-reload splitters.

Sat Oct 16 12:42:12 1999  Michael Hayes  <m.hayes@elec.canterbury.ac.nz>

	* config/c4x/c4x.c (c4x_emit_libcall): Use ggc_alloc_string.

Sat Oct 16 12:34:44 1999  Michael Hayes  <m.hayes@elec.canterbury.ac.nz>

	* config/c4x/c4x.c (c4x_rptb_insert): Emit rpts_top pattern
	if appropriate.
	* config/c4x/c4x.md (rpts_top): New pattern and splitter.

Sat Oct 16 12:26:30 1999  Michael Hayes  <m.hayes@elec.canterbury.ac.nz>

	* config/c4x/c4x.c (src_operand):  Check SYMBOL_REF and LABEL_REF
	memory mode.

Fri Oct 15 17:02:09 1999  Jeffrey A Law  (law@cygnus.com)

	* pa.c (move_operand): Rely on memory_address_p to determine the
	validity of non-indexed memory addresses.
	* pa.h (GO_IF_LEGITIMATE_ADDRESS): Allow LO_SUM with a symbolic
	operand in DFmode and SFmode when generating PA2.0 code.

Fri Oct 15 14:25:19 1999  Richard Henderson  <rth@cygnus.com>

	* print-rtl.c (print_rtx): Limit last 'u' change to LABEL_REF.

Fri Oct 15 13:48:45 1999  Richard Henderson  <rth@cygnus.com>

	* mips.c (function_prologue): Fix argument types.
	* mips.md (casesi): Use emit_jump_insn for casesi_internal.
	(casesi_internal): Write to the scratch register.

1999-10-15 11:16 -0700  Zack Weinberg  <zack@bitmover.com>

	* cppexp.c (cpp_parse_escape): Make static.  Change second arg
	to U_CHAR **.
	(parse_charconst): Delete unnecessary cast when calling
	cpp_parse_escape.
	(cpplib.h): Kill prototype of cpp_parse_escape.

Fri Oct 15 11:02:46 1999  Richard Henderson  <rth@cygnus.com>

	Based on patch from Michael Gschwind <mikeg@watson.ibm.com>:
	* unroll.c (unroll_loop): Cast return value of alloca.
	* i370/i370.c: Include function.h and toplev.h.
	(i370_label_scan): Remove c++ commented abort.
	* i370/i370.h (HANDLE_PRAGMA): Takes three arguments.
	(ASM_OUTPUT_LABELREF): Fix TOUPPER/else broken 16 Sept.
	* i370/xm-i370.h (HOST_BITS_PER_LONGLONG): Define.
	* i370/xm-mvs.h, i370/xm-oe.h: Likewise.

Fri Oct 15 03:01:01 1999  Loren Rittle  <ljrittle@acm.org>

	* config/t-freebsd: Do not override USER_H.
	* ginclude/stddef.h: Generalize check for _MACHINE_ANSI_H_.

Fri Oct 15 02:37:28 1999  Alastair J. Houghton <ajh8@doc.ic.ac.uk>
			  Mumit Khan  <khan@xraylith.wisc.edu>

	* c-parse.in (component_decl): Support anonymous struct/union.
	(%expect): Update.
	* c-parse.y: Regenerate.
	* c-parse.c: Likewise.
	* objc/objc-parse.y: Likewise.
	* objc/objc-parse.c: Likewise.
	* c-decl.c (finish_struct): Don't sort the fields.
	(field_decl_cmp): Delete unused function.

Fri Oct 15 01:20:52 1999  Richard Henderson  <rth@cygnus.com>

	* sparc.md (movsf_const_intreg): Revert last constraint change.
	(movdf_const_intreg_sp32): Likewise.

Fri Oct 15 01:47:51 1999  Vladimir Makarov  <vmakarov@loony.cygnus.com>

	* cse.c: Include hashtab.h instead of splay-tree.h
	(struct cse_reg_info): No longer use variant union.  Add new
	field "regno".  All references changed to avoid union.
	(cse_reg_info_used_list, cse_reg_info_used_list_end): New variables.
	(free_cse_reg_info): Remove.
	(hash_cse_reg_info, cse_reg_info_equal_p): New functions.
	(get_cse_reg_info): Revamp to use expandable hash tables instead
	of splay trees.  Initialize new fields in cse_reg_info structure.
	(new_basic_block): Similarly.

Thu Oct 14 23:51:56 1999  Richard Henderson  <rth@cygnus.com>

	* genrecog.c (message_with_line): Prototype.
	(validate_pattern): Pass along the set for the dest, not a flag.
	Fix non-lvalue message.  Don't warn for VOIDmode SET_DEST of CALL.
	Check for PC/CC0 as sources.
	(nodes_identical): Check for children position match before
	allowing the combination.

	* rtl.c (read_rtx): Track line number across \\\n.

Thu Oct 14 23:50:25 1999  Richard Henderson  <rth@cygnus.com>

	* mips.h (SPECIAL_MODE_PREDICATES): New.
	* mips.md (*) Use nonimmediate_operand not general_operand for outputs.
	(movdi+1, movsi+1): Add output reload constraint.
	(casesi_internal): Likewise.  Fix commentary.
	(return_internal): Use pmode_register_operand.

Thu Oct 14 23:19:34 1999  Richard Henderson  <rth@cygnus.com>

	* 1750a.md (movstrqi): Add missing output reload constraint.
	(call_value): Likewise.
	* a29k.md (cpxxx patterns): Add missing match_operator mode.
	(jmpfdec): Add missing inout reload constraint.
	* elxsi.md (addsi patterns): Add missing output reload constraint.
	(move from sp): Use @ alternates.
	(call_value): No constraint on output.
	* fr30.md (movsi_pop): Add missing output reload constraint.
	(movsf_constant_store): Likewise.
	(splits): Remove constraints.
	(subsi3): Add missing mode.
	* i370.md (cmpstrsi+1): Add missing output reload constraint.
	(call_value): Likewise.
	* i960.md (cmpinc/cmpdec patterns): Add inout reload constraints.
	* m32r.h (PREDICATE_CODES): Add seth_add3_operand.
	* m32r.md (movsicc_internal): Add output reload constraint.
	(movstrsi_internal): Add inout reload constraints.
	* m88k.h (reg_names): Don't declare.
	(SPECIAL_MODE_PREDICATES): New.
	* m88k.md (*): Use register_operand not reg_or_0_operand
	on destinations.
	* mn10200.h (PREDICATE_CODES): New.
	* ns32k.md (ffs pattern): Add output reload constraint.
	* pdp11.md (sob pattern): Add inout reload constraint.
	* sh.md (splits): Remove constraints.
	(indirect_jump_scratch, fpu_switch): Add output reload constraint.
	* v850.md (pattern_is_ok_for_epilogue): Likewise.
	* vax.md (jgequ pattern): Add inout reload constraint.

Fri Oct 15 00:05:00 1999  Jeffrey A Law  (law@cygnus.com)

	* configure.in (djgpp): Revert previous patch.
	* configure: Rebuit.
	* config/i386/djgpp.h: Revert previous patch.

Fri Oct 15 00:00:24 1999  Loren J. Rittle <ljrittle@acm.org>

	* fixinc/inclhack.def: Restore patch lost during last merge of
	"no_bogosity" branch.
	* fixinc/inclhack.sh, fixinc/fixincl.x: Rebuilt.

Thu Oct 14 23:57:56 1999  Gavin Romig-Koch  <gavin@cygnus.com>

	* fixincludes: Add a HPUX 11 fix for inttypes.h.
	* fixinc/inclhack.def: Same.
	* fixinc/inclhack.sh, fixinc/fixincl.sh, fixinc/fixincl.x: Regenerate.

Thu Oct 14 22:51:55 1999  Richard Henderson  <rth@cygnus.com>

	* alpha.h (GO_IF_LEGITIMATE_SIMPLE_ADDRESS): Accept ADDRESSOF
	as the base of a PLUS.

Fri Oct 15 18:36:07 1999  Michael Hayes  <m.hayes@elec.canterbury.ac.nz>

	* config/c4x/c4x.md:  Define mode for remaining unspec operators.
	* config/c4x/c4x.c (dst_operand):  Use nonimmediate_operand.

Thu Oct 14 22:14:23 1999  Richard Henderson  <rth@cygnus.com>

	* pa.md (post_stw+1): Use pmode_register_operand.
	(dcacheflush, icacheflush): Likewise.

	* i386.md (movstricthi_1): Allow r/r.

Thu Oct 14 19:44:08 1999  Jan Hubicka  <hubicka@freesoft.cz>

	* fold-const.c (fold): Convert (or (not arg0) (not arg1))
	to (not (and (arg0) (arg1))). Similary for and.

	* fold-const.c (fold): Move bit_rotate code to the EXPR_PLUS case,
	fallthrough to associate code.
	Convert XOR to OR in code like (a&c1)^(a&c2) where c1 and c2 don't have
	bits in common.

	* combine.c (simplify_logical): Convert XOR to IOR if operands have
	no bits in common; remove XOR to ROTATE conversion.

Fri Oct 15 17:40:11 1999  Michael Hayes  <m.hayes@elec.canterbury.ac.nz>

	* config/c4x/c4x.h (c4x_va_start, c4x_va_arg): Declare.

Fri Oct 15 17:27:17 1999  Michael Hayes  <m.hayes@elec.canterbury.ac.nz>

	* config/c4x/c4x.c (dst_operand): New.
	(PREDICATE_CODES): Update.
	* config/c4x/c4x.h (dst_operand): Declare it.
	* config/c4x/c4x.md:  Define mode for each unspec usage.
	(move patterns):  Use dst_operand predicate instead of src_operand.
	(movqi_update, movqf_update): Delete.

Thu Oct 14 18:48:54 1999  Richard Henderson  <rth@cygnus.com>

	* recog.c (pmode_register_operand): New.
	* recog.h: Declare it.
	* genrecog.c (pred_codes): Likewise.
	(special_mode_pred_table): Likewise.
	(validate_pattern): Don't warn no mode for address_operand.

	* print-rtl.c (print_rtx) [LABEL_REF]: Only do full subexpression
	if the operand is not insn-like.

Thu Oct 14 19:38:42 1999  Jeffrey A Law  (law@cygnus.com)
			  Sylvian Pion <Sylvain.Pion@sophia.inria.fr>

	* fold-const.c (fold): Handle more simplifications allowed by IEEE.

Thu Oct 14 17:30:14 1999  Richard Henderson  <rth@cygnus.com>

	* sparc.md (*): Use {nonimmediate,register}_operand as appropriate
	instead of general_operand in a SET_DEST.  Use const_double_operand
	instead of an explicit test against CONST_DOUBLE.
	(movsf_const_lo): Add missing register mode.
	(goto_handler_and_restore): Add auxiliary test for Pmode.
	(flush): Adjust to use address_operand.
	(return_sf_no_fpu): Add missing output constraint.

Thu Oct 14 17:21:26 1999  Richard Henderson  <rth@cygnus.com>

	* rs6000.md (call_value_indirect_aix32): Use wildcard match_operand
	for call return value.
	(call_value_indirect_aix64, call_value_indirect_nt): Likewise.

Thu Oct 14 13:54:25 1999  Jason Merrill  <jason@yorick.cygnus.com>

	* toplev.c (main): Only warn about options for other languages.
	* collect2.c (main): Pass -w to sub-gcc.

Thu Oct 14 16:27:50 1999  Richard Henderson  <rth@cygnus.com>

	* flow.c (propagate_block): Add call-clobbered registers to
	significant too.

	* flow.c (propagate_block): Use free_EXPR_LIST_list instead of
	zapping mem_set_list.
	(invalidate_mems_from_autoinc): Use free_EXPR_LIST_node.
	(mark_set_1, mark_used_regs): Likewise.

Thu Oct 14 10:51:49 1999  Richard Henderson  <rth@cygnus.com>

	* m68k.md (zero_extendsidi2): Add missing output reload constraint.

Wed Oct 13 00:09:18 1999  Gerald Pfeifer  <pfeifer@dbai.tuwien.ac.at>

	* invoke.texi: Label -Wbad-function-cast, -Wmissing-prototypes,
	-Wnested-externs, -Wstrict-prototypes, and -Wtraditional as C only
	options. Also add a new item "C-only Warning Options" to the
	option summary.

1999-10-14  Gavin Romig-Koch  <gavin@cygnus.com>

	* libgcc2.c (__do_global_dtors): Protect __deregister_frame_info
	from multiple calls.

Thu Oct 14 04:54:54 1999  Richard Henderson  <rth@cygnus.com>

	* i386.md (call value patterns): Move to the end of the file.
	(prologue_set_got, prologue_get_pc): Use register_operand for op 0.

1999-10-14 Mark Elbrecht <snowball3@bigfoot.com>

	* configure.in (djgpp configuration): Define extra_objects..
	* configure: Rebuilt.
	* config/i386/djgpp.h (CTORS_SECTION_ASM_OP): Define.
	(DTORS_SECTION_ASM_OP): Define.
	(INIT_SECTION_ASM_OP): Define.
	(FINI_SECTION_ASM_OP): Define.
	(DATA_SECTION_ASM_OP): Define.
	(TEXT_SECTION_ASM_OP): Define.
	(EH_FRAME_SECTION_ASM_OP): Define.
	(LINK_COMMAND_SPEC): Remove -Tdjgpp.djl.
	(STARTFILE_SPEC): Add crtbegin.o.
	(ENDFILE_SPEC): Define and add crtend.o. Move argument -Tdjgpp.djl
	to here from LINK_COMMAND_SPEC.
	(DO_GLOBAL_CTORS_BODY): Define.
	(CRTSTUFF_USE_FINI_SECTION): Define
	(HAS_INIT_SECTION): Delete.

Thu Oct 14 05:08:14 1999  Andreas Schwab  <schwab@suse.de>

	* Makefile.in (all.cross): Depend on xcpp$(exeext).

Thu Oct 14 04:00:40 1999  Richard Henderson  <rth@cygnus.com>

	* pa.h (PREDICATE_CODES): New.

	* genrecog.c (validate_pattern): Condense the destination
	non-lvalue message.

Thu Oct 14 03:23:08 1999  Richard Henderson  <rth@cygnus.com>

	* alpha.md (call-1): Supply missing mode for operator.
	(*): Add missing output reload constraints.  Remove constraints
	from define_splits.

	* i386.h (SPECIAL_MODE_PREDICATES): New.
	* i386.md (movstricthi_1): Use nonimmediate_operand for op 0.
	(movqi_1, movdi_1, movdi_2, some splits): Likewise.
	(addsi_lea_3): Add missing mode for op 3.
	(prologue_set_got, prologue_get_pc): Add missing modes.
	(*) Add missing output reload constraints.

Thu Oct 14 03:59:57 1999  Stephane Carrez  <stcarrez@worldnet.fr>

	* stor-layout.c (layout_union): Use HOST_WIDE_INT for const_size;
	check for member bit-size overflow and use var_size if it occurs.
	(layout_record): Use bitsize_int() to define the type size in bits.
	Likewise for computation and assignment to DECL_FIELD_BITPOS.
	(layout_decl): Likewise when assigning to DECL_SIZE.

Thu Oct 14 02:57:05 1999  Richard Henderson  <rth@cygnus.com>

	* genrecog.c (validate_pattern): Typo last change.  Verify
	that output operands have output reloads.

Thu Oct 14 01:49:54 1999  Richard Henderson  <rth@cygnus.com>

	* genrecog.c (special_mode_pred_table): New.
	(NUM_SPECIAL_MODE_PREDS): New.
	(find_operand): New.
	(validate_pattern): New argument `insn'.  Warn for assignment to
	any predicate accepting non-lvalues.  Conditionally warn for
	match_operand without a mode.  Try much harder to match source
	and destination modes on a set.
	* tm.texi (SPECIAL_MODE_PREDICATES): Document.

Thu Oct 14 02:54:13 1999  Jeffrey A Law  (law@cygnus.com)

	* fold-const.c (fold): Detect rotates built from BIT_XOR_EXPRs.

Thu Oct 14 02:18:19 1999  Marc Espie <espie@cvs.openbsd.org>

	* combine.c (simplify_logical): Recognize xor pattern that encodes
	rotation.

Wed Oct 13 23:23:45 1999  Franz Sirl  <Franz.Sirl-kernel@lauterbach.com>

	* rs6000.c (expand_block_move): Use INTVAL, not XINT to access
	alignment.

Wed Oct 13 21:47:18 1999  Richard Henderson  <rth@cygnus.com>

	* ggc-page.c (MAP_FAILED): Provide default.

Wed Oct 13 21:41:59 1999  Richard Henderson  <rth@cygnus.com>

	* sparc.c (symbolic_operand): Verify mode; don't accept CONST_DOUBLE.
	* sparc.h (PREDICATE_CODES): Update.

Wed Oct 13 21:18:17 1999  Richard Henderson  <rth@cygnus.com>

	* alpha.c (some_ni_operand): New.
	* alpha-protos.h: Declare it.
	* alpha.h (PREDICATE_CODES): Update.
	* alpha.md (sXaddq reload insns): Use some_ni_operand
	for SET_DEST instead of some_operand.

Wed Oct 13 21:04:45 1999  Richard Henderson  <rth@cygnus.com>
			  Jim Wilson  <wilson@cygnus.com>

	* genrecog.c (maybe_both_true_2): Don't compare modes of
	two DT_pred tests.
	(process_tree): Elide peephole2_insns.  Invoke simplify_tests
	after find_afterward.
	(debug_decision_1): Dump next and afterward codes.

Wed Oct 13 20:35:16 1999  Richard Henderson  <rth@cygnus.com>

	* rtl.c (dump_and_abort): Remove.
	(fatal_with_file_and_line): New.
	(fatal_expected_char): New.
	(read_rtx_lineno, read_rtx_filename): New.
	(read_skip_spaces): Track line number.
	(read_name): Use fatal_with_file_and_line.
	(read_rtx): Use fatal_expected_char.  Track line number.
	* rtl.h (read_rtx_filename, read_rtx_lineno): Declare.

	* print-rtl.c (print_rtx): Don't special case LABEL_REF argument
	if it isn't a CODE_LABEL.

	* genattr.c (main): Set read_rtx_filename.
	* genattrtab.c (main): Likewise.
	* gencodes.c (main): Likewise.
	* genconfig.c (main): Likewise.
	* genemit.c (main): Likewise.
	* genextract.c (main): Likewise.
	* genflags.c (main): Likewise.
	* genopinit.c (main): Likewise.
	* genoutput.c (main): Likewise.
	* genpeep.c (main): Likewise.

	* genrecog.c (decision_test.u.insn): Add `lineno'.
	(pattern_lineno, error_count): New variables.
	(message_with_line): New.
	(add_to_sequence): Break out checking code to ...
	(validate_pattern): ... here.  Detect SET_DEST matching CONST_INT.
	(merge_insn): Use message_with_line.
	(make_insn_sequence): Use validate_pattern.  Record insn lineno.
	(main): Set read_rtx_filename, pattern_lineno.  Exit early on error.

Wed Oct 13 22:01:35 1999  J"orn Rennecke <amylaar@cygnus.co.uk>

	* expr.c (store_constructor): Clear union if constructor is empty.

Wed Oct 13 15:19:04 1999  Jim Wilson  <wilson@cygnus.com>

	* config/rs6000/sysv4.h (CC1_SPEC): Fix errors from Jan 19 change.
	Add !endian checks.  Change %{...} to %(...).

Wed Oct 13 13:30:34 1999  Richard Henderson  <rth@cygnus.com>

	* i386.md (*addsi3_cc): Renamed from addcsi3.
	(*addsi3_carry): Renamed from addxsi3.
	(*subsi3_cc): Renamed from subcsi3.
	(*subsi3_carry): Renamed from subxsi3.
	(*xorqi_cc_1): Renamed from xorcqi_1.
	(xorqi_cc_ext_1): Renamed from xorcqi_ext_1.
	* i386.c (ix86_expand_fp_compare): Update for xorqi_cc_ext_1.

Wed Oct 13 13:10:46 1999  Richard Henderson  <rth@cygnus.com>

	* Makefile.in (ggc-common.o): Depend on RTL_H not RTL_BASE_H.
	(ggc-simple.o, ggc-page.o, ggc-none.o, ggc-callbacks.o): Likewise.

1999-10-13  Brendan Kehoe  <brendan@cygnus.com>

	* regmove.c (optimize_reg_copy_3): Make sure P is non-nil as we
	climb up the chain of insns.

Wed Oct 13 10:20:58 1999  Richard Henderson  <rth@cygnus.com>

	* genrecog.c (write_subroutine): Careful for null trees.
	(process_tree): Don't elide empty functions.

Wed Oct 13 10:07:54 1999  Richard Henderson  <rth@cygnus.com>

	* Makefile.in (genrtl.o): Depend on ggc.h.
	* configure.in (valloc): Probe for it.
	(with-gc): Use ggc-page if valloc present.
	* ggc-common.c (ggc_mark_rtx_children): Use ggc_mark_if_gcable.
	(ggc_mark_rtvec_children): New from corpse of ggc_mark_rtvec.
	(ggc_alloc_string): Moved from ggc-page.c.
	* ggc-none.c (ggc_alloc_obj): New.
	(ggc_alloc_rtx, ggc_alloc_rtvec): Remove.
	* ggc-page.c (sys/mman.h): Only include if HAVE_MMAP.
	(struct globals): Likewise for dev_zero_fd.
	(init_ggc): Likewise for it's initialization.
	(ggc_allocated_p): Move careful dereference from ...
	(ggc_lookup_page_table): ... here.  Delete.
	(lookup_page_table_entry): Don't use ggc_lookup_page_table.
	(alloc_anon): Use valloc if no mmap.
	(release_pages): Use free if using valloc.
	(ggc_alloc_obj): Renamed from alloc_obj.
	(ggc_set_mark): Renamed from mark_obj.
	(ggc_mark_if_gcable): Renamed from ggc_mark_string_if_gcable.
	(ggc_alloc_rtx, ggc_alloc_rtvec): Delete.
	(ggc_alloc_tree, ggc_alloc_string, ggc_alloc): Delete.
	(ggc_set_mark_rtx, ggc_set_mark_rtvec): Delete.
	(ggc_set_mark_tree, ggc_mark_string, ggc_mark): Delete.
	(ggc_collect): Use fp printing instead of our own rounding.
	* ggc-simple.c (IS_MARKED, IGNORE_MARK): Delete.
	(GGC_STRING_MAGIC, GGC_STRING_MAGIC_MARK): Delete.
	(GGC_ANY_MAGIC, GGC_ANY_MAGIC_MARK): Delete.
	(struct ggc_rtx, struct ggc_rtvec, struct ggc_tree): Delete.
	(struct ggc_string, struct ggc_any): Delete.
	(offsetof): Provide default definition.
	(GGC_BALANCE, GGC_ALWAYS_COLLECT, GGC_ALWAYS_VERIFY): New.
	(PTR_KEY): New.
	(struct ggc_mem): New, from corpse of ggc_any.
	(struct ggc_status): Delete.
	(ggc_chain, ggc_allocated_strings, ggc_strings_used): Delete.
	(n_rtxs_collected, n_vecs_collected, n_trees_collected): Delete.
	(n_strings_collected, n_anys_collected): Delete.
	(ggc_alloc_rtx, ggc_alloc_rtvec, ggc_alloc_tree): Delete.
	(ggc_alloc_string, ggc_alloc): Delete.
	(ggc_free_rtx, ggc_free_rtvec, ggc_free_tree): Delete.
	(ggc_free_string, ggc_free_any): Delete.
	(ggc_set_mark_rtx, ggc_set_mark_rtvec, ggc_set_mark_tree): Delete.
	(ggc_compare_addresses, ggc_mark_string): Delete.
	(ggc_mark_string_if_gcable, ggc_mark): Delete.
	(search_data): Delete.
	(struct globals): New.
	(GGC_MIN_EXPAND_FOR_GC, GGC_MIN_LAST_ALLOCATED): New.
	(tree_insert, tree_lookup): New.
	(ggc_alloc_obj, ggc_set_mark, ggc_mark_if_gcable): New.
	(clear_marks, sweep_objs): New.
	(ggc_collect): Gut.  Use clear_marks, sweep_objs.
	(init_ggc): Set allocated_last_gc.
	(ggc_push_context): Gut.  Use G.context.
	(ggc_pop_context): Likewise.
	(ggc_pop_context_1): New.
	(debug_ggc_tree): New.
	(debug_ggc_balance, tally_leaves): New.
	* ggc.h (ggc_mark_rtvec, ggc_mark_string, ggc_mark): Remove decl.
	(ggc_mark_string_if_gcable): Remove decl.
	(ggc_mark_rtx, ggc_mark_tree): Use ggc_set_mark.
	(ggc_mark_rtvec_children): New.
	(ggc_mark_rtvec, ggc_mark_string, ggc_mark): New.
	(ggc_mark_if_gcable): New decl.
	(ggc_alloc_rtx, ggc_alloc_rtvec): Remove decl.
	(ggc_alloc_tree, ggc_alloc): Likewise.
	(ggc_set_mark_rtx, ggc_set_mark_rtvec, ggc_set_mark_tree): Likewise.
	(ggc_alloc_obj): New decl.
	(ggc_alloc_rtx, ggc_alloc_rtvec): New macros.
	(ggc_alloc_tree, ggc_alloc): Likewise.
	(ggc_set_mark): New decl.
	* rtl.h (struct rtx_def): Remove gc_mark.
	(struct rtvec_def): Likewise.
	* tree.h (struct tree_common): Likewise.

Wed Oct 13 01:44:29 1999  Carol LePage  <carolo@hal.com>

	* configure.in (sparc-hal-solaris2*): Fix xm_file, xm_defines,
	float_format and thread_file definitions.
	* configure: Rebuilt.

Wed Oct 13 09:25:03 1999  Niels Möller <nisse@lysator.liu.se>

	* extend.texi (Function Names): Document types of function names.

Wed Oct 13 00:45:04 1999  Bernd Schmidt  <bernds@cygnus.co.uk>

	* reload1.c (reload_reg_free_for_value_p):  RELOAD_OTHER reloads with
	an earlyclobbered output conflict with RELOAD_INPUT reloads.

Tue Oct 12 23:28:28 1999  J"orn Rennecke <amylaar@cygnus.co.uk>

	* sh.h (BOOL_TYPE_SIZE): Don't use INT_TYPE_SIZE / CHAR_TYPE_SIZE.

Tue Oct 12 23:19:32 1999  J"orn Rennecke <amylaar@cygnus.co.uk>

	* sh.h (REGISTER_MOVE_COST): Change PR_REG to PR_REGS.

Tue Oct 12 17:09:38 1999  David Edelsohn  <edelsohn@gnu.org>

	* collect2.c (main): Do prelimnary link on AIX if rflag.

Tue Oct 12 09:45:19 1999  Jonathan Larmour  <jlarmour@cygnus.co.uk>

	* config/rs6000/eabi-ctors.c (__do_global_ctors): Run through
	__CTOR_LIST__ in opposite order, which is the correct order for sorted
	constructors.
	(__do_global_dtors): similarly for __DTOR_LIST__.

Fri Oct  8 19:46:03 1999  J"orn Rennecke <amylaar@cygnus.co.uk>
				Diego Novillo <dnovillo@cygnus.com>

	* config/sh/sh.h (REGISTER_MOVE_COST): Handle moves from T_REGS to
	FPUL_REGS.

Tue Oct 12 07:38:41 1999  Bruce Korb  <autogen@linuxbox.com>

	* fixincl/*: Merged "no_bogosity" branch
	* fixincl/fixlib.h: protect against doubly defining t_bool
	* fixincl/server.h: protect against doubly defining t_bool

Mon Oct 11 20:18:41 1999  Jim Wilson  <wilson@cygnus.com>

	* genoutput.c: Include toplev.h.

Mon Oct 11 18:56:14 1999  Jim Wilson  <wilson@cygnus.com>

	* config/sparc/liteelf.h (INIT_SECTION_ASM_OP, FINI_SECTION_ASM_OP):
	Undef.
	* configure.in (sparclite-*-elf, sparc86x-*-elf): Don't use libgloss.h.
	* configure: Regenerate.

Mon Oct 11 16:07:49 1999  Richard Henderson  <rth@cygnus.com>

	* gcse.c (delete_null_pointer_checks): Returns void.

Mon Oct 11 20:31:51 1999  Bernd Schmidt  <bernds@cygnus.co.uk>

	* rtl.c (copy_rtx): Don't use accessor macros to copy fields.
	* emit-rtl.c (copy_insn_1): Likewise.

Mon Oct 11 13:29:06 1999  Geoffrey Keating  <geoffk@cygnus.com>

	* config/mips/mips.c (mips_build_va_list): Correct
	TREE_CHAIN setting when hard-float.
	(mips_va_start): Use corrected setting.
	(mips_va_arg): Likewise.  Also pass a tree to build of
	POSTINCREMENT_EXPR rather than a naked 'int'.

Sun Oct 10 18:27:27 1999  Mark Mitchell  <mark@codesourcery.com>

	* ggc.h (ggc_push_context): Fix comment.
	(ggc_pop_context): Likewise.
	(mark_string_if_gcable): Likewise.
	* ggc-common.c (ggc_mark_rtx_children): Use
	ggc_mark_string_if_gcable.
	* ggc-page.c (ggc_lookup_page_table): New function.
	(ggc_allocated_p): Likewise.
	(mark_obj): Fix formatting.
	(ggc_mark_string_if_gcable): New function.
	* ggc-simple.c (ggc_allocated_strings): New variable.
	(ggc_strings_used): Likewise.
	(ggc_compare_addresses): New function.
	(ggc_pop_context): Pop the `any' memory too.
	(ggc_mark_string_if_gcable): New function.
	(ggc_collect): Initialize and tear down ggc_allocated_strings.

Sun Oct 10 20:05:21 1999  David Edelsohn  <edelsohn@gnu.org>

	* rs6000.md (movstrsi_?reg): Use preferred rD/rS = r5 form.
	(scc patterns): Disable most SImode variants if TARGET_POWERPC64.
	* rs6000.c (expand_block_move): Match movstrsi_?reg register
	changes.

Sun Oct 10 16:37:01 1999  Richard Henderson  <rth@cygnus.com>

	* haifa-sched.c (sched_reg_n_calls_crossed): Delete.
	(sched_reg_live_length, sched_reg_basic_block): Delete.
	(current_block_num, bb_live_regs, old_live_regs): Delete.
	(dead_notes, struct sometimes): Delete.
	(sched_note_set, birthing_insn_p): Delete.
	(adjust_priority): Gut useless reg lifetime code.
	(create_reg_dead_note, attach_deaths): Delete.
	(attach_deaths_insn, new_sometimes_live): Delete.
	(finish_sometimes_live): Delete.
	(find_pre_sched_live, find_post_sched_live): Delete.
	(update_reg_usage): Delete.
	(find_insn_reg_weight): New, from corpse of find_pre_sched_live.
	(schedule_insns): Delete reg lifetime code.
	(sched_analyze): Use REG_SAVE_NOTE to stuff NOTE_INSN notes away.
	(unlink_other_notes): Adjust REG_NOTE commentary.
	(reemit_notes): Use REG_SAVE_NOTE.
	(schedule_block): Likewise.
	(schedule_region): Allocate bitmap of blocks in region.  Use
	count_or_remove_death_notes.  Use update_life_info.

	* rtl.h (REG_SAVE_NOTE): New.
	* rtl.c (reg_note_name): Update.

Sun Oct 10 16:14:16 1999  Richard Henderson  <rth@cygnus.com>

	* combine.c (refresh_blocks, need_refresh): New.
	(combine_instructions): Allocate refresh_blocks.  Invoke
	update_life_info if needed.
	(distribute_notes): Mark refresh_blocks instead of installing
	USE insns.
	* flow.c (update_life_info): Remove notes if GLOBAL_RM_NOTES.
	* basic_block.h (enum update_life_extent): Add GLOBAL_RM_NOTES.

	* Makefile.in (recog.o): Depend on basic-block.h.

Sun Oct 10 12:03:21 1999  Richard Henderson  <rth@cygnus.com>

	* genrecog.c (add_to_sequence): Thinko last change: delete
	shadowing allow_const_int variable.

Sun Oct 10 08:40:00 1999  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* cppinit.c: Use HAVE_GCC_VERSION instead of explicitly testing
	__GNUC__ and __GNUC_MINOR__.

	* gansidecl.h: Likewise.

	* rtl.c: Likewise.

	* rtl.h: Likewise.

	* toplev.h: Likewise.

	* tree.c: Likewise.

	* tree.h: Likewise.

	* varray.c: Likewise.

	* varray.h: Likewise.

Sun Oct 10 13:28:48 1999  Bernd Schmidt  <bernds@cygnus.co.uk>

	* loop.c (find_and_verify_loops): When looking for a BARRIER, don't
	use one before a jump table.

	* rtl.def (ADDRESS): Change documentation to match reality.
	* md.texi: Don't document it.
	* gmicro.md (load address pattern): Use 'p' constraint, delete use
	of ADDRESS rtx.

	* emit-rtl.c (copy_insn_1): Make format_ptr a const char *.

Sun Oct 10 02:41:41 1999  Richard Henderson  <rth@cygnus.com>

	* genrecog.c (add_to_sequence): Move allow_const_int test outside
	known predicate block; default allow_const_int true.
	(debug_decision_list): New.

Sun Oct 10 00:43:08 1999  Richard Henderson  <rth@cygnus.com>

	* i386.h (CC1_SPEC): Typo -- use cc1_cpu.

Sat Oct  9 23:26:55 1999  Jeffrey A Law  (law@cygnus.com)

	* gcse.c (gcse_main): Avoid global optimizations if we have a
	large number of basic blocks and the ratio of edges to blocks
	is high.
	(delete_null_pointer_checks): Likewise.

Sat Oct  9 23:16:01 1999  Ken Raeburn  <raeburn@mit.edu>

	* c-common.c (check_format_info): Warn if format string isn't a
	string literal.

Sat Oct  9 23:04:02 1999  Jonathan Larmour  <jlarmour@cygnus.co.uk>

	* configure.in (arm*-*-*): Don't let autoconf remove brackets
	* configure: regenerate

Sat Oct  9 13:15:53 1999  Richard Henderson  <rth@cygnus.com>

	* alpha.md (extendsidi2): Turn into a splitter.  Allow f/f.
	If TARGET_FIX, allow r/f.  Remove cvtlq unspec pattern.
	(peepholes): Re-enable.

Sat Oct  9 12:18:16 1999  Richard Henderson  <rth@cygnus.com>

	* Makefile.in (flow.o): Depend on TREE_H.
	* basic-block.h (REG_SET_EQUAL_P): New.
	(XOR_REG_SET): New.
	(n_edges): Declare.
	(free_regset_vector): Remove declaration.
	(flow_delete_insn_chain): Declare.
	(enum update_life_extent): New.
	(update_life_info, count_or_remove_death_notes): Declare.
	* combine.c (distribute_notes) [REG_DEAD]: Stop search at bb->head.
	Verify register live at bb->global_live_at_start before adding USE.
	* flow.c (HAVE_epilogue, HAVE_prologue): Provide default.
	(CLEAN_ALLOCA): New.
	(n_edges): New.
	(PROP_*): New flags.
	(find_basic_blocks_1): Use alloc_EXPR_LIST.
	(clear_edges): Zero n_edges.
	(make_edge): Increment n_edges.
	(split_edge): Don't allocate bb->local_set.  Increment n_edges.
	(flow_delete_insn_chain): Export.
	(delete_block): Decrement n_edges.
	(merge_blocks_nomove): Likewise.
	(life_analysis): Give life_analysis_1 PROP flags.
	(verify_wide_reg_1, verify_wide_reg): New.
	(verify_local_live_at_start): New.
	(update_life_info): Rewrite to call into propagate_block.
	(mark_reg): New.
	(mark_regs_live_at_end): After reload, if epilogue as rtl,
	always mark stack pointer.  Conditionally mark PIC register.
	After reload, mark call-saved registers, return regsiters.
	(life_analysis_1): Accept PROP flags not remove_dead_code.
	Call mark_regs_live_at_end before zeroing regs_ever_live.
	Use calculate_global_regs_live.  Copy global_live_at_end before
	calling final propagate_block.  Zero reg_next_use on exit.
	(calculate_global_regs_live): New.
	(allocate_bb_life_data): Don't allocate bb->local_set.
	(init_regset_vector, free_regset_vector): Remove.
	(propagate_block): Accept FLAGS not FINAL or REMOVE_DEAD_CODE.
	Test flags before every operation.  Warn if prologue/epilogue insn
	would have been deleted.
	(mark_set_regs, mark_set_1): Accept and use FLAGS.
	Use alloc_EXPR_LIST.
	(mark_used_regs): Accept and use FLAGS, not FINAL.
	Remove special handling for RETURN.
	(try_pre_increment): Use alloc_EXPR_LIST.
	(dump_flow_info): Dump n_edges.
	(unlink_insn_chain, split_hard_reg_notes): Remove.
	(maybe_add_dead_note, maybe_add_dead_note_use): Remove.
	(find_insn_with_note, new_insn_dead_notes): Remove.
	(update_n_sets, sets_reg_or_subreg_1, sets_reg_or_subreg): Remove.
	(maybe_remove_dead_notes, prepend_reg_notes): Remove.
	(replace_insns): Remove.
	(count_or_remove_death_notes): New.
	(verify_flow_info): Abort on error after all checks.
	(remove_edge): Decrement n_edges.
	(remove_fake_edges): Tweak format.
	* haifa-sched.c (schedule_insns): Use split_all_insns.
	* output.h (update_life_info): Remove declaration.
	* recog.c (split_all_insns): From the corpse of split_block_insns,
	do the whole function block by block.  Use update_life_info.
	(recog_last_allowed_insn): New.
	(recog_next_insn): Mind it.
	(peephole2_optimize): Set it.  Walk backwards through blocks.
	Use update_life_info.
	* rtl.h (update_flow_info, replace_insns): Remove declarations.
	(split_all_insns): Declare.
	* toplev.c (rest_of_compilation): Thread prologue before flow2.
	Use split_all_insns.

	* i386.md (or -1 peep2s): Disable.

Fri Oct  8 17:49:08 1999  Richard Henderson  <rth@cygnus.com>

	* config/mips/mips.md (movstrsi+[123]) : Combine these into
	a single pattern.  Scrap the 'd' versions as unnecessary.

	* config/mips/mips.md (tablejump_internal3,tablejump_mips161,
	tablejump_mips162,tablejump_internal4): The operands to a
	label_ref must be VOIDmode.

Fri Oct  8 16:12:42 1999  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* configure.in (c-mbchar): Append, don't overwrite, `extra_c_flags'.

Fri Oct  8 11:58:34 1999  Richard Henderson  <rth@cygnus.com>

	* mips.c (mips_va_arg) [EABI]: Return addr_rtx.

Fri Oct  8 11:58:34 1999  Richard Henderson  <rth@cygnus.com>

	* lists.c (init_EXPR_INSN_LIST_cache): Don't need to zap the
	cache every function if ggc_p.

Fri Oct  8 18:46:11 1999  Bernd Schmidt  <bernds@cygnus.co.uk>

	* jump.c (duplicate_loop_exit_test): Use copy_insn/copy_insn_1
	instead of copy_rtx.  Accept sequences that contain asm statements.
	* emit-rtl.c (copy_insn_1, copy_insn): New functions.
	(copy_insn_scratch_in, copy_insn_scratch_out, copy_insn_n_scratches,
	orig_asm_operands_vector, copy_asm_operands_vector,
	orig_asm_constraints_vecotr, copy_asm_constraints_vector): New static
	variables.
	* rtl.h (copy_insn, copy_insn_1): Declare.

Fri Oct  8 13:08:12 1999  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* Makefile.in (insn-recog.o): Depend on hard-reg-set.h and resource.h.

	* alpha.h (ASM_OUTPUT_MI_THUNK): Pass the correct number of
	arguments to `current_file_function_operand'.

	* genrecog.c: Include hard-reg-set.h and resource.h in the
	generated output file.

	* real.c: Include tm_p.h.

Fri Oct  8 18:46:11 1999  Bernd Schmidt  <bernds@cygnus.co.uk>

	* i386.md (prologue_allocate_stack): Add '=' constraint letter on
	output operand.

Thu Oct  7 23:06:50 1999  Richard Henderson  <rth@cygnus.com>

	* rs6000.md (fix_truncdfsi2_internal+1): Emit a clobber
	before the fctiwz insn.

Thu Oct  7 22:53:00 1999  Franz Sirl  <Franz.Sirl-kernel@lauterbach.com>
			  Mark Mitchell  <mark@codesourcery.com>

	* tree.c (make_lang_type_fn): New function pointer.
	(make_lang_type): Call it.
	* tree.h (make_lang_type): Declare.
	(make_lang_type_fn): Likewise.
	* rs6000.c (rs6000_build_va_list): Use make_lang_type.

Thu Oct  7 00:36:17 1999  Diego Novillo  <dnovillo@cygnus.com>

	* config/rs6000/rs6000.c (secondary_reload_class): For TARGET_ELF
	make sure that HIGH instructions are copied into BASE_REGS.

Thu Oct  7 17:02:34 1999  Jason Merrill  <jason@yorick.cygnus.com>

	* expr.c (expand_expr, TARGET_EXPR): Set TREE_USED sooner.

Thu Oct  7 17:01:58 1999  Greg McGary  <gkm@gnu.org>

	* c-decl.c (finish_struct): Use simpler method of
	removing elements of a singly-linked list.

Thu Oct  7 15:23:28 1999  Michael Meissner  <meissner@cygnus.com>

	* alpha.md (peephole2's): Comment out peephole2's that generate
	buggy code.

Thu Oct  7 12:00:53 1999  Richard Henderson  <rth@cygnus.com>

	* genrecog.c (add_to_sequence): Disable mode check for
	wildcard matches.

Thu Oct  7 20:14:16 1999  Bernd Schmidt  <bernds@cygnus.co.uk>

	* ggc-simple.c (init_ggc): Set empty_string.

Thu Oct  7 01:13:15 1999  Richard Henderson  <rth@cygnus.com>

	* configure.in: Detect mmap.  Add --with-gc=foo to select
	garbage collector; default to page if mmap available.
	* Makefile.in (GGC): Substitute.

Wed Oct  6 23:56:30 1999  Richard Henderson  <rth@cygnus.com>

	* c-decl.c (ggc_p): Enable.

Wed Oct  6 17:17:08 1999  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* flow.c (verify_flow_info): Make it extern & unconditionally define.

1999-10-06  Brendan Kehoe  <brendan@cygnus.com>

	* sparc/sp86x-elf.h (SUBTARGET_SWITCHES): Add missing doc
	string for little-endian-data.

Wed Oct  6 16:10:35 1999  Michael Meissner  <meissner@cygnus.com>

	* varray.h (VARRAY_CHECK): Fix up appropriate revision check, in
	case somebody tries to compile --enable-checking code with gcc
	1.34 or such.

Wed Oct  6 12:22:50 1999  Richard Henderson  <rth@cygnus.com>

	* genrecog.c (add_to_sequence): Verify operand to label_ref is
	VOIDmode.

Wed Oct  6 10:21:15 1999  Richard Henderson  <rth@cygnus.com>

	* genconfig.c (main): Disable HAVE_conditional_arithmetic.
	* jump.c (jump_optimize_1): Document why.

Wed Oct  6 10:41:56 1999  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* collect2.c (scan_prog_file, scan_libraries): Prototype function
	pointers and casts for `int_handler' and `quit_handler'.

	* flow.c (verify_flow_info, split_hard_reg_notes,
	find_insn_with_note, sets_reg_or_subreg_1, prepend_reg_notes,
	remove_edge, remove_fake_successors): Add static prototypes.
	(verify_flow_info): Wrap with macro ENABLE_CHECKING.
	(mark_set_1): Initialize variable `regno'.
	(unlink_insn_chain): Likewise for variable `curr'.
	(remove_fake_edges): Remove unused variables `e', `tmp' and `last'.

	* loop.c (strength_reduce): Initialize variable
	`unrolled_insn_copies'.
	(cmp_combine_givs_stats, cmp_recombine_givs_stats): Add static
	prototypes.  Change these functions to take const PTR parameters
	to avoid prototype conflict when used as the comparson argument
	for qsort.
	(check_dbra_loop): Initialize variable `comparison_val'.

	* reload.c (debug_reload_to_stream, debug_reload): Add prototypes.
	(get_secondary_mem): Mark parameter `x' with ATTRIBUTE_UNUSED.
	(find_valid_class): Initialize variable `best_class'.
	(find_reloads): Call memcpy, not bcopy.

	* reload1.c (gen_mode_int, dump_needs): Add prototypes.
	(hard_reg_use_compare): Don't needlessly cast away const.
	(reload_reg_class_lower): Likewise.
	(choose_reload_regs): Initialize variable `regno'.

Tue Oct  5 16:34:12 1999  Paul Burchard <burchard@pobox.com>

	* ggc-page.c (GGC_ALWAYS_COLLECT): Fix typo when undef'ing.

Tue Oct  5 16:14:40 1999  Michael Meissner  <meissner@cygnus.com>

	* libgcc1-test.c (toplevel): Include stddef.h to get size_t.
	({,d}discard): Add forward declarations.  Declare parameter as
	unused.
	(main_without_main): Explicitly declare return type to be int.
	(memcpy): Properly declare.

	* libgcc2.c (toplevel): If inhibit_libc is defined and not
	building the trampoline support, declare malloc, free, and
	atexit.
	(__clear_cache): Mark arguments as potentially unused.

	* frame.c (toplevel): If inhibit_libc is defined, declare
	malloc and free.

Tue Oct  5 12:00:32 1999  Richard Henderson  <rth@cygnus.com>

	* flow.c (make_edge): Accept an optional 2D bitmap in which
	to cache edge existence.  Update all callers.
	(make_label_edge, make_eh_edge): Pass through the edge cache.
	(make_edges): Provide the cache.

Tue Oct  5 12:16:49 1999  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* mbchar.c (literal_codeset, local_mbtowc, local_mblen): Constify
	a char*.
	(local_mbtowc): Change the type of variable `i' from int to size_t.

	* mbchar.h (ISSJIS1, ISSJIS2): Use parens around && within ||.
	(local_mbtowc, local_mblen, literal_codeset): Constify a char*.

Tue Oct  5 11:34:52 1999  Michael Meissner  <meissner@cygnus.com>

	* ggc-common.c (toplevel): Reorder includes, so that ggc.h comes
	after other includes that define the appropriate types.  Include
	tm_p.h for getting user prototypes.
	* ggc-callbacks.c (toplevel): Ditto.
	* ggc-none.c (toplevel): Ditto.
	* gcc-page.c (toplevel): Ditto.
	* ggc-simple.c (toplevel): Ditto.

Mon Oct  4 16:48:16 1999  Diego Novillo <dnovillo@cygnus.com>
			  Jonathan Larmour  <jlarmour@cygnus.co.uk>

	* config/mips/mips.c (mips_move_2words): Split doubles if
	ISA >= 3, !TARGET_64BIT, and destination is not an FP register.

Mon Oct  4 21:47:31 1999  Richard Henderson  <rth@cygnus.com>

	* genrecog.c (struct decision_test): New.
	(struct decision): Remove test-related members, sort the rest by size.
	(IS_SPLIT): Simplify.
	(new_decision, new_decision_test): New.
	(add_to_sequence): Use them.  No special handling for args of
	non-MATCH codes.
	(maybe_both_true): Renamed from not_both_true; return sense changed.
	(maybe_both_true_1, maybe_both_true_2): New.  Broken out
	of maybe_both_true and adjusted for decision_test.
	(position_merit): Remove.
	(nodes_identical, nodes_identical_1): New, broken out of merge_trees.
	(merge_accept_insn): New, broken out of merge_trees.
	(merge_trees): Use them.  No special case for c_test; no node
	splitting; use test type instead of position_merit.
	(factor_tests): New.
	(simplify_tests): New.
	(break_out_subroutines): Don't write code now.
	(find_afterward): New.
	(write_afterward, write_switch, write_cond): New.
	(write_action, is_unconditional): New.
	(write_node): New.  Use them.
	(write_tree_1): Rewrite.  Use the new functions above.
	(write_tree): Remove afterward processing.
	(write_subroutine): Simplify function variant emission.
	(write_subroutines): New.
	(same_codes, clear_codes): Remove.
	(same_modes, clear_modes): Remove.
	(write_header): New, broken out of main.
	(make_insn_sequence): Use new_decision and new_decision_test.
	(process_tree): New, broken out of main.
	(main): Adjust for merge_trees interface change.
	Don't #define operands in the output file.
	(record_insn_name): New, broken out of make_insn_sequence.
	(debug_decision_2, debug_decision_1, debug_decision_0): New.
	(debug_decision): New.

1999-10-04 21:58 -0700  Zack Weinberg  <zack@bitmover.com>

	* resource.c (find_free_register): Mark class_str argument const.
	* resource.h: Update prototype to match.

	* i386.h (PREDICATE_CODES): Add entry for long_memory_operand.
	* i386.md: Give all anonymous insns names.

Mon Oct  4 21:12:02 1999  Jeffrey A Law  (law@cygnus.com)

	* flow.c (merge_blocks): Avoid assing BASIC_BLOCK for non-existent
	blocks.

Mon Oct  4 21:01:39 1999  Richard Henderson  <rth@cygnus.com>

	* toplev.c (dbr_sched_time): Unconditional.
	(peephole2_time): New.
	(compile_file): Add pass numbers to all of the dump file suffixes.
	Dump peephole2_time.  Don't dump times for non-applicable passes.
	(rest_of_compilation): Add pass numbers to dump file suffixes.
	Conditionalize calls to the scheduler.
	* invoke.texi: Update.

Mon Oct  4 20:25:13 1999  Anthony Green  <green@cygnus.com>

	* flow.c (make_edges): Fix insn iteration.
	(find_basic_blocks): Assign NULL_RTX, not 0, to rtx.
	(find_basic_blocks_1): Fix spelling mistake.

Mon Oct  4 16:56:11 1999  Richard Henderson  <rth@cygnus.com>

	* tree.c (build1): Set TREE_SIDE_EFFECTS for expressions that
	always have side-effects.  Use memset not bzero.
	(make_node): Likewise.

Mon Oct  4 16:22:20 1999  Mark Mitchell  <mark@codesourcery.com>

	* stmt.c (expand_anon_union_decl): When any of the elements of the
	union is addressable, so is the entire union.

Mon Oct  4 11:38:33 1999  Richard Henderson  <rth@cygnus.com>

	* sbitmap.c (sbitmap_ones): Don't set too many bits.

	* bitmap.h (enum bitmap_bits): Add BITMAP_XOR.
	* bitmap.c (bitmap_operation): Return true iff TO changed.
	(bitmap_equal_p): New.
	(bitmap_bit_p): Tidy arithmetic.
	(debug_bitmap_file): Likewise.

Mon Oct  4 11:28:37 1999  Richard Henderson  <rth@cygnus.com>

	* toplev.c (rest_of_compilation): Turn on cse_not_expected
	before cse2 instead of after.

Mon Oct 4 09:55:17 1999  Stan Cox  <scox@cygnus.com>

	* mips.h (GO_IF_LEGITIMATE_ADDRESS): Let leasi/liadi handle large
	register offsets.

Mon Oct  4 08:54:12 1999  Alexandre Oliva  <oliva@lsd.ic.unicamp.br>

	* cppinit.c (is_idchar initializer): Loosen tests to accept
	gcc 2.>6 and >2.

Mon Oct  4 02:31:20 1999  Mark Mitchell  <mark@codesourcery.com>

	* mips.md: Define conditional move patterns for floating point
	operands and DI mode conditions.

Mon Oct  4 02:12:41 1999  Mark Mitchell  <mark@codesourcery.com>

	* tree.c (make_node): Set TREE_SIDE_EFFECTS for expressions that
	always have side-effects.

Sun Oct  3 14:14:16 1999  Jeffrey A Law  (law@cygnus.com)

	* mn10200.c (asm_file_start): Fix typo.

	* cppinit.c (is_idchar initializer): Tighten tests for when
	to put the table into initialized memory.

	* ggc-none.c (ggc_alloc_rtvec): An rtvec is an array of rtx,
	not an array of rtunion.
	* gcc-page.c (ggc_alloc_rtvec): Similarly.
	* gcc-simple (ggc_free_rtvec): Similarly.

	* genattrtab.c (simplify_cond): Make TESTS an array of rtxs, instead
	of rtunions.

	* mbchar.h: Add missing #endif.

	* t-fr30 (LIB2FUNCS_EXTRA): Remove definition.
	(FPBIT, DPBIT): Define.

Sun Oct  3 12:44:05 1999  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* print-tree.c (print_node, indent_to): Remove redundant prototypes.

	* profile.c (instrument_arcs, output_gcov_string,
	tablejump_entry_p): Add static prototypes.
	(output_gcov_string): Constify a char*.

	* regmove.c (replacement_quality, fixup_match_2): Add static
	prototypes.

	* resource.h (reg_dead_p): Add extern prototype.

	* rtl.c (trim_filename): Add static prototype.

	* scan-decls.c (skip_to_closing_brace): Likewise.

	* stmt.c (expand_decl_cleanup_no_eh): Hide definition.
	(expand_end_case): Initialize variable `range'.
	(emit_case_nodes): Remove unused prototype `rtx_fn'.

	* varasm.c (asm_emit_uninitialised): Add static prototype.
	(asm_emit_uninitialised, assemble_variable): Mark parameter with
	ATTRIBUTE_UNUSED.

Sun Oct  3 12:24:52 1999  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* cpplib.c (if_directive_nameo): Add static prototype.

	* cse.c (cse_insn): Remove unused variable `p'.

	* except.c (create_rethrow_ref, push_entry,
	receive_exception_label, new_eh_region_entry, find_func_region,
	clear_function_eh_region, process_nestinfo): Add static prototypes.
	(get_reg_for_handler): Hide definition.
	(process_nestinfo): Initialize variable `extra_handlers'.

	* expr.h (expand_builtin_longjmp): Add extern prototype.

	* final.c (final_addr_vec_align, align_fuzz): Add static prototypes.

	* function.c (prepare_function_start): Likewise.
	(pop_function_context_from): Mark parameter `context' with
	ATTRIBUTE_UNUSED.
	(push_temp_slots_for_block, flush_addressof): Hide definition.

	* gcov.c (init_arc, reverse_arcs, create_program_flow_graph,
	solve_program_flow_graph, calculate_branch_probs,
	function_summary, main, fancy_abort): Add prototypes.

	* gen-protos.c (add_hash, parse_fn_proto, main): Likewise.
	(add_hash): Constify a char*.

	* ggc-common.c (ggc_mark_rtx_ptr, ggc_mark_tree_ptr,
	ggc_mark_tree_varray_ptr, ggc_mark_tree_hash_table_ptr,
	ggc_mark_string_ptr, ggc_mark_tree_hash_table_entry): Add prototypes.

	* integrate.c (expand_inline_function_eh_labelmap): Likewise.

	* lists.c (free_list, zap_lists): Likewise.

Sun Oct  3 12:05:28 1999  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* alias.c (nonlocal_reference_p): Add static prototype.

	* bitmap.c (bitmap_element_allocate): Prototype args in function
	pointer cast.

	* builtins.c (stabilize_va_list): Add static prototype.
	(expand_builtin_va_arg): Constify a char*.

	* c-lex.c (getch, put_back, extend_token_buffer_to,
	read_line_number, token_getch, token_put_back): Add static
	prototypes.

	* c-parse.gperf (hash, is_reserved_word): Likewise.

	* cccp.c (is_dir_separator): Likewise.

Sat Oct  2 16:07:56 1999  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* graph.h: New file to prototype functions exported by graph.c.

	* Makefile.in (graph.o, toplev.o): Depend on graph.h.

	* graph.c: Include graph.h.

	* toplev.c: Likewise.  Remove redundant prototypes.

Sat Oct  2 11:28:33 1999  Krister Walfridsson <cato@df.lth.se>

	* invoke.texi: Removed duplicated description for -Q.

Sat Oct  2 11:16:00 1999  Jim Kingdon  <http://developer.redhat.com>

	* extend.texi: Grammar fix in __extension__ text.

Sat Oct  2 11:06:31 1999  Richard Henderson  <rth@cygnus.com>

	* md.texi (define_peephole2): New section.

Sat Oct  2 10:57:56 1999  Jan Hubicka  <hubicka@freesoft.cz>

	* i386.md (mov?i patterns): Fix handling of TARGET_USE_MOV0
	(mov $-1 to or peepholer): Enable for pentium when optimizing for
	speed.

Sat Oct  2 10:55:25 1999  Jan Hubicka  <hubicka@freesoft.cz>

	* builtins.c (expand_builtin_strlen): Fix best mode searching loop.

Sat Oct  2 10:53:22 1999  Jan Hubicka  <hubicka@freesoft.cz>

	* i386.md (ffs expander): Emit Pentium friendly code for
	TARGET_PENTIUM.

Sat Oct  2 02:48:21 1999  Mark P. Mitchell  <mark@codesourcery.com>

	* tree.c (build): Don't look at TREE_SIDE_EFFECTS or TREE_RAISES
	for non-trees.
	(build1): Likewise.

Fri Oct  1 18:01:11 1999  Bernd Schmidt  <bernds@cygnus.co.uk>

	* i386elf.h (TARGET_DEFAULT): Use symbolic constants.

Fri Oct  1 12:42:53 1999  Andreas Schwab  <schwab@suse.de>

	* config/m68k/m68k.c (use_return_insn): Return false if the pic
	register is in use.

Fri Oct  1 10:56:06 1999  Bernd Schmidt  <bernds@cygnus.co.uk>

	* md.texi (No Constraints): Delete section.
	* Makefile.in (genattrtab.o): Don't depend on "insn-config.h".
	* final.c (final_scan_insn): We always have register constraints.
	* genattrtab.c: Don't include "insn-config.h".
	(write_attr_case): We always have register constraints.
	* genconfig.c (register_constraint_flag): Delete.
	(walk_insn_part): Don't check whether we have register constraints.
	(main): Don't write out "#define REGISTER_CONSTRAINTS".
	* genoutput.c (have_constraints): Delete.
	(main): Don't set it.
	(output_operand_data): We always have constraints.
	(scan_operands): Likewise.
	(compare_operands): Likewise.
	* local-alloc.c (block_alloc): We always have constraints.
	(requires_inout): Always compile this function.
	* recog.c (extract_insn): We always have constraints.
	(constrain_operands, reg_fits_class_p): Always compile these
	functions.
	* recog.h (struct recog_data): Delete non-REGISTER_CONSTRAINTS
	fields.
	(struct insn_operand_data): Likewise.
	* regclass.c (regclass): We always have constraints.
	(record_reg_classes, copy_cost, record_address_regs,
	auto_inc_dec_reg_p): Always compile these functions.
	* regmove.c (regmove_optimize): We always have constraints.
	* reload.c (find_reloads): Likewise.
	* reload1.c (reload): Likewise.
	(reload_cse_simplify_operands): Likewise.
	* i860.c (output_delay_insn): Likewise.

Thu Sep 30 23:04:41 1999  Mark P. Mitchell  <mark@codesourcery.com>

	* iris6.h (BUILD_VA_LIST_TYPE): Define.

Thu Sep 30 18:44:50 1999  Franz Sirl  <Franz.Sirl-kernel@lauterbach.com>

	* rs6000.c (rs6000_build_va_list): Create a TYPE_DECL node
	for the va_list record.

Thu Sep 30 18:34:54 1999  Jan Hubicka  <hubicka@freesoft.cz>

	* i386.c (ix86_adjust_cost): Ignore false ebp dependencies in
	prologues.

Thu Sep 30 18:31:36 1999  Jan Hubicka  <hubicka@freesoft.cz>

	* alias.c: Include insn-flags.h.
	* Makefile.in (alias.o): Update.

Thu Sep 30 18:21:30 1999  Jan Hubicka  <hubicka@freesoft.cz>

	* i386.c (ix86_expand_int_movcc): Convert LEU and GTU comparisons
	to LTU and GEU.  Handle more cases using sbb.

Thu Sep 30 18:18:39 1999  Jan Hubicka  <hubicka@freesoft.cz>

	* i386.md (truncatexfdf splitters): Do not use subreg.
	(fop XFmode patterns): Fix mode in operand testing.

Thu Sep 30 18:04:13 1999  Richard Henderson  <rth@cygnus.com>

	* jump.c (jump_optimize_1): Amend last change to test only the
	form of the operand, not the insn.

	* jump.c (jump_optimize_1) [conditional_move]: Use general_operand
	not register_operand to determine when B may need preloading.

Thu Sep 30 17:39:16 1999  Richard Henderson  <rth@cygnus.com>

	* alpha.md (*): Use nonimmediate not general_operand for SET_DEST.
	(ffsdi2, extxl, insxh, mskxh): Add missing DImode to SET_SRC.
	(call-value patterns): Move to end of file.
	(*): Remove mode from label_ref in (pc) context.
	(movstrqi): Use memory not general_operand for BLKmode operands.
	(prologue_stack_probe_loop, builtin_longjmp): Add missing mode
	to register_operand operands.
	(peep2 patterns): Convert from commented-out peephole patterns.

Thu Sep 30 14:39:17 1999  Bernd Schmidt  <bernds@cygnus.co.uk>

	* tree.h (enum built_in_function): Rename BUILT_IN_DWARF_REG_SIZE
	to BUILT_IN_INIT_DWARF_REG_SIZES.
	* builtins.c (expand_builtins, case BUILT_IN_INIT_DWARF_REG_SIZES):
	Renamed from BUILT_IN_DWARF_REG_SIZE; call
	expand_builtin_init_dwarf_reg_sizes.
	* c-decl.c (init_decl_processing): Replace __builtin_dwarf_reg_size
	with __builtin_init_dwarf_reg_size_table.
	* dwarf2out.c (struct reg_size_range): Delete.
	(expand_builtin_init_dwarf_reg_sizes): New function.
	(expand_builtin_dwarf_reg_size): Delete.
	* except.h (expand_builtin_init_dwarf_reg_sizes): Declare.
	(expand_builtin_dwarf_reg_size): Don't declare.
	* libgcc2.c (dwarf_reg_size_table_initialized): New.
	(dwarf_reg_size_table): New.
	(init_reg_size_table): New function.
	(copy_reg): Use dwarf_reg_size_table.
	(eh_context_initialize): Make sure dwarf_reg_size_table is initialized
	before use.

Thu Sep 30 05:40:34 1999  Richard Earnshaw <rearnsha@arm.com>

	* c-lang.c (finish_file case ndef ASM_OUTPUT_{CON,DE}STRUCTOR):
	Correctly build argument list to constructor and destructor functions.

Thu Sep 30 00:13:27 1999  Dirk Zoller  <duz@rtsffm.com>

	* c-tree.h (warn_float_equal): Declare.
	* c-decl.c (warn_float_equal): Define.
	(c_decode_option): Recognize -W[no-]float-equal.
	* c-typeck.c (build_binary_op): Conditionally warn
	about equality tests of floating point types.
	* toplev.c (documented_lan_options): Add -W[no-]float-equal.
	* invoke.texi: Add docs for -Wfloat-equal warning.

Wed Sep 29 23:43:39 1999  Jeffrey A Law  (law@cygnus.com)

	* h8300.h (INIT_TARGET_OPTABS): Use init_one_optab instead of
	generating RTL directly.
	* mips.h (INIT_TARGET_OPTABS): Likewise.
	* mn10200.h (INIT_TARGET_OPTABS): Likewise.

	* expr.h (init_mov_optab): Delete declaration

	* h8300.c (WORD_REG_USED): Update to avoid useless register
	saves in interrupt functions and functions which never return.

	* cse.c (struct set): Delete inner_dest_loc field.
	(cse_insn): Remove assignments to inner_dest_loc field.

Wed Sep 29 16:06:20 1999  Richard Henderson  <rth@cygnus.com>

	* ggc-page.c: Don't include <unistd.h> etc taken care of
	by "system.h".  Include <sys/mman.h> afterward.

Wed Sep 29 16:05:18 1999  Richard Henderson  <rth@cygnus.com>

	* rs6000.c (rs6000_encode_section_info): If ggc_p, use
	ggc_alloc_string.

Tue Sep 28 16:45:40 1999  David Edelsohn  <edelsohn@gnu.org>

	* xcoffout.c (xcoffout_declare_function): Add documentation.
	* rs6000.c (num_insns_constant_wide): Use TARGET_POWERPC64 not
	TARGET_64BIT.  Compare constant to -1, not bit pattern.
	(easy_fp_constant): Use TARGET_POWERPC64 not TARGET_64BIT.
	(expand_block_move): Allow 8 DImode loads for PowerPC64.  Fix
	gen_movsi typos.

Tue Sep 28 16:43:14 1999  Nick Clifton  <nickc@cygnus.com>

	* dwarf2out.c (add_abstract_origin_attribute): Abort if
	origin_die is NULL.
	(gen_inlined_enumeration_type_die): Do not abort if the type has
	not been writeen out.
	(gen_inlined_structure_type_die): Do not abort if the type has
	not been writeen out.
	(gen_inlined_union_type_die): Do not abort if the type has
	not been writeen out.
	(gen_tagged_type_instantiation_die): Do not abort if the type
	has not been written out.

Tue Sep 28 14:33:47 1999  Bernd Schmidt  <bernds@cygnus.co.uk>

	* c-decl.c (init_decl_processing): If MD_INIT_BUILTINS is defined,
	call it.
	* reg-stack.c (straighten_stack): Copy hard reg set with
	COPY_HARD_REG_SET.

Tue Sep 28 01:11:05 1999  Richard Henderson  <rth@cygnus.com>

	* builtins.c (stabilize_va_list): Stabilize array type va_list
	to a pointer type, not the base record type.
	(expand_builtin_va_copy): Dereference the pointers explicitly;
	use the correct size for the copy.

	* rs6000.c (rs6000_va_start): Dereference valist to get to the record.
	(rs6000_va_arg): Likewise.

Mon Sep 27 23:27:21 1999  Richard Henderson  <rth@cygnus.com>

	* rtl.h (struct rtx_def): Move gc_mark to align mode field.

Mon Sep 27 23:20:29 1999  Mark Mitchell  <mark@codesourcery.com>

	* tree.h (struct tree_decl): Use `bclass', not `class', in name of
	field.
	(DECL_BUILT_IN_CLASS): Adjust accordingly.

Mon Sep 27 23:03:16 1999  Richard Henderson  <rth@cygnus.com>

	* ggc-page.c (GGC_MIN_LAST_ALLOCATED): New.
	(init_ggc): Use it instead of a constant.
	(ggc_collect): Bound allocated_last_gc by it.

Mon Sep 27 19:06:04 1999  Jeffrey A Law  (law@cygnus.com)

	* fixinc/fixinc.irix (stdio.h): Hack stdio.h to avoid problems
	with va_list.

Mon Sep 27 19:40:17 CEST 1999	Marc Espie <espie@cvs.openbsd.org>

	* configure.in (mips*el-*-openbsd*):  Don't duplicate default settings.
	(mips*-*-openbsd*):  Let big endian configuration be a fragment.
	* configure:  Regen.
	* config/mips/openbsd.h:  New, OpenBSD little endian target.
	* config/mips/openbsd-be.h:  New, OpenBSD big endian target fragment.
	* config/mips/xm-openbsd.h:  New, OpenBSD host.

Mon Sep 27 10:28:48 1999  Andreas Schwab  <schwab@suse.de>

	* config/m68k/m68k.c (output_function_prologue,
	output_function_epilogue): Use
	current_function_uses_pic_offset_table instead of regs_ever_live
	to decide whether to save/restore pic register.
	(legitimize_pic_address): Don't modify regs_ever_live any more.

Sun Sep 26 10:55:36 1999  Mark Mitchell  <mark@codesourcery.com>

	* function.h (struct function): Add x_dont_save_pending_sizes_p.
	* stor-layout.c (variable_size): Don't add sizes to the pending
	sizes list if x_dont_save_pending_sizes_p is set.

Sun Sep 26 16:36:52 1999  Robert Lipe  (robertlipe@usa.net)

	* config/i386/dgux.h (SELECT_RTX_SECTION): Provide dummy argument
	for symbolic_operand().
	* config/i386/sco5.h (SELECT_RTX_SECTION): Likewise.

Sun Sep 26 07:37:11 1999  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* combine.c (gen_rtx_combine): Add missing call to va_end().

	* final.c (asm_fprintf): Likewise.

	* genattrtab.c (attr_rtx): Likewise.

Sat Sep 25 13:11:07 1999  Jeffrey A Law  (law@cygnus.com)

	* cse.c: Update comments.
	(cse_insn): When converting a conditional/computed jump into
	an unconditional jump, always make sure a BARRIER immediately
	follows the converted jump.  Do not delete unreachable code.
	(cse_basic_block): Do not delete unreachable code.
	* toplev.c (rest_of_compilation): Move call to
	delete_trivially_dead_insns after the conditional call to
	jump_optimize.

Sat Sep 25 09:03:17 1999  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* collect2.c (make_temp_file): Don't prototype.

	* gcc.c (make_temp_file): Likewise.

	* mips.c (mips_make_temp_file): Renamed from `make_temp_file'.

Sat Sep 25 13:42:15 1999  Nick Clifton  <nickc@cygnus.com>

	* varasm.c (asm_emit_uninitialised): New function: Generate
	the assembler statements necessary to declare an uninitialized
	variable.
	(ASM_EMIT_LOCAL): New macro: Emit a local, uninitialized
	variable.
	(ASM_EMIT_BSS): New macro: Emit an entry in the bss section.
	(ASM_EMIT_COMMON): New macro: Emit an entry in the common
	section.
	(assemble_variable): Use asm_emit_uninitialised to emit an
	uninitialized variable.

Fri Sep 24 17:10:56 1999  Nick Clifton  <nickc@cygnus.com>

	* combine.c (simplify_comparison): Cope with downshifting a 32 bit
	constant on a 64 bit host.  Patch supplied by Geoffrey Keating
	<geoffk@cygnus.com>.

Fri Sep 24 10:48:10 1999  Bernd Schmidt  <bernds@cygnus.co.uk>

	* builtins.c (expand_builtin): Use MD_EXPAND_BUILTIN if defined.
	* c-common.h (builtin_function): Don't declare.

	* c-decl.c (duplicate_decls): Use DECL_BUILT_IN_CLASS rather than
	DECL_BUILT_IN.
	(pushdecl): Likewise.
	(finish_decl): Likewise.
	(builtin_function): New arg CLASS.  Arg FUNCTION_CODE now of type
	int.  All callers changed.
	Set the builtin's DECL_BUILT_IN_CLASS.
	* tree.h (enum built_in_class): New.
	(enum built_in_function): Delete NOT_BUILT_IN.
	(DECL_FUNCTION_CODE): The corresponding field in tree_decl is now
	in a union.
	(DECL_SET_FUNCTION_CODE): Likewise.
	(DECL_BUILT_IN_CLASS): New macro.
	(DECL_BUILT_IN): Use DECL_BUILT_IN_CLASS.
	(struct tree_decl): Split builtin function code field into a
	struct.
	(builtin_function): Declare.

Fri Sep 24 01:45:05 1999  Mark Mitchell  <mark@codesourcery.com>

	* optabs.c (init_traps): Fix typo in last change.

Fri Sep 24 01:10:11 1999  Mark Mitchell  <mark@codesourcery.com>

	* toplev.c (rest_of_decl_compilation): Update comment.

Fri Sep 24 11:57:06 1999  Geoffrey Keating  <geoffk@cygnus.com>

	* config/mips/elf.h (ASM_OUTPUT_ALIGNED_BSS): Put the symbol
	in .sbss if appropriate.
	(EXTRA_SECTION_FUNCTIONS): Add sbss.
	(SBSS_SECTION_ASM_OP): New macro.
	* config/mips/linux.h (EXTRA_SECTION_FUNCTIONS): Add sbss.
	(EXTRA_SECTIONS): Add in_sbss.
	* config/mips/mips.h: Prototype sbss_section.

Thu Sep 23 18:18:55 1999  Mark Mitchell  <mark@codesourcery.com>

	* stmt.c (expand_start_bindings): Don't allow cleanup instructions
	to disappear.

Thu Sep 23 18:07:01 1999  Mark Mitchell  <mark@codesourcery.com>

	* optabs.c (init_traps): Register trap_rtx as a GC root.

Thu Sep 23 17:41:47 1999  Alexandre Oliva  <oliva@lsd.ic.unicamp.br>

	* config/mips/mips.c (function_arg_pass_by_reference): Define
	unconditionally, since it's called unconditionally.

Thu Sep 23 13:40:02 1999  Jason Merrill  <jason@yorick.cygnus.com>

	* toplev.c (documented_lang_options): Add -fshort-wchar.
	* c-decl.c (c_decode_option): Likewise.
	(init_decl_processing): If -fshort-wchar, use 'short unsigned int'
	for wchar_t.
	* c-common.c, c-lex.c: Get WCHAR_TYPE_SIZE from wchar_type_node.
	* gcc.c (default_compilers): If -fshort-wchar,
	override __WCHAR_TYPE__.
	* tm.texi (C Dialect Options): Add -fshort-wchar.

	* dwarf2out.c (output_aranges): Use DW_AT_location to find the
	symbol for a variable.

	* cpplib.h (CPP_PREPROCESSED): New macro.
	* cpplib.c (handle_directive): Don't complain about `# NUMBER' if
	we're seeing this input for a second time.

Thu Sep 23 12:54:49 1999  Alex Samuel  <samuel@codesourcery.com>

	* emit-rtl.c (init_emit_once): Initialize modes first.

Sun Sep 19 01:23:23 1999  Alex Samuel  <samuel@codesourcery.com>

	* config/i386/i386.c (pic_label_name): Change to char pointer.
	(global_offset_table): New variable.
	(load_pic_register): Fill global_offset_table if it hasn't
	already been done.  Allocate pic_label_name dynamically.
	* ggc.h (empty_string): New variable.
	* ggc-simple.c (empty_string): Likewise.
	(init_ggc): Allocate empty_string and add as root.
	* stmt.c (digit_strings): New variable.
	(init_stmt): Add last_block_end_note as root.  Allocate and
	initialize digit_strings.
	(expand_asm_operands): Use empty_string instead of string
	constant.  Use digit_strings instead of string constants.
	* profile.c (init_arc_profiler): Allocate string with
	ggc_alloc_string instead of xmalloc.
	(output_func_start_profiler): Likewise.
	* c-typeck.c (digest_init): Check if init is error_mark_node.

Thu Sep 23 12:59:14 1999  Alex Samuel  <samuel@codesourcery.com>
			  Richard Henderson  <rth@cygnus.com>

	* ggc-page.c: New file.
	* Makefile.in (ggc-page.o): New.

Thu Sep 23 13:55:21 1999  Jeffrey A Law  (law@cygnus.com)

	* invoke.texi: Document -fdelete-null-pointer-checks
	* toplev.c (flag_delete_null_pointer_checks): New.
	(f_options): Add entry for -fdelete-null-pointer-checks.
	(rest_of_compilation): Conditionalize null pointer check
	elimination on flag_delete_null_pointer_checks.
	(main): If -O2 or greater, enable -fdelete-null-pointer-checks

1999-09-23 10:56 -0700  Zack Weinberg  <zack@bitmover.com>

	* iso646.h, stdarg.h, stdbool.h, stddef.h, varargs.h: Add
	copyright notice and special exception to GPL.

Thu Sep 23 13:40:23 1999  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* abi64.h (mips_function_value): Add prototype arguments.

	* mips-protos.h: New file with mips prototypes.

	* mips.c: Include "tm_p.h".
	(mktemp, lookup_name): Add prototype arguments.
	(extern_list, string_constant, mips_fill_delay_slot,
	mips_output_external, mips_output_external_libcall,
	mips_output_filename, mips_declare_object, function_prologue,
	mips_expand_prologue, function_epilogue, mips16_constant,
	build_mips16_function_stub, mips_output_conditional_branch):
	Constify a char*.
	(mips_va_start): Remove unused variable `u'.
	(mips_va_arg): Cast value to unsigned when comparing against one.
	(trace): Delete.
	(save_restore_insns, mips_expand_prologue): Add missing arg in
	call to `large_int'.

	* mips.h: Move prototypes to mips-protos.h.
	(data_section, memory_address_p, rdata_section,
	readonly_data_section, simple_epilogue_p, text_section): Delete
	prototypes delcared elsewhere.
	(mips_epilogue_delay_slots, print_options): Delete unused decls.
	(trace): Delete.
	(GO_PRINTF, GO_PRINTF2): Call fprintf, not trace.

	* mips.md: Delete extra args in call to `mips_move_2words'.

	* xm-iris6.h (alloca): Add prototype argument.

	* genpeep.c: Include "tm_p.h" in generated output file.

Thu Sep 23 10:36:55 EDT 1999  Andrew MacLeod  <amacleod@cygnus.com>

	* basic-block.h (find_edge_index): Change parameters.
	* flow.c (verify_edge_list): Pass basic_block parameters to
	find_edge_index instead of integers.

Thu Sep 23 15:54:12 1999  Nick Clifton  <nickc@cygnus.com>

	* combine.c (simplify_comparison): Use an unsigned shift to adjust
	the constant.

Thu Sep 23 08:46:21 1999  Guy Harris  <guy@netapp.com>

	* gcc.1: Fix a formatting error.

Wed Sep 22 16:10:21 1999  Martin v. Löwis  <loewis@informatik.hu-berlin.de>

	* install.texi (Configurations): Remove pyramid. Add fr30, i686,
	i786, mn10200, mn10300, pdp11, v850.

Thu Sep 23 07:37:13 1999  Dan Nicolaescu  <dann@ics.uci.edu>

	* libgcc2.c (num_digits): Add prototype with
	__attribute__((const)).
	(__terminate): Add prototype.

Thu Sep 23 05:32:06 1999  Richard Henderson  <rth@cygnus.com>

	* builtins.c, dbxout.c, varasm.c: Include tm_p.h.

	* alpha/alpha.c (print_operand): Fix type of `code'.
	(alpha_output_filename): Constify.
	* alpha/alpha.h: Move all function declarations ...
	* alpha/alpha-protos.h: ... here.  New file.
	* alpha/elf.h (CONST_SECTION_FUNCTION): Prototype the function.
	(SECTION_FUNCTION_TEMPLATE): Likewise.

Thu Sep 23 11:15:36 1999  Bernd Schmidt  <bernds@cygnus.co.uk>

	* expmed.c (do_cmp_and_jump): Pass ccp_jump to can_compare_p.
	* expr.c (expand_expr): Likewise.
	(do_jump): Likewise.
	(do_store_flag): Pass ccp_store_flag to can_compare_p.
	* expr.h (enum optab_index): Add cbranch, cmov, cstore optabs and
	accessor macros.
	(enum can_compare_purpose): New.
	(can_compare_p): Adjust prototype.
	(prepare_cmp_insn, prepare_operand): Declare.
	* genopinit.c (optabs): Add cbranch_optab, cmov_optab, cstore_optab.
	* optabs.c (cmp_available_p): Deleted.
	(expand_abs): Pass ccp_jump to can_compare_p.
	(can_compare_p): New arg PURPOSE.  Check for combined optabs.
	(prepare_cmp_insn): No longer static.  Add arg PURPOSE.
	Call can_compare_p rather than cmp_available_p.
	(prepare_operand): No longer static.
	(emit_cmp_and_jump_insn): Check for and use cbranch patterns.
	(emit_cmp_and_jump_insns): Pass ccp_jump to prepare_cmp_insn.
	(expand_float): Fix a slightly broken emit_cmp_insn/emit_jump_insn
	sequence to use emit_cmp_and_jump_insns.
	(init_optabs): Initialize cbranch_optab, cmov_optab, cstore_optab.

Wed Sep 22 17:58:01 1999  Stan Cox  <scox@cygnus.com>

	* mips.h (GO_IF_LEGITIMATE_ADDRESS): Don't accept large
	register offsets; let LEGITIMIZE_ADDRESS load it into a register.
	(LEGITIMIZE_ADDRESS): Use plus_constant to avoid
	(plus (reg) (const_int 0))
	* mips.md (call_internal3c): New pattern for -mips16 -mlong-calls.

Wed Sep 22 17:55:31 1999  David Edelsohn  <edelsohn@gnu.org>

	* rs6000.c (expand_block_move): DImode loads and stores require
	word-aligned displacements.  Increment address registers with
	adddi3 on 64-bit platform.  Use TARGET_POWERPC64 not TARGET_64BIT.

Wed Sep 22 17:35:55 1999  Michael Meissner  <meissner@cygnus.com>

	* dwarf2out.c (base_type_die): Use the name __unknown__ if there
	is no name for the base type, rather than segfault.  If we are
	writing out a complex integer type, use DW_ATE_lo_user.

	* expr.c (emit_move_insn_1): If we are copying a complex that fits
	in one word or less (complex char, complex short, or on 64 bit
	systems complex float) to/from a hard register, copy it through
	memory instead of dying in gen_{real,imag}part.  If we have a
	short complex type, prevent inlining since it allocates stack
	memory.

	* tree.c (build_complex_type): If we are writing dwarf2 output,
	generate a name for complex integer types.

Wed Sep 22 11:34:08 EDT 1999  Andrew MacLeod  <amacleod@cygnus.com>

	* basic-block.h (add_noreturn_fake_exit_edges): Use correct name.
	* flow.c (remove_edge): Remove extra whitespace.
	(remove_fake_edges): Fix comment.
	(add_noreturn_fake_exit_edges): Use the correct name.

Wed Sep 22 16:12:40 BST 1999  Nathan Sidwell  <nathan@acm.org>

	* Makefile.in (INTL_MOSTLYCLEAN, INTL_CLEAN): New variables.
	(mostlyclean): Depend on INTL_MOSTLYCLEAN.
	(clean): Depend on INTL_CLEAN.
	(maintainer-clean): Adjust.

Wed Sep 22 10:18:56 1999  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* configure.in (AC_PREREQ): Bump to 2.13.
	(AC_C_STRINGIZE): Call this instead of using a custom macro.

	* gansidecl.h (HAVE_STRINGIZE): Define, if stage2 gcc && __STDC__.

	* system.h (HAVE_STRINGIZE): Test this instead of HAVE_CPP_STRINGIFY.

	* acconfig.h (HAVE_CPP_STRINGIFY): Delete.

	* alpha/xm-vms.h (HAVE_CPP_STRINGIFY): Delete.
	(HAVE_STRINGIZE): Define.

Wed Sep 22 06:25:15 1999  Jim Kingdon  <http://developer.redhat.com>

	* c-parse.in: save and restore warn_pointer_arith on __extension__
	along with pedantic.
	(SAVE_WARN_FLAGS, RESTORE_WARN_FLAGS): Added.
	Set the type of extension to itype rather than $<itype>1 kludge.
	* extend.texi (Alternate Keywords): Adjust documentation.
	* c-parse.c, c-parse.y, objc-parse.c, objc-parse.y: Rebuilt.

Wed Sep 22 06:06:57 1999  Jeffrey A Law  (law@cygnus.com)

	* pa.c, pa.h, pa.md: Support multiple assembler dialects in
	most assembler templates.

	* pa.c (hppa_legitimize_address): Handle full offsets for PA2.0
	FP loads and stores.
	(following_call): Always return zero for the PA8000.
	* pa.h (GO_IF_LEGITIMATE_ADDRESS): Handle full offsets for PA2.0
	FP loads and stores.
	(LEGITIMIZE_RELOAD_ADDRESS): Similarly.

	* pa.h (BRANCH_COST): Define.

	* pa.md (return, return_internal): Use bve for PA2.0.

	* pa.md (fused multiply): Add variants which reduce height for the
	fused multiply, but which still generate 2 insns.
	(fnegabs): Similarly.

	* pa.md (subsi3): Turn into an expander.  Create two anonymous
	patterns.  One for PA2.0 one for PA1.x.  Use mtsarcm for PA2.0.
	* pa.h (EXTRA_CONSTRAINT): Handle 'S'.

	* pa.md (floatunssisf2, floatunssidf2): Generate different RTL
	for TARGET_PA_20.
	(floatunssidf2_pa20, floatunssisf2_pa20): New patterns for PA2.0
	code generation.
	(floatunsdisf2, floatunsdidf2, fixuns_truncsfsi2): Likewise.
	(fixuns_truncdfsi2, fixuns_truncsfdi2, fixuns_truncdfsi2): Likewise.

	* regclass.c (init_regs): Add "top_of_stack" as a garbage
	collection root.

	* flow.c (record_active_eh_regions): Terminate loop after finding
	the last insn in the last basic block.

Wed Sep 22 20:25:00 1999  Michael Hayes  <m.hayes@elec.canterbury.ac.nz>

	* config/c4x/c4x.md: Delete parallel instruction peepholes.

Wed Sep 22 19:59:19 1999  Michael Hayes  <m.hayes@elec.canterbury.ac.nz>

	* config/c4x/c4x.c (c4x_add_gc_roots): Add tree roots.

Wed Sep 22 19:56:25 1999  Michael Hayes  <m.hayes@elec.canterbury.ac.nz>

	* config/c4x/c4x.c (c4x_process_after_reload): Rework machdep insn
	splitting to not use output template.

Wed Sep 22 19:50:12 1999  Michael Hayes  <m.hayes@elec.canterbury.ac.nz>

	* config/c4x/c4x.h (EXPAND_BUILTIN_VA_START): Call c4x_va_start.
	* config/c4x/c4x.c (c4x_va_start): New function.

Tue Sep 21 18:40:01 1999  Jan Hubicka  <hubicka@freesoft.cz>

	* genrecog.c (not_both_true): Handle correctly cases when called for
	tests with different positions in the insn.

Tue Sep 21 18:29:11 1999  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* machmode.h (HOST_PTR_PRINTF): Move from here ...

	* system.h (HOST_PTR_PRINTF): ... to here.

	* mips-tfile.c: Don't include machmode.h.

	* Makefile.in (MACHMODE_H): New variable.  Update to use it.
	(mips-tfile.o): Don't depend on machmode.h.

Tue Sep 21 18:27:34 1999  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* haifa-sched.c (sched_analyze): Rename local variable `region' to
	avoid conflicts with typedef struct `region' at the top level scope.

Tue Sep 21 14:14:50 1999  Richard Henderson  <rth@cygnus.com>

	* basic-block.h (basic_block): Add eh_beg, eh_end.
	* flow.c (entry_exit_blocks): Update.
	(find_basic_blocks): Don't allocate bb_eh_end, or pass it around.
	Call new functions.
	(find_basic_blocks_1): Don't record eh_list at each bb.  Use
	lists.c functions to allocate insn lists.
	(make_edges): Use eh_beg+eh_end, not the lists.  Split out EH
	edge creation ...
	(make_eh_edge): ... here.  New.
	(move_stray_eh_region_notes): New.
	(record_active_eh_regions): New.
	(delete_unreachable_blocks): Split out block merging ...
	(try_merge_blocks): ... here.  New.
	(merge_blocks_move_predecessor_nojumps): Remove edge arg.
	Dump debugging data.
	(merge_blocks_move_successor_nojumps): Likewise.
	(merge_blocks): Use eh_beg+eh_end to validate block movement.

Tue Sep 21 11:15:03 1999  Martin v. Löwis  <loewis@informatik.hu-berlin.de>

	* extend.texi (Bound member functions): Document unbound pmf
	conversion.

Tue Sep 21 14:55:11 EDT 1999  Andrew MacLeod  <amacleod@cygnus.com>

	* flow.c (split_edge): Handle insertion on a fallthrough edge which
	has the EXIT_BLOCK as a dest.

Tue Sep 21 14:51:23 EDT 1999  Andrew MacLeod  <amacleod@cygnus.com>

	* flow.c (remove_edge): New function to remove an edge from the
	flow graph.
	(remove_fake_successors): New function to remove fake successor edges.
	(remove_fake_edges): New function to remove all fake edges from the
	flow graph.
	(add_fake_exit_edges): New function to add fake edges from all blocks
	with no successors to the exit block.
	* basic-block.h (remove_fake_edges, add_fake_exit_edges): Add
	prototypes for new functions.

Tue Sep 21 14:49:53 EDT 1999  Andrew MacLeod  <amacleod@cygnus.com>

	* config/mips/elf64.h (ASM_OUTPUT_CONSTRUCTOR, ASM_OUTPUT_DESTRUCTOR):
	Use Pmode to determine whether to output .dword or .word.

Tue Sep 21 11:04:34 1999  Alex Samuel  <samuel@codesourcery.com>

	* tree.c (built_in_filename): New variable.
	(BUILT_IN_FILENAME): New macro.
	(init_tree_codes): Allocate built_in_filename.
	(make_node): Use built_in_filename instead of string constant.

Tue Sep 21 14:13:27 1999  Nick Clifton  <nickc@cygnus.com>

	* configure.in: Add fr30 target.
	* configure: Regenerate.
	* config/fr30: New directory.
	* config/fr30/crti.asm: New file.
	* config/fr30/fr30.c: New file.
	* config/fr30/crtn.asm: New file.
	* config/fr30/fr30.h: New file.
	* config/fr30/fr30.md: New file.
	* config/fr30/lib1funcs.asm: New file.
	* config/fr30/t-fr30: New file.
	* config/fr30/xm-fr30.h: New file.

Tue Sep 21 06:45:31 1999  Jeffrey A Law  (law@cygnus.com)

	* flow.c (merge_blocks_move_successor_nojumps): Delete the
	BARRIER at the end of the successor, not the BARRIER before
	the successor.

	* pa.c (pa_add_gc_roots): Fix thinko in last change.

Tue Sep 21 05:29:17 1999  Richard Earnshaw (rearnsha@arm.com)

	* stmt.c (any_pending_cleanups): Don't crash when
	current_function->stmt is unset.

Tue Sep 21 00:59:49 1999  Alexandre Oliva  <oliva@lsd.ic.unicamp.br>

	* emit-rtl.c (init_emit_once): Initialize const_int_rtx before
	other initializations that may use it for relative offsets.

Mon Sep 20 21:43:25 1999  Alexandre Oliva  <oliva@lsd.ic.unicamp.br>

	* config/i386/sol2.h (PREFERRED_DEBUGGING_TYPE): Use stabs.
	(ASM_SPEC): Moved from sol2dbg.h.  Added work-around for gas.
	* config/i386/sol2dbg.h: Removed.
	* config/i386/sol2gas.h: New file, to enable gas work-around.
	* configure.in: Use i386/sol2gas.h on Solaris/x86 --with-gas.
	Don't use sol2dbg.h.
	* configure: Rebuilt.

Mon Sep 20 13:29:41 1999  Mark Mitchell  <mark@codesourcery.com>

	* invoke.texi (-fthis-is-variable): Remove documentation.

Mon Sep 20 12:59:16 1999  Richard Henderson  <rth@cygnus.com>

	* basic-block.h (compute_bb_for_insn): Declare.
	* flow.c (compute_bb_for_insn): Export.  Don't accept the varray
	to use; set size of basic_block_for_insn directly.
	(find_basic_blocks): Update.

Mon Sep 20 15:11:54 1999  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* flow.c (verify_flow_info): Fix typo, "abort;" -> "abort ();".

Mon Sep 20 14:56:34 1999  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* crtstuff.c (ON_EXIT): Delete empty macro definition.
	(__do_global_ctors_aux): Call atexit(), not ON_EXIT().

Mon Sep 20 15:25:35 1999  Nick Clifton  <nickc@cygnus.com>

	* c-decl.c (c_decode_option): Extend comment.

Mon Sep 20 14:43:37 1999  Nick Clifton  <nickc@cygnus.com>

	* toplev.c (progname): Make 'const char *'
	(flag_print_mem): Move out of main.
	(version_flag): Move out of main.
	(filename): Move out of main.
	(debug_args): Remove g prefix from options.
	(documented_lang_options): Remove cpplib specific options.
	(display_help): Add g prefix to debug options.
	(check_lang_option): Delete this function.
	(decode_d_option): New function: Decode -d... option.
	(decode_f_option): New function: Decode -f... option.
	(decode_W_option): New function: Decode -W... option.
	(decode_g_option): New function: Decode -g... option.
	(independent_decode_option): New function: Decode a language
	independent command line option.
	(main): Invoke lang_decode_option and then
	independent_decode_option on each command line option in
	turn.

Mon Sep 20 05:41:36 1999  Jeffrey A Law  (law@cygnus.com)

	Revert this change.  Gavin's patch to operand_equal_p is a better fix.
	 * fold-const.c (fold_range_test): Do not try to fold the range
	 test if the rhs or lhs has side effects.

	* basic-block.h (compute_flow_dominators): Declare.

	* gcse.c (alloc_code_hoist_mem): New function.
	(free_code_hoist_mem, compute_code_hoist_vbeinout): Likewise.
	(compute_code_hoist_data, hoist_expr_reaches_here_p): Likewise.
	(hoist_code, one_code_hoisting_pass): Likewise.
	(gcse_main): If optimizing for size, then hoist expressions
	computed in multiple dominated basic blocks.

	* gcse.c (invalid_nonnull_info): New function.
	(delete_null_pointer_checks): Likewise.
	* rtl.h (delete_null_pointer_checks): Declare.
	* toplev.c (rest_of_compilation): Call delete_null_pointer_checks.

	* flow.c (merge_blocks_move_predecessor_nojumps): New function.
	(merge-blocks_move_successor_nojumps): Likewise.
	(merge_blocks): Allow merging of some blocks, even if it requires
	physical movement of the blocks, but not if it requires new jumps.

	* bitmap.c (debug_bitmap_file): Renmaed from bitmap_debug_file.
	Callers and prototype changed.
	* bitmap.h: Fix debug_bitmap and debug_bitmap_file prototypes.

Mon Sep 20 06:56:32 1999  Alexandre Oliva  <oliva@lsd.ic.unicamp.br>

	* config/sparc/sol2.h (LINK_SPEC): Avoid the duplication of
	-YP when both -p and -pg are present.  From i386/sol2.h.

Mon Sep 20 10:49:05 1999  Bernd Schmidt  <bernds@cygnus.co.uk>

	* Makefile.in (distclean): Delete tm_p.h.
	* configure.in: Create a new file, "tm_p.h", from a list in
	"tm_p_file". For ix86 systems, set up "tm_p_file" to include
	"i386/i386-protos.h".

	* alias.c: Include "tm_p.h".
	* c-typeck.c: Likewise.
	* calls.c: Likewise.
	* cse.c: Likewise.
	* emit-rtl.c: Likewise.
	* explow.c: Likewise.
	* expmed.c: Likewise.
	* expr.c: Likewise.
	* final.c: Likewise.
	* flow.c: Likewise.
	* fold-const.c: Likewise.
	* function.c: Likewise.
	* gcse.c: Likewise.
	* global.c: Likewise.
	* haifa-sched.c: Likewise.
	* integrate.c: Likewise.
	* jump.c: Likewise.
	* local-alloc.c: Likewise.
	* loop.c: Likewise.
	* optabs.c: Likewise.
	* recog.c: Likewise.
	* reg-stack.c: Likewise.
	* regclass.c: Likewise.
	* regmove.c: Likewise.
	* reload.c: Likewise.
	* reload1.c: Likewise.
	* reorg.c: Likewise.
	* resource.c: Likewise.
	* stmt.c: Likewise.
	* stor-layout.c: Likewise.
	* toplev.c: Likewise.
	* tree.c: Likewise.
	* unroll.c: Likewise.
	* genattrtab.c (main): Make generated file include "tm_p.h".
	* genemit.c (main): Likewise.
	* genoutput.c (main): Likewise.
	* genrecog.c (main): Likewise.

	* i386.h: Delete all prototypes.
	* i386.c: Include "tm_p.h".
	(ix86_attr_length_default): Call constant_call_address_operand
	with correct number of arguments.
	* i386-protos.h: New file.
	* i386.md (unnamed patterns): Call constant_call_address_operand
	with correct number of arguments.
	(exception_receiver): Call load_pic_register with correct number
	of arguments.

Sun Sep 19 14:18:39 1999  Richard Henderson  <rth@cygnus.com>

	* c-pragma.c (mark_align_stack): Dereference the void* properly.

Sun Sep 19 09:03:40 1999  Mark Mitchell  <mark@codesourcery.com>

	* rtl.h (insns_safe_to_move_p): New function.
	* loop.c (find_and_verify_loops): Use it.
	* rtlanal.c (insns_safe_to_move_p): Define it.

Sun Sep 19 02:54:33 1999  Richard Henderson  <rth@cygnus.com>

	* c-pragma.c: Include ggc.h.
	* Makefile.in (c-pragma.o): Update.

Sat Sep 18 16:01:18 1999  Alexandre Oliva  <oliva@lsd.ic.unicamp.br>

	* config/i386/sol2.h (CPP_SPEC): Support -[p]threads
	(LIB_SPEC): Likewise.
	(LINK_SPEC): Do not assert -z text with -shared -mimpure-text.
	Reindent -YP/-p/-pg.
	Copied from config/sparc/sol2.h.

Sat Sep 18 11:52:43 1999  Richard Henderson  <rth@cygnus.com>

	* c-pragma.c (mark_align_stack): New.
	(init_pragma): New.
	* c-pragma.h (init_pragma): Declare it.
	* c-lex.c (init_parse): Call it.

Sat Sep 18 15:20:38 1999  Alexandre Oliva  <oliva@lsd.ic.unicamp.br>

	* configure.in: Pick up thread library on Solaris/x86 just
	like on Solaris/sparc.
	* configure: Rebuilt.

Sat Sep 18 11:15:58 1999  Alex Samuel  <samuel@codesourcery.com>

	* rtl.h (global_rtx_index): New enum.
	(global_rtl): Change to array of rtx.
	(pc_rtx, cc0_rtx): Redefine accordingly.
	(cc0_rtx, stack_pointer_rtx, frame_pointer_rtx): Likewise.
	(hard_frame_pointer_rtx, arg_pointer_rtx): Likewise.
	(virtual_incoming_args_rtx, virtual_stack_vars_rtx): Likewise.
	(virtual_outgoing_args_rtx, virtual_cfa): Likewise.
	(const_int_rtx): Change to array of rtx.
	(const0_rtx, const1_rtx, const2_rtx, constm1_rtx): Redefine
	accordingly.
	* emit-rtl.c (global_rtl): Change to array of rtx.
	(const_int_rtx): Change to aray of rtx.
	(gen_rtx_CONST_INT): Redefine accordingly.
	(init_emit_once): Allocate and initialize global_rtl.  Likewise
	for const_int_rtx.  Add both as GC roots.
	* genattrtab.c (global_rtl): Update declaration.

1999-09-17  Ulrich Drepper  <drepper@cygnus.com>

	* Makefile (USER_H): Add iso646.h back.

Sat Sep 18 01:07:21 1999  Jeffrey A Law  (law@cygnus.com)

	* haifa-sched.c (sched_analyze): Use free_INSN_LIST_list instead of
	zapping the LOG_LINKS of sched_before_next_call.

	* pa.h (INSN_SETS_ARE_DELAYED): Delete.
	* pa.c (insn_refs_are_delayed): Renamed from
	insn_sets_and_refs_are_delayed.

Fri Sep 17 15:19:01 1999  Mark Mitchell  <mark@codesourcery.com>

	* functiion.h (struct function): Add x_whole_function_mode_p.
	(retrofit_block): Declare.
	* function.c (retrofit_block): New function.
	(identify_blocks): Add assertions.  Allow an incomplete set of
	block notes if we're still generating code for the function.
	* integrate.c: Include loop.h.
	(expand_inline_function): Call find_loop_tree_blocks to map block
	notes to blocks when in whole-function mode.  Use retrofit_block
	to insert new BLOCKs for the inlined function, rather than
	insert_block.
	* stmt.c (expand_fixup): Likewise.  Don't use pushlevel/polevel.
	* Makefile.in (integrate.o): Depend on loop.h.

Fri Sep 17 15:11:20 1999  Mark Mitchell  <mark@codesourcery.com>

	* tree.h (warn_about_unused_variables): Declare.
	* stmt.c (warn_about_unused_variables): New function, split out
	from ...
	(expand_end_bindings): Here.

Fri Sep 17 15:07:37 1999  Mark Mitchell  <mark@codesourcery.com>

	* stmt.c (preserve_subexpressions_p): Don't crash when
	current_function->stmt is unset.

Fri Sep 17 15:03:16 1999  Mark Mitchell  <mark@codesourcery.com>

	* stmt.c (expand_start_bindings): Allow callers to pass a flag
	indicating that no NOTE_INSN_BLOCK_BEG note is required.
	(expand_start_target_temps): Use it.
	* except.c (expand_eh_region_start_for_decl): Likewise.
	* expr.c (expand_expr): Likewise.

Fri Sep 17 15:05:27 1999  Gavin Romig-Koch  <gavin@cygnus.com>

	* fold-const.c (operand_equal_p): Pay attention to side effects.

Fri Sep 17 11:14:17 1999  Jason Merrill  <jason@yorick.cygnus.com>

	* libgcc2.c (L_exit): Check for ON_EXIT, not HAVE_ON_EXIT.
	* sparc/sunos4.h (HAVE_ON_EXIT): Remove.

	* tlink.c (scan_linker_output): Look for keywords before accepting
	a mangled name in quotes.

Thu Sep 16 16:47:08 1999  Richard Henderson  <rth@cygnus.com>

	* alpha/alpha-interix.h (DWARF2_UNWIND_INFO): Define to zero.
	* alpha/osf2or3.h (DWARF2_UNWIND_INFO): Likewise.

Thu Sep 16 16:35:41 1999  Richard Henderson  <rth@cygnus.com>

	* alpha.md: Revert Thu Nov 26 change that came in through the
	last gcc2 merge: reinstate (plus (plus ...)) reload patterns.
	Avoid earlyclobber when possible.

Thu Sep 16 18:44:48 1999  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* libgcc2.c (__do_global_ctors): Call atexit with one arg.

	* sparc/sunos4.h (on_exit): Wrap prototype parameters in PARAMS().
	Define HAVE_ON_EXIT.

Thu Sep 16 18:06:35 1999  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* system.h (CTYPE_CONV, TOUPPER, TOLOWER): New macros.  Use
	CTYPE_CONV in all ctype macros.

	* cccp.c (initialize_char_syntax): Use uppercase ctype macro
	from system.h.

	* cexp.y (initialize_random_junk): Likewise.

	* c4x.c (c4x_interrupt_function_p, c4x_handle_pragma): Likewise.

	* i370.c (handle_pragma): Likewise.

	* i370.h (ASM_OUTPUT_LABELREF, ASM_OUTPUT_ASCII): Likewise.

	* v850.c (override_options): Likewise.

	* doprint.c (_doprnt): Likewise.

	* fixinc/fixincl.c (main, quoted_file_exists, extract_quoted_files):
	Likewise.

	* fixinc/server.c (load_data): Likewise.

	* fold-const.c (real_hex_to_f): Likewise.

	* genattr.c (write_upcase, gen_attr): Likewise.

	* genattrtab.c (convert_const_symbol_ref, evaluate_eq_attr,
	write_upcase): Likewise.

	* genemit.c (print_code): Likewise.

	* genopinit.c (gen_insn): Likewise.

	* genpeep.c (print_code): Likewise.

	* genrecog.c (print_code): Likewise.

	* optabs.c (init_libfuncs): Likewise.

Thu Sep 16 14:03:32 1999  Mark Mitchell  <mark@codesourcery.com>

	* haifa-sched.c (sched_analyze): Keep the list of notes organized
	in pairs.
	(reemit_notes): Likewise.

Thu Sep 16 11:50:52 1999  Alex Samuel  <samuel@codesourcery.com>

	* ggc.h (ggc_root): Move to ggc-common.c.
	(roots): Remove.
	(ggc_mark_rtx, ggc_mark_tree): Change to macro.
	(ggc_mark_rtvec, ggc_mark_tree_varray): Declare extern.
	(ggc_mark_tree_hash_table, ggc_mark_string, ggc_mark): Likewise.
	(ggc_mark_roots, ggc_mark_rtx_children, ggc_mark_tree_children): New.
	* ggc-common.c (ggc_root): Move from ggc.h.
	(roots): Declare, static.
	(ggc_mark_rtx, ggc_mark_tree): Renamed to...
	(ggc_mark_rtx_children, ggc_mark_tree_children): Don't check for
	null or check/set mark bit.
	(ggc_mark_roots): New.
	* ggc-simple.c (ggc_collect): Call ggc_mark_roots.

Thu Sep 16 11:37:32 1999  Richard Henderson  <rth@cygnus.com>

	* m32r.c: Include toplev.h.
	(*): Add ATTRIBUTE_UNUSED as needed to arguments.
	(gen_compare): Rename swap_p to must_swap to match uses.
	Add default abort case.
	(m32r_output_function_epilogue): Remove unused variables.
	(m32r_print_operand): Use HOST_WIDE_INT_PRINT_HEX.
	* m32r.h (PROTO, STDIO_PROTO): Rename XPROTO; unconditionally
	define to empty parameter list.  Update all uses.
	(predicate decls): Use enum machine_mode not int.
	* m32r.md (movsi): Call abort, not fatal_insn.
	(zero_branch_insn, rev_zero_branch_insn): Add default abort case.

1999-09-14  Andrew Haley  <aph@cygnus.com>

	* config/mips/mips.md (movsi_usw): if operand 1 is const_int 0,
	use $0 instead of 0.

Thu Sep 16 10:53:36 1999  Bernd Schmidt  <bernds@cygnus.co.uk>

	* reload1.c (order_regs_for_reload): Move hard_reg_n_uses
	computation out of loop over hard regs.

Wed Sep 15 21:37:06 1999  Mark Mitchell  <mark@codesourcery.com>

	* function.c (identify_blocks): Don't shadow a variable in an
	outer scope.
	* integrate.c (integrate_decl_tree): Don't use pushlevel,
	pushdecl, or poplevel to build up the new BLOCK tree.
	(expand_inline_function): Likewise.
	(integrate_parm_decls): Likewise.

Wed Sep 15 21:20:38 1999  Mark Mitchell  <mark@codesourcery.com>

	* c-typeck.c (qualify_type): Merge qualifiers from both types.

1999-09-15  Brad Lucier  <lucier@math.purdue.edu>

	* toplev.c: Allow -f[no-]math-errno to set (clear) flag_errno_math
	* invoke.texi: Document this change.

Wed Sep 15 17:56:00 1999  Richard Henderson  <rth@cygnus.com>

	* emit-rtl.c (free_emit_status): Don't check DECL_DEFER_OUTPUT.
	Free the struct.
	(mark_emit_status): Renamed from mark_emit_state.
	* except.c (mark_eh_status): Renamed from mark_eh_state.
	Check not null before marking.
	(free_eh_status): New.
	* expr.c (mark_expr_status, free_expr_status): New.
	* function.c (free_machine_status): New.
	(free_after_parsing): New.
	(free_after_compilation): Move bits to free_after_parsing; call
	free_eh_status, free_expr_status; zero the marked members of the
	function state.
	(prepare_function_start): No can_garbage_collect.
	Call init_eh_for_function.
	(expand_dummy_function_end): Free up current_function state.
	(mark_function_status): Renamed from mark_function_state.
	(mark_function_chain): No can_garbage_collect.  Call mark_expr_status.
	* function.h (struct function): No can_garbage_collect.
	(free_machine_status, free_after_parsing): Declare.
	(free_eh_status, free_expr_status): Declare.
	* ggc.h (mark_expr_status): Declare.
	* stmt.c (free_stmt_status): Free the struct.
	(mark_stmt_status): Renamed from mark_stmt_state.
	(init_stmt): Don't call init_eh.
	(init_stmt_for_function): Don't call init_eh_for_function.
	* toplev.c (compile_file): Call init_eh.
	(rest_of_compilation): Free basic block info before ggc_collect.
	Call free_after_parsing; conditionally call free_after_compilation.
	* varasm.c (mark_varasm_status): Renamed from mark_varasm_state.
	Check not null before marking.
	(free_varasm_status): Don't check DECL_DEFER_OUTPUT.  Free the struct.

Wed Sep 15 17:53:16 1999  Richard Henderson  <rth@cygnus.com>

	* c-lex.c (yylex): Initialize warn.

Wed Sep 15 18:35:38 1999  Jeffrey A Law  (law@cygnus.com)

	* pa.c (emit_move_sequence): Properly set the mode of the scratch
	register when performing secondary reloads for the SAR register.

Wed Sep 15 15:51:52 1999  Mark Mitchell  <mark@codesourcery.com>

	* rtl.h (NOTE_BLOCK_NUMBER): Replace with ...
	(NOTE_BLOCK): New macro.
	(NOTE_BLOCK_LIVE_RANGE_BLOCK): Remove.
	* function.h (identify_blocks): Change prototype.
	* function.c (identify_blocks): Simplify.
	(reorder_blocks): Likewise.
	* ggc-common.c (ggc_mark_rtx): Mark the BLOCK associated with a
	NOTE_INSN_BLOCK_{BEG,END}.
	* haifa-sched.c (sched_analyze): Don't put NOTE_BLOCK_NUMBER on
	the list of saved notes if the note isn't a
	NOTE_INSN_BLOCK_{BEG,END}.
	(move_insn1): Use NOTE_EH_HANDLER in comment, rather than
	NOTE_BLOCK_NUMBER.
	(reemit_notes): Adjust recreation of notes to reflect new saved
	note structure.
	* print-rtl.c (print_rtx): Print the address of the BLOCK when
	printing a block note.
	* stmt.c (block_vector): Remove.
	(find_loop_tree_blocks): Simplify.
	(unroll_block_trees): Likewise.
	* tree.h (reorder_block): Change prototype.

Wed Sep 15 14:39:35 1999  Jason Merrill  <jason@yorick.cygnus.com>

	* gbl-ctors.h: Lose HAVE_ATEXIT.  Don't define ON_EXIT.
	* libgcc2.c: Lose obsolete defn of WEAK_ALIAS.
	(__bb_init_func, __bb_init_prg): Use atexit instead of ON_EXIT.
	(__do_global_dtors): Likewise.  Don't mess with _exit_dummy_decl.
	(atexit, exit): Simplify.
	* tm.texi: Document NEED_ATEXIT and ON_EXIT.  Remove HAVE_ATEXIT.
	* config/lots: Remove defns of HAVE_ATEXIT.

Wed Sep 15 10:25:12 1999  Mark Mitchell  <mark@codesourcery.com>

	* calls.c (precompute_arguments): Fix typo in comment.
	* expr.c (preexpand_calls): Don't preexpand the cleanup in a
	TARGET_EXPR.

Wed Sep 15 09:59:59 1999  Mark Mitchell  <mark@codesourcery.com>

	* dsp16xx.c (override_options): Fix typos in GC root registration.

Wed Sep 15 15:23:28 1999  Philip Blundell  <pb@nexus.co.uk>

	* config/arm/linux-elf.h (MAKE_DECL_ONE_ONLY): Copy definition
	from config/svr4.h.
	(UNIQUE_SECTION_P, UNIQUE_SECTION): Likewise.
	(FUNCTION_PROFILER): Redefine appropriately for Linux.
	(CC1_SPEC): Likewise.

Wed Sep 15 10:09:48 1999  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* genattr.c (main): Add extern prototype.  Call return, not exit.
	* genattrtab.c (main): Likewise.
	* gencheck.c (main): Likewise.
	* gencodes.c (main): Likewise.
	* genconfig.c (main): Likewise.
	* genemit.c (main): Likewise.
	* genextract.c (main): Likewise.
	* genflags.c (main): Likewise.
	* gengenrtl.c (main): Likewise.
	* genopinit.c (main): Likewise.
	* genoutput.c (main): Likewise.
	* genpeep.c (main): Likewise.
	* genrecog.c (main): Likewise.

	* genattr.c (get_insn_name): Mark parameter with ATTRIBUTE_UNUSED.
	* genattrtab.c (get_insn_name): Likewise.
	* gencodes.c (get_insn_name): Likewise.
	* genconfig.c (get_insn_name): Likewise.
	* genemit.c (get_insn_name): Likewise.
	* genextract.c (get_insn_name): Likewise.
	* genflags.c (get_insn_name): Likewise.
	* genopinit.c (get_insn_name): Likewise.
	* genpeep.c (get_insn_name): Likewise.

	* gencheck.c (usage): Add static prototype.
	* genextract.c (print_path): Constify a char*.
	* genopinit.c (optabs): Likewise.
	* genoutput.c (operand_data, data, output_predicate_decls,
	compare_operands): Likewise.
	* genrecog.c (write_tree): Add default case in switch.

Wed Sep 15 09:59:16 1999  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* rtl.h (get_insn_name, print_rtl_with_bb): Add prototypes.

	* print-rtl.c (get_insn_name): Remove prototype.

	* toplev.h (progname): Declare const.

	* toplev.c (init_decl_processing, init_obstacks, init_tree_codes,
	init_regs, init_optabs, init_stmt, init_reg_sets, dump_flow_info,
	dump_sched_info, dump_local_alloc, regset_release_memory,
	print_rtl, print_rtl_with_bb, rest_of_decl_compilation,
	error_with_file_and_line, error_with_decl, error_for_asm, error,
	fatal, warning_with_file_and_line, warning_with_decl, warning,
	pedwarn, pedwarn_with_decl, pedwarn_with_file_and_line, sorry):
	Remove redundant prototypes.

	(notice, check_lang_option, report_file_and_line, vnotice,
	mark_file_stack): Add static prototype.
	(set_fatal_function): Add prototype.
	(vnotice, report_file_and_line, set_fatal_function,
	check_lang_option): Constify a char*.
	(main): Prototype.  Call return, not exit.

Wed Sep 15 09:50:18 1999  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* aclocal.m4 (AC_GCC_C_LONG_DOUBLE): New macro.

	* configure.in (AC_GCC_C_LONG_DOUBLE): Call it.

	* gansidecl.h (HAVE_LONG_DOUBLE): Define if gcc for stage2.

	* ggc-simple.c (HAVE_LONG_DOUBLE): Test before using long double.

Wed Sep 15 11:04:43 1999  Bernd Schmidt  <bernds@cygnus.co.uk>

	* function.c (assign_parms): Delete arg SECOND_TIME.  Don't test it,
	behave as if it's zero in all cases.
	(expand_function_start): Adjust call to assign_parms.
	* tree.h (assign_parms): Adjust prototype.
	* objc/objc-act.c (hack_method_prototype): Adjust call to
	assign_parms.

Tue Sep 14 21:47:06 1999  Jeffrey A Law  (law@cygnus.com)

	* cse.c (FIXED_BASE_PLUS_P): Do not consider referneces to
	arg_pointer_rtx fixed if the argument pointer register is
	not fixed.
	(NONZERO_BASE_PLUS_P): Likewise.

Tue Sep 14 20:26:02 1999  Richard Henderson  <rth@cygnus.com>

	* rtl.def (match_insn, match_insn2): Remove match_insn; rename
	match_insn2 to match_insn.
	* genrecog.c (add_to_sequence): Rename MATCH_INSN2.

Tue Sep 14 20:10:29 1999  Richard Henderson  <rth@cygnus.com>

	* Makefile.in (USER_H): Remove va-foo.h.

	* ginclude/{va-alpha.h,va-arc.h,va-c4x.h,va-clipper.h,va-h8300.h,
	va-i860.h,va-i960.h,va-m32r.h,va-m88k.h,va-mips.h,va-mn10200.h,
	va-mn10300.h,va-pa.h,va-ppc.h,va-pyr.h,va-sh.h,va-sparc.h,
	va-spur.h,va-v850.h}: Remove.

Tue Sep 14 19:43:16 1999  Richard Henderson  <rth@cygnus.com>

	* sparc/sparc.md (eligible_for_return_delay): New attribute.
	(in_return_delay): Use it instead of match_insn.

Tue Sep 14 23:05:37 1999  Alexandre Oliva  <oliva@lsd.ic.unicamp.br>

	* config/alpha/va_list.h (va-alpha.h): Do not include.
	(__gnuc_va_list): Typedef as in varargs.h.

Tue Sep 14 18:14:03 1999  Richard Henderson  <rth@cygnus.com>

	* ggc-common.c (ggc_mark_tree): Mark DECL_SOURCE_FILE and
	DECL_LIVE_RANGE_RTL.

Tue Sep 14 16:47:08 1999  Mark Mitchell  <mark@codesourcery.com>

	* except.c (expand_eh_region_start_for_decl): Use NOTE_EH_HANDLER,
	not NOTE_BLOCK_NUMBER.
	(expand_eh_region_end): Likewise.
	(find_exception_handler_labels): Likewise.
	(scan_region): Likewise.
	(exception_optimize): Likewise.
	(update_rethrow_references): Likewise.
	(set_insn_eh_region): Likewise.
	* final.c (final_scan_insn): Likewise.
	* flow.c (make_edges): Likewise.
	* integrate.c (expand_inline_function): Likewise.
	* print-rtl.c (print_rtx): Likewise.

Tue Sep 14 16:30:16 1999  Richard Henderson  <rth@cygnus.com>

	* ginclude/stdarg.h, ginclude/varargs.h: Implement in
	terms of builtin functions and types.

	* mips.c (mips_build_va_list): New.
	(mips_va_start, mips_va_arg): New.
	* mips.h (BUILD_VA_LIST_TYPE): New.
	(EXPAND_BUILTIN_VA_START, EXPAND_BUILTIN_VA_ARG): New.

	* sh.c (sh_builtin_saveregs): Use get_varargs_alias_set.
	(sh_build_va_list, sh_va_start, sh_va_arg): New.
	* sh.h (BUILD_VA_LIST_TYPE): New.
	(EXPAND_BUILTIN_VA_START, EXPAND_BUILTIN_VA_ARG): New.

Tue Sep 14 16:20:24 1999  Richard Henderson  <rth@cygnus.com>

	* recog.h (struct recog_data): Make dup_num, operand_address_p,
	n_operands, n_dups, n_alternatives `char' instead of `unsigned char'.
	(struct insn_data): Likewise with n_operands, n_dups,
	n_alternatives, output_format.
	* regclass.c (scan_one_insn): Cast n_operands to int before
	arithmetic inside comparison.

Tue Sep 14 15:13:36 1999  Richard Henderson  <rth@cygnus.com>

	* toplev.c (compile_function): Unconditionally emit nop.

Tue Sep 14 14:41:47 1999  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* haifa-sched.c (actual_hazard): Move declaration of variable
	`this_cost' into the scope where it is used.

Tue Sep 14 14:14:28 1999  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* c-pragma.c (handle_pragma_token): Wrap variables `name' and
	`value' in HANDLE_PRAGMA_WEAK.  Wrap variable `align' in
	HANDLE_PRAGMA_PACK||HANDLE_PRAGMA_PACK_PUSH_POP.

	* genrecog.c (make_insn_sequence): Call memset, not bzero.

	* jump.c (find_insert_position): Don't declare or define unless
	!HAVE_conditional_arithmetic.
	(returnjump_p_1, delete_prior_computation): Add static prototypes.

	* mips-tdump.c (fatal, fancy_abort, main): Add extern prototypes.

	* recog.c (offsettable_address_p): Prototype function pointer.
	(preprocess_constraints): Call memset, not bzero.

	* tree.c (tree_node_kind_names): Constify a char*.  Make static.
	(gcc_obstack_init): Don't declare.
	(fix_sizetype): Add static prototype.
	(gcc_obstack_init): Use prototype casts in call to _obstack_begin.
	(tree_cons): Call memset, not bzero.

	* varasm.c (remove_from_pending_weak_list): Wrap declaration and
	definition in macro ASM_WEAKEN_LABEL.
	(mark_const_hash_entry): Add static prototype.

Tue Sep 14 12:22:50 1999  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* c-lex.c (handle_generic_pragma): Remove unused variable `c'.

	* unroll.c (find_common_reg_term, subtract_reg_term,
	loop_find_equiv_value): Add static prototypes.
	(unroll_loop): Wrap variable `prev' in macro HAVE_cc0.
	(copy_loop_body): Remove unreachable break statement.

	* sparc.c (sparc_va_arg): Remove unused variable `tmp'.

	* sparc.h (sparc_va_start, sparc_va_arg): Add extern prototypes.

Tue Sep 14 15:28:00 1999  Bernd Schmidt  <bernds@cygnus.co.uk>

	Undo some changes from the gcc2 merge:
	* rtl.def (CONSTANT_P_RTX): Fix the comment for this rtx code.
	* emit-rtl.c (gen_rtx_REG): Don't test special reg rtx's for null
	pointers.

	Undo this change:
	Sat Oct  3 07:20:28 1998  Stephen L Moshier  <moshier@world.std.com>
	* emit-rtl.c (gen_lowpart_common): Disable optimization of
	initialized float-int union if the value is a NaN.

Tue Sep 14 04:03:44 1999  Mumit Khan  <khan@xraylith.wisc.edu>

	* gthr-win32.h: New file.

	* i386/winnt.c (i386_pe_valid_decl_attribute_p): Recognize
	shared as a valid attribute.
	* i386/cygwin.h (ASM_OUTPUT_SECTION): Handle shared attribute.
	* extend.texi: Document `shared' variable attribute.

Tue Sep 14 04:01:46 1999  Loren Rittle  <ljrittle@acm.org>

	* configure.in: Handle --enable-threads on FreeBSD.
	* configure: Rebuit.

Tue Sep 14 03:58:44 1999  Andreas Jaeger  <aj@arthur.rhein-neckar.de>

	* configure.in: Add crtbeginS.o, crtendS.o for mips-linux; add
	thread support.
	* configure: Rebuilt.

Tue Sep 14 03:47:23 1999  Joel Sherrill <joel@OARcorp.com>
			  Charles-Antoine Gauthier <charles.gauthier@iit.nrc.ca>
			  Rosimildo DaSilva <rdasilva@connecttel.com>

	* configure.in (m68k-*-rtemscoff*): Added.
	* configure.in (mips64orion-*-rtems*): Converted to ELF.
	* configure.in (sparc-*-rtemsaout*): Added as alias for old
	sparc-rtems configuration.
	* configure.in (sparc-*-rtemself*): Added.
	* configure.in (sparc-*-rtems*): Now ELF not a.out.
	* config/i386/rtems.h: Added comment.
	* config/sparc/rtemself.h: New file.

	* configure.in (m68k-rtemself): Added.
	* config/elfos.h: Added ifndef wrapper for DWARF2_DEBUGGING_INFO
	and DWARF_DEBUGGING_INFO.
	* config/m68k/crti.s: New file.
	* config/m68k/crtn.s: New file.
	* config/m68k/t-crtstuff: New file.
	* config/m68k/rtemself.h: New file.

	* configure.in (i[[34567]]86-*-rtemself*): Now uses crtstuff for
	global ctor/dtor and C++ exception handling.
	* config/i386/rtemself.h: Now uses crtstuff (crti.o + crtbegin.o)
	for STARTFILE_SPEC and crtstuff (crtend.o + crtn.o) for
	ENDFILE_SPEC.
	* config/i386/t-rtems-i386: New File.

Tue Sep 14 09:47:41 1999  Andreas Schwab  <schwab@suse.de>

	* stmt.c (expand_end_case): Return right away if the case stack is
	empty.

Tue Sep 14 01:47:19 1999  Jeffrey A Law  (law@cygnus.com)

	* Makefile.in (version.c): Remove rule incorrectly brought in from
	the gcc2 merge.

Tue Sep 14 01:42:27 1999  Marc Espie <espie@cvs.openbsd.org>

	* Makefile.in:  Prepend $(SHELL) to move-if-change calls.
	* msdos/top.sed:  Take into account a prepended $(SHELL) to
	move-if-change.
	* winnt/config-nt.sed:  Likewise.  Kill bogus substitution.

	* objc/Make-lang.in: Prepend $(SHELL) to move-if-change calls.

Tue Sep 14 01:38:52 1999  J"orn Rennecke <amylaar@cygnus.co.uk>

	* regmove.c (fixup_match_1): Don't change an unchanging register.
	(stable_but_for_p): Renamed to:
	(stable_and_no_regs_but_for_p).  Reject unchanging registers too.
	Changed all callers.

Tue Sep 14 01:33:15 1999  Andreas Schwab  <schwab@suse.de>

	* loop.c (strength_reduce): Don't call reg_used_between_p if the
	insn from BL2 is after the insn from BL.

Mon Sep 13 21:06:01 1999  Richard Henderson  <rth@cygnus.com>

	* recog.h (INSN_OUTPUT_FORMAT_*): New.
	(struct insn_data): Merge `template' and `outfun' into `output'.
	Add `output_format'.
	* genoutput.c (INSN_OUTPUT_FORMAT_*): New.
	(struct data): Remove `outfun'; add `output_format'.
	(name_for_index): Remove declaration.
	(output_insn_data): Handle output formats.
	(process_template): Emit the bare array for @.
	(gen_expand, gen_split): Set output_format to NONE.
	* output.h (get_insn_template): Declare.
	* final.c (get_insn_template): New.
	(final_scan_insn): Use it.
	* toplev.c (compile_file): Likewise.

	* c4x/c4x.c (c4x_process_after_reload): Likewise.
	* i860/i860.c (output_delayed_branch): Likewise.
	(output_delay_insn): Likewise.

1999-09-13  Alexandre Oliva  <oliva@lsd.ic.unicamp.br>

	* rtl.c (obstack_alloc_rtx): Removed.

1999-09-13 17:03 -0700  Zack Weinberg  <zack@bitmover.com>

	* config/gmicro/gmicro.md: Disable move DF->DI anonymous pattern.

Mon Sep 13 15:21:46 1999  Richard Henderson  <rth@cygnus.com>

	* i386.c (call_insn_operand): Reject const_int.
	(expander_call_insn_operand): Use call_insn_operand.

Mon Sep 13 17:44:28 1999  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* gcc.c (getrusage): Wrap prototype arguments in PROTO().

1999-09-13 12:18 -0700  Zack Weinberg  <zack@bitmover.com>

	* config/i370/i370.md (mulsi, divsi, modsi anonymous insns):
	Use DImode operation.

1999-09-13 12:13 -0700  Zack Weinberg  <zack@bitmover.com>

	* gcc.c: Include sys/resource.h.
	(report_times): New flag.
	(execute):  If report_times is set, calculate and report the
	CPU time consumed by each subprocess.

	(rus, prus): New globals.
	(option_map): Add --time.
	(display_help): Document -time.
	(process_command): Set report_times if -time is given.
	Turn off -pipe if -time is given.

	* invoke.texi: Document new option -time.

	* configure.in: Check for getrusage.  Check if we have to
	prototype getrusage.
	* acconfig.h: Add NEED_DECLARATION_GETRUSAGE.
	* configure: Regenerate.
	* config.in: Regenerate.

Mon Sep 13 12:57:06 1999  Dave Brolley  <brolley@cygnus.com>

	* cppinit.c (append_include_chain): Initialize 'next' and 'alloc'
	fields.

Mon Sep 13 10:01:33 1999  Nick Clifton  <nickc@cygnus.com>

	* config/fp-bit.c: Define L_thenan_sf or L_thenan_df (as
	appropriate) if FINE_GRAINED_LIBRARIES is not defined.
	(nan): Return _thenan_sf or _thenan_df as appropriate.
	(L_thenan_sf): Define _thenan_sf.
	(L_thenan_df): Define _thenan_df.

	* Makefile.in (FPBIT_FUNCS): Add _thenan_sf.
	(DPBIT_FUNCS): Add _thenan_df.

Mon Sep 13 09:38:53 1999  Andreas Schwab  <schwab@suse.de>

	* tree.c (fix_sizetype):  Exchange the types for TYPE_SIZE and
	TYPE_SIZE_UNIT.

Sun Sep 12 23:28:20 1999  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* Makefile.in (gcc.o, gccspec.o, cppspec.o): Depend on gcc.h.

	* gcc.h: New file.
	(lang_specific_driver): Don't take a function pointer parameter.
	All callers changed.

	* gcc.c: Include gcc.h.
	(do_spec, fancy_abort,lang_specific_driver,lang_specific_pre_link,
	lang_specific_extra_outfiles, fatal): Don't declare.
	(multilib_defaults_raw): Constify.
	(read_specs): Call memset, rather than bzero.
	(main): Call return, not exit.
	(lookup_compiler): Call memcpy, not bcopy.
	(fatal): Make extern.

	* cppspec.c: Include gcc.h.
	(lang_specific_driver): Initialize variable `quote'.  Constify a
	char*.  All calls to the function pointer parameter now
	explicitly call `fatal'.

	* gccspec.c (lang_specific_driver): Include gcc.h.

Sun Sep 12 19:52:10 1999  Richard Earnshaw <rearnsha@arm.com>

	* arm.c (note_invalid_constants): Use recog_data.operand_type
	for recog_op_type.

Sun Sep 12 15:53:20 1999  Bernd Schmidt  <bernds@cygnus.co.uk>

	* tree.h (build_common_tree_nodes, build_common_tree_nodes_2):
	Declare.

	* reload.h (reload_in, reload_out, reload_in_reg, reload_out_reg,
	reload_reg_class, reload_inmode, reload_outmode, reload_optional,
	reload_nongroup, reload_inc, reload_opnum, reload_secondary_p,
	reload_secondary_in_reload, reload_secondary_out_reload,
	reload_secondary_in_icode, reload_secondary_out_icode,
	reload_reg_rtx, reload_when_needed): Delete declarations.
	(struct reload): New structure.
	(rld): Declare new array.
	* reload.c (reload_in, reload_out, reload_in_reg, reload_out_reg,
	reload_reg_class, reload_inmode, reload_outmode, reload_optional,
	reload_nongroup, reload_inc, reload_opnum, reload_secondary_p,
	reload_secondary_in_reload, reload_secondary_out_reload,
	reload_secondary_in_icode, reload_secondary_out_icode,
	reload_reg_rtx, reload_when_needed): Delete definitions.
	(rld): New array.
	(whole file): Replace uses of the deleted arrays with uses of rld.
	* reload1.c (whole file): Replace uses of the deleted arrays with
	uses of rld.
	(choose_reload_regs): Copy in/out of save_reload_reg_rtx with
	explicit loops, not with bcopy.

Sun Sep 12 05:00:24 1999  Richard Henderson  <rth@cygnus.com>

	* recog.h (insn_template, insn_outfun, insn_n_operands, insn_n_dups,
	insn_n_alternatives, insn_operand_constraint, insn_operand_address_p,
	insn_operand_mode, insn_operand_strict_low, insn_operand_predicate,
	insn_name): Delete and consolidate into new structures.
	(insn_operand_predicate_fn): New.
	(insn_output_fn): New.
	(insn_gen_fn): New.
	(struct insn_operand_data): New.
	(struct insn_data): New.
	(insn_data): New.
	(OUT_FCN): Update for insn_data change.
	* builtins.c (expand_builtin_strlen): Likewise.
	(expand_builtin_memcmp): Likewise.
	* combine.c (make_extraction, simplify_comparison): Likewise.
	* cse.c (canon_reg, cse_insn): Likewise.
	* explow.c (allocate_dynamic_stack_space, probe_stack_range): Likewise.
	* expmed.c (store_bit_field, extract_bit_field): Likewise.
	(emit_store_flag): Likewise.
	* expr.c (convert_move, emit_block_move): Likewise.
	(clear_storage, emit_push_insn, expand_increment): Likewise.
	(do_store_flag): Likewise.
	* expr.h (GEN_FCN): Likewise.
	(insn_gen_function): Die.
	* final.c (final_scan_insn): Update for insn_data change.
	(output_asm_name): Likewise.
	* function.c (fixup_var_refs_1): Likewise.
	* loop.c (check_dbra_loop): Likewise.
	* optabs.c (expand_binop, expand_twoval_binop): Likewise.
	(expand_unop, expand_complex_abs, emit_unop_insn): Likewise.
	(prepare_cmp_insn, prepare_operand, emit_indirect_jump): Likewise.
	(emit_conditional_move, gen_add2_insn, gen_sub2_insn): Likewise.
	* recog.c (validate_replace_rtx_1, extract_insn): Likewise.
	* regmove.c (gen_add3_insn): Likewise.
	* reload.c (push_secondary_reload, combine_reloads): Likewise.
	(find_reloads, find_reloads_address_1): Likewise.
	(debug_reload_to_stream): Likewise.
	* reload1.c (emit_reload_insns, gen_reload): Likewise.
	* stmt.c (expand_end_case): Likewise.
	* toplev.c (compile_file): Likewise.

	* c4x/c4x.c (c4x_process_after_reload): Likewise.
	* i860/i860.c (output_delayed_branch, output_delay_insn): Likewise.

	* print-rtl.c (insn_name_ptr): Remove declaration.
	(get_insn_name): Declare.
	(print_rtx): Use it.
	* genoutput.c (insn_name_ptr): Remove.
	(next_operand_number): New.
	(struct operand_data): New.
	(null_operand, odata, odata_end): New.
	(struct data): Use struct operand_data.
	(idata, idata_end): Renamed from insn_data and end_of_insn_data.
	(get_insn_name): Renamed from name_for_index.
	(output_prologue): Define NO_MD_PROTOTYPES.
	(output_predicate_decls): Break out from output_epilogue.
	Iterate over the operands list.
	(output_operand_data): Break out from output_epilogue.  Emit
	just the operands list.
	(output_insn_data): Break out from output_epilogue.  Emit just
	the insn data.
	(output_epilogue): Remove.
	(output_get_insn_name): New.
	(constraints, op_n_alternatives, predicates, address_p): Die.
	(modes, strict_low, seen): Die.
	(scan_operands): Take new param `d' instead of writing to
	seven global variables.
	(compare_operands): New.
	(place_operands): New.
	(validate_insn_alternatives): Update for struct data change.
	(gen_insn): Don't zero or copy 7 global arrays.  Update for
	scan_operands; call place_operands.
	(gen_peephole, gen_expand, gen_split): Likewise.
	(main): Update for new output routines.

	* genattr.c (insn_name_ptr): Remove.
	(get_insn_name): New function.
	* genattrtab.c, gencodes.c, genconfig.c, genemit.c: Likewise.
	* genextract.c, genflags.c, genopinit.c, genpeep.c: Likewise.
	* genrecog.c: Likewise.

	* alpha.md (adddi3): Make `pattern' array static.

Sun Sep 12 22:05:21 1999  Michael Hayes  <m.hayes@elec.canterbury.ac.nz>

	* config/c4x/c4x.h (c4x_rpts_cycles_string,
	c4x_cpu_version_string): Constify char *.
	* config/c4x/c4x.c (c4x_rpts_cycles_string,
	c4x_cpu_version_string): Likewise.

Sat Sep 11 23:28:33 1999  Richard Henderson  <rth@cygnus.com>

	* tree.c (save_tree_status): Revert 10 Sep change.
	(restore_tree_status): Likewise.  Call obstack_free with NULL
	before freeing the obstack proper.

Sat Sep 11 23:23:46 1999  Richard Henderson  <rth@cygnus.com>

	* cse.c (cse_main): If gc'ing, collect around cse_basic_block.

	* ggc-simple.c (ggc_pop_context): Fold outstanding bytes into
	surrounding context.

Sat Sep 11 19:52:43 1999  Mark Mitchell  <mark@codesourcery.com>

	* tree.c (type_hash_canon): Put all types in the hash-table, when
	GC'ing.

Sat Sep 11 18:37:04 1999  Richard Henderson  <rth@cygnus.com>

	* recog.h (struct recog_data, recog_data): New.
	(recog_foo variables): Kill.
	* recog.c (recog_operand, recog_operand_loc): Kill.
	(recog_dup_loc, recog_dup_num, recog_n_operands): Kill.
	(recog_n_dups, recog_n_alternatives, recog_operand_mode): Kill.
	(recog_constraints, recog_op_type, recog_operand_address_p): Kill.
	(recog_data): Define.
	(extract_insn): Update all recog_foo references to use recog_data.
	(preprocess_constraints, constrain_operands): Likewise.
	* final.c (final_scan_insn, cleanup_subreg_operands): Likewise.
	* genattrtab.c (main): Likewise.
	* genextract.c (main): Likewise.
	* genoutput.c: Likewise.
	* genrecog.c (write_subroutine, main): Likewise.
	* local-alloc.c (block_alloc): Likewise.
	* reg-stack.c (record_asm_reg_life, subst_asm_stack_regs): Likewise.
	* regclass.c (scan_one_insn, record_reg_classes): Likewise.
	* regmove.c (regmove_optimize, find_matches, fixup_match_1): Likewise.
	* reload.c (find_reloads, find_reloads_toplev): Likewise.
	* reload1.c (maybe_fix_stack_asms, eliminate_regs_in_insn): Likewise.
	(reload_cse_simplify_operands): Likewise.

	* arc/arc.c (arc_final_prescan_insn): Likewise.
	* arm/arm.c (note_invalid_constants, arm_final_prescan_insn): Likewise.
	* h8300/h8300.c (notice_update_cc): Likewise.
	* i386/i386.c (ix86_attr_length_default, ix86_agi_dependant): Likewise.
	* i860/i860.c (output_delayed_branch, output_delay_insn): Likewise.
	* mn10200/mn10200.c (notice_update_cc): Likewise.
	* mn10300/mn10300.c (notice_update_cc): Likewise.
	* romp/romp.c (update_cc): Likewise.
	* sparc/sparc.c (check_pic): Likewise.
	* v850/v850.c (notice_update_cc): Likewise.

	* genemit.c (main): Don't declare recog_operand.

Sat Sep 11 12:41:55 1999  Alex Samuel  <samuel@codesourcery.com>

	* ggc.h (rtvec_def): Forward declare.
	(tree_node): Likewise.
	(ggc_root): Define.
	(roots): Declare.
	(ggc_set_mark_rtx): Add prototype.
	(ggc_set_mark_rtvec): Likewise.
	(ggc_set_mark_tree): Likewise.
	* ggc-simple.c (ggc_root): Don't define.
	(roots): Don't declare.
	(ggc_mark_rtx): Remove.
	(ggc_mark_rtvec): Likewise.
	(ggc_mark_tree): Likewise.
	(ggc_mark_varray): Likewise.
	(ggc_mark_tree_hash_table_entry): Likewise.
	(ggc_mark_tree_hash_table): Likewise.
	(ggc_set_mart_rtx): New function.
	(ggc_set_mark_rtvec): Likewise.
	(ggc_set_mark_tree): Likewise.
	(ggc_add_root): Remove.
	(ggc_add_rtx_root): Likewise.
	(ggc_remove_tree_root): Likewise.
	(ggc_add_string_root): Likewise.
	(ggc_add_tree_varray_root): Likewise.
	(ggc_add_tree_hash_table_root): Likewise.
	(ggc_del_root): Likewise.
	(ggc_mark_rtx_ptr): Likewise.
	(ggc_mark_tree_ptr): Likewise.
	(ggc_mark_string_ptr): Likewise.
	(ggc_mark_tree_varray_ptr): Likewise.
	(ggc_mark_tree_hash_table_ptr): Likewise.
	* ggc-common.c: New file.
	* Makefile.in (OBJS): Add ggc-common.o.
	(ggc-common.o): List dependencies.

1999-09-10 22:37 -0700  Zack Weinberg  <zack@bitmover.com>

	* cppalloc.c (xstrdup): Use memcpy.
	* cpperror.c (cpp_print_containing_files): Don't use
	cpp_notice.
	* cpplib.c (conditional_skip): Set temp->lineno.
	(do_endif): Make error message less obscure.
	(if_directive_name): New function.
	(cpp_get_token [case EOF]): Unwind the if stack and generate
	error messages for each unterminated conditional in this file.
	(parse_string):  Do not behave differently if -traditional.

Fri Sep 10 14:04:07 1999  Richard Henderson  <rth@cygnus.com>

	* builtins.c (expand_builtin_va_arg): Cope with an array-type
	va_list decomposing to pointer-type.
	* rs6000.c (rs6000_va_start) Unwrap the ARRAY_TYPE to get at fields.
	(rs6000_va_arg): Likewise.

Fri Sep 10 13:21:21 1999  Jim Wilson  <wilson@cygnus.com>

	* except.c (start_dynamic_handler): Compute size using
	STACK_SAVEAREA_MODE.

Fri Sep 10 16:01:23 1999  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* protoize.c: Remove various __STDC__ and POSIX hacks.  Don't
	include directory headers.  Don't define strrchr.  Don't provide
	my_* replacement functions.  Prefer PTR over `pointer_type'.
	Don't prototype system functions.  Don't redefine getopt.

	(shortpath, fancy_abort, notice, savestring, dupnstr, substr,
	safe_read, safe_write, save_pointers, restore_pointers,
	is_id_char, in_system_include_dir, directory_specified_p,
	file_excluded_p, unexpand_if_needed, abspath, check_aux_info,
	find_corresponding_lparen, referenced_file_is_newer,
	save_def_or_dec, munge_compile_params, gen_aux_info_file,
	process_aux_info_file, identify_lineno, check_source,
	seek_to_line, forward_to_next_token_char, output_bytes,
	output_string, output_up_to, other_variable_style_function,
	find_rightmost_formals_list, do_cleaning, careful_find_l_paren,
	do_processing, is_syscalls_file, rename_c_file, find_extern_def,
	find_static_definition, connect_defs_and_decs, add_local_decl,
	add_global_decls, needs_to_be_converted, visit_each_hash_node,
	add_symbol, lookup, free_def_dec, find_file, reverse_def_dec_list,
	edit_fn_declaration, edit_formals_lists, edit_fn_definition,
	scan_for_missed_items, edit_file, string_list_cons): Add static
	prototypes.
	(standard_exec_prefix, target_machine, target_version,
	default_syscalls_dir, string_list, string_list_cons, find_file,
	do_cleaning): Constify a char*.
	(safe_read, safe_write): Use PTR, not a char*.
	(is_id_char): Take an int, not a char.
	(main): Add prototype.  Call return, not exit.

Fri Sep 10 16:48:26 1999  Andrew Haley  <aph@cygnus.com>

	* tree.c (type_hash_lookup): Check for equal TYPE_ALIGN fields
	when comparing types.

Fri Sep 10 08:43:32 1999  Richard Henderson  <rth@cygnus.com>

	* loop.c (basic_induction_var): Typo NULL_RTX -> NULL.
	(strength_reduce): Release the varrays from the no-bivs early exit.

	* reload1.c (order_regs_for_reload): Init hard_reg_n_uses before
	the loop over the registers.

	* tree.c (save_tree_status): Set maybepermanent_firstobj NULL
	for a new obstack.
	(restore_tree_status): Check that instead when freeing the obstack.

Wed Sep  8 16:12:04 1999  Andrew Haley  <aph@cygnus.com>

	* alias.c (rtx_equal_for_memref_p): Allow CONST_DOUBLEs to be used
	as pointers.

Fri Sep 10 11:58:55 1999  Bernd Schmidt  <bernds@cygnus.co.uk>

	* i386.md (ashlqi3): For NON_QI_REG_P regs, use sall.  Fix some
	operand size modifiers.

Fri Sep 10 10:32:32 1999  Bernd Schmidt  <bernds@cygnus.co.uk>

	* c-common.c (c_common_nodes_and_builtins): Don't build
	va_list_type_node.
	* c-common.h (enum c_tree_index and related accesor macros): Remove
	everything now declared in tree.h.
	* c-decl.c (CHAR_TYPE_SIZE, SHORT_TYPE_SIZE, INT_TYPE_SIZE,
	LONG_TYPE_SIZE, LONG_LONG_TYPE_SIZE, WCHAR_UNSIGNED, FLOAT_TYPE_SIZE,
	DOUBLE_TYPE_SIZE, LONG_DOUBLE_TYPE_SIZE): Don't provide defaults.
	(error_mark_node, void_type_node, char_type_node, integer_type_node,
	unsigned_type_node, ptr_type_node, va_list_type_node,
	integer_zero_node, null_pointer_node, integer_one_node): Delete.
	(init_decl_processing): Call build_common_tree_nodes and
	build_common_tree_nodes_2 instead of building their nodes here.
	Don't add roots for these nodes.
	* stor-layout.c (size_zero_node, size_one_node): Delete.
	(set_sizetype): Make a new node for bitsizetype each time.
	* tree.c (global_trees): New variable.
	(init_obstacks): Add a gc root for it.
	(CHAR_TYPE_SIZE, SHORT_TYPE_SIZE, INT_TYPE_SIZE,
	LONG_TYPE_SIZE, LONG_LONG_TYPE_SIZE, FLOAT_TYPE_SIZE,
	DOUBLE_TYPE_SIZE, LONG_DOUBLE_TYPE_SIZE): Provide defaults.
	(build_common_tree_nodes): New function.
	(fix_sizetype): New function.
	(build_common_tree_nodes_2): New function.
	* tree.h (enum tree_index): New.
	(global_trees): Declare.
	Add accessor macros for all nodes now moved to global_trees.
	Delete their declarations.

Thu Sep  9 20:15:46 1999  Richard Henderson  <rth@cygnus.com>

	* c-decl.c (finish_function): When processing a nested function,
	push and pop GC context around rest_of_compilation.

Thu Sep  9 16:42:06 1999  Richard Henderson  <rth@cygnus.com>

	* i386.c (override_options): Remove ppro, pentium2, and p2 as aliases.
	Default ix86_arch to PROCESSOR_I386.
	* i386.h (CC1_CPU_SPEC): Don't add -march=foo.  Remove -mno-foo.
	(CPP_486_SPEC, CPP_586_SPEC, CPP_686_SPEC): Delete.
	(CPP_CPU_DEFAULT_SPEC): Define to __tune_foo__.
	(CC1_CPU_SPEC): Make -march=foo define __foo__, and provide
	__tune_foo__ if no -mcpu.  Make -mcpu=bar define __tune_bar__.
	(EXTRA_SPECS): Remove deleted specs.

Thu Sep  9 16:03:06 1999  Richard Henderson  <rth@cygnus.com>

	* function.c (assign_stack_local_1): Allocate from
	function->x_frame_offset, not frame_offset.

Thu Sep  9 14:36:31 1999  Mark Mitchell  <mark@codesourcery.com>

	* ggc.h (lang_cleanup_tree): Remove.
	* gcc-simple.c (ggc_free_tree): Don't call lang_cleanup_tree.
	* ggc-callbacks.c (lang_cleanup_tree): Remove.

	* c-decl.c (finish_struct): Use ggc_alloc to allocate
	TYPE_LANG_SPECIFIC when garbage collecting.
	(lang_mark_tree): Mark TYPE_LANG_SPECIFIC.
	(lang_cleanup_tree): Remove.

Thu Sep  9 14:23:02 1999  Jason Merrill  <jason@yorick.cygnus.com>

	* defaults.h (EH_FRAME_SECTION, EH_FRAME_SECTION_ASM_OP): Define here.
	* crtstuff.c: Not here.
	* dwarf2out.c: Or here.
	* libgcc2.c (__do_global_ctors, __do_global_dtors): Handle EH frame
	info.

Thu Sep  9 09:40:58 1999  Mark Mitchell  <mark@codesourcery.com>

	* function.h (free_after_compilation): Remove decl parameter.
	(free_varasm_status0: Likewise.
	(free_emit_status): Likewise.
	(free_stmt_status): Likewise.
	(free_after_compilation): Likewise.
	(init_lang_status): New variable.
	(free_lang_status): Likewise.
	* emit-rtl.c (free_emit_status): Make decl parameter implicit.
	* function.c (init_lang_status): New variable.
	(free_lang_status): Likewise.
	(push_function_context_to): Don't set function::decl here.
	(free_after_copmilation): Make decl parameter implicit.  Call
	free_lang_status if defined.
	(prepare_function_start): Call init_lang_status if defined.
	(init_function_start): Set function::decl here.
	* profile.c (output_func_start_profiler): Don't call pushdecl
	until we've actually started the function.
	* stmt.c (free_stmt_status): Make decl parameter implicit.
	* toplev.c (rest_of_compilation): Don't pass decl to
	free_after_compilation.
	* varasm.c (free_varasm_status): Likewise.

Thu Sep  9 17:23:19 1999  Bernd Schmidt  <bernds@cygnus.co.uk>

	* except.c (call_get_eh_context): Add root when allocating static
	tree variable.

Thu Sep  9 15:24:59 BST 1999  Richard Earnshaw <rearnsha@arm.com>

	* arm.c: Include "ggc.h".
	(arm_add_gc_roots): New function.
	(arm_override_options): Call it.
	(aof_pic_entry): Add a GC root for aof_pic_label when it's allocated.

	* arm.md (define_asm_attributes): Add a pool_range attribute.

Thu Sep  9 12:32:57 BST 1999  Nathan Sidwell  <nathan@acm.org>

	* extend.texi (Volatiles): New node.

Thu Sep  9 03:37:31 1999  Richard Henderson  <rth@cygnus.com>

	* ggc-simple.c (IS_MARKED, IGNORE_MARK): New.
	(GGC_ANY_MAGIC, GGC_ANY_MAGIC_MARK): New.
	(struct ggc_any): Replace `mark' with `magic_mark'.
	(ggc_alloc_string): Use memcpy, not bcopy.
	(ggc_alloc_any): Set magic_mark.  Update bytes_alloced_since_gc.
	(ggc_free_{rtx,rtvec,tree,string}): Mark inline.
	(ggc_free_any): New.
	(ggc_mark_string): Use IGNORE_MARK.  Calc back to struct gcc_string.
	(ggc_mark): Use IGNORE_MARK.  Abort if magic doesn't match.
	(ggc_collect): Re-enable collection avoidance.  Use GGC_ANY_MARK.
	Use IS_MARKED. Use ggc_free_any.

1999-09-09  Scott Bambrough <scottb@netwinder.org>

	* config/arm/linux-elf.h: define NO_IMPLICIT_EXTERN_C

Thu Sep  9 01:55:21 1999  Richard Henderson  <rth@cygnus.com>

	* toplev.c (main): Always init_ggc.

Wed Sep  8 23:53:22 1999  Richard Henderson  <rth@cygnus.com>

	* except.c (find_all_handler_type_matches): Free the list if
	we found no matches.

	* combine.c (SUBST): Break out to a real function do_SUBST.
	(SUBST_INT): Likewise.
	* gcse.c (free_pre_mem): Free `temp_bitmap'.
	(pre_insert): Free `inserted'.
	* loop.c (basic_induction_var): Always set `location'.

	* function.c (expand_function_end): Add initial_trampoline as a root.
	* rtl.h (init_varasm_once): Declare.
	* toplev.c (compile_file): Call it.
	* ggc-simple.c (ggc_mark_string_ptr): New.
	(ggc_add_string_root): New.
	(ggc_collect): Disable collection avoidance temporarily.
	* ggc.h (ggc_add_string_root): Declare.
	* except.c (create_rethrow_ref): Use ggc_alloc_string.
	* optabs.c (init_libfuncs): Likewise.
	* varasm.c (named_section): Use ggc_alloc_string.
	(make_function_rtl): Likewise.
	(make_decl_rtl): Likewise.
	(assemble_static_space): Likewise.
	(assemble_trampoline_template): Likewise.
	(output_constant_def): Likewise.
	(force_const_mem): Likewise.
	(mark_const_hash_entry): New.
	(mark_pool_sym_hash_table): New.
	(mark_varasm_state): Use it.
	(init_varasm_once): New.

	* expr.h (init_one_libfunc): Declare.
	* optabs.c (init_one_libfunc): New.
	(init_optabs): Use it.
	* config/gofast.h: Likewise.
	* config/sparc/sol2.h (INIT_SUBTARGET_OPTABS): Likewise.
	* config/sparc/sparc.h (INIT_TARGET_OPTABS): Likewise.

Thu Sep  9 13:46:06 1999  Geoffrey Keating  <geoffk@cygnus.com>

	* Makefile.in (cppexp.o): Depend on cpphash.h.
	* cppexp.c (cpp_lex): Handle `defined (xxx)' for poisoned xxx.
	Include cpphash.h.
	* cpphash.c (special_symbol): Handle plain `xxx' for poisoned xxx.
	* cpplib.c (do_define): Generalize to handle poisoned definitions,
	redefining poisoned identifiers, etc.
	(do_undef): Don't allow poisoned identifiers to be undefined.
	(do_pragma): Add #pragma poison.
	(do_xifdef): Handle `#ifdef xxx' for poisoned xxx.

	* cccp.c: Add T_POISON node type.
	(special_symbol): Handle `defined(xxx)' and plain `xxx' for
	poisoned xxx.
	(do_define): Generalize to handle poisoned definitions,
	redefining poisoned identifiers, etc.
	(do_undef): Don't allow poisoned identifiers to be undefined.
	(do_pragma): Add #pragma poison.
	(do_xifdef): Handle `#ifdef xxx' for poisoned xxx.

	* c-pragma.c (handle_pragma_token): Ignore #pragma poison.
	* c-pragma.h: Add ps_poison state.  We now always have generic
	pragmas.

Wed Sep  8 20:30:42 1999  Mark Mitchell  <mark@codesourcery.com>

	* ggc.h (ggc_alloc): New function.
	(ggc_mark): Likewise.
	* ggc-simple.c (ggc_any): New structure.
	(ggc_status): Add anys.
	(n_anys_collected): New variable.
	(ggc_alloc): Define.
	(ggc_mark): Likewise.
	(ggc_collect): Collect the anys.

Wed Sep  8 20:15:14 1999  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* c-decl.c (mark_binding_level): Make static to match prototype.

Wed Sep  8 16:41:27 1999  Richard Henderson  <rth@cygnus.com>

	* flow.c (new_insn_dead_notes): Don't early out for preexisting regs.

Wed Sep  8 16:07:52 1999  Richard Henderson  <rth@cygnus.com>

	* gengenrtl.c (CONST_DOUBLE_FORMAT): Take the size REAL_ARITHMETIC
	will use into account.  Expand the max width to 5.
	* rtl.c: Likewise.

Wed Sep  8 16:01:14 1999  Richard Henderson  <rth@cygnus.com>

	* ggc-simple.c (ggc_free_rtx): Poison the correct amount
	for the rtx length.

Wed Sep  8 15:23:54 1999  Richard Henderson  <rth@cygnus.com>

	* alpha.md (call value patterns): Remove the result predicates.

Wed Sep  8 13:35:38 1999  Richard Henderson  <rth@cygnus.com>

	* Makefile.in (stmp-fixinc): Remove extraneous exit 1 from
	last change.

Wed Sep  8 15:32:16 1999  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* system.h (sbrk, malloc, calloc, realloc): Backup prototypes
	changed from extern char *, to extern PTR.  Also fix typo in
	NEED_DECLARATION_REALLOC test.

	* mips-tdump.c (malloc, calloc, realloc): Don't prototype.

Wed Sep  8 11:40:47 1999  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* gansidecl.h (__attribute__, ATTRIBUTE_UNUSED_LABEL,
	ATTRIBUTE_UNUSED, ATTRIBUTE_NORETURN, ATTRIBUTE_PRINTF,
	ATTRIBUTE_PRINTF_1, ATTRIBUTE_PRINTF_2, ATTRIBUTE_PRINTF_3,
	ATTRIBUTE_PRINTF_4, ATTRIBUTE_PRINTF_5, GENERIC_PTR): Delete.

	* c-decl.c (field_decl_cmp): Use PTR instead of GENERIC_PTR.

	* cccp.c (pcfinclude): Likewise.

	* global.c (allocno_compare): Likewise.

	* haifa-sched.c (rank_for_schedule): Likewise.

	* local-alloc.c (qty_sugg_compare_1, qty_compare_1): Likewise.

	* reload1.c (hard_reg_use_compare, reload_reg_class_lower): Likewise.

	* stupid.c (stupid_reg_compare): Likewise.

	* tree.c (_obstack_allocated_p): Likewise.

	* varray.h (varray_data_tag, VARRAY_GENERIC_PTR_INIT): Likewise.

1999-09-08  Bruce Korb  autogen@linuxbox.com

	* Makefile.in: Give the hapless gperf user a hint about
	why "gperf -F" fails.

Wed Sep  8 04:43:22 1999  Richard Henderson  <rth@cygnus.com>

	* lists.c: Include ggc.h.
	(zap_lists): New.
	(init_EXPR_INSN_LIST_cache): Install it.

	* ggc-simple.c (init_ggc): Absorb the old init.
	(ggc_push_context): Use xcalloc.
	(ggc_alloc_rtx, ggc_alloc_rtvec, ggc_alloc_tree): Likewise.
	(ggc_collect): Add [rvts] tags to the collection stats.

Wed Sep  8 11:14:25 1999  Andreas Schwab  <schwab@suse.de>

	* cccp.c (main): Fix handling of -include and -imacros options.

Wed Sep  8 02:23:08 1999  Jeffrey A Law  (law@cygnus.com)

	* cpplib.c (cpp_push_buffer): Fix order of arguments.

Wed Sep  8 04:44:09 1999  Alexandre Oliva  <oliva@dcc.unicamp.br>

	* rtl.h (obstack_alloc_rtx): Removed, it's now static in
	genrtl.c.

Wed Sep  8 00:33:43 1999  Alasdair Baird  <alasdair@wildcat.demon.co.uk>

	* flow.c (insn_dead_p): Use XEXP rather than SUBREG_REG.
	* haifa-sched.c (sched_analyze_1): Use XEXP rather than SUBREG_REG
	and SET_DEST. Update comment.

Wed Sep  8 18:55:17 1999  Michael Hayes  <m.hayes@elec.canterbury.ac.nz>

	* config/c4x/c4x.c: Include ggc.h.
	(c4x_add_gc_roots): New function.
	(c4x_override_options): Call c4x_add_gc_roots.

Wed Sep  8 00:00:16 1999  Richard Henderson  <rth@cygnus.com>

	* defaults.h (TARGET_ESC): Move ...
	* system.h: ... here, where Linas had it in the first place.  Silly me.

Tue Sep  7 23:46:35 1999  Linas Vepstas  <linas@linas.org>

	* c-common.c: Use ISGRAPH, ISLOWER, toupper.
	* c-lex.c, cccp.c, cexp.c, cexp.y, cppexp.c, dwarf2out.c, genattr.c,
	genattrtab.c, genemit.c, genextract.c, genpeep.c, tree.c: Likewise.
	* system.h (IN_CTYPE_DOMAIN): Define to 1 if HOST_EBCDIC.
	* defaults.h (TARGET_ESC): Add default.

Tue Sep  7 23:36:59 1999  Linas Vepstas  <linas@linas.org>

	* configure.in: add i370-*-openedition, i370-*-mvs and
	i370-*-linux targets

Tue Sep  7 23:31:53 1999  Mark Mitchell  <mark@codesourcery.com>

	* dsp16xxx.c: Include ggc.h
	(override_options): Mark GC roots.
	* mn10200.c: Include ggc.h.
	(asm_file_start): Mark GC roots.
	* tahoe.c: Include ggc.h.
	(extensible_operand): Mark GC roots.

Tue Sep  7 23:23:15 1999  Linas Vepstas  <linas@linas.org>

	* README: Add section discussing status of ELF ABI.
	* i370.c: Fix misc spelling mistakes.
	(i370_label_scan): Updated notes, exception handling.
	(i370_function_prolog): Simplify ELF stack handling.
	* i370.h: (FIXED_REGISTERS): Free up r12 for ELF.
	(STACK_GROWS_DOWNWARD): ELF stack grows down.
	(ASM_DECLARE_FUNCTION_NAME): Fix crazy malloc size.
	* i370.md: (movdi): Add notes.
	(floatsidf2): Use stack not rtca for scratch float area.
	(iorsi3): Correct operand constraints.
	* x-oe: Restore TAROUTOPTS which are used by pax.

Tue Sep  7 22:39:18 1999  Mark Mitchell  <mark@codesourcery.com>

	* rs6000.c: Include ggc.h.
	(rs6000_add_gc_roots): New function.
	(override_options): Call it.

Tue Sep  7 22:09:03 1999  Richard Henderson  <rth@cygnus.com>

	* alpha.h (alpha_compare): New.
	(alpha_compare_op0, alpha_compare_op1, alpha_compare_fp_p): Remove.
	* alpha.c: Likewise for the definitions.
	(alpha_emit_conditional_branch): Update for alpha_compare.
	(alpha_emit_conditional_move): Likewise.
	* alpha.md (cmpdf, cmpdi): Likewise.
	(setcc patterns): Likewise.  Zero alpha_compare after use.
	(sne): Optimize (x != 0) into (0U < x).

Tue Sep  7 21:55:02 1999  Richard Henderson  <rth@cygnus.com>

	* alpha.h (alpha_eh_epilogue_sp_ofs): Remove.
	(struct machine_function): Declare; add eh_epilogue_sp_ofs.
	(INIT_EXPANDERS): Remove.
	* alpha.c: Include ggc.h.
	(alpha_eh_epilogue_sp_ofs, alpha_return_addr_rtx): Remove.
	(alpha_init_machine_status, alpha_mark_machine_status): New.
	(override_options): Install them.
	(struct machine_function): Moved to alpha.h.
	(alpha_save_machine_status, alpha_restore_machine_status): Remove.
	(alpha_init_expanders): Remove.
	(alpha_return_addr): Adjust to use current_function->machine.
	(alpha_ra_ever_killed): Likewise.
	(alpha_expand_epilogue): Likewise.
	* alpha.md (eh_epilogue): Likewise.

Wed Sep  8 14:34:42 1999  Ian Piumarta  <piumarta@prof.inria.fr>
			  Melissa O'Neill  <oneill@cs.sfu.ca>
			  Geoffrey Keating  <geoffk@cygnus.com>

	* config/rs6000/rs6000.c (first_reg_to_save): Don't save fixed or
	call-used registers (call-saved registers must still be contiguous
	and end with r31, of course).

Tue Sep  7 21:41:38 1999  Richard Henderson  <rth@cygnus.com>

	* c-typeck.c (type_lists_compatible_p): Use simple_type_promotes_to.
	(self_promoting_type_p): Delete.
	(self_promoting_args_p): Move ...
	* c-common.c: ... here.
	(c_common_nodes_and_builtins): Initialize lang_type_promotes_to.
	(simple_type_promotes_to): New.
	* builtins.c (lang_type_promotes_to): New.
	(expand_builtin_va_arg): Use it to give diagnostic for illegal types.
	* c-tree.h (C_PROMOTING_INTEGER_TYPE_P): Move ...
	* c-common.h: ... here.
	(self_promoting_args_p, simple_type_promotes_to): Declare.
	* c-decl.c (duplicate_decls): Use simple_type_promotes_to.
	(grokdeclarator): Likewise.
	* tree.h (lang_type_promotes_to): Declare.

Tue Sep  7 17:15:21 1999  Mark Mitchell  <mark@codesourcery.com>

	Add some machine-dependent GC roots.
	* sparc.c: Include ggc.h.
	(sparc_add_gc_roots): New function.
	(mark_ultrasparc_pipeline_state): Likewise.
	(override_options): Call sparc_add_gc_roots.
	* pa.c: Include ggc.h.
	(pa_add_gc_roots): New function.
	(mark_deferred_plabels): Likewise.
	(override_options): Call pa_add_gc_roots.
	* mips.c: Include ggc.h.
	(mips_add_gc_roots): New function.
	(override_options): Use it.

Tue Sep  7 11:39:41 1999  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* cpperror.c (cpp_file_line_for_message): Constify a char*.

	* cppexp.c (parse_number, parse_charconst, cpp_lex,
	cpp_parse_expr): Add static prototypes.
	(parse_charconst): Don't cast away const-ness.
	(token): Constify a char*.

	* cppfiles.c (file_name_list, include_hash, find_include_file,
	finclude, initialize_input_buffer): Constify a char*.
	(file_cleanup, find_position): Add static prototypes.

	* cpphash.c (macro_cleanup, macarg, timestamp, special_symbol,
	collect_expansion): Add static prototypes.
	(cpp_install, create_definition, monthnames): Constify a char*.

	* cpphash.h (cpp_install): Likewise.

	* cppinit.c (known_suffixes, default_include,
	dump_special_to_buffer, NAME, cpp_start_read, cpp_finish): Likewise.
	(base_name, dump_special_to_buffer, initialize_dependency_output):
	Add static prototypes.

	* cpplib.c (my_strerror): Constify a char*.
	(null_underflow, null_cleanup, skip_comment, copy_comment,
	copy_rest_of_line, handle_directive, pass_thru_directive,
	get_directive_token, read_line_number, cpp_print_file_and_line,
	v_cpp_error, v_cpp_warning, v_cpp_error_with_line,
	v_cpp_warning_with_line, detect_if_not_defined,
	consider_directive_while_skipping): Add static prototypes.
	(pass_thru_directive, check_macro_name, cpp_expand_to_buffer,
	cpp_pedwarn_with_file_and_line): Constify a char*.

	* cpplib.h (cpp_options, include_hash, progname, definition,
	cpp_pedwarn_with_file_and_line, cpp_expand_to_buffer,
	check_macro_name, cpp_pfatal_with_name, cpp_file_line_for_message,
	find_include_file, deps_output, include_hash): Constify a char*.

	* cppmain.c (progname): Constify.
	(main): Add prototype.  Use return, not exit.

	* fix-header.c (fatal, add_symbols, lookup_std_proto, write_lbrac,
	recognized_macro, check_macro_names, read_scan_file, write_rbrac,
	inf_skip_spaces, inf_read_upto, inf_scan_ident, inf_scan_ident,
	check_protection): Add static prototype.
	(xfree): Remove.
	(progname, recognized_macrom, recognized_extern): Constify a char*.
	(main): Add prototype.

	* gen-protos.c (progname): Constify a char*.

Tue Sep  7 00:47:52 1999  Mark Mitchell  <mark@codesourcery.com>

	* emit-rtl.c (free_emit_status): Take decl as a parameter.
	(init_emit_once): Add more GC roots.
	* except.c (mark_func_eh_entry): New function.
	(mark_eh_node): Mark false_label and rethrow_label.
	(init_eh): Add more GC roots.
	* function.c (free_after_compilation): Take decl as a parameter.
	Call free_stmt_status.
	(mark_function_state): Don't assume x_parm_reg_stack_loc is
	non-NULL.
	* function.h (free_after_compilation): Change prototype.
	(free_varasm_status): Likewise.
	(free_emit_status): Likewise.
	(free_stmt_status): New function.
	* ggc-simple.c (rtx, vecs, trees, strings, bytes_alloced_since_gc):
	Remove, replacing with ...
	(ggc_status): New structure.
	(ggc_chain): New variable.
	(init_gcc): Define.
	(ggc_push_context): New function.
	(ggc_pop_context): Likewise.
	(ggc_alloc_rtx): Adjust for use of ggc_chain.
	(ggc_alloc_rtvec): Likewise.
	(ggc_alloc_tree): Likewise.
	(ggc_alloc_string): Likewise.
	(ggc_mark_rtx): Mark NOTE_SOURCE_FILE and NOTE_RANGE_INFO.
	(ggc_mark_tree): Give language-dependent code a chance to mark
	`x' nodes.
	(ggc_mark_tree_varray): Handle empty arrays.
	(ggc_collect): Adjust for use of ggc_chain.  Clear
	bytes_alloced_since_last_gc.
	* ggc.h (ggc_pop_context): New function.
	(ggc_push_context): Likewise.
	* print-tree.c (print_node): Don't print obstacks when GC'ing.
	* stmt.c (free_stmt_status): New function.
	(init_stmt_for_function): Clear last_expr_value.
	* toplev.c (rest_of_compilation): Always call free_after_compilation.
	Conditionalize call to ggc_collect.
	(main): Call init_ggc.
	* tree.c (push_obstacks): Do the push, even when GC'ing.
	(push_obstacks_nochange): Likewise.
	(pop_obstacks): Liekwise.
	* varasm.c (free_varasm_status): Take decl as a parameter.

Tue Sep  7 08:15:49 1999  Gavin Romig-Koch  <gavin@cygnus.com>

	* config/mips/mips.h (MULTILIB_ENDIAN_DEFAULT) : New macro.
	(MULTILIB_ENDIAN_DEFAULT) : Use the new macro.
	* config/mips/elf64.h (MULTILIB_DEFAULTS) : Use the new macro.
	* config/mips/r3900.h (MULTILIB_DEFAULTS) : Use the new macro.

Tue Sep  7 03:42:45 1999  Mark Klein (mklein@dis.com)

	* pa/x-pa-mpeix: New file for the MPE port.

	* pa/quadlib.asm: New file for long double support.

	* configure.in: Add hppa1.0-*-mpeix for MPE port.
	* configure: Rebuilt.

Tue Sep  7 10:08:40 1999  Andreas Schwab  <schwab@suse.de>

	* final.c (shorten_branches): Fix last change.

Tue Sep  7 00:30:32 1999  Jeffrey A Law  (law@cygnus.com)

	* pa.h (ASM_OUTPUT_DOUBLE_INT): Delete.

Mon Sep  6 22:44:47 1999  Jeffrey A Law  (law@cygnus.com)

	* Merge from gcc2 snapshot Jan 9, 1999.  See FSFChangeLog for
	details.

Mon Sep  6 22:31:28 1999  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* c-aux-info.c (concat): Don't define.

	* cccp.c (my_strerror): Likewise.  All callers changed to use
	xstrerror instead.
	(do_include): Call xstrdup, not xmalloc/strcpy.
	(grow_outbuf): Don't check if xrealloc returns NULL, it can't.
	(xmalloc, xrealloc, xcalloc, xstrdup): Don't define.

	* collect2.c (my_strsignal): Likewise.  All callers changed to use
	strsignal instead.
	(locatelib): Call xstrdup, not xmalloc/strcpy.

	* 1750a.h (ASM_OUTPUT_INTERNAL_LABEL): Call xmalloc, not malloc.

	* dsp16xx.c (override_options): Call xstrdup, not xmalloc/strcpy.

	* i370.h (ASM_DECLARE_FUNCTION_NAME): Call xmalloc, not malloc.

	* mips.c (build_mips16_call_stub): Call xstrdup, not xmalloc/strcpy.

	* cppinit.c (cpp_options_init): Call xcalloc, not xmalloc/bzero.

	* dwarfout.c (dwarfout_init): Call concat, not xmalloc/strcpy/...

	* except.c (new_eh_region_entry): Call xmalloc/xrealloc, not
	malloc/realloc.
	(find_all_handler_type_matches): Likewise.  Don't check return
	value.
	(get_new_handler, init_insn_eh_region, process_nestinfo): Call
	xmalloc, not malloc.
	(init_eh_nesting_info): Likewise.  Call xcalloc, not xmalloc/bzero.

	* gcc.c (xstrerror, xmalloc, xrealloc): Don't define.
	(init_spec): Call xcalloc, not xmalloc/bzero.
	(set_spec): Call xstrdup, not save_string.
	(record_temp_file): Call xstrdup, not xmalloc/strcpy.
	(find_a_file): Call xstrdup, not xmalloc/strcpy.
	(process_command): Call xstrdup, not save_string.
	(main): Call xcalloc, not xmalloc/bzero.

	* gcov.c (xmalloc): Don't define.
	(create_program_flow_graph): Call xcalloc, not xmalloc/bzero.
	(scan_for_source_files): Call xstrdup, not xmalloc/strcpy.
	(output_data): Call xcalloc, not xmalloc/bzero.

	* haifa-sched.c (schedule_insns): Call xcalloc, not xmalloc/bzero.

	* mips-tdump.c (xmalloc): Don't define.
	(print_symbol): Call xmalloc, not malloc.
	(read_tfile): Call xcalloc, not calloc.

	* mips-tfile.c (xfree, my_strsignal, xmalloc, xcalloc, xrealloc):
	Don't define.  All callers of xfree/my_strsignal changed to use
	free/strsignal instead.
	(allocate_cluster): Call xcalloc, not calloc.

	* objc/objc-act.c (lang_init): Call concat, not xmalloc/strcpy/...
	Fix memory leak, free allocated memory.

	* prefix.c (translate_name): Call xstrdup, not save_string.
	(update_path): Likewise.

	* profile.c (branch_prob): Call xstrdup, not xmalloc/strcpy.

	* protoize.c (xstrerror, xmalloc, xrealloc, xfree, savestring2):
	Don't define.  Callers of xfree/savestring2 changed to use
	free/concat instead.

	* reload1.c (reload): Call xcalloc, not xmalloc/bzero.
	(init_elim_table): Likewise.

	* resource.c (init_resource_info): Likewise.

	* stupid.c (stupid_life_analysis): Likewise.

	* toplev.c (xmalloc, xcalloc, xrealloc, xstrdup): Don't define.
	(open_dump_file): Call concat, not xmalloc/strcpy/...
	(clean_dump_file): Likewise.
	(compile_file): Call xstrdup, not xmalloc/strcpy.

Mon Sep  6 15:04:55 1999  Richard Henderson  <rth@cygnus.com>

	* v850.h (EXPAND_BUILTIN_VA_ARG): New.
	* v850.c (v850_va_arg): New.

Tue Sep  7 09:36:01 1999  Michael Hayes  <m.hayes@elec.canterbury.ac.nz>

	* haifa-sched.c: Tidy comments.

Mon Sep  6 14:30:13 1999  Bernd Schmidt  <bernds@cygnus.co.uk>

	* Makefile.in (C_AND_OBJC_OBJS): Remove ggc-callbacks.o.
	(c-parse.o, c-decl.o, c-lang.o, c-lex.o, c-common.o,
	$(out_object_file)): Depend on ggc.h.
	* c-common.c: Include "ggc.h".
	(combine_strings): If doing GC, use ggc_alloc_string.
	* c-decl.c: Include "ggc.h".
	(ggc_p): Define with value 0.
	(mark_binding_level): New function.
	(init_decl_processing): Add GC roots.
	(mark_c_function_context): New function.
	(lang_mark_false_label_stack): New function.
	(lang_mark_tree): New function.
	(lang_cleanup_tree): New function.
	* c-lang.c: Include "ggc.h".
	(lang_init): Call c_parse_init.
	* c-lex.c: Include "ggc.h".
	(check_linenum): If doing GC, don't copy filenames to permanent
	obstack.
	* c-parse.in: Include "ggc.h".
	(c_parse_init): New function.
	* c-tree.h (c_parse_init, mark_c_function_context): Declare.
	* objc/Make-lang.in (objc-parse.o): Depend on ggc.h.

	* except.c (mark_eh_state): Mark more state.
	* function.c (mark_function_state): Likewise.
	* ggc-simple.c (ggc_alloc_rtvec): Bring in sync with non-gc version.
	(ggc_alloc_string) [GGC_DUMP]: Fix typo.
	* toplev.c (mark_file_stack): New function.
	(compile_file): If doing GC, use ggc_alloc_string on input filename.
	(main): Add root for input_file_stack.

	* i386.c: Include "ggc.h".
	(ix86_mark_machine_status): New function.
	(override_options): Set mark_machine_status.

Mon Sep  6 15:26:23 1999  Bernd Schmidt  <bernds@cygnus.co.uk>

	* tree.c (copy_node): Copy node contents also if doing GC.

Mon Sep  6 08:42:06 1999  Alexandre Oliva  <oliva@dcc.unicamp.br>

	* collect2.c (scan_libraries): Fix double-thinko :-).

Mon Sep  6 02:42:36 1999  Jeffrey A Law  (law@cygnus.com)

	* collect2.c (scan_libraries): Fix thinko.

	* cse.c (delete_trivially_dead_insns): Do not skip the last
	insn if it is a real insn.

Sun Sep  5 18:57:42 1999  Mark Mitchell  <mark@codesourcery.com>

	* Makefile.in (ggc-simple.o): Depend on hash.h.
	* ggc.h (ggc_add_tree_hash_table_root): Declare.
	(ggc_mark_tree_varray): Likewise.
	(ggc_mark_tree_hash_table): Likewise.
	* ggc-simple.c: Include hash.h.
	(ggc_mark_tree_hash_table_ptr): New function.
	(ggc_mark_tree_hash_table_entry): Likewise.
	(ggc_mark_tree_hash_table): Likewise.
	(ggc_add_tree_hash_table_root): Likewise.
	* varray.h (const_equiv_data): Use struct rtx_def *, rather than
	rtx, when defining fields.

Sun Sep  5 18:57:42 1999  Bernd Schmidt <crux@pool.informatik.rwth-aachen.de>

	* profile.c (output_func_start_profiler): Remove apparently
	nonsensical call to start_sequence.

Sun Sep  5 17:34:33 1999  Richard Henderson  <rth@cygnus.com>

	* clipper/clipper.c (clipper_va_start): Fix typos.

	* pyr/pyr.c (pyr_build_va_list, pyr_va_start, pyr_va_arg): New stubs.
	* spur/spur.c (spur_build_va_list, spur_va_start): New stubs.
	(spur_va_arg): New stub.

	* configure.in: Comment out pyramid.

Sun Sep  5 19:11:01 1999  Michael Meissner  <meissner@cygnus.com>

	* i386.h (MASK_{DEBUG_{ADDR,ARG},INTEL_SYNTAX}): Move so these
	don't conflict with the bits that win32, cygwin, and dgux
	defines.

Sun Sep  5 09:31:56 1999  Richard Henderson  <rth@cygnus.com>
			  Bernd Schmidt <bernds@cygnus.co.uk>

	* integrate.c (function_cannot_inline_p): Do not inline
	functions with forced labels.

Sun Sep  5 00:35:17 1999  Richard Henderson  <rth@cygnus.com>
			  Bernd Schmidt <bernds@cygnus.co.uk>
			  Mark Mitchell  <mark@codesourcery.com>

	* Makefile.in (ggc-simple.o): Depend on varray.h.
	(rtl.o): Depend on ggc.h.
	(genattrtab.o): Depend on ggc.h.
	(print-tree.o): Likewise.
	(fold-const.o): Likewise.
	* emit-rtl.c (sequence_element_free_list): Remove, and all references.
	(make_insn_raw): Don't cache insns when GC'ing.
	(emit_insn_before): Likewise.
	(emit_insn_after): Likewise.
	(emit_insn): Likewise.
	(start_sequence): Use xmalloc to allocate the sequence_stack.
	(end_sequence): Add free to free it.
	(gen_sequence): Don't cache insns when GC'ing.
	(clear_emit_caches): Don't use sequence_element_free_list.
	(init_emit): Use xcalloc, not xmalloc+bzero.
	* fold-const.c (size_int_wide): Kill the cache, when GC'ing.
	* function.c (pop_function_context_from): Use free to free the
	fixup_var_refs_queue.
	(put_reg_into_stack): Allocate it with xmalloc.
	* genattrtab.c: Include ggc.h.
	(operate_exp): Don't use obstack_free when GC'ing.
	(simplify_cond): Likewise.
	(simplify_text_exp): Likewise.
	(optimize_attrs): Likewise.
	* gengenrtl.c (gendef): Use ggc_alloc_rtx to allocate RTL, when
	GC'ing.
	(gencode): Generate a #include for ggc.h.
	* ggc-callbacks.c (ggc_p): Define it to zero.
	* ggc-none.c (ggc_p): Likewise.
	* ggc-simple.c: Include varray.h.
	(ggc_mark_tree_varray): New function.
	(ggc_add_tree_varray_root): Likewise.
	(ggc_mark_tree_varray_ptr): Likewise.
	* ggc.h (ggc_p): Declare.
	(varray_head_tag): Likewise.
	(ggc_add_tree_varray_root): Declare.
	* print-tree.c (print_node): Don't check for TREE_PERMANENT
	inconsistencies when GC'ing.
	* rtl.c: Include ggc.h.
	(rtvec_alloc): Use ggc_alloc_rtvec when GC'ing.
	(rtx_alloc): Use ggc_alloc_rtx when GC'ing.
	(rtx_free): Don't call obstack_free when GC'ing.
	* toplev.c (rest_of_compilation): Call ggc_collect after every
	pass, if GC'ing.
	* tree.c (push_obstacks): Do nothing, if GC'ing.
	(pop_obstacks_nochange): Likewise.
	(pop_obstacks): Likewise.
	(make_node): Use ggc_alloc_tree when GC'ing.
	(copy_node): Likewise.
	(get_identifier): Use ggc_alloc_string when GC'ing.
	(build_string): Likewise.
	(make_tree_vec): Use ggc_alloc_tree when GC'ing.
	(tree_cons): Likewise.
	(build1): Likewise.
	(type_hash_canon): Don't call obstack_free when GC'ing.

Sat Sep  4 21:52:32 1999  Richard Henderson  <rth@cygnus.com>

	* haifa-sched.c (schedule_block): Use next_nonnote_insn instead
	of NEXT_INSN when examining speculative insns for SCHED_GROUP_P.

Sat Sep  4 20:40:19 1999  Richard Henderson  <rth@cygnus.com>
			  Bernd Schmidt <bernds@cygnus.co.uk>
			  Mark Mitchell  <mark@codesourcery.com>

	* Makefile.in (stor-layout.o): Depend on ggc.h.
	(expr.o): Depend on ggc.h.
	(profile.o): Depend on ggc.h.
	(stor-layout.o): Depend on ggc.h.
	* emit-rtl.c (init_emit_once): Add gc roots.
	* expr.c: Include ggc.h.
	(emit_block_move): Add gc roots.
	(clear_storage): Likewise.
	* expr.h (init_stor_layout_once): New function.
	* profile.c: Include ggc.h.
	(init_arc_profiler): profiler_label is a root.
	* scan.c (make_sstring_space): Trust xrealloc to function
	correctly with first parameter NULL.
	* stor-layout.c: Include ggc.h.
	(set_sizetype): Add gc root.
	(init_stor_layout_once): New function.
	* toplev.c (compile_file): Call it.

Sat Sep  4 19:26:25 1999  Richard Henderson  <rth@cygnus.com>
			  Bernd Schmidt <bernds@cygnus.co.uk>
			  Mark Mitchell  <mark@codesourcery.com>

	* Makefile.in (tree.o): Depend on ggc.h.
	(varasm.o): Likewise.
	(function.o): Likewise.
	(stmt.o): Likewise.
	(except.o): Likewise.
	(optabs.o): Likewise.
	(emit-rtl.o): Likewise.
	* emit-rtl.c: Include ggc.h.
	(sequence_element_free_list): Remove, and all references.
	(mark_sequence): New functions.
	(mark_emit_state): New function.
	* except.c: Include ggc.h.
	(mark_eh_node, mark_eh_stack, mark_eh_queue): New functions.
	(mark_tree_label_node): New functions.
	(mark_eh_state): New function.
	* function.c: Include ggc.h.
	(mark_temp_slot, mark_function_chain): New functions.
	(mark_function_state): New function.
	(init_function_once): New function.
	* function.h (init_function_once): New function.
	* ggc-callbacks.c (lang_mark_false_label_stack): New function.
	* ggc.h (label_node): Declare.
	(eh_status, emit_status, stmt_status, varasm_status): Likewise.
	(lang_mark_false_label_stack): New function.
	(mark_temp_slot): Remove declaration.
	(mark_function_chain): Likewise.
	(mark_eh_state): Adjust prototype.
	(mark_stmt_state, mark_emit_state, mark_varasm_state, mark_optab):
	Likewise.
	* optabs.c: Include ggc.h.
	(mark_optab): New function.
	(init_optabs): Add gc roots.
	* stmt.c: Include ggc.h.
	(mark_cond_nesting, mark_loop_nesting): New functions.
	(mark_block_nesting, mark_case_nesting, mark_goto_fixup): Likewise.
	(mark_stmt_state): New function.
	* toplev.c (compile_file): Call init_function_once.
	* tree.c: Include ggc.h.
	(type_hash): Move declaration earlier in file.
	(TYPE_HASH_SIZE, type_hash_table): Likewise.
	(init_obstacks): Add gc roots.
	(mark_type_hash): New function.
	* varasm.c: Include ggc.h.
	(mark_pool_constant): New function.
	(mark_varasm_state): New function.

Sat Sep  4 22:28:56 1999  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* ggc-simple.c (ggc_root, ggc_collect): Wrap prototype with PROTO.

Sat Sep  4 18:01:45 1999  Bernd Schmidt <bernds@cygnus.co.uk>

	* c-decl.c (struct language_function): Renamed from struct c_function.
	Delete elt NEXT.
	(c_function_chain): Delete.
	(push_c_function_context): New arg F.  Don't warn about nested
	functions here.  Fill LANGUAGE elt of F.  Delete code to update
	c_function_chain.  Don't call push_function_context.
	(pop_c_function_context): New arg F.  Restore from there instead of
	from c_function_chain.  Don't call pop_function_context.  Clear out
	LANGUAGE field of F when done.
	* c-lang.c: Include "function.h"
	(lang_init): Initialize save_lang_status and restore_lang_status.
	* c-parse.in (nested_function, nested_function_notype): Warn about
	nested functions.  Call push_function_context/pop_function_context
	instead of the _c_ variants.
	* c-tree.h (push_c_function_context, pop_c_function_context): Update
	prototype.
	* Makefile.in (c-lang.o): Update dependencies.

	* emit-rtl.c (init_emit): Use xmalloc to allocate regno_reg_rtx,
	regno_pointer_flag, regno_pointer_align.
	(gen_reg_rtx): Use xrealloc to enlarge them.
	(free_emit_status): New function.
	* function.c (mark_machine_status, mark_lang_status): New variables.
	(assign_stack_local_1): Renamed from assign_outer_stack_local.  Merge
	in some bits from assign_stack_local.  All callers changed to use new
	name.
	(assign_stack_local): Just call assign_stack_local_1.
	(free_after_compilation): New function.
	(put_reg_into_stack): Simplify to always call assign_stack_local_1.
	(trampoline_address): Likewise.
	(assign_parms): Use xcalloc/xrealloc to allocate parm_reg_stack_loc.
	(prepare_function_start): Explicitly clear some more variables.
	* function.h (struct function): New elt can_garbage_collect.
	(mark_machine_status, mark_lang_status): Declare variables.
	(free_after_compilation, free_emit_status, free_varasm_status,
	init_varasm_status): Declare functions.
	* toplev.c (rest_of_compilation): Call free_after_compilation when
	done with the current function.
	* varasm.c (free_varasm_status): New function.

Sat Sep  4 17:15:13 1999  Richard Henderson  <rth@cygnus.com>

	* sparc.h (EXPAND_BUILTIN_VA_START): Define.
	(EXPAND_BUILTIN_VA_ARG): Define.
	* sparc.c (sparc_va_start): New.
	(sparc_va_arg): New.

Sun Sep  5 11:11:59 1999  Michael Hayes  <m.hayes@elec.canterbury.ac.nz>

	* config/c4x/c4x.h (DBR_OUTPUT_SEQEND): Use XVECEXP not XEXPs.

Sun Sep  5 10:13:19 1999  Michael Hayes  <m.hayes@elec.canterbury.ac.nz>

	* config/c4x/c4x.h (CALLER_SAVE_PROFITABLE): Disable.

Sat Sep  4 13:44:01 1999  Mark Mitchell  <mark@codesourcery.com>

	* Makefile.in (C_AND_C_OBJS): Add gcc-callbacks.o.
	(OBJS): Add $(GGC).
	(ggc-callbacks.o): New target.
	* ggc-callbacks.c: New file.

Sat Sep  4 22:53:13 1999  Bernd Schmidt  <bernds@cygnus.co.uk>

	* expr.h: Collapse individual optab and libfunc vars to arrays.
	(optab_index, libfunc_index): New enumerations.
	(optab_table, libfunc_table): New arrays.
	Add accessor macros for both.

	* optabs.c (optab_table, libfunc_table): New.
	Delete declarations for individual optab and libfunc vars.

Sat Sep  4 12:57:17 1999  Richard Henderson  <rth@cygnus.com>

	* i386/sco5.h (RETURN_POPS_ARGS): Name change ix86_return_pops_args.

Sat Sep  4 11:19:52 1999  Richard Henderson  <rth@cygnus.com>

	* Makefile.in (GGC, GGC_LIB): New.
	(HOST_RTL): Include ggc-none.o.
	(ggc-simple.o): New target.
	(ggc-none.o): Likewise.
	* tree.h (tree_common): Add gc_mark.
	* rtl.h (struct rtx_def): Steal a bit from code to make gc_mark.
	(struct rtvec_def): Add gc_mark.
	* emit-rtl.c (global_rtl): Update static initializers to contain
	enough initializers.
	* ggc.h, ggc-none.c, ggc-simple.c: New files.
	* toplev.c (gc_time): New variable.
	(all_time): New variable.
	(compile_file): Print gc time.
	(print_time): Calculate percentage of the whole.

Sat Sep  4 13:11:01 1999  Bernd Schmidt  <bernds@cygnus.co.uk>

	Change obstack memory management and varasm constant pool handling so
	that nested functions are treated like any other functions.
	* function.c (init_machine_status): New variable.
	(push_function_context_to): Set contains_functions for the outer
	function.  Don't call save_varasm_status.
	(pop_function_context_from): Don't call restore_varasm_status.  Don't
	set current_function_contains_functions.
	(prepare_function_start): Call init_varasm_status rather than
	init_const_rtx_hash_table.  Call (*init_machine_status) if the pointer
	is non-null.
	* function.h (struct function) Add field varasm.  Delete fields
	inline_obstacks, inl_emit, const_rtx_hash_table, first_pool,
	last_pool, const_rtx_sym_hash_table, pool_offset, const_double_chain.
	(init_machine_status): Declare.
	(save_varasm_status, restore_varasm_status): Delete declarations.
	(save_tree_status, restore_tree_status): Delete last argument.
	* integrate.c (initialize_for_inline): Lose arg COPY.  Delete copying
	code.  All callers changed.
	(copy_decl_list, copy_decl_tree, copy_decl_rtls, copy_for_inline,
	save_constants_in_decl_trees, restore_constants, save_constants,
	save_for_inline_eh_labelmap, save_for_inline_copying): Delete
	functions.
	(inlining): New variable.
	(reg_map, label_map, insn_map, orig_asm_operands_vector,
	copy_asm_operands_vector, copy_asm_constraints_vector): Delete
	variables.
	(save_for_inline_nocopy): Don't save constants.
	Don't set inl_emit field in current_function.
	(expand_inline_function): Use emit field, not inl_emit, of the inlined
	function.  Set new variable inlining before
	calling copy_rtx_and_substitute.
	(copy_rtx_and_substitute): In MEM and SYMBOL_REF cases, handle
	constant pool references if inlining is nonzero.
	Delete ADDRESS and (most of the) CONST cases.
	(output_inline_function): Save and restore current_function/
	current_function_decl.  Delete restore_constants code.  Don't call
	init_const_rtx_hash_table.
	* output.h (init_const_rtx_hash_table): Don't declare.
	* rtl.h (struct function): Declare.
	(get_pool_constant_for_function, get_pool_mode_for_function): Declare.
	* toplev.c (rest_of_compilation): Don't treat nested functions or
	functions containing them specially.  Delete all code to deal with
	save_for_inline_copying.
	* tree.c (toplev_inline_obstacks, extra_inline_obstacks,
	inline_obstacks): Delete variables.
	(save_tree_status): Lose arg CONTEXT.  All callers changed.
	Simply allocate a new function_maybepermanent_obstack for the new
	function, delete all the special cases.
	Don't save inline_obstacks.
	(restore_tree_status): Lose arg CONTEXT.  All callers changed.
	Delete special handling for function_maybepermanent_obstack; simply
	free it if empty.
	Don't restore inline_obstacks.
	(permanent_allocation):  Delete code that frees inline_obstacks.
	(print_inline_obstack_statistics): Delete function.
	(dump_tree_statistics): Don't call it.
	* varasm.c (struct varasm_status): New.
	(const_rtx_hash_table, const_rtx_sym_hash_table, first_pool,
	last_pool, pool_offset, const_double_chain): Delete global
	variables, replace with accessor macros.
	(immed_double_const): Don't walk const_double_chain outside a
	function, but don't treat nested functions specially anymore.
	(immed_real_const_1): Likewise.
	(clear_const_double_mem): Don't treat nested functions specially.
	(init_const_rtx_hash_table): Deleted, code moved to init_varasm_status.
	(save_varasm_status, restore_varasm_status): Delete functions.
	(init_varasm_status): New function.
	(force_const_mem): Don't treat nested functions specially.
	(find_pool_constant): Accept new arg F, search for constants in
	that function's pool rather than the current one.  All callers
	changed.
	(get_pool_constant_for_function, get_pool_mode_for_function): New
	functions.

	* i386.c (init_386_machine_status): New function, mostly from
	clear_386_stack_locals.
	(struct machine_functions): Rename element names to avoid name
	clashes.
	(pic_label_rtx, pic_label_name, i386_stack_locals): New accessor
	macros, replacing global variables.
	(clear_386_stack_locals, save_386_machine_status,
	restore_386_machine_status): Delete functions.
	(override_options): Initialize init_machine_status.
	* i386.h (INIT_EXPANDERS): Delete macro.
	(save_386_machine_status, restore_386_machine_status,
	clear_386_stack_locals): Delete declarations.

Sat Sep  4 16:56:28 1999  Michael Hayes  <m.hayes@elec.canterbury.ac.nz>

	* config/c4x/c4x.md (rptb_init): Renamed from *rptb_init.
	(doloop_begin):  Simplify pattern and use emit_jump_insn.
	(doloop_end): Simplify pattern, switch operand order,
	and use emit_jump_insn.

Fri Sep  3 19:02:38 1999  Bernd Schmidt <crux@pool.informatik.rwth-aachen.de>

	* function.h (struct function): Add new element LANGUAGE.
	(save_lang_status): Declare new variable.
	(restore_lang_status): Likewise.
	* function.c (save_lang_status): Define.
	(restore_lang_status): Likewise.
	(push_function_context_to): Call language-specific save function.
	(pop_function_context_from): Call language-specific restore function.

Fri Sep  3 01:16:18 1999  Alasdair Baird  <alasdair@wildcat.demon.co.uk>

	* i386.md (movsf_1): Check REG_P before use of REGNO.
	(movdf_1): Likewise.
	(movxf_1): Likewise.
	(extendsfdf2): Likewise.
	(extendsfxf2): Likewise.
	(extenddfxf2): Likewise.

Sat Sep  4 11:37:15 1999  Michael Hayes  <m.hayes@elec.canterbury.ac.nz>

	* config/c4x/c4x.c (c4x_emit_move_sequence): Do not force large
	constants into memory.
	(c4x_shiftable_constant): New function.
	* config/c4x/c4x.c (LEGITIMATE_CONSTANT_P): Allow any CONST_INT.
	(c4x_shiftable_constant): Declare.
	* config/c4x/c4x.md (loadqi_big_constant, loadhi_big_constant,
	ashlqi3_noclobber): Add new patterns and associated splitters.

Fri Sep  3 16:22:17 1999  Richard Henderson  <rth@cygnus.com>

	* dbxout.c (dbxout_init): Use xcalloc instead of xmalloc+bzero.
	* dwarf2out.c (dwarf2out_frame_init): Likewise.
	* final.c (shorten_branches): Likewise.
	* global.c (global_alloc): Likewise.
	* haifa-sched.c (build_control_flow): Likewise.
	* stmt.c (check_for_full_enumeration_handling): Likewise.
	(estimate_case_costs): Likewise.

Fri Sep  3 15:49:56 1999  Mark Mitchell  <mark@codesourcery.com>

	* rtl.h (RTL_CHECKC2): Fix typo in last change.

Fri Sep  3 15:13:34 1999  Richard Henderson  <rth@cygnus.com>

	* flow.c (propagate_block): Use XEXP not SET_DEST for a USE.
	(recompute_reg_usage): Likewise.
	* rtlanal.c (find_regno_fusage): Likewise.

	* rtl.c (rtl_check_failed_code1): New function.
	(rtl_check_failed_code2): New.
	* rtl.h (RTL_CHECK1, RTL_CHECK2, RTVEC_ELT): Parenthesize args.
	(RTL_CHECKC1, RTL_CHECKC2): New.
	(XC*): New accessor macros.
	(NOTE_*, LABEL_NAME, LABEL_NUSES, ADDRESSOF_REGNO): Use them.
	(ADDRESSOF_DECL, JUMP_LABEL, LABEL_REFS, LABEL_NEXTREF): Likewise.
	(CONTAINING_INSN, REGNO, INTVAL, SUBREG_REG, SUBREG_WORD): Likewise.
	(ASM_OPERANDS_*, MEM_ALIAS_SET, SET_SRC, SET_DEST): Likewise.
	(TRAP_*, RANGE_INFO_*): Likewise.

Fri Sep  3 15:10:20 1999  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* Makefile.in (tlink.o): Don't depend on toplev.h.

	* collect2.c (c_file, o_file, export_file, import_file, ldout,
	output_file, nm_file_name, ldd_file_name, strip_file_name,
	c_file_name, prefix_list, libexts, is_ctor_dtor, find_a_file,
	add_prefix, prefix_from_env, prefix_from_string, do_wait,
	fork_execute, maybe_unlink, add_to_list,
	extract_init_priority, write_list, dump_list,
	dump_prefix_list, write_list_with_asm, write_c_file,
	write_c_file_stat, write_c_file_glob, scan_prog_file,
	scan_libraries, is_in_list, resolve_lib_name, use_import_list,
	ignore_library, extract_string, notice, dump_file, target_machine,
	collect_wait, collect_execute, libname, locatelib, aix_std_libs,
	read_file, print_load_command): Constify a char*.
	(fdopen, error, fatal, fatal_perror): Don't prototype.
	(my_strerror): Remove.  All callers use xstrerror instead.
	(xcalloc, xmalloc, xrealloc, xstrdup, putenv): Remove definitions.
	(main): Add prototype.  Constify lots of char* ptrs.  Change calls
	to xcalloc/strcpy/strcat/...  to one call to concat.
	(main, scan_prog_file, scan_libraries): Use an intermediate
	`const char **' to build an argv array.
	(mapfile, libselect, libcompare, locatelib): Add prototypes.

	* collect2.h (collect_execute, collect_wait, dump_file,
	file_exists): Constify a char*.
	(ldout, c_file_name, temporary_obstack, permanent_obstack,
	temporary_firstobj, vflag, debug): Add extern declarations.
	(fancy_abort, error, notice, fatal, fatal_perror): Add prototypes.

	* tlink.c: Don't include toplev.h.
	(vflag, debug, ldout, c_file_name, temporary_obstack,
	permanent_obstack, temporary_firstobj): Don't declare.
	(tlink_execute, frob_extension, symbol_hash_lookup,
	file_hash_lookup, demangled_hash_lookup, tlink_init, freadsym,
	recompile_files, read_repo_files, demangle_new_symbols,
	scan_linker_output): Constify a char*.
	(symbol_hash_newfunc, file_hash_newfunc, demangled_hash_newfunc,
	do_tlink): Mark parameters with ATTRIBUTE_UNUSED.

Fri Sep  3 18:09:24 1999  Andrew Haley  <aph@cygnus.com>

	* config/m68k/m68kelf.h: Set USE_GAS; this makes gcc generate jbsr
	(relative) rather than jsr (absolute) subroutine call insns.
	* config/m68k/m68k-coff.h: Ditto.

Fri Sep  3 17:24:31 1999  Richard Earnshaw <rearnsha@arm.com>

	* arm.c (note_invalid_constants): No need to ignore ASMs, we can
	now rework these too.
	(arm_reorg): If an insn can't reach the end of the current pool,
	ensure that we emit that pool before the insn.

Fri Sep  3 09:14:32 1999  Marc Espie <espie@tetto.liafa.jussieu.fr>

	* tlink.c (scan_linker_output): Skip the initial underscore in
	a mangled name if appropriate.

Fri Sep  3 01:28:33 1999  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* objc/objc-act.c (objc_tree_code_type, objc_tree_code_length,
	objc_tree_code_name, synth_id_with_class_suffix, warn_with_method,
	error_with_ivar, gen_declarator, create_builtin_decl,
	my_build_string, generate_descriptor_table, generate_ivars_list,
	generate_dispatch_table, check_protocols, TAG_GETCLASS,
	TAG_GETMETACLASS, TAG_MSGSEND, TAG_MSGSENDSUPER, TAG_EXECCLASS,
	dump_base_name, lang_decode_option, build_encode_expr,
	start_class, finish_class, encode_pointer, really_start_method,
	gen_declaration, dump_interface, handle_class_ref, handle_impent):
	Constify.
	(objc_demangle, objc_printable_name, generate_struct_by_value_array):
	Add static prototypes.
	(build_objc_string_decl, build_selector_reference_decl,
	encode_bitfield, build_class_reference_decl): Remove unused
	parameter, all callers changed.
	(maybe_objc_method_name): Mark with ATTRIBUTE_UNUSED.
	(objc_printable_name): Likewise.  Change second parameter to type int.
	(init_objc): Use memcpy, not bcopy, to avoid casts.

Thu Sep  2 21:49:52 1999  Richard Henderson  <rth@cygnus.com>

	* reload1.c (eliminate_regs_in_insn): Avoid eliminating the
	reg notes on a deleted insn.
	* gcse.c (hash_expr_1): Use XWINT on a CONST_DOUBLE.

Thu Sep  2 20:18:12 1999  Jeffrey A Law  (law@cygnus.com)

	* i386.c (ix86_attr_length_default): Handle TYPE_FXCH.

Thu Sep  2 22:00:08 1999  J"orn Rennecke <amylaar@cygnus.co.uk>

	* stmt.c (expand_asm_operands): Fix index into inout_mode when
	reading it.

Thu Sep  2 13:00:48 1999  Richard Henderson  <rth@cygnus.com>

	* stmt.c (expand_asm_operands): Invoke MD_ASM_CLOBBERS if present.
	* tm.texi (MD_ASM_CLOBBERS): Document it.

Thu Sep  2 10:22:40 1999  Richard Henderson  <rth@cygnus.com>

	* dwarf2out.c (dwarf2out_line): Constify `lastfile'.
	* except.c (expand_rethrow): Remove unused variable.
	* expr.c (do_jump_by_parts_greater_rtx): Likewise.
	* flow.c (replace_insns): Likewise.
	(create_edge_list, verify_edge_list): Likewise.
	* gcse.c (cprop_cc0_jump): Protect declaration with HAVE_cc0.

	* genemit.c (gen_expand): Only emit `operands[N]' decl if there
	is special code to run.
	(main): Don't define operands to emit_operand.
	* genrecog.c (main): Don't emit an empty peephole2_insn function.

	* rtl.h (NOTE_BASIC_BLOCK): Use X0BBDEF.

	* alpha/alpha.h (normal_memory_operand): Declare.
	(reg_no_subreg_operand): Declare.
	* alpha/elf.h (ASM_DECLARE_OBJECT_NAME): Use HOST_WIDE_INT_PRINT_DEC.

Thu Sep  2 10:19:20 1999  Richard Henderson  <rth@cygnus.com>

	* c-parse.in (compstmt_primary_start): New, broken out of first
	part of compstmt handling in primary.
	(primary): Use it.  Add an error clause.
	(compstmt_nostart): Renamed from compstmt; remove all
	initial invocations of compstmt_start.
	(compstmt): New.

Thu Sep  2 01:35:50 1999  Marc Espie <espie@cvs.openbsd.org>

	* protoize.c (gen_aux_info_file):  Let pexecute call choose_temp_base if
	needed.

Thu Sep  2 00:43:59 1999  Finn Hakansson  <finn@axis.com>

	* combine.c (simplify_shift_const): Remove extra semicolon.
	* dwarf2out.c (remove_AT): Likewise.
	* expmed.c (expand_mult): Likewise.
	* gcov.c (create_program_flow_graph): Likewise.
	* reorg.c (mostly_true_jump): Likewise.

Thu Sep  2 00:06:43 1999  Jeffrey A Law  (law@cygnus.com)

	* fold-const.c (fold_range_test): Do not try to fold the range
	test if the rhs or lhs has side effects.

	* combine.c (simplify_rtx): Recognize another case of a synthesized
	sign extension.

	* varasm.c (mark_constant_pool): When marking indirect references,
	only look at SYMBOL_REFs.

	* except.c (expand_fixup_region_end): Do not peek at
	INSN_UID (node->entry->outer_context) for flag_new_exceptions.

Thu Sep  2 13:52:53 1999  Geoffrey Keating  <geoffk@cygnus.com>

	* flags.h: New variables align_loops, align_loops_log,
	align_jumps, align_jumps_log, align_labels, align_labels_log,
	align_functions, align_functions_log.
	* toplev.c: Define them.
	(f_options): Handle -falign-* when they have no argument.
	(main): Add logic to set variables for -falign-functions,
	-falign-jumps, -falign-labels, -falign-loops.
	Make it -fsched-verbose=<n> and -finline-limit=<n>.
	(display_help): Change help to match options.
	* final.c (LABEL_ALIGN): Default to align_labels_log.
	(LABEL_ALIGN_MAX_SKIP): Default to align_labels-1.
	(LOOP_ALIGN): Default to align_loops_log.
	(LOOP_ALIGN_MAX_SKIP): Default to align_loops-1.
	(LABEL_ALIGN_AFTER_BARRIER): Default to align_jumps_log.
	(LABEL_ALIGN_AFTER_BARRIER_MAX_SKIP): Default to align_jumps-1.
	* varasm.c (assemble_start_function): Handle align_functions.

	* config/sparc/sparc.h: Don't declare sparc_align_*.
	Don't provide LABEL_ALIGN_AFTER_BARRIER or LOOP_ALIGN.
	(DEFAULT_SPARC_ALIGN_FUNCS): Delete; take functionality into
	sparc.c.
	(FUNCTION_BOUNDARY): Fix incorrect use---it's not just a request,
	it's a promise.
	* config/sparc/sparc.c: Delete sparc_align_loops,
	sparc_align_jumps, sparc_align_funcs and the corresponding string
	variables.
	(sparc_override_options): Default align_functions on ultrasparc.
	Delete -malign-* handling.

	* config/mips/mips.c (override_options):  On 64-bit targets,
	try to align code to 64-bit boundaries.
	(print_operand): New substitution, %~,
	which aligns labels to align_labels_log.
	* config/mips/mips.md (div_trap_normal): Use %~.
	(div_trap_mips16): Likewise.
	(abssi): Likewise.
	(absdi2): Likewise.
	(ffssi2): Likewise.
	(ffsdi2): Likewise.
	(ashldi3_internal): Likewise.
	(ashrdi3_internal): Likewise.
	(lshrdi3_internal): Likewise.
	(casesi_internal): Likewise.

Wed Sep  1 21:13:48 1999  Richard Henderson  <rth@cygnus.com>

	Merge new ia32 backend from the branch!

	* i386.h, i386.c, i386.md, reg-stack.c, i386/unix.h: Many changes.
	See ChangeLog.P2 on new_ia32_branch for details.

	* rtl.h (stack_regs_mentioned_p): Delete prototype.
	* i386/cygwin.h (SUBTARGET_PROLOGUE): No more do_rtl.
	* i386/win32.h (SUBTARGET_PROLOGUE): Likewise.
	* i386/gas.h (ASM_FILE_START): Define.
	* i386/winnt.c (i386_pe_valid_decl_attribute_p): Update
	for name change of ix86_valid_decl_attribute_p.
	(i386_pe_valid_type_attribute_p): Similarly.

Wed Sep  1 18:21:23 1999  Richard Henderson  <rth@cygnus.com>

	* emit-rtl.c (init_emit_once): Don't use GET_MODE_WIDER_MODE
	to step through CC modes.

Wed Sep  1 20:18:06 1999  J"orn Rennecke <amylaar@cygnus.co.uk>

	* regmove.c (fixup_match_1): Don't move INSN in front of P if
	it would end up in the shadow of a live flags regsiter.

Wed Sep  1 11:32:00 1999  Bernd Schmidt  <bernds@cygnus.co.uk>

	* reload1.c: Fix many indentation problems.
	* reload.c: Likewise.

Tue Aug 31 22:08:03 1999  Marc Espie <espie@cvs.openbsd.org>

	* alias.c (non_local_reference_p): Constify fmt.

Tue Aug 31 23:19:35 1999  Michael Meissner  <meissner@cygnus.com>

	* config/i386/xm-cygwin.h (HAVE_DOS_BASED_FILE_SYSTEM): Define.

Tue Aug 31 16:44:52 1999  Jeffrey A Law  (law@cygnus.com)

	* cse.c (delete_trivially_dead_insns): Do not delete stores to
	the internal_arg_pointer.

Tue Aug 31 13:35:42 1999  Richard Henderson  <rth@cygnus.com>

	Merge peephole2 from new_ia32_branch:
	* Makefile.in (STAGESTUFF): Add *.peephole2.
	(mostlyclean): Likewise.
	(recog.o): Depend on resource.h.

	* final.c (peephole): Conditionalize decl on HAVE_peephole.
	(final_scan_insn): Likewise for the invocation of peephole.
	* genconfig.c (main): Look for peephole and peephole2 patterns.
	Emit HAVE_peephole* accordingly.
	* genpeep.c (main): Conditionalize entire output on HAVE_peephole.
	* flags.h (flag_peephole2): Declare.
	* toplev.c: New pass peephole2.  New flag -fpeephole2.

	* genattrtab.c (main): Count DEFINE_PEEPHOLE2.
	* gencodes.c (main): Likewise.
	* genextract.c (main): Likewise.
	* genoutput.c (main): Likewise.
	* genemit.c (max_operand_1): Look for the max scratch operand.
	(gen_rtx_scratch): New.
	(gen_exp): Use it, and pass on new arg subroutine_type.
	(gen_expand): Take max scratch into account.
	(gen_split): Emit peephole2 functions.
	(output_peephole2_scratch): New.
	(main): Include hard-reg-set.h and resource.h.  Handle peephole2.
	* genrecog.c (routine_type): Add PEEPHOLE2.
	(IS_SPLIT): New.
	(make_insn_sequence): Match outer parallel for peep2.  Discard
	top level scratches and dups.
	(add_to_sequence): New args insn_type and top.  Update all callers.
	Handle toplevel peep2 matching insns.
	(write_subroutine): Handle peep2.
	(write_tree_1): Likewise.
	(write_tree): Likewise.
	(main): Likewise.
	(change_state): New arg afterward.  Update all callers.
	Handle matching separate insns.
	* recog.c (recog_next_insn): New.
	(peephole2_optimize): New.
	* rtl.def (DEFINE_PEEPHOLE2): New.
	* resource.c (find_free_register): New argument last_insn.  Use it
	to find a register available through the entire span.
	* resource.h (find_free_register): Update prototype.

Tue Aug 31 11:51:06 1999  Jim Kingdon  <http://developer.redhat.com>

	* i386.c (output_strlen_unroll): Don't write xops[7]
	label if it wasn't set.

1999-08-31 12:44 -0700  Zack Weinberg  <zack@bitmover.com>

	* cpplib.c (struct directive): Const-ify name pointer and
	function pointer prototype.
	(validate_else, do_define, do_line, do_include, do_undef,
	do_error, do_pragma, do_ident, do_if, do_xifdef, do_else,
	do_elif, do_endif, do_sccs, do_assert, do_unassert,
	do_warning): Const-ify second arg.
	(directive_table): Mark const.  Reorder entries by frequency
	of usage, record statistics.

1999-08-31 12:20 -0700 Zack Weinberg <zack@bitmover.com>

	* rtl.h (RTL_CHECK1, RTL_CHECK2): New macros which type- and
	bounds- check RTL accesses if --enable-checking.
	(RTVEC_ELT): Bounds check if --enable-checking.
	(XWINT, XINT, XSTR, XEXP, XVEC, XMODE, XBITMAP, XTREE,
	XBBDEF): Use RTL_CHECK1/RTL_CHECK2 as appropriate.
	(XVECEXP, XVECLEN): Define in terms of XVEC, RTVEC_ELT, and
	GET_NUM_ELEM.
	(X0WINT, X0INT, X0STR, X0EXP, X0VEC, X0MODE, X0BITMAP, X0TREE,
	X0BBDEF, X0ADVFLAGS):  New macros for accessing '0' slots of RTXes.

	(ADDR_DIFF_VEC_FLAGS): Use X0ADVFLAGS.
	(NOTE_SOURCE_FILE): Use X0STR.
	(NOTE_BLOCK_NUMBER, NOTE_EH_HANDLER, LABEL_NUSES,
	MEM_ALIAS_SET): Use X0INT.
	(NOTE_RANGE_INFO, NOTE_LIVE_INFO, NOTE_BASIC_BLOCK,
	JUMP_LABEL, LABEL_REFS, LABEL_NEXTREF, CONTAINING_INSN):
	Use X0EXP.
	* real.h (CONST_DOUBLE_CHAIN): Use X0EXP.
	* rtl.c (copy_rtx, copy_most_rtx): Copy '0' slots with X0WINT.
	(rtl_check_failed_bounds, rtl_check_failed_type1,
	rtl_check_failed_type2, rtvec_check_failed_bounds): New
	functions.
	(fancy_abort): Fix comment.

	* cse.c (canon_hash): Read CONST_DOUBLE data slots with XWINT.
	(cse_insn): Decrement LABEL_NUSES for jump target before
	deleting jump insn.
	* emit-rtl.c (gen_rtx_CONST_DOUBLE): Use X0EXP for slot 1.
	* final.c (alter_subreg): Compute regno before changing x to
	REG; set REGNO(x) after changing it.
	* flow.c (count_basic_blocks): Use XWINT to inspect EH_REGION
	notes containing CONST_INTs.
	(delete_eh_regions): Use NOTE_EH_HANDLER.
	* function.c (put_reg_into_stack): Make reg a MEM before
	initializing it.
	(fixup_var_refs_insns):  Save REG_NOTES (insn) in case we
	delete insn.
	(gen_mem_addressof): Make reg a MEM before initializing it.
	* integrate.c (copy_rtx_and_substitute): Copy '0' slots with
	X0WINT.
	* local-alloc.c (update_equiv_regs): Zap REG_NOTES before
	deleting an insn, not after.
	(block_alloc): Only look at PATTERN(insn) if we have to, and
	only if it's format class 'i'.
	* loop.c (check_dbra_loop): Check bl->biv->add_val is a
	CONST_INT before using its INTVAL.
	* print-rtl.c (print_rtx): Use X0STR.
	* regmove.c (fixup_match_1): Don't look at PATTERN of
	non-class-'i' insn chain elements.
	* reload.c (loc_mentioned_in_p): Take address of
	in->fld[1].rtx directly.
	* reload1.c (reload): Change reg to a MEM before initializing
	it.
	* varasm.c (mark_constant_pool): Skip CONST_DOUBLES, which
	have no names.
	* config/i386/i386.md (decrement_and_branch_if_zero): Fix typo.

Fri Aug 20 13:43:41 1999  Andrew Haley  <aph@cygnus.com>

	* config/mips/mips.c (machine_dependent_reorg): Force a
	barrier to output the local constant pool if a barrier hasn't
	been found at a natural point in the instruction stream.

Mon Aug 30 22:04:36 1999  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* c-parse.in (language_string): Constify.

	* dwarf2out.c (language_string): Remove declaration.

	* dwarfout.c (language_string): Likewise.

	* toplev.c (language_string, init_parse, finish_parse): Likewise.

	* tree.h (language_string, init_parse, finish_parse): Declare.

	* i386/sun386.h (language_string): Remove declaration.

	* mips.h (language_string): Likewise.

	* nextstep.h (language_string): Likewise.

	* nextstep21.h (language_string): Likewise.

	* rs6000.c (language_string): Likewise.

Mon Aug 30 20:56:08 1999  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* Makefile.in (OBJS, PROTO_OBJS): Remove getpwd.o.
	(getpwd.o): Remove target.

	* getpwd.c: Delete file.  Its in libiberty now.

	* dbxout.c (getpwd): Don't prototype.
	* dwarf2out.c (getpwd): Likewise
	* dwarfout.c (getpwd): Likewise
	* final.c (getpwd): Likewise.
	* protoize.c (getpwd): Likewise.

Mon Aug 30 20:21:34 1999  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* cse.c: (fold_rtx): Cast to HOST_WIDE_INT in left shift.

Mon Aug 30 16:07:49 1999  Richard Henderson  <rth@cygnus.com>

	* flow.c (new_insn_dead_notes): Use sets_reg_or_subreg not
	mark_set_resources.

Mon Aug 30 12:23:53 1999  Jim Wilson  <wilson@cygnus.com>

	* fixinc/Makefile.in (subdir): New.
	(fixincl.x, inclhack.sh, fixincl.sh): Use cp instead of $(CP).
	(Makefile): New.

Mon Aug 30 01:02:09 1999  Jeffrey A Law  (law@cygnus.com)

	* emit-rtl.c (copy_rtx_if_shared): A MEM which references
	virtual_stack_vars_rtx or virtual_incoming_args_rtx can not
	be shared.

	* invoke.texi: Fix typo.

	* dwarf2out.c (mem_loc_descriptor): New argument MODE.  All callers
	changed.  Handle autoincrement addressing modes.

	* integrate.c (copy_rtx_and_substitute): Handle internal_arg_pointer
	just like we would the virtual incoming args register when
	integrating.

Sun Aug 29 23:17:54 1999  David Edelsohn  <edelsohn@gnu.org>

	* rs6000.h (ASM_FILE_START): Specify complete filename, including
	path, in .file directive.

Sun Aug 29 05:06:43 1999  Russ Allbery  <rra@stanford.edu>

	* gcc.texi (External Bugs): Remove obsolete note about Perl on
	SunOS.

1999-08-29 08:38 -0700  Zack Weinberg  <zack@bitmover.com>

	* stdbool.h: Make the typedef name _Bool, with bool a #defined
	alias.

Sun Aug 29 09:36:50 1999  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* tree.c (tree_code_name): Constify a char*.

	* tree.h (tree_code_name, decl_printable_name): Likewise.

	* function.h (struct function): Likewise.

	* toplev.c (decl_name, decl_printable_name): Likewise.

	* vax/vms.h (MAYBE_VMS_FUNCTION_PROLOGUE): Likewise.

	* objc/objc-act.c (decl_printable_name): Remove redundant prototype.
	(init_objc): Remove function pointer cast.

Sun Aug 29 05:01:17 1999  John David Anglin <dave@hiauly1.hia.nrc.ca>

	* pa.md (interspace_jump): New pattern.
	(builtin_longjmp): New expander.

1999-08-29  Bernd Schmidt  <bernds@cygnus.co.uk>

	* fp-bit.c (add, sub, multiply, divide, compare, _eq_f2, _ne_f2,
	_gt_f2, _ge_f2, _lt_f2, _le_f2, float_to_si, float_to_usi, negate,
	sf_to_df, df_to_sf): Fix potential problem with alias analysis.

Sun Aug 29 04:30:52 1999  John Wehle  (john@feith.com)

	* jump.c (delete_prior_computation): Also check calls
	to constant functions.  Don't bother checking for a
	REG_UNUSED note before adding it.
	(delete_computation): Handle multi-word hard registers
	when synthesizing missing REG_DEAD notes for a register
	which is both set and used by an insn.

1999-08-29  Michael Hayes  <m.hayes@elec.canterbury.ac.nz>

	* loop.c (this_loop_info): New variable.
	(loop_has_call, loop_has_volatile, loop_has_tablejump,
	loop_continue, loops_enclosed): Replace with fields in this_loop_info.
	All uses updated.
	(prescan_loop, strength_reduce): New argument loop_info.  All callers
	updated.
	(scan_loop): New variable loop_info, initialize to address of
	this_loop_info.
	(prescan_loop): Set loop_info->vtop if find NOTE_INSN_LOOP_VTOP.
	Delete variable loop_has_multiple_exit targets and replace with
	field in this_loop_info.
	(find_and_verify_loops): Rename this_loop to this_loop_num.
	(strength_reduce): Delete loop_iteration_info.  Replace variable
	loop_info with function argument of same name.
	(insert_bct): Rework test for loop being completely unrolled.

	* loop.h (struct loop_info): New fields num, loops_enclosed,
	has_call, has_volatile, has_tablejump, has_multiple_exit_targets,
	has_indirect_jump, and cont.  Redefine use of unroll_number.
	(loop_unroll_number): Delete.

	* unroll.c (unroll_loop): Store loop unroll count in unroll_number
	field of loop_info.
	(loop_iterations): Delete variable vtop and instead use
	loop_info->vtop computed in prescan_loop.

Sun Aug 29 03:27:23 1999  Scott Weikart <scott@igc.apc.org>

	* fix-header.c (main): Do not pass a null pointer to strcmp.

Sun Aug 29 03:18:48 1999  William Bader  (william@nscs.fast.net)

	* configure.in (i[34567]86-*-sco3.2v4*): Target does not truncate
	filenames.
	* configure: Rebuilt.

Sat Aug 28 19:36:05 1999  Jeffrey A Law  (law@cygnus.com)

	* jump.c (jump_optimize_1): Do not delete assignments to
	internal_arg_pointer.
	* cse.c (delete_trivially_dead_insns): Always consider a set of
	the internal_arg_pointer live.

Sat Aug 28 16:24:31 1999  Richard Henderson  <rth@cygnus.com>

	* flow.c (flow_delete_insn_chain): Rename from delete_insn_chain.
	(update_life_info) [REG_WAS_0]: Search the original insns rather
	than the new insns for the note.  Fix typos finding note_dest.
	If no dest found, discard the note rather than abort.
	[REG_NOALIAS]: Handle as REG_NO_CONFLICT.
	(replace_insns): Remove the old insn list after update_life_info
	not before.

Sat Aug 28 16:20:12 1999  Richard Henderson  <rth@cygnus.com>

	* haifa-sched.c (sched_analyze): Clear LOG_LINKS before calling
	sched_analyze_insn.
	(sched_analyze_1): Let add_dependence care for not adding dups.
	(sched_analyze_2): Likewise.
	(add_branch_dependences): Likewise.

Sat Aug 28 15:58:16 1999  Mumit Khan  <khan@xraylith.wisc.edu>

	* i386/winnt.c (export_list): New type.
	(exports_head): Rename to
	(export_head):  this.
	(i386_pe_record_exported_symbol): Add is_data flag.
	(i386_pe_asm_file_end): Emit directive for exported variables.
	* i386/cygwin.h (i386_pe_record_exported_symbol): Update
	prototype.
	* i386/cygwin.h (ASM_OUTPUT_COMMON): Specify symbol type.
	(ASM_DECLARE_OBJECT_NAME): Likewise.
	(ASM_DECLARE_FUNCTION_NAME): Likewise.
	* i386/uwin.h (ASM_DECLARE_FUNCTION_NAME): Likewise.

Fri Aug 27 15:35:24 1999  Jeffrey A Law  (law@cygnus.com)

	* cse.c (fold_rtx): Work around bug in Sun V5.0 compilers.

	* pa.c (emit_move_sequence): Do not stop on SUBREG_WORD of an
	operand.

Fri Aug 27 14:01:19 1999  Marc Espie <espie@cvs.openbsd.org>

	* config/openbsd.h: Define SET_ASM_OP.
	* tm.texi: cross-reference SET_ASM_OP in the index.

1999-08-27 13:27 -0700  Zack Weinberg  <zack@bitmover.com>

	* rtl.c: Define CONST_DOUBLE_FORMAT to the appropriate format
	for a CONST_DOUBLE, at compile time.  Initialize rtx_length
	and class_narrowest_mode at compile time.  Kill init_rtl.
	Mark rtx_length, mode_class, mode_size, mode_unit_size,
	mode_wider_mode, mode_mask_array, class_narrowest_mode, and
	rtx_format as const.  Kill all references to EXTRA_CC_MODES or
	EXTRA_CC_NAMES.
	* rtl.def (CONST_DOUBLE): Use CONST_DOUBLE_FORMAT macro for
	format.
	* rtl.h: Declare rtx_length and rtx_format as const.
	* machmode.def: Define CC().  Use CC() to define CCmode.  If
	EXTRA_CC_MODES is defined, expand it here.
	* machmode.h: Declare mode_class, mode_size, mode_unit_size,
	mode_wider_mode, mode_mask_array, and class_narrowest_mode as
	const.  Kill all references to EXTRA_CC_MODES.

	* toplev.c: Don't prototype or call init_rtl.
	* optabs.c: Don't call init_mov_optab.
	* genemit.c: Don't generate init_mov_optab.  Don't call
	init_rtl.
	* gengenrtl.c: Duplicate calculation of CONST_DOUBLE_FORMAT
	here.
	* genattr.c, genattrtab.c, gencodes.c, genconfig.c,
	genextract.c, genflags.c, genopinit.c, genoutput.c, genpeep.c,
	genrecog.c: Don't call init_rtl.

	* arc.h, arm.h, c4x.h, i386.h, i960.h, m88k.h, pa.h, pdp11.h,
	rs6000.h, sparc.h: Don't define EXTRA_CC_NAMES.  Use CC() in
	definition of EXTRA_CC_MODES.

	* md.texi: Kill ref to EXTRA_CC_NAMES.
	* tm.texi: Document new way to define EXTRA_CC_MODES.

	* genrecog.c: Do not look up the name of a define_split.
	(Unrelated bugfix.)

Fri Aug 27 17:03:42 1999  Nick Clifton  <nickc@cygnus.com>

	* config/v850/v850.md: Fix typo introduced by previous delta.

Fri Aug 27 09:48:59 1999  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* gcc.c (fatal): Make definition static to match prototype.

Fri Aug 27 10:33:35 1999  Bernd Schmidt  <bernds@cygnus.co.uk>

	* combine.c (get_last_value): Don't look for earlier sets if the last
	known set is somewhere in between the insns being combined.

Fri Aug 27 10:03:12 BST 1999  Nathan Sidwell  <nathan@acm.org>

	* configure.in: Don't use shell ! to negate exit codes
	* configure: Regenerate

Fri Aug 27 09:36:17 1999  Andreas Schwab  <schwab@suse.de>

	* function.c (assign_stack_temp_for_type): Fix change of Mar 5 for
	the fact that ALIGN is measured in bits, not bytes.

1999-08-27 00:27 -0700  Zack Weinberg  <zack@bitmover.com>

	* errors.c: New file; defines functions error, warning, and
	fatal, variables have_error and progname.
	* errors.h: New file; prototypes and decls for stuff in errors.c.

	* Makefile: Add rules to build errors.o and
	$(HOST_PREFIX)errors.o.  Link genconfig, gencodes, genemit,
	genopinit, genrecog, genextract, genpeep, genattr, and
	genoutput with errors.o.  Add errors.h to deps of genconfig.o,
	gencodes.o, genemit.o, genopinit.o, genrecog.o, genextract.o,
	genpeep.o, genattr.o, and genoutput.o.

	* genconfig.c, gencodes.c, genemit.c, genopinit.c, genrecog.c,
	genextract.c, genpeep.c, genattr.c:  Include errors.h.  Don't
	define or prototype fatal.  Set progname at beginning of main.
	* genoutput.c:  Likewise, and don't define or prototype error
	either.

	* c-typeck.c (c_expand_start_case): Return immediately if exp
	is an ERROR_MARK.
	* fold-const.c (operand_equal_p): Return immediately if arg1
	or arg0 are ERROR_MARKs.
	* stor-layout.c (layout_type [case RECORD_TYPE]): Ignore
	fields of type ERROR_MARK when calculating if the record can
	go in a register.

Fri Aug 27 01:03:48 1999  Jim Kingdon  <http://developer.redhat.com>
	with much help from Jeffrey A Law and Richard Henderson

	* i386.md: In the 6 insns which call output_fix_trunc,
	earlyclobber operands[0].

Fri Aug 27 01:01:51 1999  Philip Blundell  <pb@nexus.co.uk>

	* jump.c (duplicate_loop_exit_test): Call reg_scan_update after
	creating new registers.

1999-08-26 23:09 -0700  Zack Weinberg  <zack@bitmover.com>

	* i386.h: Declare ix86_cpu_string, ix86_arch_string,
	i386_reg_alloc_order, i386_regparm_string,
	i386_align_loops_string, i386_align_jumps_string,
	i386_align_funcs_string, i386_preferred_stack_boundary_string,
	and i386_branch_cost_string as type "const char *".
	* i386.c: Define all above strings as type "const char *".

Thu Aug 26 20:36:30 1999  Jim Wilson  <wilson@cygnus.com>

	* dwarf2out.c (output_aranges): Check DWARF_OFFSET_SIZE not PTR_SIZE
	when emitting alignment padding.  Emit padding byte of 0 instead of 4.

Thu Aug 26 18:11:20 1999  Mark Mitchell  <mark@codesourcery.com>

	* tree.c (array_type_nelts): Don't create RTL_EXPRs from
	SAVE_EXPRs unless the SAVE_EXPRs have already been expanded.

Thu Aug 26 19:33:23 1999  Jim Wilson  <wilson@cygnus.com>

	* dwarf2out.c (DWARF2_ASM_LINE_DEBUG_INFO): Add default definition.
	(debug_dwarf): Add DWARF2_ASM_LINE_DEBUG_INFO support.
	(dwarf2out_line, dwarf2out_finish): Likewise.
	* tm.texi (DWARF2_ASM_LINE_DEBUG_INFO): Add documentation.

Thu Aug 26 16:10:56 1999  Gavin Romig-Koch  <gavin@cygnus.com>

	* tree.c (lang_unsave_expr_now) : Correct return type.
	* tree.h (lang_unsave_expr_now) : Same.

Thu Aug 26 13:12:29 1999  Jeffrey A Law  (law@cygnus.com)

	* pa.c (cint_ok_for_move): Use CONST_INT_OK_FOR_LETTER_P macros
	instead of duplicating code.

Thu Aug 26 18:32:32 1999  Bernd Schmidt  <bernds@cygnus.co.uk>

	* gcse.c (hash_scan_insn): Don't scan obvious no-ops.

1999-08-26 09:42 -0700  Zack Weinberg  <zack@bitmover.com>

	* tree.h: fancy_abort always takes three args.
	* resource.c: Move include of system.h before toplev.h.

Thu Aug 26 09:46:16 1999  Nick Clifton  <nickc@cygnus.com>

	* dwarf2out.c (mem_loc_descriptor): Accept LABEL_REFs as well
	as SYMBOL_REFs.

1999-08-25 22:10 -0700  Zack Weinberg  <zack@bitmover.com>

	* system.h: Don't redefine abort or trim_filename.
	* rtl.h: Define abort to fancy_abort (__FILE__, __LINE__, 0)
	or fancy_abort (__FILE__, __LINE__, __FUNCTION__) depending on
	whether or not __FUNCTION__ is available.
	* tree.h: Duplicate rtl.h's definition of abort, for files
	that don't include rtl.h.  Delete all code to perform type
	checking with a compiler other than GCC.
	* varray.h: Delete all code to perform type checking with a
	compiler other than GCC.  Make VARRAY_CHECK() always evaluate
	its arguments exactly once, using a statement expression.
	Adjust the VARRAY_<type> accessor macros to match.
	* toplev.h (fatal_insn, fatal_insn_not_found): Kill.
	(_fatal_insn, _fatal_insn_not_found): New fns, take info on
	caller's location.  Define fatal_insn and fatal_insn_not_found
	as macros that use _fatal_insn and _fatal_insn_not_found.
	(fancy_abort, trim_filename): Kill prototypes.

	* rtl.c (trim_filename): Move here from toplev.c.
	(fancy_abort): New function.
	(DIR_SEPARATOR): Provide default definition.
	* tree.c (tree_check_failed, tree_class_check_failed): Go
	through fancy_abort.
	(tree_check, tree_class_check, cst_or_constructor_check,
	expr_check): Delete.
	* varray.c (varray_check_failed): New function.
	* toplev.c (fatal_insn, fatal_insn_not_found): Replace with
	_fatal_insn and _fatal_insn_not_found.  Go through
	fancy_abort.
	(trim_filename, fancy_abort): Delete.

	* builtins.c (expand_builtin_args_info): Report ICE with abort.
	* except.c (start_catch_handler): Report ICE with error/abort
	combo.
	* final.c (output_operand_lossage): Likewise.
	* flow.c (verify_flow_info): Likewise.

	* gcc.c: Prototype fatal.
	* gengenrtl.c: Undef abort after including rtl.h not system.h.
	* genattr.c, genattrtab.c, genemit.c, genextract.c,
	genflags.c, genopinit.c, genoutput.c, genpeep.c, genrecog.c:
	Don't define fancy_abort.

Wed Aug 25 17:56:59 1999  Richard Henderson  <rth@cygnus.com>

	* optabs.c (emit_cmp_and_jump_insns): Be more thorough in
	canonization.

Wed Aug 25 15:35:55 1999  Richard Henderson  <rth@cygnus.com>

	* m88k.h (VERSION_INFO2): Kill.
	(VERSION_STRING): Kill.
	(TM_RCS_ID): Kill.
	(VERSION_INFO1): Tidy.
	(TARGET_VERSION): Update.
	* m88k/dgux.h (VERSION_INFO2): Kill.
	(ASM_FIRST_LINE): Adjust for death of VERSION_STRING.
	* m88k/luna.h (VERSION_INFO1): Tidy.
	* m88k/sysv4.h (VERSION_INFO1): Likewise.
	* m88k.c (out_rcs_id, tm_rcs_id): Kill.
	(output_file_start): Adjust for death of VERSION_STRING.

1999-08-25 13:51 -0700  Jim Meyering  <meyering@ascend.com>

	* cpplib.c (detect_if_not_defined): New function.
	(do_if): Use it to detect potential once-only headers.

Wed Aug 25 14:00:18 1999  Jason Merrill  <jason@yorick.cygnus.com>

	* c-common.c (combine_strings): Always set TREE_CONSTANT.

Wed Aug 25 15:27:22 1999  Gavin Romig-Koch  <gavin@cygnus.com>

	* combine.c (nonzero_bits) : Allow single-ly set registers to be
	anywere in the function only if they are pseudos and set before
	being used (not live at the start of the function).
	(num_sign_bit_copies) : Same.
	(get_last_value_validate) : Same.
	(get_last_value) : Same.

Wed Aug 25 11:13:29 1999  Richard Henderson  <rth@cygnus.com>

	* loop.c (express_from): Try harder to unify (* c N) and (* c M)
	where N and M are constant and N is an integer multiple of M.

Wed Aug 25 13:55:47 EDT 1999  Andrew MacLeod  <amacleod@cygnus.com>

	* sbitmap.h (sbitmap_intersection_of_succs): Add prototype.
	(sbitmap_intersection_of_preds, sbitmap_union_of_succs,
	sbitmap_union_of_preds): Add prototypes.
	* sbitmap.c (sbitmap_intersection_of_succs): New function to compute
	the intersection of successors with the new flow graph structures.
	(sbitmap_intersection_of_preds): New function to compute the
	intersection of predecessors with the new flow graph structures.
	(sbitmap_union_of_succs): New function to compute the union of
	successors with the new flow graph structures.
	(sbitmap_union_of_preds): New function to compute the union of
	predecessors with the new flow graph structures.
	* gcse.c (compute_rdm, compute_available): Use new sbitmap routines.
	(expr_reaches_here_p): Use edge and basic_block structures instead
	of s_preds and s_succs.
	(compute_cprop_avinout): Use new sbitmap routines.
	(pre_expr_reaches_here_p): Use edge and basic_block structures instead
	of s_preds and s_succs.
	* flow.c (compute_flow_dominators): Compute dominators using
	edges and basic blocks instead of s_preds and s_succs.

Wed Aug 25 13:41:47 EDT 1999  Andrew MacLeod  <amacleod@cygnus.com>

	* lists.c (unused_insn_list, unused_expr_list): New file for
	maintaining various types of lists. New statics for maintaining a
	cache of available INSN_LIST and EXPR_LIST nodes.
	(free_list): Static function for freeing a list of INSN/EXPR nodes.
	(alloc_INSN_LIST): Function to get a free INSN_LIST node.
	(alloc_EXPR_LIST): Function to get a free EXPR_LIST node.
	(init_EXPR_INSN_LIST_cache): Initialize the cache lists.
	(free_EXPR_LIST_list): Free an entire list of EXPR_LIST nodes.
	(free_INSN_LIST_list): Free an entire list of INSN_LIST nodes.
	(free_EXPR_LIST_node): Free an individual EXPR_LIST node.
	(free_INSN_LIST_node): Free an individual INSN_LIST node.
	* haifa-sched.c (unused_insn_list, unused_expr_list): Moved to flow.c
	(free_list, alloc_INSN_LIST, alloc_EXPR_LIST): Moved to flow.c
	(remove_dependence, free_pending_lists): Use new global routines.
	(flush_pending_lists, sched_analyze_insn): Use new global routines.
	(sched_analyze, compute_block_backward_dependences): Use new routines.
	(sched_analyze_1, sched_analyze_2): Use new routines.
	(schedule_insns): Use new global routines.
	* rtl.h (init_EXPR_INSN_LIST_cache, free_EXPR_LIST_list): Add function
	prototypes.
	(free_INSN_LIST_list, free_EXPR_LIST_node): Add prototypes.
	(free_INSN_LIST_node, alloc_INSN_LIST, alloc_EXPR_LIST): Add function
	prototypes.
	* toplev.c (rest_of_compilation): Initialize node cache.
	* Makefile.in (OBJS): Add lists.o to list of object files.
	(lists.o): Add dependencies.

Wed Aug 25 17:31:56 1999  Nick Clifton  <nickc@cygnus.com>

	* config/v850/v850.md: Fix compile time warning messages.
	* config/v850/v850.c: Fix compile time warning messages.
	* config/v850/v850.h: Fix compile time warning messages.

Wed Aug 25 09:44:43 1999  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* genattr.c (gen_attr): Add prototype arguments for get_attr_*().
	Remove unused prototype for `init_lengths'.

Wed Aug 25 09:32:31 1999  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* calls.c (emit_call_1): Mark parameter `stack_size' with
	ATTRIBUTE_UNUSED.
	(expand_call): Initialize variable `insn'.
	(emit_library_call): Likewise for variable `high_to_save'.
	(emit_library_call_value): Likewise.
	(store_one_arg): Likewise for variables `lower_bound' and
	`upper_bound'.

	* combine.c (try_combine): Likewise for variables `i2_code_number'
	and `other_code_number'.
	(find_split_point): Likewise for variables `pos', `unsignedp' and
	`inner'.
	(simplify_if_then_else): Likewise for variables `op' and `c1'.
	(simplify_and_const_int): Remove unused variable `width'.
	(merge_outer_ops): Likewise.

	* cse.c (simplify_binary_operation): Cast an INTVAL() to `unsigned
	HOST_WIDE_INT' when comparing against one.
	(simplify_relational_operation): Likewise.
	(cse_insn): Initialize variables `src_eqv_volatile',
	`src_eqv_in_memory', `src_eqv_in_struct', `src_eqv_hash' and `sets'.

	* final.c (init_final): Constify parameter `filename'.
	(final_start_function): Mark parameter `optimize' with
	ATTRIBUTE_UNUSED.
	(profile_function): Likewise for parameters `first' and `optimize'.
	(output_source_line): Likewise for parameter `file'.

	* integrate.c (subst_constants): Cast a value to `size_t' when
	comparing against one.
	(mark_stores): Initialize variable `mode'.  Cast a value to
	`size_t' when comparing against one.

	* integrate.h (MAYBE_EXTEND_CONST_EQUIV_VARRAY): Likewise.

	* loop.c (move_movables): Initialize variable `first'.
	(strength_reduce): Likewise for variable `increment'.
	(check_dbra_loop): Likewise for variable `comparison_val'.  Cast a
	value to `size_t' when comparing against one.
	(load_mems): Initialize variable `end_label'.

	* output.h (init_final): Constify parameter.

	* reload.c (decompose): Initialize variable `base'.

	* reload1.c (reload): Likewise for variable `is_scalar'.
	(spill_hard_reg): Mark parameter `dumpfile' with ATTRIBUTE_UNUSED.
	(choose_reload_regs): Initialize variable `mode'.
	(emit_reload_insns): Likewise for variable `store_insn'.
	(reload_cse_noop_set_p): Mark parameter `insn' with
	ATTRIBUTE_UNUSED.
	(reload_combine): Initialize variable `set'.

	* unroll.c (unroll_loop): Likewise for variable `local_label'.
	(copy_loop_body): Cast a value to `size_t' when comparing against
	one.

	* varasm.c (assemble_variable): Initialize variable `size_tree'.
	(const_hash): Add an `else abort()' in an if-else-if-else sequence.
	(remove_from_pending_weak_list): Mark parameter `name' with
	ATTRIBUTE_UNUSED.

Wed Aug 25 11:18:39 1999  Bernd Schmidt  <bernds@cygnus.co.uk>

	* toplev.c (rest_of_compilation): Use decl_printable_name when opening
	gcse dump file.

Wed Aug 25 10:57:12 1999  Nick Clifton  <nickc@cygnus.com>

	* config/arm/telf.h (ASM_WEAKEN_LABEL): Define.
	(ASM_DECLARE_FUNCTION_NAME): Define.
	(TYPE_ASM_OP, SIZE_ASM_OP, TYPE_OPERAND_FORMAT,
	ASM_DECLARE_RESULT, ASM_DECLARE_OBJECT_NAME,
	ASM_FINISH_DECLARE_OBJECT, ASM_DECLARE_FUNCTION_SIZE): Define if
	not already defined.

Wed Aug 25 01:36:11 1999  John David Anglin  <dave@hiauly1.hia.nrc.ca>

	* calls.c (emit_call_1): Use call_pop/call_value_pop for all values
	of n_popped when call/call_value are not defined.

Wed Aug 25 01:25:14 1999  Jeffrey A Law  (law@cygnus.com)

	* tm.texi: GNU CC -> GCC conversion.
	(CC1_SPEC): Indicate it is used for all language front ends.

Tue Aug 24 23:43:03 1999  Mark Mitchell  <mark@codesourcery.com>

	* flow.c (delete_block): Spell NOTE_INSN_EH_REGION_BEG and
	NOTE_INSN_EH_REGION_END correctly.

Tue Aug 24 23:26:44 1999  Michael Tiemann  <tiemann@holodeck.cygnus.com>
			  Jeff Law <law@cygnus.com>

	* loop.c (strength_reduce): Automatically unroll loops if the
	unrolled loop size is smaller than the rolled loop size.

	* loop.c (insert_bct): Replace use of sdiv_optab with asr_optab
	and delete comment that code should be rewritten.

Tue Aug 24 22:56:35 1999  Jeffrey A Law  (law@cygnus.com)

	* haifa-sched.c (find_rgns): Mark a block found during the DFS search
	as reachable.

	* haifa-sched.c (get_visual_tbl_length): Fix off-by-one error.

Tue Aug 24 22:41:06 1999  Mumit Khan  <khan@xraylith.wisc.edu>

	* fixinc/mkfixinc.sh: Don't fix uwin headers.
	* i386/uwin.h (MD_STARTFILE_PREFIX): Define.
	(LINK_SPEC): Add -u _main when building executables.
	(ASM_DECLARE_FUNCTION): Update from Cygwin.
	(ASM_FILE_END): Use the default for ix86-pe.
	* i386/xm-uwin.h (HAVE_BCOPY): Undefine.

Tue Aug 24 20:49:47 1999  Art Haas  <ahaas@neosoft.com>

	* final.c (output_addr_const): Handle case where ASM_OPEN_PAREN
	and ASM_CLOSE_PAREN are empty strings.

Wed Aug 25 12:46:22 1999  Fred Fish  <fnf@cygnus.com>
			  Geoffrey Keating <geoffk@cygnus.com>

	* Makefile.in (PREPROCESSOR_DEFINES): New macro.
	(protoize.o):  Use PREPROCESSOR_DEFINES and DRIVER_DEFINES.
	(unprotoize.o): Ditto.
	(test-protoize-simple): Don't define STD_PROTO_DIR.
	* protoize.c: Use PARAMS rather than PROTO.  Minor whitespace
	changes to make 'test-protoize-simple' pass.
	(STD_PROTO_DIR): Remove define.
	(STANDARD_EXEC_PREFIX): Supply default define.
	(standard_exec_prefix): New variable, init to STANDARD_EXEC_PREFIX.
	(target_machine): New variable, init to DEFAULT_TARGET_MACHINE.
	(target_version): New variable, init to DEFAULT_TARGET_VERSION.
	(GET_ENV_PATH_LIST): New macro.
	(default_syscalls_dir): No longer initialized to STD_PROTO_DIR.
	(do_processing): Initialize default_syscalls_dir using new
	macros.  Use it to initialize syscalls_absolute_filename.

Tue Aug 24 16:58:15 1999  Richard Henderson  <rth@cygnus.com>

	* jump.c (jump_optimize_1): Do cmov opt on any single-set; force
	B into a register before emit_conditional_move.

Tue Aug 24 15:37:03 1999  Richard Henderson  <rth@cygnus.com>

	* fold-const.c (fold): Reassociate (+ (+ (* a b) c) (* d e))
	as (+ (+ (* a b) (* d e)) c).  Factor a common power-of-two
	multiplicand out of (+ (* a b) (* c d)).

Tue Aug 24 11:46:10 1999  Bob Manson <manson@cygnus.com>
			  Richard Henderson  <rth@cygnus.com>

	* haifa-sched.c (split_hard_reg_notes): Move to flow.c
	(new_insn_dead_notes): Likewise.
	(update_n_sets): Likewise.
	(update_flow_info): Move to flow.c, renamed to update_life_info;
	extend to handle multiple source insns.
	* flow.c: Include resource.h
	(unlink_insn_chain): New.
	(split_hard_reg_notes): New.
	(maybe_add_dead_note): New.
	(maybe_add_dead_note_use): New.
	(find_insn_with_note): New.
	(new_insn_dead_notes): New.
	(update_n_sets): New.
	(sets_reg_or_subreg_1, sets_reg_or_subreg): New.
	(maybe_remove_dead_notes): New.
	(update_life_info): New.
	(prepend_reg_notes): New.
	(replace_insns): New.
	* output.h (update_life_info): Declare.
	* recog.c (split_block_insns): Use update_life_info.
	* resource.c (find_free_register): Use reg_alloc_order, don't use
	fixed regs, make sure the mode is supported, don't use new regs.
	(reg_dead_p): New.
	* rtl.h (replace_insns): Declare.

Tue Aug 24 13:48:39 1999  Nathan Sidwell  <nathan@acm.org>

	* expr.c (expand_expr): Cope with COND_EXPRs with one
	non-returning branch.

Mon Aug 23 22:28:16 1999  Mark Mitchell  <mark@codesourcery.com>

	* expr.c (store_expr): Always pass down the target, even when not
	doing CSE.

1999-08-24  Nick Clifton  <nickc@cygnus.com>

	* configure.in: Define target_cpu_default for v850 targets.
	* configure: Regenerate

	* config/v850/v850.h (TARGET_CPU_generic): Define.
	(GO_IF_LEGITIMATE_ADDRESS): Insist that SImode and larger constant
	addresses are 4 byte aligned.

	* config/v850/v850.c (print_operand): Cope with 'R' format DFmode
	addresses.

Tue Aug 24 09:32:07 1999  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* genattr.c (function_unit_desc): Constify a char*.  Add prototype.
	(main): Add prototypes.

	* genattrtab.c (substitute_address, write_const_num_delay_slots,
	attr_eq, attr_numeral, attr_equal_p, attr_copy_rtx): Prototype.
	(write_attr_get): Emit prototypes along with function definition.
	(write_eligible_delay): Mark a parameter with ATTRIBUTE_UNUSED.
	(write_complex_function): Emit static prototype along with
	function definition.

	* genemit.c (gen_split): Emit prototypes along with function
	definition.

	* genoutput.c (output_epilogue): Add prototype to `insn_outfun'.
	Likewise for predicates and `insn_operand_predicate'.
	(process_template): Emit static prototype along with function
	definition.

	* genrecog.c (make_insn_sequence): Constify a char*.  Add
	prototypes for get_split_*().
	(write_subroutine): Emit prototypes along with function
	definition.

Tue Aug 24 12:35:20 1999  Bernd Schmidt  <bernds@cygnus.co.uk>

	* gcse.c (find_avail_set): Follow chains of register-register copies.
	Use oprs_not_set_p to guarantee that the returned value can be
	substituted.
	(cprop_insn): Don't verify the return value of find_avail_set with
	oprs_not_set_p.

	* gcse.c (cprop_jump): New function, broken out of cprop_insn.
	(cprop_cc0_jump): New function.
	(cprop_insn): Break out new function cprop_jump and use it.
	Also use cprop_cc0_jump for machines with CC0.
	(cprop): Don't crash if cprop_insn turned the insn into a NOTE.

	* tree.h (current_function_calls_setjmp,
	current_function_calls_longjmp): Delete declarations.
	* dsp16xx.c: Include "function.h".
	* elxsi.c: Likewise.
	* gmicro.c: Likewise.
	* h8300.c: Likewise.
	* i370.c: Likewise.
	* m32r.c: Likewise.
	* mn10200.c: Likewise.
	* mn10300.c: Likewise.
	* ns32k.c: Likewise.
	* spur.c: Likewise.
	* v850.c: Likewise.

	* rtl.h (rtx_equal_function_value_matters): Declare.
	* toplev.c (rtx_equal_function_value_matters): Don't declare.
	* cse.c: Likewise.
	* function.c: Likewise.
	* emit-rtl.c: Likewise.

Tue Aug 24 02:47:44 1999  Jeffrey A Law  (law@cygnus.com)

	* expr.c (convert_move): Fix arguments to TRULY_NOOP_TRUNCATION
	call.

1999-08-24 Herman A.J. ten Brugge <Haj.Ten.Brugge@net.HCC.nl>

	* jump.c (delete_barrier_successors) Match (set (pc) (pc)) insn
	exactly.

Mon Aug 23 23:35:52 1999  Matthias Klose  <doko@cs.tu-berlin.de>

	* cpp.texi: Add a node documenting macro varargs (copied
	from extend.texi).

1999-08-23 22:23 -0700  Zack Weinberg  <zack@bitmover.com>

	* cppspec.c: Put a null pointer at the end of the new argv.

Mon Aug 23 21:23:24 1999  Jeffrey A Law  (law@cygnus.com)

	* configure.in: Remove code to select/de-select the haifa
	scheduler.  Every scheduled port gets haifa now.
	* configure: Rebuilt.
	* flags.h, genattrtab.c, rtl.h, toplev.c: Remove HAIFA ifdefs.
	* sched.c Deleted.
	* Makefile.in: Corresponding changes.

Mon Aug 23 16:04:13 1999  Bernd Schmidt  <bernds@cygnus.co.uk>

	* optabs.c (prepare_cmp_insn): Turn COMPARISON arg into a pointer.
	All callers changed.
	(prepare_float_lib_cmp): Likewise.
	Use FLOAT_LIB_COMPARE_RETURNS_BOOL.
	* expr.h (emit_float_lib_cmp): Delete declaration.
	* tm.texi (FLOAT_LIB_COMPARE_RETURNS_BOOL): Document.
	* sparc.h (FLOAT_LIB_COMPARE_RETURNS_BOOL): Define.
	* sparc.md (bcc and scc patterns): Don't handle TFmode comparisons
	specially.
	(cmptf): Now conditional on TARGET_HARD_QUAD.

Fri Aug 20 17:52:27 1999  Jim Wilson  <wilson@cygnus.com>

	* resource.c (mark_target_live_regs): Use
	PIC_OFFSET_TABLE_REG_CALL_CLOBBERED.

Fri Aug 20 19:07:55 1999  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* rtl.c (rtx_class, note_insn_name, reg_note_name): Constify.

	* rtl.h (rtx_class, reg_note_name, note_insn_name): Likewise.

	* genopinit.c (gen_insn): Use accessor macro, not `rtx_class'.

Fri Aug 20 18:53:43 1999  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* rtl.h (rtx_format): Constify a char*.

	* rtl.c (rtx_format): Likewise.
	(copy_rtx, copy_most_rtx, read_rtx): Likewise.
	(init_rtl): Use accessor macro, not `rtx_format'.

	* alias.c (rtx_equal_for_memref_p, find_symbolic_term): Constify a
	char*.

	* caller-save.c (mark_referenced_regs): Likewise.

	* combine.c (subst, make_compound_operation, known_cond,
	gen_rtx_combine, update_table_tick, get_last_value_validate,
	use_crosses_set_p, mark_used_regs_combine, move_deaths): Likewise.

	* cse.c (rtx_cost, mention_regs, canon_hash, exp_equiv_p,
	refers_to_p, canon_reg, fold_rtx, cse_process_notes,
	count_reg_usage): Likewise.

	* emit-rtl.c (gen_rtx, copy_rtx_if_shared, reset_used_flags):
	Likewise.

	* final.c (leaf_renumber_regs_insn): Likewise.

	* flow.c (mark_used_regs, find_use_as_address, dump_flow_info,
	dump_edge_info, count_reg_references): Likewise.

	* function.c (fixup_var_refs_1, walk_fixup_memory_subreg,
	fixup_stack_1, purge_addressof_1, instantiate_virtual_regs_1):
	Likewise.

	* gcse.c (oprs_unchanged_p, hash_expr_1, expr_equiv_p,
	oprs_not_set_p, expr_killed_p, compute_transp, find_used_regs,
	add_label_notes): Likewise.

	* genattrtab.c (attr_rtx, attr_copy_rtx, encode_units_mask,
	clear_struct_flag, count_sub_rtxs, count_alternatives,
	compares_alternatives_p, contained_in_p, walk_attr_value,
	write_expr_attr_cache): Likewise.

	* genconfig.c (walk_insn_part): Likewise.

	* genemit.c (max_operand_1, gen_exp): Likewise.

	* genextract.c (walk_rtx): Likewise.

	* genflags.c (num_operands): Likewise.

	* genoutput.c (scan_operands): Likewise.

	* genpeep.c (match_rtx): Likewise.

	* genrecog.c (add_to_sequence): Likewise.

	* haifa-sched.c (may_trap_exp, sched_analyze_2, attach_deaths):
	Likewise.

	* integrate.c (save_constants, copy_for_inline,
	copy_rtx_and_substitute, subst_constants, restore_constants):
	Likewise.

	* jump.c  (mark_jump_label, invert_exp, redirect_exp,
	rtx_renumbered_equal_p, rtx_equal_for_thread_p): Likewise.

	* local-alloc.c (contains_replace_regs, memref_referenced_p):
	Likewise.

	* loop.c (record_excess_regs, rtx_equal_for_loop_p,
	add_label_notes, replace_call_address, count_nonfixed_reads,
	invariant_p, find_single_use_in_loop, find_mem_givs,
	find_life_end, maybe_eliminate_biv_1, update_reg_last_use):
	Likewise.

	* print-rtl.c (reg_names, print_rtx): Likewise.

	* recog.c (validate_replace_rtx_1, find_single_use_1): Likewise.

	* reg-stack.c (stack_regs_mentioned_p, record_label_references,
	record_reg_life_pat, swap_rtx_condition, goto_block_pat,
	print_blocks): Likewise.

	* regclass.c (fix_register, record_address_regs,
	reg_scan_mark_refs): Likewise.

	* regmove.c (stable_but_for_p): Likewise.

	* reload.c (loc_mentioned_in_p, operands_match_p,
	find_reloads_toplevsubst_reg_equivs, find_reloads_address_1,
	copy_replacements, refers_to_regno_for_reload_p,
	refers_to_mem_for_reload_p, find_inc_amount, regno_clobbered_p,
	reload_when_needed_name, reg_class_names, debug_reload_to_stream):
	Likewise.

	* reload1.c (eliminate_regs, scan_paradoxical_subregs,
	delete_address_reloads_1, count_occurrences,
	reload_cse_mem_conflict_p, reload_combine_note_use,
	add_auto_inc_notes): Likewise.

	* resource.c (mark_referenced_resources, mark_set_resources):
	Likewise.

	* rtlanal.c (rtx_unstable_p, rtx_varies_p, rtx_addr_varies_p,
	reg_mentioned_p, regs_set_between_p, modified_between_p,
	modified_in_p, refers_to_regno_p, reg_overlap_mentioned_p,
	rtx_equal_p, volatile_insn_p, volatile_refs_p, side_effects_p,
	may_trap_p, inequality_comparisons_p, replace_rtx, replace_regs,
	jmp_uses_reg_or_mem, for_each_rtx, regno_use_in): Likewise.

	* sched.c (sched_analyze_2, attach_deaths): Likewise.

	* stupid.c (stupid_mark_refs): Likewise.

	* unroll.c (remap_split_bivs): Likewise.

	* varasm.c (mark_constants): Likewise.

	* a29k/a29k.c (uses_local_reg_p): Likewise.

	* alpha/alpha.c (summarize_insn): Likewise.

	* arm/arm.c (symbol_mentioned_p, label_mentioned_p,
	eliminate_lr2ip): Likewise.

	* arm/thumb.c (symbol_mentioned_p, label_mentioned_p): Likewise.

	* i386/i386.c (symbolic_reference_mentioned_p, copy_all_rtx,
	reg_mentioned_in_mem): Likewise.

	* ns32k/ns32k.c (global_symbolic_reference_mentioned_p,
	symbolic_reference_mentioned_p): Likewise.

	* romp/romp.c (unsigned_comparisons_p, hash_rtx): Likewise.

	* sh/sh.c (regs_used, mark_use): Likewise.

	* vax/vax.c (vax_rtx_cost): Likewise.

Fri Aug 20 18:38:43 1999  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* machmode.h (mode_name): Constify a char*.

	* rtl.c (mode_name): Likewise.

	* genopinit.c (gen_insn): Use accessor macro, not `mode_name'.

	* optabs.c (init_libfuncs): Constify a char*.

	* print-tree.c (mode_name): Remove redundant declaration.
	(print_node): Use accessor macro, not `mode_name'.

	* reload1.c (dump_needs): Constify a char*.  Use accessor macro,
	not `mode_name'.
	(new_spill_reg): Constify a char*.

	* tree.c (mode_name): Remove redundant declaration.

Fri Aug 20 18:31:26 1999  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* rtl.c (rtx_name): Constify a char*.

	* rtl.h (rtx_name, fix_sched_param): Likewise.

	* gmicro/gmicro.c (rtx_name): Remove redundant declaration.
	(mypr): Use accessor macro, not `rtx_name'.

	* genemit.c (print_code): Constify a char*.

	* genopinit.c (gen_insn): Use accessor macro, not `rtx_name'.

	* genpeep.c (print_code): Constify a char*.

	* genrecog.c (print_code): Likewise.

	* graph.c (start_fct, start_bb, node_data, draw_edge, end_fct,
	end_bb): Add static prototype.
	(draw_edge): Constify a char*.
	(end_bb): Remove unused parameter.

	* haifa-sched.c (fix_sched_param, safe_concat, print_exp
	print_block_visualization): Constify a char*.

Fri Aug 20 15:02:10 1999  Mark Mitchell  <mark@codesourcery.com>

	* c-common.c (c_get_alias_set): Update comment.

1999-08-20  Andreas Jaeger  <aj@arthur.rhein-neckar.de>

	* linux.h (LIB_SPEC): Added.

Fri Aug 20 22:32:17 1999  Michael Hayes  <m.hayes@elec.canterbury.ac.nz>

	* config/c4x/c4x.h (STARTFILE_SPEC): Don't def.

1999-08-19 18:43 -0700  Zack Weinberg  <zack@bitmover.com>

	* tree.c (expr_check): Fix typo in last change.

1999-08-19 14:44 -0700  Zack Weinberg  <zack@bitmover.com>

	* rtl.def (NOTE): Change format to "iuu0n".
	(ADDR_DIFF_VEC): Change format to "eEee0".
	(ADDRESSOF): Change format to "eit".

	* rtl.h (rtvec): Make "elem" an array of rtx, not rtunion.
	(RTVEC_ELT): Change to match.
	(XVECEXP): Use XVEC and RTVEC_ELT.
	(INSN_UID, INSN_CODE, CODE_LABEL_NUMBER, NOTE_LINE_NUMBER,
	ADDRESSOF_REGNO, REGNO, SUBREG_WORD): Use XINT.
	(PREV_INSN, NEXT_INSN, PATTERN, REG_NOTES,
	CALL_INSN_FUNCTION_USAGE, SUBREG_REG, SET_SRC, SET_DEST,
	TRAP_CONDITION, TRAP_CODE): Use XEXP.
	(INTVAL): Use XWINT.
	(ADDRESSOF_DECL): Use XTREE.
	(SET_ADDRESSOF_DECL): Delete.
	(NOTE_DECL_NAME, NOTE_DECL_CODE, NOTE_DECL_RTL,
	NOTE_DECL_IDENTIFIER, NOTE_DECL_TYPE): Kill.  These have been
	ifdefed out since 2.6 at least.
	(gen_rtvec_vv): Delete prototype.

	* rtl.h (rtvec_alloc): rt->elem is now an array of rtx,
	not rtunion.
	(copy_most_rtx): Handle 't' format letter.
	* emit-rtl.c (gen_rtvec_v): rt_val->elem is an array of rtx.
	(gen_rtvec_vv): Delete function.  All callers changed to use
	gen_rtvec_v instead.
	* print-rtl.c (print_rtx): Move special casing of NOTEs to
	the '0' format letter.

	* function.c (gen_mem_addressof): Don't use
	SET_ADDRESSOF_DECL; provide `decl' to gen_rtx_ADDRESSOF
	instead.
	* integrate.c (copy_rtx_and_substitute): Likewise.
	Copy 't' slots with XTREE.
	(subst_constants): Treat 't' slots like '[swi]' slots.
	* cse.c (canon_hash, exp_equiv_p): Treat 't' slots like	'0' slots.
	* jump.c (rtx_equal_for_thread_p): Likewise.
	* rtlanal.c (rtx_equal_p): Likewise.
	* stmt.c (expand_end_case): gen_rtx_ADDR_DIFF_VEC now takes
	only four arguments.
	* gengenrtl.c (type_from_format): Provide correct types for
	'b' and 't' slots.


	* tree.h [ENABLE_CHECKING] (TREE_CHECK, TREE_CLASS_CHECK):
	If a recent gcc is in use (always in stage2 and beyond), use
	statement expressions, so we don't make a function call unless
	the check fails.  Evaluate arguments exactly once.
	(CHAIN_CHECK, DO_CHECK, DO_CHECK1, TREE_CHECK1,
	TREE_CLASS_CHECK1, TYPE_CHECK1, DECL_CHECK1, CST_CHECK1):
	Delete.
	(CST_OR_CONSTRUCTOR_CHECK, EXPR_CHECK): Redefine such that
	they evaluate their arguments exactly once, irrespective of
	the compiler in use.

	* tree.c [ENABLE_CHECKING]: Define whichever set of functions
	is used by the currently-enabled check macros.  This is:
	(tree_check_failed, tree_class_check_failed): For gcc.
	(tree_check, tree_class_check, cst_or_constructor_check,
	expr_check): For other compilers.

	* gencheck.c: Do not define any *_CHECK1 macros.

Thu Aug 19 14:42:38 1999  Mike Stump <mrs@wrs.com>
			  Mark Mitchell <mark@codesourcery.com>

	* c-common.c (c_get_alias_set): Fix support for pointers and
	references.

Thu Aug 19 11:51:22 EDT 1999  John Wehle  (john@feith.com)

	* alias.c: Include tree.h.
	(nonlocal_reference_p, mark_constant_function): New functions.
	* flow.c (life_analysis): Call mark_constant_function.
	* rtl.h (mark_constant_function): Declare it.

Thu Aug 19 15:02:01 1999  Nick Clifton  <nickc@cygnus.com>

	* config/rs6000/rs6000.c (rs6000_override_options): Fix test for
	unrecognizable switches.

Wed Aug 18 23:31:57 1999  J"orn Rennecke <amylaar@cygnus.co.uk>

	* loop.c (recombine_givs): Set ix field after sorting.
	(recombine_givs): Remove bogus index / giv lockstep looping.

Wed Aug 18 18:20:40 1999  Bernd Schmidt  <bernds@cygnus.co.uk>

	* expmed.c (emit_store_flag): If UNSIGNEDP, call unsigned_condition
	on CODE.
	(emit_store_flag_force): Use do_compare_rtx_and_jump.
	(do_cmp_and_jump): Formatting fixes.
	* expr.c (do_compare_and_jump): Renamed from compare; changed to call
	do_compare_rtx_and_jump instead of compare_from_rtx.
	(do_compare_rtx_and_jump): New function; mostly copied from
	compare_from_rtx.
	(do_jump_for_compare): Delete.
	(expand_expr): Use do_compare_rtx_and_jump when handling MAX_EXPR and
	MIN_EXPR.
	(do_jump): Use do_compare_and_jump or do_compare_rtx_and_jump instead
	of compare/do_jump_for_compare pairs.
	(do_jump_by_parts_greater): Use do_jump_by_parts_greater_rtx.
	(do_jump_by_parts_greater_rtx): Use do_compare_rtx_and_jump instead of
	compare_from_rtx/do_jump_for_compare pairs.
	(do_jump_by_parts_equality): Likewise.
	(do_jump_by_parts_equality_rtx): Likewise.
	* expr.h (do_compare_rtx_and_jump): Declare.
	* optabs.c (prepare_cmp_insn): New function, contains most of the code
	that used to be in emit_cmp_insn.
	(cmp_available_p): New function.
	(prepare_operand): New function.
	(emit_cmp_and_jump_insn_1): New function, contains some code that used
	to be in emit_cmp_insn.
	(prepare_float_lib_cmp): Renamed from emit_float_lib_cmp; change some
	parameters to be pointers; don't emit final compare but modify some of
	the values pointed to by the args so the caller can perform the
	correct comparison.
	(expand_binop): Call emit_store_flag_force with signed forms of
	comparison code.
	(expand_abs): Use do_compare_rtx_and_jump instead of compare_from_rtx/
	emit_jump_insn pair.
	(emit_cmp_and_jump_insn): Use prepare_cmp_insn and
	emit_cmp_and_jump_insn_1.  Call emit_queue.
	(emit_cmp_insn): Just call emit_cmp_and_jump_insns with zero for LABEL
	arg.
	* flow.c (tidy_fallthru_edge): If HAVE_cc0, verify insn before a
	jump sets cc0 before deleting it.
	* integrate.c (expand_inline_function): Likewise.
	* unroll.c (unroll_loop): Similar changes in several places.
	(copy_loop_body): If HAVE_cc0, verify insn before a jump sets cc0
	before deleting it.

Wed Aug 18 06:37:44 1999  Bernd Schmidt  <bernds@cygnus.co.uk>

	* Makefile.in (insn-recog.o): Update dependencies.
	* genrecog.c (main): Make generated file include "function.h".

Sat Aug 14 00:54:57 1999  Geoffrey Keating  <geoffk@cygnus.com>

	* cse.c (cse_insn): Call never_reached_warning when a jump is
	changed to be unconditional.
	* flags.h: Declare warn_notreached.
	* flow.c (delete_block): Call never_reached_warning when
	a block is deleted.
	* jump.c (delete_barrier_successors): Call never_reached_warning
	when we delete everything after a BARRIER.
	(never_reached_warning): New function.
	* rtl.h: Declare never_reached_warning.
	* toplev.c (warn_notreached): New variable.
	(lang_independent_options): Set warn_notreached
	when -Wunreachable-code.
	(compile_file): We need line numbers for -Wunreachable-code.

Tue Aug 17 22:06:11 1999  Jan Hubicka  <hubicka@freesoft.cz>

	* haifa-sched.c (insn_unit): Fix typo on out of range test.
	* sched.c (insn_unit): Likewise.

Tue Aug 17 21:57:23 1999  Andreas Schwab  <schwab@suse.de>

	* combine.c (distribute_notes): Handle REG_EH_RETHROW.

Tue Aug 17 17:39:43 EDT 1999  Andrew MacLeod  <amacleod@cygnus.com>

	* flow.c (create_edge_list): Use xmalloc, not malloc.

Tue Aug 17 01:40:54 1999  Loren Rittle  <ljrittle@acm.org>

	* fixinc/inclhack.def (no_double_slash): Do not trash single-line
	C-style comments.  Do not lose the character before double slash.

Mon Aug 16 18:08:22 EDT 1999  Andrew MacLeod  <amacleod@cygnus.com>

	* basic-block.h (struct edge_list): Stucture to maintain a vector
	of edges.
	(EDGE_INDEX_NO_EDGE, EDGE_INDEX, INDEX_EDGE_PRED_BB, INDEX_EDGE_SUCC_BB,
	 INDEX_EDGE, NUM_EDGES): New Macros for accessing edge list.
	(create_edge_list, free_edge-List, print_edge_list, verify_edge_list):
	New function prototypes.
	* flow.c (create_edge_list): Function to create an edge list.
	(free_edge_list): Discards memory used by an edge list.
	(print_edge_list): Debug output showing an edge list.
	(verify_edge_list): Internal consistency check for an edge list.
	(find_edge_index): Function to find an edge index for a pred and succ.

Mon Aug 16 11:56:36 1999  Mark Mitchell  <mark@codesourcery.com>

	* tree.c (type_hash_add): Use permalloc to allocate nodes in the
	hashtable.

Mon Aug 16 17:04:15 1999  Jorn Rennecke <amylaar@cygnus.co.uk>

	* mips.h (CLASS_CANNOT_CHANGE_SIZE): Define.

Fri Aug 13 15:20:43 1999  Gerald Pfeifer  <pfeifer@dbai.tuwien.ac.at>

	* config/i386/freebsd.h (HANDLE_PRAGMA_PACK_PUSH_POP): Define.

Fri Aug 13 10:21:28 1999  Nick Clifton  <nickc@cygnus.com>

	* toplev.c (rest_of_compilation): Allow machine dependent
	reorganization pass to place information into the RTL dump
	file if it so wishes.

Sun Aug 15 12:41:21 1999  Jim Wilson  <wilson@cygnus.com>

	* explow.c (hard_function_value): Use VOIDmode instead of
	MAX_MACHINE_MODE.
	* stmt.c (expand_return): Likewise.
	* stor-layout.c (get_best_mode): Likewise.

	* genemit.c (gen_expand): If next is MATCH_PAR_DUP, then output
	emit call instead of emit_insn call.

Sat Aug 14 15:04:06 1999  Mumit Khan  <khan@xraylith.wisc.edu>

	* configure.in: Handle --disable/enable-win32-registry.
	* install.texi: Document --disable/enable-win32-registry.
	* acconfig.h (ENABLE_WIN32_REGISTRY): New macro.
	(WIN32_REGISTRY_KEY): New macro.
	* prefix.c: Use to enable/disable win32-specific code.
	(lookup_key): Use versioned key.
	* configure: Regenerate.
	* config.in: Likewise.

Fri Aug 13 17:41:55 1999  Jason Merrill  <jason@yorick.cygnus.com>

	* cpplib.c (read_line_number): New fn, split out of...
	(do_line): Here.

Fri Aug 13 14:18:27 1999  Gavin Romig-Koch  <gavin@cygnus.com>

	tree.c (lang_unsave_expr_now) : New.
	(unsave_expr_now): Call lang_unsave_expr_now.
	tree.h (lang_unsave_expr_now) : New.

Fri Aug 13 00:49:46 1999  Jason Merrill  <jason@yorick.cygnus.com>

	* toplev.c (flag_new_exceptions): On by default.

1999-08-13  Michael Meissner  <meissner@cygnus.com>

	* Makefile.in (GCC_FOR_TARGET): Move -B./ after the tooldir -B.

Fri Aug 13 01:29:57 1999  Alexandre Oliva  <oliva@dcc.unicamp.br>

	* dwarfout.c (fundamental_type_code): Return FT_boolean for
	INTEGER_TYPE with precision==1, it's __java_boolean.

Thu Aug 12 23:51:04 1999  J"orn Rennecke <amylaar@cygnus.co.uk>

	* global.c (prune_preferences): Move some invariants out of the
	inner loop.

Thu Aug 12 15:30:29 1999  Jesse Perry  (jap@unx.dec.com)

	* configure.in (alpha*-dec-osf*): Add osf5.

Sun Aug  1 22:24:03 1999  Philip Blundell  <philb@gnu.org>

	* configure.in: Rework handling of ARM GNU/Linux slightly.
	(arm*-*-linux-gnuoldld): New target.
	* configure: Regenerate.
	* install.texi (Configurations): Add arm-*-linux-gnu{oldld} and
	arm-*-elf.  Mention that arm-*-linux-gnuaout is obsolete.
	* config/arm/linux-oldld.h: New file.
	* config/arm/linux-elf26.h: Don't include linux-elf.h.
	(TARGET_DEFAULT, SUBTARGET_LINK_SPEC, SUBTARGET_EXTRA_ASM_SPEC):
	Don't define.
	* config/arm/linux-elf.h (ASM_SPEC): Define.
	(TARGET_DEFAULT, SUBTARGET_EXTRA_LINK_SPEC,
	SUBTARGET_EXTRA_ASM_SPEC, CPP_APCS_PC_DEFAULT): Add definitions
	for 26-bit APCS and old linker.
	(CPP_PREDEFINES): Define `__arm__'; don't define `arm' or
	`arm_elf'.
	(FP_DEFAULT): Define to FP_SOFT3 for all machines.
	* config/arm/linux-aout.h (CPP_PREDEFINES): Define `__arm__';
	don't define `arm' or `arm_elf'.
	* config/arm/t-linux (EXTRA_MULTILIB_PARTS, MULTILIB_OPTIONS,
	MULTILIB_DIRNAMES): Define.  Fix typo in comment.

Thu Aug 12 10:14:47 1999  Andreas Schwab  <schwab@suse.de>

	* rtl.texi: Fix typo.

Wed Aug 11 23:50:57 1999  Jason Merrill  <jason@yorick.cygnus.com>

	* invoke.texi (C++ Dialect Options): Add -fms-extensions.

Wed Aug 11 12:59:37 1999  Mark Mitchell  <mark@codesourcery.com>

	* extend.texi (C++ Signatures): Remove node.
	* invoke.texi: Remove discussion of -fhandle-signatures,
	signature, sigof, __signature__, and __sigof__.

Wed Aug 11 03:38:25 1999  Jeffrey A Law  (law@cygnus.com)

	* Makefile.in (JAVAGC): Removed.

Wed Aug 11 02:13:26 1999  Mumit Khan  <khan@xraylith.wisc.edu>

	* i386/cygwin.h (ASM_OUTPUT_ALIGNED_BSS): Define.

1999-08-11 Mark Elbrecht <snowball3@bigfoot.com>

	* i386/djgpp.h (ASM_OUTPUT_ALIGNED_BSS): Define.

1999-08-11  Richard Earnshaw (rearnsha@arm.com)

	* emit-rtl.c (mark_reg_pointer): Don't increase the alignment of
	a register that is already known to be a pointer.

1999-08-11  Bruce Korb  <ddsinc09@ix.netcom.com>

	* fixinc/inclhack.tpl: Only install assert.h conditionally.
	* fixinc/inclhack.sh: Regenerated.
	* fixinc/fixincl.sh: Regenerated.

Wed Aug 11 00:34:22 1999  Joe Buck  <jbuck@synopsys.com>

	* invoke.texi: s/GNU CC/GCC/ for consistency with gcc.texi.
	Fix documentation of -ansi flag to describe its C++ behavior.
	Remove bogus reference to GCC 2.9.

Tue Aug 10 17:19:02 1999  Jim Wilson  <wilson@cygnus.com>

	* config/sh/sh.c (machine_dependent_reorg): Only call PUT_MODE on
	note if it is non-NULL.

Tue Aug 10 10:47:42 EDT 1999  Andrew MacLeod  <amacleod@cygnus.com>

	* except.h (eh_nesting_info): Add new structure definition.
	(init_eh_nesting_info, free_eh_nesting_info): Add function prototypes.
	(reachable_handlers, update_rethrow_references): Add function
	prototypes.
	* rtl.h (struct rtvec_def): Update comments.  REG_EH_RETHROW takes
	a rethrow symbol instead of an integer exception region number.
	* flow.c (Make_edges): Use new exception nesting routines to determine
	which handlers are reachable from a CALL or asynchronous insn.
	Don't add an edge for calls with a REG_EH_REGION of -1 to non-local
	goto receivers.
	(delete_eh_regions): Update rethrow labels, and don't delete
	regions which are the target of a rethrow.
	* except.c (struct func_eh_entry): Add rethrow_ref field, now we can
	avoid overloading the SYMBOL_REF_USED flag.
	(rethrow_symbol_map): Use new rethrow_ref field.
	(rethrow_used): Use new rethrow_ref field.
	(expand_rethrow): REG_EH_RETHROW now has a SYMBOL_REF instead
	of an integer.  Fix formatting.
	(output_exception_table_entry): Use new rethrow_ref field.
	(can_throw): Check for EH_REGION_NOTE before deciding
	whether a CALL can throw or not.
	(scan_region): Call rethrow_used() instead of accessing data structure.
	(update_rethrow_references): New function to make sure only regions
	which are still targets of a rethrow are flagged as such.
	(process_nestinfo): New static function to initialize a handler
	list for a specific region.
	(init_eh_nesting_info): New function to allocate and initialize
	the list of all EH handlers reachable from all regions.
	(reachable_handlers): New function to retrieve the list of handlers
	reachable from a specific region and insn.
	(free_eh_nesting_info): New function to dispose of a list of
	reachable handlers.

Tue Aug 10 10:39:31 EDT 1999  Andrew MacLeod  <amacleod@cygnus.com>

	* flow.c (split_edge): Set JUMP_LABEL field.
	(commit_one_edge_insertion): Set head correctly for insert_before.
	When inserting insns, update insn block numbers if allocated.

Tue Aug 10 09:26:07 1999  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* dwarf2out.c (dwarf2out_frame_debug_expr, add_incomplete_type,
	retry_incomplete_types): Add static prototype.
	(stripattributes, dwarf_cfi_name, ASM_OUTPUT_DWARF_STRING,
	dwarf_tag_name, dwarf_attr_name, dwarf_form_name,
	dwarf_stack_op_name, dwarf_type_encoding_name, add_AT_string,
	dwarf2_name, add_name_attribute, lookup_filename, dwarf2out_line,
	dwarf2out_start_source_file, dwarf2out_define, dwarf2out_undef):
	Constify a char*.

	* dwarf2out.h (dwarf2out_define, dwarf2out_undef,
	dwarf2out_start_source_file, dwarf2out_line): Likewise.

Tue Aug 10 09:21:46 1999  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* output.h (assemble_name): Constify a char*.

	* varasm.c (UNIQUE_SECTION, assemble_start_function,
	assemble_variable, assemble_name): Likewise.

	* dwarf2out.c (ASM_NAME_TO_STRING): Likewise.

	* arm/pe.c (arm_pe_unique_section): Likewise.

	* i386/cygwin.h (STRIP_NAME_ENCODING): Likewise.

	* i386/i386-interix.h (STRIP_NAME_ENCODING): Likewise.

	* i386/interix.c (i386_pe_unique_section): Likewise.

	* i386/win32.h (STRIP_NAME_ENCODING): Likewise.

	* i386/winnt.c (i386_pe_unique_section): Likewise.

	* m32r/m32r.h (ASM_OUTPUT_LABELREF): Likewise.

	* mn10200/mn10200.h (ASM_OUTPUT_LABELREF): Likewise.

	* mn10300/mn10300.h (ASM_OUTPUT_LABELREF): Likewise.

	* pa/pa.c (output_call): Likewise.

	* pa/pa.h (ASM_OUTPUT_MI_THUNK): Likewise.

	* pa/som.h (ASM_OUTPUT_FUNCTION_PREFIX): Likewise.

	* rs6000/rs6000.c (rs6000_output_load_toc_table, output_toc):
	Likewise.

	* rs6000/rs6000.h (RS6000_OUTPUT_BASENAME, STRIP_NAME_ENCODING):
	Likewise.

	* rs6000/sol2.h (ASM_OUTPUT_SOURCE_LINE): Likewise.

	* rs6000/sysv4.h (ASM_DECLARE_FUNCTION_NAME, ASM_OUTPUT_INT,
	STRIP_NAME_ENCODING, ASM_OUTPUT_LABELREF): Likewise.

	* v850/v850.h (ASM_OUTPUT_LABELREF): Likewise.

Mon Aug  9 19:54:05 1999  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* real.c (GET_REAL, PUT_REAL): Use memcpy instead of bcopy.

Mon Aug  9 19:36:00 1999  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* tree.h (lang_identify): Constify a char*.
	(print_error_function): Add extern prototype.  Constify a char*.

	* c-lang.c (lang_identify): Constify a char*.

	* objc/objc-act.c (lang_identify): Constify a char*.

Mon Aug  9 16:21:53 1999  Bernd Schmidt  <bernds@cygnus.co.uk>

	* genpeep.c (main): Make generated file include "function.h".
	* arm.c (function_really_clobbers_lr): Delete INLINE_HEADER case.

Mon Aug  9 10:08:50 1999  Bernd Schmidt  <bernds@cygnus.co.uk>

	* Makefile.in: Update dependencies.
	* alias.c: Include "function.h"
	* c-decl.c: Likewise.
	* caller-save.c: Likewise.
	* calls.c: Likewise.
	* combine.c: Likewise.
	* cse.c: Likewise.
	* explow.c: Likewise.
	* final.c: Likewise.
	* global.c: Likewise.
	* graph.c: Likewise.
	* local-alloc.c: Likewise.
	* loop.c: Likewise.
	* optabs.c: Likewise.
	* profile.c: Likewise.
	* recog.c: Likewise.
	* regclass.c: Likewise.
	* regmove.c: Likewise.
	* reload.c: Likewise.
	* reorg.c: Likewise.
	* resource.c: Likewise.
	* sched.c: Likewise.
	* stupid.c: Likewise.
	* config/1750a/1750a.c: Likewise.
	* config/a29k/a29k.c: Likewise.
	* config/arc/arc.c: Likewise.
	* config/arm/arm.c: Likewise.
	* config/arm/thumb.c: Likewise.
	* config/c4x/c4x.c: Likewise.
	* config/clipper/clipper.c: Likewise.
	* config/convex/convex.c: Likewise.
	* config/fx80/fx80.c: Likewise.
	* config/i860/i860.c: Likewise.
	* config/m68k/m68k.c: Likewise.
	* config/m88k/m88k.c: Likewise.
	* config/mips/mips.c: Likewise.
	* config/pdp11/pdp11.c: Likewise.
	* config/pyr/pyr.c: Likewise.
	* config/romp/romp.c: Likewise.
	* config/sh/sh.c: Likewise.
	* config/tahoe/tahoe.c: Likewise.
	* config/vax/vax.c: Likewise.
	* config/we32k/we32k.c: Likewise.
	* config/sparc/sparc.c: Include "function.h".
	(mem_min_alignment): Test current_function rather than
	regno_pointer_align.
	* config/pa/pa.c: Likewise.
	(compute_frame_size): Delete declaration of
	current_function_outgoing_args_size.
	* config/arc/arc.h (current_function_varargs): Delete declaration.
	* config/elxsi/elxsi.h (current_function_calls_alloca): Delete
	declaration.
	* config/i370/i370.h (current_function_outgoing_args_size): Delete
	declaration.
	* config/i386/i386.h (FINALIZE_PIC): Delete declaration of
	current_function_uses_pic_offset_table.
	* config/m68k/a-ux.h (FUNCTION_EXTRA_EPILOGUE): Delete declaration
	of current_function_returns_pointer.
	* config/m68k/altos3068.h (FUNCTION_EXTRA_EPILOGUE): Likewise.
	* config/m68k/linux.h (FUNCTION_EXTRA_EPILOGUE): Likewise.
	* config/m68k/m68kv4.h (FUNCTION_EXTRA_EPILOGUE): Likewise.
	* config/m68k/mot3300.h (FUNCTION_EXTRA_EPILOGUE): Likewise.
	* config/m68k/pbb.h (FUNCTION_EXTRA_EPILOGUE): Likewise.
	* config/m68k/tower-as.h (FUNCTION_EXTRA_EPILOGUE): Likewise.
	* config/m88k/m88k.c: Include "function.h"
	(call_used_regs, current_function_pretend_args_size,
	current_function_outgoing_args_size, frame_pointer_needed): Delete
	declarations.
	* config/m88k/m88k.h (current_function_pretend_args_size): Delete
	declaration.
	* config/mips/mips.h (current_function_calls_alloca): Delete
	declaration.
	* config/mn10200/mn10200.h (current_function_needs_context,
	rtx_equal_function_value_matters): Delete declarations.
	* config/ns32k/ns32k (current_function_uses_pic_offset_table,
	flag_pic): Delete declarations.
	* config/pa/pa.h (current_function_pretend_args_size,
	current_function_decl): Delete declarations.
	* config/pa/som.h (current_function_varargs): Delete declaration.
	* config/pdp11/pdp11.h (current_function_pretend_args_size): Delete
	declaration.
	* config/pyr/pyr.h (current_function_pretend_args_size,
	current_function_args_size, current_function_calls_alloca): Delete
	declarations.
	* config/sh/sh.h (current_function_varargs): Delete declaration.
	* config/sparc/sparc.h (current_function_outgoing_args_size,
	current_function_calls_alloca, current_function_decl): Delete
	declarations.
	* config/spur/spur.h (current_function_pretend_args_size,
	current_function_calls_alloca): Delete declarations.
	* config/v850/v850.c (current_function_outgoing_args_size): Delete
	declaration.
	* config/vax/vms.h (current_function_name): Delete declaration.
	* gcse.c: Include "function.h".
	(current_function_name, current_function_calls_setjmp): Delete
	declarations.
	* haifa-sched.c: Include "function.h".
	(forced_labels): Delete declaration.
	* jump.c: Likewise.
	* reg-stack.c: Likewise.
	* reload1.c: Likewise.
	* genemit.c (main): Make generated file include function.h.
	* genoutput.c (output_prologue): Likewise.

	* builtins.c (saveregs_value, apply_args_value): Delete variables.
	* emit-rtl.c (reg_rtx_no, first_label_num, first_insn, last_insn,
	sequence_rtl_expr, cur_insn_uid, last_linenum, last_filename,
	regno_pointer_flag, regno_pointer_flag_length, regno_pointer_align,
	regno_reg_rtx, sequence_stack): Delete variables.  Add accessor
	macros for some of them.
	(emit_filename, emit_lineno): Delete declarations.
	(gen_reg_rtx): Use memset/memcpy instead of bzero/bcopy.  Access
	regno_pointer_* variables through current_function.
	(gen_inline_header_rtx): Delete function.
	(save_emit_status): Delete function.
	(set_new_last_label_num): New function.
	(clear_emit_caches): New function.
	(restore_emit_status): Just clear last_labelnum and call
	clear_emit_caches.
	(get_last_insn_anywhere): Variable sequence_stack is now accessed
	through macro seq_stack.
	(add_insn_after): Likewise.
	(add_insn_before): Likewise.
	(remove_insn): Likewise.
	(pop_topmost_sequence): Likewise.
	(in_sequence_p): Likewise.
	(start_sequence_for_rtl_expr): Likewise.
	(start_sequence): Likewise, and likewise for
	sequence_rtl_expr/seq_rtl_expr.
	(push_topmost_sequence): Likewise.
	(end_sequence): Likewise.
	(init_virtual_regs): Now takes a "struct emit_status *" argument.
	All callers changed.  Store into that pointer instead of globals.
	(init_emit): Allocate emit elt of current_function.
	Changes for sequence_rtl_expr/sequence_stack renaming.
	Call clear_emit_caches instead of doing it in-line.
	Access regno_pointer_* variables through current_function.
	(init_emit_once) Don't clear sequence_stack.

	* expr.c (pending_stack_adjust, inhibit_defer_pop, pending_chain):
	Delete variables.
	(arg_pointer_save_area): Delete declaration.
	(finish_expr_for_function): Renamed from init_queue; no longer static.
	(init_expr): Don't call init_queue.
	(save_expr_status, restore_expr_status): Delete functions.
	(expand_expr): Changes to reflect new layout of struct function.
	Don't access current_function_check_memory_usage when current_function
	is 0.
	* expr.h (forced_labels, save_expr_regs, saveregs_value,
	apply_args_value, current_function_calls_alloca, inhibit_defer_pop,
	current_function_outgoing_args_size, current_function_arg_offset_rtx,
	current_function_uses_const_pool, function_call_count,
	current_function_uses_pic_offset_table, nonlocal_labels,
	current_function_internal_arg_pointer, nonlocal_goto_stack_level,
	current_function_check_memory_usage, nonlocal_goto_handler_slots,
	pending_stack_adjust, target_temp_slot_level, temp_slot_level): Delete
	declarations.
	(finish_expr_for_function): Declare.
	* flags.h (current_function_has_nonlocal_label,
	current_function_has_nonlocal_goto, current_function_is_thunk,
	current_function_has_computed_jump): Delete declarations.
	* flow.c (forced_labels): Delete declaration.
	* function.c (current_function_pops_args,
	current_function_returns_struct, current_function_returns_pcc_struct,
	current_function_needs_context, current_function_calls_setjmp,
	current_function_calls_longjmp, current_function_has_nonlocal_label,
	current_function_has_nonlocal_goto, current_function_is_thunk,
	current_function_has_computed_jump, current_function_calls_alloca,
	current_function_contains_functions, current_function_returns_pointer,
	current_function_epilogue_delay_list, current_function_args_size,
	current_function_pretend_args_size, current_function_arg_offset_rtx,
	current_function_outgoing_args_size, current_function_varargs,
	current_function_stdarg, current_function_args_info, cleanup_label,
	current_function_name, current_function_uses_const_pool,
	current_function_instrument_entry_exit, current_function_return_rtx,
	current_function_uses_pic_offset_table, nonlocal_labels,
	current_function_internal_arg_pointer, current_function_cannot_inline,
	current_function_check_memory_usage, function_call_count,
	nonlocal_goto_handler_slots, nonlocal_goto_handler_labels,
	nonlocal_goto_stack_level, return_label, save_expr_regs,
	stack_slot_list, rtl_expr_chain, tail_recursion_label, temp_slots,
	tail_recursion_reentry, arg_pointer_save_area, frame_offset,
	context_display, trampoline_list, parm_birth_insn, invalid_stack_slot,
	last_parm_insn, max_parm_reg, parm_reg_stack_loc, sequence_rtl_expr,
	temp_slot_level, var_temp_slot_level, target_temp_slot_level):
	Delete variables.
	(push_function_context_to): Don't save them.  Don't call
	save_storage_status, save_emit_status or save_expr_status.
	(pop_function_context_from): Don't restore them.  Don't call
	restore_storage_status or restore_expr_status.
	(get_func_frame_size): New function.
	(get_frame_size): Use it.
	(assign_outer_stack_local): Reflect some member name changes in struct
	function.
	(put_reg_into_stack): Likewise.
	(assign_stack_temp_for_type): sequence_rtl_expr was renamed to
	seq_rtl_expr.
	(fixup_var_refs): Likewise.
	(fix_lexical_addr): Likewise.
	(trampoline_address): Likewise.
	(prepare_function_start): Clear field inlinable of current_function.
	(init_function_for_compilation): New function.
	(expand_dummy_function_end): New function.
	(expand_function_end): Call finish_expr_for_function.
	* function.h (struct emit_status): New; fields moved here from struct
	function and from global variables.  Add accessor macros for some of
	the fields.
	(struct expr_status): Likewise.
	(REGNO_POINTER_ALIGN, REGNO_POINTER_FLAG): Moved here from regs.h.
	(struct function): Add fields expr and emit, inlinable, inl_emit,
	original_arg_vector, original_decl_initial, inl_last_parm_insn,
	inl_max_label_num.  Add many comments.
	Add accessor macros for all elts of struct function that no longer
	have a global variable.
	(cleanup_label, return_label, frame_offset, tail_recursion_label,
	tail_recursion_reentry, arg_pointer_save_area, rtl_expr_chain,
	stack_slot_list): Delete declarations.
	(get_func_frame_size): Declare.
	(save_expr_status, restore_expr_status, save_emit_status,
	save_storage_status, restore_storage_status): Delete declarations.
	(init_virtual_regs): Declare.
	* output.h (current_function_pops_args,
	current_function_returns_struct, current_function_returns_pcc_struct,
	current_function_needs_context, current_function_calls_setjmp,
	current_function_calls_longjmp, current_function_calls_alloca,
	current_function_has_nonlocal_label, current_function_varargs,
	current_function_has_computed_jump, current_function_returns_pointer,
	current_function_contains_functions, current_function_args_size,
	current_function_pretend_args_size, current_function_stdarg,
	current_function_outgoing_args_size, current_function_args_info,
	current_function_name, current_function_return_rtx,
	current_function_epilogue_delay_list,
	current_function_uses_const_pool, current_function_cannot_inline):
	Delete declarations.
	* regs.h (reg_rtx_no, regno_pointer_flag, regno_pointer_flag_length,
	regno_reg_rtx): Delete declaration.
	(REGNO_POINTER_FLAG): Delete macro.
	* stmt.c (expand_goto): Changes to reflect that some fields in struct
	function were renamed.
	* stor-layout.c (save_storage_status, restore_storage_status): Delete
	functions.
	* toplev.c: Include "function.h".
	(current_function_decl): Delete declaration.
	(compile_file): Call init_dummy_function_start and
	expand_dummy_function_end around some initializations that need to
	emit rtl.
	(rest_of_compilation): Use DECL_SAVED_INSNS properly.
	Call init_function_for_compilation.
	* unroll.c: Include "function.h"
	(unroll_loop): Access regno_pointer_* variables through
	current_function.

	* tree.h (struct tree_decl): Add elt f to saved_insns member.
	(DECL_SAVED_INSNS): use it.
	(expand_dummy_function_end): Declare.
	(init_function_for_compilation): Declare.
	* calls.c (calls_function_1): Change use of DECL_SAVED_INSNS now
	that it's no longer an INLINE_HEADER.
	(expand_call): Likewise.
	* integrate.c (finish_inline): Delete function.
	(max_parm_reg, parm_reg_stack_loc): Delete declarations.
	(initialize_for_inline): Delete min_labelno, max_labelno and max_reg
	args.  Don't generate an INLINE_HEADER rtx, just return the arg
	vector.  All callers changed.
	(save_for_inline_copying):  Create a duplicate struct emit_status to
	hold the emit state for compiling the current function.  Use this and
	the other new fields in struct function that are for integration
	instead of an INLINE_HEADER.
	Use memcpy instead of bcopy.
	Store the current struct function in DECL_SAVED_INSNS of fndecl.
	(save_for_inline_nocopy): Similar changes, except no new emit_status
	is needed here.
	(expand_inline_function): Get information from function structure,
	not from an inline header rtx.
	(output_inline_function): Lose code to extract the necessary
	information from an inline header; simply put back the function
	structure into current_function.  Clear its inlinable elt.
	* rtl.def (INLINE_HEADER): Delete.
	* rtl.h: Delete all accessors for an INLINE_HEADER.
	(gen_inline_header_rtx): Delete declaration.
	(regno_reg_rtx, regno_pointer_align, nonlocal_goto_handler_labels):
	Delete declarations.
	(REGNO_POINTER_ALIGN): Delete.
	(clear_emit_caches): Declare.
	(set_new_last_label_num): Declare.

Mon Aug  9 01:52:24 1999  Jason Merrill  <jason@yorick.cygnus.com>

	* print-tree.c (print_node): Print base for OFFSET_TYPEs.

	* except.c (expand_eh_region_start_for_decl): Always start a new block.
	* stmt.c (is_eh_region): Make sure current_function is present, too.

Mon Aug  9 01:15:24 1999  Jeffrey A Law  (law@cygnus.com)

	* pa.h (HARD_REGNO_MODE_OK): Correctly handle FPregs, even when
	for 64bit PA targets.

	* pa.h (SELECT_SECTION): Define.
	* som.h (SELECT_SECTION): Delete.

Sun Aug  8 15:13:20 1999  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* alias.c (init_alias_analysis): Wrap call to
	`prologue_epilogue_contains' within HAVE_prologue||HAVE_epilogue.

1999-08-07  Bruce Korb  <autogen@linuxbox.com>

	* fixinc/inclhack.def(irix_asm_apostrophe):  IRIX 5.2's
	<sys/asm.h> contains an asm comment with an apostrophe
	* fixinc/inclhack.sh:  regen
	* fixinc/fixincl.x:  regen

Sat Aug  7 19:37:07 1999  Richard Henderson  <rth@cygnus.com>

	* function.c (init_function_start): Clear prologue & epilogue.
	(prologue_epilogue_contains): New function.
	* alias.c (init_alias_analysis): Use it.
	* rtl.h (prologue_epilogue_contains): Declare it.

Sat Aug  7 19:32:16 1999  Richard Henderson  <rth@cygnus.com>

	* jump.c (onlyjump_p): New function.
	* rtl.h: Declare it.
	* flow.c (delete_unreachable_blocks): Use onlyjump_p instead
	of condjump_p in calling tidy_fallthru_edge and merge_blocks.

Sat Aug  7 17:09:36 1999  Richard Henderson  <rth@cygnus.com>

	* global.c (build_insn_chain): Use EXECUTE_IF_SET_IN_REG_SET
	to invert loops.  Simplify block scanning.

Sat Aug  7 02:11:13 1999  Bernd Schmidt <bernds@cygnus.co.uk>

	* gcse.c (hash_scan_set): Treat SYMBOL_REFs like CONST_INTs.
	(cprop_insn): Treat SYMBOL_REFs like CONST_INTs.

1999-08-07  Jonathan Larmour  <jlarmour@cygnus.co.uk>

	* config/sparc/liteelf.h: New file to support sparclite-elf target
	* config/sparc/t-sp86x: New file to support sparc86x targets
	* config/sparc/sp86x-aout.h: New file to support sparc86x-aout target
	* config/sparc/sp86x-elf.h: New file to support sparc86x-elf target
	* configure.in: Support above target triplets
	* configure: Regenerated

Sat Aug  7 01:39:27 1999  Philippe De Muyter  <phdm@macqel.be>

	* fixinc/server.c (server_setup): Do not prefix function used as
	parameter with `&'.

Sat Aug  7 00:21:20 1999  Richard Henderson  <rth@cygnus.com>

	* alpha.md (movhi and movqi patterns): Correct predicate for !BWX.
	Remove fp reg alternatives.

Sat Aug  7 00:06:54 1999  Jeffrey A Law  (law@cygnus.com)

	* Makefiin (TAROUTOPTS): Kill.
	(install-headers-tar): Use "xpf" for tar headerfile extraction
	* i370/x-oe (TAROUTOPTS): Delete.
	* m68k/x-apollo68 (TAROUTOPTS): Delete.
	* m68k/x-hp320 (TAROUTOPTS): Delete.
	* m68k/x-hp320g (TAROUTOPTS): Delete.
	* gcc.texi: Update bug reporting text.

1999-08-6 Herman A.J. ten Brugge <Haj.Ten.Brugge@net.HCC.nl>

	* reg-stack.c (change_stack) Fixed problem with negative array index.

Fri Aug  6 23:08:44 1999  Jeffrey A Law  (law@cygnus.com)

	* extend.texi, install.texi: Fix spelling mistakes.

	* Makefile.in (PREMADE_ATTRTAB_MD, PREMADE_ATTRTAB): Delete.
	(s-attrtab); No longer try to use pre-made insn-attrtab file.
	* mips/t-bsd: Delete references to obsolete PREMADE_ATTRTAB and
	PREMADE_ATTRTAB_MD.
	* mips/t-ecoff: Likewise.
	* mips/t-elf: Likewise.
	* mips/t-mips: Likewise.
	* mips/t-osfrose: Likewise.
	* mips/t-r3900: Likewise.
	* mips/t-svr3: Likewise.
	* mips/t-svr4: Likewise.
	* mips/t-ultrix: Likewise.

	* gcc.texi: Document recommend means to provide software floating
	point libraries in libgcc.a

1999-08-06  Jason Merrill  <jason@yorick.cygnus.com>

	* c-lex.c (yylex): We can have a number with no digits.

Fri Aug  6 16:53:55 EDT 1999  John Wehle  (john@feith.com)

	* jump.c (delete_prior_computation): New function, broken
	out of delete_computation.  Check for side effects with
	side_effects_p instead of FIND_REG_INC_NOTE.  Handle
	multi-word hard registers.
	(delete_computation): Use it.  Check for side effects with
	side_effects_p instead of FIND_REG_INC_NOTE.  Synthesize a
	missing REG_DEAD note for a register which is both set and
	used by an insn.

Fri Aug  6 11:05:29 1999  Jeffrey A Law  (law@cygnus.com)

	* elf.h (TEXT_SPACE_P, FUNCTION_NAME_P): Delete.
	(ASM_GLOBALIZE_LABEL, ASM_OUTPUT_INT, ASM_OUTPUT_DOUBLE_INT): Likewise.
	(ASM_FILE_START): Import _mcount with the right type.
	(ASM_DECLARE_FUNCTION_NAME): Define.
	(ASM_OUTPUT_EXTERNAL, ASM_OUTPUT_EXTERNAL_LIBCALL): Define.
	* pa.c (output_function_prologue): Always emit the function's label
	here.
	* pa.h (TEXT_SPACE_P): Define.
	(FUNCTION_NAME_P, ENCODE_SECTION_INFO, STRIP_NAME_ENCODING): Likewise.
	(ASM_OUTPUT_INT, ASM_OUTPUT_DOUBLE_INT, ASM_GLOBALIZE_LABEL): Likewise.
	* som.h (TEXT_SPACE_P): Delete.
	(FUNCTION_NAME_P, ENCODE_SECTION_INFO, STRIP_NAME_ENCODING): Likewise.
	(ASM_GLOBALIZE_LABEL, ASM_OUTPUT_INT): Likewise.

Thu Aug  5 19:29:39 1999  Jim Wilson  <wilson@cygnus.com>

	* expr.c (emit_group_load): Allow src to be a CONCAT.

Thu Aug  5 22:27:15 1999  J"orn Rennecke <amylaar@cygnus.co.uk>

	* config/sh/lib1funcs.asm (___movstrSI0): Change or r0,r0,r0 to nop.
	(___mulsi3): Use '!' comment character.

Thu Aug  5 13:34:14 1999  Bernd Schmidt  <bernds@cygnus.co.uk>

	* reload1.c (maybe_fix_stack_asms): Also declare P as "const char *".

Thu Aug  5 02:40:42 1999  Jeffrey A Law  (law@cygnus.com)

	* gcc.c: Update URLs and mail addresses.
	* gcc.texi: Likewise.

Thu Aug  5 01:14:13 1999  Daniel Jacobowitz <drow@false.org>

	* rs6000.c (current_file_function_operand): Return zero for
	weak functions.
	(rs6000_encode_section_info): Do not set SYMBOL_REF_FLAG for
	weak symbols.
	* rs6000.h (ENCODE_SECTION_NIFO): Do not set SYMBOL_REF_FLAG
	for weak symbols.

Thu Aug  5 00:56:30 1999  Geoffrey Keating  <geoffk@cygnus.com>

	* rs6000.c (rs6000_stack_info): For ABI_V4/ABI_SOLARIS -fpic, always
	allocate space in the stack frame for the PIC register.

Thu Aug  5 00:20:47 1999  Jeffrey A Law  (law@cygnus.com)

	* m68k.md (xordi3, anddi3): These patterns are not available on
	the coldfire.

Wed Aug  4 23:39:20 1999  Mark Mitchell  <mark@codesourcery.com>

	* real.c (GET_REAL): Don't violate ANSI/ISO aliasing rules.
	(PUT_REAL): Likewise.

Wed Aug  4 20:45:04 1999  J"orn Rennecke <amylaar@cygnus.co.uk>

	* final.c (shorten_branches): Don't add an alignment for loops
	that have no label inside.

Wed Aug  4 16:39:24 1999  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* builtins.c (expand_builtin_memcmp, expand_builtin_strcmp): Wrap
	prototypes in macro HAVE_cmpstrsi.

	* cpplib.c (cpp_get_token): Remove unused label `op3'.

	* emit-rtl.c (operand_subword): Remove unused variable
	`bits_per_word'.

	* rtl.c (shallow_copy_rtx): Remove unused variable `format_ptr'.

	* tree.c (chainon): Wrap variable `t2' in macro ENABLE_CHECKING.

Wed Aug  4 13:29:23 1999  Zack Weinberg  <zack@bitmover.com>

	* cpphash.c (macroexpand): Delete leading whitespace when arg
	is concatenated before.
	(unsafe_chars): Correct test for whether + and - can extend a
	token.

	* cppinit.c (cpp_start_read): Do dependencies for
	-include/-imacros files also.

	* cpplib.c (cpp_scan_buffer): In no-output mode, don't bother
	tokenizing non-directive lines.
	(cpp_expand_to_buffer): Temporarily disable no-output mode.
	* cppmain.c: In no-output mode, just call cpp_scan_buffer for
	the input file.

Wed Aug  4 12:53:44 1999  Jason Merrill  <jason@yorick.cygnus.com>

	* expr.c (expand_expr, case PLUS_EXPR): Fix parallel case, too.

	* c-lex.c: Sync with C++ frontend.
	(linemode): New variable.
	(parse_float): imag, conversion_errno, and type are output only.
	(yylex): Adjust.  Move initial '.' case into main switch.
	Use linemode.
	(handle_generic_pragma): Just deal with tokens.
	(readescape): Use ISXDIGIT and ISGRAPH.
	* c-parse.in: Add END_OF_LINE token.

	* c-lex.c (lang_init): Generalize.
	(nextchar): Remove.  Replace uses with UNGETC.
	(skip_white_space): Handle linemode here.  Optimize for cpplib.
	(skip_white_space_on_line): Remove.
	(extend_token_buffer_to): New fn.
	(extend_token_buffer): Use it.
	(read_line_number, check_newline): Just deal with tokens.
	(token_getch, token_put_back): New fns.
	(yylex): Use them.  More cpplib optimizations.  Simplify.

Wed Aug  4 12:53:44 1999  Michael Tiemann  <tiemann@holodeck.cygnus.com>
			  Jason Merrill  <jason@yorick.cygnus.com>

	* c-lex.c (init_parse): Set cpp_token to CPP_DIRECTIVE.
	(consume_string): Make this smart about USE_CPPLIB.
	(check_newline): Rewrite to be intelligent about USE_CPPLIB.
	(yylex): Rewrite to be intelligent about USE_CPPLIB.
	Also, clean up cases where we redundantly set token_buffer[0].
	(read_line_number): New fn.
	(ignore_escape_flag): New variable.

Wed Aug  4 13:12:17 1999  Jeffrey A Law  (law@cygnus.com)

	* a29k/t-a29kbare: Fix some comments.
	(LIB2FUNCS_EXTRA): Remove fp-bit.c and dp-bit.c
	(FPBIT, DPBIT): Define.
	* a29k/t-vx29k: Likewise.
	* arc/t-arc: Likewise.
	* arm/t-arm-elf: Likewise.
	* arm/t-bare: Likewise.
	* arm/t-pe: Likewise.
	* arm/t-pe-thumb: Likewise.
	* arm/t-semi: Likewise.
	* arm/t-thumb: Likewise.
	* arm/t-thumb-elf: Likewise.
	* arm/t-thumb-linux: Likewise.
	* h8300/t-h8300: Likewise.
	* i960/t-i960: Likewise.
	* i960/t-vxworks960: Likewise.
	* m32r/t-m32r: Likewise.
	* mips/t-ecoff: Likewise.
	* mips/t-elf: Likewise.
	* mips/t-r3900: Likewise.
	* pa/t-pro: Likewise.
	* rs6000/t-aix43: Likewise.
	* rs6000/t-beos: Likewise.
	* rs6000/t-newas: Likewise.
	* rs6000/t-ppccomm: Likewise.
	* rs6000/t-rs6000: Likewise.
	* rs6000/t-winnt: Likewise.
	* rs6000/t-xnewas: Likewise.
	* rs6000/t-xrs6000: Likewise.
	* sh/t-sh: Likewise.
	* sparc/t-elf: Likewise.
	* sparc/t-sparcbare: Likewise.
	* sparc/t-sparclite: Likewise.
	* sparc/t-splet: Likewise.
	* v850/t-v850: Likewise.
	* mn10200/t-mn10200: Fix comments.
	* mn10300/t-mn10300: Likewise.

	* pa.md (divsi3, udivsi3, modsi3, umodsi3 expanders): Clobber a new
	dummy operand.  Allocate a new pseudo for the dummy operand.
	(divsi3, udivsi3, modis3, umodsi3 patterns): Corresponding changes.

	* pa.md (movqi, movhi patterns): Do not expose FP regs to regclass.

Wed Aug  4 11:53:55 1999  Tom Tromey  <tromey@cygnus.com>

	* configure: Rebuilt.
	* configure.in: Removed --enable-java-gc option and JAVAGC subst.

Wed Aug  4 09:06:14 1999  Richard Earnshaw (rearnsha@arm.com)

	* recog.c (preproces_constraints): Zero recog_op_alt before
	processing the constraints.

	* arm.c (typedef minipool_node): Renamed from pool_node.
	(minipool_vector, minipool_size, minipool_vector_label): Similarly.
	(add_minipool_constant): New function.
	(dump_minipool): New function.
	(find_barrier): Remove special case for getting the insn size of
	an insn that references the constant pool.
	(minipool_fixup): New structure.
	(push_minipool_barrier): New function.
	(push_minipool_fix): New function.
	(note_invalid_constants): New function.
	(add_pool_constant, dump_table, fixit, broken_move): Delete.
	(arm_reorg): Rewrite code to fix up the constant pool into a
	series of mini-pools embedded in the insn stream.
	(arm_output_epilogue): New function, made mainly from the body
	of output_func_epilogue.
	(output_func_epilogue): Move insn generation part of epilogue code
	to arm_output_epilogue.
	* arm.h (ASM_OUTPUT_SPECIAL_POOL_ENTRY): Delete.
	* arm.md (pool_range): New attribute.
	(zero_extendqidi2): Add attribute pool_range.
	(zero_extend_hisi_insn, load_extendqisi, extendhisi_insn,
	extendqihi_insn, extendqisi_insn, movdi, movsi_insn, pic_load_addr,
	pic_load_addr_based_insn, movhi_insn_arch4, movhi_insn_littleend,
	movhi_insn_bigend, loadhi_si_bigend, movsf_hard_insn, movsf_soft_insn,
	movdf_hard_insn, movdf_soft_insn, movxf_hard_insn): Likewise.
	(epilogue): New expand.
	(epilogue_insn): New insn.  Call arm_output_epilogue.

	* arm.c (arm_poke_function_name): Undo change of July 17.  Tidy up.
	* arm.h (TARGET_SWITCHES): Add missing doc string for TARGET_DEFAULT.

Mon Aug  2 19:18:44 1999  Jason Merrill  <jason@yorick.cygnus.com>

	* linux.h (HANDLE_PRAGMA_PACK_PUSH_POP): Define.

1999-08-04 Mark Elbrecht <snowball3@bigfoot.com>

	* config/i386/djgpp.h  (BSS_SECTION_ASM_OP): Define.

Wed Aug  4 02:15:32 1999  Richard Henderson <rth@cygnus.com>

	* jump.c (delete_insn): Delete the addr_vec when deleting a tablejump.

Wed Aug  4 01:48:08 1999  Jim Kingdon  <http://developer.redhat.com>

	* global.c: Fix comment.

Wed Aug  4 01:43:01 1999  Ian Lance Taylor  <ian@zembu.com>

	* gcc.c (access_check): New static function.
	(find_a_file): Use it when searching a directory list.
	* collect2.c (find_a_file): Don't accept directories found when
	searching a directory list.

Wed Aug  4 01:40:43 1999  Philippe De Muyter  <phdm@macqel.be>

	* tlink.c (symbol_hash_lookup): Do not prefix functions used as
	function parameters with `&'.
	(file_hash_lookup, demangled_hash_lookup, tlink_init): Ditto.

Wed Aug  4 01:08:44 1999  Jeffrey A Law  (law@cygnus.com)

	* flow.c (delete_unreachable_blocks): Do not call merge_blocks
	or tidy_fallthru_edge if the last insn in the block is not
	an unconditional jump or a simple conditional jump.

Tue Aug  3 20:21:20 1999  J"orn Rennecke <amylaar@cygnus.co.uk>

	* Makefile.in (c-decl.o): Depends on defaults.h.

Tue Aug  3 14:14:52 1999  Jeffrey A Law  (law@cygnus.com)

	* pa.h (HARD_REGNO_NREGS): FP registers are always 4 bytes wide for
	PA1.1 and above.
	(CLASS_MAX_NREGS): Likewise.

Tue Aug  3 03:51:20 1999  Jeffrey A Law  (law@cygnus.com)

	* cse.c (cse_insn): Fix dumb thinko in last change.

Tue Aug  3 10:36:13 1999  Bernd Schmidt  <bernds@cygnus.co.uk>

	* reload1.c (maybe_fix_stack_asms): Declare CONSTRAINTS as
	"const char *".

Mon Aug  2 23:45:45 1999  Hans-Peter Nilsson  <hp@bitrange.com>

	* dwarf2out.c (add_location_or_const_value_attribute): Correct
	test for sizes of passed and declared parameter types.

Tue Aug  3 00:03:41 1999  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* fixincludes: Fix the return type of bsearch, char* -> void*.

	* fixinc/inclhack.def: Likewise.

Mon Aug  2 18:29:32 1999  Mark Mitchell  <mark@codesourcery.com>

	* invoke.texi (-fdump-translation-unit): New option.

Mon Aug  2 17:54:19 1999  Richard Henderson  <rth@cygnus.com>

	* expr.h (PROMOTE_PROTOTYPES): Move ...
	* defaults.h: ... to here.
	* c-decl.c: Include defaults.h instead of expr.h.
	* c-typeck.c: Include defaults.h.

Mon Aug  2 17:10:24 1999  Mark Mitchell  <mark@codesourcery.com>

	* toplev.h (errorcount): Declare.
	(warningcount): Likewise.
	(sorrycount): Likewise.
	* c-lex.c (errorcount): Don't declare.
	* dwarf2out.c (errorcount): Don't declare.

Mon Aug  2 17:02:08 1999  Jason Merrill  <jason@yorick.cygnus.com>

	* config/libgloss.h: Add a note discouraging use with ELF.
	* configure.in: Don't use libgloss.h for ELF targets.
	Always use_collect2 on a.out targets.

Mon Aug  2 16:27:42 1999  Jim Wilson  <wilson@cygnus.com>

	* combine.c (force_to_mode, case LSHIFTRT): Add goto shiftrt.
	(force_to_mode, case ASHIFTRT): Add shiftrt label.

Tue Aug  3 00:45:02 1999  J"orn Rennecke <amylaar@cygnus.co.uk>

	* loop.c (strength_reduce): When doing biv->giv conversion, update
	reg note of NEXT->insn.

1999-08-02  Jakub Jelinek  <jj@ultra.linux.cz>

	* real.c (PUT_REAL): Clear unused bytes if long double is IEEE quad.

1999-08-02  Jakub Jelinek  <jj@ultra.linux.cz>

	* c-decl.c (get_parm_info, store_parm_decls): Change all uses of
	PROMOTE_PROTOTYPES, so that it tests it as a C expression.
	Ensure expr.h is included.
	* c-typecheck.c (convert_arguments): Ditto.

	* expr.h: Supply default for PROMOTE_PROTOTYPES (0).

	* config/arc/arc.h: Define PROMOTE_PROTOTYPES to 1.
	* config/convex/convex.h: Ditto.
	* config/dsp16xx/dsp16xx.h: Ditto.
	* config/fx80/fx80.h: Ditto.
	* config/gmicro/gmicro.h: Ditto.
	* config/i370/i370.h: Ditto.
	* config/i386/i386.h: Ditto.
	* config/m32r/m32r.h: Ditto.
	* config/m68k/m68k.h: Ditto.
	* config/m88k/m88k.h: Ditto.
	* config/mips/mips.h: Ditto.
	* config/pa/pa.h: Ditto.
	* config/pyr/pyr.h: Ditto.
	* config/tahoe/tahoe.h: Ditto.
	* config/we32k/we32k.h: Ditto.

	* config/sparc/sparc.h: Define PROMOTE_PROTOTYPES
	based on arch size.

	* config/i1750a/i1750a.h: Define PROMOTE_PROTOTYPES to 0.

	* config/i860/paragon.h: Remove PROMOTE_PROTOTYPES
	from comment.

	* tm.texi: Document new usage of PROMOTE_PROTOTYPES.

1999-08-02  Richard Henderson  <rth@cygnus.com>

	* m32r.c (m32r_setup_incoming_varargs): Use get_varargs_alias_set
	for the register spill block.
	(m32r_va_arg): New.
	* m32r.h (EXPAND_BUILTIN_VA_ARG): New.
	(EXPAND_BUILTIN_SAVEREGS): Delete #if 0 code.

	* m32r.h (INT8_P): Don't short-cut test with (unsigned).
	(INT16_P, CMP_INT16_P, UINT16_P): Likewise.
	(UPPER16_P, UINT24_P, INT32_P, UINT5_P): Likewise.

1999-08-02  Jakub Jelinek  <jj@ultra.linux.cz>

	* config/sparc/linux.h: Define WCHAR_TYPE as "int" and undef
	MAX_WCHAR_TYPE defined in sparc.h.
	* config/sparc/linuxaout.h: Likewise.
	* config/sparc/linux64.h: Likewise.
	Also default to -mvis if CPU is UltraSPARC.

1999-08-02  Jakub Jelinek  <jj@ultra.linux.cz>

	* config/sparc/sparc.h (ASM_DECLARE_REGISTER_GLOBAL): New macro.
	(RTX_OK_FOR_OLO10): Likewise.
	(GO_IF_LEGITIMATE_ADDRESS): If assembler supports offsetable
	%lo(), allow it in addresses...
	(PRINT_OPERAND_ADDRESS): ... and print it appropriately.
	* config/sparc/sparc.md (sethi_di_medlow_embmedany_pic): sethi %lo()
	does not make sense.
	* config/sparc/sparc.c (sparc_hard_reg_printed): New array.
	(sparc_output_scratch_registers): New function.
	(output_function_prologue, sparc_flat_output_function_prologue): Use
	it.
	* varasm.c (make_decl_rtl): Use ASM_DECLARE_REGISTER_GLOBAL if
	defined.
	* tm.texi (ASM_DECLARE_REGISTER_GLOBAL): Document it.
	* configure.in: Add check for .register pseudo-op support in as and
	check for offsetable %lo().
	* acconfig.h: Add templates for the above checks.
	* configure: Regenerate.

1999-08-02  Richard Henderson  <rth@cygnus.com>

	* sparc/linux64.h (TARGET_DEFAULT): Remove MASK_APP_REGS.
	* sparc/sol2-sld-64.h (TARGET_DEFAULT): Likewise.
	* sparc/sol2.h (TARGET_DEFAULT): Likewise.

Mon Aug  2 23:46:45 1999  J"orn Rennecke <amylaar@cygnus.co.uk>

	* loop.c (strength_reduce): When doing biv->giv conversion, fix up
	reg_biv_class.

1999-08-02  Jakub Jelinek  <jj@ultra.linux.cz>

	* config/float-sparc.h: New file.
	* configure.in: Use float_format=sparc for sparc-*-linux-gnulibc1,
	sparc-*-linux-gnu and sparc64-*-linux*.

1999-08-02  Franz Sirl  <Franz.Sirl-kernel@lauterbach.com>

	* rs6000.c (rs6000_va_list): Type is an array.
	(rs6000_va_start): Don't doubly adjust for varargs.
	(rs6000_va_arg): Evaluate long long GPR adjustment.

Mon Aug  2 16:15:57 1999  David Edelsohn  <edelsohn@gnu.org>

	* rs6000/aix43.h (SUBTARGET_SWITCHES): Use -m64 and -m32 instead of
	-maix64 and -maix32.
	(ASM_SPEC, ASM_CPU_SPEC, CPP_SPEC, CPP_CPU_SPEC, LIB_SPEC,
	LINK_SPEC): Change appropriately.
	* rs6000/rs6000.c (short_cint_operand): Use CONST_OK_FOR_LETTER_P.
	(u_short_cint_operand): Likewise.
	* rs6000/rs6000.md (movdi splitters): Add TARGET_POWERPC64 support
	for 64-bit hosts.
	* rs6000/t-aix43 (MULTILIB): Change to -m64.

	* invoke.texi (RS/6000 Submodel): Document 64-bit processor options.

Mon Aug  2 16:15:57 1999  Geoff Keating  <geoffk@cygnus.com>

	* rs6000/rs6000.c (num_insns_constant_wide): Correct
	for type promotion.
	(add_operand): Get test correct for 64-bit HOST_WIDE_INT.
	(non_add_cint_operand): Likewise.
	(logical_operand): Likewise.
	(non_logical_cint_operand): Likewise.
	(print_operand): Correct printf()s for 64-bit HOST_WIDE_INT.
	(print_operand_address): Correct printf() for 64-bit HOST_WIDE_INT.
	(rs6000_select_rtx_section): Suppress warning.
	(small_data_operand): Suppress warning.
	(rs6000_got_register): Suppress warning.
	* rs6000/rs6000.md (andsi3): HOST_WIDE_INT is a signed
	type, so `J' is generally the wrong constraint for a SImode value;
	use `L' instead.
	(andsi3_internal2): Likewise.
	(andsi3_internal3): Likewise.
	(iorsi3_internal1): Likewise.
	(xorsi3_internal1): Likewise.
	(movsi): Likewise.
	(movsf_softfloat): Likewise.
	(scc insns): Likewise.
	(movsi+2): Preserve sign bits of SImode constant.
	(floatsidf2_internal+1): Sign-extend SImode constant correctly.
	(movdf+1): Sign-extend properly.
	(movdi_32+1): Sign-extend properly.
	(scc insns): Sign-extend properly.

	* md.texi (RS/6000 EXTRA_CONSTRAINTS): Update documentation for J,
	K, L, and T.

1999-08-02  Richard Henderson  <rth@cygnus.com>

	* alpha.c (override_options): Move ev6 alpha_tp frobbing out of
	-mcpu parsing code.
	(print_operand): Notice alpha_fptm not alpha_tp for sw completion.
	* alpha.md (all fp insns): Likewise.

1999-08-02  Nick Clifton  <nickc@cygnus.com>

	* config/v850/v850.h (STRICT_ALIGNMENT): Only define if not
	already defined.

Mon Aug  2 03:38:33 1999  Jeffrey A Law  (law@cygnus.com)

	* pa.c (legitimize_pic_address): Clarify comments.  Do not call the
	pic_load_label generator directly.
	* pa.md (pic_load_label): Clarify comments.  Remove modes on operands.
	No longer a named pattern.

Mon Aug  2 09:38:10 1999  Nick Clifton  <nickc@cygnus.com>

	* explow.c (force_reg): Call force_operand if X does not
	satisfy general_operand.

Mon Aug  2 01:34:22 1999  Jeffrey A Law  (law@cygnus.com)

	* fix-header.c (main): When testing for CONTINUED, use string
	equality, not pointer equality.

Mon Aug  2 01:27:24 1999  Dan Nicolaescu  <dann@ics.uci.edu>

	* sparc.c (sparc_block_profiler): Use the %g2 register, not %o0.

Sun Aug  1 22:46:42 1999  Jeffrey A Law  (law@cygnus.com)

	* cse.c (cse_insn): Fix loop which deletes insns after a jump
	that has become an unconditional jump.

	* m68k.c (output_function_prologue): Fix typo in CPU32 case.
	(output_function_epilogue): Similarly.

Sun Aug  1 20:14:00 1999  Bernd Schmidt  <bernds@cygnus.co.uk>

	* tree.h (init_dummy_function_start): Declare.

Sun Aug  1 12:55:31 1999  Bernd Schmidt  <bernds@cygnus.co.uk>

	* stmt.c (emit_filename, emit_lineno, expr_stmts_for_value,
	last_expr_type, last_expr_value, block_start_count, block_stack,
	stack_block_stack, cond_stack, loop_stack, case_stack, nesting_stack,
	nesting_depth, goto_fixup_chain): Delete global	vars; now allocated
	dynamically in stmt elt of struct function for each function.
	(struct nesting): Rename function_call_count elt to n_function_calls,
	target_temp_slot_level to block_target_temp_slot_level.  All users
	changed.
	(struct stmt_status): New structure definition.
	Add many accessor macros for stmt_status elements which previously
	were global variables.
	(init_stmt_for_function): Allocate stmt elt for current_function.
	Reflect that block_start_count was renamed to
	current_block_start_count.
	(save_stmt_status, restore_stmt_status): Delete functions.
	(preserve_subexpressions_p): Don't access loop_stack when outside
	a function.
	(expand_start_bindings): Reflect that block_start_count was renamed to
	current_block_start_count.
	(expand_fixup): Likewise.
	(expand_decl): Don't access block_stack when outside a function.
	(expand_decl_cleanup): Likewise.
	(expand_dcc_cleanup): Likewise.
	(expand_dhc_cleanup): Likewise.
	(expand_anon_union_decl): Likewise.
	(set_file_and_line_for_stmt): New function.
	(in_control_zone_p): New function.

	* function.h (struct function): Add new elt stmt.
	Delete elts block_stack, stack_block_stack, cond_stack, loop_stack,
	case_stack, nesting_stack, nesting_depth, block_start_count,
	last_expr_type, last_expr_value, expr_stmts_for_value, emit_filename,
	emit_lineno, goto_fixup_chain.
	(save_eh_status, restore_eh_status, save_stmt_status,
	restore_stmt_status): Delete declarations.
	* function.c (push_function_context_to): Don't call save_stmt_status.
	(pop_function_context_to): Don't call restore_stmt_status.
	* tree.h (in_control_zone_p): Declare.
	* rtl.h (set_file_and_line_for_stmt): Declare.

	* emit-rtl.c (emit_line_note): Don't set emit_filename/emit_lineno;
	call set_file_and_line_for_stmt.

Thu Jul 31 12:34:45 1999  Joe Buck  <jbuck@synopsys.com>

	* gcc.texi: Use terms "GNU Compiler Collection" and "GCC".
	Also update copyright.

Sat Jul 31 11:10:07 1999  Bernd Schmidt  <bernds@cygnus.co.uk>

	* c-pragma.c: Don't include "except.h".
	* emit-rtl.c: Likewise.
	* stor-layout.c: Likewise.
	* tree.c: Likewise.
	* varasm.c: Likewise.

	* flow.c: Include "function.h".
	* tree.h (init_dummy_function_start): Declare new function.

	* except.h (struct eh_status): New structure.
	(struct label_node, struct eh_entry): Declare even if tree.h hasn't
	been included.
	(eh_return_stub_label, ehstack, catchstack, ehqueue,
	catch_clauses, false_label_stack, caught_return_label_stack,
	protect_list, current_function_ehc): Add accessor macros for the
	corresponding fields in current_function->eh; delete declarations
	for all items that used to be declared here.
	* except.c (eh_return_stub_label, ehstack, catchstack, ehqueue,
	catch_clauses, false_label_stack, caught_return_label_stack,
	protect_list, current_function_ehc): Delete variables.
	(init_eh_for_function): Allocate current_function->eh.
	(save_eh_status, restore_eh_status): Delete functions.

	* function.h (struct function): Add fields next_global and eh.
	Delete all exception handling related fields.
	* function.c (current_function): New variable.
	(all_functions): New variable.
	(push_function_context_to): Don't allocate a struct function,
	use current_function instead.  Call init_dummy_function_start when
	outside a function.  Clear current_function before returning.
	(pop_function_context_from): Restore current_function.
	Don't free the restored struct function.
	(prepare_function_start): New function.
	(init_dummy_function_start): New function.
	(init_function_start): Break out some code into prepare_function_start
	and call it here.

	* stmt.c (save_stmt_status): Don't call save_eh_status.
	(restore_stmt_status): Don't call restore_eh_status.

	* Makefile.in: Update dependencies.

Sat Jul 31 04:10:01 1999  Jeffrey A Law  (law@cygnus.com)

	* pa.c (compute_frame_size): Use STARTINg_FRAME_OFFSET instead
	of depending on a magic constant value.  Update comments.
	(hppa_expand_prologue): Similarly.

	* pa.md (reload_indi, reload_outdi): Allow any register for the
	original reload register.

Fri Jul 30 19:41:35 1999  Jim Wilson  <wilson@cygnus.com>

	* cccp.c (print_help): Change marcos to macros.

1999-07-30  Richard Henderson  <rth@cygnus.com>

	* c-typeck.c (initializer_constant_valid_p): Move ...
	* c-common.c (initializer_constant_valid_p): ... here.  Use
	FOO_TYPE_P instead of tests against TREE_CODE.  Allow subtraction
	of label addresses.
	* c-common.h (initializer_constant_valid_p): Declare.
	* c-tree.h (initializer_constant_valid_p): Remove.

Fri Jul 30 16:33:42 1999  Mathias Froehlich  <frohlich@na.uni-tuebingen.de>

	* config/i386/sol2-c1.asm: Align the stack.
	* config/i386/sol2-gc1.asm: Likewise.

1999-07-30  Vladimir Makarov  <vmakarov@loony.cygnus.com>

	* config/sparc/sparc.h (ASM_CPU32_DEFAULT_SPEC): Change -Av8 onto
	-Asparclite for sparc86x.
	(CPP_CPU32_DEFAULT_SPEC, CPP_CPU_SPEC): Remove -D__sparc_v8__ for
	sparc86x.
	(ASM_CPU_SPEC): Use -Asparclite for sparc86x.

Fri Jul 30 14:53:56 1999  Jakub Jelinek  <jj@ultra.linux.cz>

	* config/sparc/linux64.h (CC1_SPEC): Preserve CPU specified by
	the user if using the non-default arch size in BI_ARCH configuration.
	* config/sparc/sol2-sld-64.h (CC1_SPEC): Ditto.

	* config/sparc/sparc.md (cmp_mul_set, cmp_udiv_cc_set):
	Fix patterns so that they actually match.
	(cmp_sdiv_cc_set): Ditto, also don't require g0 to be zero.
	(mulsidi3_sp64, const_mulsidi3_sp64): New patterns.
	(const_mulsidi3_sp32): Renamed from const_mulsidi3, only on
	TARGET_HARD_MUL32.
	(mulsidi3): Reflect this in the expand.
	(smulsi3_highpart): Only on TARGET_ARCH32.
	(umulsidi3_sp64, const_umulsidi3_sp64): New patterns.
	(const_umulsidi3_sp32): Renamed from const_umulsidi3.
	(umulsidi3): Reflect this in the expand.
	(umulsi3_highpart): Only on TARGET_ARCH32.
	(divsi3_sp32): Renamed from divsi3, only on TARGET_ARCH32,
	don't require g0 to be zero.
	(udivsi3_sp32): Renamed from udivsi3, only on TARGET_ARCH32.
	({,u}divsi3): New expands.
	({,u}divsi3_sp64): New patterns.
	(after lshrdi3_v8plus): Four new patterns to help combiner
	optimizing nested mixed mode shifts.

	* config/sparc/sparc.c (sparc_override_options): Use deprecated
	v8 instructions if optimizing for UltraSPARC I, II, IIi, as it
	speed things up. Don't use them by default on plain v9 in 64bit
	mode, according to what SPAMv9 sais.

	* config/sparc/sparc.h: Fix comments, e.g. Linux already preserves
	top 32 bits of %[og][0-7] in signal handlers.
	Also, TARGET_HARD_MUL32 now is only true for TARGET_ARCH32.

Fri Jul 30 03:00:41 1999  Jeffrey A Law  (law@cygnus.com)

	* pa.md (zvdep_imm32): Renamed from zvdep_imm.
	(ashlsi3): Corresponding changes.

	* pa.c (compute_zdepwi_operands): Renamed from compute_zdepi_operands.

Thu Jul 29 18:37:13 1999  Jeffrey A Law  (law@cygnus.com)

	* pa.h (FIRST_PARM_CALLER_OFFSET): Delete.

Thu Jul 29 19:01:58 1999  Bernd Schmidt  <bernds@cygnus.co.uk>

	* arm.h (Hint): Delete macro.
	Substitute HOST_WIDE_INT for Hint in some prototypes.
	* arm.c: Substitute HOST_WIDE_INT for Hint in one prototype.

Thu Jul 29 09:21:42 1999  Nick Clifton  <nickc@cygnus.com>

	* builtins.c (expand_builtin_setjmp): Use force_operand to
	make sure that the buffer address is in a suitable form to be
	passed to force_reg.

Wed Jul 28 12:50:48 1999  Geoff Keating  <geoffk@cygnus.com>

	* config/mips/mips.c: system.h handles MIN and MAX, don't undefine
	them here.

Wed Jul 28 13:18:35 1999  Jeffrey A Law  (law@cygnus.com)

	* pa.md (indirect_jump): Remove mode from match_operand.  Verify
	proper mode in the condition string.
	(icacheflush, dcacheflush): Remove modes from match_operands.

	* pa.c (emit_move_sequence): Always convert scratch_reg to the
	proper mode before using it.

	* pa.md (adddi3, subdi3): Turn into a define_expand/define_insn
	pair.

	* pa.c (store_reg): Do not call add_high_const generator directly.
	(load_reg, set_reg_plus_d): Likewise.
	* pa.md (add_high_const): No longer a named pattern.

	* pa.c (legitimize_address): Consistently use Pmode rather than
	SImode.  Do not call gen_pic2_highpart directly anymore.
	* pa.md (pic2_highpart): No longer a named pattern.
	(pic2_lo_sum): Similarly.  Reformat to make more readable.

	* pa.md (call, call_value): Use "word_mode" instead of "SImode" as
	needed.

	* README: Update.

Wed Jul 28 11:28:04 1999  Franz Sirl  <Franz.Sirl-kernel@lauterbach.com>

	* builtins.c (expand_builtin): Typo in call to expand_builtin_ffs.

Wed Jul 28 11:23:48 1999  Richard Henderson  <rth@cygnus.com>

	* pa.c (hppa_builtin_saveregs):  Use get_varargs_alias_set
	and tag the spill mems.
	(hppa_va_start): New.
	(hppa_va_arg): New.
	* pa.h (EXPAND_BUILTIN_VA_START): New.
	(EXPAND_BUILTIN_VA_ARG): New.

Wed Jul 28 11:22:21 1999  Richard Henderson  <rth@cygnus.com>

	* mn10300.c (mn10300_builtin_saveregs): Use get_varargs_alias_set
	and tag the spill mems.
	(mn10300_va_start): New.
	(mn10300_va_arg): New.
	* mn10300.h (EXPAND_BUILTIN_VA_START): New.
	(EXPAND_BUILTIN_VA_ARG): New.

Wed Jul 28 11:20:19 1999  Richard Henderson  <rth@cygnus.com>

	* mn10200.c (mn10200_va_arg): New.
	* mn10200.h (EXPAND_BUILTIN_VA_ARG): New.

Wed Jul 28 11:19:06 1999  Richard Henderson  <rth@cygnus.com>

	* builtins.c (std_expand_builtin_va_arg): Use int_size_in_bytes
	rather than play with TREE_INT_CST_LOW.

1999-07-27  Philip Blundell  <pb@nexus.co.uk>

	* config/arm/telf.h: Include dbxelf.h.
	(CPP_PREDEFINES): Only define if not already defined.
	(ASM_IDENTIFY_GCC): Likewise.
	(SUBTARGET_EXTRA_SECTIONS): Likewise.
	(SUBTARGET_EXTRA_SECTION_FUNCTIONS): Likewise.
	* config/arm/thumb.h (LINK_SPEC): Only define if not already
	defined.
	(DBX_DEBUGGING_INFO): Don't define.
	* config/arm/linux-telf.h: New file.
	* config/arm/linux-tgas.h: New file.
	* config/arm/t-thumb-linux: New file.
	* config/arm/uclinux-elf.h: New file.
	* config/arm/uclinux-telf.h: New file.
	* configure.in (arm-*-uclinux, thumb-*-linux-gnu,
	thumb-*-uclinux): New targets.
	* configure: Regenerate.

Tue Jul 27 23:20:21 1999  Jeffrey A Law  (law@cygnus.com)

	* pa.md (post_store, pre_load): New expanders.
	(post_stwm, pre_ldwm): Renamed to post_stw and pre_ldw respectively.
	(post_ldwm, pre_stwm): Make these unnamed patterns since we never
	need to directly generate RTL for them.
	* pa.c (hppa_expand_prologue, hppa_expand_epilogue): Corresponding
	changes.

Tue Jul 27 16:05:52 1999  David Edelsohn  <edelsohn@gnu.org>

	* aix43.h (ASM_CPU_SPEC, CPP_CPU_SPEC): Add rs64a and PPC630.
	* rs6000.c (processor_target_table): Add powerpc64, rs64a, and PPC630.
	(rs6000_cpu): Choose between 32-bit and 64-bit default processors.
	(secndary_reload_class): Make TARGET_ELF conditional compile.
	(print_operand_address): Similar.
	(output_toc): Print all values as hex.
	(get_issue_rate): Rearrange and add RS64A and PPC630.
	* rs6000.h (processor_type): Add RS64A and PPC630.
	(PROCESSOR_POWERPC64): New.
	(PROMOTE_MODE): Use word_mode.
	(RTX_COSTS): Add RS64A and PPC630.
	* rs6000.md (scheduling information): Add lmul and ldiv
	representing 64-bit integer multiply and divide.  Add rs64a and
	PPC630 information.
	(ashldi3): Add support for "rldic" instruction.
	* sysv4.h (PROCESSOR_DEFAULT): Change to PROCESSOR_750.

Tue Jul 27 15:31:53 1999  Vladimir Makarov  <vmakarov@toad.to.cygnus.com>

	* config/sparc/sparc.c (sparc_override_options): Enable SPARCLITE
	instead of V8 for sparclite86x in cpu_table.

Tue Jul 27 17:49:42 1999  Bernd Schmidt  <bernds@cygnus.co.uk>

	* config/arm/coff.h (ASM_FILE_START): If generating SDB output, call
	output_file_directive.

Tue Jul 27 03:15:33 1999  Jason Merrill  <jason@yorick.cygnus.com>

	* expr.c (expand_expr, case PLUS_EXPR): Get the mode from the
	tree for op1, not the rtl.

Tue Jul 27 00:18:34 1999  Richard Henderson  <rth@cygnus.com>

	* m88k.c (m88k_builtin_saveregs): Break out the constructor code
	to m88k_va_start, leaving only the register spill.
	(m88k_build_va_list): New.
	(m88k_va_start): New.
	(m88k_va_arg): New.
	* m88k.h (BUILD_VA_LIST_TYPE): New.
	(EXPAND_BUILTIN_VA_START): New.
	(EXPAND_BUILTIN_VA_ARG): New.

Mon Jul 26 19:07:11 1999  Geoff Keating  <geoffk@cygnus.com>

	* config/rs6000/rs6000.c (rs6000_expand_builtin_saveregs):
	Rename from expand_builtin_saveregs.
	* config/rs6000/rs6000.h (EXPAND_BUILTIN_SAVEREGS): Change caller.

Mon Jul 26 22:52:47 1999  Richard Henderson  <rth@cygnus.com>

	* i960.c (i960_setup_incoming_varargs): Use get_varargs_alias_set
	for the register spill block.
	(i960_build_va_list): New.
	(i960_va_start): New.
	(i960_va_arg): New.
	* i960.h (BUILD_VA_LIST_TYPE): New.
	(EXPAND_BUILTIN_VA_START): New.
	(EXPAND_BUILTIN_VA_ARG): New.
	* i960.md (store_multiple): Use change_address on individual mems.

Mon Jul 26 22:43:12 1999  Richard Henderson  <rth@cygnus.com>

	* builtins.c (stabilize_va_list): Don't INDIRECT_REF through
	an ARRAY_TYPE.
	(std_expand_builtin_va_start): Back out one word if !stdarg_p.
	(expand_builtin_va_end): Evaluate arg for side effects.
	* c-common.c (c_common_nodes_and_builtins): Construct a
	va_list_arg_type_node to handle array decomposition to pointer.

Mon Jul 26 18:51:34 1999  Richard Henderson  <rth@cygnus.com>

	* except.c (st_dynamic_cleanup): Use force_operand on the
	buffer's address.

Mon Jul 26 16:43:26 1999  Richard Henderson  <rth@cygnus.com>

	* c4x.h (EXPAND_BUILTIN_VA_ARG): New.
	* c4x.c (c4x_va_arg): New.

Mon Jul 26 12:30:09 1999  Jason Merrill  <jason@yorick.cygnus.com>

	* cpplib.c (cpp_get_token): Don't return a CPP_POP if the buffer
	has manual_pop set.

1999-07-26  Nathan Sidwell  <nathan@acm.org>

	* eh-common.h (__eh_matcher): Prototype correctly.

Mon Jul 26 17:24:51 1999  Philip Blundell  <pb@nexus.co.uk>

	* config/arm/thumb.h (THUMB_FLAG_SINGLE_PIC_BASE): Define.
	(TARGET_SINGLE_PIC_BASE): Likewise.
	(GOT_PCREL, NEED_GOT_RELOC, NEED_PLT_RELOC): Provide default
	definitions.
	(TARGET_CALLEE_INTERWORKING): Fix typo in comment.
	(TARGET_SWITCHES): Add -m{no-}single-pic-base.
	(TARGET_OPTIONS): Add -mpic-register=N.
	(OUTPUT_INT_ADDR_CONST): New macro.
	(INDEX_REGISTER_RTX_P, PIC_OFFSET_TABLE_REGNUM, FINALIZE_PIC,
	LEGITIMATE_PIC_OPERAND_P): Likewise.
	(LEGITIMIZE_ADDRESS, GOT_IF_LEGITIMATE_ADDRESS): Support PIC.
	(ASM_OUTPUT_INT): Use OUTPUT_INT_ADDR_CONST rather than calling
	output_addr_const directly.
	(PRINT_OPERAND_PUNCT_VALID_P): Accept `|' for compatibility with
	ARM port.
	(thumb_pic_register, thumb_pic_register_string): Declare.

	* config/arm/thumb.c (symbol_mentioned_p): New function: Imported
	from arm.c.
	(label_mentioned_p): New function: Imported from arm.c.
	(legitimize_pic_address): New function: Imported from arm.c.
	(is_pic):New function: Imported	from arm.c.
	(thumb_finalize_pic):New function: Imported from arm.c.
	(add_constant): Cope with PIC constants.
	(fixit): Cope with PIC constants.
	(output_return): Do not treat the PIC register as live if
	TARGET_SINGLE_PIC_BASE is true.
	(thumb_function_prologue): Do not treat the PIC register as live if
	TARGET_SINGLE_PIC_BASE is true.
	(thumb_expand_prologue): Do not treat the PIC register as live if
	TARGET_SINGLE_PIC_BASE is true.
	(thumb_unexpand_epilogue): Do not treat the PIC register as live if
	TARGET_SINGLE_PIC_BASE is true.
	(thumb_print_operand): Accept '|'.
	(thumb_override_options): Process PIC options.

	* config/arm/thumb.md (movsi): Support PIC.
	(call_insn): Change "i" constraint to "X".
	(call_value_insn): Likewise.
	(consttable_4, consttable_8, consttable_end): Set and clear
	"making_const_table" as appropriate.
	(pic_load_addr, pic_add_dot_plus_four): New insns.

	* invoke.texi (Thumb Options): Fix spelling.  Document new
	options -msingle-pic-base and -mpic-register=.

1999-07-26  Andrew Haley  <aph@cygnus.com>

	* config/m32r/initfini.c (__init): Use a full word immediate for
	__fini: this allows it to be placed in any memory region.

	* config/m32r/t-m32r: Compile crtinit.o and crtfini.o for
	-mmodel=medium.  This is OK for all memory models.

Mon Jul 26 11:58:46 1999  Nick Clifton  <nickc@cygnus.com>

	* config/arm/arm.c: Replace %R%s in asm_fprintf strings with %r.
	* config/arm/arm.h: Replace %R%s in asm_fprintf strings with %r.

Mon Jul 26 10:23:36 1999  Nick Clifton  <nickc@cygnus.com>

	* final.c (asm_fprintf): Accept ASM_FPRINTF_EXTENSIONS, if
	defined.

	* tm.texi: Document ASM_FPRINTF_EXTENSIONS.

Sun Jul 25 23:51:59 1999  Richard Henderson  <rth@cygnus.com>

	* i860.h (EXPAND_BUILTIN_SAVEREGS): New.
	(BUILD_VA_LIST_TYPE): New.
	(EXPAND_BUILTIN_VA_START): New.
	(EXPAND_BUILTIN_VA_ARG): New.
	* i860.c (output_delayed_branch): Disable.
	(output_delay_insn): Likewise.
	(i860_saveregs): New.
	(i860_build_va_list): New.
	(i860_va_start): New.
	(i860_va_arg): New.
	* i860.md: Disable all peepholes using output_delayed_branch.
	* i860/sysv4.h (I860_SVR4_VA_LIST): New.

Sun Jul 25 23:44:13 1999  Richard Henderson  <rth@cygnus.com>

	* clipper.h (EXPAND_BUILTIN_SAVEREGS): Remove argument.
	(BUILD_VA_LIST_TYPE): New.
	(EXPAND_BUILTIN_VA_START): New.
	(EXPAND_BUILTIN_VA_ARG): New.
	* clipper.c (clipper_builtin_saveregs): Only dump registers.
	Return the address of the save area.
	(clipper_build_va_list): New.
	(clipper_va_start): New.
	(clipper_va_arg): New.

Sun Jul 25 22:56:47 1999  Richard Henderson  <rth@cygnus.com>

	* arc.h (EXPAND_BUILTIN_VA_START): New.
	(EXPAND_BUILTIN_VA_ARG): New.
	* arc.c (arc_setup_incoming_varargs): Set alias set of
	varargs save area.
	(arc_va_start): New.
	(arc_va_arg): New.

Sun Jul 25 22:45:55 1999  Richard Henderson  <rth@cygnus.com>

	* alpha.h (EXPAND_BUILTIN_SAVEREGS): Delete.
	(BUILD_VA_LIST_TYPE): New.
	(EXPAND_BUILTIN_VA_START): New.
	(EXPAND_BUILTIN_VA_ARG): New.
	* alpha.c (alpha_builtin_saveregs): Delete.
	(alpha_build_va_list): New.
	(alpha_va_start): New.
	(alpha_va_arg): New.

Sun Jul 25 21:40:33 1999  Jeffrey A Law  (law@cygnus.com)

	* config/svr4.h (CTORS_SECTION_ASM_OP): Do not emit directives in
	column zero.
	(DTORS_SECTION_ASM_OP, INIT_SECTION_ASM_OP): Likewise.
	(FINI_SECTION_ASM_OP, ASM_OUTPUT_SECTION_NAME): Likewise.

	* gcc.texi: More changes related to list conversion.
	* invoke.texi: Likewise.

Sun Jul 25 18:15:39 1999  Richard Henderson  <rth@cygnus.com>

	* builtins.c (expand_builtin_saveregs): Remove static, remove exp
	and ignore arguments, bail if no EXPAND_BUILTIN_SAVEREGS.
	(expand_builtin_next_arg): Accept ARGLIST not EXP.
	(stabilize_va_list): New function.
	(std_expand_builtin_va_start): New function.
	(expand_builtin_va_start): New function.
	(get_varargs_alias_set): New function.
	(std_expand_builtin_va_arg): New function.
	(expand_builtin_va_arg): New function.
	(expand_builtin_va_end): New function.
	(expand_builtin_va_copy): New function.
	(expand_builtin): Call them.
	* c-common.c (c_common_nodes_and_builtins): Build __builtin_va_list,
	__builtin_{varargs_start,stdarg_start,end,copy}.
	(build_va_arg): New function.
	* c-common.h (CTI_PTR_TYPE, ptr_type_node): Delete.
	(build_va_arg): Declare.
	* c-decl.c (ptr_type_node, va_list_type_node): New.
	* c-parse.gperf (__builtin_va_arg): New.
	* c-parse.in (VA_ARG): New token.
	(unary_expr): Recognize it.
	* expr.c (expand_expr): Expand VA_ARG_EXPR.
	* expr.h (std_expand_builtin_va_start): Declare.
	(std_expand_builtin_va_arg): Declare.
	(expand_builtin_va_arg): Declare.
	(get_varargs_alias_set): Declare.
	* tree.def (VA_ARG_EXPR): New.
	* tree.h (BUILT_IN_VARARGS_START): New.
	(BUILT_IN_STDARG_START, BUILT_IN_VA_END): New.
	(ptr_type_node, va_list_type_node): Declare.
	* tm.texi (EXPAND_BUILTIN_SAVEREGS): Kill unused ARGLIST argument.
	* m32r.h (EXPAND_BUILTIN_SAVEREGS): Likewise.
	* m88k.h, m88k.c: Likewise.
	* mn10300.h, mn10300.c: Likewise.
	* pa.h, pa.c: Likewise.
	* rs6000.h, rs6000.c: Likewise.
	* sh.h, sh.c: Likewise.
	* sparc.h, sparc.c: Likewise.

	* emit-rtl.c (operand_subword): Copy alias set.
	(change_address): Likewise.

Sun Jul 25 15:04:37 1999  Jeffrey A Law  (law@cygnus.com)

	* pa.c (compute_frame_size): Scan all the used callee saved registers,
	not just the first one.

Fri Jul 23 14:09:58 1999  Philip Blundell  <pb@nexus.co.uk>

	* config/arm/arm.h (TARGET_SWITCHES): Add
	-m{no-}single-pic-base.  Correct help string for -mshort-load-words.
	(TARGET_OPTIONS): Add -mpic-register=.
	(ARM_FLAG_SINGLE_PIC_BASE, TARGET_SINGLE_PIC_BASE): Define.
	(arm_pic_register_string): Declare.
	(NEED_PLT_GOT): Delete, replace with ...
	(NEED_GOT_RELOC, NEED_PLT_RELOC): ... these.  New macros.
	(OUTPUT_INT_ADDR_CONST): Replace NEED_PLT_GOT with NEED_GOT_RELOC.
	(ASM_OUTPUT_MI_THUNK): Replace NEED_PLT_GOT with NEED_PLT_RELOC.
	* config/arm/arm.c (arm_override_options): Add new option
	-mpic-register=N.
	(arm_pic_register_string): New variable.
	(arm_finalize_pic): Respect TARGET_SINGLE_PIC_BASE.
	(output_func_prologue): If TARGET_SINGLE_PIC_BASE, treat the PIC
	register as never live.  Use NEED_PLT_RELOC not NEED_PLT_GOT.
	(output_return_instruction): Likewise.
	* config/arm/elf.h (NEED_PLT_GOT): Delete, replace with ...
	(NEED_GOT_RELOC, NEED_PLT_RELOC): ... these.  Define to flag_pic.
	* config/arm/arm.md: Use NEED_PLT_RELOC in place of NEED_PLT_GOT.

	* invoke.texi (ARM Options): Fix spelling.  Remove duplicate
	mention of -msched-prolog.  Document new options -msingle-pic-base
	and -mpic-register=.

Thu Jul 22 18:23:56 1999  Richard Henderson  <rth@cygnus.com>

	* haifa-sched.c (reemit_notes): Tidy.
	* sched.c (reemit_notes): Duplicate 1998-08-31 patch to
	haifa's routine.

Thu Jul 22 18:21:04 1999  Richard Henderson  <rth@cygnus.com>

	* explow.c (trunc_int_for_mode): New function.
	(plus_constant_wide): Use it.
	* combine.c (simplify_and_const_int): Likewise.
	(merge_outer_ops): Likewise.
	(simplify_shift_const): Likewise.
	* cse.c (simplify_unary_operation): Likewise.
	(simplify_binary_operation): Likewise.
	* emit-rtl.c (operand_subword): Likewise.
	* rtl.h: Declare it.

Thu Jul 22 14:34:59 1999  Bernd Schmidt  <bernds@cygnus.co.uk>

	* config/arm/arm.c (arm_print_operand): Fix typo in 'M' case
	(use NUM_REGS instead of NUM_INTS).

Thu Jul 22 11:25:20 1999  Bernd Schmidt  <bernds@cygnus.co.uk>

	* builtins.c: New file.
	* expr.c (saveregs_value, apply_args_value):  Delete definition,
	moved into builtins.c.
	(string_constant): No longer static.
	(get_pointer_alignment, c_strlen, get_memory_rtx, expand_builtin,
	apply_args_size, apply_result_size, result_vector,
	expand_builtin_apply_args, expand_builtin_apply,
	expand_builtin_return): Delete functions, moved into builtins.c.
	(INCOMING_REGNO, OUTGOING_REGNO): Delete unused macros.
	* expr.h (saveregs_value, apply_args_value): Declare variables.
	(expand_builtin, string_constant): Declare functions.
	* Makefile.in: Update to build builtin.o.

Wed Jul 21 00:46:58 1999  Mark P. Mitchell  <mark@codesourcery.com>

	* defaults.h (DWARF2_GENERATE_TEXT_SECTION_LABEL): New macro.
	* tm.texi (DWARF2_GENERATE_TEXT_SECTION_LABEL): Define it.
	* dwarf2out.c (dwarf2out_init): Don't output a label to mark the
	start of the text section if DWARF2_GENERATE_TEXT_SECTION_LABEL is
	false.
	* config/mips/iris6.h (DWARF2_GENERATE_TEXT_SECTION_LABEL):
	Define to zero.

1999-07-21  Michael Meissner  <meissner@cygnus.com>

	* print-rtl.c (print_rtx): Print the names of the virtual
	registers.

Wed Jul 21 16:00:32 1999  Nick Clifton  <nickc@cygnus.com>

	* config/arm/arm.h (INITIAL_ELIMINATION_OFFSET): Fix typo
	introduced in previous delta.

Wed Jul 21 14:30:51 1999  Bernd Schmidt  <bernds@cygnus.co.uk>

	* c-lang.c (finish_file): Rename void_list_node to void_list_node_1
	to avoid name clash.

Wed Jul 21 08:39:22 1999  Gavin Romig-Koch  <gavin@cygnus.com>

	* c-lex.c (yylex) : Correct the test for overflow when lexing
	integer literals.

Tue Jul 20 18:02:42 1999  Richard Henderson  <rth@cygnus.com>

	* haifa-sched.c (insn_cost): FREE implies cost 0 and vice versa.
	(adjust_priority): Always call ADJUST_PRIORITY.
	(schedule_insn): Only put insns into the ready at cost 0.
	(schedule_block): Remove redundant initial sort.  Give clock_var
	and can_issue_more to MD_SCHED_REORDER.  Requeue if hazard cost
	is not 0.
	* tm.texi (MD_SCHED_REORDER): Update docs.

	* sparc.h (MD_SCHED_REORDER): Update.  Set CAN_ISSUE_MORE.
	* sparc.c (ultra_reorder_called_this_block): Delete.
	(ultrasparc_sched_init): Don't set it.
	(ultrasparc_sched_reorder): Don't check it.

Tue Jul 20 17:07:54 1999  Richard Henderson  <rth@cygnus.com>

	* rs6000.h (struct rs6000_args): Add sysv_gregno.
	* rs6000.c (init_cumulative_args): Init sysv_gregno.
	(function_arg_boundary): Align DFmode.
	(function_arg_advance): Restructure for ABI_V4; use sysv_gregno
	to get fp reg and stack overflow correct.
	(function_arg): Likewise.
	(function_arg_pass_by_reference): True for TFmode for ABI_V4.
	(setup_incoming_varargs): Restructure for ABI_V4; use
	function_arg_advance to skip final named argument.
	(expand_builtin_saveregs): Properly unskip the last integer arg
	when doing varargs.  Adjust overflow location calculation.

	* ginclude/va-ppc.h (struct __va_list_tag): Make gpr and fpr
	explicitly unsigned.
	(__VA_FP_REGSAVE): Use new OFS argument instead of AP->fpr directly.
	(__VA_GP_REGSAVE): Similarly.
	(__va_longlong_p): Delete.
	(__va_arg_type_violation): New declaration.
	(va_arg): Restructure.  Flag promotion errors.  Align double.
	TFmode passed by reference.

	* rs6000.md (movdi_32+1): Use GEN_INT after arithmetic
	in the HOST_BITS_PER_WIDE_INT > 32 case.

Tue Jul 20 12:37:30 1999  Hans-Peter Nilsson  <hp@bitrange.com>

	* dwarf2out.c (output_abbrev_section): Terminate with a zero.

Tue Jul 20 12:12:27 1999  Jason Merrill  <jason@yorick.cygnus.com>

	* gcc.c (default_compilers, cpp-output): Pass -fpreprocessed.
	* toplev.c (documented_lang_options): Add -fpreprocessed.
	* cpplib.h (struct cpp_buffer): Add preprocessed.
	* cppinit.c (cpp_handle_option): Handle -fpreprocessed.
	(cpp_start_read): Don't expand macros or emit an initial #line
	directive if -fpreprocessed.

Tue Jul 20 12:12:09 1999  Michael Tiemann  <tiemann@holodeck.cygnus.com>

	* cpplib.h (struct cpp_buffer): Added manual_pop for
	better C++ tokenization.
	* cpplib.c (cpp_get_token): Return CPP_EOF if manual_pop.
	Also, support C++ tokenization for ->*, .*, <?, and >? operators.
	* c-common.c (cpp_token): Make non-static.

Tue Jul 20 11:24:19 1999  Bernd Schmidt  <bernds@cygnus.co.uk>

	* c-common.h: New file.
	* c-common.c (permanent_obstack): Delete unused declaration.
	(c_global_trees): New array.
	(c_common_nodes_and_builtins): New function; split off common code
	from init_decl_processing in both c-decl.c and cp/decl.c.
	* c-tree.h: Delete lots of declarations of tree nodes; replaced by
	c_global_trees and accessor macros defined in c-common.h.
	Include c-common.h.
	* c-decl.c: Delete definitions for tree nodes that were replaced by
	c_global_trees.
	(init_decl_processing): Build void_list_node.
	Call c_common_nodes_and_builtins; delete code to generate the common
	builtins here.
	* objc/objc-act.c (build_module_descriptor): Rename variable
	void_list_node to avoid clash with c-common.h.

	* Makefile.in: Update dependencies.
	* objc/Make-lang.in: Likewise.

Mon Jul 19 14:22:18 1999  Mark P. Mitchell  <mark@codesourcery.com>

	* config/mips/iris6gld.h (MAKE_DECL_ONE_ONLY): Define.
	(UNIQUE_SECTION_P): Likewise.
	(UNIQUE_SECTION): Likewise.

1999-07-19  Linas Vepstas  <linas@linas.org>

	* config/i370/README: New file.
	* config/i370/linux.h: New file.
	* config/i370/mvs.h: New file.
	* config/i370/oe.h: New file.
	* config/i370/t-linux: New file.
	* config/i370/t-mvs: New file.
	* config/i370/t-oe: New file.
	* config/i370/x-oe: New file.
	* config/i370/xm-linux.h: New file.
	* config/i370/xm-mvs.h: New file.
	* config/i370/xm-oe.h: New file.

	* i370.c (label_node_t): Add first_ref_page, label_addr,
	label_first_ref, label_last_ref members.
	(mvs_need_base_reload): Renamed from mvs_label_emitted.
	(MAX_MVS_LABEL_SIZE): Define.
	(MAX_LONG_LABEL_SIZE): Define.
	(alias_node_t, alias_anchor, alias_number): New.
	(mvs_function_table): Reorder for EBCDIC.
	(ascebc, ebcasc): Unconditionally define.
	(i370_branch_dest, i370_branch_length): New functions.
	(i370_short_branch, i370_label_scan): New functions.
	(mvs_get_label): Renamed from mvs_add_label.  Search for
	an existing label before creating a new one.
	(mvs_add_label): New function.
	(mvs_get_label_page): New function.
	(mvs_free_label_list): Renamed from mvs_free_label.  Iterate
	over the entire list.
	(mvs_check_page) [TARGET_HLASM]: Use BASR not BALR.
	(mvs_check_page) [TARGET_ELF_ABI]: New function.
	(mvs_add_alias, mvs_need_alias): New functions.
	(mvs_get_alias, mvs_check_alias): New functions.
	(handle_pragma): New function.
	(mvs_function_check): New function.
	(unsigned_jump_follows_p): Search harder.
	(i370_function_prolog) [TARGET_HLASM]: Handle LE370.  Scan labels.
	(i370_function_prolog) [TARGET_ELF_ABI]: New function.
	* i370.h (TARGET_VERSION): Delete.
	(CPP_SPEC, CPP_PREDEFINES): Delete.
	(mvs_label_emitted): Delete.
	(TARGET_EBCDIC): Delete.
	(MAP_CHARACTER): Define only if TARGET_EBCDIC.
	(HANDLE_PRAGMA): Define.
	(HARD_REGNO_NREGS): Handle complex modes.
	(HARD_REGNO_MODE_OK): Likewise.
	(CLASS_MAX_NREGS): Likewise.
	(RET_REG): Likewise.
	(EXTRA_CONSTRAINT): Define.
	(RETURN_IN_MEMORY): True for DImode.
	(TRAMPOLINE_TEMPLATE): Use gen_rtx instead of GEN_INT.
	(FUNCTION_PROFILER): Delete.
	(COUNT_REGS): Fail if REG_P but not REG_OK_FOR_BASE_P.
	(NOTICE_UPDATE_CC): Correct handling of MULT, DIV, logicals and shifts.
	(TARGET_ESC, TARGET_BELL): Conditionally define for TARGET_EBCDIC.
	(TARGET_BS, TARGET_TAB, TARGET_NEWLINE): Likewise.
	(TARGET_VT, TARGET_FF, TARGET_CR): Likewise.
	(ASM_FILE_START): Add "RMODE ANY".
	(ASM_OUTPUT_EXTERNAL): Check for aliases.
	(ASM_GLOBALIZE_LABEL): Likewise.
	(ASM_OUTPUT_LABELREF): Likewise.
	(ASM_OUTPUT_COMMON): Likewise.
	(PRINT_OPERAND): Handle 'K', 'W', default.
	(PRINT_OPERAND_ADDRESS): New.
	(Lots of defines): Add support for TARGET_ELF_ABI.
	* i370.md (attr length): New.  Define for all patterns.
	(*): Lots of tweeks to assembly output and constraints.

Mon Jul 19 15:09:29 1999  David Edelsohn  <edelsohn@gnu.org>

	* rs6000.md (arithmetic, logical, and shift Rc combiner patterns):
	Disable patterns performing SImode comparisons with SImode values
	if TARGET_POWERPC64 and instruction does not sign-extend or does
	not mask to narrower than SImode, i.e. where bit 31 and bit 63 may
	differ for signed quantities.
	(indirect_jump): Add expander to choose RTL based on TARGET_64BIT.
	(tablejump): Patterns contingent on TARGET_64BIT not TARGET_POWERPC64.
	(decrement_and_branch_on_count): Add 64-bit variant.

Mon Jul 19 09:36:27 1999  Bernd Schmidt  <bernds@cygnus.co.uk>

	* final.c (output_asm_insn): When searching for the matching string
	for a given dialect, don't run past the end of the list of
	alternatives if there are fewer alternatives in the template than
	dialects.

1999-07-17  Alexandre Oliva  <oliva@dcc.unicamp.br>

	* gcc.texi: Update e-mail addresses and URLs to gcc.gnu.org.
	Removed paragraph about compression of files and size limitation,
	duplicated in the FAQ.  Use gcc-patches for posting patches.
	* gcc.c (main): Updated URL with bug reporting instructions to
	gcc.gnu.org.  Removed e-mail address.
	* system.h (abort): Likewise.

1999-07-17  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* Makefile.in (stmp-multilib-sub): Make the files extracted
	from $(LIBGCC1) writable.

Sat Jul 17 14:25:46 1999  Nick Clifton  <nickc@cygnus.com>

	* config/arm/aout.h: Reformat for improved readability.

	* config/arm/arm.h: Reformat for improved readability.
	Replace uses of fprintf with asm_fprintf where appropriate.
	(ARM_DECLARE_FUNCTION_NAME): New macro:  Perform any generic ARM
	function declaration assembler actions.
	(NUM_INTS): New macro: Convert from bytes to words.
	(NUM_REGS): New macro: Compute number of registers required to
	hold a quanitity of tyep MODE.
	(NUM_REGS2): New macro: Like NUM_REGS but also copes with BLKmode
	types.
	(NUM_ARG_REGS): New macro: The number of argument registers
	available.
	(ARG_REGISTER): New macro: Compute the register number of the Nth
	argument register.
	(LAST_ARG_REGNUM): New macro: The number of the last argument
	register.
	(SP_REGNUM): New macro: Register number of the stack pointer.
	(FP_REGNUM): New macro: Register number of the frame pointer.
	(FUNCTION_ARG, FUNCTION_ARG_PARTIAL_NREGS, INIT_CUMULATIVE_AGS,
	FUNCTION_ARG_ADVANCE, SETUP_INCOMING_VARARGS): Change
	CUMULATIVE_ARGS so that it counts registers not bytes.

	* config/arm/arm.c: Rename TARGET_THUMB_INTERWORK to
	TARGET_INTERWORK.
	Replace uses of fprintf with asm_fprintf where appropriate.
	(output_ascii_pseudo_op): Replace with version from thumb.c

	* config/arm/coff.h (ASM_FILE_START): Emit ASM_APP_OFF.

	* config/arm/elf.h (CPP_PREDEFINES): Replace with
	SUBTARGET_CPP_SPEC.
	(ASM_DECLARE_FUNCTION_NAME): Use ARM_DECLARE_FUNCTION_NAME.
	(ASM_FILE_START): Emit ASM_APP_OFF.

Fri Jul 16 13:48:09 1999  Jeffrey A Law  (law@cygnus.com)

	* pa.c (compute_frame_size): Round frame according to
	STACK_BOUNDARY rather than a hardwired value.

	* pa.h (POINTER_SIZE, PARM_BOUNDARY): Define in terms of BITS_PER_WORD.

	* configure.in (hppa*-*-hpux11*): Use symbolic MASK_PA_11 instead
	of "1".
	* configure: Rebuilt.

	* configure.in (hppa*-*-linux*): New configuration.
	* configure: Rebuilt.
	* pa.h (MAX_OFILE_ALIGNMENT): Delete.
	* pa/som.h (MAX_OFILE_ALIGNMENT): Define.
	* pa/pa-linux.h: New file.
	* pa/t-linux: New file.
	* pa/xm-linux.h: New file.

	* pa.c (hppa_legitimize_address): Change references from SImode to
	either Pmode or word_mode as appropriate.
	(emit_move_sequence, store_reg, load_reg): Likewise.
	(set_reg_plus_d, hppa_expand_prologue): Likewise.
	(output_mul_insn): Likewise.
	* pa.h (PROMOTE_MODE): Likewise.
	(INITIALZE_TRAMPOLINE): Likewise.
	(Pmode): Define to word_mode.

	* pa.c (compute_frame_size): Use UNITS_PER_WORD instead of hardwired
	value of 4.  Allocate 8 bytes for each FP register save.
	(hppa_expand_epilogue): Use UNITS_PER_WORD instead of harwarewired
	value of 4.
	(hppa_expand_prologue): Likewise.
	* pa.h (PROMOTE_MODE): Likewise.
	(HARD_REGNO_MODE_OK, FUNCTION_ARG_SIZE): Likewise.
	(FUNCTION_ARG_BOUNDARY): Likewise.

	* invoke.texi (HPPA Options): Remove -mspace/-mno-space.

	* pa.c (out_of_line_prologue_epilogue): Delete.
	(override_options): Remove -mspace related code.
	(hppa_expand_prologue, hppa_expand_epilogue): Likewise.
	(compute_frame_size): Only allocate space for register that
	actually need to be saved.
	* pa.h (MASK_SPACE, TARGET_SPACE): Delete.
	(TARGET_SWITCHES): Remove -mspace, -mno-space
	* pa/t-pa (LIB2FUNCS_EXTRA): Remove ee.asm and ee_fp.asm
	* pa/t-pro (LIB2FUNCS_EXTRA): Likewise.  Remove -mspace multilib.
	* pa/ee.asm, pa/ee_fp.asm: Delete.

	* pa/elf.h (ASM_OUTPUT_DOUBLE_INT): Define.

	* config/svr4.h (CONST_SECTION_ASM_OP): Do not emit assembler
	directive in column zero.

Fri Jul 16 01:39:57 1999  Jeffrey A Law  (law@cygnus.com)

	* m68k.c (output_function_prologue): Fix computation of save mask
	when generating PIC code.

Thu Jul 15 15:40:09 1999  Jim Wilson  <wilson@cygnus.com>

	* tree.c (build_type_attribute_variant): Move current_obstack restore
	after build_qualified_type call.

1999-07-15  Mark Mitchell  <mark@codesourcery.com>

	* configure.in: Use t-iris6, even with GNU LD.
	* config/mips/iris6gld.h: Fix typo in linker spec.
	* config/mips/t-iris6gld: Remove.

Thu Jul 15 15:15:43 1999  David Edelsohn  <edelsohn@gnu.org>

	* rs6000.md (insv, extzv): Remove SImode dependence in named
	patterns.  Explicitly generate DImode RTL if PowerPC64 and
	operand is DImode.
	(insvdi): Reverse start and size in instruction template.

1999-07-12  Joseph S. Myers  <jsm28@cam.ac.uk>

	* invoke.texi: Typo fixes.

Wed Jul 14 23:28:06 1999  Jeffrey A Law  (law@cygnus.com)

	* emit-rtl.c (gen_realpart): Issue an error for cases GCC can not
	handle at this time instead of silently generating incorrect code.
	(gen_imagpart): Likewise.

	* reload.c (find_reloads): Emit a USE for a pseudo register without
	a hard register if we could not create an optional reload for the
	pseudo.

Wed Jul 14 23:45:48 1999  J"orn Rennecke <amylaar@cygnus.co.uk>

	* c-typeck.c (output_init_element, process_init_element):
	When advancing constructor_unfilled_fields for a RECORD_TYPE,
	check for nameless bit fields.

Wed Jul 14 01:57:39 1999  Richard Henderson  <rth@cygnus.com>

	* regclass.c (scan_one_insn): Notice subregs that change the
	size of their operand.
	(record_reg_classes): Use that to obey CLASS_CANNOT_CHANGE_SIZE.

Wed Jul 14 01:41:42 1999  Jeffrey A Law  (law@cygnus.com)

	* configure.in (alpha*-*-*): Include alpha/t-ieee.
	* configure: Rebuilt.
	* alpha/t-ieee: New file.

Tue Jul 13 10:45:58 1999  Jeffrey A Law  (law@cygnus.com)

	* rs6000.c (find_addr_reg): Do not select r0 as an address
	register.

Tue Jul 13 00:46:18 1999  Philippe De Muyter  <phdm@macqel.be>

	* m68k/x-mot3300 (XCFLAGS): List of big files now includes `cse.o'.

Mon Jul 12 14:29:15 1999  Jeffrey A Law  (law@cygnus.com)

	* rs6000.md (movsf): Do not force easy FP constants into memory.

	* expr.c (expand_expr, case PLUS_EXPR): Pass constants through
	immed_double_const to ensure they are properly truncated then
	sign extended.

Mon Jul 12 10:40:01 1999  Vladimir Makarov  <vmakarov@tofu.to.cygnus.com>

	* config/arm/thumb.c (thumb_reorg): Call replace_symbols_in_block
	always unless NO_DEBUG is used.  Compile this code
	unconditionally.
	(replace_symbols_in_block): Compile it unconditionally.

Sun Jul 11 12:32:32 1999  Jeffrey A Law  (law@cygnus.com)

	* configure.in (i?86-*-elf*): New target.
	* configure: Rebuilt.
	* i386/i386elf.h, i386/t-i386elf: New files.

Fri Jul  9 22:39:44 1999  Jason Merrill  <jason@yorick.cygnus.com>

	* toplev.c (main): Don't complain about saying -gdwarf.
	(rest_of_compilation): Remove redundant code.

Fri Jul  9 19:08:55 1999  Jim Wilson  <wilson@cygnus.com>

	* unroll.c (unroll_loops): Don't delete named CODE_LABELs.

Fri Jul  9 18:54:18 1999  Felix Lee  <flee@cygnus.com>

	* config/i960/i960.c (ret_label): Change asm label from "LR:" to
	"Li960R:", to avoid name clash.

Fri Jul  9 10:48:28 1999  Bernd Schmidt  <bernds@cygnus.co.uk>

	* loop.c (check_dbra_loop): When reversing a loop, delete all
	REG_EQUAL notes referencing the reversed biv except those which are
	for a giv based on it.

Fri Jul  9 03:51:52 1999  Jeffrey A Law  (law@cygnus.com)

	* version.c: Drop "gcc-" prefix from version #.

Thu Jul  8 18:06:30 1999  Jason Merrill  <jason@yorick.cygnus.com>

	* dwarf2out.c (dwarf2out_line): Emit a line number comment after
	the label if we're being verbose.

Thu Jul  8 14:18:46 1999  Richard Henderson  <rth@cygnus.com>

	* m68k.c (output_function_prologue): Add pic register to mask
	if live and flag_pic.
	(output_function_epilogue): Likewise.

Thu Jul  8 12:55:12 1999  Jeffrey A Law  (law@cygnus.com)

	* dbxelf.h (ASM_OUTPUT_SOURCE_LINE): Do not put assembler
	directives in column zero.

	* pa/elf.h (ASM_FILE_START): Define.
	* pa/som.h (ASM_FILE_START): Include .level directives.
	* pa/hpux10.h (ASM_FILE_START): Delete.
	* pa/hpux11.h (ASM_FILE_START): Delete.

	* pa/elf.h (BSS_SECTION_ASM_OP): Use .section .bss.

Thu Jul  8 18:03:19 1999  J"orn Rennecke <amylaar@cygnus.co.uk>

	* reload1.c (choose_reload_regs): Never call remove_address_replacements
	when reload_out equals reload_in.

Thu Jul  8 16:50:14 1999  Nick Clifton  <nickc@cygnus.com>

	* invoke.texi (Spec Files): New node: Describe the contents of
	spec files.

Thu Jul  8 10:28:25 1999  Craig Burley  <craig@jcb-sc.com>

	* invoke.texi (DEC Alpha Options): Put @end table at
	beginning of line, to avoid confusing texi2html.

Thu Jul  8 09:22:06 1999  Nick Clifton  <nickc@cygnus.com>

	* config/arm/elf.h (ASM_OUTPUT_INTERNAL_LABEL): Fixed typo
	introduced in previous delta.

Wed Jul  7 02:00:04 1999  Franz Sirl  <Franz.Sirl-kernel@lauterbach.com>

	* reload1.c (gen_reload): When synthesizing a 3 operand add
	sequence, improve test for when to reload OP1 into the reload
	register instead of OP0.

Wed Jul  7 01:38:03 1999  Jim Wilson  <wilson@cygnus.com>

	* unroll.c (unroll_loop): Don't delete NOTE_INSN_DELETED_LABEL notes.

1999-07-07  Manfred Hollstein  <mhollstein@cygnus.com>

	* m88k/dguxbcs.h (CPP_SPEC): Add missing \ in multi-line
	string literal.

Wed Jul  7 01:16:43 1999  Richard Henderson  <rth@cygnus.com>

	* ginclude/varargs.h (__builtin_va_alist_t): New typedef.
	(va_dcl): Use __builtin_va_alist_t.

Wed Jul  7 01:14:42 1999  Jason Merrill  <jason@yorick.cygnus.com>

	* dwarf2out.c (gen_struct_or_union_type_die): Only remember types
	on the permanent_obstack.
	* dwarfout.c (output_type): Likewise.

Tue Jul  6 15:25:32 1999  Gavin Romig-Koch  <gavin@cygnus.com>

	* c-common.c (unsigned_type,signed_type,signed_or_unsigned_type) :
	Merged from c-typeck.c and cp/typeck.c.
	* c-typeck.c (unsigned_type,signed_type,signed_or_unsigned_type) :
	Merged into c-common.

Tue Jul  6 13:06:01 1999  Dave Brolley  <brolley@cygnus.com>

	* c-lex.c (errorcount): Declare it.
	(finish_parse): Update errorcount when using CPPLIB.

1999-07-06  Bruce Korb  <ddsinc09@ix.netcom.com>

	* fixinc/inclhack.def(end_else_label): Double the backslash so
	sed gets a chance to see it.
	* fixinc/inclhack.sh: regen
	* fixinc/fixincl.x: regen

Fri Jul  2 18:49:51 1999  Nick Clifton  <nickc@cygnus.com>

	Add framework to support armv5 architecture when it becomes
	available:

	* config/arm/arm.c (FL_ARCH5): New processor capability flag.
	(arm_arch5): New variable.
	(all_architectures): Add armv5 line.
	* config/arm/arm.h (CPP_CPU_ARCH_SPEC): Define __ARM_ARCH_5__ if
	-march=armv5 is specified on the command line.
	(arm_arch5): Export this variable.
	* invoke.texi: Document new string accepted by -march= switch for
	ARM ports.

	* config/arm/arm.h: Replace use of constant 12 as a register
	number with IP_REGNUM.  Similarly 14 and LR_REGNUM.
	* config/arm/arm.c: Replace use of constant 12 as a register
	number with IP_REGNUM.  Similarly 14 and LR_REGNUM.

	* config/arm/elf.h: Tidy up.
	* config/arm/coff.h: Tidy up.

Thu Jul  1 19:08:13 1999  Mark P. Mitchell  <mark@codesourcery.com>

	* gcc/configure.in (mips-sgi-irix6*): Handle --with-gnu-ld.
	* gcc/config/mips/t-iris6gld: New file.
	* gcc/config/mips/iris6gld.h: Likewise.

Fri Jul  2 13:23:39 1999  Gavin Romig-Koch  <gavin@cygnus.com>

	* c-decl.c (widest_integer_literal_type_node,
	widest_unsigned_literal_type) : New.
	(init_decl_processing): Handle/use the two new types.
	* c-common.c (type_for_size,type_for_mode) : Same.
	* c-lex.c (yylex) : Same.
	* c-typeck.c (unsigned_type,signed_type,signed_or_unsigned_type) :
	Same.
	* c-tree.h (widest_integer_literal_type_node,
	widest_unsigned_literal_type) : New.

Fri Jul  2 03:05:44 1999  Jeffrey A Law  (law@cygnus.com)

	* dwarfout.c (field_byte_offset): Correctly compute the object's
	byte offset for the first bit of a field which crosses an alignment
	boundary on a !BYTES_BIG_ENDIAN target.

Fri Jul  2 01:36:36 1999  Robert Lipe  <robertlipe@usa.net>

	* fixinc.svr4: Fix <arpa/inet.h> by deleting protos for htons and
	ntohs.

Fri Jul  2 00:46:47 1999  Richard Henderson  <rth@cygnus.com>
			  Jeff Law <law@cygnus.com>

	* ginclude/varargs.h (va_dcl): Use word_mode for type of
	__builtin_va_list.

	* except.c: Include intl.h.
	(expand_eh_return): Set current_function_cannot_inline.
	(save_eh_status, restore_eh_status): Twiddle eh_return_stub_label.
	* function.h (struct function): Add eh_return_stub_label.
	* flow.c (delete_unreachable_blocks): Don't merge across EH edges.
	* Makefile.in (except.o): Depend on intl.h.

Fri Jul  2 00:04:23 1999  David Edelsohn  <edelsohn@gnu.org>

	* rs6000.md (movdf_hardfloat32): Handle PRE_INC and PRE_DEC the
	same as offsettable in cases 1 and 2.

Thu Jul  1 20:54:10 1999  Richard Henderson  <rth@cygnus.com>

	* alpha.md (extqh): Define as 64-((R&7)*8) instead of 56-(((R-1)&7)*8).
	(extlh, extwh): Likewise.

Thu Jul  1 11:05:25 1999  Gavin Romig-Koch  <gavin@cygnus.com>

	* c-lex.c (yylex): Improve 'integer constant out of range' messages.

Wed Jun 30 16:51:41 1999  Nick Clifton  <nickc@cygnus.com>

	* configure.in: Add arm-pe and thumb-pe targets.
	* configure: Regenerate.

	* thumb.c (arm_naked_function_p): New function: Determines if
	a function is naked (has no gcc generated prologue/epilogue).
	(is_called_in_ARM_mode): Return true if the func has the
	interfacearm attribute.
	(output_return): Do not generate a return for naked functions.
	(thumb_function_prologue): Do not generate a prologue for
	naked functions.
	(thumb_expand_prologue): Do not generate a prologue for naked
	functions.
	(thumb_expand_epilogue): Do not generate an epilogue for naked
	functions.
	(arm_valid_machine_decl_attribute): New function, copied from
	arm.c:  Permit naked and interfacearm attributes.

	* config/arm/pe.c: New file: Support code for arm-pe target.
	* config/arm/pe.h: New file: Header file for arm-pe target.
	* config/arm/tpe.h: New file: Header file for thumb-pe target.
	* config/arm/t-thumb-pe: New file: Makefile fragment for
	thumb-pe target.

1999-07-01  Mark Kettenis  <kettenis@gnu.org>

	* config/i386/gnu.h (CPP_SPEC): Define __PIC__ and __pic__ if
	-fPIC or -fpic is specified.

Wed Jun 30 03:31:54 1999  Jeffrey A Law  (law@cygnus.com)

	* expr.c (emit_block_move): Use copy_to_mode_reg for
	!TARGET_MEM_FUNCTIONS case too.

	* configure.in (hppa*-*-*): Add som.h or elf.h to tm_file as
	appropriate.
	* configure: Rebuilt.
	(hppa1.1-*-pro*, hppa1.1-*-rtems*): Define target_cpu_default.
	* pa.h: Include dbxelf.h.  Delete various dbx/stabs related
	definitions made redundant by dbxelf.h inclusion.  Delete
	lots of definitions related to assembly output that are
	specific to the SOM object format.
	* pa.c (output_function_prologue): Do not emit the function's
	name for OBJ_ELF.
	* pa-pro-end.h (STARTFILE_SPEC): Undefine before redefining.
	* pa-pro.h: Deleted.
	* som.h: New file with SOM specific definitions.
	* elf.h: New file with ELF specific definitions.

	* elfos.h (const_section): Output a tab before assembler directives.
	(ctors_section, dtors_section): Likewise.
	(ASM_OUTPUT_SECTION_NAME): Likewise.

	* pa/pa1.h: Delete unused file.

Tue Jun 29 01:37:53 1999  Jeffrey A Law  (law@cygnus.com)

	* configure.in (hppa*-hp-hpux11*): New configuration.
	* configure: Rebuilt.
	* pa/pa-hpux11.h: New file.
	* pa.h (CPP_SPEC): Conditionally add -D__STDC_EXT__ to the cpp
	command line.

	* mips.md (leasi, leadi): New patterns.

	* expr.c (emit_block_move): Properly handle case where one of the
	block move arguments has a queued increment or decrement.
	(clear_storage): Similarly.  Fix formatting goof.

1999-06-28  "David O'Brien"  <obrien@NUXI.com>

	* fixinc/inclhack.def(stdio_va_list): This patch Removes a
	semicolon from the BSD VA_LIST replacement expression.

	* fixinc/inclhack.sh: regen
	* fixinc/fixincl.x: regen

	* fixinc/mkfixinc.sh: Have `i[34567]86-*-freebsd*' machines
	now use the fixincl program.

Mon Jun 28 05:28:12 1999  Jeffrey A Law  (law@cygnus.com)

	* m68k.h (CONDITIONAL_REGISTER_USAGE): Define for !SUN_FPA
	case.  Also make the PIC register call_used.

	* m68k.h (FINALIZE_PIC): Delete.
	* m68k.c (finalize_pic): Delete.

Mon Jun 28 05:16:35 1999  Richard Henderson  <rth@cygnus.com>

	* m68k.h (PREFERRED_RELOAD_CLASS): Don't force any FP const_doubles
	to memory.

Mon Jun 28 04:07:27 1999  David Edelsohn  <edelsohn@gnu.org>

	* expmed.c (expand_divmod): Ensure unsigned value fits in reg_note.

Sun Jun 27 02:39:08 1999  Richard Henderson  <rth@cygnus.com>

	* jump.c (jump_optimize_1): Validate the cmov copy to a temporary.

Sat Jun 26 17:18:18 1999  David Edelsohn  <edelsohn@gnu.org>

	* rs6000.c (print_operand, case 'L'): Use plus_constant_for_output.

Fri Jun 25 11:33:24 1999  Richard Henderson  <rth@cygnus.com>

	* alpha.c (override_options): Add -mcpu=ev45 as an alias for ev4.

Fri Jun 25 13:41:25 1999  David Edelsohn  <edelsohn@gnu.org>

	* rs6000.c (output_toc): Always use hex values for floating-point
	constants.  Store single-precision values in upper-half of TOC
	entry in 64-bit mode.
	* rs6000.md (floatsidf2, floatunssidf2): Add !TARGET_POWERPC64
	to final constraints.
	(fix_truncdfsi2 splitter): Change pattern matching fctiwz.
	(fctiwz): Improve accuracy of RTL for pattern.

Fri Jun 25 11:26:38 1999  Gavin Romig-Koch  <gavin@cygnus.com>

	* expr.c (expand_expr): Allow RTL_EXPR's through the
	MAX_INTEGER_COMPUTATION_MODE checks.

Fri Jun 25 06:06:37 1999  Richard Henderson  <rth@cygnus.com>

	* alpha.h (MASK_SUPPORT_ARCH, MASK_CPU_EV5, MASK_CPU_EV6): Define
	such that MASK_SUPPORT_ARCH is not negative.

Fri Jun 25 05:35:44 1999  Jeffrey A Law  (law@cygnus.com)

	* loop.c (verify_dominator): Properly handle ADDR_VEC and
	ADDR_DIFF_VEC insns that appear inside loops.

Thu Jun 24 22:54:05 1999  David Edelsohn  <edelsohn@gnu.org>
			  Jeff Law <law@cygnus.com>

	* rs6000.md (movdf_hardfloat32): Revert previous patch.
	Handle LO_SUM the same as offsettable in cases 1 and 2.
	* rs6000.c (find_addr_reg): Revert previous patch.

Thu Jun 24 22:43:12 1999  Philippe De Muyter  <phdm@macqel.be>

	* system.h (strstr): New external function declaration.
	* acconfig.h (NEED_DECLARATION_STRSTR): New define slot.
	* configure.in (GCC_NEED_DECLARATIONS): Check for strstr.
	* config.in, configure: Rebuilt.

1999-06-24  Tom Tromey  <tromey@cygnus.com>

	* gcc.c (main): Read user-specified specs files after computing
	additional startfile_prefixes.

Thu Jun 24 15:00:47 1999  Mark Mitchell  <mark@codesourcery.com>

	Revert these two patches:

	Thu Jun 17 21:34:24 1999  J"orn Rennecke <amylaar@cygnus.co.uk>
	* loop.c (strength_reduce): When doing biv->giv conversion, update
	reg note of NEXT->insn.

	Thu Jun 17 17:22:07 1999  J"orn Rennecke <amylaar@cygnus.co.uk>
	* loop.c (strength_reduce): When doing biv->giv conversion, fix up
	reg_biv_class.
	(recombine_givs): Set ix field after sorting.

Wed Jun 23 21:26:00 1999  J"orn Rennecke <amylaar@cygnus.co.uk>

	* rtlanal.c (reg_referenced_p): Use reg_overlap_mentioned_p
	for the parts of an UNSPEC / UNSPEC_VOLATILE.

1999-06-23  Bruce Korb  <ddsinc09@ix.netcom.com>

	*fixinc/inclhack.def:  Add fix development commentary
	(read_ret_type): reactivate and add selection clause
	(zzz_*): tweak output file name to match what is used in hackshell.tpl
	*fixinc/{fixincl.x|inclhack.sh}: regen

Wed Jun 23 00:48:21 1999  Jason Merrill  <jason@yorick.cygnus.com>

	* expr.c (expand_expr): STRIP_NOPS before checking against
	MAX_INTEGER_COMPUTATION_MODE
	(check_max_integer_computation_mode): Likewise.

Tue Jun 22 20:23:43 1999  Jim Wilson  <wilson@cygnus.com>

	* md.texi (smul@var{m}3_highpart): Add missing 's' prefix.

1999-06-22  Jim Wilson  <wilson@cygnus.com>

	* expr.c (store_expr): When target is a promoted subreg, return a
	promoted subreg as a result.

Tue Jun 22 17:14:58 1999  Michael Meissner  <meissner@cygnus.com>

	* dwarf2out.c (dwarf2out_frame_debug_expr): Reformat to match GNU
	coding standards.
	(dwarf2out_define): Mark unused parameters appropriately.
	(gen_unspecified_parameters_die): Ditto.
	(gen_subprogram_die): Fix signed/unsigned warnings.
	(gen_variable_die): Ditto.

1999-06-22  Bruce Korb <ddsinc09@ix.netcom.com>

	* fixinc/inclhack.def(end_else_label): combined else_label
	and endif_label and fixed the sed expression.
	*fixinc/{fixincl.x|inclhack.sh}: regen

Tue Jun 22 01:58:18 1999  Jeffrey A Law  (law@cygnus.com)

	* rs6000.md (movdf_hardfloat32): Use %X instead of always emitting
	'x' when handling non-offsettable addresses

Tue Jun 22 00:20:05 1999  Richard Earnshaw (rearnsha@arm.com)

	* final.c (shorten_branches): Don't try to split an insn that has
	been deleted.

Mon Jun 21 12:47:39 1999  Mark Mitchell  <mark@codesourcery.com>

	* config/mips/mips.c (symbolic_expression_p): New function.
	(mips_select_rtx_section): Put symbolic expressions in the
	data section, not the read-only data section.

Mon Jun 21 22:13:06 1999  Jeffrey A Law  (law@cygnus.com)

	* rs6000.md (find_addr_reg): Handle LO_SUM addresses.

Mon Jun 21 20:10:42 1999  Richard Henderson  <rth@cygnus.com>

	* collect2.c (main): Log frame table count.
	(GCC_OK_SYMBOL) [ECOFF]: Accept stGlobal.
	(scan_prog_file) [COFF]: Handle frame tables.

	* alpha/alpha.h (UNALIGNED_SHORT_ASM_OP): Define.
	(UNALIGNED_INT_ASM_OP, UNALIGNED_DOUBLE_INT_ASM_OP): Define.
	* alpha/elf.h: Undef them again.
	* alpha/vms.h: Remove their definitions.

Tue Jun 22 03:17:53 1999  J"orn Rennecke <amylaar@cygnus.co.uk>

	* sh.c (machine_dependent_reorg): When fixing up fp pcloads,
	remove the clobber of r0 and change the REG_UNUSED note to
	REG_INC.

1999-06-21  Jakub Jelinek  <jj@ultra.linux.cz>

	* real.c (ereal_from_double): Fix for 64-bit big endian hosts.
	* emit-rtl.c (gen_lowpart_common): Add case for hosts where double
	fits in HOST_WIDE_INT and one uses union to access a long constant
	as double.

Mon Jun 21 17:18:25 1999  Richard Henderson  <rth@cygnus.com>

	* sparc.c (sparc_override_options): Don't allow profiling for
	code models other than medlow.
	(sparc_function_profiler): New function from old FUNCTION_PROFILER
	macro.  Use ASM_GENERATE_INTERNAL_LABEL and MCOUNT_FUNCTION.
	(sparc_function_block_profiler): Likewise.  Use user_label_prefix.
	(sparc_block_profiler): Likewise.
	(sparc_function_block_profiler_exit): Likewise.
	* sparc.h (FUNCTION_PROFILER): Call new sparc.c function.
	(FUNCTION_BLOCK_PROFILER): Likewise.
	(BLOCK_PROFILER): Likewise.
	(FUNCTION_BLOCK_PROFILER_EXIT): Likewise.
	(MCOUNT_FUNCTION): New.
	* sparc/pbd.h (FUNCTION_PROFILER): Delete.
	(FUNCTION_BLOCK_PROFILER, BLOCK_PROFILER): Delete.
	* sparc/sun4o3.h (FUNCTION_PROFILER): Delete.
	(MCOUNT_FUNCTION): New.
	* sparc/sysv4.h (FUNCTION_BLOCK_PROFILER): Delete.
	(BLOCK_PROFILER): Delete.
	(MCOUNT_FUNCTION): New.

Mon Jun 21 14:11:29 1999  David Edelsohn  <edelsohn@gnu.org>

	* rs6000.md (movdf_hardfloat32): Fix typo in case 2.

Mon Jun 21 12:27:17 1999  Vladimir Makarov  <vmakarov@tofu.to.cygnus.com>

	* config/mips/elf.h (BSS_SECTION_ASM_OP, ASM_OUTPUT_ALIGNED_BSS):
	Add the macros.

	* config/m68k/m68kelf.h (BSS_SECTION_ASM_OP, ASM_OUTPUT_ALIGNED_BSS):
	Ditto.

	* config/sh/sh.h (BSS_SECTION_ASM_OP, ASM_OUTPUT_ALIGNED_BSS):
	Ditto.

	* config/arm/telf.h (BSS_SECTION_ASM_OP, ASM_OUTPUT_ALIGNED_BSS):
	Ditto.

Mon Jun 21 14:58:42 1999  Nick Clifton  <nickc@cygnus.com>

	* config/arm/arm.h: Add cpp support for ARM920 and ARM920T cpu
	types.

Mon Jun 21 06:22:21 1999  Mark Elbrecht <snowball3@bigfoot.com>

	* i386/djgpp.h (LIB_SPEC): New.
	(STARTFILE_SPEC): New.

	* i386/xm-djgpp.h (NO_SYS_SIGLIST): Deleted. Now obsolete.

Mon Jun 21 06:19:33 1999  Philippe De Muyter  <phdm@macqel.be>

	* fixinc/Makefile.in (gnu-regex.o): Do not define STDC_HEADERS in
	compiler flags.

	* system.h (WSTOPSIG): New macro.

Mon Jun 21 05:33:15 1999  Mumit Khan  <khan@xraylith.wisc.edu>

	* c-pragma.c (push_alignment): Don't ignore alignments greater than
	4 bytes.
	(insert_pack_attributes): Take into account member natural
	alignment.

	* i386/winnt.c (exports_head): New static variable.
	(i386_pe_record_exported_symbol): New function.
	(i386_pe_asm_file_end): Use.
	* i386/cygwin.h (ASM_OUTPUT_COMMON): Record the exported
	symbols to be emitted at end of assembly.
	(ASM_DECLARE_OBJECT_NAME): Likewise.
	(ASM_DECLARE_FUNCTION_NAME): Likewise.

	* i386/uwin.h (CPP_SPEC): Use -idirafter instead -iprefix and
	-iwithprefix.

Mon Jun 21 04:44:31 1999  Jeffrey A Law  (law@cygnus.com)

	* sparc.h (LEGITIMIZE_RELOAD_ADDRESS): Fix paren error introduced
	in last change.

Sun Jun 20 17:27:20 1999  Richard Henderson  <rth@cygnus.com>

	* haifa-sched.c (sched_analyze_1): Use free_list instead of
	zapping reg_last_uses directly.
	(sched_analyze_2, sched_analyze_insn): Likewise.
	(sched_analyze): Likewise.  Don't clear reg_last_uses on calls.

Sun Jun 20 16:57:29 1999  David Edelsohn  <edelsohn@gnu.org>

	* rs6000.md (movdf_hardfloat32): Use worst case insn length
	attributes for cases 1 and 2.

Sat Jun 19 22:52:55 1999  Richard Henderson  <rth@cygnus.com>

	* haifa-sched.c (sched_analyze): Mark call-user regs as clobbered
	instead of set.

Sat Jun 19 05:40:07 1999  Philip Blundell <pb@nexus.co.uk>

	* arm.c (arm_reload_in_hi): Invert sense of test on BYTES_BIG_ENDIAN.

Sat Jun 19 05:25:05 1999  Richard Earnshaw (rearnsha@arm.com)

	* arm.h (CONDITIONAL_REGISTER_USAGE): If flag_pic, never use
	PIC_OFFSET_TABLE_REGNUM for general alloaction.
	(INITIAL_ELIMINATION_OFFSET): Count the fact that the PIC register
	must be stacked if it is used for PIC accesses.
	* arm.c (use_return_insn): Handle PIC register specially.
	(output_return_instruction): Likewise.
	(output_func_{prologue,epilogue}): Likewise.
	(output_expand_prologue): Likewise.

	* arm.md (*adddf_esfdf_df): Renamed from *adddf_df_esfdf.
	(*strsi_predec): Renamed from *strqi_predec.
	(*loadsi_shiftpreinc): Renamed from *loadqi_shiftpreinc.
	(*loadsi_shiftpredec): Renamed from *loadqi_shiftpredec.

	* arm.c (arm_override_options): Remove warning about PIC code
	not being supported.

Fri Jun 18 23:47:06 1999  David Edelsohn  <edelsohn@gnu.org>

	* rs6000.c (find_addr_reg): New function.
	* rs6000.h (find_addr_reg): Declare.
	(offsettable_addr_operand): Delete.
	* rs6000.md (movdf_hardfloat32): Handle non-offsettable loads
	from and stores to GPRs.

Fri Jun 18 15:44:18 1999  Richard Henderson  <rth@cygnus.com>

	* alpha.c (alpha_expand_block_move): Use get_insns rather than
	gen_sequence as argument to emit_no_conflict_block.

Fri Jun 18 07:02 1999  Bruce Korb <ddsinc09@ix.netcom.com>

	* fixinc/mkfixinc.sh: enable the fixincl program for DG/UX
	* fixinc/inclhack.def(dgux_int_varargs): script must end with \n
	*fixinc/fixincl.x: regen
	*fixinc/inclhack.sh: regen

Thu Jun 17 15:06:10 PDT 1999 Don Lindsay  <dlindsay@cygnus.com>

	* added support for -mpcrel (PC relative addressing for m68k)
	based on code done by Michael Tiemann  <tiemann@axon.cygnus.com>.
	* invoke.texi (m68000 options): Add documentation for -mpcrel flag.
	* m68k.c (print_operand_address): Handle 32-bit PIC case.
	(comments for general_src_operand): Add some explanation
	about EXTRA_CONSTRAINTS.
	(OVERRIDE_OPTIONS): Enable -fPIC in combination with -mpcrel.
	* m68kelf.h (OVERRIDE_OPTIONS): Ditto.
	(LEGITIMATE_PIC_OPERAND_P): Fix typo.
	(LEGITIMATE_PIC_OPERAND_P): Re-derive from m68k.h case.
	* m68k.h (LEGITIMATE_PIC_OPERAND_P): Fix delete-o.
	(INDIRECTABLE_1_ADDRESS): Delete spurious '/' at end of macro.
	(OVERRIDE_OPTIONS): Change behavior so that -mpcrel implies -fpic
	if not already set.
	(OVERRIDE_OPTIONS): Merge in changes from m68k.h.
	* m68k.h (TARGET_PCREL): New target flag.
	(TARGET_SWITCHES): Add "pcrel" as a recognized switch.
	(OVERRIDE_OPTIONS): Add checks for -mpcrel.
	(LEGITIMATE_PIC_OPERAND_P): Don't normally accept anything that
	contains a SYMBOL_REF.  Relax this constraint during reload, since
	we want to use the predicates, not reload's built-in concept of a
	valid memory address, to control what insns need reloading.
	(EXTRA_CONSTRAINT): Define constraints to accept pc-relative
	operands (essentially 'g', 'm', and 's' under normal circumstances).
	* m68k.c (print_operand): Cause printing of pc-relative addresses
	to include pc register.
	(print_operand_address): Ditto.
	(general_src_operand): Accept operands that are not only
	general_operands, but are also valid when used as a pc-relative
	source.
	(nonimmediate_src_operand): Similar, for nonimmediate_operands.
	(memory_src_operand): Similar, for memory_operands.
	(pcrel_address): New predicate to accept the special case of a
	pc-relative address.
	* m68k.md (many patterns): Rewrite common SImode, HImode, and
	QImode insns to accept *_src_operand instead of *_operand where
	pc-relative operands can fit.  For example, a pc-relative operand
	can be used as a memory source operand for addsi3, but not as a
	memory destination.
	* hp320.h linux.h m68kv4.h (LEGITIMATE_PIC_OPERAND_P) as in m68k.h.

Fri Jun 18 09:11:07 1999  Nick Clifton  <nickc@cygnus.com>

	* config/arm/telf.h (ASM_OUTPUT_DEF_FROM_DECLS): New Marco: USe
	.thumb_set pseudo op to mark aliases of thumb functions.

Wed Jun 16 18:19:13 1999  Nick Clifton  <nickc@cygnus.com>

	* varasm.c (assemble_alias): Use ASM_OUTPUT_DEF_FROM_DECLS in
	preference to ASM_OUTPUT_DEF, if it is defined.

	* tm.texi: Document new, optional target macro
	ASM_OUTPUT_DEF_FROM_DECLS.

Thu Jun 17 15:07 1999  Bruce Korb <ddsinc09@ix.netcom.com>

	* fixincludes: ISCNTL patch
	* fixinc/inclhack.def (ioctl_fix_ctrl): Fix the definition of [_]*ISCTRL().
	(dgux_int_varargs): new for DG/UX
	* fixinc/{fixincl.x,inclhack.sh}: Regenerated.

Thu Jun 17 21:34:24 1999  Jeff Law <law@cygnus.com>

	* invoke.texi (ia32 options): Fix typo.

Thu Jun 17 21:34:24 1999  J"orn Rennecke <amylaar@cygnus.co.uk>

	* loop.c (strength_reduce): When doing biv->giv conversion, update
	reg note of NEXT->insn.

Thu Jun 17 14:25:08 1999  Jeffrey A Law  (law@cygnus.com)

	* loop.c (move_movables): Note issues with replacing REGs with
	SUBREGs.
	* mips.h (GO_IF_LEGITIMATE_ADDRESS): Handle SUBREGs properly.

Thu Jun 17 13:28:30 1999  David O'Brien <obrien@FreeBSD.org>

	* i386/freebsd-elf.h (LINK_SPEC): Fix typo.

	* i386/freebsd-elf.h (FUNCTION_PROFILER): labels are not needed and
	the reference to `mcount' was not correct for the ELF on FreeBSD.

Thu Jun 17 17:22:07 1999  J"orn Rennecke <amylaar@cygnus.co.uk>

	* loop.c (strength_reduce): When doing biv->giv conversion, fix up
	reg_biv_class.

	(recombine_givs): Set ix field after sorting.

Thu Jun 17 02:54:30 1999  Jeffrey A Law  (law@cygnus.com)

	* emit-rtl.c (operand_subword): Tighten checks for when it is safe
	to safe to extract a subword out of a REG.

Thu Jun 17 01:45:24 1999  J"orn Rennecke <amylaar@cygnus.co.uk>

	* sh.md (mulsi3): Don't add a no-op move at the end.

Wed Jun 16 20:29:00 1999  J"orn Rennecke <amylaar@cygnus.co.uk>

	* cse.c (cse_insn): Don't put hard register source into tables for
	the last insn of a libcall.

Wed Jun 16 19:44:33 1999  J"orn Rennecke <amylaar@cygnus.co.uk>

	* loop.c (strength_reduce): Insert sets of derived givs at every
	biv increment, even if it's the only one.

Wed Jun 16 10:33:02 1999  Jason Merrill  <jason@yorick.cygnus.com>

	* dwarfout.c (add_incomplete_type): New fn.
	(output_type): Call it.
	(retry_incomplete_types): New fn.
	(dwarfout_finish): Call it.

	From Eric Raskin <ehr@listworks.com>:
	(output_type): Output types for bases.

Tue Jun 15 12:51:23 1999  Alexandre Oliva  <oliva@dcc.unicamp.br>

	* mips.c (mips_output_conditional_branch): Add `break'
	between `default' label and `close braces'.

Tue Jun 15 01:55:20 1999  David O'Brien <obrien@FreeBSD.org>

	* i386/freebsd-elf.h (LINK_SPEC): clean up the linking library
	specifications and make it realistic.
	(LIB_SPEC): Likewise.

Mon Jun 14 15:38:43 1999  Jim Wilson  <wilson@cygnus.com>

	* config/mips/mips.c (mips_secondary_reload_class): Check for
	(PLUS (SP) (REG)) and return appropriate register class.
	* config/mips/mips.md (reload_insi): Delete predicate for operand 1.
	Handle (PLUS (SP) (REG)).
	(tablejump): In mips16 code, use emit_insn instead of emit_jump_insn.
	(tablejump_mips161, tablejump_mips162): Use emit_jump_insn instead
	of emit_insn for tablejump.

Mon Jun 14 17:26:40 1999  David Edelsohn  <edelsohn@gnu.org>

	* rs6000.c (output_prolog): RS6000_CALL_GLUE must be
	asm_fprintf format string by itself.
	(output_function_profiler): Likewise.

Mon Jun 14 12:57:38 1999  David Mosberger  <davidm@hpl.hp.com>

	* combine.c (simplify_logical, case AND): Only call
	simplify_and_const_int if the mode is no wider than HOST_WIDE_INT
	or the constant is positive.

Mon Jun 14 11:43:41 1999  Nick Clifton  <nickc@cygnus.com>

	* configure.in: Fix typo in rs6000-ibm-aix4 case.
	* configure: Regenerate.

Mon Jun 14 03:55:40 1999  Jeffrey A Law  (law@cygnus.com)

	* configure.in (rs6000-ibm-aix4.3*, powerpc-ibm-aix4.3*): Do not
	require a sub-version #.
	* configure: Rebuilt.

1999-06-14  Robert Lipe  (robertlipe@usa.net)

	* svr4.h (DWARF2_DEBUGGING_INFO): Check for redefinition.

Mon Jun 14 10:30:52 BST 1999  Nathan Sidwell  <nathan@acm.org>

	* c-typeck.c (process_init_element): Detect excess elements in
	char array initializer.

1999-06-14  Andreas Jaeger  <aj@arthur.rhein-neckar.de>

	* gcc.texi: Mention gcc 2.96 instead of egcs 1.00.

Sat Jun 12 22:29:48 EDT 1999  Jerry Quinn <jquinn@nortelnetworks.com>

	* invoke.texi (Option Summary): Add -fpermissive flag.

Sat Jun 12 03:40:42 1999  Jeffrey A Law  (law@cygnus.com)

	* sparc.h (LEGITIMIZE_RELOAD_ADDRESS): Do nothing with operands
	that require PIC code sequences.

Wed Jun  9 16:29:01 1999  Nick Clifton  <nickc@cygnus.com>

	* configure.in: Add new target: thumb-elf.
	* configure: Regenerate.
	* config/arm/t-thumb-elf: New file: Makefile fragment for
	thumb-elf build.
	* config/arm/telf.h: New file: Header file for thumb-elf
	build.

Fri Jun 11 03:17:51 1999  Jeffrey A Law  (law@cygnus.com)

	* Makefile.in (libgcc2): Pass MAYBE_USE_COLLECT2 as an argument.
	* libgcc2.c (__CTOR_LIST, __DTOR_LIST); Do not provide
	initializers is some circumstances.

	* fixinc/inclhack.def (endif_label): Add additional selector for
	more bogus stuff after #endif statements.
	* fixinc/inclhack.sh, fixinc/fixincl.x: Rebuilt.

Thu Jun 10 20:44:36 1999  Mumit Khan  <khan@xraylith.wisc.edu>

	* i386/cygwin.h (SET_ASM_OP): Define.

Thu Jun 10 20:37:57 1999  Mumit Khan  <khan@xraylith.wisc.edu>

	* reg-stack.c (stack_reg_life_analysis): Find all the RETURN insns.

Thu Jun 10 19:23:00 1999  J"orn Rennecke <amylaar@cygnus.co.uk>

	* sh.h (TARGET_HARWARD, TARGET_HARVARD): Changed the former to the
	latter.

	* sh.md (ic_invalidate_line_i): Remove second alternative.

Thu Jun 10 06:55 1999  Bruce Korb <ddsinc09@ix.netcom.com>

	*fixinc/inclhack.def(sun_auth_proto): We do not know how to
	test for the presence of valid prototypes.  Delete bypass expr.
	(ioctl_fix_ctrl): Correct the selection expression.
	(no_double_slash): Correct quoting rules
	*fixinc/fixincl.x: regen
	*fixinc/inclhack.sh: regen

Thu Jun 10 15:08:15 1999  Nick Clifton  <nickc@cygnus.com>

	* config/arm/arm.c (struct all_cores): Add ARM920 and ARM920t.

Wed Jun  9 15:57:57 1999  Franz Sirl  <Franz.Sirl-kernel@lauterbach.com>

	* rs6000.md (movsi_got_internal_mem): Delete.
	* rs6000.h (CONDITIONAL_REGISTER_USAGE): Mark PIC_OFFSET_TABLE_REGNUM.
	(GOT_TOC_REGNUM): Delete.
	(PIC_OFFSET_TABLE_REGNUM): Define.
	(FINALIZE_PIC): Disable.
	* rs6000.c (rs6000_got_register): New code for fixed pic register.
	(rs6000_replace_regno): Delete.
	(rs6000_finalize_pic): Likewise.
	(output_prolog): Handle PIC_OFFSET_TABLE_REGNUM.

Wed Jun  9 19:44:26 1999  J"orn Rennecke <amylaar@cygnus.co.uk>

	* loop.c (loop_insn_first_p): Don't compare LUIDs when P
	is a note; use <= for the compare; advance P while it is
	a NOTE.

Wed Jun  9 13:12:24 1999  Jeffrey A Law  (law@cygnus.com)

	* fixinc/inclhack.def (no_double_slash): Fix quoting for test.
	* fixinc/inclhack.sh, fixinc/fixincl.x, fixinc/fixincl.sh; Rebuilt.

	* varasm.c (remove_from_pending_weak_list): Verify t->name
	is non-NULL before passing it to strcmp.

Wed Jun  9 06:50 1999  Bruce Korb <ddsinc09@ix.netcom.com>

	*fixinc/inclhack.def(sun_auth_proto): bypass the patch if
	the typed arguments are not part of a comment
	(ioctl_fix_ctrl): Added a purpose comment
	*fixinc/fixincl.x: regenerate
	*fixinc/inclhack.sh: regenerate

Wed Jun  9 22:57:02 1999  Michael Hayes  <m.hayes@elec.canterbury.ac.nz>

	* invoke.texi: Add C4x invocation docs.

Wed Jun  9 22:34:38 1999  Michael Hayes  <m.hayes@elec.canterbury.ac.nz>

	* config/c4x/c4x.h (TARGET_EXPOSE_LDP, LEGITIMIZE_RELOAD_ADDRESS):
	Define new macros.
	* config/c4x/c4x.c (c4x_emit_move_sequence, src_operand): Use
	TARGET_EXPOSE_LDP.
	(c4x_legitimize_reload_address): New function.
	* config/c4x/c4x.md: Update docs.

Wed Jun  9 04:14:48 1999  Jeffrey A Law  (law@cygnus.com)

	* fixincludes: Avoid removing '.'.
	* fixinc/fixinc.svr4: Likewise.
	* fixinc/fixinc.winnt: Likewise.
	* fixinc/inclhack.tpl: Likewise.
	* fixinc/fixincl.sh, fixinc/inclhack.sh: Rebuilt.

1999-06-09  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* fixinc/inclhack.def (sun_catmacro): Escape parens in the select
	pattern.
	* fixinc/fixincl.x, fixinc/inclhack.sh: Rebuilt.

Wed Jun  9 03:10:34 1999  Mumit Khan  <khan@xraylith.wisc.edu>

	* c-pragma.c (handle_pragma_token): Handle `#pragma pack()'
	correctly.

Tue Jun  8 13:06:15 1999  Jim Wilson  <wilson@cygnus.com>

	* configure.in (rs6000-ibm-aix4.[12]*): Change rx6000 to rs6000.
	* configure: Regenerate.

Tue Jun  8 05:47:48 1999  Richard Earnshaw (rearnsha@arm.com)

	* optabs.c (expand_cmplxdiv_wide): Use expand_abs to get the absolute
	values.

Mon Jun  7 22:30:37 1999  Jeffrey A Law  (law@cygnus.com)

	* fixinc/inclhack.def (avoid_bool): Also catch
	"typedef [unsigned] int bool".
	* fixinc/inclhack.sh, fixinc/fixincl.x, fixinc/fixincl.sh: Rebuilt.

	* m68k/x-hp3bsd44: Delete obsolete and incorrect file.
	* configure.in (m68k-hp-bsd4.4): No longer use x-hp3bsd44.
	* configure: Rebuilt.

Mon Jun  7 22:05:03 1999  Mark Kettenis  <kettenis@gnu.org>

	* config/i386/gnu.h: Include <gnu.h> right after <i386/linux.h>,
	such that we can override its definitions if necessary.
	(CPP_SPEC): New define.  Support processor specific predefines via
	%(cpp_cpu).
	(CC1_SPEC): New define.  Support processor specific compiler
	options via %(cc1_cpu).
	(STARTFILE_SPEC): New define.  Use crt0.o instead of crt1.o for
	-static.

1999-06-07  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* fixinc/inclhack.def (math_gcc_ifndefs): Insert whitespace
	between sed's -e flag, and the open-quote following it.
	* fixinc/fixincl.x, fixinc/fixincl.sh: Rebuilt.

Mon Jun  7 20:34:20 1999  Robert Lipe <robertlipe@usa.net>
			  Jeffrey A Law  (law@cygnus.com)

	* varasm.c (assemble_start_function): Remove the function
	from the pending weak decls list when we define a function.
	(assemble_variable): Similarly for variables.
	(weak_finish): Ignore items on the list with a NULL name.
	(remove_from_ending_weak_list); New function to "remove" an item
	from the pending weak declarations list.

Mon Jun  7 19:27:07 1999  Jerry Quinn <jquinn@nortelnetworks.com>

	* pa.md (fmpyfadd, fmpynfadd, fnegabs): New patterns.

Mon Jun  7 14:07:39 1999  Dave Brolley  <brolley@cygnus.com>

	* c-lex.c (GETC): Redefine to call getch.
	(UNGETC): Redefine to call put_back.
	(putback_buffer): New structure type.
	(putback): New static structure.
	(getch): New function.
	(put_back): New function.
	(yylex): Replace unused bytes from bad multibyte character.

Mon Jun  7 13:33:39 1999  Dave Brolley  <brolley@cygnus.com>

	* cpplib.c (do_define): Cast `alloca' return value.
	(do_include, do_undef, do_pragma): Likewise.
	* cpphash.c (dump_definition): Cast `xstrdup' and `alloca' return
	values.
	* cppfiles.c (initialize_input_buffer): Cast `xmalloc' return values.
	* gcc/cppspec.c (lang_specific_driver): Cast xmalloc return value.

Sun Jun  6 11:58:34 1999  Jakub Jelinek  <jj@ultra.linux.cz>

	* sparc.md (abstf2): This should be an expand.
	(split after abstf2_notv9): Fix mode.
	(abstf2_hq_v9): New pattern.
	(abstf2_v9): Only use when no hard quad.
	(absdf2_v9): Fix if target is not the same as source.
	(ashrsi3_extend, ashrsi3_extend2, lshrsi3_extend, lshrsi3_extend2):
	Add correct output constraints.

Sat Jun  5 17:04:16 1999  Craig Burley  <craig@jcb-sc.com>

	From Dave Love to egcs-patches on 20 May 1999 17:38:38 +0100:
	* invoke.texi: Clarify text vis-a-vis Intel CPUs.

Sat Jun  5 12:11:24 1999  Mark Mitchell  <mark@codesourcery.com>

	* mips.h (mips_output_conditional_branch): New function.
	(mips_adjust_insn_length): Likewise.
	(ASSEMBLER_SCRATCH_REGNUM): New macro.
	(ADJUST_INSN_LENGTH): Likewise.
	* mips.c (print_operand): Add `F' and `W' for floating-point
	comparison opcodes.
	(machine_dependent_reorg): Adjust MIPS16 code; instruction-lengths
	are now in bytes.
	(mips_adjust_insn_length): New function.
	(mips_output_conditional_branch): New function.
	* mips.md (length): Adjust attribute definition to handle
	conditional branches.  Change lengths to bytes, rather than
	instructions throughout.  Remove length attribute from
	instructions whose length is four bytes, and rely on the default
	instead.
	(dslot): Fix typo in comment.
	Reword conditional branch patterns to use
	mips_output_conditional_branch.

Fri Jun  4 13:30:27 1999  Rainer Orth  <ro@TechFak.Uni-Bielefeld.DE>

	* alpha/osf.h (CPP_SUBTARGET_SPEC): Handle -threads.
	(LIB_SPEC): Likewise.
	Link with -lprof1_r for -g/-pg.

1999-06-04  Andreas Schwab  <schwab@issan.cs.uni-dortmund.de>

	* loop.c (check_dbra_loop): Fix change of Jan 19.

Fri Jun  4 00:12:40 1999  Marc Espie <espie@cvs.openbsd.org>

	* freebsd-elf.h (SWITCH_TAKES_ARG):  Redefine, not define.
	(STARTFILE_SPEC):  Define, override the svr4.h version.
	(ENDFILE_SPEC):  Likewise.

Thu Jun  3 23:58:55 1999  Jeffrey A Law  (law@cygnus.com)

	* fixinc/inclhack.def (limits_ifndefs): Also apply to sys/limits.h
	* fixinc/fixincl.x: Regenerated.
	* fixinc/inclhack.sh: Regenerated.

Fri Jun  4 05:42:23 1999  J"orn Rennecke <amylaar@cygnus.co.uk>

	* sh.c (barrier_align): Don't return early for normal branch/barrier
	when optimizing for SH2.

Thu Jun  3 22:27:50 1999  Robert Lipe  <robertlipe@usa.net>

	* i386/udk.h (LINK_SPEC): Correct linker search path for
	system libraries.

Fri Jun  4 03:20:40 1999  J"orn Rennecke <amylaar@cygnus.co.uk>

	* sh.c (fixup_addr_diff_vecs): Emit braf reference label.
	(braf_label_ref_operand): Delete.
	* sh.h (PREDICATE_CODES): Remove braf_label_ref_operand.
	* sh.md (casesi_jump_2): Operand1 is now the inside of a
	label_ref, and has no predicate.
	The pattern has a predicate to guard against invalid substitutions.
	(dummy_jump): Delete.
	(casesi): Update use of casesi_jump_2.

Thu Jun 3 07:48 1999  Bruce Korb <ddsinc09@ix.netcom.com>

	*fixinc/inclhack.def(Io_Def_Quotes): corrected sed expression
	*fixinc/fixincl.x: regenerate
	*fixinc/inclhack.sh: regenerate

Thu Jun  3 02:15:07 1999  Jason Merrill  <jason@yorick.cygnus.com>

	* dwarf2out.c (add_incomplete_type): New fn.
	(gen_struct_or_union_type_die): Call it.
	(retry_incomplete_types): New fn.
	(dwarf2out_finish): Call it.

Thu Jun  3 01:19:03 1999  Jeffrey A Law  (law@cygnus.com)

	* gcse.c (insert_insn_end_bb): Correct placement of insns when the
	current block starts with a CODE_LABEL and ends with a CALL and
	we can not find all the argument setup instructions for the CALL.

Wed Jun  2 15:44:15 1999  Mark Mitchell <mark@codesourcery.com>

	Revert this change:
	* fold-const.c (fold): STRIP_NOPS when deciding whether or not
	something is a candidate for optimize_bit_field_compare.

Wed Jun  2 21:53:05 1999  J"orn Rennecke <amylaar@cygnus.co.uk>

	* sh.h (CONST_OK_FOR_I, CONST_OK_FOR_L): Cast VALUE to HOST_WIDE_INT.

Wed Jun  2 12:25:55 1999  Richard Henderson  <rth@cygnus.com>

	* alpha.c (override_options): Thinko in last patch.

	* alpha/osf.h (CPP_SUBTARGET_SPEC): Define.
	(LIB_SPEC): Recognize -pthread.

Wed Jun  2 08:42:55 1999  Nick Clifton  <nickc@cygnus.com>

	* config/arm/tcoff.h (USER_LABEL_PREFIX): Synchronize with
	definition in config/arm/coff.h
	* config/arm/coff.h: Add comment about USER_LABEL_PREFIX.

Wed Jun  2 07:07 1999 Bruce Korb <ddsinc09@ix.netcom.com>

	* fixinc/fixincl.c(global def): Add FD_SHELL_SCRIPT to mark
	fixes that need "file=xxx\n" prepended before invocation
	(start_fixer - new): starting the fixer process is complex enough
	to warrent its own routine.  It prepends the "file=xxx\n" stuff.
	(process): uses the new routine; omit usage of putenv()
	* fixinc/fixincl.tpl: mark shell scripts with FD_SHELL_SCRIPT
	* fixinc/fixincl.x: regenerate

Wed Jun  2 02:29:07 1999  Jeffrey A Law  (law@cygnus.com)

	* README, configure.in, gcc.1, gcc.texi: Update name (egcs -> gcc)
	and version #s (1.1 -> 2.96) as needed.
	* README.g77: Kill way out of date file in the toplevel directory.

Wed Jun  2 00:52:34 1999  David O'Brien <obrien@FreeBSD.org>

	* configure.in (i[34567]86-*-freebsdelf): Don't include linux.h,
	i386/freebsd-elf.h no longer requires it.  Instead include svr4.h.
	* configure: Rebuilt.
	* i386/freebsd-elf.h (DEFAULT_VTABLE_THUNKS): Define.
	(ASM_COMMENT_START, ASM_APP_ON, ASM_APP_OFF, SET_ASM_OP): Likewise.
	(PREFERRED_DEBUGGING_TYPE, WCHAR_UNSIGNED): Likewise.
	(SWITCH_TAKES_ARG): Likewise.
	* i386/freebsd.h: Remove FREEBSD_NATIVE support.
	* config/t-freebsd: Moved from config/i386/ so it can used for all
	FreeBSD targets.

Mon May 31 02:22:55 1999  Philippe De Muyter  <phdm@macqel.be>

	* m68k/x-mot3300 (XCFLAGS): Fixed to match stb.o, not f/stb.o.

Wed Jun  2 00:08:34 1999  Robert Lipe  <robertlipe@usa.net>

	* configure.in (i[34567]86-*-udk*): Install headers with cpio.
	* configure: Rebuilt.

Tue Jun  1 19:06:22 1999  David Edelsohn  <edelsohn@gnu.org>

	* rs6000/aix41.h (RS6000_CALL_GLUE): Define.
	* rs6000/aix43.h (RS6000_CALL_GLUE): Likewise.
	* rs6000/rs6000.c (rs6000_file_start): Use putc.
	(rs6000_output_load_toc_table): Same.
	(output_prolog, output_mi_thunk): Same.
	* rs6000/rs6000.h (SELECT_SECTION): Formatting.
	(ASM_GLOBALIZE_LABEL): Use putc.

Mon May 31 15:23:23 1999  Richard Henderson  <rth@cygnus.com>

	* alpha.md (reload_*_help): New patterns and splitters.
	(reload_*): Use them.
	(mov[qh]i): Likewise.

Mon May 31 11:48:07 1999  Mark Mitchell  <mark@codesourcery.com>

	* cccp.c (handle_directive): Handle backslash-newlines in quoted
	strings correctly.

Mon May 31 09:36:11 1999  Cort Dougan  <cort@cs.nmt.edu>

	* rs6000/linux.h (LINK_SPEC): Use emulation elf32ppclinux.

Mon May 31 11:40:20 EDT 1999  John Wehle  (john@feith.com)

	* flow.c (mark_regs_live_at_end, insn_dead_p,
	mark_set_1, mark_used_regs): Only give FRAME_POINTER_REGNUM
	and HARD_FRAME_POINTER_REGNUM special treatment if reload
	hasn't run or the frame pointer is needed.
	* haifa-sched.c (attach_deaths): Likewise.
	* sched.c (attach_deaths): Likewise.

Mon May 31 00:46:17 1999  Jeffrey A Law  (law@cygnus.com)

	* jump.c (jump_optimize_1): Only set CAN_REACH_END if
	calculate_can_reach_end returns nonzero.

	* configure.in (native gas tests): Search for an assembler in the
	same manner that the installed compiler will.
	* configure: Rebuilt.
	* tm.texi (MD_EXEC_PREFIX): Note need to update configure.in too.

	* alias.c (find_base_term): Improve handling of addresses
	constructed from binary operations.

Sun May 30 14:29:17 1999  Eric Raskin (ehr@listworks.com)

	* dgux.h (STARTFILE_SPEC): Fix incorrectly matched curly-braces.

Sun May 30 14:19:13 1999  Jeffrey A Law  (law@cygnus.com)

	* function.h (cleanup_label, frame_offset): Declare.
	(tail_recursion_label, tail_recursion_reentry): Likewise.
	(arg_pointer_save_area, rtl_expr_chain): Likewise.
	* stmt.c (cleanup_label, frame_offset): Delete extern declarations.
	(tail_recursion_label, tail_recursion_reentry): Likewise.
	(arg_pointer_save_area, rtl_expr_chain): Likewise.

Sat May 29 19:08:10 1999  Philip Blundell  <philb@gnu.org>

	* config/arm/aout.h (ASM_OUTPUT_ALIGN): Only define if not already
	defined.
	* config/arm/elf.h (ASM_OUTPUT_ALIGN): Define.
	(MAX_OFILE_ALIGNMENT): Define.

Fri May 28 21:40 1999  Robert Lipe <robertlipe@usa.net>

	* fixincl.c: Replace local include scheme with #includes of
	gansidecl.h and system.h.
	* procopen.c:  Likewise.
	* server.c:  Likewise.

Fri May 28 03:47:03 1999  Eric Raskin (ehr@listworks.com)

	* i386/t-dgux (EXTRA_PARTS): Add crti.o
	(crti.o): Add build rule and dependencies.
	* fixinc/fixinc.dgux:  Use modified _int_varargs.h

Fri May 28 03:41:02 1999  Franz Sirl  <Franz.Sirl-kernel@lauterbach.com>

	* rs6000/sysv4.h (CC1_SPEC): Add support for -profile
	(LIB_LINUX_SPEC): Likewise.
	(LIB_LINUX_SPEC): Add support for -pthread
	(CPP_OS_LINUX_SPEC): Likewise.
	(CPP_SYSV_SPEC): Avoid redefinitions if both -fpic and -fPIC are
	specified.

Thu May 27 13:04:52 1999  H.J. Lu  (hjl@gnu.org)

	* i386.c (output_fp_cc0_set): Don't check the JUMP_INSN code for
	conditional move.
	(notice_update_cc, output_float_compare): Enable TARGET_CMOVE support.
	(output_float_compare, output_fp_cc0_set): Fix the FLOAT comparison
	for IEEE math and CC_FCOMI.
	(put_jump_code): No IEEE if CC_FCOMI is set.

1999-05-27  Andreas Schwab  <schwab@issan.cs.uni-dortmund.de>

	* fold-const.c (fold_truthop): Make the field reference unsigned
	when converting a single bit compare.

Thu May 27 02:40:48 1999  J"orn Rennecke <amylaar@cygnus.co.uk>

	* loop.c (strength_reduce): Don't do biv->giv conversion on constants.

Thu May 27 02:09:27 1999  Jeffrey A Law  (law@cygnus.com)

	* varasm.c (STRIP_NAME_ENCODING): Remove default definition.
	* output.h (STRIP_NAME_ENCODING): Strip '*' like the old varasm
	version did.

	* reload.c (push_reload): Do not call remove_address_replacements
	when presented with identical optional reloads.

Wed May 26 14:18:05 1999  Richard Henderson  <rth@cygnus.com>

	* alpha.h (MASK_FIX, TARGET_FIX): New.
	(MASK_*): Reorganize constants.
	(CPP_AM_FIX_SPEC): New.
	(TARGET_SWITCHES): Add FIX.
	(EXTRA_SPECS): Likewise.
	(CPP_CPU_EV6_SPEC): Use FIX, not CIX.
	(SECONDARY_MEMORY_NEEDED): Likewise.
	(REGISTER_MOVE_COST): Likewise.
	* alpha.c (override_options): Add FIX support.  Always use
	ALPHA_TP_PROG for ev6.
	* alpha.md (sqrt and mov[sd]i patterns): Use FIX, not CIX.
	* alpha/elf.h (ASM_FILE_START): Look at FIX too.
	* configure.in (target_cpu_default2) [ev6]: Use FIX, not CIX.

Wed May 26 09:53:05 1999  Mark Mitchell  <mark@codesourcery.com>

	* fold-const.c (fold): STRIP_NOPS when deciding whether or not
	something is a candidate for optimize_bit_field_compare.

Wed May 26 09:40:02 1999  Mark Mitchell  <mark@codesourcery.com>

	* gcc.texi (Passes): Document branch-shortening.
	* invoke.texi (Debugging Options): Document the fact that `-dp'
	outputs length information for instructions.

Wed May 26 08:49:31 1999  Nick Clifton  <nickc@cygnus.com>

	* flow.c: Revert previous delta.

Wed May 26 06:05:10 1999  Nick Clifton  <nickc@cygnus.com>

	* flow.c (insn_dead_p): Check against frame_pointer_rtx not
	FRAME_POINTER_REGNUM.
	(mark_set_1): Ditto.
	(mark_used_regs): Ditto.

Wed May 26 02:19:31 1999  Philip Blundell  <pb@nexus.co.uk>

	* arm.h (NEED_PLT_GOT): Fix mistake in last change.
	(GOT_PCREL): New macro.  Define to 1 if not already defined.
	* arm/elf.h (GOT_PCREL): Define to 0.
	* arm.c (arm_finalize_pic): Take into account the setting of
	GOT_PCREL.

Tue May 25 14:06:06 1999  Jeffrey A Law  (law@cygnus.com)

	* output.h (STRIP_NAME_ENCODING): Provide default definition.
	* dwarf2out.c (ASM_NAME_TO_STRING): Use STRIP_NAME_ENCODING.

	* flow.c (mark_set_1): Do not record BLKmode stores as dead
	store elimination candidates.

Tue May 25 08:55:57 1999  Gavin Romig-Koch  <gavin@cygnus.com>

	* config/mips/mips.h (ASM_OUTPUT_DOUBLE_INT) : Use 'dword' if
	TARGET_GAS.

Mon May 24 20:30:08 1999  Jim Wilson  <wilson@cygnus.com>

	* configure.in (rs6000-ibm-aix4.[12]*): Delete use of aix41-gld.h.
	Add use of x-aix41-gld.

Mon May 24 16:44:09 1999  Jakub Jelinek  <jj@ultra.linux.cz>

	* sparc/linux64.h (ASM_OUTPUT_CONSTRUCTOR): Define.
	(ASM_OUTPUT_DESTRUCTOR): Define.

Mon May 24 14:35:24 1999  Jeffrey A Law  (law@cygnus.com)

	* loop.c (strength_reduce): Do not clear NOT_EVERY_ITERATION at the
	last CODE_LABEL in a loop if we have previously passed a jump
	to the top of the loop.

Mon May 24 07:56:29 1999  Nick Clifton  <nickc@cygnus.com>

	* config/arm/arm.h (OUTPUT_INT_ADDR_CONST): Fix blunder made when
	applying Philip's patch.

Mon May 24 01:02:12 1999  Mark Mitchell  <mark@codesourcery.com>

	* stmt.c (expand_end_bindings): Ignore any elements of VARS that
	are not VAR_DECLs.

Sun May 23 20:31:16 1999  Jeffrey A Law  (law@cygnus.com)

	* loop.c (strength_reduce): Grow reg_single_usage as needed.

Sun May 23 10:13:20 1999  David O'Brien <obrien@FreeBSD.org>

	* i386/freebsd-elf.h (LINK_SPEC): Change -static to -Bstatic.
	Also remove a useless comment.

Sun May 23 10:05:23 1999  Jerry Quinn <jquinn@nortelnetworks.com>

	* pa.md (negdf2,negsf2):  Use fneg instead of fsub on pa 2.0.

Sat May 22 21:02:06 1999  David Edelsohn  <edelsohn@gnu.org>

	* collect2.c (main): Only generate import or export file and add
	to link arguments if non-empty.  Use xmalloc not alloca.
	(write_{export,import}_file): Delete.
	(write_aix_file): New function.
	(locatelib): Use xmalloc not malloc.
	(GCC_OK_SYMBOL): Do not check type if aix64.

Sat May 22 09:35:51 1999  Philip Blundell  <pb@nexus.co.uk>

	Based on patch by Scott Bambrough and Pat Beirne:
	* config/arm/arm.c (making_const_table): New variable.
	* config/arm/arm.h (making_const_table): Declare.
	(OUTPUT_INT_ADDR_CONST): Mark symbols as position independent if
	appropriate.
	* config/arm/arm.md (consttable_4, consttable_8, consttable_end):
	Keep track of when we are building the constant table.

Sat May 22 09:34:22 1999  Philip Blundell  <pb@nexus.co.uk>

	* config/arm/arm.c (arm_override_options): Fix erroneous warning
	message.

Sat May 22 09:06:33 1999  Nick Clifton  <nickc@cygnus.com>

	* config/arm/arm.h (NEED_PLT_GOT): Only define if not already
	defined.

Sat May 22 07:17:05 1999  Nick Clifton  <nickc@cygnus.com>

	* tm.texi (FUNCTION_ARG): Correct description of a stack element
	in a PARALLEL.

Sat May 22 01:27:49 1999  Mark Mitchell  <mark@codesourcery.com>

	* expr.h (lang_expand_constant): Guard with #ifdef TREE_CODE.

Fri May 21 21:19:02 1999  Franz Sirl  <Franz.Sirl-kernel@lauterbach.com>

	* rs6000.c (output_mi_thunk): Enable full support again.

Fri May 21 20:09:52 1999  J"orn Rennecke <amylaar@cygnus.co.uk>

	* sh.h (BRANCH_COST): Define.

Thu May 20 10:00:42 1999  Stephen L Moshier  <moshier@world.std.com>

	* Makefile.in (GCC_FOR_TARGET): Add -I$(build_tooldir)/include.

Thu May 20 09:58:57 1999  Jan Hubicka <hubicka@freesoft.cz>

	* function.c (assign_stack_local): Align stack slot properly.
	(assign_outer_stack_local): Likewise.

Thu May 20 10:38:43 1999  Mark Mitchell  <mark@codesourcery.com>

	* expr.h (lang_expand_constant): Declare.
	* toplev.c (lang_expand_constant): Define it.
	* varasm.c (output_constant): Use it.

Thu May 20 11:28:53 1999  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* optabs.c (expand_cmplxdiv_straight, expand_cmplxdiv_wide):
	Change function definitions to K&R style.

Thu May 20 08:16:39 1999  Bruce Korb <ddsinc09@ix.netcom.com>

	* fixinc/fixincl.c: We must not ignore SIGCLD now.

Thu May 20 07:06:39 1999  Alexandre Oliva  <aoliva@acm.org>

	* fixinc/Makefile.in(gnu-regex.o): add $(INCLUDES) to compile options
	* fixinc/fixincl.c(wait_for_pid): K&R-ify arguments
	(several places): omit static initialization
	(process): use single fd, since only the read fd is used
	* fixinc/gnu-regex.c: define 'const' away, if not supported
	* fixinc/procopen.c(several places): omit static initialization
	* fixinc/server.c: define 'volitile' away, if not supported

1999-05-20  Andreas Schwab  <schwab@issan.cs.uni-dortmund.de>

	* config/dbxcoff.h (DBX_OUTPUT_MAIN_SOURCE_FILE_END): Use
	asm_fprintf and %L to generate the label name.
	* config/dbxelf.h (DBX_OUTPUT_MAIN_SOURCE_FILE_END): Likewise.
	(ASM_OUTPUT_SOURCE_LINE): Correct generation of internal labels.

Thu May 20 01:40:55 1999  Jeffrey A Law  (law@cygnus.com)

	* jump.c (can_reverse_comparison_p): Do not abort if the comparison
	insn for a conditional jump can not be found.

Wed May 19 23:58:58 1999  Jeffrey A Law  (law@cygnus.com)

	* mips.h (ENCODE_SECTION_INFO): Do not perform GP optimizations
	on variables in specific sections other than .sbss and .sdata.

Wed May 19 03:56:56 1999  Mark Mitchell  <mark@codesourcery.com>

	* stmt.c (expand_return): Call start_cleanup_deferral and
	end_cleanup_deferral around conditional code.

Wed May 19 08:40:08 1999  Bruce Korb <ddsinc09@ix.netcom.com>

	* fixinc/fixincl.tpl: Avoid depending on ANSI C features for
	filename lists.  Utilizes new "krstr" AutoGen function.
	* fixinc/fixincl.x: Rebuilt.

Wed May 19 02:47:11 1999  Jan Hubicka  (hubicka@freesoft.cz)

	* i386.c (output_float_compare): Avoid GNU-C extensions.

Wed May 19 00:34:40 1999  Jeffrey A Law  (law@cygnus.com)

	* version.c: Bump to distinguish mainline tree from the
	gcc-2.95 branch.

Tue May 18 03:53:37 1999  Craig Burley  <craig@jcb-sc.com>

	Improve open-coding of complex divide:
	* flags.h: Declare new front-end-malleable flag.
	* toplev.c: Define new flag.
	* optabs.c (expand_cmplxdiv_straight): New function to do original
	open-coding.
	(expand_cmplxdiv_wide): New function to do new open-coding,
	from Toon Moene, with changes (call to emit_barrier, dropping
	of spurious `ok = 1;', plus the obvious `break;' -> `return 0;').
	(expand_binop): A bit of spacing fixing, while at it.
	Use new functions instead of inlining the open-coding code.

Tue May 18 00:51:46 1999  Krister Walfridsson <cato@df.lth.se>

	* configure.in (arm*-*-netbsd*): Use collect2.
	(i[34567]86-*-netbsd*): Likewise.
	(m68k*-*-netbsd*): Likewise.
	(ns32k-*-netbsd*): Likewise.
	(sparc-*-netbsd*): Likewise.
	(vax-*-netbsd*): Likewise.
	* configure: Rebuilt.

Tue May 18 00:21:34 1999  Zack Weinberg  <zack@rabi.phys.columbia.edu>

	* cppspec.c: Insert -no-gcc into command line unless -gcc was
	given by user.
	* gcc.c (default_compilers): Define __GNUC__ and
	__GNUC_MINOR__ only if -no-gcc was not given.
	* objc/lang-specs.h: Likewise.
	* cpp.texi: Document -x and -std options; explain that -lang
	is no longer supported.  Minor related corrections.

Mon May 17 23:56:39 1999  Alexandre Oliva  <oliva@dcc.unicamp.br>

	* Makefile.in (stmp-fixproto): Pass location of mkinstalldirs to
	fixproto.
	* fixproto: Avoid unportable constructs such as `basename' and
	`mkdir -p'.  Use mkinstalldirs from the environment if `mkdir -p'
	fails.

	* fixinc/fixincl.c: Remove #error, it is not portable.

Mon May 17 23:50:41 1999  Marc Espie <espie@cvs.openbsd.org>

	* collect2.c (main):  Fix typo in COLLECT2_HOST_INITIALIZATION.

Mon May 17 19:45:41 1999  Rainer Orth  <ro@TechFak.Uni-Bielefeld.DE>

	* fixinc/fixincl.c (process): Wait for children from chain_open()
	to avoid creating zombies.

	* fixinc/inclhack.tpl: Removed no-op pipe.

	* fixinc/inclhack.sh fixinc/fixincl.sh: regenerate

Mon May 17 07:23:34 1999  Mark Mitchell  <mark@codesourcery.com>

	* tree.def (TYPE_NONCOPIED_PARTS): Revise documentation to match
	reality.
	* expr.c (init_noncopied_parts): Don't generate initializers for
	parts that don't need them.

Mon May 17 02:56:35 PDT 1999 Jeff Law  (law@cygnus.com)

	* version.c: Bump for snapshot.

Sat Oct 31 05:08:34 CET 1998 Jan Hubicka  (hubicka@freesoft.cz)

	* reg-stack.c: Do not emit pop insns after cc0 setter.
	(emit_pop_insn): Do not emit insn in case WHEN is NULL.
	(compare_for_stack_reg): Update REG_DEAD note and 
	do not emit push insn.

	* i386.c: (output_float_compare): Handle new REG_DEAD notes.

Mon May 17 01:57:37 1999  David Daney <daney@ibw.com.ni>

	* i386/sol2.h (LINK_SPEC): Do not pass "-z text" to the linker
	if -mimpure-text.

1999-05-17  Andreas Schwab  <schwab@issan.cs.uni-dortmund.de>

	* m68k.c (standard_68881_constant_p): Don't accept -0.0 as valid
	68881 constant.

	* fold-const.c (fold_truthop): When converting a one-bit
	comparison don't sign extend the constant.

	* cse.c (cse_insn): Copy SRC_CONST before putting it in the
	REG_EQUAL note.

1999-05-17  Mike Stump  <mrs@wrs.com>

	* rs6000/vxppc.h (CPP_SPEC): Fix support for vararg functions.

Sat May 15 14:22:40 1999  Jeffrey A Law  (law@cygnus.com)

	* fixinc/hackshell.tpl: Fix mis-applied patch.
	* fixinc/inclhack.sh: Regenerated.

Thu May 13 21:05:55 1999  Mark Kettenis  <kettenis@gnu.org>

	* fixinc/mkfixinc.sh: Add the Hurd (*-*-gnu*) to the list of
	targets that do not need any fixes.

Sat May 15 14:12:38 1999  Michael Hayes  <m.hayes@elec.canterbury.ac.nz>

	* config/c4x/c4x.md (set_lo_sum+2): New splitter to load large
	const_ints.

Sat May 15 14:09:08 1999  Michael Hayes  <m.hayes@elec.canterbury.ac.nz>

	* config/c4x/c4x.md (decrement_and_branch_on_count): Disabled.
	(doloop_begin, doloop_end): New patterns.
	(*rptb_init): Added extra operands.

Fri May 14 21:31:36 1999  Michael Hayes  <m.hayes@elec.canterbury.ac.nz>

	* config/c4x/c4x.md (*umulqi3_highpart_clobber): Fix operand 2
	constraints order.

1999-05-14  Ulrich Drepper  <drepper@cygnus.com>

	* fixinc/fixinc.x86-linux-gnu (FD_ZERO): Fix operand numbers in
	asm input operands.

Thu May 13 15:34:18 1999  David Edelsohn  <edelsohn@gnu.org>

	* rs6000.c (mask_constant): Delete.
	(mask_operand): Move mask_constant() body to here.
	* rs6000.h (mask_constant): Delete declaration.
	* rs6000.md (nabsdi2): Reverse subtraction in splitter.

Thu May 13 02:25:01 1999  Jeffrey A Law  (law@cygnus.com)

	* cpp.texi: Fix some typos.

Thu May 13 01:49:55 1999  Graham Stott <GrahamS@RCP.co.uk>

	* loop.c (maybe_eliminate_biv): Check regno against
	max_reg_before_loop.

	* i386.c (memory_address_info): Correct the scale
	factor test.

Thu May 13 01:31:19 1999  Nick Burrett  <nick.burrett@btinternet.com>

	* arm.md (nop): Backout Apr 27 change. Ensure REGISTER_PREFIX is
	applied to each register.
	* aof.h (ASM_FILE_START): Define register `r0'.

1999-05-12 20:22 -0400  Zack Weinberg  <zack@rabi.columbia.edu>

	* configure.in: Make --enable-cpp and --with-cpp-install-dir
	documented options.  Enable the cpp driver by default.
	* configure: Rebuilt.

Wed May 12 18:08:48 1999  David Edelsohn     <edelsohn@gnu.org>
			  Richard Henderson  <rth@cygnus.com>

	* rs6000.c (print_operand) [w]: Calculate signed constant more clearly.
	(rs6000_allocate_stack_space): Print as hexadecimal value.
	* rs6000.h (CONST_OK_FOR_LETTER_P): 'L' checks for a signed,
	16-bit shifted constant.  Fix typo for 'P'.
	(EXTRA_CONSTARINT): 'T' checks for a 32-bit mask operand.
	* rs6000.md (movsi, addsi3_internal1, movdi, adddi3_internal1):
	Use 'L' for shifted constant.
	(anddi3_internal3): Fix typo.
	(32-bit mask patterns): Use 'T'.

Wed May 12 07:30:31 1999  Bruce Korb <ddsinc09@ix.netcom.com>

	* fixinc/fixincl.c(quoted_file_exists): new procedure to ensure that
	a file exists before trying to copy it into the destination
	(extract_quoted_files): use that routine.

Wed May 12 07:27:31 1999  Craig Burley  <craig@jcb-sc.com>

	Allow front end (like g77's) to override maintenance of errno:
	* expr.c (expand_builtin): Bother with errno only if
	flag_errno_math.
	* flags.h: Declare flag_errno_math.
	* toplev.c: Define flag_errno_math.

Tue May 11 23:55:49 1999  Jeffrey A Law  (law@cygnus.com)

	* fixproto: Change "mkdir" calls to "mkdir -p"

	* fixinc/inclhack.def (io_def_quotes): Consistently allow multiple
	whitespace characters between the "define" and the name of the macro.
	* fixinc/fixincl.x, fixinc/inclhack.sh: Rebuilt.

Tue May 11 20:46:37 1999  Richard Henderson  <rth@cygnus.com>

	* alpha.c (alpha_expand_block_move): Handle TImode registers
	used with ADDRESSOF.
	(alpha_expand_block_clear): Handle ADDRESSOF specially.

1999-05-11  Ulrich Drepper  <drepper@cygnus.com>

	* fixinc/fixinc.x86-linux-gnu (FD_ZERO): Remove unneccessary
	memory output operand which irritates gcc.

Tue May 11 11:45:16 1999  Dave Brolley  <brolley@cygnus.com>

	* toplev.c (documented_lang_options): Add -MD, -MMD, -M and -MM for
	cpplib-enabled compilers.

Tue May 11 11:34:56 1999  Vladimir Makarov  <vmakarov@tofu.to.cygnus.com>

	* config/sparc/sparc.h (GO_IF_LEGITIMATE_ADDRESS): Add parentheses
	around &&.

Mon May 10 13:51:24 1999  Nick Clifton  <nickc@cygnus.com>

	* tm.texi (FUNCTION_ARG): Stack element of PARALLEL must come
	first.

Tue May 11 01:32:01 1999  Jeffrey A Law  (law@cygnus.com)

	* fixinc/inclhack.def (sun_auth_proto): Apply to all targets.
	(sysz_stdlib_for_sun): Similarly.
	* fixinc/fixincl.x, fixinc/inclhack.sh: Rebuilt.

Mon May 10 20:34:10 1999  Jim Wilson  <wilson@cygnus.com>

	* config/mips/elf.h (UNIQUE_SECTION_P): Undef.
	* config/mips/elf64.h (UNIQUE_SECTION_P): Undef.
	* config/mips/mips.h (UNIQUE_SECTION_P): Define to 0.

1999-05-10 18:21 -0400  Zack Weinberg  <zack@rabi.columbia.edu>

	* cppfiles.c (initialize_input_buffer): New function.
	(finclude): Call it, if pfile->input_buffer is NULL.  Accept
	any character device as an input file.
	(read_and_prescan): Use pfile->input_buffer and
	pfile->input_speccase.
	* cppinit.c (cpp_cleanup): Free pfile->input_buffer and
	pfile->input_speccase.
	* cpplib.h (cpp_reader): Add input_buffer, input_speccase, and
	input_buffer_len members.  Use memcpy in CPP_PUTS_Q.

	* cppmain.c: Buffer output in the token_buffer; throttle
	number of calls to fwrite; check for errors from fwrite.

1999-05-10 18:21 -0400  Zack Weinberg  <zack@rabi.phys.columbia.edu>

	* cppspec.c: Treat two non-option arguments as input and
	output file.  Three or more non-option args is an error.
	Clean up.
	* gcc.c (default_compilers): Pass -$ to the preprocessor.
	* objc/lang-specs.h: Likewise.

Mon May 10 12:59:20 1999  Jeffrey A Law  (law@cygnus.com)

	* optabs.c (emit_cmp_and_jump_insns): Handle the case where both
	operands to the comparison are constants.

Mon May 10 07:28:10 1999  Bruce Korb <autogen@autogen.freeservers.com>

	* fixinc/inclhack.def(arm_norcroft_hint): check before fixing
	(no_double_slash): portability
	(math_exception): added reminder comment

Mon May 10 01:28:10 1999  Craig Burley  <craig@jcb-sc.com>

	From Fri May 7  9:31:41 1999 Donn Terry (donn@interix.com):
	* varasm.c (mark_constant_pool): Add some transitive closure.

Sun May  9 22:51:04 1999  Craig Burley  <craig@jcb-sc.com>

	Fix gcc.dg/990506-0.c:
	* c-typeck.c (require_complete_type): Handle ERROR_MARK input.

Sun May  9 13:19:12 1999  Jeffrey A Law  (law@cygnus.com)

	* gcse.c (cprop_insn): Do not try to simplify a simple jump.

Sun May  9 11:12:19 1999  Philip Blundell <bp@nexus.co.uk>

	* config/arm/arm.h (ASM_OUTPUT_MI_THUNK): Add (PLT) to branch if
	necessary.  Reported by jim@federated.com.

Sat May  8 23:05:35 1999  Jeffrey A Law  (law@cygnus.com)

	* pa.h (PRINT_OPERAND_ADDRESS): Output "%r0", not "r0" for the
	base register in an absolute memory address.
	* pa.md (conditional moves): Avoid using immediate zero for
	register zero.

Sat May  8 06:23:21 1999  Philip Blundell  <pb@nexus.co.uk>

	Based on patch by Scott Bambrough:
	* config/arm/arm.h (NEED_PLT_GOT): New macro.  Set to 0 if not
	already defined.
	* config/arm/elf.h (NEED_PLT_GOT): Define to flag_pic.
	* config/arm/arm.md (call_symbol, call_value_symbol et al.): If
	NEED_PLT_GOT is true, add explicit "(PLT)" to generated branches.
	* config/arm/arm.c (output_func_epilogue,
	output_return_instruction): Likewise for calls to abort.

Sat May  8 01:57:58 1999  Donn Terry (donn@interix.com)

	* calls.c (rtx_for_function_call): Extend function pointer being
	passed to chkr_check_exec_libfunc, if needed.

Sat May  8 01:51:50 1999  David Edelsohn  <edelsohn@gnu.org>

	* ginclude/stdarg.h (__va_rounded_size): Use long type for
	rounding on AIX.
	* ginclude/varargs.h: Likewise.

Sat May  8 01:47:20 1999  Andreas Schwab  <schwab@issan.cs.uni-dortmund.de>

	* invoke.texi: Remove duplicates in the description of -d
	letters.  Fix use of @item vs. @itemx.

Sat May  8 01:43:02 1999  Franz Sirl  <Franz.Sirl-kernel@lauterbach.com>

	* rs6000.h (RS6000_VARARGS_OFFSET): Die die die.
	(CUMULATIVE_ARGS): Remove varargs_offset; update commentary.
	* rs6000.c (setup_incoming_varargs): Fix typo last change.
	(init_cumulative_args): Remove varargs_offset references.

	* rs6000/linux.h (NO_IMPLICIT_EXTERN_C): Define.
	(MD_EXEC_PREFIX, MD_STARTFILE_PREFIX): Undefine.

Sat May  8 01:34:19 1999  Andreas Schwab  <schwab@issan.cs.uni-dortmund.de>

	* reload1.c (gen_mode_int): New function.
	(reload_cse_move2add): Use it to generate the new constants.

Sat May  8 01:25:09 1999  Andreas Schwab  <schwab@issan.cs.uni-dortmund.de>

	* varasm.c (output_constant): Do nothing if -fsyntax-only.

Fri May  7 19:10:15 1999  Vladimir Makarov  <vmakarov@tofu.to.cygnus.com>

	* sparc.h (GO_IF_LEGITIMATE_ADDRESS): Prohibit REG+REG addressing
	for TFmode when there are no instructions which accept REG+REG
	instructions.

Fri May  7 12:38:54 1999  Jim Wilson  <wilson@cygnus.com>

	* mips/elf64.h (MAKE_DECL_ONE_ONLY, UNIQUE_SECTION_P): Define.
	* mips/mips.c (mips_select_rtx_section): When TARGET_MIPS16, use
	function_section instead of text_section.
	* mips/mips.h (ENCODE_SECTION_INFO): Add check for UNIQUE_SECTION_P
	in TARGET_MIPS16 STRING_CST handling.

Fri May  7 09:54:11 1999  Nick Clifton  <nickc@cygnus.com>

	Patch from: Nick Burrett  <nick.burrett@btinternet.com>

	* arm.c (arm_poke_function_name): New function to implement
	-mpoke-function-name.
	* aof.h (ASM_DECLARE_FUNCTION_NAME): Call it.
	* aout.h (ASM_DECLARE_FUNCTION_NAME): Likewise.
	* elf.h (ASM_DECLARE_FUNCTION_NAME): Likewise.
	* arm.h: Prototype it.
	(TARGET_SWITCHES): Add `no-poke-function-name'.

Fri May  7 14:19:31 1999  Rainer Orth  <ro@TechFak.Uni-Bielefeld.DE>

	* fixinc/server.c (load_data): Cast text_size to long, adapt
	format.
	* fixinc/server.c (read_pipe_timeout): Declare volatile, modified
	in signal handler.
	(sig_handler): Add debug code.
	* fixinc/server.c (run_shell): Don't \-escape cd, it breaks the
	Ultrix V4.3 /bin/sh.
	* fixinc/server.c (def_args): Use static instead of STATIC to
	avoid redefinition error from linker iff DEBUG.

	* fixinc/hackshell.tpl: Don't strip trailing directory from
	DESTDIR - that is already done

	* fixinc/fixincl.c (run_compiles): fix memory leak

Thu May  6 20:34:00 1999  Mark Mitchell  <mark@codesourcery.com>

	* resource.c (mark_referenced_resources): Make volatil
	monotonically increasing.
	(mark_set_resources): Likewise.

Thu May  6 20:02:33 1999  Fred Fish  <fnf@be.com>

	* rs6000/xm-beos.h (HAVE_VPRINTF): Don't redefine if already defined.
	(HAVE_PUTENV, HAVE_ATEXIT, HAVE_RENAME): Likewise.

Wed May  5 20:28:32 1999  Jason Merrill  <jason@yorick.cygnus.com>

	* install.texi (Header Dirs): s/GPLUS/GPLUSPLUS/.

Wed May  5 23:44:15 1999  J"orn Rennecke <amylaar@cygnus.co.uk>

	* unroll.c (copy_loop_body): Don't copy VTOP notes from copy_notes_from.

Wed May  5 16:26:13 1999  Vladimir Makarov  <vmakarov@tofu.to.cygnus.com>

	* function.c (purge_addressof_replacements): Rename into
	purge_bitfield_addressof_replacements.
	(purge_addressof_replacements): New variable.
	(purge_addressof_1): Add code for changing addressof in notes for
	field values which are extracted by usage MEM with narrower mode.
	(purge_addressof): Initialize purge_bitfield_addressof_replacements.

Wed May  5 07:40:02 1999  Nick Clifton  <nickc@cygnus.com>

	Patch from: Nick Burrett  <nick.burrett@btinternet.com>
	* config/arm/arm.h (ARM_MCOUNT_NAME): Define.
	(FUNCTION_PROFILER): Remove assembler dialect dependency and use
	ARM_MCOUNT_NAME.
	(TRAMPOLINE_TEMPLATE): Remove assembler dialect dependency.

	* config/arm/aof.h (ARM_MCOUNT_NAME): Define.

1999-05-05 09:58 -0400  Zack Weinberg  <zack@rabi.columbia.edu>

	* gcc.c (default_compilers): Fix brace nesting bug.
	* objc/lang-specs.h: Use %i, not %g.mi, for the input file
	when processing an .mi file.

Tue May  4 13:17:55 1999  Mark Mitchell  <mark@codesourcery.com>

	* resource.c (mark_set_resources): Handle UNSPEC_VOLATILE,
	ASM_INPUT, TRAP_IF, and ASM_OPERANDS just like in
	mark_referenced_resources.

Mon May  3 22:38:41 1999  David Edelsohn  <edelsohn@gnu.org>

	* rs6000/aix43.h (SUBTARGET_OVERRIDE_OPTIONS): Change non-PowerPC
	and AIX64 combination to warning.  Add warning for disabling
	PowerPC64 support when using 64-bit mode.
	(LIB_SPEC): Do not link with libg.a in 64-bit mode.
	(LINK_SPEC): Do not export libg.exp symbols in 64-bit mode.
	* rs6000/rs6000.h (MY_ISCOFF): Treat import/export files as valid
	XCOFF files.
	(read_only_data_section, private_data_section,
	read_only_private_data_section): Always align CSECTs to doubleword
	boundary regardless of mode.
	(TEXT_SECTION_ASM_OP): Align text CSECT on doubleword boundary in
	64-bit mode.
	(DATA_SECTION_ASM_OP): Always align CSECT to doubleword boundary.
	(ASM_OUTPUT_LOCAL): Use rounded size in 64-bit mode to
	maintain doublword alignment.

Mon May  3 14:45:23 1999  Jeffrey A Law  (law@cygnus.com)

	* mn10200.md (btst insns): btst does not leave cc0 in a usable
	state for redundant tst eliminatino.
	* mn10300.md (btst insns): Likewise.

Mon May  3 16:14:32 1999  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* mips.h (Pmode): Revert Oct 14th change which added a cast.

Sun May  2 14:02:21 1999  Mark Mitchell  <mark@codesourcery.com>

	* tree.h (struct tree_decl): Add comdat_flag.
	(DECL_COMDAT): Define it.
	* toplev.c (wrapup_global_declarations): Don't output a
	DECL_COMDAT function just because it's public.

Sun May  2 15:16:42 1999  Joseph S. Myers  <jsm28@cam.ac.uk>

	* pdp11.h (TARGET_SWITCHES): Fix error in previous change.
	(ASSEMBLER_DIALECT): Define.
	(CONDITIONAL_REGISTER_USAGE): Rename floating point registers if
	required for the UNIX assembler.
	(ASM_OUTPUT_INT): Remove.  The compiler will synthesize it.
	(ASM_OUTPUT_ADDR_VEC_PROLOGUE): Remove.
	(ASM_OPEN_PAREN, ASM_CLOSE_PAREN): Change to "[" and "]".
	(TRAMPOLINE_TEMPLATE): Use ASM_OUTPUT_SHORT.
	* pdp11.c (output_addr_const_pdp11): Copy of output_addr_const
	adapted to output constants in octal.
	* pdp11.c, pdp11.h, pdp11.md: Use output_addr_const_pdp11 instead
	of output_addr_const.  Output constants in octal.  Use assembler
	dialect alternatives where DEC and UNIX assemblers use different
	instruction names.

Sun May 2 01:15:06 PDT 1999 Jeff Law  (law@cygnus.com)

	* version.c: Bump for snapshot.

Fri Apr 30 13:55:43 1999  Richard Henderson  <rth@cygnus.com>

	* va-ppc.h (__va_start_common): Let __builtin_saveregs do the work.
	* rs6000.c (expand_builtin_saveregs): For V4, initialize a private
	va_list struct, and return a pointer to it.
	(setup_incoming_varargs): V4 save area based off virtual_stack_vars
	instead of frame_pointer.

Thu Apr 29 23:02:22 1999  Mark Mitchell  <mark@codesourcery.com>

	* emit-rtl.c (start_sequence): Expand comments.
	(start_sequence_for_rtl_expr): Likewise.
	(push_to_sequence): Likewise.
	(end_sequence): Likewise.
	* expr.c (inhibit_defer_pop): Likewise.
	* expr.h (inhibit_defer_pop): Likewise.
	(NO_DEFER_POP): Likewise.
	(OK_DEFER_POP): Likewise.

Thu Apr 29 22:13:46 1999  Robert Lipe  <robertlipe@usa.net>

	* configure.in (i?86-UnixWare7*-sysv): Set thread_file to 'posix'
	--enable-threads[={yes,pthreads,posix}] is passed as a command
	line parameter to configure.
	* config/i386/sysv5.h (LIB_SPEC): Add support for '-pthread'.
	(CPP_SPEC): Likewise.

Thu Apr 29 17:23:59 1999  Richard Henderson  <rth@cygnus.com>

	* emit-rtl.c (operand_subword): Religiously mask and sign-extend
	from 32-bits to HOST_WIDE_INT.

Thu Apr 29 15:58:52 1999  Robert Lipe  <robertlipe@usa.net>

	* fixinc/regex.c, fixinc/regex.h: Removed.   Replace with...
	* fixinc/gnu-regex.c, fixinc/gnu-regex.h: Imported from GDB 4.18.
	* fixinc/Makefile.in (OBJ, HDR): Handle name changes from above.
	(gnu-regex.o): Define REGEX_MALLOC to avoid memory leak.
	* fixinc/fixincl.c: new regex.h header name
	* Makefile.in: new regex.[ch] file names

Thu Apr 29 12:53:33 1999  Richard Henderson  <rth@cygnus.com>

	* calls.c (emit_call_1): Pass rounded_stack_size to emit_call
	instead of the unrounded size.

1999-04-28 14:40 Bruce Korb <ddsinc09@ix.netcom.com>

	* fixinc/mkfixinc.sh: Makesure the result shell script is writable

Wed Apr 28 10:36:39 1999  Andreas Schwab  <schwab@issan.cs.uni-dortmund.de>

	* config/m68k/m68k.md (cmpsi+1): Use cmp.w when comparing a 16 bit
	constant with an address register.

Wed Apr 28 00:14:41 PDT 1999 Jeff Law  (law@cygnus.com)

	* version.c: Bump for snapshot.

Tue Apr 27 19:50:25 EDT 1999  Andrew MacLeod  <amacleod@cygnus.com>

	* rtl.h (REG_EH_REGION): Update comment to indicate a value of -1
	indicates no throw and no nonlocal gotos.
	* optabs.c (emit_libcall_block): Emit REG_EH_REGION with a value
	of -1 instead of 0 to indicate a nonlocal goto won't happen either.
	* flow.c (count_basic_blocks, find_basic_blocks_1): Ignore libcall
	blocks, look for REG_EH_REGION note exclusively.
	(make_edges): Check for REG_EH_REGION > 0 for specified handlers.

Tue Apr 27 15:33:42 1999  David Edelsohn  <edelsohn@gnu.org>

	* rs6000.h (read_only_data_section, private_data_section,
	read_only_private_data_section, toc_section): Align CSECT on
	doubleword boundary for 64-bit target.
	(DATA_SECTION_ASM_OP): Likewise.
	* rs6000.c (rs6000_stack_info): Leaf procedure stack limit is 288.

Tue Apr 27 20:19:47 1999  J"orn Rennecke <amylaar@cygnus.co.uk>

	* sh.md (insv): Use copy_addr_to_reg.

	* final.c (insn_lengths_max_uid): New variable.
	(init_insn_lengths, shorten_branches): Set it.
	(get_attr_lengths): Test insn uid against insn_lengths_max_uid.

1999-04-27 08:32 -0400  Zack Weinberg  <zack@rabi.columbia.edu>

	* expr.c (emit_move_insn_1): Abort if MODE argument is invalid.
	(compare): Punt if TREE_OPERAND (exp, 0) is an ERROR_MARK.

Tue Apr 27 01:33:43 1999  Jeffrey A Law  (law@cygnus.com)

	* Makefile.in (ORDINARY_FLAGS_TO_PASS): Renmaed from FLAGS_TO_PASS.
	Remove "CC".
	(FLAGS_TO_PASS): New variable.

Tue Apr 27 00:36:44 1999  Nick Burrett  <nick.burrett@btinternet.com>

	* arm.md (nop): Output instruction using output_asm_insn to fix
	assembler dialect problems.

Mon Apr 26 23:55:50 1999  Robert Lipe  <robertlipe@usa.net>

	* Makefile.in (fixinc.sh): Fix dependencies.

	* fixinc/inclhack.def (avoid_bool): Enable match if typedefs are
	prepended by spaces.
	(sco5_stat_wrappers): New fix.   Make sys/stat.h C++ safe.
	* fixinc/fixincl.sh, fixinc/fixincl.x, fixinc/inclhack.sh: Rebuilt.

Mon Apr 26 23:28:54 1999  Mumit Khan  <khan@xraylith.wisc.edu>
                          Donn Terry  <donn@interix.com>

	* function.c (put_var_into_stack): Change ptr_mode to Pmode
	in setup for chkr_set_right_libfunc calls.
	(assign_params): Likewise.
	* expr.c (emit_push_insn): Change ptr_mode to Pmode in
	setup for chkr_copy_bitmap_libfunc and chkr_set_right_libfunc calls.
	(expand_assignment): Change ptr_mode to Pmode in
	setup for chkr_add_libfunc and chkr_copy_bitmap_libfunc.
	(store_expr): Change ptr_mode to Pmode in
	setup for chkr_add_libfunc and chkr_copy_bitmap_libfunc.
	(expand_expr): Change ptr_mode to Pmode in
	setup for chkr_check_addr_libfunc.
	(expand_builtin): Change ptr_mode to Pmode in
	setup for chkr_check_str_libfunc, chkr_copy_bitmap_libfunc and
	chkr_check_addr_libfunc.
	* calls.c (rtx_for_function_call): Change ptr_mode to Pmode in
	setup for chkr_check_exec_libfunc.
	(expand_call): Change ptr_mode to Pmode in
	setup for chkr_set_right_libfunc.
	(expand_call): Change ptr_mode to Pmode in
	setup for chkr_set_right_libfunc.
	(store_one_arg): Change ptr_mode to Pmode in
	setup for chkr_set_right_libfunc.

	* c-parse.in (absdcl1): Allow attributes in explicit typespecs.
	(%expect): Update.
	* c-parse.y: Regenerate.
	* c-parse.c: Likewise.
	* objc/objc-parse.c: Likewise.
	* objc/objc-parse.y: Likewise.

Mon Apr 26 21:17:41 1999  Jason Merrill  <jason@yorick.cygnus.com>

	* c-pragma.c (push_alignment): Don't ignore alignments greater than
	4 bytes.
	(handle_pragma_token): Likewise.

	* c-pragma.c: Support for #pragma pack (push, <id>, <n>).
	(struct align_stack): Add id field.
	(push_alignment, pop_alignment): Take id parameter.
	(handle_pragma_token): Add necessary states.
	* c-pragma.h (enum pragma_state): Add necessary states.

Tue Apr 27 13:58:23 1999  Michael Hayes  <m.hayes@elec.canterbury.ac.nz>

	* config/c4x/c4x.md (*cmpqf, *cmpqf_noov, *cmpqi_test,
	*cmpqi_test_noov): Remove ? modifier from constraints list.
	(*smulqi3_highpart_clobber, *umulqi3_highpart_clobber): Swap
	output strings to match new constraint ordering.

1999-04-26 19:16 -0400  Zack Weinberg  <zack@rabi.columbia.edu>

	* cpphash.c (dump_definition): New function.
	* cpphash.h: Prototype it.

	* cpplib.c (handle_directive): Don't output anything here.
	Streamline.
	(pass_thru_directive): Take a length, not a pointer to the
	end.  All callers changed.
	(do_define): Handle -dD, -dN, -g3 entirely here.  Streamline.
	(do_include): Handle -dI here.
	(do_ident): Correct to match cccp.
	(do_pragma): Copy the pragma through here.
	(do_assert, do_unassert): Tidy.

	* cppinit.c (cpp_finish): If -dM was specified, walk the macro
	hash table and call dump_definition on all the entries.
	* cppmain.c: cpp_finish may produce output.

Mon Apr 26 15:27:33 1999  Mark Mitchell  <mark@codesourcery.com>

	* toplev.c (compile_file): Move call to check_global_declarations
	after output_exception_table to restore behavior as it was before
	1999-04-22 change.

1999-04-26 10:50 -0700 Bruce Korb <ddsinc09@ix.netcom.com>

	* fixinc/fixincl.c:  Improve the handling of child process exits
	* fixinc/server.[ch]: Export the interface for shutting down
	the server process
	* fixinc/inclhack.tpl: Remove unnecessary character quote
	* fixinc/fixincl.sh, fixinc/inclhack.sh: Regenerate

Mon Apr 26 10:41:42 EDT 1999  Andrew MacLeod  <amacleod@cygnus.com>

	* alpha.md (builtin_setjmp_receiver): Use a label_ref instead of
	a code label.

1999-04-26 09:47 -0400  Zack Weinberg  <zack@rabi.columbia.edu>

	* rtl.texi: Document the rtl classes and their relation to
	formats.

Mon Apr 26 01:02:38 1999  Richard Henderson  <rth@cygnus.com>

	* alpha.md (fix_trunc patterns): Use reg_no_subreg_operand on op0
	for less work in reload.
	(movsf and movdf patterns): Put fp reg alternatives first.

Mon Apr 26 01:55:56 1999  Marc Espie  <espie@cvs.openbsd.org>

	* configure.in (openbsd): Factorize xmake_file.
	(ix86 openbsd): Trim obsolete comment.
	(vax openbsd): Fix typo.
	* configure: Rebuilt.

Mon Apr 26 01:30:59 1999 Donn Terry <donn@interix.com>

	* expr.c (expand_assignment): Improve test for pointer type.

Mon Apr 26 00:26:18 1999  Richard Henderson  <rth@cygnus.com>

	* alpha.c (print_operand_address): Account for the subreg word.

Mon Apr 26 01:08:36 1999  Toshiyasu Morita  (tm@netcom.com)

	* fold-const.c (make_range): Always initialize arg0 and arg1.
	(fold): Similarly for alt0 and alt1.
	* function.c (fixup_var_refs_insns): Initialize insn_list.
	(instantiate_virtual_regs_1): Initialize offset.
	* optabs.c (expand_binop): Initialize carry_in, carry_out, op0_xhigh
	and op1_xhigh.
	* stmt.c (expand_end_case): Initialize minval and maxval.

Mon Apr 26 01:02:34 1999  Nathan Sidwell  <nathan@acm.org>

	* toplev.c (report_error_function): Reorder file stack and
	function name printing.  Ignore FILE parameter.

Mon Apr 26 00:58:54 1999  Jerry Quinn <jquinn@nortelnetworks.com>

	* pa.h (architecture_type): New enum.
	(pa_arch_string, pa_arch): Declare.
	(MASK_PA_10, MASK_PA_20): New flags.
	(TARGET_SWITCHES): Add pa-risc-2-0.  Update docs for PA1.0 codegen.
	(TARGET_OPTIONS): Add -march= option.
	* pa.c (pa_arch, pa_arch_string):  Define.
	(override_options):  Set them.
	* pa/pa-hpux10.h (ASM_FILE_START):  Output LEVEL 2.0 asm directive for
	2.0 architecture.
	* invoke.texi (Option Summary, HPPA Options):  Document new
	architecture flags.

	* pa/pa-hpux.h, pa/pa-hpux10.h, pa/pa-hpux9.h, pa/pa-osf.h, pa.h,
	pa.c, pa.md, configure.in, configure: Replace TARGET_SNAKE by
	TARGET_PA_11 and MASK_SNAKE by MASK_PA_11.

Mon Apr 26 00:28:25 1999  Theodore Papadopoulo <Theodore.Papadopoulo@sophia.inria.fr>

	* flags.h (inline_max_insns): Declare.
	* integrate.c (inline_max_insns): New variable.
	(function_cannot_inline_p): Use it.
	* toplev.c (main): Add the flag -finline-limit-n.
	(display_help): Document -finline-limit-n.
	* invoke.texi: Document -finline-limit-n

Sun Apr 25 23:03:32 1999  Richard Henderson  <rth@cygnus.com>

	* stmt.c (expand_asm_operands): Reload in-out reg-only memory operands.

Sun Apr 25 13:06:13 1999  Richard Henderson  <rth@cygnus.com>

	* function.c (assign_parms/STACK_BYTES): Revert last change,
	and that of 19 Nov.

Sun Apr 25 12:30:50 1999  Richard Henderson  <rth@cygnus.com>

	* calls.c (emit_call_1): New arg rounded_stack_size; update callers.
	Update pending_stack_adjust based on this value.
	(compute_argument_block_size): Include pending_stack_adjust in
	PREFERRED_STACK_BOUNDARY alignment.
	* function.c (assign_parms): Don't round to PREFERRED_STACK_BOUNDARY.

Sun Apr 25 14:38:10 EDT 1999  John Wehle  (john@feith.com)

	* stupid.c (stupid_mark_refs): Generate a REG_UNUSED note
	for a register which is clobbered even if the register
	was used by an earlier instruction.

	* i386.md (fix_truncsfdi2, fix_truncdfdi2,
	fix_truncxfdi2): Don't bother with the gen_reg_RTX.
	(fix_truncsfsi2, fix_truncsfdi2, fix_truncdfsi2,
	fix_truncdfdi2, fix_truncxfsi2, fix_truncxfdi2): Update
	operand constraints and modes.
	* i386.c (output_fix_trunc): Use HImode register to avoid
	memory stalls.  Call output_move_double instead of output_to_reg.
	(output_to_reg): Remove.
	* i386.h: Likewise.

	* i386.md (negsf2, negdf2, negxf2): Set the type
	attribute to fpop.

Sat Apr 24 23:15:57 1999  Donn Terry (donn@interix.com)

	* alpha.md (call_value_nt): Correct subscripts.

Sat Apr 24 20:49:20 1999  Richard Henderson  <rth@cygnus.com>

	* alpha.h (PRINT_OPERAND_ADDRESS): Break out to ...
	* alpha.c (print_operand_address): here.  Handle subregs.

Fri Apr 23 22:35:41 EDT 1999  John Wehle  (john@feith.com)

	* acconfig.h (HAVE_GAS_FILDS_FISTS): Add.
	* configure.in: Check assembler instructions.
	* configure: Rebuild.
	* config.in: Likewise.
	* i386.md (floathisf2, floathidf2, floathixf2): New patterns.
	* i386.c (print_operand): Use the proper suffix for a 387 HImode
	operand.  Abort if a 387 operand has an unsupported size.

Fri Apr 23 16:57:40 1999  Richard Henderson  <rth@cygnus.com>

	* alpha.c (alpha_write_verstamp): Mark `file' unused.
	* alpha.h (FUNCTION_VALUE): Use gen_rtx_REG not gen_rtx.
	(LIBCALL_VALUE): Likewise.
	(GO_IF_LEGITIMATE_SIMPLE_ADDRESS): Handle normal subregs.

Fri Apr 23 14:57:33 1999  Donn Terry  <donn@interix.com>

	* alpha32.h (INITIALIZE_TRAMPOLINE): Get offsets right.

	* alpha.c (alpha_initialize_trampoline): Add covert_memory_address
	calls as needed.

Fri Apr 23 14:36:47 1999  Richard Henderson  <rth@cygnus.com>

	* alpha.c (alpha_expand_prologue): Don't negate frame size
	for use with subq.

Fri Apr 23 09:43:18 1999  Nick Clifton  <nickc@cygnus.com>

	* print-rtl.c (print_rtx): Display LABEL_NUSES for labels.

Thu Apr 22 23:08:37 1999  Mark Mitchell  <mark@codesourcery.com>

	* toplev.h (wrapup_global_declarations): Declare.
	(check_global_declarations): Likewise.
	* toplev.c (wrapup_global_declarations): New function, split out
	from ...
	(check_global_declarations): Likewise...
	(compile_file): Here.

Thu Apr 22 22:34:41 1999  Richard Henderson  <rth@cygnus.com>

	* c-parse.in (expr_no_commas): Verify we've an expr before
	calling C_SET_EXP_ORIGINAL_CODE.

Thu Apr 22 22:22:15 EDT 1999  John Wehle  (john@feith.com)

	* toplev.c (rest_of_compilation): Always set
	current_function_uses_only_leaf_regs appropriately.

Thu Apr 22 14:39:43 1999  Mumit Khan  <khan@xraylith.wisc.edu>

	* i386/xm-cygwin.h (HAVE_BCOPY): Delete unneeded macro.
	(HAVE_BZERO): Likewise.
	(HAVE_BCMP): Likewise.
	(HAVE_RINDEX): Likewise.
	(HAVE_INDEX): Likewise.
	(DIR_SEPARATOR_2): Define.
	(GET_ENV_PATH_LIST): Turn path lists into POSIX.
	(PATH_SEPARATOR): Use ':'.

1999-04-22 Bruce Korb <ddsinc09@ix.netcom.com>

	* configure.in: enable disabling of fast fixincludes
	* configure: regenerate

1999-04-21 14:55 -0400  Zack Weinberg  <zack@rabi.columbia.edu>

	* gen-protos.c: #undef abort after including system.h.
	Delete defns of fancy_abort and	fatal.
	* fix-header.c: Delete defn of fancy_abort.

Wed Apr 21 12:09:38 1999  Mumit Khan  <khan@xraylith.wisc.edu>

	* cccp.c (simplify_filename): Always preserve leading double slash.

Wed Apr 21 18:15:55 1999  Michael Hayes  <m.hayes@elec.canterbury.ac.nz>

	* config/c4x/c4x.md: Add new peepholes to remove redundant loads.

Wed Apr 21 17:41:29 1999  Michael Hayes  <m.hayes@elec.canterbury.ac.nz>

	* config/c4x/c4x.md (binary patterns): Reorder alternatives
	so that two operand instructions are chosen before three operand
	instructions.

Tue Apr 20 23:38:58 1999  Nathan Sidwell  <nathan@acm.org>

	* objc/Make-lang.in (objc-parse.c): Put BISON parameters in correct
	order.

	* Makefile.in (c-parse.c): Put BISON parameters in correct
	order.

Tue Apr 20 16:38:11 1999  Richard Henderson  <rth@cygnus.com>

	* alpha.md (nt_lda): New pattern.
	* alpha.c (alpha_expand_prologue): Use it for large frames
	under windows nt.

Tue Apr 20 17:57:14 1999  Catherine Moore  <clm@cygnus.com>

	* config/arm/arm.md (movhi):  Add check for odd offset.

Tue Apr 20 13:14:58 EDT 1999  John Wehle  (john@feith.com)

	* i386.c (output_move_double): Abort if a non-offsettable
	memory operand is encountered.  Delete unused code.
	(find_addr_reg): Remove.

Mon Apr 19 21:13:02 1999  Craig Burley  <craig@jcb-sc.com>

	* tree.def (BLOCK): Fix typo in comment.

1999-04-19 14:51 -0400  Zack Weinberg  <zack@rabi.columbia.edu>

	* cpplib.c (output_line_command): Drop CONDITIONAL argument.
	We can omit unnecessary line commands if file_change ==
	same_file and pfile->lineno != 0.  All callers changed.
	(cpp_get_token [case '\n']): Don't bump pfile->lineno if
	CPP_OPTIONS (pfile)->no_line_commands is set.
	* cpplib.h: Fix prototype of output_line_command.

1999-04-18 17:46 -0400  Zack Weinberg  <zack@rabi.columbia.edu>

	* cppfiles.c (find_position, read_and_prescan): Use `unsigned
	long' variables consistently to count line and column numbers.

Sun Apr 18 15:50:33 EDT 1999  John Wehle  (john@feith.com)

	* output.h (current_function_is_leaf,
	current_function_uses_only_leaf_regs): Declare.
	* function.c (current_function_is_leaf,
	current_function_uses_only_leaf_regs): Define.
	(init_function_start): Initialize current_function_is_leaf
	and current_function_uses_only_leaf_regs.
	* final.c (leaf_function): Don't define.
	(final_start_function): Replace uses of leaf_function with
	current_function_uses_only_leaf_regs.
	* toplev.c (rest_of_compilation): Set current_function_is_leaf
	prior to invoking local register allocation.
	(rest_of_compilation): Replace uses of leaf_function with
	current_function_uses_only_leaf_regs.
	* dbxout.c (dbxout_symbol, dbxout_parms): Likewise.
	* dwarf2out.c (add_location_or_const_vaule_attribute): Likewise.
	* dwarfout.c (add_location_or_const_value_attribute): Likewise.
	* sdbout.c (sdbout_symbol): Likewise.
	* sparc.h (FUNCTION_PROLOGUE, FUNCTION_EPILOGUE): Likewise.
	* sparc.c (eligible_for_epilogue_delay, output_return,
	sparc_return_peephole_ok): Likewise.
	* sparc.md (leaf_function attribute, untyped_return): Likewise.
	* i386.c (ix86_compute_frame_size): Don't align the stack
	for leaf functions which don't allocate any stack slots.
	* tm.texi: Update documentation.

Sun Apr 18 02:15:09 PDT 1999 Jeff Law  (law@cygnus.com)

	* version.c: Bump for snapshot.

Sun Apr 18 00:08:45 1999  Richard Henderson  <rth@cygnus.com>

	* alpha.h (GO_IF_LEGITIMATE_SIMPLE_ADDRESS): Correct last change --
	make sure FP_BASE_P registers are only used with an integer.

Sat Apr 17 22:54:17 1999  Richard Henderson  <rth@cygnus.com>

	* alpha.h (REG_OK_FP_BASE_P): New macro.
	(GO_IF_LEGITIMATE_SIMPLE_ADDRESS): Use it.
	* alpha.md (adddi3+1): New insn to handle large constants off
	the soft frame pointer.
	(adddi3+2): Don't split soft frame pointer or arg pointer additions.

Sun Apr 18 17:24:10 1999  Michael Hayes  <m.hayes@elec.canterbury.ac.nz>

	* config/c4x/c4x.c (legitimize_operands): Use rtx_cost
	to determine if it is worthwhile forcing a constant into a register.
	* config/c4x/c4x.h (CONST_COSTS): An integer value of 255 or 65535
	used with a logical and or an integer value of 16 or 24 used with
	a right shift has zero cost on the C40.

Sat Apr 17 21:30:11 1999  Bernd Schmidt <crux@pool.informatik.rwth-aachen.de>

	* gcse.c (compute_local_properties): If setp is nonzero, clear
	TRANSP instead of setting it to all ones.

Sat Apr 17 21:10:10 1999  Jan Hubicka <hubicka@freesoft.cz>

	* i386.c (i386_preferred_stack_boundary_string): New global variable.
	(i386_preferred_stack_boundary): New global variable.
	(override_functions): Set it.  Tidy option setting code.
	* i386.h (TARGET_OPTIONS): New command line option.
	(i386_preferred_stack_boundary_string): Declare it.
	(i386_preferred_stack_boundary): Likewise.
	(PREFERRED_STACK_BOUNDARY): Use i386_preferred_stack_boundary.

Sat Apr 17 19:22:38 1999  Jan Hubicka <hubicka@freesoft.cz>

	* i386.c (k6_cost): Take into account the decoding time.

Sat Apr 17 19:13:22 1999  Donn Terry  <donn@interix.com>

	* i386.h (PRINT_OPERAND_PUNCT_VALID_P): Allow _.
	* i386.c (print_operand): New %_ operator.
	(load_pic_register): Proper number of leading _ in GOT literal.
	* i386.md (prologue_get_pc_and_set_got): Likewise.
	* i386/unix.h (ASM_OUTPUT_MI_THUNK): Likewise.

Sat Apr 17 19:13:07 1999  Richard Henderson  <rth@cygnus.com>

	* alpha.c (alpha_expand_prologue): Use gen_adddi3 instead of
	emit_move_insn+plus_constant.  For NT, don't use the stack probe
	loop pointer to allocate stack space.
	* alpha.md (adddi3): Always use lda to set the stack pointer.

1999-04-17 20:11 -0400  Zack Weinberg  <zack@rabi.columbia.edu>

	* c-aux-info.c, emit-rtl.c, explow.c, expmed.c, gcse.c,
	haifa-sched.c, optabs.c, reorg.c, resource.c, sched.c: Include
	toplev.h for real declaration of trim_filename.
	* Makefile.in: Update dependencies.

Sat Apr 17 14:36:19 1999  Craig Burley  <craig@jcb-sc.com>

	* tree.c (chainon): Check for circularity only if
	ENABLE_CHECKING is defined.

1999-04-17 10:15 -0400  Zack Weinberg  <zack@rabi.columbia.edu>

	* cccp.c: Make fatal non-static.

Sat Apr 17 23:47:24 1999  Michael Hayes  <m.hayes@elec.canterbury.ac.nz>

	* config/c4x/c4x.md (*andqi3_255_clobber,*andqi3_65535_clobber):
	New logical and patterns using C40 bit-field insert instructions.
	(*lshrqi3_24_clobber,*ashrqi3_24_clobber,*lshrqi3_16_clobber,
	*ashrqi3_16_clobber): New shift patterns using C40 bit-field insert
	instructions.

1999-04-16 22:44 -0400  Zack Weinberg  <zack@rabi.columbia.edu>

	* system.h: Always prototype abort.  Prototype fatal.  Define
	abort to call fatal, not fprintf/exit.  Define a stub macro
	for trim_filename.
	* toplev.c: Define DIR_SEPARATOR.  (trim_filename): New
	function.
	* toplev.h: Prototype trim_filename, and #undef system.h's stub.

	* gcc.c, genattr.c, genattrtab.c, gencodes.c, genconfig.c,
	genemit.c, genextract.c, genflags.c, genopinit.c, genoutput.c,
	genpeep.c, genrecog.c: Make fatal non-static.
	* gcov.c, gengenrtl.c, protoize.c: #undef abort after
	including system.h.

	* config/i386/dgux.h, config/m68k/xm-amix.h: Remove stale code
	relating to abort.

Sat Apr 17 11:25:44 1999  Michael Hayes  <m.hayes@elec.canterbury.ac.nz>

	* config/c4x/c4x.md (mulqf3_clrqf_clobber, mulqi3_clrqi_clobber):
	New patterns to support parallel multiply and load of zero.

Fri Apr 16 01:23:47 1999  Jason Merrill  <jason@yorick.cygnus.com>

	* tree.c (valid_machine_attribute): If we're modifying the
	FUNCTION_TYPE within a POINTER_TYPE and we don't get a decl,
	update the POINTER_TYPE.

Fri Apr 16 00:19:31 1999  Jan Hubicka <hubicka@freesoft.cz>

	* i386.c (x86_adjust_cost): Move break statement to correct place.

Thu Apr 15 23:17:33 1999  Jerry Quinn <jquinn@nortelnetworks.com>

	* pa.h (HAVE_PRE_INCREMENT, HAVE_POST_INCREMENT,
	HAVE_PRE_DECREMENT, HAVE_POST_DECREMENT): Fix pa_cpu value from
	8000 to PROCESSOR_8000.

Thu Apr 15 20:46:57 1999  Donn Terry (donn@interix.com)

	* expr.c (expand_assignment): Force pointers to proper mode if
	POINTERS_EXTEND_UNSIGNED is defined.

	* xm-alpha.h (alloca.h): Add Interix to list of special machines
	that don't like alloca.h, pending using autoconf results.

	* except.c (start_catch_hadler): Be sure rtime_address is Pmode
	if POINTERS_EXTEND_UNSIGNED.

	* except.c (expand_eh_return): Force pointers to proper mode if
	POINTERS_EXTEND_UNSIGNED.

Thu Apr 15 23:13:35 1999  Michael Hayes  <m.hayes@elec.canterbury.ac.nz>

	* config/c4x/c4x.h:  Tweaked comment formatting.
	* config/c4x/c4x.c:  Likewise.

Thu Apr 15 02:45:19 1999  Mumit Khan  <khan@xraylith.wisc.edu>

	* aclocal.m4 (GCC_FUNC_MKDIR_TAKES_ONE_ARG): Define.
	* configure.in: Use.
	* configure: Rebuilt.
	* acconfig.h (MKDIR_TAKES_ONE_ARG): Add.
	* config.in: Rebuilt.
	* system.h: Use.

Thu Apr 15 01:03:21 1999  Jan Hubicka <hubicka@freesoft.cz>
			  Jeff Law <law@cygnus.com>

	* i386.md (QImode add pattern): Support lea instruction.
	(HImode add pattern): Likewise.

	* i386.md (ashlsi patterns): Call output_ashl instead of output_ashlsi3.
	(ashlqi): Use expander, separate LEA and SAL / ADD patterns; call
	output_ashl.
	(ashlhi): Likewise.
	* i386.h (output_ashl): Renamed from output_ashlsi3.
	* i386.c (output_ashl): Likewise; support HImode and QImode operands
	as well.

	* i386.md (notsi, nothi, xorsi, xorhi, and xorqi patterns): Call
	memory_address_displacement_length instead of memory_address_length.
	* i386.c (memory_address_info): Renamed from memory_address_length.
	Accept new argument DISP_LENGTH.  All callers changed.  If DISP_LENGTH,
	then return the displacement length.  Else return length of the
	entire memory address.  Handle MULT case correctly.
	* i386.h (memory_address_info): Update declaration.

	* i386.md (memory_bit_test): Fix paren error.

Wed Apr 14 21:29:18 1999  Andrew Haley  <aph@cygnus.com>

	* flow.c: (make_edges): Always make edges from a basic block
	to its exception handlers, even if the block ends with a jump.

1999-04-14 23:26 -0400  Zack Weinberg  <zack@rabi.columbia.edu>

	* graph.c (node_data): Return void.  Ignore result of
	print_rtl_single.  Change caller to match.
	* integrate.c (subst_constants): Initialize op0_mode to an
	invalid mode, and abort before use if it's still invalid.
	(Can only happen if the RTX_CLASS, RTX_FORMAT tables are corrupted.)
	* objc/objc-act.c (get_objc_string_decl,
	build_selector_translation_table, generate_protocol_list,
	synth_id_with_class_suffix, build_keyword_selector,
	build_selector_expr, gen_declarator): Abort when the tree
	structure is corrupted.

Wed Apr 14 19:57:49 1999  Jeffrey A Law  (law@cygnus.com)

	* configure.in (alpha interix): Use symbolic names to set
	target_cpu_default.
	* configure: Rebuilt.

	* explow.c (allocate_dynamic_stack_space): Undo last change.  Use
	convert_memory_address instead.

Wed Apr 14 19:42:02 1999  Donn Terry (donn@interix.com)

	* alpha/lib1funcs.asm: New file.
	* alpha/t-interix (lib1funcs.asm): Add to build.

	* explow.c (allocate_dynamic_stack_space): Correctly convert TARGET
	to Pmode.

Wed Apr 14 14:26:36 1999  John Wehle  (john@feith.com)

	* i386.md (truncxfdf): Output the template supplied
	by output_move_double with the correct operands.

	* i386.md (extendsfdf, extendsfxf, extenddfxf): Use
	output_float_extend instead specifying '#' as the template.
	* i386.c (output_float_extend): Define.
	* i386.h (output_float_extend): Declare.

Wed Apr 14 10:48:03 1999  Catherine Moore  <clm@cygnus.com>

	* config/mips/elf.h, config/mips/elf64.h
	(CTORS_SECTION_ASM_OP): Define.
	(DTORS_SECTION_ASM_OP): Define.
	(EXTRA_SECTIONS): Define.
	(INVOKE__main): Define.
	(NAME__MAIN): Define.
	(SYMBOL__MAIN): Define.
	(EXTRA_SECTIONS_FUNCTIONS): Define.
	(SECTION_FUNCTION_TEMPLATE): Define.
	(ASM_OUTPUT_CONSTRUCTOR): Define.
	(ASM_OUTPUT_DESTRUCTOR): Define.
	(CTOR_LIST_BEGIN): Define.
	(CTOR_LIST_END): Define.
	(DTOR_LIST_BEGIN): Define.
	(DTOR_LIST_END): Define.
	(LIB_SPEC): Define.
	(STARTFILE_SPEC): Define.
	(ENDFILE_SPEC): Define.
	* config/mips/linux.h:  Undefine all of the above.
	* config/mips/rtems64.h: Likewise.
	* config/mips/t-r3900: Likewise.
	* config/mips/t-elf: New file.
	* config/mips/vxworks.h: New file.
	* configure.in (mips-wrs-vxworks): Use mips/vxworks.h.
	(mips*-*-*elf*):  Use t-elf instead of t-ecoff.
	* configure: Regenerate.

Wed Apr 14 09:59:38 1999  Richard Henderson  <rth@cygnus.com>

	* reload1.c (emit_reload_insns): Also find equivalent mems
	for subregs of pseudos.

	* alpha.c (aligned_memory_operand): Recognize the output of
	LEGITIMIZE_RELOAD_ADDRESS.  Examine reg_equiv_memory_loc in
	the event of a pseudo.
	(unaligned_memory_operand): Likewise.  Don't otherwise accept
	completely illegal addresses.
	(normal_memory_operand): Likewise.  Handle subregs of pseudos.
	(get_aligned_mem): Revert previous change.  Abort if we don't have a
	mem.  During reload, call find_replacement on all illegal memories.
	(get_unaligned_address): Likewise.
	* alpha.h (SECONDARY_INPUT_RELOAD_CLASS): Use !aligned_memory_operand
	instead of unaligned_memory_operand.
	* alpha.md: Revert extra argument to get_aligned_mem.
	(reload_inqi): Use any_memory_operand in constraints.  Abort if
	we're not given some sort of mem.
	(reload_inhi): Likewise.
	(reload_outqi, reload_outhi): Likewise.

Wed Apr 14 09:39:20 1999  Richard Henderson  <rth@cygnus.com>

	* i386.md (neghi): Use the whole register when widening the op.

1999-04-14 12:37 -0400  Zack Weinberg  <zack@rabi.columbia.edu>

	* cpperror.c, cppexp.c, cpplib.c: Never call abort.
	* cpphash.c: Only call abort when we detect corruption of the
	malloc arena.
	* cppmain.c: Don't define fatal or fancy_abort.

Wed Apr 14 09:19:39 1999  Jan Hubicka <hubicka@freesoft.cz>

	* i386.c (x86_adjust_cost): Agi stall takes 1 cycle on Pentium, fst
	requires value to be ready one extra cycle.

Wed Apr 14 11:28:34 1999  Dave Brolley  <brolley@cygnus.com>

	* config/i386/i386.c (memory_address_length): Add missing parenthesis.

Wed Apr 14 13:59:27 1999  Martin von Löwis  <loewis@informatik.hu-berlin.de>

	* extend.texi (Deprecated Features): New node.
	* invoke.texi (-Wdeprecated): Document.

Wed Apr 14 00:18:22 1999  Jan Hubicka <hubicka@freesoft.cz>

	* i386.md (SImode logical compare): Avoid outputting non-pariable testw
	and testl on Pentium.
	(register and memory bit tests): Likewise.
	(setcc, normal and reversed conditional branches): Use shorter
	sequence for testing flags stored in EAX.

	* i386.md (xorsi3): Do not output NOT instrctions on Pentium.
	(xorqi3): Likewise.
	(xorhi3): Likewise.
	(notsi2): Likewise.
	(notqi2): Likewise.
	(nothi2): Likewise; do not output prefixed opcodes when possible.

	* i386.md (neghi2): Do not output prefixed opcode when possible.
	(ashlhi3): Likewise.

Wed Apr 14 00:08:46 1999  Richard Henderson  <rth@cygnus.com>

	* i386.c (memory_address_length): New function.
	* i386.h (memory_address_length): Declare it.

Tue Apr 13 22:52:04 1999  Donn Terry (donn@interix.com)
			  Martin Heller (Ing.-Buero_Heller@t-online.de)

	* configure.in (interix Alpha): Add.
	(winnt Alpha): Use alpha32.h
	(interix i386): Parallel Alpha32.
	* configure: Rebuilt.

	* config/interix.h: Move common elements from i386-interix.h.
	* config/i386/i386-interix.h: Delete same.
	* config/alpha/alpha-interix.h: New file.

	* config/alpha/alpha32.h: New file, part fron win-nt.h.
	* config/alpha/win-nt.h: Deletions (-> alpha32.h).
	* config/alpha/interix.h: New file

	* config/alpha/alpha.md (interix): Comment.

	* config/alpha/xm-alpha-interix.h: New file.

	* config/alpha/t-interix: New file.

	* fixinc/mkfixinc.sh (interix/Alpha): Add.

1999-04-13  Mike Stump  <mrs@wrs.com>

	* i386/vxi386.h (CPP_CPU_SPEC): Define appropriately for vxworks.
	(CPP_PREDEFINES, LIB_SPEC, STARTFILE_SPEC, ENDFILE_SPEC): likewise.

Tue Apr 13 21:01:36 1999  Jason Merrill  <jason@yorick.cygnus.com>

	* c-common.c (default_valid_lang_attribute): New fn.
	(valid_lang_attribute): New callback ptr.
	(decl_attributes): Call it.  Move init_priority support into
	C++ frontend.

Tue Apr 13 17:47:14 1999  John Wehle  (john@feith.com)

	* i386.md (movdi): Add splitter.

Wed Apr 14 10:04:27 1999  Michael Hayes  <m.hayes@elec.canterbury.ac.nz>

	* config/c4x/c4x.md (storeqf_int, storeqf_int_clobber, loadqf_int,
	loadqf_int_clobber): Add new patterns with corresponding splitters
	to handle moves of floating point values into and out of intager
	registers by using memory.

	* config/c4x/c4x.c (c4x_check_legit_addr): Disallow PRE_INC for modes
	other than QFmode and QImode.
	(mixed_subreg_operand): New function.
	(c4x_emit_move_sequence): If moving a floating point value into or
	out of an integer register, use the new patterns storeqf_int_clobber
	or loadqf_int_clobber.
	(reg_imm_operand, *_reg_operand): Call reg_operand instead of
	register_operand.
	(reg_operand, src_operand): Disallow operand if it satisifes
	mixed_subreg_operand.

	* config/c4x/c4x.h (mixed_subreg_operand): Add prototype.

Tue Apr 13 14:49:13 1999  Jan Hubicka  <hubicka@freesoft.cz>

	* i386.c (agi_dependent): Handle push operation more correctly.

Tue Apr 13 14:45:17 1999  Jan Hubicka  <hubicka@freesoft.cz>

	* i386.md (anddi3): Add % constraint.
	(iordi3, xordi3): Likewise.

Tue Apr 13 14:29:58 1999  Jan Hubicka  <hubicka@freesoft.cz>

	* i386.md (extendhisi2): Output mov instead of cw instruction for K6
	to improve decoding bandwidth.
	* i386.md (extendhiqi2): Likewise.

Tue Apr 13 14:26:31 1999  Jan Hubicka  <hubicka@freesoft.cz>

	* i386.md (movsf_push): Handle memory to memory case too, new splitter.
	(movdf_push, movxf_push): Likewise.
	(movsf_push_memory, movdf_push_memory, movxf_push_memory): Remove.

Tue Apr 13 14:14:06 1999  Jan Hubicka  <hubicka@freesoft.cz>

	* i386.md: Do not output mov %0,reg on AMD K6.

Tue Apr 13 12:14:07 1999  Dave Brolley  <brolley@cygnus.com>

	* cppinit.c (cpp_start_read): Fix buffer overwrite.
	* Makefile.in (cppinit.o): Typo in dependencies.

Tue Apr 13 05:04:59 1999  Richard Earnshaw  (rearnsha@arm.com)

	* arm.h (function prototypes for arm.c): Ifdef these out if
	HAVE_CONFIG_H is not defined.

Tue Apr 13 02:11:11 1999  Jeffrey A Law  (law@cygnus.com)

	* pa.c: Avoid Using immediate zero for register zero.
	* pa.md: Likewise.

	* pa.c (print_operand, case 'f'): New case for FP register or 0.0.
	(print_operand, case 'r'): Use %r0 for zero value.
	* pa.md (move patterns, fcmp patterns): Use new %f output arg.

	* pa.c: Use a register name, not a raw immediate in branch,
	compare/clear, sub, subb, uaddcm and vshd instructions.
	* pa.md: Likewise.

	* pa.md, pa.h, ee.asm, ee_fp.asm, lib2funcs.asm: Likewise.

	* pa.c: Use a register name, not a raw immediate in "bv" instructions.
	* pa.md, pa.h, ee.asm, ee_fp.asm, lib2funcs.asm: Likewise.

	* pa.c: Remove space register specification in memory addresses,
	except where it is actually needed.
	* pa.md, pa.h, ee.asm, ee_fp.asm, lib2funcs.asm: Likewise.

Mon Apr 12 23:34:35 1999  Jeff Law  (law@cygnus.com)

	* version.c: Bump for snapshot.

Mon Apr 12 14:58:30 1999  Jan Hubicka  <hubicka@freesoft.cz>

	* reg-stack.c (check_stack_regs_mentioned): Remove variable SIZE.

Mon Apr 12 19:15:17 1999  Daniel Jacobowitz  <dan@debian.org>

	* rs6000/sysv4.h (CPP_OS_LINUX_SPEC): Add missing backslash.

Mon Apr 12 19:11:38 1999  Mumit Khan  <khan@xraylith.wisc.edu>

	* i386/cygwin.h (SUBTARGET_SWITCHES): Add -mconsole; fix
	-mno-nop-fun-dllimport and minor doc fixes.
	(STARTFILE_SPEC): Cygwin DLLs don't have dllcrt0.
	(LINK_SPEC): Add -mconsole support.
	* i386/mingw32.h (LIB_SPEC): Make libraries consistent with
	Cygwin.
	(LINK_SPEC): Remove. Use Cygwin's version.
	(MATH_LIBRARY): Make it null.
	* i386/crtdll.h (MATH_LIBRARY): Likewise.

Fri Apr 12 15:00:52 1999  Stan Cox  <scox@cygnus.com>

	* c-decl.c (c_decode_option, start_decl, start_function,
	finish_function) : Recognize -Wno-main so we can avoid warnings.

1999-04-12  Zack Weinberg  <zack@rabi.columbia.edu>

	* cpphash.c (collect_expansion, macroexpand,
	push_macro_expansion): Make the escape character in macro
	buffers '\r', not '@'.  Remove code to protect literal
	occurrences of the escape character; '\r' cannot appear
	in a macro buffer unless we put it there.
	* cpplib.c (skip_comment, copy_comment, cpp_skip_hspace,
	copy_rest_of_line, cpp_get_token, parse_string,
	parse_assertion): '\r' might be a backslash-newline marker, or
	it might be a macro escape marker, depending on
	CPP_BUFFER (pfile)->has_escapes.  '@' is not a special
	character.
	* cpplib.h: Update commentary.

Mon Apr 12 09:30:03 1999  Richard Earnshaw  (rearnsha@arm.com)

	* arm.h (target_fp_name, structure_size_string, arm_cpu_select):
	Const-ify.
	* arm.c (target_fp_name, structure_size_string): Const-ify.

	* arm.md (reload_inhi, reload_outhi): Make the scratch DImode.
	* arm.c (arm_reload_in_hi): Handle cases when the input is still
	a pseudo, make use of scratch registers for reloading the address
	as appropriate.
	(arm_reload_outhi): Similarly for when the output is still a pseudo.

	* riscix.h (SUBTARGET_SWITCHES): Document.

1999-04-12  Bruce Korb  <ddsinc09@ix.netcom.com>

	* fixincludes:
	make fixincludes behave like the scripts in fixinc/

	* Makefile.in( stmp-fixinc ):
	ensure the SHELL value is that of the make

	* fixincl/inclhack.tpl:
	the file name lists ought to be restricted to "*.h" anyway
	C++ files may be named .../[a-z]++/... also
	Adding copyright year and attribution to output

	* fixincl/inclhack.def:
	fixed broken expression
	Clarify a some comments

	* fixincl/fixincl.tpl:
	Clarify a some comments
	Remove dead template text
	Correct the counting of regular expressions

Mon Apr 12 03:07:44 1999  Richard Henderson  <rth@cygnus.com>

	* alpha.c (aligned_memory_operand): Handle out of range stack slots.
	Take a new SCRATCH argument for the occasion.  Update all callers.
	(get_unaligned_address): Abort on out of range stack slots.
	* alpha.md (adddi3 splitter): Check s_p_rtx not REGNO.
	(reload_inqi): Check for aligned mems before unaligned.
	(reload_inhi): Likewise.

Mon Apr 12 03:11:30 1999  Jeffrey A Law  (law@cygnus.com)

	* flow.c (flow_delete_insn): If we delete a CODE_LABEL, also remove
	it from the nonlocal_goto_handler_labels list.
	* jump.c (delete_insn): Likewise.
	(jump_optimize_1): Also recompute LABEL_NUSES when we are just
	marking labels.
	* rtl.h (remove_node_from_expr_list): Declare.
	* rtlanal.c (remove_node_from_expr_list): New function.

Mon Apr 12 02:37:02 1999  Jan Hubicka  <hubicka@freesoft.cz>

	* reg-stack.c: Update comment, include varray.h.
	(stack_regs_mentioned_data): New global variable.
	(check_stack_regs_mentioned): New function.
	(stack_regs_mentioned): New function.
	(reg_to_stack): Initialize and free stack_regs_mentioned_data,
	use stack_regs_mentioned.
	(record_asm_reg_life): Change insn type cache for changed insn.
	(record_reg_life): Do not change the insn mode.
	(emit_pop_insn): Likewise.
	(emit_swap_insn): Likewise.
	(move_for_stack_reg): Likewise.
	(stack_reg_life_analysis): Use stack_regs_mentioned.
	(emit_swap_insn): Likewise.
	(subst_stack_regs): Likewise.
	(convert_regs): Likewise.
	* jump.c (find_cross_jump): Use stack_regs_mentioned.
	* rtl.h (stack_regs_mentioned): Declare.

Mon Apr 12 00:57:10 1999  Theodore Papadopoulo  <Theodore.Papadopoulo@sophia.inria.fr>

	* integrate.c (INTEGRATE_THRESHOLD): Sync it with the comment.

Sun Apr 11 10:24:18 1999  Mark Mitchell  <mark@codesourcery.com>

	* rtl.h (rtx_def): Update documentation for jump and call.

Sun Apr 11 07:43:44 1999  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* jump.c (jump_optimize_1): Make the definition static to match
	the prototype.

Sat Apr 10 22:51:53 1999  Jan Hubicka  <hubicka@limax.paru.cas.cz>

	* flow.c (life_analysis): New parameter remove_dead_code.
	(life_analysis_1): Likewise.
	(propagate_block): Likewise; use it.
	* output.h: Update prototype.
	* toplev.c: Update calls to life_analysis.

Sat Apr 10 22:12:12 1999  Jan Hubicka  <hubicka@freesoft.cz>

	* recog.c (constrain_operands): Ignore unary operators when
	matching operands.  Recognize '5'..'9' as well.

Sat Apr 10 21:53:02 1999  Philipp Thomas  (kthomas@gwdg.de)
			  Richard Henderson  <rth@cygnus.com>

	* configure.in: Set target_cpu_default2 for target_alias k6.
	* i386.h (TARGET_SWITCHES): Remove no-<cpu> entries.
	(CC1_CPU_SPEC): Likewise.
	(CPP_CPU_DEFAULT_SPEC): Streamline definition.  Add K6 version.
	(CPP_K6_SPEC): New.
	(CPP_CPU_SPEC): Add K6 variant.
	(EXTRA_SPECS): Likewise.

Fri Apr  9 11:29:17 1999  Richard Henderson  <rth@cygnus.com>

	* flow.c (merge_blocks_nomove): Rewrite to properly handle two
	blocks that vanish entirely during merging.

Sat Apr 10 20:09:55 1999  John Wehle  (john@feith.com)

	* i386.md (floatsisf2, floatdisf2, floatsidf2, floatdidf2,
	floatsixf2, floatdixf2, movsicc, movhicc, movsfcc, movdfcc,
	movxfcc, movdicc): Remove unused register constraints from
	the splitters.

	* i386.md (fixuns_truncsfsi2, fixuns_truncdfsi2,
	fixuns_truncxfsi2): Delete.

	* reg-stack.c (delete_insn_for_stacker): Ensure that
	the only side effects of a PARALLEL are clobbers.
	(subst_stack_regs): Handle subst_stack_regs_pat deleting
	a PARALLEL.
	* i386.md (extendsfdf2, extenddfxf2,
	extendsfxf2): Rewrite using a splitter.
	* i386.c (output_op_from_reg): Remove.
	* i386.h: Likewise.

Sat Apr 10 13:09:18 1999  Nick Clifton  <nickc@cygnus.com>

	* config/arm/arm.c (di_operand): Allow SUBREGs as well.
	(soft_df_operand): Allow SUBREGs as well.

Sat Apr 10 06:14:31 1999  Jan Hubicka  <hubicka@paru.cas.cz>

	* extend.texi (Assembler Instructions with C Expression Operands):
	Document the i386 floating point operands.

1999-04-10  Mike Stump  <mrs@wrs.com>

	* configure.in (*-*-vxworks): Add vxWorks thread support for all
	vxWorks targets.
	* configure.in (thumb-wrs-xvworks): Add vxWorks support for thumb.
	* configure: Rebuilt.

Sat Apr 10 06:04:50 1999  Donn Terry  (donn@interix.com)

	* i386/t-interix: Use mostly system headers unchanged.
	Use system assert.h
	* fixinc/fixinc.interix: Ditto (make almost no-op).
	* config/x-interix.h (_ALL_SOURCE): add -D
	* config/x-interix.h (crti.o): Delete dependency.
	* config/xm-interix.h (ONLY_INT_FIELDS): Define only when bootstrapping.
	* i386/xm-i386-interix.h: New file.
	* i386/interix.h (ASM_OUTPUT_LIMITED_STRING): Fix warnings.
	* i386/i386-interix.h: Renamed from interix.h.
	* configure.in (interix): Use new files.
	* configure: Rebuilt.

Sat Apr 10 05:25:28 1999  Daniel Jacobowitz  <dan@debian.org>

	* rs6000/sysv4.h (CPP_OS_LINUX_SPEC): Fix conditions
	for -Dunix and -Dlinux, and remove duplicate definition.
	Change -Asystem(linux) to -Asystem(posix).
	(CPP_OS_SOLARIS_SPEC): Fix conditions for -Dunix, -Dsun,
	-DSVR4, -D__EXTENSIONS__.

	* rs6000/linux.h (CPP_PREDEFINES): Remove -Dunix,
	-Dlinux, -Asystem(linux), and -Asystem(unix).

Sat Apr 10 05:14:50 1999  Mark Elbrecht  <snowball3@usa.net>

	* i386/djgpp.h (SET_ASM_OP): Define.

	* cccp.c (DIR_SEPARATOR): Move to the top of the file.
	(is_dir_separator): New function.
	(simplify_filename): Use it.
	* collect2.c (find_a_file): Use HAVE_DOS_BASED_FILE_SYSTEM in place
	of the DIR_SEPARATOR test.
	Consider any file starting with a drivename to be absolute.
	If the absolute filename test fails and EXECUTABLE_SUFFIX is
	defined, append EXECUTABLE_SUFFIX to the file and try again.
	* cppinit.c (base_name): Use HAVE_DOS_BASED_FILE_SYSTEM
	in place of __MSDOS__ and _WIN32.
	* cppfiles.c (simplify_pathname): Likewise.
	* gcc.c (IS_DIR_SEPARATOR): Define new macro. Returns true if a
	character is a directory separator.
	(find_a_file): Use it.
	(convert_filename): Likewise.
	(process_command): Likewise.
	(do_spec_1): Likewise.
	(is_directory): Likewise.
	(main): Likewise.
	* prefix.c (IS_DIR_SEPARATOR): Define. Tests whether a character is
	a directory separator.
	(translate_name): Use it.
	(update_path): Change DIR_SEPARATOR_2 to DIR_SEPARATOR. Fix
	warning in block where '/' is changed to DIR_SEPARATOR.
	* i386/xm-djgpp.h (DIR_SEPARATOR): Set to '/'.
	(DIR_SEPARATOR_2): New macro. Set to '\'.
	(HAVE_DOS_BASED_FILESYS): Define.
	* i386/xm-mingw32.h: Updated copyright. Set
	DIR_SEPARATOR_2 to '/'. Define HAVE_DOS_BASED_FILE_SYSTEM.
	* i386/xm-os2.h: Likewise.
	* winnt/xm-winnt.h: Likewise.
	* i386/xm-dos.h: Likewise.  Add copyright.

1999-04-10  Joseph S. Myers  <jsm28@cam.ac.uk>

	* pdp11.h (TARGET_SWITCHES): Add option to vary assembler syntax.
	(TARGET_DEFAULT): Possibly use UNIX syntax.
	(TARGET_UNIX_ASM, TARGET_UNIX_ASM_DEFAULT): New macros.
	(REGISTER_NAMES): Use "r5" instead of "fp".
	(ASM_OUTPUT_ALIGN): Use ".even" directive, and abort for any
	greater alignment.
	* 2bsd.h (TARGET_UNIX_ASM_DEFAULT): Default to UNIX assembler
	syntax for 2BSD.
	* pdp11.c (output_ascii): Use working syntax for ".byte".
	(print_operand_address): Use "*" instead of "@" when using UNIX
	assembler syntax.

Sat Apr 10 03:50:12 1999  Jeffrey A Law  (law@cygnus.com)

	* rtl.h (rebuild_jump_labels): Declare.
	* jump.c (jump_optimize_1): Renamed from jump_optimize.  Make static.
	Add new argument MARK_LABELS_ONLY.  Quit after mark_all_labels if
	requested.
	(jump_optimize, rebuild_jump_labels): New wrapper functions for
	jump_optimize_1.
	* toplev.c (rest_of_compilation): Use rebuild_jump_labels instead of
	running the entire jump optimizer.

	* rtl.h (local_alloc): Returns an integer now.
	* local-alloc.c (recorded_label_ref): New file scoped variable.
	(local_alloc): Initialize recorded_label_ref to zero.  Return its
	value when local allocation has completed.
	(update_equiv_regs); If we create an equivalence for a LABEL_REF,
	set recorded_label_ref.
	* toplev.c (rest_of_compilation): Run the jump optimizer after
	register allocation and reloading if needed.

Fri Apr  9 21:02:57 1999  Krister Walfridsson  (cato@df.lth.se)

	* i386/gas.h (ASM_OUTPUT_MAX_SKIP_ALIGN): Fix typo.
	* i386/freebsd-elf.h (ASM_OUTPUT_MAX_SKIP_ALIGN): Likewise.

1999-04-09  Zack Weinberg  <zack@rabi.columbia.edu>

	* cpphash.c (special_symbol): When expanding __LINE__, use the
	top file buffer, not the top buffer.

Fri Apr  9 13:41:04 1999  Jim Wilson  <wilson@cygnus.com>

	* Makefile.in (check-g++, check-gcc, check-g77, check-objc): Add
	cd .. to TCL_LIBRARY command.

Fri Apr  9 13:04:52 1999  Nick Clifton  <nickc@cygnus.com>

	* config/arm/unknown-elf.h (SUBTARGET_CPU_DEFAULT): Only define if
	not already specified.

Fri Apr  9 11:18:55 1999  Jason Merrill  <jason@yorick.cygnus.com>

	* c-common.c (decl_attributes, A_INIT_PRIORITY): Allow arrays
	of classes, too.

Fri Apr  9 10:40:10 1999  Kaveh R. Ghazi  <ghazi@snafu.rutgers.edu>

	* rs6000.c (rs6000_override_options, ptt, rs6000_file_start,
	rs6000_float_const, rs6000_replace_regno, debug_stack_info,
	rs6000_output_load_toc_table, output_prolog, output_epilog):
	Const-ify a char*.
	(output_mi_thunk): Likewise.  Mark parameter `thunk_fndecl' with
	ATTRIBUTE_UNUSED.  Hide unused variables `r0', `sp', `toc',
	`schain', `r12', `buf' and `labelno'.
	(output_ascii): Const-ify a char*.
	(rs6000_gen_section_name): Initialize variable `last_period'.
	(rs6000_adjust_priority): Mark parameter `insn' with
	ATTRIBUTE_UNUSED.
	(rs6000_trampoline_template, rs6000_dll_import_ref,
	rs6000_longcall_ref, rs6000_encode_section_info): Const-ify a char*.

	* rs6000.h (offsettable_mem_operand, optimization_options): Add
	prototypes.

	* rs6000.md (movdi, define_split): Cast a value to HOST_WIDE_INT
	when comparing against one.

Thu Apr  8 19:20:18 1999  Jeffrey A Law  (law@cygnus.com)

	* expr.c (expand_expr, case ARRAY_REF, COMPONENT_REF, BIT_FIELD_REF):
	Do not try to optimize an aggregate address which has VOIDmode.
	Mirrors March 23 change to expand_assignment.

	* flow.c (delete_unreachable_blocks): Do not require EDGE_FALLTHRU
	for an edge when tidying an edge which connects consecutive basic
	blocks.

	* flow.c (can_delete_label_p): Do not convert a label into a
	deleted label here.

	* cse.c (flush_hash_table): New function.
	(cse_insn): Flush the hash table when we encounter a volatile asm.
	(cse_basic_block): Use flush_hash_table instead of doing it
	inline.

	* reload1.c (reload_cse_regs_1): Flush known register values if
	we encounter a volatile asm.

	* loop.c (strength_reduce): Re-enable Joern's loop improvements.

Thu Apr  8 09:37:40 1999  Nick Clifton  <nickc@cygnus.com>

	* config/arm/arm.c (arm_print_operand): Undo previous change -
	always print large constants in decimal.

Thu Apr  8 10:22:23 1999  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* configure.in (host_xm_file, build_xm_file): Include hwint.h.
	Use case statements instead of "if test -a ... -a ... -a ..."

	* machmode.h: Don't define HOST_WIDE_INT, etc. Wrap use of
	HOST_WIDE_INT in #ifdef.

	* mips.h: Include hwint.h instead of providing definitions for
	HOST_WIDE_INT, etc.  Wrap uses of HOST_WIDE_INT in #ifdef.

Thu Apr  8 06:16:14 1999  John Wehle  (john@feith.com)

	* i386.md (truncdfsf2, truncxfsf2,
	truncxfdf2): Rewrite using a splitter.

Thu Apr  8 01:26:05 1999  Arg Haas  (ahaas@neosoft.com)
			  Jeffrey A Law  (law@cygnus.com)

	* freebsd-elf.h (ASM_OUTPUT_MAX_SKIP_ALIGN): Avoid ambiguous
	else statement.
	* gas.h (ASM_OUTPUT_MAX_SKIP_ALIGN): Likewise.
	* linux.h (ASM_OUTPUT_MAX_SKIP_ALIGN): Likewise.
	* openbsd.h (ASM_OUTPUT_MAX_SKIP_ALIGN): Likewise.

Wed Apr  7 22:40:19 1999  Jim Wilson  <wilson@cygnus.com>

	* i960/i960.c (i960_function_prologue): Don't save static chain
	pointer.
	* i960/i960.h (STACK_CHAIN_REGNUM): Change from r3 to g12.
	(TRAMPOLINE_TEMPLATE): Likewise.
	(FRAME_POINTER_REQUIRED): Check current_function_has_nonlocal_goto.
	* i960/i960.md (nonlocal_goto): Rewrite.

Tue Apr  6 17:49:49 1999  Philip Blundell  <pb@nexus.co.uk>

	* config/arm/lib1funcs.asm: Test for __ELF__ not __elf__.

Wed Apr  7 14:07:34 1999  Jeffrey A Law  (law@cygnus.com)

	* h8300.c (h8300_adjust_insn_length): Also avoid recognizing
	ADDR_VEC and ADDR_DIFF_VEC insns.

	* h8300.c (h8300_adjust_insn_length): Avoid trying to recognize
	USE, CLOBBER or SEQUENCE insns.

	* unroll.c (unroll_loop): For HAVE_cc0 machines, adjust copy_end_luid
	to account for the uncopied insn that sets cc0 at the end of the loop.

	* unroll.c (copy_loop_body): Always ensure at least two insns
	are in the copied loop.

Wed Apr  7 14:52:18 1999  Catherine Moore  <clm@cygnus.com>

	* config/mips/elf.h (MAKE_DECL_ONE_ONLY): Define.
	(UNIQUE_SECTION_P): Define.

1999-04-07  Bruce Korb  <ddsinc09@ix.netcom.com>

	* fixinc/inclhack.tpl & fixincl.tpl:
	Remove dynamic content from generated files

Wed Apr  7 13:16:22 1999  John Wehle  (john@feith.com)

	* i386.c (output_move_memory): Remove.
	* i386.h: Likewise.

	* i386.md (movsi, movhi, movstricthi, movqi, movstrictqi,
	movsf, movdf, movxf, movdi): Check no_new_pseudos instead
	of (reload_in_progress | reload_completed).

Wed Apr  7 03:16:45 1999  Richard Henderson  <rth@cygnus.com>

	* alpha.c (reg_no_subreg_operand): New function.
	* alpha.h (PREDICATE_CODES): Add it.
	* alpha.md (floatdi?f patterns): Use it for op1.

	* alpha.c (alpha_end_function): Don't flag weak functions.

Wed Apr  7 02:11:55 1999  Richard Henderson  <rth@cygnus.com>

	* expr.c (expand_builtin) [BUILT_IN_RETURN_ADDRESS]: Use
	copy_to_mode_reg; don't force constants into a register.

Tue Apr  6 22:55:25 1999  Richard Henderson  <rth@cygnus.com>

	* toplev.c (compile_file): Typo flow_dump -> flow2_dump.

1999-04-06  Joseph S. Myers  <jsm28@cam.ac.uk>

	* pdp11.c (simple_memory_operand): Add default case in switch.
	* pdp11.h (TARGET_SWITCHES): Add help strings.
	(NOTICE_UPDATE_CC): Don't include excess argument to format.
	(ASM_OUTPUT_DOUBLE_INT): Remove.

Tue Apr  6 22:09:40 1999  Richard Henderson  <rth@cygnus.com>

	* expr.c (expand_builtin_setjmp): Put setjmp return label on
	nonlocal_goto_handler_labels for flow.

Tue Apr  6 22:05:21 1999  Jan Hubicka  <hubicka@paru.cas.cz>
			  Richard Henderson  <rth@cygnus.com>

	* flow.c (verify_flow_info): New function.
	(find_basic_blocks): Call it if ENABLE_CHECKING.
	(merge_blocks): Don't merge if there are non-deletable labels.
	* toplev.c (fatal_insn): Allow a printf-style arg list.
	* toplev.h (fatal_insn): Update prototype.

Tue Apr  6 16:18:58 1999  Jan Hubicka  <hubicka@paru.cas.cz>

	* flow.c (split_edge) update correctly flow graph, disable
	EDGE_CRITICAL flag on the split edge, update NUSES for new label.

Tue Apr  6 15:47:51 1999  Richard Henderson  <rth@cygnus.com>

	* emit-rtl.c (gen_rtx_CONST_DOUBLE): Use XWINT not XINT.
	Clear third and following slots, if they exist.

Tue Apr  6 15:45:28 1999  Richard Henderson  <rth@cygnus.com>

	* flow.c (create_basic_block): Make sure the bb note is in the block.
	(can_delete_note_p): Rename from delete_note_p.
	(delete_insn_chain): Preserve undeleteable labels too.
	(tidy_fallthru_edge): Use next_real_insn instead of confusing
	inline code.

1999-04-06  Zack Weinberg  <zack@rabi.columbia.edu>

	* cppexp.c (parse_charconst): Initialize c.
	(cpp_parse_expr): Initialize rprio.
	* cppfiles.c (merge_include_chains): Initialize prev.
	(finclude): Set fp->line_base to fp->buf before returning.
	* cpphash.c (macroexpand): Initialize token.
	* cppspec.c (lang_specific_driver): Change suff to
	const char *const *.

1999-04-06  Zack Weinberg  <zack@rabi.columbia.edu>

	* cppinit.c (install_predefs): Delete function.
	(cpp_start_read): Don't call install_predefs.
	(cpp_handle_option): Remove case 'u' and all refs to
	opts->inhibit_predefs.
	(print_help): Don't mention -undef.
	(initialize_builtins): Define __HAVE_BUILTIN_SETJMP__, to
	match cccp.
	* cpplib.h (struct cpp_options): Remove inhibit_predefs
	member.

	* cccp.c (predefs): Delete variable.
	(main): Remove case 'u' in argument parse loop,
	'inhibit_predefs' variable, and the code block that would
	process CPP_PREDEFINES.
	(initialize_builtins): Don't define __OBJC__, the driver will
	do that.

	* gcc.c (default_compilers): Remove -undef from all specs that
	invoke a C preprocessor.
	* ch/lang-specs.h: Likewise.
	* cp/lang-specs.h: Likewise.
	* f/lang-specs.h: Likewise.
	* objc/lang-specs.h: Likewise.

Mon Apr  5 11:55:31 1999  Donn Terry  (donn@interix.com)

	* Makefile.in (SUBDIR_FLAGS_TO_PASS): Fix misapplied patch.

Mon Apr  5 11:51:38 1999  Jeffrey A Law  (law@cygnus.com)

	* m68k.md (movdf): Hide GPR sources & destinations from regclass.

Mon Apr  5 09:54:42 1999  Jeff Law  (law@cygnus.com)

	* version.c: Bump for snapshot.

Mon Apr  5 05:55:15 1999  Bruce Korb  <ddsinc09@ix.netcom.com>

	* fixincl.tpl: Separate "-e" from its argument, a la
	the Sat Apr  3 17:05:13 1999 fix.
	* genfixes: Ensure that the server shell is _NOT_ csh.

Mon Apr  5 03:52:30 1999  Jeff Law  (law@cygnus.com)

	* version.c: Bump for snapshot.

Mon Apr  5 04:47:14 1999  Jeffrey A Law  (law@cygnus.com)

	* i386.c (x86_double_with_add): Turn off for Pentium and PPro.
	(small_shift_operand, output_ashlsi3): New functions.
	* i386.h (small_shift_operand, output_ashlsi3): Declare.
	* i386.md (ashlsi3): Simplify ahlsi3 patterns.  Remove splitters
	that are no longer needed.

Sun Apr  4 04:05:04 1999  Jeffrey A Law  (law@cygnus.com)

	* stmt.c (expand_loop_end): When copying the loop exit test,
	do not walk into a nested loop.

Sun Apr  4 00:14:54 1999  Jeffrey A Law  (law@cygnus.com)

	* fixinc/hackshell.tpl: Skip links to directories, to avoid
	removing them.
	* fixinc/inclhack.tpl: Likewise.
	* fixinc/fixinc.sh, fixinc/fixincl.x, fixinc/inclhack.sh: Rebuilt.

Sat Apr  3 23:46:13 1999  David Edelsohn  <edelsohn@gnu.org>

	* rs6000.md (addsi3, iorsi3, xorsi3, adddi3, iordi3, xordi3,
	movsi_got, movsi, movsf): Use no_new_pseudos.
	* rs6000.c (rs6000_got_register): Likewise.
	(offsettable_mem_opereand): Use || not |.

Sat Apr  3 22:02:56 1999  Jeffrey A Law  (law@cygnus.com)

	* acconfig.h (ENABLE_CHECKING): Remove redundant #undef.
	* config.in: Rebuilt.

Sat Apr  3 16:22:59 1999  Toshiyasu Morita  (tm@netcom.com)

	* gcc.texi: Add info on regmove pass.

	* regmove.c (fixup_match_1): Consistently evaluate
	HAVE_POST_INCREMENT and HAVE_POST_DECREMENT.

Sat Apr  3 19:21:05 1999  Alexandre Oliva  <oliva@dcc.unicamp.br>

	* configure.in (DEFAULT_LINKER, DEFAULT_ASSEMBLER): Use grep
	instead of test and sed to check whether they're GNU programs.
	* configure: Rebuilt.

Sat Apr  3 17:57:35 1999  Alexandre Oliva  <oliva@dcc.unicamp.br>

	* Makefile.in (install-headers-tar, install-headers-cpio): Avoid
	problems with CDPATH.
	Reported by Ralf Canis <canis@bigfoot.com>

Sat Apr  3 13:50:16 1999  Jeffrey A Law  (law@cygnus.com)

	* fixinc.x86-linux-gnu: Deleted.

Sat Apr  3 17:05:13 1999  Alexandre Oliva  <oliva@dcc.unicamp.br>

	* inclhack.tpl: Insert spaces between `sed -e' and '...'.
	Reported by Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
	* fixinc/fixincl.sh, fixinc/fixincl.x, fixinc/inclhack.sh: Regen.

Sat Apr  3 14:54:46 1999  Craig Burley  <craig@jcb-sc.com>

	* tree.def (BLOCK): Fix typo in comment.

Sat Apr  3 00:53:29 1999  John Wehle  (john@feith.com)

	* i386.md (floatsisf2, floatdisf2, floatsidf2, floatdidf2,
	floatsixf2, floatdixf2): Rewrite using a splitter.

Fri Apr  2 17:36:10 1999  Nick Clifton  <nickc@cygnus.com>

	* config/arm/arm.c (arm_print_operand): Print large constants in
	hex rather than decimal.

Fri Apr  2 17:23:58 1999  Nick Clifton  <nickc@cygnus.com>

	* print-rtl.c (print_rtx): Use both HOST_WIDE_INT_PRINT_DEC
	and HOST_WIDE_INT_PRINT_HEX to display constants.

1999-04-02  Zack Weinberg  <zack@rabi.columbia.edu>

	* config/i386/i386.h: Document all TARGET_SWITCHES or add
	explicit null initializer.

	* config/i386/cygwin.h: Document all SUBTARGET_SWITCHES.
	* config/i386/dgux.h: Likewise.
	* config/i386/osf1elf.h: Likewise.
	* config/i386/win32.h: Likewise.
	* config/i386/osfrose.h: Likewise.  Drop obsolete -mno-ident option.

Fri Apr  2 17:49:44 1999  Toshiyasu Morita  <tm@netcom.com>

	* regmove.c (fixup_match_1): Remove now useless if (0).

Sat Apr  3 11:37:20 1999  Michael Hayes  <m.hayes@elec.canterbury.ac.nz>

	* tm.texi (USE_LOAD_POST_DECREMENT, USE_LOAD_PRE_DECREMENT,
	USE_STORE_POST_DECREMENT, USE_STORE_PRE_DECREMENT): Document.
	(USE_LOAD_POST_INCREMENT, USE_LOAD_PRE_INCREMENT,
	USE_STORE_POST_INCREMENT, USE_STORE_PRE_INCREMENT): Fix documentation.

	* rtl.h	(USE_LOAD_POST_DECREMENT, USE_LOAD_PRE_DECREMENT,
	USE_STORE_POST_DECREMENT, USE_STORE_PRE_DECREMENT,
	USE_LOAD_POST_INCREMENT, USE_LOAD_PRE_INCREMENT,
	USE_STORE_POST_INCREMENT, USE_STORE_PRE_INCREMENT): Provide default
	definition.

	* expr.c (USE_LOAD_POST_INCREMENT, USE_LOAD_PRE_INCREMENT,
	USE_STORE_POST_INCREMENT, USE_STORE_PRE_INCREMENT): Delete default
	definition.

Fri Apr  2 16:03:05 1999  Jeffrey A Law  (law@cygnus.com)

	* fixinc.dgux, fixinc.interix, fixinc.irix, fixinc.ptx: Deleted.
	* fixinc.sco, fixinc.svr4, fixinc.winnt, fixinc.wrap: Likewise.

Fri Apr  2 15:46:25 1999  Donn Terry  (donn@interix.com)

	* configure.in: Set and substitute quoted_cc_set_by_configure.
	* configure: Rebuilt.
	* Makefile.in (SUBDIR_FLAGS_TO_PASS): Fix quoting problem with ``.

Fri Apr  2 14:35:45 1999  Stan Cox  <scox@cygnus.com>

	* config/i386/cygwin.h (CPP_SPEC): Use mingw_include_path instead
	of a hardcoded path for -mno-cygwin.
	(mingw_include_path): New.

1999-04-02  Joseph S. Myers  <jsm28@cam.ac.uk>

	* pdp11.c: Include "recog.h".
	(output_function_prologue): Remove unused variables `nregs', `i',
	`offset'.
	(output_function_epilogue): Remove unused variables
	`may_call_alloca', `nregs', `regno', `adjust_fp'.
	(output_ascii): Mark as returning void.
	(print_operand_address: Likewise.
	(simple_memory_operand): Remove unused variables `plus0', `plus1',
	`offset'.
	* pdp11.h: Declare functions `arith_operand',
	`const_immediate_operand', `expand_shift_operand',
	`legitimate_address_p', `notice_update_cc_on_set', `output_ascii',
	`output_function_epilogue', `output_function_prologue',
	`print_operand_address', `register_move_cost',
	`simple_memory_operand'.
	(HARD_REGNO_MODE_OK): Parenthesize `REGNO' arg.
	(REGNO_REG_CLASS): Likewise.
	* pdp11.md: Add explicit `int' to `static count' (in two places).
	(addhi3): Add explicit braces to avoid ambiguous else.
	(addqi3): Likewise.
	(ashlhi3): Likewise.

Fri Apr  2 14:17:10 1999  Jerry James  <jerry@cs.ucsb.edu>

	* gcc/invoke.texi: Add documentation for additional supported
	MIPS CPU types, options -mips16 and -mentry, and ABI and ISA
	defaults.

Fri Apr  2 14:12:06 1999  John Wehle  (john@feith.com)

	* i386.md: Delete floating point compare, add, subtract,
	multiply, and divide patterns which allowed integer
	operands.
	* i386.c (output_387_binary_op): Delete unused code.
	(output_float_compare): Likewise.

Fri Apr  2 11:53:37 1999  John Wehle  (john@feith.com)

	* i386.md (movsf+1, movdf+1, movxf+1): Update constraints
	so that SECONDARY_MEMORY_RELOAD is used.  Remove dead code.

1999-04-02  Bruce Korb  <ddsinc09@ix.netcom.com>

	* fixinc/mkfixinc.sh: Added support for x86-interix.
	* fixinc/fixinc.interix: Fixincludes script, slight changes
	from ./fixinc.interix.  Untested (needs interix box).
	* fixinc/inclhack.def:
	Complete the change to the 'fixinc.tmp' file.
	Fixed regex for finding C++ headers.
	* fixincl.x, fixincl.sh, inclhack.sh: Regenerate.

Fri Apr  2 11:36:12 1999  Jan Hubicka  (hubicka@paru.cas.cz)

	* i386.c (print_operand_address, case REG): Do not use ESI addressing
	mode for the K6.

	* i386.c (print_operand_address, case MULT): Use more efficient
	encoding (mult (reg) (const_int 2)).

Thu Apr  1 17:01:50 1999  Richard Henderson  <rth@cygnus.com>

	Move over patch from Bernd Schmidt from GC branch:
	* emit-rtl.c (gen_rtx_CONST_DOUBLE): New function.
	(gen_rtx): Call it.  Tidy cases.
	* rtl.h (gen_rtx_CONST_DOUBLE): Prototype it.
	* gengenrtl.c: Add commentary.
	(special_rtx): Also match CONST_DOUBLE.
	(gencode): Emit call to memset instead of bzero.

Fri Apr  2 12:58:26 1999  Michael Hayes  <m.hayes@elec.canterbury.ac.nz>

	* config/c4x/c4x.md (ashlhi3, lshrhi3, ashrhi3): Force operand 1
	into a register if shift count not constant.
	(ashlhi3_reg, lshrhi3_reg, ashrhi3_reg): Ensure that operand 1
	is a register.

Fri Apr  2 12:19:17 1999  Michael Hayes  <m.hayes@elec.canterbury.ac.nz>

	* config/c4x/c4x.md (*db): Enable pattern if TARGET_LOOP_UNSIGNED
	is nonzero.
	(movstrqi_small, movstrqi_large, *cmpstrqi): Add + modifier to address
	register constraints.
	(*movhi_clobber+1): Modify splitter pattern to handle destination
	register that is used in the source address.
	(*xorhi3_clobber): Replace AND with XOR in call to legitimize_operands.

Fri Apr  2 12:16:15 1999  Michael Hayes  <m.hayes@elec.canterbury.ac.nz>

	* config/c4x/c4x.h: Added more comments.

Fri Apr  2 11:58:22 1999  Michael Hayes  <m.hayes@elec.canterbury.ac.nz>

	* config/c4x/c4x.c (c4x_emit_move_sequence): Force invalid QImode
	constants into memory if we get called directly from gen_move_insn
	rather than emit_move_insn.
	(c4x_legitimize_address): Fix up LABEL_REF addresses.

Thu Apr  1 12:04:05 1999  Jim Wilson  <wilson@cygnus.com>

	* expr.c (store_field): When check direct_store, assume all complex
	modes can be directly stored.

1999-04-01  Bruce Korb  <ddsinc09@ix.netcom.com>

	* fixinc/genfixes: New shell script that runs autogen
	to create the generated files.

1999-04-01  Manfred Hollstein  <manfred@s-direktnet.de>

	* Makefile.in (cppmain$(exeext)): Depend on intl.o.  Link in intl.o.

Thu Apr  1 03:48:34 1999  H.J. Lu  (hjl@gnu.org)

	* i386.c (output_fp_conditional_move): Abort for LT, LE, GE, and GT
	signed integer comparisons.

	* i386.c (output_int_conditional_move): Use "enum rtx_code" for code
	type.

	* i386.c (notice_update_cc): No need to check the INT mode for
	conditional moves since FLOAT conditional moves don't affect cc0.

Thu Apr  1 02:17:18 1999  Jeffrey A Law  (law@cygnus.com)

	* fixinc/inclhack.def (zzz_ki_syscalls, zzz_time): Fix trigger
	string to only match on hpux11.
	* fixinc/fixincl.x, fixinc/inclhack.sh, fixinc/fixinc.sh: Rebuilt.

Thu Apr  1 01:09:27 1999  Alexandre Oliva  <oliva@dcc.unicamp.br>

	* fixinc/hackshell.tpl: Complete transition to fixinc.tmp.
	* fixinc/inclhack.sh: Rebuilt.

	* fixinc/inclhack.def: Fix typos in c_asm.h fix.
	* fixinc/fixincl.x, fixinc/inclhack.sh, fixinc/fixinc.sh: Rebuilt.

Wed Mar 31 17:20:11 1999  Jeffrey A Law  (law@cygnus.com)

	* toplev.c (rest_of_compilation): Allow dbr_schedule to write to
	the dump file too.

Wed Mar 31 12:32:43 1999  Richard Henderson  <rth@cygnus.com>

	* flow.c (find_basic_blocks): New argument `do_cleanup'.
	Conditionally call delete_unreachable_blocks.
	(free_basic_block_vars): Zero ENTRY/EXIT data.
	(allocate_for_life_analysis): Kill.  Split into...
	(allocate_bb_life_data, allocate_reg_life_data): ... new functions.
	(life_analysis_1): Update.
	* gcse.c (gcse_main): Update find_basic_blocks call.
	* toplev.c (rest_of_compilation): Likewise.
	* stupid.c (stupid_life_analysis): Update life data calls.
	* rtl.h, output.h: Update prototypes.

Wed Mar 31 12:10:00 1999  Bruce Korb  <ddsinc09@ix.netcom.com>

	* inclhack.def (several): Added spaces in tests to ensure
	correct shell syntax.  Added c_asm.h fix from fixincludes.
	Also corrected the corrected fix to C++ comments :-}

	* inclhack.tpl: Changed method of traversing symlink trees
	so that file name matching will work correctly.

	* fixincl.c, hackshell.tpl: Fallout from above.
	* fixincl.x, inclhack.sh, fixincl.sh: Rebuilt.

Tue Mar 30 10:43:49 1999  Philip Blundell  <pb@nexus.co.uk>

	* config/arm/aout.h (DBX_DEBUGGING_INFO): Avoid redefinition if
	dbxelf.h was previously included.
	(CPP_APCS_PC_DEFAULT_SPEC): No need to undefine.

	* config/arm/linux-elf.h (FP_DEFAULT): Correctly override the
	definition from arm.h.

Wed Mar 31 10:33:37 1999  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* Makefile.in (c-gperf.h): Generate using gperf language 'C', not
	'KR-C', so gperf uses the `const' keyword on strings.

	* c-parse.gperf (resword): Const-ify a char*.

Wed Mar 31 01:49:31 1999  Ian Lance Taylor  <ian@zembu.com>

	* t-rtems (LIMITS_H_TEST, LIBGCC2_INCLUDES): Define.

Wed Mar 31 00:50:48 1999  Jeffrey A Law  (law@cygnus.com)

	* system.h (STDERR_FILENO): Fix typo.

	* inclhack.def (bool): Also fix bogus bool in curses_colr/curses.h.
	* fixincl.x, inclhack.sh, fixincl.sh: Rebuilt.

Tue Mar 30 20:51:40 1999  Mark Mitchell  <mark@codesourcery.com>

	* alias.c (alias_set_compare): Remove.
	(record_alias_subset): Use splay_tree_compare_ints instead of
	alias_set_compare.
	(init_alias_once): Likewise.
	* cse.c: Include splay-tree.h.
	(reg_qty): Remove.
	(reg_tick): Likewise.
	(reg_table): Likewise.
	(cse_reg_info): New structure.
	(cse_reg_info_free_list): New variable.
	(cse_reg_info_tree): Likewise.
	(cached_regno): Likewise.
	(cached_cse_reg_info): Likewise.
	(all_minus_one): Remove.
	(consec_ints): Likewise.
	(GET_CSE_REG_INFO): New macro.
	(REG_TICK): Likewise.  Use throughout instead of reg_tick.
	(REG_IN_TABLE): Likewise.  Use throughout instead of reg_in_table.
	(REG_QTY): Likewise.  Use throughout instead of reg_qty.
	(get_cse_reg_info): New function.
	(free_cse_reg_info): Likewise.
	(new_basic_block): Reinitialize cse_reg_info_tree instead of
	reg_tick, all_minus_one, and consec_ints.
	* Makefile.in (cse.o): Depend on splay-tree.h

Tue Mar 30 13:19:36 1999  Jason Merrill  <jason@yorick.cygnus.com>

	* libgcc2.c (throw_helper): Just return the SP offset, rather than
	a whole udata.  Include args_size in the offset.
	(__throw, __rethrow): Adjust.

Tue Mar 30 11:39:27 1999  Craig Burley  <craig@jcb-sc.com>

	* extend.texi (Extended Asm): Delete spurious `b' before
	`@end example', which was confusing texi2html.

Tue Mar 30 00:26:34 1999  Jason Merrill  <jason@yorick.cygnus.com>

	* dwarf2out.c (output_line_info): Don't emit redundant info.
	Do start a new row if the file changes and the line # doesn't.

Mon Mar 29 15:48:39 1999  Jason Merrill  <jason@yorick.cygnus.com>

	* invoke.texi (Invoking G++, C++ Dialect Options): Update.

Mon Mar 29 15:05:39 1999  Richard Henderson  <rth@cygnus.com>

	* except.c (start_dynamic_handler): Force jmp_buf address to
	and operand before moving to memory.

Mon Mar 29 15:11:10 1999  Craig Burley  <craig@jcb-sc.com>

	* invoke.texi (Code Gen Options): Attempt to clarify
	-fcheck-memory-usage.  Minor edits to -fprefix-function-name.

Mon Mar 29 20:52:47 1999  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* loop.c (maybe_eliminate_biv): For libcalls that set a giv, skip to
	end of libcall.

Mon Mar 29 20:35:49 1999  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* sh.md (mulsi3): Tag an extra REG_EQUAL note to the middle insn.

Mon Mar 29 11:50:34 1999  Jerry Quinn  <jquinn@nortelnetworks.com>

	* pa.h (HAVE_PRE_INCREMENT): Disable when optimizing for a PA8000
	class machine.
	(HAVE_PRE_DECREMENT, HAVE_POST_INCREMENT): Likewise.
	(HAVE_POST_DECREMENT): Likewise.

Mon Mar 29 08:24:43 1999  Bruce Korb  <korb@datadesign.com>

	* fixinc/mkfixinc.sh: Fix portability problems with old shells.

	* fixinc/README: Updated for release announcement

Sun Mar 28 20:26:55 1999  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* recog.h (insn_outfun, insn_operand_predicate): Add prototype
	arguments.

	* rtl.h (note_stores): Likewise.

	* rtlanal.c (note_stores): Likewise.

Sun Mar 28 15:34:28 1999  Richard Henderson  <rth@cygnus.com>

	* varasm.c (output_constant_pool): Always mark the constant pool.

Sun Mar 28 16:09:01 1999  Jerry Quinn  <jquinn@nortelnetworks.com>

	* pa.md (pa7100LCshiftmem, pa7100LCalu): Change simultaneity.  Use
	shift/mem ops in pa7100LCalu.

	* pa.c (pa_adjust_cost): Don't do cost adjustments on pa8000.
	(pa_reorg): Don't call pa_combine_instructions on pa8000.

Sun Mar 28 15:27:26 1999  Jeffrey A Law  (law@cygnus.com)

	* reload1.c (reload): Remove accidental code duplication.

Sun Mar 28 12:22:12 1999  Robert Lipe  (robertlipe@usa.net)

	* i386/sysv5.h: New file to describe UnixWare7/SVR5.
	* configure.in (i?86-UnixWare7*-sysv): Use it.
	* i386/udk.h: Use sysv5.h.  Now uses Dwarf-2.

Sun Mar 28 01:15:04 1999  Jeff Law  (law@cygnus.com)

	* version.c: Bump for snapshot.

Sun Mar 28 00:44:27 1999  Jeffrey A Law  (law@cygnus.com)

	* sdbout.c (sdbout_symbol): Do not call build_pointer_type, build
	one on the fly and do not cache the result.

	* gcc.cps, cpp.cps: Delete unwanted files.

Sat Mar 27 23:37:40 1999  John Wehle  (john@feith.com)

	* i386.md (movdicc+3, movdicc+4): Rewrite using split_di.
	* i386.c (output_int_conditional_move): Delete unused code.

Sat Mar 27 21:17:36 1999  David Edelsohn  <edelsohn@gnu.org>

	* rs6000/{aix41.h,aix43.h} (ASM_CPU_SPEC): Add 604e.

Sat Mar 27 16:13:50 1999  Jeffrey A Law  (law@cygnus.com)

	* flow.c (mark_used_regs): Improve handling of ASMs.

1999-03-26  Zack Weinberg  <zack@rabi.columbia.edu>

	* Makefile.in (xcpp, cppspec.o): New targets.
	(CPP_INSTALL_NAME): New macro.
	(install-cpp): Install xcpp.  Use CPP_INSTALL_NAME.
	(all.build, start.encap): Build xcpp.

	* cppspec.c: New file, implements argument filtering for a
	user-visible C preprocessor.
	* cpp.sh: Removed.

Fri Mar 26 20:41:46 1999  Jim Wilson  <wilson@cygnus.com>

	* Makefile.in (stmp-fixinc): Use tooldir instead of gcc_tooldir.

Fri Mar 26 16:02:37 1999  Nick Clifton  <nickc@cygnus.com>

	* configure.in (arm-*-vxworks*): Just include arm/vxarm.h.
	* configure: Regenerate.
	* config/arm/vxarm.h: Define SUBTARGET_CPU_DEFAULT before
	including arm/coff.h

1999-02-16  Scott Bambrough  <scottb@corelcomputer.com>

	* configure.in (arm*-*-linux-gnu*): Set thread_file to 'posix' if
	--enable-threads[={yes,pthreads,posix}] is passed as a command
	line parameter to configure.

	* configure: Regenerate.

	* gcc/config/arm/t-linux (TARGET_LIBGCC2_CFLAGS): Include -fPIC.

Fri Mar 26 19:42:19 1999  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* loop.c (combine_givs): Fix index into can_combine when doing
	benefit adjustment for remaining givs when having combined a giv.

Fri Mar 26 11:38:01 1999  Nick Clifton  <nickc@cygnus.com>

	* config/arm/t-arm-elf (EXTRA_MULTILIB_PARTS): Define.

Fri Mar 26 10:48:27 1999  Nick Clifton  <nickc@cygnus.com>

	* config/arm/linux-elf.h: Include dbxelf.h

Fri Mar 26 10:43:47 1999  Nick Clifton  <nickc@cygnus.com>

	* config/svr4.h: Include new header file dbxelf.h.
	(DBX_DEBUGGING_INFO): Remove definition.
	(DBX_USE_BINCL): Remove definition.
	(DBX_BLOCKS_FUNCTION_RELATIVE): Remove definition.
	(ASM_IDENTIFY_GCC): Remove definition.
	(ASM_IDENTIFY_GCC_AFTER_SOURCE): Remove definition.
	(ASM_OUTPUT_SOURCE_LINE): Remove definition.
	(DBX_FUNCTION_FIRST): Remove definition.
	(DBX_OUTPUT_MAIN_SOURCE_FILE_END): Remove definition.

	* config/elfos.h: Include new header file dbxelf.h.
	(DBX_DEBUGGING_INFO): Remove definition.
	(DBX_BLOCKS_FUNCTION_RELATIVE): Remove definition.
	(ASM_IDENTIFY_GCC): Remove definition.
	(ASM_IDENTIFY_GCC_AFTER_SOURCE): Remove definition.
	(ASM_OUTPUT_SOURCE_LINE): Remove definition.
	(DBX_FUNCTION_FIRST): Remove definition.

	* config/dbxelf.h: New header file.
	(DBX_DEBUGGING_INFO): Define.
	(DBX_BLOCKS_FUNCTION_RELATIVE): Define.
	(DBX_FUNCTION_FIRST): Define.
	(DBX_USE_BINCL): Define.
	(DBX_CONTIN_LENGTH): Define.
	(ASM_IDENTIFY_GCC): Define.
	(ASM_IDENTIFY_GCC_AFTER_SOURCE): Define.
	(ASM_OUTPUT_SOURCE_LINE): Define.
	(DBX_OUTPUT_MAIN_SOURCE_FILE_END): Define.

Fri Mar 26 01:59:15 1999  "Charles M. Hannum"  <root@ihack.net>

	* fold-const.c (fold_truthop): Optimize bitfield references with
	different masks as long as their size and bit position are the same.

	* fold-const.c (fold_truthop): Build a type for both the lhs and
	rhs and use it appropriately.

	* fold-const.c (fold_truthop): Mask the lhs and rhs after merging
	adjacent bitfield references.

	* fold-const.c (fold_truthop): Verify that the lhs and rhs are
	in the same bit position when optimizing bitfield references
	which have the same mask.

Thu Mar 25 22:53:27 1999  Martin von Löwis  <loewis@informatik.hu-berlin.de>

	* gcc.texi (Copy Assignment): New node.

1999-03-25  Zack Weinberg  <zack@rabi.columbia.edu>

	* gcc.c: Compile unconditionally all code formerly dependent
	on #ifdef LANG_SPECIFIC_DRIVER.
	* gccspec.c: New file with stub lang_specific_driver,
	lang_specific_pre_link.
	* Makefile.in: Link gccspec.o into xgcc.  Add rule to compile

Thu Mar 25 21:08:02 1999  Jason Merrill  <jason@yorick.cygnus.com>

	* gcc.texi (Temporaries): Update.

Thu Mar 25 16:53:53 1999  Richard Henderson  <rth@cygnus.com>

	* combine.c (distribute_notes): Place REG_LABEL also where
	REG_EQUAL indicates.

Thu Mar 25 12:46:37 1999  Jim Wilson  <wilson@cygnus.com>

	* a29k/a29k.h (TARGET_SWITCHES): Add doc strings.
	* i960/i960.h (TARGET_SWITCHES): Add doc strings.
	* invoke.texi (a29k): Add documentation for -mno-multm option.

Thu Mar 25 14:04:54 1999  Andrew MacLeod  <amacleod@cygnus.com>

	* rtl.texi (RTX_FRAME_RELATED_P): Add documentation.
	* rtl.h (struct rtx_def): Update comment for frame_related field.
	(set_unique_reg_note): Declare prototype.
	* dwarf2out.c (dwarf2out_frame_debug_expr): Split out from
	'dwarf2out_frame_debug' to handle only expressions, and process
	component parts of a PARALLEL expression.
	(dwarf2out_frame_debug): Process insns only, and call
	new function 'dwarf2out_frame_debug_expr' for patterns.
	* emit-rtl.c (set_unique_reg_note): New function to add a reg note,
	but if there is an existing one, delete it first.
	* expmed.c (expand_mult, expand_divmod): Use set_unique_reg_note.
	* optabs.c (add_equal_note, expand_binop): Use set_unique_reg_note.
	(emit_no_conflict_block, emit_libcall_block): Use set_unique_reg_note.
	(expand_fix): Use set_unique_reg_note.

Thu Mar 25 11:47:49 1999  Art Haas  <ahaas@neosoft.com>

	* tlink.c (symbol_hash_newfunc): Remove redundant call to
	hash_newfunc.
	(file_hash_newfunc, demangled_hash_newfunc): Likewise.

Thu Mar 25 10:05:56 1999  Richard Henderson  <rth@cygnus.com>

	* i386.h (PREFERRED_STACK_BOUNDARY): Set to 128.

1999-03-25  Philip Blundell  <pb@nexus.co.uk>

	Based on patch from Jim Studt  <jim@federated.com>:
	* config/arm/linux-elf.h (STARTFILE_SPEC, ENDFILE_SPEC): Copy
	definitions from config/linux.h.
	(DBX_BLOCKS_FUNCTION_RELATIVE): Define to 1.

Thu Mar 25 02:12:42 1999  Finn Hakansson  <finn@axis.com>

	* loop.c (strength_reduce): Correct a comment.

	* rtl.h (MEM_COPY_ATTRIBUTES): Remove unnecessary ending backslash.

Thu Mar 25 02:02:13 1999  Axel Thimm  <Axel.Thimm@physik.fu-berlin.de>

	* Makefile.in (RANLIB_TEST): Improve test.

Thu Mar 25 01:15:33 1999  Donn Terry  <donn@interix.com>

	* combine.c (force_to_mode, case PLUS): Use sign extended mask
	when masking the low bits out of a constant.

Tue Mar 23 15:45:25 1999  Richard Earnshaw  (rearnsha@arm.com)
			  Jeff Law  <law@cygnus.com>

	* fold-const.c (make_range): If orig_type is unset, set it as soon
	as we know the type.  Remove now unnecessary set of orig_type for
	conversions.

Wed Mar 24 23:27:25 1999  Mark Elbrecht  <snowball3@usa.net>
			  Jeff Law  <law@cygnus.com>

	* system.h (STDIN_FILENO): Provide default definition if one is not
	provided by the system header files.
	(STDOUT_FILENO, STDERR_FILENO): Likewise.

	* i386/xm-djgpp.h (COLLECT2_HOST_INITIALIZATION): New macro.
	* collect2.c (main): Use it.
	(pexecute_pid): New variable. Holds return value from call to pexecute.
	(collect2_execute): Rework to use pexecute instead of fork.
	(collect2_wait): Use pwait() instead of wait().

	* i386/djgpp.h: Fix typo.

Wed Mar 24 23:24:30 1999  Jeffrey A Law  (law@cygnus.com)

	* fixinc/mkfixinc.sh: Recognize cygwin* instead of only
	cygwin32.

Wed Mar 24 15:44:12 1999  Nick Clifton  <nickc@cygnus.com>

	* config/m32r/m32r.c (init_idents): Accept both NAME and __NAME__
	versions of attribute names and values.
	(m32r_valid_machine_decl_attribute): Likewise.
	(m32r_encode_section_info): Likewise.

Wed Mar 24 21:42:15 1999  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* reload1.c (choose_reload_regs): If output-reloading for a
	simple move insn, try to inherit an equivalence for the input.

1999-02-24  Mike Stump  <mrs@wrs.com>

	* arm/aout.h (DBX_OUTPUT_MAIN_SOURCE_FILENAME): Fix quoting.

1999-03-24  Jim Blandy  <jimb@zwingli.cygnus.com>

	* libgcc2.c (__CTOR_LIST__, __DTOR_LIST__): Initialize on all
	platforms.

Wed Mar 24 01:35:01 1999  Geoff Keating  <geoffk@ozemail.com.au>

	* fold-const.c (fold): Recognize a rotate by an unsigned amount.

Tue Mar 23 23:32:14 1999  Jeffrey A Law  (law@cygnus.com)

	* pa.md (rotlsi3): New expander.  Synthesize a variable rotate
	left using a variable rotate right.  Provide anonymous pattern for
	rotate left by a constant value.

	* expr.c (expand_assignment): Do not try to optimize an aggregate
	address which has VOIDmode.

Tue Mar 23 22:51:48 1999  Mumit Khan  <khan@xraylith.wisc.edu>
			  Donn Terry  <donn@interix.com>

	* protoize.c (abspath): Preserve multiple leading slashes for
	_WIN32 and Interix.

1999-01-23  Mike Stump  <mrs@wrs.com>

	* arm/vxarm.h: Split out vxWorks support into separate headerfile
	and vxify.
	* arm/arm.c (cpu_defaults): Allow arm710 as default.

	* configure.in: Split out vxWorks support for Arm.
	* configure: Rebuilt.

Tue Mar 23 11:20:03 1999  Per Bothner  <bothner@cygnus.com>

	* tree.c (first_rtl_op, has_cleanups): Handle GOTO_SUBROUTINE_EXPR.

Tue Mar 23 09:00:39 1999  Nick Clifton  <nickc@cygnus.com>

	* config/arm/riscix1.h (SUBTARGET_SWITCHES): Add doc string.
	* config/arm/riscix1-1.h (SUBTARGET_SWITCHES): Add doc string.

Tue Mar 23 07:50:20 1999  Mark Mitchell  <mark@codesourcery.com>

	* function.c: Include hash.h.
	(insns_for_mem_entry): New struct.
	(put_reg_into_stack): Take an optional hash-table mapping MEMs to
	the INSNs that use them.
	(fixup_var_refs): Likewise.
	(put_addressof_into_stack): Likewise.
	(purge_addressof_1): Likewise.  Keep the hash-table up to date if
	we add new instructions.
	(fixup_var_refs_insns): Use it to avoid searching the entire
	instruction chain.
	(insns_for_mem_newfunc): New function.
	(insns_for_mem_comp): Likewise.
	(insns_for_mem_walk): Likewise.
	(compute_insns_for_mem): Likewise.
	(pop_function_context_from): Pass NULL for the hash-table.
	(put_var_into_stack): Likewise.
	(gen_mem_addressof): Likewise.
	(flush_addressof): Likewise.
	(purge_addressof): Call compute_insns_for_mem to pre-compute the
	hash table.
	* Makefile.in (OBJS): Include hash.o.
	(function.o): Depend on hash.h.

Tue Mar 23 00:39:14 1999  Jeffrey A Law  (law@cygnus.com)

	* i386/openbsd.h (TARGET_DEFAULT): Use symbolic names instead of
	numbers.
	* i386/netbsd.h, i386/freebsd.h: Likewise.

	* crtstuff.c: Use ANSI function definitions.  Fix minor whitespace
	problems.

	* i386/openbsd.h (TARGET_DEFAULT): Define.
	* configure.in: Do not set TARGET_CPU_DEFAULT for x86 OpenBSD
	configurations.
	* configure: Rebuilt.

Tue Mar 23 00:39:10 1999  John Wehle  (john@feith.com)

	* i386/freebsd.h (TARGET_DEFAULT): Define instead
	of TARGET_CPU_DEFAULT.
	* i386/netbsd.h (TARGET_DEFAULT): Likewise.

Mon Mar 22 23:52:01 1999  Mumit Khan  <khan@xraylith.wisc.edu>
			  Donn Terry  <donn@interix.com>

	* sdbout.c (syms.h): Don't include on Interix.
	* toplev.c (main): No sbrk on Interix.

	* configure.in: Add i386-pc-interix support.
	* configure: Regenerate.
	* fixinc.interix: New file.
	* config/interix.h: New file.
	* config/x-interix: New file.
	* config/xm-interix.h: New file.
	* i386/interix.h: New file.
	* i386/interix.c: New file.
	* i386/t-interix: New file.

Mon Mar 22 23:41:49 1999  Jeffrey A Law  (law@cygnus.com)

	* i386.h (PREFERRED_STACK_BOUNDARY): Define.

Mon Mar 22 23:41:31 1999  John Wehle  (john@feith.com)

	* i386.c (ix86_compute_frame_size): New function.
	(ix86_prologue, ix86_epilogue): Use it.
	* i386.h (INITIAL_ELIMINATION_OFFSET): Likewise.
	* reload1.c: Provide default for PREFERRED_STACK_BOUNDARY.

Mon Mar 22 18:06:59 1999  Jim Wilson  <wilson@cygnus.com>

	* mips/mips.h (TARGET_SWITCHES, TARGET_OPTIONS): Add option doc
	strings.
	* mips/abi64.h (SUBTARGET_TARGET_OPTIONS): Likewise.

Mon Mar 22 16:18:27 1999  Nick Clifton  <nickc@cygnus.com>

	* config/arm/elf.h (VALID_MACHINE_DECL_ATTRIBUTE): Do not bother
	passing ATTRIBUTES to arm_valid_machine_decl_attribute.

	* config/arm/coff.h (VALID_MACHINE_DECL_ATTRIBUTE): Do not bother
	passing ATTRIBUTES to arm_valid_machine_decl_attribute.

	* config/arm/arm.h (DEFAULT_RTX_COSTS): Do not bother passing
	OUTER_CODE to arm_rtx_costs - it is not used.
	(arm_compare_fp): Delete declaration.
	(FINAL_PRESCAN_INSN): Do not bother passing OPVEC or NOPERANDS to
	arm_final_prescan_insn - they are not used.
	(const_ok_for_op): Remove prototype.
	(arm_rtx_costs): Fix prototype.
	(arm_valid_machine_decl_attribute): Fix prototype.
	(final_prescan_insn): Fix prototype.

	* config/arm/arm.md: Remove references to arm_compare_fp.

	* config/arm/arm.c (arm_compare_fp): Delete.
	(const_ok_for_op): Make function static.  Add prototype.  Remove
	mode parameter - it is unused.
	(arm_rtx_costs): Remove outer_code parameter.
	(reload_memory_operand): Declare mode parameter unused.
	(power_of_two_operand): Declare mode parameter unused.
	(equality_operator): Declare mode parameter unused.
	(load_multiple_operation): Declare mode parameter unused.
	(store_multiple_operation): Declare mode parameter unused.
	(multi_register_push): Declare mode parameter unused.
	(arm_valid_machine_decl_attribute): Remove attributes parameter -
	it is unused.
	(select_dominance_cc_mode): Remove op parameter - it is unused.
	(gen_compare_reg): Remove fp parameter - it is unused.
	(final_prescan_insn): Remove opvec and noperands parameters - they
	are unused.

Mon Mar 22 14:35:28 1999  Nick Clifton  <nickc@cygnus.com>

	* tm.texi (MD_SCHED_INIT): Add missing closing parenthesis.

Mon Mar 22 22:24:30 1999  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* reload1.c (reload_as_needed): Set reload_is_output_reload /
	reload_has_output_reload for auto_inc expressions that could be
	reloaded.  Call forget_old_reloads for REG_INC notes.

Mon Mar 22 21:51:57 1999  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* cse.c (cse_insn): Don't change the result register of a libcall.

Mon Mar 22 21:08:59 1999  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* rtl.h (shallow_copy_rtx): Declare.
	* rtl.c (shallow_copy_rtx): New function.
	* reload.c (find_reloads_toplev): Use shallow_copy_rtx instead of
	copy_rtx.

Mon Mar 22 10:44:33 1999  Vladimir Makarov  <vmakarov@tofu.to.cygnus.com>

	* config/h8300/h8300.md (adjust_length): New attribute.
	(modhi3+1, andsi3+1, iorsi3+1, extzv+1, extzv+2): Change insn
	default value of attribute "adjust_length" onto "no".

	* config/h8300/h8300.c (h8300_adjust_insn_length): Adjust
	length only if the attribute "adjust_length" value is "yes".
	Use 0 if the shift is negative.

	* final.c (shorten_branches): Check insn length after its
	adjusting.

Sun Mar 21 17:33:48 1999  Jeffrey A Law  (law@cygnus.com)

	* i860.h (TARGET_SWITCHES): Add documentation for default case.
	* i860/paragon.h (TARGET_SWITCHES): Add documentation for default case.
	* i370.h (TARGET_SWITCHES): Add documentation for default case.
	* fx80.h (TARGET_SWITCHES): Add documentation for default case.
	* elxsi.h (TARGET_SWITCHES): Add documentation for default case.
	* clipper.h (TARGET_SWITCHES): Add documentation for default case.
	* 1750a.h (TARGET_SWITCHES): Add documentation for default case.
	* pa.h (TARGET_SWITCHES): Add documentation for default case.
	(TARGET_OPTIONS): Likewise for default case.
	* mn10300.h (TARGET_SWITCHES): Add documentation for default case.
	* h8300.h (TARGET_SWITCHES): Add documentation for default case.

	* gcse.c (dump_hash_table): Fix whitespace in declaration.
	(compute_transpout): Renamed from pre_compute_transpout.
	(compute_pre_*): Deleted.
	(pre_expr_reaches_here_p): New argument, CHECK_PRE_COMP.  All
	callers changed.
	(insert_insn_end_bb): Renamed from pre_insert_insn.
	(pre_*): Delete unused variables.  Only leave local properties and
	global redundant/optimal computation points.
	(alloc_pre_mem, free_pre_mem): Corresponding changes.
	(compute_pre_data): Simplify and call pre_lcm to run the lazy
	code motion dataflow analysis.
	(pre_insert, pre_insert_copies, pre_delete): Revamp to use LCM
	based redundant and optimal computation points.

	* basic-block.h (pre_lcm, pre_rev_lcm): Declare.

	* toplev.c (main): A debug option without a level defaults to
	level 2.

Sun Mar 21 12:13:01 1999  Nick Clifton  <nickc@cygnus.com>

	* flow.c (can_delete_label_p): Do not allow user specified
	labels to be deleted.
	* dwarf2out.c (gen_label_die): Generate addresses for deleted
	(programmer specified) labels.
	* dwarfout.c (output_label_die): Generate addresses for deleted
	(programmer specified) labels.

1999-03-21  Manfred Hollstein  <manfred@s-direktnet.de>

	* Makefile.in (xgcc$(exeext)): Add intl.o to list of files to be
	linked with.

Sun Mar 21 01:15:03 1999  Jeff Law  (law@cygnus.com)

	* version.c: Bump for snapshot.

Sat Mar 20 22:26:23 1999  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* sparc.h (TARGET_SWITCHES): Add null description to default case.

Sat Mar 20 21:46:06 1999  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* c-lex.c (yylex): Remove unused variable `bytes'.

	* flow.c (print_rtl_with_bb): Cast the return value of alloca.

	* function.c (assign_parms): Wrap variable `varargs_setup' in
	macro SETUP_INCOMING_VARARGS.
	(thread_prologue_and_epilogue_insns): Mark parameter `f' with
	ATTRIBUTE_UNUSED.

	* local-alloc.c (no_equiv): Likewise for parameter `store'.

	* sched.c (schedule_insns): Remove unused variables `insn' and `next'.

	* tlink.c (symbol_hash_newfunc, symbol_hash_lookup,
	file_hash_newfunc, file_hash_lookup, demangled_hash_newfunc,
	demangled_hash_lookup, symbol_push, symbol_pop, file_push,
	file_pop, tlink_init, tlink_execute, frob_extension,
	obstack_fgets, tfgets, pfgets, freadsym, read_repo_file,
	maybe_tweak, recompile_files, read_repo_files,
	demangle_new_symbols, scan_linker_output): Add static prototype.

	(symbol_hash_newfunc, file_hash_newfunc, demangled_hash_newfunc):
	Make the third argument a `hash_table_key'.

	* toplev.c (debug_start_source_file): Mark parameter `filename'
	with ATTRIBUTE_UNUSED.

Sun Mar 21 02:28:21 1999  Andreas Schwab  <schwab@issan.cs.uni-dortmund.de>

	* tm.texi (Varargs): Don't split argument of @item across lines.

	* invoke.texi: Fix use of @item vs @itemx.

Sun Mar 21 09:59:54 1999  Michael Hayes  <m.hayes@elec.canterbury.ac.nz>

	* config/c4x/c4x.h (TARGET_SWITCHES): Add null description to
	default case.

Sat Mar 20 23:33:54 1999  Michael Hayes  <m.hayes@elec.canterbury.ac.nz>

	* loop.c (check_dbra_loop): Fix debug message.

Sat Mar 20 15:54:35 1999  Michael Hayes  <m.hayes@elec.canterbury.ac.nz>

	* config/c4x/c4x.md (decrement_and_branch_on_count): Emit rptb_end
	pattern instead of decrement_and_branch_until_zero pattern.

Sat Mar 20 11:39:58 1999  Michael Hayes  <m.hayes@elec.canterbury.ac.nz>

	* config/c4x/c4x.h (TARGET_SWITCHES): Add documentation.
	* config/c4x/c4x.h (TARGET_OPTIONS): Add documentation.

Fri Mar 19 23:26:29 1999  Martin von Löwis  <loewis@informatik.hu-berlin.de>

	* expr.c (expand_expr): Handle ERROR_MARK much earlier.

Fri Mar 19 15:28:38 1999  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* cccp.c (create_definition): Cast to U_CHAR* when assigning to one.

	* cppfiles.c (read_and_prescan): Likewise.
	Start a #define in column 0.

	* cpplib.c (cpp_define): Cast to U_CHAR* when assigning to one.
	(cpp_push_buffer): Likewise for cpp_buffer*.
	(do_include): Change the type of `fbeg' and `fend' to unsigned char*.
	(do_endif): Cast to char* when assigning to one.
	(do_assert): Likewise.
	(do_unassert): Likewise.
	(cpp_read_check_assertion): Change the type of `name' to U_CHAR*.
	Don't do unnecessary cast to char* anymore.

	* genrecog.c (make_insn_sequence): Cast to char** when assigning
	to one.  Cast the first argument of bzero to PTR.

	* loop.c (strength_reduce): Remove unused variable `note'.

	* reload1.c (new_insn_chain): Cast to struct insn_chain* when
	assigning to one.

	* rtl.c (copy_rtx): Use memcpy instead of bcopy.

Fri Mar 19 11:19:31 1999  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* calls.c (initialize_argument_information): Mark parameters
	`num_actuals' and `n_named_args' with ATTRIBUTE_UNUSED.

	* dbxout.c (dbxout_start_new_source_file): Likewise for parameter
	`filename'.
	(dbxout_finish): Likewise for parameters `file' and `filename'.
	(dbxout_prepare_symbol): Likewise for parameter `decl'.
	(dbxout_begin_function): Likewise.

	* explow.c (hard_function_value): Likewise for parameter `func'.

	* function.c (locate_and_pad_parm): Likewise for parameter `fndecl'.

	* expmed.c (expand_divmod): Omit unused argument to `expand_abs'.
	* expr.c (expand_expr): Likewise.
	* expr.h (expand_abs): Delete unused argument from prototype.
	* optabs.c (expand_abs): Remove unused parameter `unsignedp'.

	* sdbout.c (sdbout_init): Mark parameter `syms' with ATTRIBUTE_UNUSED.
	(sdbout_end_block): Likewise for parameter `n'.

	* toplev.c (debug_define): Likewise for parameters `lineno' and
	`buffer'.
	(debug_undef): Likewise.

	* varasm.c (named_section): Likewise for parameter 'reloc'.
	(assemble_external): Likewise for parameter `decl'.
	(assemble_alias): Likewise for parameter `target'.

Fri Mar 19 01:54:30 1999  Theodore Papadopoulo  <Theodore.Papadopoulo@sophia.inria.fr>

	* toplev.c (read_integral_parameter): Constify.  Better control of
	error messages.
	(main): Use read_integral_parameter to set optimize, id_clash_len,
	larger_than_size, and the debugging level.
	* toplev.h (read_integral_parameter): Update prototype.

Fri Mar 19 01:42:05 1999  Zack Weinberg  <zack@rabi.phys.columbia.edu>

	* system.h: Use putc_unlocked, fputc_unlocked, and
	fputs_unlocked only if putc_unlocked has a prototype already.
	Prototype fputs_unlocked if necessary.
	* configure.in: Check for prototypes of putc_unlocked and
	fputs_unlocked.
	* acconfig.h: Updated.
	* config.in, configure: Rebuilt.

Fri Mar 19 02:45:12 1999  Alexandre Oliva  <oliva@dcc.unicamp.br>

	* Makefile.in (INTL_TARGETS): New macro.
	($(INTL_TARGETS)): Depend on generated sources; drop dependencies
	on cp/parse.c and objc/objc-parse.c.
	($(srcdir)/cp/parse.c): Move to cp/Make-lang.in.
	* objc/Make-lang.in ($(INTL_TARGETS)): Depend on objc/objc-parse.c.

Thu Mar 18 22:28:53 1999  Jeffrey A Law  (law@cygnus.com)

	* i860.h (TARGET_SWITCHES): Add documentation.
	* i860/paragon.h (TARGET_SWITCHES): Add documentation.
	* i370.h (TARGET_SWITCHES): Add documentation.
	* fx80.h (TARGET_SWITCHES): Add documentation.
	* elxsi.h (TARGET_SWITCHES): Add documentation.
	* clipper.h (TARGET_SWITCHES): Add documentation.
	* 1750a.h (TARGET_SWITCHES): Add documentation.
	* pa.h (TARGET_SWITCHES): Add documentation.
	(TARGET_OPTIONS): Likewise.
	* mn10300.h (TARGET_SWITCHES): Add documentation.
	* h8300.h (TARGET_SWITCHES): Add documentation.

Thu Mar 18 15:58:26 1999  Nick Clifton  <nickc@cygnus.com>

	* loop.c (strength_reduce): Do not perform pseudo replacements
	if the loop contains volatile memory references.

Thu Mar 18 19:09:50 1999  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* reload.c (find_reloads_toplev): When processing X recursively,
	don't alter it destructively except by filling in constants.

Thu Mar 18 10:14:18 1999  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* cccp.c (default_include): Initialize structure members.
	(pass_thru_directive): Change the type of 'keyword_length' to int.
	(main): Cast `bindtextdomain' and `textdomain' to (void).

	* collect2.c (main): Likewise.

	* cppmain.c (main): Likewise.

	* gcc.c (main): Likewise.

	* gcov.c (main): Likewise.

	* protoize.c (main): Likewise.

	* toplev.c (main): Likewise.

1999-03-18  Gavin Romig-Koch  <gavin@cygnus.com>

	* config/mips/mips.c (mips_explicit_type_size_string): Correct
	its type.

Thu Mar 18 01:24:25 1999  Jeffrey A Law  (law@cygnus.com)

	* configure.in: Use "exit 1", not "exit (1)".
	* configure: Rebuilt.

Wed Mar 17 23:17:42 1999  Mark Kettenis  <kettenis@gnu.org>

	* config/t-gnu (SYSTEM_HEADER_DIR): New variable.  Set to
	`/include' in order to find the system's limits.h.

Wed Mar 17 23:00:18 1999  Robert Lipe  <robertlipe@usa.net>

	* fixinc/fixincl.c: Include auto-host.h instead of config.h.
	* fixinc/procopen.c: Likewise.
	* fixinc/regex.c: Likewise.
	* fixinc/server.c: Likewise.

Wed Mar 17 22:46:13 1999  Mark Elbrecht  <snowball3@usa.net.

	* config/i386/go32.h: Delete.
	* config/i386/djgpp.h: New. Renamed from go32.h.
	Added -DDJGPP=2 to CPP_PREDEFINES.
	* config/i386/go32-rtems.h: Delete.
	* config/i386/djgpp-rtems.h: New. Renamed from go32-rtems.h.
	Added -DDJGPP=2 to CPP_PREDEFINES.
	* config/i386/xm-go32.h: Delete.
	* config/i386/xm-djgpp.h: New. Renamed from xm-go32.h.
	* config/i386/x-go32: Delete.
	* config/i386/x-djgpp: New. Renamed from x-go32.
	* config/i386/t-go32: Delete.
	* config/i386/t-djgpp: New. Renamed from t-go32.
	* configure.in(pc-msdosdjgpp): Set xm_file to i386/xm-djgpp.h.
	Set tm_file to i386/djgpp.h. Set tmake_file to i386/t-djgpp.
	Set xmake_file to i386/x-djgpp.
	(*-go32-msdos, *-go32*): Remove entries.  Warn that GO32/DJGPP V1.X
	is now unsupported and *-pc-msdosdjgpp for DJGPP V2.X should be
	used instead.
	* configure: Rebuilt.

	* gcc.c (process_command): Dump link_command_spec too.

Wed Mar 17 20:38:08 1999  Jerry Quinn  <jquinn@nortelnetworks.com>
			  Jeff Law  <law@cygnus.com>

	* pa.md: Add real PA8000 scheduling information.

	* pa.h (processor_type): Add PROCESSOR_8000 symbol.
	(ISSUE_RATE): Revamp, including PA8000 support.
	* pa.c (override_options): Add 8000 as -mschedule= option.
	Do not call strcmp if pa_cpu_string is null.
	* pa.md (attr cpu): Add 8000.
	* invoke.texi: Add documentation for PA8000 scheduling.

Wed Mar 17 18:20:24 1999  David S. Miller  <davem@redhat.com>

	* config/sparc/sparc.h (TARGET_SWITCHES, TARGET_OPTIONS):
	Add descriptions.
	* config/sparc/sp64-elf.h (SUBTARGET_SWITCHES): Likewise.
	* config/sparc/splet.h (SUBTARGET_SWITCHES): Likewise.

Wed Mar 17 14:51:19 1999  Richard Henderson  <rth@cygnus.com>

	* flow.c (compute_immediate_dominators): New function.
	* basic-block.h (compute_immediate_dominators): Declare it.

	* alpha.h (HARD_REGNO_MODE_OK): Allow only 4 and 8 byte unit modes
	in FP regs.
	(MODES_TIEABLE_P): Define asymmetricly wrt modes illegal in FP regs.

Wed Mar 17 14:41:41 1999  Nick Clifton  <nickc@cygnus.com>

	* config/arm/aout.h (ASM_GENERATE_INTERNAL_LABEL): Fix compile
	time warning.
	* config/arm/arm.md: Fix various compile time warnings.
	* config/arm/arm.h: Fix various compile time warnings.  Add
	function prototypes.
	* config/arm/arm.c: Fix various compile time warnings.
	(arm_override_options): Reorganize to separate tuning from
	targetting.
	(bit_count): New function: Return a count of the number of bits
	set in a word.

Wed Mar 17 21:29:12 1999  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* reload1.c (eliminate_regs): Don't keep REG_DEAD notes around for
	things that were eliminated.

Wed Mar 17 12:16:26 1999  Richard Henderson  <rth@cygnus.com>

	* function.c (fixup_var_refs_1): First try moving the expression
	directly into a register.  Don't separate cc0 setter and user.

Wed Mar 17 11:20:29 1999  Dave Brolley  <brolley@cygnus.com>

	* cppfiles.c (PIPE_BUF): #define PIPE_BUF if not defined already.

Wed Mar 17 09:25:06 1999  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* c-lex.c: Don't include setjmp.h.
	(parse_float): New static function.
	(pf_args): New struct.
	(yylex): Use them in call to `do_float_handler'.

1999-03-16  Andreas Schwab  <schwab@issan.cs.uni-dortmund.de>

	* cexp.y (yyerror): Call verror to get a useful error message.
	* cexp.c: Rebuilt.

	* .gdbinit: Move command to put breakpoint at abort to end of file
	so that gdb does not bail out early.

Tue Mar 16 15:30:19 1999  Nick Clifton  <nickc@cygnus.com>

	* rtl.h: Rename prototype for free_bb_memory to free_bb_mem.

Tue Mar 16 23:40:09 1999  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* sh.md (movsi_i): Move t/r alternative after r/rI alternative.

Tue Mar 16 13:44:50 1999  Jim Wilson  <wilson@cygnus.com>

	* mn10200/mn10200.md (addsi3, subsi3, ashlsi3, lshrsi3, ashrsi3):
	Delete emit_library_call_value declaration.

1999-03-16  Zack Weinberg  <zack@rabi.columbia.edu>

	* cppfiles.c (read_and_prescan): Map backslash-newline to '\r'
	(which cannot otherwise appear in the processed buffer) and
	move it out of tokens that it appears in the middle of.
	Improve performance.
	(find_position): New function.

	* cpplib.c: \r (one character) indicates backslash
	newline, not \\\n (two characters).  It cannot appear in the
	middle of a token.  Call CPP_BUMP_LINE (pfile) whenever
	parsing moves past \n or \r.  Increment pfile->lineno whenever
	a \n is placed into token_buffer.  Only one mark can exist at
	a time, and CPP_BUMP_LINE must not be used while it is
	active.  It is automatically cleared by cpp_pop_buffer and
	parse_goto_mark.  \r is not in is_hor_space or is_space.

	(NEWLINE_FIX, NEWLINE_FIX1, adjust_position,
	update_position, count_newlines, parse_move_mark): Removed.
	(parse_string, copy_comment): New functions.
	(parse_name): Returns void.
	(parse_set_mark, parse_clear_mark, parse_goto_mark): Take only
	one argument, a cpp_reader *.  Change for new marking scheme.
	(skip_comment): Handle CHILL line comments too.  Second
	argument is now first character of comment marker; all callers
	changed.  Issue error for unterminated block comment here.
	(cpp_skip_hspace): Recognize CHILL comments.
	(copy_rest_of_line): Likewise.  Call skip_comment and
	parse_string directly, don't go through cpp_get_token.  Emit
	"/**/" for block comments if -traditional (create_definition
	needs this).
	(do_define): Don't play with put_out_comments.
	(cpp_push_buffer): Initialize ->mark to -1.
	(cpp_buf_line_and_col): Just read out the values in the buffer
	structure.
	(output_line_command): Use cpp_buf_line_and_col.  Fix
	formatting.  Remove stale code.
	(cpp_get_token): Break out string parsing code to
	parse_string.  Use skip_comment for CHILL comments too.  Use
	copy_comment for put_out_comments instead of dinking with
	marks.  Remove stale code.  Don't call output_line_command
	unless it's necessary.

	* cpplib.h (parse_marker): Removed.
	(struct cpp_buffer): Line_base is now an unsigned char *; add
	`mark' [long], remove `marks' [struct parse_marker *].
	(parse_set_mark, parse_clear_mark, parse_goto_mark): Update
	prototypes.
	(CPP_BUMP_LINE, CPP_BUMP_BUFFER_LINE): New macros.
	* cppinit.c (is_hor_space, is_space): '\r' is not considered
	whitespace.
	* cppexp.c (cpp_parse_expression): Use cpp_skip_hspace, not
	SKIP_WHITE_SPACE.
	* cpphash.c (macarg): Disable line commands while expanding.

Tue Mar 16 11:30:19 1999  Gavin Romig-Koch  <gavin@cygnus.com>

	* c-lex.c (yylex) : Remove warning for integer literals being
	larger than the largest target int.  Add warning for integer
	literal being larger than than its chosen type.

Tue Mar 16 10:53:17 1999  Gavin Romig-Koch  <gavin@cygnus.com>

	* invoke.texi: Add -mlong32 documentation.
	* config/mips/mips.h (mips_explicit_type_size_string): New.
	(TARGET_SWITCHES): Add 'long32'.
	(TARGET_OPTIONS): Add 'explicit-type-size'.
	(CC1_SPECS): Set -mexplicit-type-size.
	(LONG_MAX_SPEC): Change a use of 'no-long64' to 'long32'.
	* config/mips/abi64.h (LONG_MAX_SPEC): Same.  Add 'mabi=32'.
	* config/mips/mips.c (mips_explicit_type_size_string): New.
	(override_options): Use it.
	* config/mips/osfrose.h (CC1_SPECS): Set -mexplicit-type-size.

	* config/mips/mips.h (SUBTARGET_CPP_SIZE_SPEC):
	Pointer size now depends on both size longs and size of GP
	registers.

Tue Mar 16 10:22:22 1999  Gavin Romig-Koch  <gavin@cygnus.com>

	* config/mips/iris.h (CTORS_SECTION_ASM_OP,DTORS_SECTION_ASM_OP,
	dtors_section): Use Pmode == DImode rather than TARGET_LONG64.
	* config/mips/mips.c (override_options): Allow -mlong64 and
	-mint64 with -mips2 or less.
	* config/mips/mips.h (MASK_LONG64): Fix comment.
	(POINTER_SIZE): Use Pmode == DImode rather than TARGET_LONG64.
	(Pmode): Make Pmode the smaller of longs or gp registers.
	* invoke.texi: Note the new size for pointers.

Mon Mar 15 22:45:25 1999  David Edelsohn  <edelsohn@gnu.org>

	* rs6000.h (ASM_OUTPUT_{DOUBLE,FLOAT}): Always generate IEEE 754
	bit-pattern directly.
	(ASM_OUTPUT_REG_{PUSH,POP}): Delete.
	* rs6000.c (first_reg_to_save): If profiling and context needed,
	allocate a reg to save static chain for all ABIs.  For AIX
	profiling, calculate parameter registers to save based on need.
	(output_function_profiler): Save and restore static chain around
	profile call for all ABIs.

1999-03-15  Zack Weinberg  <zack@rabi.columbia.edu>

	* cppinit.c: Instead of one pending list, keep separate lists
	for each category of pending option: -D/-U, -A, -include,
	-imacros.  Move the four partial include-path lists into the
	pending block.  Use head and tail pointers so we don't ever
	have to reverse the lists.

	(cpp_start_read): Break out blocks of code to their own
	functions: install_predefs and initialize_dependency_output.
	Use path_include for C_INCLUDE_PATH and friends as well as
	CPATH.  Remove include_defaults gunk.  Warn about the
	combination of -lang-chill and -trigraphs.  Optimize string
	bashing.  Walk each pending list once, deallocating as we go.

	(append_include_chain): Brought over from cppfiles.c.  Mark
	dirs as system include dirs if and only if appending to
	system include path. If opts->verbose, print a notice when a
	dir is dropped from the include path because it doesn't
	exist.  Fix memory leak: this function is not supposed to copy
	its DIR argument.

	(nreverse_pending, push_pending): Removed.
	(APPEND): New macro for adding to pending lists.
	(path_include): Can now add to any partial include path.
	(base_name): Bring over from cccp.c.
	(cpp_options_init): Allocate the pending block.
	(cpp_handle_option): Add --version.  Exit after --help.  Fix
	formatting.  Order -ifoo options by frequency of usage.
	(install_predefs): New function, simplified version of code
	that was in cpp_start_read.
	(initialize_dependency_output): Likewise.  Understand OBJECT_SUFFIX.

	* cppfiles.c (simplify_pathname): Export.
	(merge_include_chains): Don't nreverse the lists.  If
	opts->verbose, print a notice when a duplicate dir is detected
	and dropped from the include path.
	(finclude): Fix excessive cleverness in setting
	fp->system_header_p.
	(actual_directory): Set x->sysp from
	CPP_BUFFER (pfile)->system_header_p so that one system header
	may include another with "".
	(deps_output): Fix double adjustment of deps_size which would
	cause all dependencies after the first two lines to be lost.

	* cpplib.c (cpp_unassert): New function.
	* cpplib.h: Lay out struct cpp_pending here.  Adjust
	prototypes.  Add include_prefix_len to struct cpp_options.

Mon Mar 15 16:01:52 1999  Jim Wilson  <wilson@cygnus.com>

	* config/misp/mips.h (REGISTER_MOVE_COST): Make the cost of moving
	from HI/LO/HILO/MD into general registers the same as for one
	of moving general registers to HI/LO/HILO/MD.

Mon Mar 15 12:39:38 1999  Nick Clifton  <nickc@cygnus.com>

	* config/m32r/m32r.c (init_idents): New function.  Initialize
	static tree nodes for m32r specific attribute identifiers.  Remove
	leading and trailing double underscores from the attribute names.
	(m32r_valid_machine_decl_attribute): Call init_idents.
	(m32r_encode_section_info): Call init_idents.

Mon Mar 15 10:20:20 1999  Mark Mitchell  <mark@markmitchell.com>

	* reload.c (find_reloads): Add a REG_LABEL note if we substitute a
	LABEL_REF for something else.

Mon Mar 15 08:24:17 1999  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* fold-const.c (exact_real_inverse): Move variable `float_error'
	into the scope where it is used.
	(const_binop_1): New static function.
	(cb_args): New struct.
	(const_binop): Use them in call to `do_float_handler'.
	(fold_convert_1): New static function.
	(fc_args): New struct.
	(fold_convert): Use them in call to `do_float_handler'.

Mon Mar 15 22:50:18 1999  Michael Hayes  <m.hayes@elec.canterbury.ac.nz>

	* rtlanal.c (auto_inc_p): New function.
	* rtl.h (auto_inc_p): Prototype it.
	* reload1.c (add_auto_inc_notes): New function.
	(reload): Strip REG_INC notes and call add_auto_inc_notes
	for each insn to restore them correctly.

1999-03-15  Manfred Hollstein  <manfred@s-direktnet.de>

	* fixinc/Makefile.in (procopen.o): List the actual
	dependencies.

Sun Mar 14 16:22:10 1999  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* cse.c (check_fold_consts): New static function.
	(cfc_args): New struct.
	(simplify_relational_operation): Use them in call to
	`do_float_handler'.

	* toplev.c (do_float_handler): New function to wrap calls to
	setjmp/set_float_handler.

	* toplev.h (do_float_handler): Add extern prototype.

	* tree.c (build_real_from_int_cst_1): New static function.
	(brfic_args): New struct.
	(build_real_from_int_cst): Use them in call to
	`do_float_handler'.

Sun Mar 14 01:15:06 1999  Jeff Law  (law@cygnus.com)

	* version.c: Bump for snapshot.

Sat Mar 13 17:37:18 1999  Richard Henderson  <rth@cygnus.com>

	* haifa-sched.c (sched_analyze_1): Only clear reg_last_uses on a SET.

Sat Mar 13 11:36:16 1999  Richard Earnshaw  (rearnsha@arm.com)

	* arm.c (arm_split_constant): Don't try to force a constant to
	memory after arm_reorg has run.
	(after_arm_reorg): New static variable.
	(arm_reorg): Set it.
	(output_func_epilogue): Clear it.

Fri Mar 12 20:26:32 1999  David Edelsohn  <edelsohn@gnu.org>

	* configure.in ({rs6000,powerpc}-ibm-aix*): Set float_format to none.
	* configure: Rebuilt.

Fri Mar 12 20:45:30 1999  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* unroll.c (loop_iterations): Don't return a final value for EQ
	comparison loops.

Fri Mar 12 12:35:01 1999  Jim Wilson  <wilson@cygnus.com>

	* reload1.c (calculate_needs_all_insns): When ignore equivalence
	setting insn, clear need_elim, need_reload, and need_operand_change.

Fri Mar 12 07:54:43 1999  Bruce Korb  <korb@datadesign.com>

	* fixinc/fixinc.*: Some changes from the fixincl-branch
	were not applied (??!!).  Corrected.

	* fixinc/Makefile.in: Same thing.

Fri Mar 12 00:51:43 1999  Jeffrey A Law  (law@cygnus.com)

	* expr.c (expand_expr): Allow a CALL_EXPR with a mode wider than
	MAX_INTEGER_COMPUTATION_MODE.

Thu Mar 11 14:00:58 1999  Richard Henderson  <rth@cygnus.com>

	* alpha.h (HARD_REGNO_MODE_OK): Disallow QI/HImode in fp regs.
	(MODES_TIEABLE_P): Update.

	* alpha.md (ev5_e0): Conflict loads and stores.

Thu Mar 11 13:55:52 1999  Richard Henderson  <rth@cygnus.com>

	* machmode.h (smallest_mode_for_size): Prototype.
	* stor-layout.c (smallest_mode_for_size): Remove static.

Thu Mar 11 21:25:59 1999  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* loop.c (strength_reduce): Don't do biv increment -> DEST_REG giv
	conversion if we don't know the lifetime.

Thu Mar 11 20:37:59 1999  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* reload.1c (delete_address_reloads_1): Check for reloads of
	CURRENT_INSN even if it sets DST.

Thu Mar 11 10:29:50 1999  Jason Merrill  <jason@yorick.cygnus.com>

	* dwarf2out.c (add_AT_lbl_offset): Rename from add_AT_section_offset.
	(print_die, size_of_die, value_format, output_die): Adjust.

Thu Mar 11 10:27:42 1999  Robert Lipe  <robertlipe@usa.net>

	* dwarf2out.c (TEXT_SECTION_LABEL, DEBUG_LINE_SECTION_LABEL,
	DEBUG_INFO_SECTION_LABEL, ABBREV_SECTION_LABEL,
	text_section_label, debug_line_section_label,
	debug_info_section_label, abbrev_section_label): New.
	(output_compilation_unit_header): Emit label associated
	with section instead of section name itself.
	(out_pubnames, output_aranges, output_line_info,
	dwarf2out_finish): Likewise.
	(dwarf2out_init): Build internal label names for sections
	from static labels.

Thu Mar 11 17:28:32 1999  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* sh.md (mulsi3): End mul.l sequence with a no-op move.

Thu Mar 11 08:52:02 1999  Bruce Korb  <korb@datadesign.com>

	* Makefile.in: Activated fixinc/mkfixinc.sh.
	* configure.in: Activated fixinc/mkfixinc.sh.

Thu Mar 11 01:38:02 1999  Mumit Khan  <khan@xraylith.wisc.edu>

	* cppfiles.c (INO_T_EQ): Handle UWIN.

	* c-common.c (decl_attributes): Flag unrecognized attribute
	functions as warnings instead of as errors.

	Support for i386-pc-uwin.
	* i386/uwin.h: New file.
	* i386/xm-uwin.h: New file.
	* i386/t-uwin: New file.
	* i386/uwin.asm: New file.
	* configure.in (i[3456]86-*-uwin*): Define.
	Add Workaround for vfork bug when hosted on uwin.
	* configure: Regenerate.

	* cccp.c (INO_T_EQ): Undefine. UWIN has inodes.
	(absolute_filename): UWIN uses POSIX pathnames only.
	* libgcc2.c (getpagesize): Do not define for UWIN.
	(mprotect): Likewise.
	* protoize.c (dirent.h): Conditionally include.
	(fputc): Prototype only if it's not a macro.

Wed Mar 10 02:49:04 1999  Jason Merrill  <jason@yorick.cygnus.com>

	* configure.in: Remove init_priority stuff.

1999-03-11  Colin Smith  <colin@wrs.com>

	* sdbout.c (plain_type_1): Make boolean types work better with sdb.

Thu Mar 11 00:20:52 1999  Alexandre Oliva  <oliva@dcc.unicamp.br>

	* gcc.texi: Update bug reporting instructions to match
	current ezmlm list reality.

Wed Mar 10 23:11:19 1999  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* gcc.c (print_file_name, print_prog_name, spec_machine,
	read_specs, set_spec, lookup_compiler, build_search_list,
	putenv_from_prefixes, find_a_file, record_temp_file,
	delete_if_ordinary, handle_braces, do_spec, do_spec_1, find_file,
	is_directory, validate_switches, used_arg, default_arg,
	pfatal_with_name, perror_with_name, pfatal_pexecute, fatal, error,
	notice, add_preprocessor_option, add_assembler_option,
	add_linker_option, process_command, execute,
	unused_prefix_warnings, clear_args, fatal_error,
	lang_specific_driver, user_specs, compiler, link_command_spec,
	option_map, translate_options, make_temp_file, temp_name,
	programname, path_prefix, machine_suffix, just_machine_suffix,
	gcc_exec_prefix, standard_exec_prefix, standard_exec_prefix_1,
	md_exec_prefix, md_startfile_prefix, md_startfile_prefix_1,
	standard_startfile_prefix, standard_startfile_prefix_1,
	standard_startfile_prefix_2, tooldir_base_prefix, tooldir_prefix,
	multilib_dir, temp_filename, temp_file, command, switchstr,
	infile, outfiles, input_filename, input_basename, input_suffix,
	check_live_switch, main): Qualify a char* with the `const' keyword.

Wed Mar 10 20:28:29 1999  Jeffrey A Law  (law@cygnus.com)

	* lcm.c: New file.
	* Makefile.in (OBJS): Add lcm.o.
	(lcm.o): Add dependencies.

	* gcse.c (compute_pre_local_properties): Delete.
	(compute_pre_data): Use compute_local_properties instead of
	compute_pre_local_properties.

	* gcse.c: More comments, whitespace and similar fixes.
	(dump_cuid_table, maybe_set_rd_gen, dump_cprop_data): Delete.
	(dump_pre_data, compute_cprop_local_properties): Likewise.
	(one_classic_gcse_pass): Lose unused argument.  All callers changed.
	(compute_hash_table, compute_expr_hash_table): Likewise.
	(compute_set_hash_table, one_pre_gcse_pass, mark_call): Likewise.
	(cprop_insn, cprop, one_cprop_pass): Add new argument ALTER_JUMPS.
	All callers changed.  Only alter jumps if ALTER_JUMPS is nonzero.
	Lose unused argument.
	(gcse_main): Always run a cprop pass after finishing global cse.
	(compute_local_properties): New function.
	(hash_scan_pat, hash_scan_insn): No longer call maybe_set_rd_gen.
	(compute_cprop_data): Use compute_local_properties.

	* gcse.c: Update various comments.
	(current_function_calls_longjmp): Delete declaration.

	* gcse.c (run_jump_opt_after_gcse): New variable.
	(gcse_main): Returns an integer.
	(hash_scan_set): Record initializations from CONST_DOUBLEs too.
	(try_replace_reg): Update some comments.
	(cprop_insn): Allow propagation into some JUMP_INSNs too.
	* rtl.h (gcse_main): Update prototype.
	* toplev.c (rest_of_compilation): If gcse_main returns nonzero,
	then run a jump optimization pass.
	* jump.c (delete_barrier_successors): Delete nop jumps too.

Wed Mar 10 19:04:31 1999  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* sh.c (fp_arith_reg_operand): Actually test if reg is suitable
	for FP arithmetic.  Changed caller.
	* sh.md (subsf3, subsf_i): Use fp_arith_reg_operand.

Wed Mar 10 18:56:31 1999  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* reload1.c (choose_reload_regs): When inheriting from the frame
	pointer, don't clobber it.

Wed Mar 10 08:01:52 1999  Bruce Korb  <korb@datadesign.com>

	* fixinc/fixinc.*: Resync-ed with the files in this
	directory.

	* fixinc/mkfixinc.sh: The machine case elements were
	out-of-order.  (the ix86-*-linux-gnu* entry needed to
	be earlier).

Wed Mar 10 00:01:24 1999  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* reload1.c (reload_combine_note_store): Fix calculation of number
	of affected registers.

Tue Mar  9 15:48:15 1999  Richard Henderson  <rth@cygnus.com>

	* flow.c (tidy_fallthru_edge): Be more careful finding the last
	BARRIER of a list.  Delete the cc0 setter as well as a cond jump.

Tue Mar  9 15:26:02 1999  Hans-Peter Nilsson  <hp@bitrange.com>

	* i386.md (ashlsi3 splitter): Fix typo in last change.

Tue Mar  9 11:35:20 1999  Richard Henderson  <rth@cygnus.com>

	* reg-stack.c (stack_reg_life_analysis): Use returnjump_p
	instead of an explicit test for RETURN.

Tue Mar  9 09:33:16 1999  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* Makefile.in (toplev.o): Depend on $(BASIC_BLOCK_H).

	* toplev.c: Include basic-block.h.

Tue Mar  9 02:08:17 1999  Jeffrey A Law  (law@cygnus.com)

	* calls.c (load_register_parameters): New function.
	(expand_call): Use it.

	* calls.c (expand_call): Slightly reorganize code.

	* calls.c (compute_argument_addresses): New function.
	(rtx_for_function_call): New function.
	(expand_call): Use them.

	* i386.md (zero_extendhisi2): Split into an expander and anonymous
	pattern.  Add new anonymous pattern for use when optimizing for
	size or for the PPro.
	(zero_extendqihi2, zero_extendqisi2): Likewise.

Mon Mar  8 23:43:47 1999  Richard Henderson  <rth@cygnus.com>

	* haifa-sched.c (sched_analyze_1): Fix last change -- add clobber
	dependencies to sets in the non-hard-reg case too.

Mon Mar  8 18:55:21 1999  Marc Espie  <espie@cvs.openbsd.org>

	* config/openbsd.h (HANDLE_SYSV_PRAGMA): Define.

Mon Mar  8 16:04:44 1999  Jim Wilson  <wilson@cygnus.com>

	* local-alloc.c (combine_regs): Don't combine if we have a hard reg
	for which CLASS_LIKELY_SPILLED_P is true.

	* unroll.c (loop_iterations): Only call loop_find_equiv_value if we
	have a REG or SUBREG.

Mon Mar  8 15:27:42 1999  Jeffrey A Law  (law@cygnus.com)

	* i386.md (ashlsi3): Revise comments.  Provide new anonymous
	pattern for Pentium and PPro/PII.  Reverse constraints in
	generic ashlsi3 anonymous pattern.

	* calls.c (initialize_argument_info): Accept a pointer to
	CUMULATIVE_ARGS.
	(expand_call): Pass the address of CUMULATIVE_ARGS.

	* rs6000/xm-sysv4.h (HOST_BITS_PER_LONGLONG): Remove #if 0.

	* mn10300.h (CASE_DROPS_THROUGH): Delete.
	* mn10200.h (CASE_DROPS_THROUGH): Delete.
	* h8300.h (CASE_DROPS_THROUGH): Delete.

	* flow.c (merge_blocks_nomove): For HAVE_cc0 targets, make sure
	to also delete the cc0 setter when deleting a conditional branch
	to the next block.

Mon Mar  8 18:47:11 1999  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* regmove.c (copy_src_to_dest): New argument max_old_uid.

Mon Mar  8 08:23:00 1999  Bruce Korb  <korb@datadesign.com>

	* ChangeLog: Merged entries from fixincl-branch.

Sun Mar  7 11:48:56 1999  Richard Henderson  <rth@cygnus.com>

	* haifa-sched.c (ENCODE_BLOCKAGE): Don't shift unit too far.
	(print_exp): Special case addition of a constant.
	(print_value) [CONST_INT]: Use HOST_WIDE_INT_PRINT_HEX.

Sun Mar  7 11:21:02 1999  Richard Henderson  <rth@cygnus.com>

	* haifa-sched.c (reg_last_clobbers): New.
	(reg_pending_clobbers, bb_reg_last_clobbers): New.
	(compute_block_backward_dependences): Allocate memory for them.
	(schedule_region): Likewise.
	(sched_analyze_1): Clobbers don't interfere with one another.
	They do interfere with sets ...
	(sched_analyze_2): ... and uses.
	(sched_analyze): Likewise.
	(sched_analyze_insn): Update reg_last_clobbers appropriately.

Sun Mar  7 08:30:37 1999  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* gmon-sol2.c: Include config.h and system.h.  Don't redundantly
	include system header files.
	(sccsid): Remove.
	(moncontrol, monstartup, _mcleanup, internal_mcount): Prototype.
	(_mcleanup): Add the `const' keyword to a char*.
	(internal_mcount): Declare `etext' as a char[] not a function.
	Cast `etext' to char* when calling `monstartup'.

	* sparc.c (frame_base_name, save_regs, restore_regs,
	build_big_number, sparc_cmodel_string, sparc_align_loops_string,
	sparc_align_jumps_string, sparc_align_funcs_string, code_model,
	cpu_default, cpu_table, output_function_prologue,
	output_function_epilogue, output_return,
	sparc_flat_output_function_prologue, ultra_code_names,
	sparc_flat_output_function_epilogue): Constify a char*.
	(hypersparc_adjust_cost): Add a default case in a switch.

	* sparc.h (sparc_cmodel_string, OVERRIDE_OPTIONS,
	sparc_cpu_select, sparc_align_loops_string,
	sparc_align_jumps_string, sparc_align_funcs_string,
	output_return): Constify a char*.

	* sparc.md (movdi): Change the comparison of HOST_BITS_PER_WIDE_INT
	so that we check "== 32", instead of "!= 64".  Cast a value to
	HOST_WIDE_INT when comparing against one.  Hide the declaration
	for variable `chain'.

Sun Mar  7 08:05:27 1999  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* system.h (const, inline): Move the stage2 handling of these
	keywords-as-macros from here...

	* gansidecl.h (const, inline): ...to here.

Sun Mar  7 02:44:15 1999  Richard Henderson  <rth@cygnus.com>

	* recog.c (push_operand, pop_operand): VOIDmode needn't match modes.

Sun Mar  7 01:58:47 1999  Richard Henderson  <rth@cygnus.com>

	* cse.c (canon_hash): Never reject hard regs in CCmode.

Sun Mar  7 01:15:04 1999  Jeff Law  (law@cygnus.com)

	* version.c: Bump for snapshot.

Sat Mar  6 17:18:44 1999  Richard Earnshaw  (rearnsha@arm.com)
			  Richard Henderson  <rth@cygnus.com>

	* flow.c (make_edges): Handle casesi that jump to default branch.
	If CASE_DROPS_THROUGH, force fallthru to block after casesi.

Sat Mar  6 07:49:23 1999  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* c-aux-info.c (data_type, affix_data_type, gen_decl,
	gen_formal_list_for_type, gen_formal_list_for_func_def, gen_type):
	Qualify a char* with the `const' keyword.

	* c-common.c (declare_hidden_char_array, add_attribute, if_elt,
	declare_function_name, decl_attributes, format_char_info,
	check_format_info, binary_op_error): Likewise.

	* cexp.y (yyerror, error, pedwarn, warning, token): Likewise.

	* gcse.c (dump_hash_table): Likewise.

	* integrate.c (function_cannot_inline_p): Likewise.

	* optabs.c: Include insn-config.h earlier.
	(init_libfuncs, init_integral_libfuncs, init_floating_libfuncs):
	Qualify a char* with the `const' keyword.

	* real.c (asctoe24, asctoe53, asctoe64, asctoe113, asctoe,
	asctoeg, mtherr, ereal_atof): Likewise.

	* real.h (ereal_atof): Likewise.

	* sbitmap.c (dump_sbitmap_vector): Likewise.

	* sbitmap.h (dump_sbitmap_vector): Likewise.

	* stmt.c (nesting, n_occurrences, expand_start_case): Likewise.

	* toplev.c (rest_of_compilation): Likewise.

	* tree.h (function_cannot_inline_p, expand_start_case): Likewise.

Fri Mar  5 23:16:42 1999  David Edelsohn  <edelsohn@gnu.org>

	* rs6000.h (ASM_OUTPUT_REG_{PUSH,POP}): Add 64-bit support and do
	not overwrite AIX link register save area.

Fri Mar  5 23:08:01 1999  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* reload.c (find_reloads_subreg_address): Actually create the USE
	for the register, not the new memory location.

Fri Mar  5 21:41:07 1999  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* reload1.c (emit_reload_insns): If pseudo that can't be replaced
	with its equivalent constant, fall back to reload_in.

Fri Mar  5 13:20:39 1999  Richard Henderson  <rth@cygnus.com>

	* Makefile.in: Delete .flow2 debugging files.

Fri Mar  5 11:36:11 1999  Nick Clifton  <nickc@cygnus.com>

	* config/arm/arm.c (arm_override_options): Change default target
	cpu selection so that enabling TARGET_APCS_32 does not override
	default target CPU.

Fri Mar  5 19:26:23 1999  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* sh.h (SLOW_BYTE_ACCESS): Define to 1.
	(BOOL_TYPE_SIZE): Define.

Fri Mar  5 02:14:54 1999  John Wehle  (john@feith.com)

	* function.c (assign_stack_temp_for_type): Abort
	if mode == Blkmode and align is less than
	BIGGEST_ALIGNMENT / BITS_PER_UNIT.
	(assign_stack_temp_for_type): Round the size parameter
	passed to assign_stack_local instead of size itself.

Thu Mar  4 15:00:35 1999  Richard Henderson  <rth@cygnus.com>

	* flow.c (delete_unreachable_blocks): Mark blocks as they
	are put on to the worklist, not as they are taken off.

Thu Mar  4 00:05:44 1999  Jeffrey A Law  (law@cygnus.com)

	* function.c (current_function_has_computed_jump): Remove duplicate
	definition.

Wed Mar  3 19:09:11 1999  Jim Wilson  <wilson@cygnus.com>

	* m68k/m68020-elf.h (INIT_SECTION_ASM_OP, FINI_SECTION_ASM_OP): Undef.
	(STARTFILE_SPEC, ENDFILE_SPEC): Define to empty string.

	* sparc/elf.h (MULDI3_LIBCALL, DIVDI3_LIBCALL, UDIVDI3_LIBCALL,
	MODDI3_LIBCALL, UMODDI3_LIBCALL, STDC_0_IN_SYSTEM_HEADERS): Undef.
	(INIT_SUBTARGET_OPTABS): Define to empty.

Wed Mar  3 00:00:37 1999  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* sh.c (force_into): New function.
	(expand_block_move): Use it.

Tue Mar  2 10:39:43 1999  Nick Clifton  <nickc@cygnus.com>

	* cccp.c (struct default_include): Add 'included' field.
	(main): Set 'included' field when a default include directory
	is added to the chain.  If -v is specified list all default
	include directories which do not get appended to the chain.

Tue Mar  2 09:24:10 1999  Nick Clifton  <nickc@cygnus.com>

	* configure.in (gxx_include_dir): Rename to
	gcc_gxx_include_dir in order to prevent it being overridden by
	a top level Makefile.
	(gcc_tooldir): If $exec_prefix != $prefix then use the
	difference between the two as the basis for gcc_tooldir.

	* configure: Rebuild.

	* Makefile.in: Rename gxx_include_dir to gcc_gxx_include_dir.

Tue Mar  2 16:45:31 1999  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* unroll.c (copy_loop_body): Don't make extra copies of
	NOTE_INSN_LOOP_CONT notes.

Tue Mar  2 07:44:56 1999  Mark Mitchell  <mark@markmitchell.com>

	* tree.c (save_tree_status): Don't treat functions with no context
	as nested.

Tue Mar  2 09:37:05 1999  Robert Lipe  <robertlipe@usa.net>

	* Makefile.in (MAKEINFO): Use makeinfo built from sibling
	tree when available.

Tue Mar  2 10:12:48 1999  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* alpha.c (alpha_cpu_name, alpha_cpu_string, alpha_tp_string,
	alpha_fprm_string, alpha_fptm_string, alpha_mlat_string,
	current_function_file): Add the `const' keyword.
	(normal_memory_operand): Mark parameter `mode' with
	ATTRIBUTE_UNUSED.
	(alpha_expand_unaligned_load): Add a default case to a switch.

	* alpha.h (alpha_cpu_string, alpha_fprm_string, alpha_fptm_string,
	alpha_tp_string, alpha_mlat_string): Add the `const' keyword.
	(normal_memory_operand): Add prototype.

	* alpha.md: Cast an expression to `unsigned HOST_WIDE_INT' when
	comparing against one.

Tue Mar  2 10:00:21 1999  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* mips.c (abort_with_insn): Make function static, add a prototype,
	constify 2nd parameter and mark with ATTRIBUTE_NORETURN.
	(current_function_file, mips_cpu_string, mips_isa_string,
	mips_abi_string, mips_no_mips16_string, mips_entry_string,
	mips_move_1word, mips_move_2words, output_block_move, load_store,
	override_options, make_temp_file, mips16_fp_args): Qualify a char*
	with the `const' keyword.

	* mips.h (current_function_file, mips_cpu_string, mips_isa_string,
	mips_abi_string, mips_entry_string, mips_no_mips16_string,
	mips_move_1word, mips_move_2words, output_block_move): Likewise.
	(abort_with_insn): Remove extern prototype.

	* mips.md: Qualify a char* with the `const' keyword.
	Remove many unused variables named `label'.

Tue Mar  2 01:27:52 1999  H.J. Lu  (hjl@gnu.org)

	* Makefile.in (cpp_install_dir, INSTALL_CPP, UNINSTALL_CPP): New
	variables.
	(install-cpp, uninstall-cpp): New targets.
	(install-normal): Depend on $(INSTALL_CPP).
	(uninstall): Depend on $(UNINSTALL_CPP).
	* configure.in (cpp_install_dir): New, substitute.
	(tmake_file): Added t-install-cpp for --enable-cpp.
	* configure: Rebuilt.
	* cpp.sh: New cpp script.
	* config/t-install-cpp: New target fragment.

Tue Mar  2 01:40:01 1999  Franz Sirl  <Franz.Sirl-kernel@lauterbach.com>
			  Jeffrey A Law  (law@cygnus.com)

	* cse.c (fold_rtx): Update comments for (const (minus (label) (label)))
	case.
	(cse_insn): Avoid creating a bogus REG_EQUAL note for
	(const (minus (label) (label)))
	(record_jump_cond): Fix mismatched paren in comment.

Tue Mar  2 01:07:12 1999  Dan Nicolaescu  <dann@godzilla.ics.uci.edu>

	* final.c (end_final): There are 11 words in the "main header"
	structure, not 10.

Tue Mar  2 00:09:18 1999  Marc Espie  <espie@cvs.openbsd.org>

	* extend.texi: Reference __extension__ in the index.

Mon Mar  1 19:09:32 1999  Jim Wilson  <wilson@cygnus.com>

	* Makefile.in (CROSS_FLOAT_H): Delete.
	(FLOAT_H): Use float_h_file.
	(rest.cross, stmp-int-hdrs): Delete gfloat.h dependency.
	(gfloat.h): Delete.
	(stmp-int-hdrs): Use FLOAT_H instead of gfloat.h.
	(mostlyclean): Delete gloat.h reference.
	(install-cross-rest, install-float-h-cross, stmp-headers): Update
	comments.
	* configure.in (sparcv9-*-solaris2*): Set float_format to none.
	(sparc-*-solaris2*): Set float_format to none for 2.5 and higher.
	(float_h_file): Set from float_format.  Substitute into Makefile.in.
	(float_format): No longer substitute into Makefile.in.
	* cross-make (FLOAT_H): Delete.
	* config/mips/t-cross64 (FLOAT_H): Delete.
	* configure: Rebuilt.

Mon Mar  1 16:36:18 1999  Jeffrey A Law  (law@cygnus.com)

	* mips.md (div_trap_normal, div_trap_mips16): Require the dependent
	insn to be an INSN before looking at its pattern.

Mon Mar  1 15:03:51 1999  Jim Wilson  <wilson@cygnus.com>

	* config/m68k/lb1sf68.asm (udivsi3): Change jmi to jcs.  Fix comments.
	* config/m68k/m68k.h (LEGITIMATE_INDEX_REG_P): Reject SIGN_EXTEND of
	HImode reg when TARGET_5200.

Mon Mar  1 21:44:30 1999  J"orn Rennecke  <amylaar@cygnus.co.uk>

	From Toshiyasu Morita:
	* sh.h (CACHE_LOG): SH2 has cache, too.

Mon Mar  1 14:23:36 1999  Catherine Moore  <clm@cygnus.com>

	* toplev.c (compile_file): Disable -ffunction-sections and
	debugging warning if the object format is elf.

Mon Mar  1 11:46:25 1999  Vladimir N. Makarov  <vmakarov@cygnus.com>

	* config/h8300/h8300.c (print_operand): Use 16 bit addressing
	when the data in 8-bit area and can not be addressed by 8-bit.

Sun Feb 28 16:40:00 1999  Richard Henderson  <rth@cygnus.com>

	* flow.c (create_basic_block): Disregard integrated bb notes.

Sun Feb 28 15:57:06 1999  Richard Henderson  <rth@cygnus.com>

	* sparc.md (blockage, nonlocal_goto_receiver): Set length to 0.

Sun Feb 28 14:47:53 1999  Arturo Montes  <mitosys@colomsat.com.co>

	* config/i386/t-sco5gas (crti.o): New target.

Sun Feb 28 15:10:17 1999  David Edelsohn  <edelsohn@gnu.org>

	* rs6000.md (elf_high, movsi_got, *movsi_got_internal,
	*movsi_got_internal_mem, GOT splitter, movdf_hardfloat32,
	movdf_softfloat32, movdf_hardfloat64, movdf_softfloat64,
	load_multiple, allocate_stack, call_indirect_aix32,
	call_indirect_aix64, call_value_indirect_aix32,
	call_value_indirect_aix64, call_indirect_nt,
	call_value_indirect_nt): Use gpc_reg_operand instead of
	register_operand.

Sun Feb 28 15:10:17 1999  Michael Meissner  <meissner@cygnus.com>

	* rs6000.md (one_cmplsi2, andsi3, iorsi3, xorsi3, *eqvsi3,
	*andcsi3, *iorcsi3, *nandsi3, *norsi3): Add alternatives to use CR
	other than cr0.
	* rs6000.c (and{,64}_operand): If the user did -ffixed-cr0, don't
	allow andi. or andis. which always set cr0.

Sun Feb 28 01:15:04 1999  Jeff Law  (law@cygnus.com)

	* version.c: Bump for snapshot.

Sun Feb 28 02:00:38 1999  Jeffrey A Law  (law@cygnus.com)

	* invoke.texi: Update information for PA scheduling.

Sat Feb 27 23:21:47 1999  Jerry Quinn  <jquinn@nortelnetworks.com>
			  Mike Stump  <mrs@wrs.com>

	* pa.c (override_options): Change default to 7100LC.

	* pa.h (REG_ALLOC_ORDER): Change order to allocate left half of
	float regs before right half of float regs.

Sat Feb 27 22:48:38 1999  H.J. Lu  (hjl@gnu.org)
			  Jeffrey A Law  (law@cygnus.com)

	* frame.h: Update some comments.
	* defaults.h (TARGET_ATTRIBUTE_WEAK): Define.
	* crtstuff.c (__register_frame_info, __deregister_frame_info): Declare
	using TARGET_WEAK_ATTRIBUTE.
	(__do_global_dtors_aux): Check if __deregister_frame_info is
	zero before calling it.
	(__do_global_dtors): Likewise.
	(frame_dummy): Check if __register_frame_info is zero before
	calling it.
	(__frame_dummy): Likewise.

Sat Feb 27 19:18:24 1999  Jeffrey A Law  (law@cygnus.com)

	* SERVICE: Update from the FSF.

Sat Feb 27 14:31:22 1999  Arturo Montes  <mitosys@colomsat.com.co>

	* config/i386/t-sco5 (crti.o): New target.
	* config/i386/sco5.h (STARTFILE_SPEC): Include crti.o when
	linking -shared.
	* configure.in (i[34567]86-*-sco3.2v5*): Add crti.o.

Sat Feb 27 01:12:40 1999  Jeffrey A Law  (law@cygnus.com)

	* md.texi (prologue,epilogue): Document named patterns.

Fri Feb 26 19:31:25 1999  Dave Love  <fx@gnu.org>

	* md.texi, invoke.texi: Fix unterminated @xrefs.

Fri Feb 26 15:33:45 1999  Richard Henderson  <rth@cygnus.com>

	* genattrtab.c (simplify_knowing): Fix uninitialized read
	in Feb 21 change.

	* genextract.c (main): Clear recog_operands before extracting.

Fri Feb 26 02:24:57 1999  Jeffrey A Law  (law@cygnus.com)

	* c-pragma.c (add_weak); Delete.  Moved into...
	* varasm.c (add_weak): New external function.
	(declare_weak): If HANDLE_PRAGMA_WEAK, then add the function to
	the list of weak functions.
	* c-pragma (add_weak): Declare.

Thu Feb 25 23:43:59 1999  Richard Henderson  <rth@cygnus.com>

	Flow rewrite to use basic block structures and edge lists:

	* basic-block.h (x_basic_block_head, x_basic_block_end): Kill.
	(basic_block_computed_jump_target, basic_block_live_at_start): Kill.
	(struct edge_def): New.
	(struct basic_block_def): New.
	(basic_block_info): New.
	(BLOCK_HEAD, BLOCK_END): Update.
	(ENTRY_BLOCK_PTR, EXIT_BLOCK_PTR): New.
	(uid_block_number): Kill.
	(basic_block_for_insn, BLOCK_FOR_INSN): New.
	(BLOCK_NUM): Update.
	* flow.c (XNMALLOC): Kill.
	(max_uid_for_flow): Kill.
	(uid_block_number): Kill.
	(uid_volatile): Turn into a bitmap.
	(SET_INSN_VOLATILE): New.
	(basic_block_info): New.
	(entry_exit_blocks): New.
	(x_basic_block_head, x_basic_block_end): Kill.
	(basic_block_computed_jump_target, basic_block_live_at_start): Kill.
	(flow_int_list_blocks, basic_block_succ, basic_block_pred): Kill.
	(basic_block_loop_depth): Kill.
	(basic_block_for_insn): New.
	(find_basic_blocks): Split out initial block counting into
	count_basic_blocks.  Call functions split out of find_basic_blocks_1.
	(count_basic_blocks): New.
	(find_basic_blocks_1): Split out edge recognition, unreachable
	block deletion.
	(create_basic_block): New.
	(compute_bb_for_insn): New.
	(clear_edges): New.
	(free_bb_memory): Kill.
	(add_edge, add_edge_to_label): Kill.
	(mark_label_ref): Kill.
	(make_edges): Rewrite to use edge lists.
	(make_edge, make_label_edge): New.
	(mark_critical_edges): New.
	(split_edge, insert_insn_on_edge): New.
	(commit_one_edge_insertion, commit_edge_insertions): New.
	(delete_unreachable_blocks): Rewrite to use edge lists.
	Split out EH region manipulation into delete_eh_regions.
	Call tidy_fallthru_edge and merge_blocks.
	(delete_eh_regions): New.
	(delete_note_p): New.
	(delete_insn_chain): New.
	(delete_block): Split out code into delete_insn_chain and
	tidy_fallthru_edge.  Update edge lists.
	(expunge_block): New.
	(flow_delete_insn): New?
	(can_delete_label_p): New?
	(merge_blocks_nomove, merge_blocks): New.
	(tidy_fallthru_edge): New.
	(calculate_loop_depth): New.
	(life_analysis): Allocate and free uid_volatile.
	(free_basic_block_vars): Update for new structures.
	(record_volatile_insns): Use SET_INSN_VOLATILE.
	(mark_regs_live_at_end): Tidy EXIT_IGNORE_STACK usage.
	(mark_used_regs): Likewise.
	(life_analysis_1): Use bb global_live_at_start, global_live_at_end,
	local_set regsets.  Use bb->aux to store new_live_at_end.  Begin
	life propagation from EXIT_BLOCK rather than last block.  Clear
	regs_ever_live after mark_regs_live_at_end.
	(allocate_for_life_analysis): Update for new structures.
	(propagate_block): Split out loop depth calculation to
	calculate_loop_depth.
	(regno_uninitialized): Use bb->global_live_at_start.
	(regno_clobbered_at_setjmp): Likewise.
	(dump_bb_data): Likewise.
	(find_auto_inc): Use BLOCK_FOR_INSN instead of BLOCK_NUM.
	(dump_flow_info): Update for new structures.
	(dump_edge_info): New.
	(print_rtl_with_bb): Update for new structures.
	(compute_preds_succs): Do no work -- convert edge lists.
	(set_block_for_insn): From corpse of old set_block_num.
	(set_block_num): Call it.

	* rtl.c (note_insn_name): Add NOTE_INSN_BASIC_BLOCK.
	* rtl.h (rtunion_def): Add bb entry.
	(NOTE_BASIC_BLOCK): New.
	(NOTE_INSN_BASIC_BLOCK): New.

	* varray.h (varray_data_tag): Add bb entry.
	(VARRAY_BB_INIT, VARRAY_BB): New.

	* emit-rtl.c (emit_label_before): New.

	* except.c (expand_rethrow): Delete insns following the call to
	rethrow.  Put the REG_EH_RETHROW on the call.

	* jump.c (returnjump_p, returnjump_p_1): New.

	* expr.h (nonlocal_goto_handler_labels): New declaration.
	* function.c (nonlocal_goto_handler_labels): Define it.
	(push_function_context_to): Save it.
	(pop_function_context_from): Restore it.
	(init_function_start): Clear it.
	(nonlocal_label_rtx_list): Kill.
	* function.h (struct function): Add storage space for it.
	* stmt.c (expand_nl_handler_label): Return the new label.
	(expand_nl_goto_receivers): Collect a list of them in
	nonlocal_goto_handler_labels.

	* Makefile.in (print-rtl.o): Depend on basic-block.h.
	(flow.o): Depend on insn-flags.h.

	* function.c (thread_prologue_and_epilogue_insns): Do not
	half-heartedly update bb structures.

	* toplev.c: Add flow2 dump as -dw.
	(rest_of_compilation): Finish .greg before flow2.

	* graph.c (draw_edge): Handle class 3.
	(print_rtl_graph_with_bb): Make abnormal edges red class 2,
	change non-fall-thru but adjacent to green class 3.  Update
	to use new structures.

	* print-rtl.c (print_rtx): Handle NOTE_INSN_BASIC_BLOCK.

	* reg-stack.c (BLOCK_NUM): Convert to function.  Abort if
	block_number is -1.
	(reg_to_stack): Initialize block_num to -1.

	* combine.c (set_nonzero_bits_and_sign_copies): Update reference
	to basic_block_live_at_start to bb->global_live_at_start.
	(try_combine): Likewise.
	(reg_dead_at_p): Likewise.
	* global.c (global_conflicts): Likewise.
	Handle stack regs on all abnormal edges, not just computed jumps.
	(mark_elimination): Update reference to basic_block_live_at_start.
	(build_insn_chain): Likewise.
	* haifa-sched.c (haifa_edge): Rename from edge for conflict.
	(is_cfg_nonregular): Look at nonlocal_goto_handler_labels instead
	of nonlocal_label_rtx_list.
	(check_live_1): Update reference to basic_block_live_at_start.
	(update_live_1): Likewise.
	(find_pre_sched_live): Likewise.
	(find_post_sched_live): Likewise.
	* local-alloc.c (update_equiv_regs): Likewise.
	(block_alloc): Likewise.
	* reload1.c (reload, reload_combine): Likewise.
	* regmove.c (mark_flags_life_zones): Likewise.
	* resource.c (mark_target_live_regs): Likewise.
	* sched.c (schedule_block): Likewise.

	* regclass.c (regset_release_memory): Don't free
	basic_block_live_at_start.

	* unroll.c (copy_loop_body): Don't duplicate NOTE_INSN_BASIC_BLOCK.

Thu Feb 25 21:32:34 1999  Jason Merrill  <jason@yorick.cygnus.com>

	* fixinc.wrap: Also handle struct queue in sys/stream.h.
	* fixinc.svr4: Likewise.

	* dwarf2out.c (scope_die_for): Set scope_die to comp_unit_die
	rather than asserting it.

Thu Feb 25 23:33:06 1999  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* cppexp.c (left_shift, right_shift, parse_charconst, COMPARE,
	cpp_parse_expr): Replace uses of long/HOST_BITS_PER_LONG with
	HOST_WIDEST_INT/HOST_BITS_PER_WIDEST_INT.

	* Makefile.in (cppmain.o, cpplib.o, cpphash.o, cppalloc.o,
	cpperror.o, cppexp.o, cppfiles.o, cppinit.o, fix-header.o,
	scan-decls.o): Don't depend on machmode.h.

	* cppexp.c: Don't define CHAR_BIT or HOST_BITS_PER_WIDE_INT anymore.
	Replace all instances of HOST_WIDE_INT with HOST_WIDEST_INT.

	* cppfiles.c: Likewise.

	* cpplib.c: Likewise.

	* cpplib.h: Likewise.  Also don't include machmode.h anymore.

Thu Feb 25 18:46:26 1999  Richard Henderson  <rth@cygnus.com>

	* gcc.c (default_compilers): Define __FAST_MATH__ when appropriate.
	* objc/lang-specs.h: Likewise.

Thu Feb 25 16:19:43 1999  Jeffrey A Law  (law@cygnus.com)

	* pa.md (call patterns): Lose unused argument to output_call.

	* print-rtl.c (print_rtl): Print /j and /c for the jump/call flags.

1999-02-25  Zack Weinberg  <zack@rabi.columbia.edu>

	* cpphash.c (install): Rename to cpp_install, add cpp_reader*
	first argument.  All callers changed.
	(hashtab): Removed.
	(cpp_lookup, cpp_install): Change all refs to hashtab to
	pfile->hashtab.
	(cpp_hash_cleanup): Removed.
	* cpphash.h: Adjust prototypes.
	* cpplib.h (struct cpp_reader): Add hashtab pointer.
	* cppinit.c (cpp_reader_init): Also allocate space for the
	hashtab.
	(cpp_cleanup): Delete all macros and free the hashtab.

Thu Feb 25 21:52:54 1999  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* sh.h (PASS_IN_REG_P): For TARGET_HITACHI, don't pass structures
	in registers.

	* expr.h (PRETEND_OUTGOING_VARARGS_NAMED): Provide default definition.
	* function.c (assign_parms): Honor PRETEND_OUTGOING_VARARGS_NAMED.
	* calls.c (expand_call): Likewise.

	* sh.c (sh_expand_prologue): For TARGET_HITACHI, don't push varargs /
	stdarg arguments.
	* sh.h (CPP_SPEC): Add -D__HITACHI__ for -mhitachi.
	(FUNCTION_ARG): For TARGET_HITACHI, don't pass unnamed
	arguments in registers.
	(PRETEND_OUTGOING_VARARGS_NAMED): Define.
	* va-sh.h (entire file): If __HITACHI__ is defined, use sh[123]
	flavor varargs.

Thu Feb 25 14:32:40 1999  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* cse.c (dump_class): Revert last change and make the prototype
	extern.

Thu Feb 25 19:13:42 1999  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* rtl.h (insn_first_p): Don't declare.
	* rtlanal.c (insn_first_p): Delete.
	* loop.c (loop_insn_first_p): Faster implementation.

Thu Feb 25 10:44:35 1999  Richard Earnshaw  (rearnsha@arm.com)

	* arm.h (TARGET_SWITCHES): Delete deprecated switches -m[236].
	(TARGET_3, TARGET_6): Delete.
	(ARM_FLAG_ARM[36]): Delete.
	(CPP_CPU_ARCH_SPEC): No need to handle -m[236] any more.
	(CC1_SPEC): Don't expand -m[236] into new equivalents.
	(CPP_APCS_PC_SPEC): No need to handle -m[236] any more.
	* arm.c (arm_override_options): Delete warnings about deprecated
	options -m[236].

	* arm.c (arm_finalize_pic): Build the label into the special pic
	adjustment insn instead of issuing it separately.
	* arm.md (pic_add_dot_plus_eight): Rework to contain the label
	that is needed.

	* arm.md (*zeroextractqi_compare0_scratch): Delete.
	(*ne_zeroextractsi): New pattern.

Thu Feb 25 18:40:06 1999  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* stmt.c (expand_end_loop): Grok code emitted by
	expand_exit_loop_if_false.

Thu Feb 25 10:17:32 1999  Nick Clifton  <nickc@cygnus.com>

	* config/arm/arm.c (return_in_memory): Float fields in unions
	force a return in memory.
	(load_multiple_sequence): Add comment explaining why two LDR
	instructions can be better than an LDMIA instruction.

	* config/arm/arm.h (TARGET_SHORT_BY_BYTES): Add comment
	describing the real meaning of this option.
	(FIXED_REGISTERS): Default r10 to not-fixed.
	(CALL_USED_REGISTERS): Default r10 to not-call-used.
	(SUBTARGET_CONDITIONAL_REGISTER_USAGE): If not defined, define
	as empty.
	(CONDITIONAL_REGISTER_USAGE): Fix r10 if TARGET_APCS_STACK is
	true.  Invoke SUBTARGET_CONDITIONAL_REGISTER_USAGE after
	performing other checks.

	* config/arm/arm.md (zero_extendhisi2): Undo previous change.
	(extendhisi2): Undo previous change.
	Also add comments describing why TARGET_SHORT_BY_BYTES can be
	ignored for armv4(t) architectures.

	* config/arm/riscix.h (SUBTARGET_CONDITIONAL_REGISTER_USAGE):
	Define to fix r10.

	* config/arm/riscix1-1.h
	(SUBTARGET_CONDITIONAL_REGISTER_USAGE): Define to fix r10.

Thu Feb 25 12:09:04 1999  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* cse.c (dump_class): Make the function definition static to match
	the prototype.

Wed Feb 24 17:47:28 1999  Jim Wilson  <wilson@cygnus.com>

	* dbxout.c (gstab.h): Use if CROSS_COMPILE.

	* dwarf2out.c (add_location_or_const_value_attribute): Add big
	endian correction for parms passed in regs but living on the stack.

Wed Feb 24 14:03:54 1999  Jeffrey A Law  (law@cygnus.com)

	* calls.c (initialize_argument_information): New function extracted
	from expand_call.
	(expand_call): Use initialize_argument_information.  Remove variables
	which are no longer used due to cleanups.

	* calls.c (compute_argument_block_size): New function, extracted from
	expand_calls.
	(expand_calls): Use compute_argument_block_size.  Delete
	original_args_size, use unadjusted_args_size instead.

	* calls.c (precompute_arguments): New function, extracted from
	expand_call.
	(expand_call): Use precompute_arguments.

	* calls.c (finalize_must_preallocate): New function, extracted from
	expand_call.
	(expand_call): Use finalize_must_preallocate.

	* calls.c (store_one_arg): Mark "variable_size" as possibly unused.

	* regclass.c (record_reg_classes, case 'p'): Set classes appropriately.
	An alternative always fails if it needs a pseudo and no suitable
	register class can be found.

Wed Feb 24 19:47:56 1999  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* loop.h (loop_insn_first_p): Declare.
	* loop.c (loop_insn_first_p): No longer static.
	* unroll.c (iteration_info): Fix comparison to
	reg_iv_type->num_elements.
	Before accessing reg_biv_class, check index against
	max_reg_before_loop.
	Fix and enable code for giv iterators.
	(loop_iterations): Compare with reg_iv_type->num_elements instead
	of with max_reg_before_loop.

Wed Feb 24 19:17:11 1999  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* unroll.c (unroll_loop): Avoid out-of-bounds index for local_regno.

Wed Feb 24 11:26:41 1999  Vladimir N. Makarov  <vmakarov@cygnus.com>

	* config/sparc/sparc.h (CONDITIONAL_REGISTER_USAGE): Don't use
	PIC_OFFSET_TABLE_REGNUM for register allocation when -fPIC.

Tue Feb 23 16:24:19 1999  Marc Lehmann  <pcg@goof.com>

	* config/i386/i386.md: Fix typo.

Mon Feb 22 19:36:33 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* config/mips/mips.c (mips_debugger_offset): When TARGET_MIPS16 &&
	frame_pointer_needed adjust frame size.
	(function_prologue): Don't MIPS16 .mask GPOFFSET. Already adjusted
	in .frame pseudo-op.
	Frm Jim Wilson  <wilson@cygnus.com>:
	* mips.c (function_prologue): Adjust frame size in .frame pseudo-op
	when TARGET_MIPS16 && frame_pointer_needed.

1999-02-22  Nick Clifton  <nickc@cygnus.com>

	* config/arm/arm.h: Add TARGET_CPU_strongarm1100.
	Add -mno-sched command line switch to disable scheduling of
	instructions into the function's prologue.
	(enum processor_type): Remove.
	(TARGET_OPTIONS): Add "fpe=" option to match documentation.
	(struct arm_cpu_select): Replace 'set_tune_p' and 'set_arch_p'
	fields with 'processors' field.
	(CONDITIONAL_REGISTER_USAGE): Allow r10 to be used if stack
	checking is not enabled.
	(RETURN_IN_MEMORY): Always call arm_return_in_memory.

	* config/arm/arm.c (arm_cpu): Remove.
	(tune_flags): Remove.
	(arm_is_strong): New variable: true iff the target processor is a
	StrongARM.
	(arm_is_6_or_7): New variable: true iff the target processor is an
	ARM6 or and ARM7.
	(arm_select): Fields reorganized.
	(struct processors): processor_type field removed.
	(all_procs): Remove.
	(all_cores): New array: Definitions of all known ARM cpu cores.
	(all_architectures): New array: Definitions of all known ARM
	architectures.
	(streq): New macro.
	(FL_SCHED): New processor flag: processor required load
	scheduling.
	(FL_STRONG): New processor flag: processor is a StrongARM.
	(arm_override_options): Reorganized to make code clearer.
	(use_return_insn): Test for "not (TARGET_APCS and
	frame_pointer_needed)".
	(arm_return_in_memory): Improve handling of structures.

	* config/arm/arm.md: Remove "cpu" attribute.  Replace with
	"is_strongarm" and "is_arm_6_or_7" attributes.
	(zero_extendhisi2): Check for TARGET_SHORT_BY_BYTES before
	arm_arch4.
	(extendhisi2): Check for TARGET_SHORT_BY_BYTES before arm_arch4.

	* invoke.texi (ARM Options): Document -mtune= and -mfp= options.

1999-02-22  Philip Blundell  <philb@gnu.org>

	* config/arm/linux-gas.h (INITIALIZE_TRAMPOLINE): Replace default
	definition with one including cache synchronization.
	(CLEAR_INSN_CACHE): Correct syscall number and enable definition.
	Move definition of inhibit_libc to...
	* config/arm/xm-linux.h: ... here.

	* config/arm/t-linux: Disable multilib configurations since the
	only effect for most people is to cause builds to fail.

	* config/arm/elf.h (ASM_FILE_START): Add .file directive.
	(ASM_SPEC): Translate -mapcs-float to -mfloat for the assembler.

	* config/arm/linux-elf.h (DEFAULT_VTABLE_THUNKS): Define.
	(HANDLE_SYSV_PRAGMA): Likewise.
	(LIB_SPEC): Copy definition from generic Linux files.
	(LIBGCC_SPEC): Include -lfloat if -msoft-float was given.
	(FP_DEFAULT): Set to SOFT3 on 32-bit targets.
	(DWARF2_DEBUGGING_INFO): Define.
	(PREFERRED_DEBUGGING_TYPE): Define as DBX_DEBUG.

Mon Feb 22 16:54:18 1999  Andrew MacLeod  <amacleod@cygnus.com>

	* loop.c (libcall_other_regs): Make extern.
	* rtl.h (find_last_value): Add parameter to prototype.
	(libcall_other_reg): Add extern declaration.
	* rtlanal.c (find_last_value): Add another parameter to allow
	a definition using a hardware register to be found as well.

Mon Feb 22 13:33:47 1999  Mark Mitchell  <mark@markmitchell.com>

	* cse.c (dump_class): New function.
	(invalidate_memory): Fix typo in comment.
	* function.c (temp_slot): Add an alias set field.
	(assign_stack_temp): Only reuse slots if they will have the
	same alias set as before.
	(combine_temp_slots): Don't combine if -fstrict-aliasing;
	that's unsafe.
	* rtl.c (copy_rtx): Copy all the flags (in particular,
	MEM_SCALAR_P).

Mon Feb 22 14:13:23 1999  Vladimir N. Makarov  <vmakarov@cygnus.com>

	* configure.in (i[34567]86-*-linux-gnu*,
	i[34567]86-*-linux-gnulibc1, i[34567]86-*-linux-gnuaout*,
	i[34567]86-*-linux-gnuoldld*): Use fixinc.x86-linux-gnu as
	fixincludes.

	* configure: Rebuilt.

	* fixinc.x86-linux-gnu: New script for fixing asm-statements bug
	on x86 linux.

	* fixinc/fixinc.x86-linux-gnu: Copy of the previous one.

	* fixinc/mkfixinc.sh (i[34567]86-*-linux-gnu*,
	i[34567]86-*-linux-gnulibc1, i[34567]86-*-linux-gnuaout*,
	i[34567]86-*-linux-gnuoldld*): Use fixinc.x86-linux-gnu as
	fixincludes.

Mon Feb 22 08:55:05 1999  Ovidiu Predescu  <ovidiu@cup.hp.com>

	* objc/objc-act.c (encode_type): Temporary revert to the old
	behavior of encoding types as the new one seems to break the
	encoding of bitfields.

Mon Feb 22 11:40:44 1999  Craig Burley  <craig@jcb-sc.com>
Sat Feb 20 09:59:36 1999  Craig Burley  <craig@jcb-sc.com>

	* Makefile.in (all.internal, all.cross): Depend on `doc'
	target, to ensure docs get made before installation.

	Decrease spurious warnings from -fsyntax-only:
	* stmt.c (expand_expr_stmt): Expand expr even when -fsyntax-only.

Mon Feb 22 10:55:00 1999  Gavin Romig-Koch  <gavin@cygnus.com>

	* c-lex.c (yylex): Replace warning about integer constants being
	larger than long-longs, with a warning about integer constants
	being larger than the largest target integer.

Mon Feb 22 08:35:38 1999  Craig Burley  <craig@jcb-sc.com>

	Fix -fsyntax-only ICEs:
	* varasm.c (assemble_zeros, assemble_variable,
	output_constant_def): Do nothing when -fsyntax-only.

Fri Feb 19 18:18:56 1999  Don Bowman  <don@pixstream.com>

	* configure.in (mips*-*-vxworks*): Enable gthreads vxworks support.
	* configure: Rebuilt.

Sun Feb 21 20:34:44 1999  Jeff Law  (law@cygnus.com)

	* version.c: Bump for snapshot.

Sun Feb 21 20:35:10 1999  Jeffrey A Law  (law@cygnus.com)

	* config/aoutos.h (ASM_OUTPUT_CONSTRUCTOR): Delete.
	(ASM_OUTPUT_DESTRUCTOR, ASM_OUTPUT_GC_ENTRY): Likewise.
	* tm.texi: Update docs for constructors and destructors.

Sun Feb 21 17:11:18 1999  Richard Henderson  <rth@cygnus.com>

	* genattrtab.c (check_attr_value): Allow negative const_int if
	negative_ok.  Accept integral arithmetic operators.  Accept
	direct references to other attributes.  Accept symbol_ref in
	non-constant attributes.
	(max_attr_value): Add new argument `unknownp'.  Update all callers.
	(or_attr_value): Likewise.
	(simplify_knowing): Don't optimize if max_attr_value unknown.
	(write_length_unit_log): Likewise with or_attr_value.
	(find_and_mark_used_attributes): Don't fallthru case.
	(write_attr_set): Pass thru all non-cond expressions.
	(write_attr_value): Handle symbol_ref, attr, and arithmetic.

Sun Feb 21 13:16:44 1999  Michael Hayes  <m.hayes@elec.canterbury.ac.nz>

	* regmove.c (discover_flags_reg): Use word_mode instead of SImode.

Sun Feb 21 13:15:40 1999  Richard Henderson  <rth@cygnus.com>

	* regmove.c (discover_flags_reg): Remove cc0 code.
	(mark_flags_life_zones) [HAVE_cc0]: Force use of cc0; bail if
	a potential flags register was identified.

Sat Feb 20 16:16:07 1999  Franz Sirl  <Franz.Sirl-kernel@lauterbach.com>

	* rs6000.md (scc plus ltu): Fix typo in last change.

Sat Feb 20 09:08:44 1999  Richard Earnshaw  (rearnsha@arm.com)

	* xm-arm.h (HOST_BITS_PER_LONGLONG): Define.

Fri Feb 19 23:02:02 1999  Richard Henderson  <rth@cygnus.com>

	* regmove.c (discover_flags_reg): New function.
	(flags_set_1, mark_flags_life_zones): New functions.
	(regmove_optimize): Call them.
	(fixup_match_1): Use insn modes rather than sets_cc0_p.

Fri Feb 19 22:47:01 1999  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* rtlanal.c (insn_first_p): Fix return value for insn == reference.

	* loop.c (strength_reduce, check_final_value, check_dbra_loop):
	Use loop_insn_first_p.

Fri Feb 19 15:49:26 1999  Michael Meissner  <meissner@cygnus.com>
			  David Edelsohn  <edelsohn@gnu.org>

	* rs6000.md (scc plus eq): Fix output template.
	(scc plus ltu): Fix output template and collapse variants
	correcting early clobbers.
	(scc plus geu): Fix output template.
	(scc plus gt): Fix output template.
	(scc plus gtu): Fix output template and collapse variants.

Fri Feb 19 15:43:59 1999  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* cppinit.c (print_help): Remove unescaped newline in string.

Fri Feb 19 19:55:06 1999  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* loop.c (strength_reduce): Check for intervening jumps when
	converting biv increment to giv.

Thu Feb 18 16:36:58 1999  Per Bothner  <bothner@cygnus.com>

	* tree.def (TRY_FINALLY_EXPR, GOTO_SUBROUTINE_EXPR): New tree nodes,
	* expr.c (expand_expr): Support new tree nodes.

Fri Feb 19 10:17:56 1999  Andreas Schwab  <schwab@issan.cs.uni-dortmund.de>

	* config/m68k/m68k.c (m68k_align_loops_string,
	m68k_align_jumps_string, m68k_align_funcs_string): Add const.
	* config/m68k/m68k.h (m68k_align_loops_string,
	m68k_align_jumps_string, m68k_align_funcs_string): Likewise.

Thu Feb 18 23:28:35 1999  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* bitmap.c (bitmap_print): Qualify a char* with the `const' keyword.

	* bitmap.h (bitmap_print): Likewise.

	* c-decl.c (builtin_function, grokdeclarator, grokfield): Likewise.

	* c-lang.c (build_objc_string): Likewise.

	* c-lex.c (yyerror, extend_token_buffer): Likewise.  Don't include
	limits.h or ctype.h.  Remove unused variable `p'.

	* c-lex.h (yyerror): Qualify a char* with the `const' keyword.

	* c-pragma.c (handle_pragma_token): Likewise.

	* c-pragma.h (handle_pragma_token): Likewise.

	* c-tree.h (build_objc_string, builtin_function, grokfield,
	build_indirect_ref, lvalue_or_else, readonly_warning, error_init,
	pedwarn_init): Likewise.

	* c-typeck.c (convert_for_assignment, warn_for_assignment,
	push_string, warning_init, incomplete_type_error,
	build_indirect_ref, lvalue_or_else, readonly_warning,
	build_c_cast, spelling, push_member_name, print_spelling,
	error_init, pedwarn_init, start_init): Likewise.

	* objc/objc-act.c (build_objc_string): Likewise.

	* print-tree.c (print_node_brief, print_node): Likewise.

	* tree.h (lvalue_or_else, print_node, print_node_brief): Likewise.

Thu Feb 18 20:44:21 1999  David Edelsohn  <edelsohn@gnu.org>

	* regclass.c (record_reg_classes): Correctly handle 'p' constraint.

Thu Feb 18 19:59:37 1999  Marc Espie  <espie@cvs.openbsd.org>

	* configure.in :Handle OpenBSD platforms.
	* configure: Rebuilt.
	* config/openbsd.h: New file.
	* config/xm-openbsd.h: New file.
	* config/t-openbsd: New file.
	* config/t-openbsd-thread: New file.

Thu Feb 18 18:47:09 1999  Jeffrey A Law  (law@cygnus.com)

	* function.c (assign_stack_temp_for_type): Round SIZE before calling
	assign_stack_local for BLKmode slots.

Fri Feb 19 01:45:06 1999  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* loop.c (strength_reduce): For derived givs, replace the
	giv this was derived from with its new_reg.
	(recombine_givs): Don't set new_reg for derived giv.
	And don't print it, print SUM instead.

Thu Feb 18 15:52:49 1999  Jim Wilson  <wilson@cygnus.com>

	* m68kelf.h (ASM_RETURN_CASE_JUMP): Add 5200 support.

1999-02-18  Zack Weinberg  <zack@rabi.columbia.edu>

	* cpplib.c: Kill define of STDC_VALUE.  Don't include output.h
	  or prefix.h. Change CPP_IS_MACRO_BUFFER to not refer to
	  macro_cleanup.
	  (GET_ENV_PATH_LIST, PATH_SEPARATOR, STANDARD_INCLUDE_DIR,
	  predefs, SIZE_TYPE, PTRDIFF_TYPE, WCHAR_TYPE,
	  CPP_WCHAR_TYPE, USER_LABEL_PREFIX, REGISTER_PREFIX, struct
	  cpp_pending, version_string, struct default_include,
	  include_defaults_array, path_include, cpp_options_init,
	  dump_special_to_buffer, initialize_builtins, cpp_start_read,
	  cpp_reader_init, nreverse_pending, push_pending, print_help,
	  cpp_handle_option, cpp_handle_options, cpp_finish,
	  cpp_cleanup): Move to cppinit.c.
	  (macro_cleanup, struct arglist, collect_expansion,
	  create_definition, compare_defs, comp_def_part, ARG_BASE,
	  struct argdata, macarg, change_newlines, timestamp,
	  monthnames, special_symbol, unsafe_chars, macroexpand,
	  push_macro_expansion): Move to cpphash.c.
	  (quote_string, check_macro_name, cpp_expand_to_buffer,
	  output_line_command, cpp_undef): Export.
	  (null_underflow, null_cleanup, handle_directive): Make static.

	* cpplib.h: Prototype now-exported functions.  Adjust decls of
	  syntax tables so we can include cpplib.h in cppinit.c.
	* cpphash.h: Prototype all functions exported by cpphash.c.
	* cppinit.c: Make syntax tables initialized data if possible
	  (uses GCC designated-initializer extension).
	* cppexp.c: Make cpp_lex static.
	* Makefile.in: Move -D switches for the various include dirs
	  from cpplib.o rule to cppinit.o rule.  Adjust dependencies.

Thu Feb 18 13:15:56 1999  Marc Espie  <espie@cvs.openbsd.org>

	* alpha/openbsd.h: New file.
	* alpha/xm-openbsd.h: New file.
	* sparc/openbsd.h: New file.
	* sparc/xm-openbsd.h: New file.
	* m68k/openbsd.h: New file.
	* m68k/xm-openbsd.h: New file.
	* i386/openbsd.h: New file, originally from netbsd.
	* i386/xm-openbsd.h: New file.

1999-02-17  Zack Weinberg  <zack@rabi.columbia.edu>

	* Makefile.in: Correct dependencies for cpplib object files.

Wed Feb 17 14:04:18 1999  Michael Meissner  <meissner@cygnus.com>

	* rs6000.md ({add,sub}si3 `.'): Add alternatives to use CR other
	than cr0.

Wed Feb 17 16:59:28 1999  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* loop.c (strength_reduce): Don't move giv insn for biv turned giv
	below scan_start.

Wed Feb 17 10:56:24 1999  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* tree.c (tree_node_kind_names, print_obstack_name,
	get_identifier, maybe_get_identifier, build_string,
	build_expr_wfl, is_attribute_p, lookup_attribute,
	print_obstack_statistics, get_file_function_name_long, tree_check,
	tree_class_check, expr_check): Qualify a char* with the `const'
	keyword.

	* tree.h (get_identifier, maybe_get_identifier, build_string,
	build_expr_wfl, is_attribute_p, lookup_attribute,
	print_obstack_statistics, print_obstack_name, tree_check,
	tree_class_check, expr_check): Likewise.

Tue Feb 16 21:29:38 1999  Jeffrey A Law  (law@cygnus.com)

	* i386/freebsd-elf.h, i386/gas.h, i386/linux.h: Fix minor spacing
	errors.

	* calls.c (store_one_arg): Mark any slots used for the argument
	as in-use immediately after we're done saving any slots which
	will be overwritten by this argument.

Tue Feb 16 21:02:07 1999  Anton Hartl  <toni@devsoft.com>

	* rs6000.md (call_value): Fix typo.

Wed Feb 17 01:29:07 1999  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* loop.c (strength_reduce): Calculate maybe_dead before
	calling recombine_givs.

Wed Feb 17 00:43:12 1999  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* loop.c (strength_reduce): Dump biv increment -> giv conversions.

Tue Feb 16 15:31:39 1999  Ovidiu Predescu  <ovidiu@cup.hp.com>

	* objc/objc-act.c (encode_type): Encode the type instead of
	encoding the mode of the type (patch from Richard Frith-Macdonald
	<richard@brainstorm.co.uk>).

Tue Feb 16 10:53:51 1999  Richard Earnshaw  (rearnsha@arm.com)

	* config/arm/arm.md (*zeroextractqi_compare0_scratch): Re-add load
	instruction killed in previous change.  Simplify mask generation.
	(*zeroextractsi_compare0_scratch): Simplify mask generation.

Tue Feb 16 09:52:26 1999  Nick Clifton  <nickc@cygnus.com>

	* config/arm/arm.md (zeroextractqi_compare0_scratch): Ensure that
	bitfield does not overflow a byte boundary.

Tue Feb 16 01:37:33 1999  Charles G Waldman  <cgw@alum.mit.edu>

	* c-common.c (shorten_compare): Get the min/max value from the
	underlying type of an enumeration, not the enumerated type itself.

Mon Feb 15 23:04:48 1999  Jeffrey A Law  (law@cygnus.com)

	* jump.c: Include insn-attr.h.
	(delete_computation): If reload has completed and insn scheduling
	after reload is enabled, then do not depend on REG_DEAD notes.
	* Makefile.in (jump.o): Depend on insn-attr.h.

Mon Feb 15 16:57:38 1999  Richard Henderson  <rth@cygnus.com>

	* i386.md (addsi3): Allow lea for any constant_p.

1999-02-15  Zack Weinberg  <zack@rabi.columbia.edu>

	* toplev.c (documented_lang_options): Remove -fident and
	  -fnoident, which are now handled by the language independent
	  option parser.

1999-02-15  Zack Weinberg  <zack@rabi.columbia.edu>

	* c-common.c (UNGETC [USE_CPPLIB=1]): Do nothing if c is EOF.
	* c-lex.c: Likewise.
	* cpplib.c (cpp_push_buffer, cpp_pop_buffer): Use a linked
	list in malloced memory for the buffer stack.
	(cpp_get_token): Don't pop the last buffer off the stack.
	Calls after CPP_EOF has been returned produce CPP_EOF with no
	state change.
	(cpp_finish): Pop last buffer here.
	(do_line): Don't free ip->last_nominal_fname if it is equal to
	ip->fname.
	(special_symbol): If a T_CONST is the empty string, push a
	single `@ ' escape instead.
	(macroexpand): Special symbol buffers have escapes too.
	* cpplib.h (struct cpp_buffer): Remove unused fields, add prev
	buffer pointer.
	(struct cpp_reader): Remove buffer_stack.  Add
	buffer_stack_depth.
	(CPP_PREV_BUFFER, CPP_NULL_BUFFER): Buffer stack is now a
	linked list.

Mon Feb 15 14:44:53 1999  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* cccp.c: Don't define HOST_WIDE_INT.  Replace all occurrences of
	WIDE_INT with WIDEST_INT.

	* cexp.y: Likewise.
	Don't define unsigned_HOST_WIDE_INT, CHAR_BIT or
	HOST_BITS_PER_WIDE_INT.  Replace occurrences of PRINTF_PROTO_1()
	style with PVPROTO() ATTRIBUTE_PRINTF_1 style macros.  Replace
	occurrences of "unsigned_HOST" with "unsigned HOST".  Provide a
	definition of variable `c89' when compiling a test binary and set it.

	* system.h: Don't define the PRINTF_PROTO_* macros.

Mon Feb 15 11:33:51 1999  Jeffrey A Law  (law@cygnus.com)

	* loop.c (mark_loop_jump): Handle LO_SUM.  If we encounter something
	we do not understand, mark the loop and containing loops as invalid.

Mon Feb 15 00:40:45 1999  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* alias.c (init_alias_analysis): Avoid self-referential value
	when setting reg_known_value from REG_EQUAL notes.

Sun Feb 14 23:12:10 1999  Richard Henderson  <rth@cygnus.com>

	* i386.c (legitimate_address_p): Verify modes of base and index.

Sun Feb 14 23:01:28 1999  Richard Henderson  <rth@cygnus.com>

	* i386.c (legitimate_pic_address_disp_p): Remove static.
	* i386.h (LEGITIMATE_PIC_OPERAND_P): Use it instead of
	open-coding cases.

Sun Feb 14 21:03:28 1999  Jeffrey A Law  (law@cygnus.com)

	* except.c (start_catch_handler): Use emit_cmp_and_jump_insns.
	* explow.c (probe_stack_range): Likewise.
	* expmed.c (do_cmp_and_jump): Likewise.
	* expr.c (store_expr, expand_expr, expand_builtin): Likewise.
	(do_tablejump): Likewise.
	* stmt.c (expand_expr_stmt, expand_end_case): Likewise.
	(do_jump_if_equal, emit_case_nodes): Likewise.
	* optabs.c (emit_cmp_and_jump_insns): Clarify comments.  If UNSIGNEDP,
	then convert comparison to an unsigned code before emitting the jump.
	(expand_float, expand_fix): Use emit_cmp_and_jump_insns.

Sun Feb 14 02:24:15 1999  Jeff Law  (law@cygnus.com)

	* version.c: Bump for snapshot.

Sun Feb 14 01:15:04 1999  Jeff Law  (law@cygnus.com)

	* version.c: Bump for snapshot.

Sun Feb 14 00:45:50 1999  Jeffrey A Law  (law@cygnus.com)

	* loop.c: Disable recent loop changes.  Temporary as Joern
	continues to fix problems.

Sat Feb 13 23:29:42 1999  Richard Henderson  <rth@cygnus.com>

	* loop.c (combine_givs_used_by_other): Delete.
	(combine_givs_benefit_from): Delete.
	(combine_givs): Deny combination of givs only used once.  Simplify
	code with the death of combine_givs_benefit_from.

Sun Feb 14 11:24:05 1999  Michael Hayes  <m.hayes@elec.canterbury.ac.nz>

	* loop.c (scan_loop): Call reg_in_basic_block_p before
	loop_reg_used_before_p.

Sat Feb 13 05:32:00 1999  Richard Earnshaw  (rearnsha@arm.com)

	* arm.md: Use gen_rtx_FOO instead of gen_rtx (FOO, ...).
	* arm.h: Likewise.
	* arm.c: Likewise.

	* arm.h (TARGET_OPTIONS): Reformat for clarity.
	(GO_IF_LEGITIMATE_ADDRESS): When generating PIC, references to symbols
	in the constant pool aren't valid.
	(LEGITIMATE_PIC_OPERAND_P): Likewise.

	* arm.c: Include "system.h", not stdio.h and string.h.

Fri Feb 12 13:06:28 1999  Jim Wilson  <wilson@cygnus.com>

	* stmt.c (expand_return): Return if optimize_tail_recursion succeeded.
	(optimize_tail_recursion): Change return type from void to int.
	Add return statements.
	* tree.h (optimize_tail_recursion): Change prototype to match.

Fri Feb 12 21:09:51 1999  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* reload.c (find_reloads_subreg_address): New function, broken out of
	find_reloads_toplev.
	(find_reloads_toplev, find_reloads_address_1): Use it.

Fri Feb 12 13:20:52 1999  Jeffrey A Law  (law@cygnus.com)

	* h8300.md (zero_extendhisi2 H8/300 variant): Correctly handle
	extending a CONST_INT.

	* h8300.md (peephole for combining memrefs): Delete incorrect peephole.

Fri Feb 12 18:29:11 1999  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* loop.c (loop_insn_first_p, biv_elimination_giv_has_0_offset):
	New functions.
	(maybe_eliminate_biv_1): Use biv_elimination_giv_has_0_offset.

Fri Feb 12 16:56:10 1999  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* loop.c (load_mems): Don't guess how to do a load / store, use
	emit_move_insn.

Fri Feb 12 09:24:26 1999  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* system.h: Provide a definition for HOST_WIDEST_INT, etc.

Fri Feb 12 23:37:26 1999  Michael Hayes  <m.hayes@elec.canterbury.ac.nz>

	* config/c4x/c4x.c (c4x_address_cost): Revert 9 Feb change.

Fri Feb 12 00:51:26 1999  Jeffrey A Law  (law@cygnus.com)

	* reload.c (find_reloads_address_1): Fix handling of an autoincremented
	pseudo which is homed in the stack.

	* mips.c (save_restore_insns): Fix loop to save/restore FP registers.
	(compute_frame_size): Change loop over FP regs to be consistent
	with the loop in save_restore_insns.

Thu Feb 11 17:38:40 1999  Jim Wilson  <wilson@cygnus.com>

	* i960/i960.h (OVERRIDE_OPTIONS): Warn if -mlong-double-64 is used.
	(LONG_DOUBLE_TYPE_SIZE): Undef then unconditionally define to 96.

Thu Feb 11 15:11:35 1999  Jeffrey A Law  (law@cygnus.com)

	* mn10200.md (bset); Re-enable.

Thu Feb 11 15:20:49 1999  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* sh.md (is_sfunc): New attribute.
	* sh.h (INSN_SETS_ARE_DELAYED, INSN_REFERENCES_ARE_DELAYED): Use it.

Thu Feb 11 01:06:49 1999  Nathan Sidwell  <nathan@acm.org>

	* fold-const.c (range_binop): Take account of the bounded nature
	of fixed length arithmetic when comparing unbounded ranges.

Thu Feb 11 00:08:17 1999  John Wehle  (john@feith.com)

	* function.c (assign_stack_temp_for_type): Clear best_p
	when an exact match is found.

	* i386.h (LOCAL_ALIGNMENT): Define.
	* function.c (assign_stack_local, assign_outer_stack_local): Use it.
	(assign_stack_temp_for_type): New function based on assign_stack_temp.
	(assign_stack_temp): Call it.
	(assign_temp): Use assign_stack_temp_for_type, not assign_stack_temp.
	* stmt.c: Use assign_temp, not assign_stack_temp.
	* tm.texi: Document LOCAL_ALIGNMENT.

Wed Feb 10 23:28:28 1999  Jeffrey A Law  (law@cygnus.com)

	* reorg.c: Finish deleting half-deleted comment.

Wed Feb 10 17:12:21 1999  Jim Wilson  <wilson@cygnus.com>

	* emit-rtl.c (operand_subword): Sign extend REAL_VALUE_TO_TARGET_SINGLE
	result.
	* final.c (split_double): Sign extend REAL_VALUE_TO_TARGET_DOUBLE
	result.
	* real.c (endian): Delete sign extension code.
	* config/m32r/m32r.md (movsf_insn+1): REAL_VALUE_TO_TARGET_SINGLE call
	replaced with operand_subword call.

Wed Feb 10 15:16:39 1999  Richard Henderson  <rth@cygnus.com>

	* alpha.md (cmov compound patterns): Delete.  Jump can now
	create the correct constructs in the first place.

Wed Feb 10 11:03:22 1999  Richard Henderson  <rth@cygnus.com>

	* configure.in (alphaev6*): Fix typo in target_cpu_default2.

Wed Feb 10 13:59:18 1999  Dave Brolley  <brolley@cygnus.com>

	* mbchar.c (local_mb_cur_max): Handle the case where MB_CUR_MAX is 0.

Wed Feb 10 10:35:05 1999  Jim Wilson  <wilson@cygnus.com>

	* tmp-emsgids.c: Delete.

Wed Feb 10 09:57:08 1999  Mark Mitchell  <mark@markmitchell.com>

	* rtlanal.c (for_each_rtx): Fix declaration to conform to GNU
	coding standards.

Wed Feb 10 10:09:41 1999  Jeffrey A Law  (law@cygnus.com)

	* mn10200.md (bset, bclr): Operand 0 is a read/write operand.

	* reload1.c (reload_combine_note_store): Second argument is no
	longer unused/ignored.  Handle multi-register hard regs.
	(move2add_note_store): Simplify.

Wed Feb 10 10:05:23 1999  Mumit Khan  <khan@xraylith.wisc.edu>

	* collect2.c (collect_execute): Remove cygwin-specific code.

Tue Feb  9 17:27:29 1999  Nathan Sidwell  <nathan@acm.org>

	* system.h (_, N_): Remove dummy i18n macros.
	* protoize.c: Move inclusion of intl.h to after system.h.
	* cexp.y: Include intl.h.
	* cexp.c: Rebuilt.

Tue Feb  9 16:52:22 1999  Mumit Khan  <khan@xraylith.wisc.edu>

	* i386/cygwin.h (SUBTARGET_OVERRIDE_OPTIONS): New macro to ignore
	fpic/fPIC for windows32 targets.
	* i386/xm-cygwin.h (GET_ENV_PATH_LIST): Replace '\\' in windows32
	paths with '/'.
	* i386/mingw32.h (CPP_SPEC): Define.
	(CPP_PREDEFINES): Add MINGW32 version id.
	* i386/crtdll.h (CPP_PREDEFINES): Likewise.

	* Makefile.in (collect2$(exeext)): Delete redundant dependency and
	add missing exeext to target.

	* gcc.c (convert_filename): Handle null filename argument.

Wed Feb 10 15:46:10 1999  Michael Hayes  <m.hayes@elec.canterbury.ac.nz>

	* config/c4x/c4x.md (*movhf_noclobber, *movhi_noclobber): Use
	m constraint instead of QT.

1999-02-09  Brendan Kehoe  <brendan@cygnus.com>

	* cpplib.c (special_symbol): Move IP to be declared in function
	scope, rather than individual case statements.

1999-02-09  Zack Weinberg  <zack@rabi.columbia.edu>

	* cppfiles.c (finclude): Handle pipes properly under old BSD
	  derivatives.

1999-02-09  Melissa O'Neill  <oneill@cs.sfu.ca>

	* system.h: Provide fallback definitions for S_ISCHR,
	  S_ISSOCK, S_ISFIFO, O_NONBLOCK, and O_NOCTTY.

1999-02-09  Zack Weinberg  <zack@rabi.columbia.edu>

	* cpplib.c (do_define): Allow redefining __STDC__ with -D.

1999-02-09  Jim Blandy  <jimb@zwingli.cygnus.com>

	* configure.in: For PowerPC configurations, accept "401", "ec603e",
	"740", and "750" as valid arguments to --with-cpu.
	* configure: Rebuilt.

Tue Feb  9 00:00:14 1999  Mark Kettenis  <kettenis@gnu.org>

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

Mon Feb  8 22:38:24 1999  Jeffrey A Law  (law@cygnus.com)

	* rs6000.md: Revert "alternate use of crs if cr0 not available"
	patches from 01-22-1999, 01-24-1999, 01-26-1999, and 02-08-1999.

Mon Feb  8 21:36:44 1999  Richard Henderson  <rth@cygnus.com>

	* output.h (current_function_has_computed_jump): Rename from
	current_function_addresses_labels.
	* function.h (struct function): Likewise for addresses_labels member.
	* rtl.h (FUNCTION_FLAGS_HAS_COMPUTED_JUMP): Likewise.
	* function.c (current_function_has_computed_jump): Likewise.
	Update all references.
	* integrate.c (function_cannot_inline_p):
	Test current_function_has_computed_jump instead of addresses_labels.
	(initialize_for_inline): Likewise save.
	(output_inline_function): Likewise restore.

	* expr.c (expand_expr): Don't reference addresses_labels variables.
	* stmt.c (expand_computed_goto): Set has_computed_jump.

1999-02-08  Michael Meissner  <meissner@cygnus.com>

	This is being installed only to get it into the repository to help
	with the revert, resubmit & review process for the massive rs6000.md
	changes.
	* rs6000.md (andsi3_internal1 splitter): Don't split if using the
	rlwinm instruction.
	(anddi3_internal1): Likewise.
	(andsi3_internal{2,3}): Correct some insn lengths.
	(anddi3*): Restore missing TARGET_POWERPC64, and don't emit old
	mnemonics.

Mon Feb  8 21:31:06 1999  Richard Henderson  <rth@cygnus.com>

	* loop.c (reg_single_usage): New file-scope variable ...
	(scan_loop): ... moved out of here.  Always initialize.
	Test loop_has_call instead of reg_single_usage not zero.
	Free reg_single_usage after strength reduction.
	(count_loop_regs_set): Assume single_usage nonzero.
	(combine_givs_used_by_other): Test reg_single_usage.
	(load_mems_and_recount_loop_regs_set): Remove reg_single_usage
	as a parameter.  Assume nonzero.

1999-02-08  Zack Weinberg  <zack@midnite.ec.rhno.columbia.edu>

	* cpplib.c (special_symbol): Rewrite.  Don't copy things
	  multiple times.  Handle __STDC__ specially.  T_CONST
	  indicates a constant /string/.  Don't handle T_*_TYPE and
	  T_SPEC_DEFINED.  Use cpp_buf_line_and_col instead of
	  adjust_position.  Determine the file buffer only if needed.
	  (initialize_builtins): Handle __SIZE_TYPE__,
	  __PTRDIFF_TYPE__, __WCHAR_TYPE__, __USER_LABEL_PREFIX__, and
	  __REGISTER_PREFIX__ with T_CONST special hashtab entries.
	  Don't provide __OBJC__; the driver does that.  Provide
	  __STDC_VERSION__, using T_CONST.  Use T_STDC for
	  __STDC__.  Give install the length of all symbols defined.
	  (eval_if_expression): Drop code to insert and remove the
	  "defined" special symbol.

	* cpplib.h: Remove SELF_DIR_DUMMY (no longer used).  Remove
	  T_*_TYPE and T_SPEC_DEFINED from enum node_type; add T_STDC.

	* cpphash.c (install): Drop the `ivalue' parameter.  Constify
	  the `value' parameter.  All callers changed.
	* cpphash.h (install): Change prototype to match.
	  (union hashval): Remove `ival' member.
	* cppexp.c (cpp_lex): Handle `defined' here.

Mon Feb  8 17:29:42 1999  Jeffrey A Law  (law@cygnus.com)

	* pa.h (EXTRA_CONSTRAINT): Fix comment.

Mon Feb  8 18:57:45 1999  Vladimir N. Makarov  <vmakarov@cygnus.com>

	* c-typeck.c (check_init_type_bitfields): Use nonincremental
	initialization of unions whose first member is a bitfield.
	Remove unnecessary code for checking the declaration mode
	after DECL_C_BIT_FIELD.

	* varasm.c (output_constructor): Additional comment about the
	constructor of bitfield union initialization.

Tue Feb  9 11:55:04 1999  Michael Hayes  <m.hayes@elec.canterbury.ac.nz>

	* config/c4x/c4x.md (*movhi_stik): New pattern.
	(movhi): Allow some immediate constants to be directly
	stored in memory.

Tue Feb  9 11:34:15 1999  Michael Hayes  <m.hayes@elec.canterbury.ac.nz>

	* config/c4x/c4x.md (all call patterns): Add constraints "Ur".
	(call, call_value): Force address into a register if not valid
	for a call instruction.
	(load_immed_address): Emit a USE of the SYMBOL_REF that is
	forced into memory.
	* config/c4x/c4x.c (c4x_print_operand): Fix 'C' and 'U' modifiers.

Tue Feb  9 11:08:41 1999  Michael Hayes  <m.hayes@elec.canterbury.ac.nz>

	* config/c4x/c4x.c (call_address_operand, symbolic_address_operand):
	Rename from call_operand and symbolic_operand respectively.  All
	callers changed.
	* config/c4x/c4x.md (call_address_operand, symbolic_address_operand):
	Likewise.
	* config/c4x/c4x.h (call_address_operand, symbolic_address_operand):
	Likewise.
	(PREDICATE_CODES): Allow CONST, LABEL_REF for call_address_operand.

Tue Feb  9 10:52:27 1999  Michael Hayes  <m.hayes@elec.canterbury.ac.nz>

	* config/c4x/c4x.c (c4x_legitimize_address): Don't generate a
	LO_SUM address for HImode or HFmode but instead force address into
	a register so that it is offsettable.
	(c4x_emit_move_sequence): Handle LO_SUM immediate address.

Tue Feb  9 10:46:42 1999  Michael Hayes  <m.hayes@elec.canterbury.ac.nz>

	* config/c4x/c4x.c (c4x_address_cost): Return cost of 1 for
	REG+REG addressing if strength reduction enabled.

Tue Feb  9 10:10:31 1999  Michael Hayes  <m.hayes@elec.canterbury.ac.nz>

	* config/c4x/t-c4x  (LIBGCC2_CFLAGS): Delete.
	(TARGET_LIBGCC2_CFLAGS): Define.

1999-02-08  Nick Clifton  <nickc@cygnus.com>

	* config/v850/v850.md: Replace \\n\\t with \\;

	* config/v850/v850.md: Enforce TARGET_LONG_CALLS option.
	* config/v850/v850.c (construct_restore_jr, construct_save_jarl):
	Enforce TARGET_LONG_CALLS option.

Mon Feb  8 11:43:07 1999  Donn Terry  <donn@interix.com>

	* real.c (PUT_REAL) [XFmode]: Zero the balance of the structure.

Mon Feb  8 11:37:24 1999  Marc Espie  (espie@cvs.openbsd.org)

	* m88k/t-luna-gas: Remove bash dependency.

Mon Feb  8 11:34:44 1999  Graham  <grahams@rcp.co.uk>

	* collect2.c (xrealloc): Fix typo in last change.

Mon Feb  8 09:13:38 1999  Jeff Law  (law@cygnus.com)

	* version.c: Bump for snapshot.

Sun Feb  7 22:18:42 1999  Robert Lipe  <robertlipe@usa.net>

	* tree.h (TYPE_CHECK): Make it clear to the preprocessor
	that we do not want macro replacement within a character constant.
	(TYPE_CHECK1): Likewise.

Sun Feb  7 15:37:10 1999  Jason Merrill  <jason@yorick.cygnus.com>

	* tree.h (DECL_P): New macro.

Sun Feb  7 01:15:04 1999  Jeff Law  (law@cygnus.com)

	* version.c: Bump for snapshot.

Sat Feb  6 18:14:46 1999  Jeffrey A Law  (law@cygnus.com)

	* mn10300.md (reload_insi): Do not earlyclobber the output operand.

	* README.g77, gcc.c, gcc.texi: Update email addresses.
	* invoke.texi system.h: Likewise.

Sat Feb  6 11:04:08 1999  Jim Wilson  <wilson@cygnus.com>

	* unroll.c (find_splittable_givs): After express_from, call replace_rtx
	to convert dest_reg to new_reg.

Sat Feb  6 10:31:35 1999  Jeffrey A Law  (law@cygnus.com)

	* reload1.c (reload_combine_note_store): Be more careful with
	STRICT_LOW_PART, ZERO_EXTRACT and SIGN_EXTRACT.
	(move2add_note_store): Likewise.

Sat Feb  6 10:18:01 1999  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* cppfiles.c (read_and_prescan): Cast the result of `xrealloc' to
	U_CHAR* when assigning to one.  Ensure the values of a ?: operator
	have the same type.

	* cppinit.c (initialize_char_syntax): Use K&R function definition.

Sat Feb  6 11:17:03 1999  Richard Earnshaw  <rearnsha@arm.com>

	Support for ARM9
	* config/arm/arm.c (all_procs): Add arm9 and arm9tdmi.
	* config/arm/arm.h ((TARGET_CPU_arm9, TARGET_CPUD_arm9tdmi): Define.
	(TARGET_CPU_DEFAULT): Rework to support ARM9.
	(CPP_CPU_ARCH_SPEC): Likewise.
	(enum processor_type): Likewise.
	* config/arm/arm.md (attr cpu): Add arm9.

	General scheduling changes
	* config/arm/arm.c (MAX_INSNS_SKIPPED): Delete.
	(max_insns_skipped): New variable.
	(arm_override_options): If generating hard floating point code for
	the FPA, emit code for version 3.
	When optimizing for space, don't synthesize constants.
	Reword several flags based on the requested processor and optimization
	level.
	(use_return_insn): New argument iscond, all callers changed.  Don't
	use a return insn if it will be conditional and that would be
	expensive; eg on StrongARM.
	(arm_adjust_cost): Anti- and output- dependencies normally have no
	cost.
	(load_multiple_sequence): Newer ARMs don't benefit from ldm if
	the sequence is short.
	(final_prescan_insn): Use max_insns_skipped instead of
	MAX_INSNS_SKIPPED.  Note whether we will make a return instruction
	conditional, and aviod this if it would be expensive.
	* config/arm/arm.md (scheduling attributes and function units):
	Rewrite to better describe ARM8, 9 and StrongARM.

	* config/arm/arm.md (*movhi_insn_littleend): Make op0 predicate
	s_register_operand.
	(*ifcompare_plus_move): Use arm_rhs_operand in place of
	arm_rhsm_operand.  Rework constraints.
	(*if_plus_move): Likewise.
	(*ifcompare_move_plus): Likewise.
	(*if_move_plus): Likewise.
	(*ifcompre_arith_move): Likewise.
	(*if_arith_move): Likewise.
	(*ifcompare_move_arith): Likewise.
	(*if_move_arith): Likewise.

	* config/arm/xm-netbsd.h: Don't include arm/xm-arm.h.

1999-02-05  Michael Meissner  <meissner@cygnus.com>

	* loop.c (check_dbra_loop): A store using an address giv for which
	we have no life information is not reversible.

Fri Feb  5 17:08:01 1999  Dave Brolley  <brolley@cygnus.com>

	* function.c (fixup_var_refs): Scan catch_clauses too.

Fri Feb  5 11:49:49 1999  Benjamin Kosnik  <bkoz@loony.cygnus.com>

	* c-common.c (decl_attributes): Fix reserved space for init_priority.
	* tree.h (MAX_RESERVED_INIT_PRIORITY): New macro.

Fri Feb  5 12:37:05 1999  Jeffrey A Law  (law@cygnus.com)

	* loop.c (strength_reduce): Clear not_every_iteration when
	passing the NOTE_INSN_LOOP_CONT note.

	* haifa-sched.c (add_dependence): Do not add a dependency on a
	note.

Fri Feb  5 10:55:43 1999  Nick Clifton  <nickc@cygnus.com>

	* recog.c (split_block_insns): Only call update_flow_info if
	instruction scheduling is enabled.

1999-02-05  Zack Weinberg  <zack@rabi.columbia.edu>

	* Makefile.in (gen-protos): Use libcpp.a like everyone else.

Fri Feb  5 07:09:29 1999  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* loop.c (first_loop_store_insn): New file-scope variable.
	(prescan_loop): Set it.
	(check_dbra_loop): Check if a store depends on a register
	that is set after the store.

Fri Feb  5 06:55:15 1999  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* unroll.c (entire file): Remove tabs / spaces at end of lines.
	Replace spaces with tabs where appropriate.

Thu Feb  4 15:12:41 1999  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* loop.c (scan_loop): New argument loop_cont.  Changed caller.
	(strength_reduce): New argument loop_cont. Changed caller.
	Before clearing not_every_iteration after a label, check if
	we are not already past LOOP_CONT.

1999-02-04  Zack Weinberg  <zack@rabi.columbia.edu>

	* cpperror.c (cpp_print_containing_files): Fix formatting
	bug induced by merge.

1999-02-04  Zack Weinberg  <zack@rabi.phys.columbia.edu>

	* cpplib.c (initialize_char_syntax): Move to cppinit.c.
	(cpp_define): Remove redundant syntax checks.
	(make_assertion): Rename cpp_assert, remove redundant syntax
	checks, export.
	(cpp_options_init): Don't init things to zero twice.
	(cpp_expand_to_buffer): Use memcpy, not a char-by-char loop.
	(do_include): Kill excessively verbose #import warning that
	snuck back in in the gcc2 merge.
	(convert_string): Removed.
	(do_line): Rewrite with simple last-name-used cache instead of
	private hashtable.
	(cpp_start_read): Call initialize_char_syntax here, not...
	(cpp_reader_init): ...here.
	(cpp_handle_options): Support the -std switch.
	* cpplib.h (cpp_buffer): Add last_nominal_fname member.
	(cpp_options): Add c9x flag.
	Declare all the is_* tables and trigraph table here, as const.
	Prototype cpp_assert and initialize_char_syntax.
	* cppinit.c: New file.
	* cppfiles.c (read_and_prescan): Optimize.
	* Makefile.in (LIBCPP_OBJS): Add cppinit.o.

Thu Feb  4 10:46:30 1999  Gavin Romig-Koch  <gavin@cygnus.com>

	* config/mips/mips.md ([u]divmodsi4,[u]divmoddi4,[u]divsi3,[u]divdi3,
	[u]modsi3,[u]moddi3) : Don't copy the "zero" argument to a register
	before calling gen_div_trap.

Wed Feb  3 21:56:27 1999  Jeffrey A Law  (law@cygnus.com)

	* configure.in (hppa1.1-*-*, hppa2*-*): Use symbolic value rather
	than numeric value for target_cpu_default..
	* configure: Rebuilt.

Wed Feb  3 21:55:56 1999  Marc Espie  <Marc.Espie@liafa.jussieu.fr>

	* Makefile.in (xgcc$(exeext)): Remove choose-temp, pexecute and
	mkstemp.  Get them from libiberty.
	(COLLECT2_OBJS): Similarly for choose-temp, cplus-dem and mkstemp.
	(PROTO_OBJS): Similarly for choose-temp, getopt, getopt1 and pexecute.
	(cplus-dem.o, pexecute.o, choose-temp.o): Remove build rules.
	(mkstemp.o, getopt1.o, getopt.o): Likewise.

	* pa-gas.h (TARGET_DEFAULT): Use symbolic values rather than numeric
	values.
	* pa-hpux.h (LINK_SPEC): Likewise.
	* pa-hpux10.h (LINK_SPEC): Likewise.
	* pa-hpux9.h (LINK_SPEC): Likewise.
	* pa-osf.h (LINK_SPEC): Likewise.
	* pa-pro.h (TARGET_DEFAULT): Likewise.
	* pa1.h (TARGET_DEFAULT): Likewise.
	* pa.h (MASK_*): New defines.
	(TARGET_*): Use symbolic values rather than numeric values.
	(TARGET_SWITCHES): Likewise.
	(TARGET_DEFAULT): Likewise.
	(CPP_SPEC): Likewise.

Wed Feb  3 21:07:38 1999  Bernd Schmidt  <crux@pool.informatik.rwth-aachen.de>

	* reload1.c (reload_cse_regs_1): Undo Jan 16 patch.
	* reload.c (find_reusable_reload): New function, broken out of
	push_reload.  Add code to verify that none of the involved
	outputs are subject to earlyclobbers.
	(push_reload): Break out new function find_reusable_reload.
	Delete "register" keyword for IN, OUT args.

Wed Feb  3 15:51:04 1999  Gavin Romig-Koch  <gavin@cygnus.com>

	* config/mips/mips.c (true_reg_or_0_operand) : New function.
	* config/mips/mips.h (PREDICATE_CODES): Add true_reg_or_0_operand.
	* config/mips/mips.md (div_trap,div_trap_normal,div_trap_mips16):
	Use true_reg_or_0_operand for div_trap.

Wed Feb  3 20:44:59 1999  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* loop.h (express_from): Declare.
	(struct induction): Replace derived flag with derived_from pointer.
	* loop.c (strength_reduce, record_giv, recombine_givs): Likewise.
	(express_from): No longer static.
	* unroll.c (find_splittable_givs): Replace derived with derived_from.
	When processing an address giv with which another giv has been
	combined that has also been derived from a third giv, handle like
	having combined with the third giv.
	Set splittable_regs_updates appropriately for derived givs.

Wed Feb  3 15:26:58 1999  Gavin Romig-Koch  <gavin@cygnus.com>

	* config/mips/mips.md (div_trap_mips16): Remove nop's after branches.

Wed Feb  3 11:56:23 1999  Jeffrey A Law  (law@cygnus.com)

	* pa.c (insn_sets_and_refs_are_delayed): New function.
	* pa.h (INSN_SETS_ARE_DELAYED): Use it.
	(INSN_REFERENCES_ARE_DELAYED): Likewise.

Wed Feb  3 06:24:49 1999  Richard Earnshaw  (rearnsha@arm.com)

	* config/arm/t-arm-elf (LIBGCC2_CFLAGS): Delete.
	* config/arm/t-linux (LIBGCC2_CFLAGS): Delete.
	(TARGET_LIBGCC2_CFLAGS): Define.
	(LIBGCC2_DEBUG_CFLAGS): Define.
	* config/arm/t-netbsd: Likewise.
	* config/arm/t-semi: Likewise.
	* config/arm/t-semiaof: Likewise.
	* config/arm/t-riscix: Likewise.

Wed Feb  3 10:59:07 1999  Andreas Schwab  <schwab@issan.cs.uni-dortmund.de>

	* config/m68k/m68k.c (print_operand_address): When printing a
	SYMBOL_REF that ends in `.<letter>' put parentheses around it.

Tue Feb  2 23:38:35 1999  David O'Brien  <obrien@FreeBSD.org>

	* i386/freebsd*.h now allows '$' in label names and does not use the
	PCC struct return method.

Tue Feb  2 22:38:23 1999  Jim Wilson  <wilson@cygnus.com>

	* Makefile.in: Change all uses of AR to AR_FOR_TARGET.  Change all uses
	of HOST_AR to AR.  Likewise for AR_FLAGS, RANLIB, and RANLIB_TEST.
	(RANLIB_TEST): Test to see if ranlib exists.  Only test absolute file
	names if host == target.
	(HOST_AR, HOST_AR_FLAGS, HOST_RANLIB, HOST_RANLIB_TEST): Delete.
	(AR_FLAGS_FOR_TARGET): Renamed from AR_FOR_TARGET_FLAGS.
	(AR, AR_FLAGS, OLDAR, OLDAR_FLAGS, RANLIB, RANLIB_TEST): Delete rules
	setting them to *_FOR_TARGET.
	* cross-make (AR, AR_FLAGS, OLDAR, OLDAR_FLAGS, RANLIB, RANLIB_TEST):
	Delete.

Tue Feb  2 22:38:19 1999  Theodore Papadopoulo  <Theodore.Papadopoulo@sophia.inria.fr>

	* toplev.h (read_integral_parameter): Declare.
	* toplev.c (read_integral_parameter): New function.

Fri Jan 29 21:00:56 1999  Bob Manson  <manson@charmed.cygnus.com>

	* resource.c, resource.h: New files.
	* Makefile.in (OBJS): Add it.

	* haifa-sched.c (regno_use_in): Moved to rtlanal.c.
	(split_block_insns): Moved to recog.c.
	(update_flow_info): Make public.
	* rtl.h: Declare them.

	* reorg.c: Moved the functions dealing with computing resource
	usage to resource.c.

	* sched.c (regno_use_in): Moved to rtlanal.c.
	(update_flow_info): Make public.
	(schedule_insns): Use split_block_insns.

	* recog.c (split_block_insns): New function.

Tue Feb  2 22:03:26 1999  David Edelsohn  <edelsohn@gnu.org>

	* rs6000/linux.h (LINK_START_DEFAULT_SPEC): Delete, unused.
	(LINK_OS_DEFAULT_SPEC): Delete, unused.

Tue Feb  2 20:29:34 1999  Catherine Moore  <clm@cygnus.com>

	* configure.in (arm-*-oabi): Support.
	* configure: Regenerate.
	* config/arm/unknown-elf-oabi.h: New file.

Tue Feb  2 19:43:59 1999  Jeffrey A Law  (law@cygnus.com)

	* i386.md (ashlsi3): Turn into a define_expand an anonymous pattern.
	Make the anonymous pattern match when ! optimize_size.
	(ashlsi3 size optimizer): New pattern.

	* intl/Makefile.in (uninstall): Add missing "; \".

Tue Feb  2 18:21:23 1999  Stan Cox  <scox@cygnus.com>

	* sparc.h (TARGET_CPU_sparc86x): Added. TARGET_CPU_sparclite86x
	synonym.

Tue Feb  2 20:24:11 1999  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* loop.c (loop_optimize): Fix value max_uid_for_loop is reset
	to after find_and_verify_loops call.

Tue Feb  2 19:48:29 1999  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* (recombine_givs): Don't use a giv that's likely to be dead to
	derive others.

	* loop.c (recombine_givs): Fix test for lifetime overlaps / loop
	wrap around when deriving givs.

Mon Feb  1 20:00:40 1999  Richard Henderson  <rth@cygnus.com>

	* recog.c (check_asm_operands): Treat indeterminate operand ok
	results as success.  Try harder to resolve a matching constraint.
	* stmt.c (expand_asm_operands): Recognize when an output operand's
	constraint does not allow memory.  Treat indeterminate operand ok
	results as failure.  Try harder to resolve a matching constraint.

Mon Feb  1 15:00:02 1999  Ken Raeburn  <raeburn@cygnus.com>

	Use varrays for constant-equivalence data:

	* varray.h (struct const_equiv_data): New type.
	(union varray_data_tag): New element const_equiv.
	(VARRAY_CONST_EQUIV_INIT, VARRAY_CONST_EQUIV): New macros.
	(VARRAY_SIZE): New macro, returns number of elements.
	* integrate.h: Include varray.h.
	(struct inline_remap): Replace const_equiv_map, const_age_map and
	const_equiv_map_size with a const_equiv_varray element.
	(MAYBE_EXTEND_CONST_EQUIV_VARRAY): New macro; grows varray if
	needed.
	(SET_CONST_EQUIV_DATA): New macro; sets rtx and age fields
	simultaneously, growing the varray if needed.

	* integrate.c (global_const_equiv_map,
	global_const_equiv_map_size): Deleted, replaced by....
	(global_const_equiv_varray): New variable.
	(expand_inline_function): References changed.
	* integrate.h: Update declarations.

	* integrate.c (process_reg_parm, expand_inline_function,
	copy_rtx_and_substitute, try_constants, subst_constants,
	mark_stores): Use varray allocation and accessor macros, new
	integrate.h macros, and global_const_equiv_varray.  Don't
	conditionalize non-NULL stores on array size; instead, expand the
	array as needed.
	* unroll.c (unroll_loop): Likewise.

	* unroll.c (unroll_loop): Initialize const_equiv_varray element to
	zero.  After allocating varray, always exit through bottom of
	function, where it can be deallocated if needed.  Don't explicitly
	reallocate const_equiv_map storage; instead, just ensure the
	varray has been initialized, and update the global reference.

Mon Feb  1 09:40:25 1999  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* system.h (inline, const): Handle these for stage2 (and later) gcc.

	* dwarf2out.c (inline): Don't define.

	* dwarfout.c (inline): Likewise.

Sun Jan 31 22:04:37 1999  Richard Henderson  <rth@cygnus.com>

	* loop.c (recombine_givs): Dump recombination and derivation data.

Sun Jan 31 20:34:29 1999  Zack Weinberg  <zack@rabi.columbia.edu>

	* flags.h: Declare flag_no_ident.
	* toplev.c: Define flag_no_ident.  Process -f(no-)ident here.
	* c-tree.h: Don't declare flag_no_ident.
	* c-decl.c: Don't define flag_no_ident.  Don't process
	  -f(no-)ident switches here.

	* config/elfos.h (ASM_FILE_END): Output final .ident directive
	  only if !flag_no_ident.
	* config/ptx4.h: Likewise.
	* config/svr4.h: Likewise.
	* config/alpha/elf.h: Likewise.
	* config/arm/linux-elf.h: Likewise.
	* config/i386/sco5.h: Likewise.
	* config/i860/fx2800.h: Likewise.
	* config/mips/gnu.h: Likewise.
	* config/i386/osfrose.h: Likewise.

	* gcc.c (C specs): Map -Qn to -fno-ident.
	* objc/lang-specs.h: Likewise.

Mon Feb  1 10:52:07 1999  Michael Hayes  <m.hayes@elec.canterbury.ac.nz>

	* configure.in: Don't remove loop.o and unroll.o when
	enable-haifa is selected.
	* configure: Rebuilt.

Sun Jan 31 13:22:02 1999  John Wehle  (john@feith.com)

	* i386.md (movsicc, movhicc, movsfcc, movdfcc,
	movxfcc, movdicc): Delete unconstrained alternatives.
	* i386.c (output_fp_conditional_move,
	output_int_conditional_move): Delete unused case.

Sun Jan 31 01:15:04 1999  Jeff Law  (law@cygnus.com)

	* version.c: Bump for snapshot.

Sun Jan 31 00:52:37 1999  Richard Henderson  <rth@cygnus.com>

	* alpha.md (mov patterns): Emit the assembler aliases mov and fmov
	instead of bis and cpys.  Combine alternatives where possible.

Sat Jan 30 23:14:13 1999  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* gcov.c (fnotice): Add missing FILE* parameter.
	(function_summary): Fix format specifiers in calls to `fnotice'.
	(output_data): Likewise.

	* toplev.c (fnotice): Constify char* parameter.

	* toplev.h (fnotice): Add prototype.
	Wrap prototype with BUFSIZ to protect FILE* usage.

Sun Jan 31 15:33:09 1999  Michael Hayes  <m.hayes@elec.canterbury.ac.nz>

	* config/c4x/c4x.h (RTX_COSTS): Explicitly define c4x costs.

Sat Jan 30 08:27:23 1999  Jeffrey A Law  (law@cygnus.com)

	* combine.c (distribute_notes): Handle REG_EH_REGION notes.

	* alias.c (fixed_scalar_and_varying_struct_p): Add "static" to
	function definition.
	(aliases_everything_p, write_dependence_p):Likewise.

	* install.texi: Fix merge lossages.

	* cccp.c (main): Only call setlocale (LC_MESSAGES, ...) if LC_MESSAGES
	is defined.
	* collect2.c (main): Likewise.
	* cppmain.c (main): Likewise.
	* gcc.c (main): Likewise.
	* gcov.c (main): Likewise.
	* protoize.c (main): Likewise.
	* toplev.c (main): Likewise.

	* pa.md (parallel shift and shiftadd): Mark output of shift as an
	earlyclobber.

	* loop.c: Disable recent loop changes.  Temporary as Joern
	continues to fix problems.

Sat Jan 30 03:24:37 1999  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* loop.c (strength_reduce): Size reg_map according to reg_iv_type.

Fri Jan 29 18:26:07 1999  Dave Brolley  <brolley@cygnus.com>

	* emit-rtl.c (remove_insn): New function.
	* rtl.h (remove_insn): Add prototype.
	* function.c (reposition_prologue_and_epilogue_notes): Call remove_insn.

Fri Jan 29 22:34:41 1999  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* loop.c (recombine_givs): Don't try to derive givs that have combined.

Fri Jan 29 15:00:39 1999  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* toplev.c (notice, fnotice): Check ANSI_PROTOTYPES, not __STDC__,
	when declaring arguments and calling va_arg() to initialize them.

	* collect2.c (notice): Likewise.

	* loop.c (find_life_end): Use PROTO() macro in the prototype.

Fri Jan 29 14:36:11 1999  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* collect2.c (error): Fix typo in declaration.

	* cpperror.c (cpp_message): Likewise.

	* cpplib.c (cpp_warning): Likewise.

	* cpplib.h (cpp_notice): Use PVPROTO not VPROTO, also add
	ATTRIBUTE_PRINTF_1.

	* toplev.c (error): Fix typo in declaration.

Fri Jan 29 15:44:13 1999  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* loop.c (strength_reduce): Fix HAVE_cc0 handling when scanning
	forward from cont dominator.

Fri Jan 29 07:10:27 1999  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* cccp.c (eprint_string): Constify a char*.
	(notice): Likewise.  Use PVPROTO not VPROTO, add ATTRIBUTE_PRINTF_1.
	(vnotice): Constify a char*.
	(error): Likewise.  Use PVPROTO not VPROTO, add ATTRIBUTE_PRINTF_1.
	(verror): Constify a char*.
	(warning): Likewise.  Use PVPROTO not VPROTO, add ATTRIBUTE_PRINTF_1.
	(vwarning): Constify a char*.
	(error_with_line): Likewise.  Use PVPROTO not VPROTO, add
	ATTRIBUTE_PRINTF_2.
	(verror_with_line): Constify a char*.
	(vwarning_with_line): Likewise.
	(warning_with_line): Likewise.  Use PVPROTO not VPROTO, add
	ATTRIBUTE_PRINTF_2.
	(pedwarn): Constify a char*.  Use PVPROTO not VPROTO, add
	ATTRIBUTE_PRINTF_1.
	(pedwarn_with_line): Likewise with ATTRIBUTE_PRINTF_2.
	(pedwarn_with_file_and_line): Likewise with ATTRIBUTE_PRINTF_4.
	Also correct typo in parameter name declaration.
	(make_assertion): Constify a char*.
	(quote_string_for_make): Likewise.
	(deps_output): Likewise.
	(fatal): Likewise.  Use PVPROTO not VPROTO, add
	ATTRIBUTE_PRINTF_1.  Use ATTRIBUTE_NORETURN not an explicit
	"__attribute__ ((noreturn))".
	(fancy_abort): Likewise for ATTRIBUTE_NORETURN.
	(pfatal_with_name): Likewise.
	(pipe_closed): Likewise.
	(memory_full): Likewise.

Fri Jan 29 00:14:55 1999  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* loop.c (strength_reduce): Grow set_in_loop / n_times_set /
	may_not_optimize to proper size when converting biv increments
	into givs.
	If necessary, reallocate reg_iv_type / reg_iv_info before calling
	recombine_givs.

Thu Jan 28 23:24:08 1999  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* loop.c (recombine_givs): New parameter unroll_p.  If set, don't
	generate complex adds.  Changed caller.
	Don't generate adds that cost more than the original one.
	(strength_reduce): Warning fixes.

Thu Jan 28 09:41:11 1999  Jeffrey A Law  (law@cygnus.com)

	* configure.in (hppa1.0-hp-hpux10*): Use t-pa.
	* configure: Rebuilt.

Wed Jan 27 23:39:53 1999  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* rtl.h (insn_first_p, no_jumps_between_p): Declare.
	* rtlanal.c (insn_first_p, no_jumps_between_p): New function.
	* loop.h (varray.h): Include.
	(struct induction): Change combined_with to unsigned.
	New members derived, ix and last_use.
	(reg_iv_type, reg_iv_info): Now varray_type.  All references changed.
	(REG_IV_TYPE, REG_IV_INFO): Define.
	(first_increment_giv, last_increment_giv): Declare.
	* loop.c (loop_number_loop_cont): New static variable.
	(loop_number_cont_dominator): Likewise.
	(reg_iv_type, reg_iv_info): Now varray_type.
	(first_increment_giv, last_increment_giv): New variables.
	(compute_luids, verify_dominator, find_life_end): New functions.
	(cmp_recombine_givs_stats, recombine_givs): Likewise.
	(loop_optimize): Allocate loop_number_loop_cont and
	loop_number_cont_dominator.  Use compute_luids.
	(find_and_verify_loops): Initialize loop_number_loop_cont and
	loop_number_cont_dominator.
	(strength_reduce): Try to find bivs that can be expressed as givs
	of another biv, and to convert biv increments into givs.
	Call recombine_givs.  Handle derived givs.
	(record_biv): New argument location.  All callers changed.
	(record_giv): Initialize derived and last_use fields.
	(basic_induction_var): New argument location.  All callers changed.
	(combine_givs): Don't combine a DEST_REG giv with a DEST_ADDR giv.
	Increment combined_with instead of setting to 1.
	* unroll.c (derived_regs): New static variable.
	(unroll_loop): Initialize it.
	Allocate local_regno according to max_reg_num.
	(copy_loop_body): Cope with derived givs.
	(find_splittable_givs): Check for Givs made from biv increments.
	Set derived_regs for givs.
	* Makefile.in (stmt.o, loop.o, unroll.o): Depend on loop.h .

Wed Jan 27 19:31:36 1999  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* function.c (purge_addressof_1): Handle case when a register
	has been used in a wider mode.

1999-01-27  Bruce Korb  <autogen@linuxbox.com>

	* fixinc/fixincl.c, fixinc/server.[ch]:
	Removed the last of the capitalized variable and proc names.

	* fixinc/server.c: Removed the process open code.
	* fixinc/procopen.c: New file containing the proc open code.
	* fixinc/inclhack.tpl: Added code to bypass a readability test
	when a file is not present.  A problem on some systems.
	* fixinc/inclhack.sh, fixinc/fixincl.sh: Regenerated.

Wed Jan 27 11:58:18 1999  Dave Brolley  <brolley@cygnus.com>

	* cpplib.h (cpp_notice): Add prototype.

Wed Jan 27 02:20:48 1999  Jeffrey A Law  (law@cygnus.com)

	* Merge gcc2 snapshot 19980929.

	* cccp.c (PRINTF_PROTO): Remove.
	(PRINTF_PROTO_{1,2,3,4}: Likewise.
	* cexp.y: Likewise.
	* system.h: Add PRINTF_PROTO and PRINTF_PROTO_{1,2,3,4}.

	* fix-header.c (cpp_file_lin_for_message): Delete.  In libcpp.
	(cpp_print_containing_files, v_cpp_message, cpp_message): Likewise.
	(cpp_fatal, cpp-Pfatal_with_name): Likewise.

	* gen-protos.c (hashf): Delete in cpphash.o.
	* gen-protos.c (hashf): Delete in cpphash.o.

	* expr.c: Do not merge SAVE_STACKAREA_MODE changes.
	* expmed.c: Likewise.
	* rs6000.md: Likewise.

	* rs6000.c, rs6000.md: Do not merge formatting changes yet.

Wed Jan 27 01:13:42 1999  Richard Henderson  <rth@cygnus.com>

	* rs6000.c (input_operand): Don't expect CONST around CONSTANT_P_RTX.
	* rs6000.md (movsi, movdi): Likewise.

Tue Jan 26 13:31:38 1999  Jim Wilson  <wilson@cygnus.com>

	* function.c (expand_function_end): Pass arg_pointer_save_area to
	validize_mem before using it.  Emit code into a sequence.

Tue Jan 26 13:41:38 1999  David Edelsohn  <edelsohn@gnu.org>

	* rs6000.md (doz + set cr and or + set cr patterns): Add missing
	'#' to split patterns.  Correct indentation of some new patterns.

1999-01-26  Zack Weinberg  <zack@midnite.ec.rhno.columbia.edu>

	* cppfiles.c (safe_read): Deleted.
	(read_and_prescan): New function, replaces safe_read, converts
	and/or warns about trigraphs, silently converts odd line
	terminators (\r, \n\r, \r\n).  Warns about no newline at EOF.
	(finclude): Use read_and_prescan; turn off nonblocking mode on
	the input descriptor; remove file-size-examination and
	no-newline-at-EOF gunk which is	longer necessary; be more
	careful about checking that we've been handed a legitimate
	file to read (only real files, pipes, and ttys are acceptable).
	* cpplib.h (cpp_options): Rename no_trigraphs flag to
	`trigraphs' and invert its sense.
	(trigraph_table): Declare.
	(cpp_warning_with_line): Prototype.
	* cpplib.c: Remove all references to trigraph_pcp. Define
	trigraph_table; initialize it in initialize_char_syntax.  Open
	files in nonblocking mode.  s/no_trigraphs/trigraphs/
	throughout, and invert sense.  Put cpp_warning_with_line back
	in and export it.

Tue Jan 26 23:21:49 1999  Michael Hayes  <m.hayes@elec.canterbury.ac.nz>

	* config/c4x/c4x.h (COUNTER_REGS): New register class.
	* config/c4x/c4x.md (*rptb_init): Change constraints.
	(rptb_end): Emit alternate looping instructions if
	RC register not allocated for loop counter.
	(decrement_and_branch_on_count): Allow other registers
	for loop counter.

1999-01-25  Zack Weinberg  <zack@rabi.columbia.edu>

	* cppexp.c (struct arglist): Removed.
	(parse_number): Use HOST_WIDE_INT for the accumulator.
	Allow two `l' suffixes unless C89.  Clean up.  Make static.
	(parse_charconst): New function broken out of cpp_lex.
	Code cleaned up drastically.  Don't use a token_buffer.
	(token_buffer): Removed.
	(cpp_lex): Don't call parse_number on a constant string.
	Use parse_charconst.
	(cpp_parse_expr): Properly handle an ERROR op returned by
	cpp_lex.

1999-01-25  Zack Weinberg  <zack@rabi.phys.columbia.edu>

	* cpplib.c: Don't include signal.h, sys/times.h, or
	sys/resource.h. Don't declare localtime.
	(macroexpand): Handle special symbols here.
	(push_macro_expansion): Chop off the trailing '@ ' if possible
	here.
	(cpp_get_token): Don't do either of the above two things here.
	Move `string' label just after case '"' so that wide strings
	don't crash the preprocessor.

Sun Jan 24 20:13:45 1999  David Edelsohn  <edelsohn@gnu.org>

	* rs6000.md (left shift + set cr patterns): Add missing '#' to
	split patterns.
	(move register + set cr pattern): Likewise.
	(movdi, !TARGET_POWERPC64 splitters): Add back in Jan. 15th patch,
	inadvertently deleted.

Sun Jan 24 08:07:59 1999  Jeffrey A Law  (law@cygnus.com)

	* stmt.c (stmt_loop_nest_empty): New function.
	* tree.h (stmt_loop_nest_empty): Declare it.
	* rtl.def (CALL_PLACEHOLDER): New rtx code.

Sun Jan 24 21:24:43 1999  Michael Hayes  <m.hayes@elec.canterbury.ac.nz>

	* config/c4x/c4x.c (c4x_emit_move_sequence, c4x_encode_section_info):
	New functions.
	(c4x_check_legit_addr): Remove USE and PLUS, allow
	LO_SUM, and disable SYMBOL_REF, LABEL_REF, and CONST cases.
	(c4x_legitimize_address): Penalize SYMBOL_REF, LABEL_REF, and
	CONST cases.  Add LO_SUM.
	(c4x_print_operand): Modified 'C' and 'R' cases for calls.
	Added 'U' case.  Remove dependence on SYMBOL_REF_FLAG.
	(c4x_print_operand_address): Handle LO_SUM.
	(c4x_scan_for_ldp): Delete.  Hooray!
	(c4x_process_after_reload): Remove call to c4x_scan_for_ldp.
	Split all insns.
	(c4x_immed_int_constant): Renamed from c4x_int_constant.  All callers
	changed.
	(c4x_immed_float_constant): Renamed from c4x_float_constant.  All
	callers	changed.
	(c4x_T_constraint): Allow LO_SUM, disable SYMBOL_REF, LABEL_REF,
	and CONST.
	(c4x_U_constraint, symbolic_operand): New functions.
	(src_operand): Allow 'I' constants in HImode.  Allow LO_SUM,
	disable SYMBOL_REF, LABEL_REF, and CONST.
	(lsrc_operand, tsrc_operand): Call src_operand instead of
	general_operand.
	(c4x_operand_subword): Update comments.

	* config/c4x/c4x.c (TARGET_LOAD_ADDRESS): New macro.
	(LEGITIMATE_CONSTANT_P): Allow SYMBOL_REF, LABEL_REF, CONST,
	plus HIGH and LO_SUM for the C40.
	(ENCODE_SECTION_INFO): Define macro.
	(symbolic_operand, c4x_U_constraint, c4x_emit_move_sequence): New
	prototypes.
	(PREDICATE_CODES): Add symbolic_operand.

	* config/c4x/c4x.md (movqi, movgqf, movhi, movhi): Call
	c4x_emit_move_sequence.
	(floatunsqiqf2, fixuns_truncqfqi2): Rework emitted RTL
	to avoid symbol references.
	(all patterns with g constraint): Replace 'g' constraint with 'rIm'.
	(set_high): Renamed from set_high_use.
	(set_lo_sum): Renamed from set_ior_lo_use.
	(all call patterns): Make MEM explicit in call address operands.
	Modified output templates to use 'U' modifier.

Sun Jan 24 01:15:05 1999  Jeff Law  (law@cygnus.com)

	* version.c: Bump for snapshot.

Sat Jan 23 22:34:57 1999  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* final.c (bb_str): Qualify a char* with the keyword `const'.
	(add_bb_string, final_scan_insn, output_asm_insn): Likewise.

	* fix-header.c (read_scan_file): Likewise.

	* genoutput.c (output_epilogue, process_template): Likewise.

	* local-alloc.c (requires_inout, block_alloc): Likewise.

	* output.h (output_asm_insn, assemble_string): Likewise.

	* recog.c (recog_constraints, check_asm_operands,
	decode_asm_operands, extract_insn, preprocess_constraints,
	constrain_operands): Likewise.

	* recog.h (operand_alternative, recog_constraints, insn_template,
	insn_outfun, insn_operand_constraint, insn_name): Likewise.

	* regclass.c (record_reg_classes, scan_one_insn): Likewise.

	* regmove.c (find_matches): Likewise.

	* reload.c (alternative_allows_memconst): Likewise.

	* reload1.c (constraint_accepts_reg_p,
	reload_cse_simplify_operands): Likewise.

	* rtl.h (decode_asm_operands): Likewise.

	* scan.h (fn_decl): Likewise.

	* varasm.c (assemble_string): Likewise.

Sat Jan 23 01:37:36 1999  Jeffrey A Law  (law@cygnus.com)

	* configure.in (gcc_tooldir): Handle case where exec_prefix has
	not been explicitly set.
	* configure: Rebuilt.

	* fold-const.c (lshift_double): Mark 'prec' arguments as possibly
	unused.

	* bitmap.h (bitmap_head_def): Make indx field unsigned.

	* configure.in (gcc_tooldir): When not making a relative gcc_tooldir,
	use $exec_prefix/$target_alias for gcc_tooldir.
	* configure: Rebuilt.

Fri Jan 22 11:48:56 1999  Richard Henderson  <rth@cygnus.com>

	* cppp.c (xrealloc): Fix typo last change.
	* cppalloc.c, gcc.c, genattr.c, genattrtab.c, gencodes.c: Likewise.
	* genconfig.c, genemit.c, genextract.c, genflags.c: Likewise.
	* genopinit.c, genoutput.c, genpeep.c, genrecog.c: Likewise.

1999-01-22  Michael Meissner  <meissner@cygnus.com>

	* rs6000.h (CR0_REGNO_P): New macro to test if cr0.
	(CR_REGNO_NOT_CR0_P): New macro to test if cr, but not cr0.
	(PREDICATE_CODES): Add cc_reg_not_cr0_operand.
	(cc_reg_not_cr0_operand): Add declaration.

	* rs6000.c (cc_reg_not_cr0_operand): Return true if register is a
	pseudo register, or a control register that is not CR0.

	* rs6000.md (all combiner patterns building . instructions): For
	all `.' instructions that do something and set cr0, add an
	alternative that does the operation, and then sets a different
	flag, in order to avoid using the costly mcrf instruction and also
	allow cr0 to be clobbered in asm statements.  Also fix a few
	patterns that used the wrong register.

	* rs6000.h (rs6000_cpu_select): Make string, names be const char *.
	(rs6000_debug_name): Make const char *, not char *.

	* sysv4.h (rs6000_{abi,sdata}_name): Make const char *.

	* rs6000.c (rs6000_{debug,abi,sdata}_name): Make const char *.
	(rs6000_select): Use const char * in casts.

Fri Jan 22 07:43:01 1999  Jeffrey A Law  (law@cygnus.com)

	* Makefile.in (gcc_tooldir): Move before first reference.
	Let autoconf substitute in a value.
	* configure.in (gcc_tooldir): Only use a relative path to the
	tool directory if $exec_prefix == $prefix.
	* configure: Rebuilt.

	* Makefile.in (tooldir): Replace with gcc_tooldir.

Thu Jan 21 23:21:57 1999  Jeffrey A Law  (law@cygnus.com)

	* m68k.md (ashldi_const): Disable for !TARGET_5200.  Fix indentation.
	(ashldi3 expander): Similarly.  Update comments.
	(ashrdi_const, lshrdi_const): Fix indentation.
	(ashrdi3, lshrdi3): Fix indentation.  Update comments.

Thu Jan 21 21:53:36 1999  Richard Henderson  <rth@cygnus.com>

	* emit-rtl.c (try_split): Don't try to split non-instructions.

Thu Jan 21 23:47:30 1999  Andrew MacLeod  <amacleod@cygnus.com>

	* expr.c (emit_push_insn): Fix dumb typo.

Thu Jan 21 20:24:02 1999  Richard Henderson  <rth@cygnus.com>

	* rs6000.h (LEGITIMIZE_RELOAD_ADDRESS): Recognize and accept
	transformations that we have performed earlier.
	* alpha.h (LEGITIMIZE_RELOAD_ADDRESS): Likewise.

	* alpha.md (prologue_stack_probe_loop): Don't do our own label
	handling, call gen_label_rtx instead.

Thu Jan 21 17:45:18 1999  Richard Henderson  <rth@cygnus.com>

	* configure.in ({rs6000|powerpc}-ibm-aix4.[12]*): Add missing `then'.

	* cccp.c (xrealloc): Call malloc given a NULL old pointer.
	* collect2.c, cppalloc.c, gcc.c, genattr.c, genattrtab.c: Likewise.
	* gencodes.c, genconfig.c, genemit.c, genextract.c: Likewise.
	* genflags.c, genopinit.c, genoutput.c, genpeep.c: Likewise.
	* genrecog.c, mips-tfile.c, protoize.c: Likewise.

Thu Jan 21 19:44:55 1999  Michael Meissner  <meissner@cygnus.com>

	* configure.in ({rs6000|powerpc}-ibm-aix4.[12]*): If
	--with-gnu-ld, use x-aix41-gld instead of x-aix41 to suppress
	adding -Wl,-bbigtoc to BOOT_LDFLAGS.
	* configure: Regenerate.

	* config/rs6000/x-aix41-gld: New file, don't set BOOT_LDFLAGS.

Thu Jan 21 15:48:03 1999  Dave Brolley  <brolley@cygnus.com>

	* cppexp.c (cpp_lex): Allocate token_buffer dynamically.

Thu Jan 21 14:18:04 1999  Andrew MacLeod  <amacleod@cygnus.com>

	* expr.c (MOVE_BY_PIECES_P): Define condition for deciding to use
	move_by_pieces.
	(MOVE_MAX_PIECES): Define maximum number of bytes to move at once.
	(USE_LOAD_POST_INCREMENT, USE_LOAD_PRE_DECREMENT): Define defaults.
	(USE_STORE_POST_INCREMENT, USE_STORE_PRE_DECREMENT): Define defaults.
	(move_by_pieces): Use new macros.
	(emit_block_move): Use new macros.
	(clear_by_pieces): Use new macros.
	(clear_storage): Use new macros.
	(emit_push_insn): Use new macros.
	(expand_expr): Use new macros.
	* config/sh/sh.h (USE_LOAD_POST_INCREMENT, USE_LOAD_PRE_DECREMENT):
	Define.
	(USE_STORE_POST_INCREMENT, USE_STORE_PRE_DECREMENT): Define.
	(MOVE_BY_PIECES_P): Define based on alignment and TARGET_SMALLCODE.
	(MOVE_MAX_PIECES): Move 8 bytes on SH4.
	* tm.texi(MOVE_BY_PIECES_P, MOVE_MAX_PIECES, USE_LOAD_POST_INCREMENT,
	USE_LOAD_PRE_DECREMENT, USE_STORE_POST_INCREMENT,
	USE_STORE_PRE_DECREMENT): Describe new macros.

Thu Jan 21 14:13:31 1999  Vladimir N. Makarov  <vmakarov@cygnus.com>

	* varasm.c (output_constant_pool): Use floor_log2 instead of
	exact_log2 for ASM_OUTPUT_ALIGN.

	* stor-layout.c (layout_type): Do machine-dependent extra alignment.

	* emit-rtl.c (operand_subword): Handle case when a subword outside
	the operand.

	* tm.texi (ROUND_TYPE_{SIZE,ALIGN}): More accurate descriptions of
	the macros.

Thu Jan 21 01:59:30 1999  Richard Henderson  <rth@cygnus.com>

	* cse.c (fold_rtx): Revert 29 Dec change.
	(cse_insn): Revert 12 Jan change.
	* expr.c (expand_builtin): Don't emit CONST around CONSTANT_P_RTX.
	* regclass.c (reg_scan_mark_refs): Revert 29 Dec change.
	* rtl.def: Likewise.
	* rtl.h (CONSTANT_P): Likewise.

	* expr.c (emit_move_insn): Never try to flush CONSTANT_P_RTX
	to memory.
	* recog.c (immediate_operand): Accept CONSTANT_P_RTX.
	* alpha.c (input_operand): Likewise.
	* c4x.c (const_operand): Likewise.

	* explow.c (allocate_dynamic_stack_space): Use register_operand
	instead of arith_operand, which does not exist.

	* 1750a.h: Fix comment closure.
	* a29k.c (a29k_set_memflags): Fix typo in 19 Jan change.
	* arc.md (one_cmplsi2_set_cc_insn): Fix set mode mismatch.
	* arm.h (TARGET_SWITCHES): Fix typo.
	* i370.md (anon mult and div patterns): Fix set mode mismatch.
	* i860.c (output_delayed_branch): Fix operands to constrain_operands.
	(output_delay_insn): Likewise.
	* m88k.md (anon rotate insns): Fix set mode mismatch.
	(anon BLKmode moves): Commonize and fix set mode mismatches.
	* ns32k.md (udivmoddi[shq]i4_internal): Fix mode mismatch.
	* romp.md (movdf): Fix typo.

Thu Jan 21 00:29:35 1999  Nathan Sidwell  <nathan@acm.org>

	* Makefile.in (install-common): Remove extraneous chmod for gcov
	install.

Wed Jan 20 18:15:08 1999  Dave Brolley  <brolley@cygnus.com>

	* function.c (assign_parms): Save and restore setting of
	TREE_USED (parm).

Wed Jan 20 12:51:42 1999  Mark Mitchell  <mark@markmitchell.com>

	* arm.md: Use MEM_COPY_ATTRIBUTES where appropriate throughout.
	Pass MEM_SCALAR_P to arm_gen_store_multiple where appropriate.

Tue Jan 19 21:20:52 1999  Richard Henderson  <rth@cygnus.com>

	* recog.c (pop_operand): New function.
	* recog.h (pop_operand): Declare it.
	* genrecog.c (preds): Define it.

	* expr.c (do_jump_for_compare): Handle conditional branch expanders
	emitting multiple jump instructions.
	* jump.c (condjump_label): New function.
	* rtl.h (condjump_label): Declare it.

Tue Jan 19 21:08:20 1999  Richard Henderson  <rth@cygnus.com>

	* expr.c (emit_move_insn_1): Revert 17 Dec change.  Don't emit
	clobber during or after reload.

Tue Jan 19 16:56:03 1999  Richard Henderson  <rth@cygnus.com>

	* genoutput.c (name_for_index): New function.
	(scan_operands, validate_insn_alternatives): Use it.
	* genrecog.c (insn_name_ptr_size): New variable.
	(make_insn_sequence): Fill in insn_name_ptr.
	(merge_trees): Use it.

Tue Jan 19 16:37:36 1999  Richard Henderson  <rth@cygnus.com>

	* i386/isc.h (TARGET_DEFAULT): Define symbolicly.
	* i386/isccoff.h, i386/next.h, i386/sco.h, i386/sco5.h: Likewise.
	* i386/scodbx.h, i386/sequent.h, i386.unix.h: Likewise.

Tue Jan 19 15:00:10 1999  Jeffrey A Law  (law@cygnus.com)

	* loop.c (NUM_STORES): Delete.
	(loop_store_mems): Turn into an EXPR_LIST of MEMs.
	(prescan_loop): Properly initialize loop_mems_idx.
	(note_addr_stored): Simplify using list structure instead of
	fixed sized array.
	(invariant_p, check_dbra_loop, load_mems): Similarly.

	* flow.c (invalidate_from_autoinc): New function.
	(mark_set_1, mark_used_regs): Use it.

	* Makefile.in (protoize.o, unprotoize.o): Depend on Makefile.

1999-01-19  Vladimir N. Makarov  <vmakarov@cygnus.com>

	* invoke.texi (-mlong-double-64): New option description.

1999-01-19  Jim Wilson  <wilson@cygnus.com>

	* libgcc2.c: Change all uses of LONG_DOUBLE_TYPE_SIZE to
	LIBGCC2_LONG_DOUBLE_TYPE_SIZE.
	(LIBGCC2_LONG_DOUBLE_TYPE_SIZE): New.  Set to LONG_DOUBLE_TYPE_SIZE
	if not defined.
	* i960/i960.h (MULTILIB_DEFAULTS): Define to mnumerics.
	(CPP_SPECS): Add -mlong-double-64 support.
	(TARGET_FLAG_LONG_DOUBLE_64, TARGET_LONG_DOUBLE_64): New.
	(TARGET_SWITCHES): Add -mlong-double-64 support.
	(LONG_DOUBLE_TYPE_SIZE): Likewise.
	(LIBGCC2_LONG_DOUBLE_TYPE_SIZE): Define.
	* i960/vx960-coff.h (MULTILIB_DEFAULTS): Define to msoft-float.
	(CPP_SPECS): Add -mlong-double-64 support.
	* i960/t-960bare (MULTILIB_OPTIONS): Add mlong-double-64.
	(MULTILIB_DIRNAMES): Add ld64.
	* i960/t-vxworks960 (MULTILIB_OPTIONS, MULTILIB_DIRNAMES): Likewise.

Tue Jan 19 11:54:04 1999  Jason Merrill  <jason@yorick.cygnus.com>

	* calls.c (expand_call): Strip a TARGET_EXPR if we're passing by
	invisible reference.

Tue Jan 19 14:51:36 1999  David Edelsohn  <edelsohn@gnu.org>

	* rs6000.c (offsettable_addr_operand): Delete.
	(offsettable_mem_operand): New function.
	* rs6000.h (PREDICATE_CODES): Reflect function change.
	(RS6000_SAVE_TOC): Represent address as MEM.
	* win-nt.h (RS6000_SAVE_TOC): Same.
	* rs6000.md (indirect calls): Change offsettable address parameter
	to offsettable memory parameter.

Tue Jan 19 10:24:53 1999  Mark Mitchell  <mark@markmitchell.com>

	* rtl.h (rtx_def): Update documentation.
	(MEM_IN_STRUCT_P): Likewise.
	(MEM_SCALAR_P): New macro.
	(MEM_COPY_ATTRIBUTES): Likewise.
	(MEM_SET_IN_STRUCT_P): Likewise.
	* rtl.texi (MEM_SCALAR_P): Document.
	* alias.c (canon_rtx): Use MEM_COPY_ATTRIBUTES.
	(fixed_scalar_and_varying_struct_p): New function.  Use
	MEM_SCALAR_P rather than !MEM_IN_STRUCT_P.
	(aliases_everything_p): Likewise.
	(true_dependence): Use them.
	(write_dependence_p): New function, containing code common to
	anti_dependence and output_dependence.
	(anti_dependence): Use it.
	(output_dependence): Likewise.
	* calls.c (save_fixed_argument_area): Don't clear
	MEM_IN_STRUCT_P.
	(expand_call): Use MEM_SET_IN_STRUCT_P.
	(emit_library_call): Don't clear MEM_IN_STRUCT_P.
	(emit_library_call_value): Likewise.
	(store_one_arg): Use MEM_SET_IN_STRUCT_P.
	* combine.c (simplify_rtx): Use MEM_COPY_ATTRIBUTES.
	(make_extraction): Likewise.
	(simplify_shift_const): Likewise.
	(gen_lowpart_for_combine): Likewise.
	* cse.c (gen_lowpart_if_possible): Use MEM_COPY_ATTRIBUTES.
	* emit-rtl.c (operand_subword): Likewise.
	(change_address): Likewise.
	* explow.c (stabilize): Use MEM_COPY_ATTRIBUTES.
	* expr.c (protect_from_queue): Use MEM_COPY_ATTRIBUTES.
	(emit_group_store): Use MEM_SET_IN_STRUCT_P.
	(copy_blkmode_from_reg): Likewise.
	(store_field): Likewise.
	(expand_expr): Remove bogus guesswork setting MEM_IN_STRUCT_P
	heuristically.  Use MEM_SET_IN_STRUCT_P.
	(get_memory_rtx): Likewise.
	* final.c (alter_subreg): Use MEM_COPY_ATTRIBUTES.
	* function.c (assign_stack_temp): Clear MEM_SCALAR_P and
	MEM_ALIAS_SET on newly returned MEMs.
	(assign_temp): Use MEM_SET_IN_STRUCT_P.
	(put_reg_into_stack): Likewise.
	(fixup_var_refs1): Use MEM_COPY_ATTRIBUTES.
	(gen_mem_addressof): Use MEM_SET_IN_STRUCT_P.
	(assign_parms): Likewise.
	(expand_function): Likewise.
	* integrate.c (expand_inline_function): Likewise.
	(copy_rtx_and_substitute): Use MEM_COPY_ATTRIBUTES.
	* loop.c (note_addr_stored): Remove check on MEM_IN_STRUCT_P.
	* optabs.c (gen_move_insn): Use MEM_COPY_ATTRIBUTES.
	* print-rtl.c (print_rtx): Print /f for frame_related.
	* recog.c (validate_replace_rtx_1): Use MEM_COPY_ATTRIBUTES.
	* reload1.c (reload): Copy MEM_SCALAR_P as well.
	* stmt.c (expand_decl): Use MEM_SET_IN_STRUCT_P.
	(expand_anon_union_decl): Use MEM_COPY_ATTRIBUTES.
	* varasm.c (make_decl_rtl): Use MEM_SET_IN_STRUCT_P.
	(output_constant_def): Likewise.
	* a29k.c (a29k_set_memflags_1): Take scalar_p.
	Set MEM_SCALAR_P.
	(a29k_set_memflags): Use it.
	* alpha.c (get_aligned_mem): Use MEM_COPY_ATTRIBUTES.
	* c4x.c (c4x_scan_for_ld): Likewise.
	* h8300.c (fix_bit_operand): Likewise.
	* m88k.c (legitimize_address): Likewise.
	(block_move_loop): Likewise.
	(block_move_no_loop): Likewise.
	(block_move_sequence): Likewise.
	(m88k_builtin_saveregs): Use MEM_SET_IN_STRUCT_P.
	* mips/abi64.h (SETUP_INCOMING_VARARGS): Likewise.
	* rs6000.c (expand_block_move_insn): Use MEM_COPY_ATTRIBUTES.
	* sh.c (sh_builtin_saveregs): Use MEM_SET_IN_STRUCT_P.
	* arm.h (arm_gen_load_multiple): Take scalar_p.
	(arm_store_load_multiple): Likewise.
	* arm.c (arm_gen_load_multiple): Likewise.
	(arm_gen_store_multiple): Likewise.
	(arm_gen_movstrqi): Treat MEM_SCALAR_P like MEM_IN_STRUCT_P.

Tue Jan 19 12:30:37 1999  Andrew MacLeod  <amacleod@cygnus.com>

	* optabs.c (emit_libcall_block): Add a REG_EH_REGION reg note to all
	calls within a libcall block to indicate no throws are possible.
	* flow.c (find_basic_blocks, find_basic_blocks_1): Don't look for
	libcall blocks. Don't add edges to exception handlers if we see
	a REG_EH_REGION note with a value of 0.
	(make_edges): Override active_eh_region vector if the call has a note
	indicating the call does not throw.

1999-01-19  Vladimir N. Makarov  <vmakarov@cygnus.com>

	* config/rs6000/sysv4.h (CC1_SPEC): Fix correct numbers of {}.

Tue Jan 19 06:26:30 1999  Jeffrey A Law  (law@cygnus.com)

	* Makefile.in (cccp.o, cpplib.o): Depend on Makefile.

Mon Jan 18 09:56:41 1999  Jason Merrill  <jason@yorick.cygnus.com>

	* invoke.texi (C++ Dialect Options): Document -fno-rtti.

1999-01-18  Vladimir N. Makarov  <vmakarov@cygnus.com>

	*  invoke.texi (-mcpu=740, -mcpu=750): New options.
	(-m(no-)multiple, -m(no-)string): Describe cases for PPC740 &
	PPC750.

1999-01-18  Michael Meissner  <meissner@cygnus.com>

	* rs6000.h ({ASM,CPP}_CPU_SPEC): Add support for all machines
	supported with -mcpu=xxx.
	(processor_type): Add PROCESSOR_PPC750.
	(ADJUST_PRIORITY): Call rs6000_adjust_priority.
	(RTX_COSTS): Supply costs for 750 multiply/divide operations.
	(rs6000_adjust_priority): Add declaration.

	* rs6000.c (rs6000_override_options): -mcpu={750,740} now sets the
	processor type as 750, not 603.  Allow -mmultiple and -mstring on
	little endian 750 systems.
	(rs6000_adjust_priority): Stub for now.
	(get_issue_rate): The PowerPC 750 can issue 2 instructions/cycle.

	* rs6000.md (function/cpu attributes): Add initial ppc750 support.

	* sysv4.h (STRICT_ALIGNMENT): Don't force strict alignment if
	little endian.
	(CC1_SPEC): Pass -mstrict-align if little endian, and not
	overridden.
	(CC1_ENDIAN_{LITTLE,BIG,DEFAULT}_SPEC): Endian specific configs.
	(SUBTARGET_EXTRA_SPECS): Add cc1 endian specs.

	* {sysv4,eabi}le.h (CC1_ENDIAN_DEFAULT_SPEC): Override, default is
	little endian.

	* t-ppcgas (MULTILIB_*): Delete obsolete Solaris multilibs.

Mon Jan 18 12:03:08 1999  Gavin Romig-Koch  <gavin@cygnus.com>

	* config/mips/mips.md (div_trap): Split div_trap_mips16
	from div_trap.
	(div_trap_normal,div_trap_mips16): Correct the length attributes.

Mon Jan 18 11:48:28 1999  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* cpplib.c (special_symbol): Qualify a char* with the `const' keyword.
	Instead of writing to const char *buf directly, use a non-const
	variable `wbuf' to allocate and write a string, then set buf = wbuf.

	* cppulp.c (user_label_prefix): Qualify a char* with the `const'
	keyword.

	* dyn-string.c (dyn_string_append): Likewise.

	* dyn-string.h (dyn_string_append): Likewise.

	* final.c (end_final, output_operand_lossage, asm_fprintf): Likewise.

	* output.h (end_final, output_operand_lossage, asm_fprintf,
	named_section, decode_reg_name, make_decl_rtl, user_label_prefix):
	Likewise.

	* profile.c (init_branch_prob): Likewise.

	* toplev.c (set_target_switch, vmessage,
	v_message_with_file_and_line, v_message_with_decl,
	v_error_with_file_and_line, v_error_with_decl, v_error_for_asm,
	verror, vfatal, v_warning_with_file_and_line, v_warning_with_decl,
	v_warning_for_asm, vwarning, vpedwarn, v_pedwarn_with_decl,
	v_pedwarn_with_file_and_line, vsorry, v_really_sorry,
	open_dump_file, dump_rtl, clean_dump_file,
	print_version, print_single_switch, print_switch_values,
	dump_base_name, debug_args, lang_independent_options,
	user_label_prefix, documented_lang_options, target_switches,
	target_options, print_time, pfatal_with_name, fatal_io_error,
	fatal_insn, default_print_error_function, print_error_function,
	report_error_function, error_with_file_and_line, error_with_decl,
	error_for_asm, error, fatal, warning_with_file_and_line,
	warning_with_decl, warning_for_asm, warning, pedwarn,
	pedwarn_with_decl, pedwarn_with_file_and_line, sorry,
	really_sorry, botch, output_quoted_string, output_file_directive,
	open_dump_file, rest_of_decl_compilation, display_help, main):
	Likewise.

	* toplev.h (print_time, fatal, fatal_io_error, pfatal_with_name,
	fatal_insn, warning, error, pedwarn, pedwarn_with_file_and_line,
	warning_with_file_and_line, error_with_file_and_line, sorry,
	really_sorry, default_print_error_function, report_error_function,
	rest_of_decl_compilation, pedwarn_with_decl, warning_with_decl,
	error_with_decl, error_for_asm, warning_for_asm, output_quoted_string,
	output_file_directive, botch): Likewise.

	* tree.h (make_decl_rtl): Likewise.

	* varasm.c (strip_reg_name, named_section, decode_reg_name,
	make_decl_rtl): Likewise.

Mon Jan 18 11:35:49 1999  Gavin Romig-Koch  <gavin@cygnus.com>

	* Makefile.in (TCL_LIBRARY): Use 'cd' to find the library
	directory logically rather than physically.

Mon Jan 18 09:05:37 1999  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* loop.c (insert_bct): Hide the definition of variables
	`increment_direction', `compare_direction', `add_iteration' and
	`loop_var_mode'.

	* recog.c (mode_dependent_address_p): Mark parameter `addr' with
	ATTRIBUTE_UNUSED.  Mark label `win' with ATTRIBUTE_UNUSED_LABEL.
	(mode_independent_operand): Mark label `lose' with
	ATTRIBUTE_UNUSED_LABEL.

	* regclass.c (n_occurrences): Remove prototype and definition.

	* reload.c (find_reloads_address_1): Mark variable `tem' with
	ATTRIBUTE_UNUSED.

	* reload1.c (reload): Cast the first two arguments of `bcopy' to PTR.

	* sbitmap.c (sbitmap_copy): Likewise.

	* scan-decls.c (scan_decls): Hide label `handle_comma'.

	* toplev.c (output_lang_identify): Mark prototype with
	ATTRIBUTE_UNUSED.

	* tree.c (make_node): Cast the first argument of `bzero' to PTR.
	(make_tree_vec): Likewise.
	(build1): Likewise.

	* varasm.c (assemble_static_space): Mark variable `tem' with
	ATTRIBUTE_UNUSED.

Mon Jan 18 04:28:36 1999  Nathan Sidwell  <nathan@acm.org>

	* Makefile.in (GCOV_INSTALL_NAME): New macro.
	(install-common): Use it.
	(uninstall): Use it.
	(uninstall): Use correct names for protoize and unprotoize.

Mon Jan 18 03:52:56 1999  Christian Bruel  <Christian.Bruel@st.com>
			  Jeffrey A Law  (law@cygnus.com)

	* flow.c (last_mem_set): Delete variable.  References removed.
	(mem_set_list): New variable.
	(life_analysis): Initialize and finalize alias analysis.
	(propagate_block); Initialize mem_set_list.  Clear for CALL_INSNs.
	(insn_dead_p): For a store to memory, search the entire mem_set_list
	for a match.
	(mark_set_1): Kill entries on the mem_set_list for aliased writes or
	changes to their addresses.  Add new entries to the mem_set_list for
	memory writes writes.
	(mark_used_regs): Kill entries on the mem_set_list which may be
	referenced by a load operation.

Mon Jan 18 01:01:02 1999  Jeffrey A Law  (law@cygnus.com)

	* alias.c (base_alias_check): Add missing return for differing
	symbols case.

Mon Jan 18 00:36:13 1999  Rainer Orth  <ro@TechFak.Uni-Bielefeld.DE>

	* mips-tdump.c (print_file_desc): Handle unknown filenames and
	missing local symbols.

Sun Jan 17 21:04:31 1999  Richard Henderson  <rth@cygnus.com>

	* jump.c (rtx_renumbered_equal_p): Special case CODE_LABEL.

	* system.h (bcopy): Implement with memmove not memcpy.

Sun Jan 17 19:23:20 1999  Jeffrey A Law  (law@cygnus.com)

	* Makefile.in (cppulp.o): Add dependencies.

	* i386.md (integer conditional moves): Add missing earlyclobbers.

	* regmove.c (optimize_reg_copy_1): Undo Aug 18 change.  Update
	REG_N_CALLS_CROSSED and REG_LIVE_LENGH if and only if we change
	where a register is live.

Sun Jan 17 03:20:47 1999  H.J. Lu  (hjl@gnu.org)

	* reg-stack.c (subst_stack_regs_pat): Abort if the destination
	of a FP conditional move is not on the FP register stack.

Sun Jan 17 01:15:04 1999  Jeff Law  (law@cygnus.com)

	* version.c: Bump for snapshot.

Sat Jan 16 23:40:33 1999  Jeffrey A Law  (law@cygnus.com)

	* reload1.c (reload_cse_regs_1): Do not call
	reload_cse_simplify_operands for an insn with asm operands.

	* cccp.c (print_help): Fix typos.
	* cpplib.c (print_help): Fix typos.
	* toplev.c (f_optiosn): Fix typos.
	(documented_lang_options): Fix typos.

Sat Jan 16 21:48:17 1999  Marc Espie  (Marc.Espie@openbsd.org)

	* gcc.c (do_spec_1): Fix obvious typo.

Sat Jan 16 19:31:07 1999  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* c-decl.c (duplicate_decls): If `warn_traditional', warn when
	a non-static function declaration follows a static one.

	* invoke.texi (-Wtraditional): Document the extra check now done
	by this flag.

Sat Jan 16 15:13:46 1999  Jeffrey A Law  (law@cygnus.com)

	* pa.md (shadd): Create shadd insns, even if the result of the shift is
	needed without the addition.

Sat Jan 16 10:48:16 1999  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* sh.md (movdf, movsf): Temporary workaround for no_new_pseudos lossage.

Fri Jan 15 23:44:37 1999  Richard Henderson  <rth@cygnus.com>

	* sparc.c (sparc_issue): Add hypersparc/sparclite86x entries.

Fri Jan 15 22:30:04 1999  David Edelsohn  <edelsohn@gnu.org>

	* rs6000.h (CONST_OK_FOR_LETTER_P): Do not assume 32-bit CONST_INT.
	* rs6000.c (u_short_cint_operand, add_operand, logical_operand,
	non_add_cint_operand, non_logical_cint_operand): Likewise.
	(get_issue_rate): Add CPU_PPC604E case.
	* rs6000.md (movdi, !TARGET_POWERPC64 splitters): Handle 64-bit hosts.

Fri Jan 15 18:42:12 1999  Richard Henderson  <rth@cygnus.com>

	* expr.c (queued_subexp_p): Make public.
	* expr.h (queued_subexp_p): Declare it.
	* recog.c (asm_operand_ok): New function.
	(check_asm_operands): Use it.  After reload, use constrain_operands
	instead.
	* recog.h (asm_operand_ok): Declare it.
	* stmt.c (expand_asm_operands): Use it to try harder to make
	asms initially satisfy their constraints.

Fri Jan 15 17:43:59 1999  Jeffrey A. Law  <law@rtl.cygnus.com>

	* sparc.h (LEGITIMIZE_RELOAD_ADDRESS): Do not create
	(mem (lo_sum (...)) for TFmode unless TARGET_V9.

Sat Jan 16 12:47:15 1999  Michael Hayes  <m.hayes@elec.canterbury.ac.nz>

	* config/c4x/c4x.md (not_repeat_reg): Allow ldp instruction
	in delay slot of RPTBD.

Sat Jan 16 12:26:40 1999  Michael Hayes  <m.hayes@elec.canterbury.ac.nz>

	* config/c4x/libgcc.S (___divhi3, ___modhi3): Fix long long
	divide and modulo sign problem.

Fri Jan 15 11:02:31 1999  Michael Hayes  <m.hayes@elec.canterbury.ac.nz>

	* unroll.c (loop_iterations): Return 0 if the last loop insn
	is not a jump insn or if the loop has multiple back edges.

1999-01-15  Manfred Hollstein  <manfred@s-direktnet.de>

	* configure.in (fixinc_defs): Do not define for m[68]8k-motorola-sysv{,3};
	it's working properly now.  Remove comment saying "see m68k-motorola-sysv
	as an example".
	* configure: Regenerate using autoconf.

	* fixinc/fixincl.c (main): Do not ignore SIGCHLD.

Thu Jan 14 22:38:41 1999  Jeffrey A Law  (law@cygnus.com)

	* unroll.c (find_splittable_givs): For a DEST_ADDR giv, do not share
	a register with another DEST_ADDR giv if the address is not valid.

	* pa.c (hppa_expand_epilogue): Save and restore the static chain
	around the call to mcount.

	* h8300.h (ASM_OUTPUT_LABELREF): Use asm_fprintf, not fprintf.

	* stmt.c (expand_end_case): Use emit_cmp_and_jump_insns to avoid
	generating non-canonical rtl.

1999-01-14  Vladimir N. Makarov  <vmakarov@cygnus.com>

	* config/i960/i960.c (i960_output_move_double_zero,
	i960_output_move_quad_zero): New functions for moving zeros.
	(i960_output_move_double, i960_output_move_quad): Additional code
	for situation when moving unaligned register group.

	* config/i960/i960.h (i960_output_move_double_zero,
	i960_output_move_quad_zero): The function definitions.

	* config/i960/i960.md (movdi+1, movti+1): Usage of the functions.

1999-01-13  Vladimir N. Makarov  <vmakarov@cygnus.com>

	* config/i960/i960.c (i960_function_prologue): New code (optimal
	solution) for saving global registers in local registers.
	(form_reg_groups, reg_group_compare, split_reg_group): New
	functions used by the code.
	(reg_group): New structure definition for the new code.

1999-01-13  Manfred Hollstein  <manfred@s-direktnet.de>

	* fixinc/fixincl.c (create_file): Pass file creation mask as
	third parameter to "open".  Use O_TRUNC flag to open instead of
	explicitly unlink'ing the file.
	(process): and forget about the "chmod" stuff.

Wed Jan 13 20:12:37 1999  Richard Henderson  <rth@cygnus.com>

	* integrate.c (expand_inline_function): Recognize (mem (addressof))
	and substitute.  Copy the return value from there into a new pseudo.

Wed Jan 13 16:47:00 1999  Catherine Moore  <clm@cygnus.com>

	* config/arm.c (output_func_epilogue): Check TARGET_ABORT_NORETURN
	before generating a call to abort for volatile functions.
	* config/arm.h (ARM_FLAG_ABORT_NORETURN): Define.
	(TARGET_ABORT_NORETURN): Define.
	(abort-on-noreturn): New option.

Thu Jan 14 13:52:42 1999  Michael Hayes  <m.hayes@elec.canterbury.ac.nz>

	* config/c4x/c4x.md (in_annul_slot_3): Correctly allow unarycc
	and binarycc operations in 3rd annulled delay slot!

Wed Jan 13 16:16:44 1999  Catherine Moore  <clm@cygnus.com>

	* config/arm.c (output_func_epilogue): Check TARGET_ABORT_NORETURN
	before generating a call to abort for volatile functions.
	* config/arm.h (ARM_FLAG_ABORT_NORETURN): Define.
	(TARGET_ABORT_NORETURN): Define.
	(abort-on-noreturn): New option.

Wed Jan 13 13:30:08 1999  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* cccp.c (xstrdup): Renamed from `savestring'.  All callers changed.
	Remove prototype which we get from libiberty.h.

	* collect2.c (xstrdup): Likewise.

	* genextract.c (xstrdup): Likewise for `copystr'.
	(mybzero): Remove it and use `memset' instead.

	* genoutput.c (mybcopy, mybzero): Remove these.  All callers changed
	to use `memcpy' and `memset' instead.

	* genrecog.c (xstrdup): Renamed from `copystr'.  All callers
	changed.  Remove prototype.
	(mybcopy, mybzero): Remove these and use memcpy/memset.

Wed Jan 13 00:59:04 1999  Jeffrey A Law  (law@cygnus.com)

	* mips.h (LOAD_EXTEND_OP): Correct for SImode and CCmode moves when
	generating code for TARGET_64BIT.

Tue Jan 12 14:05:37 1999  David Edelsohn  <edelsohn@gnu.org>

	* rs6000.c (print_operand, cases 'm' and 'M'): Do not depend on
	HOST_WIDE_INT word-size.
	(rs6000_stack_info): Remove redundant alignment of fpmem.

Tue Jan 12 14:05:37 1999  Richard Henderson  <rth@cygnus.com>

	* rs6000.c (short_cint_operand): Remove CONSTANT_P_RTX handling.
	(u_short_cint_operand, reg_or_cint_operand, logical_operand): Likewise.
	(input_operand): Adjust CONSTANT_P_RTX handling.
	* rs6000.h (PREDICATE_CODES): Remove CONSTANT_P_RTX references.
	* rs6000.md (movsi): Adjust CONSTANT_P_RTX handling.
	(movhi, movqi): Remove CONSTANT_P_RTX handling.
	(movdi): Adjust CONSTANT_P_RTX handling.

1999-01-12  Manfred Hollstein  <manfred@s-direktnet.de>

	* configure: Regenerate using autoconf.

	* fixinc/Makefile.in (INCLUDES): Add -I$(srcdir)/../../include.
	* fixinc/fixincl.c (SIGCHLD): Use SIGCLD on (very) old systems.
	(process): "fchmod" isn't available on all systems, use "chmod"
	instead.
	* fixinc/server.c: Add #include <sys/types.h>.
	(STDIN_FILENO): Add default definition if no include file defines
	it already.
	(STDOUT_FILENO): Likewise.

Tue Jan 12 10:23:24 1999  Stan Cox  <scox@cygnus.com>

	* mips.md (call_value_internal3c): New pattern for -mips16 -mlong-calls.

1999-01-12  Manfred Hollstein  <manfred@s-direktnet.de>

	* m68k/mot3300.h (ADD_MISSING_POSIX, ADD_MISSING_XOPEN): Define to
	ensure all prototypes necessary for building libio will be available.
	* m68k/xm-mot3300.h (ADD_MISSING_POSIX, ADD_MISSING_XOPEN): Remove
	definitions here as they are not host specific.
	* m88k/sysv3.h, m88k/xm-sysv3.h: Likewise.

Tue Jan 12 02:53:46 1999  Richard Henderson  <rth@cygnus.com>

	* cse.c (cse_insn): Never prefer (const (constant_p_rtx)).

Tue Jan 12 02:36:10 1999  Jeff Law  (law@cygnus.com)

	* version.c: Bump for snapshot.

Tue Jan 12 01:30:19 1999  Richard Henderson  <rth@cygnus.com>

	* rtl.c (rtx_alloc): Use memset instead of inline loop.

	* recog.h (recog_op_alt): Declare extern.

Tue Jan 12 00:23:31 1999  Richard Henderson  <rth@cygnus.com>

	* function.c (purge_addressof_1): If the note accesses a mem+addressof
	in a wider mode than any replacement, adjust the cached replacement.
	Cache trivial substitutions as well.

Tue Jan 12 00:06:00 1999  Richard Henderson  <rth@cygnus.com>

	* Makefile.in (OBJECTS): Add sbitmap.o.
	(BASIC_BLOCK_H): Add sbitmap.h.
	* basic-block.h: Move simple bitmap code to sbitmap.h.
	* flow.c: Move simple bitmap code to sbitmap.c.
	* sbitmap.h, sbitmap.c: New files.

Mon Jan 11 23:51:50 1999  Richard Henderson  <rth@cygnus.com>

	* alpha.h (TARGET_SWITCHES): Document switches.
	(TARGET_OPTIONS): Likewise.

	* alpha/elf.h (ASM_FINISH_DECLARE_OBJECT): Use HOST_WIDE_INT_PRINT_DEC.

Mon Jan 11 22:54:14 1999  Richard Henderson  <rth@cygnus.com>

	* tree.c (new_alias_set): Return zero if !flag_strict_aliasing.

Mon Jan 11 22:36:01 1999  Richard Henderson  <rth@cygnus.com>

	* basic-block.h (basic_block_head): Rename to x_basic_block_head.
	(basic_block_end): Rename to x_basic_block_end.
	(BLOCK_HEAD, BLOCK_END): Update.

	* caller-save.c: Change basic_block_head/end references to
	BLOCK_HEAD/END.
	* combine.c, flow.c, function.c, gcse.c, global.c: Likewise.
	* graph.c, haifa-sched.c, local-alloc.c, regclass.c: Likewise.
	* regmove.c, reload1.c, reorg.c, sched.c: Likewise.

Sat Jan  9 23:54:09 1999  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* gcc.c (xstrerror): Renamed from my_strerror.  All callers
	changed.  Remove prototype since we get that from libiberty.h.

	* protoize.c (xstrerror): Likewise.

Sat Jan  9 23:22:04 1999  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* gcc.c (read_specs): Ensure format specifiers match their arguments.

Sat Jan  9 20:04:24 1999  Richard Henderson  <rth@cygnus.com>

	* tree.c (copy_node): Oops.  That would be copy not zero
	in that last change.

Sun Jan 10 15:35:41 1999  Michael Hayes  <m.hayes@elec.canterbury.ac.nz>

	* config/c4x/c4x.c: Include system.h.
	(c4x_caller_save_map): Disable caller save for RC.
	(c4x_optimization_options): Disable scheduling before reload.
	(valid_parallel_load_store) : Define return type as int.
	Remove unused variable regs.
	* config/c4x/c4x.h (REGISTER_MOVE_COST): Make independent of register
	class.
	* config/c4x/c4x.md (rotlqi3, rotrqi3): Fix up emitted RTL to
	handle rotations.
	(*db, decrement_and_branch_until_zero): Fix up constraints
	to keep reload happy.

Sat Jan  9 18:35:29 1999  Richard Henderson  <rth@cygnus.com>

	* tree.c (make_node): Call bzero instead of inline clear.
	(copy_node, make_tree_vec, build1): Likewise.
	(get_identifier): Call strlen instead of inline count.
	(maybe_get_identifier): Likewise.

Sun Jan 10 14:04:51 1999  Michael Hayes  <m.hayes@elec.canterbury.ac.nz>

	* config/c4x/c4x.md (in_annul_slot_3): Allow unarycc and binarycc
	operations in 3rd annulled delay slot.
	(*lshrqi3_const_set): Disallow c constraint for operand0.
	(modhi3+1, modhi3+2): Set attribute type to multi.
	* config/c4x/c4x.c (c4x_S_constraint): Removed space in middle of
	!= operator.

Sat Jan  9 11:44:55 1999  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* gansidecl.h: Allow attribute unused on labels only when we are
	version 2.93 or higher.  Not all versions of 2.92 have this feature.

	* version.c: Bump minor number to 93.

Fri Jan  8 10:51:13 1999  Andreas Schwab  <schwab@issan.cs.uni-dortmund.de>

	* config/m68k/m68k.h: Declare output_function_epilogue.
	* recog.h: Declare next_insn_tests_no_inequality.

Fri Jan  8 01:43:53 1999  Jeffrey A Law  (law@cygnus.com)

	* stmt.c (optimize_tail_recursion): New function, extracted from ...
	(expand_return): Use optimize_tail_recursion.
	* tree.h (optimize_tail_recursion): Declare.

	* toplev.c (compile_file): Move call to output_func_start_profiler
	to after the loop to emit deferred functions.

Thu Jan  7 19:52:53 1999  Gerald Pfeifer  <pfeifer@dbai.tuwien.ac.at>

	* system.h (abort): Supply more detailed information on how to
	report an Internal Compiler Error.

Thu Jan  7 09:25:58 1999  Bruce Korb  (korb@datadesign.com)

	* fixinc/fixincl.c (*): More decapitalization of variables
	plus some explanatory comments.

	* fixinc/Makefile.in fixinc/mkfixinc.sh:
	When the fixincl program does not work for a certain system,
	we substitute a shell script.  Added user commentary when
	this happens.

Thu Jan  7 11:26:17 1999  Mark Mitchell  <mark@markmitchell.com>

	* calls.c (store_unaligned_arguments_into_pseudos): Use xmalloc to
	allocate memory that will live beyond this function.
	(expand_call): Free it here.

Thu Jan  7 03:08:17 1999  Richard Henderson  <rth@cygnus.com>

	* sparc.h (PREFERRED_RELOAD_CLASS): Select GENERAL_REGS for
	integer data not destined for fp regs.
	(LEGITIMIZE_RELOAD_ADDRESS): New.

Thu Jan  7 03:03:42 1999  Stan Cox  <scox@cygnus.com>
			  Richard Henderson  <rth@cygnus.com>

	Support for HyperSPARC and SPARClite86x:
	* sparc.h (TARGET_CPU_hypersparc, TARGET_CPU_sparclite86x): New.
	(CPP_CPU32_DEFAULT_SPEC): Fix up for the new targets.
	(ASM_CPU32_DEFAULT_SPEC): Likewise.
	(TARGET_CPU_DEFAULT): Likewise.
	(enum processor_type): Likewise.
	(CPP_ENDIAN_SPEC): Handle little endian data.
	(LIBGCC2_WORDS_BIG_ENDIAN): Likewise.
	(ADJUST_COST): Call sparc_adjust_cost.
	* sparc.c (sparc_override_options): Fix up for the new targets.
	(supersparc_adjust_cost): Make static.
	(hypersparc_adjust_cost): New.
	(ultrasparc_adjust_cost): Make static.
	(sparc_adjust_cost): New.
	* sparc.md (attr cpu): Add hypersparc and sparclite86x.
	(function_unit): Add hypersparc scheduling rules.

	* configure.in (with_cpu handler): Recognize hypersparc.

Thu Jan  7 23:54:05 1999  Michael Hayes  <m.hayes@elec.canterbury.ac.nz>

	* config/c4x/c4x.c: Added space after negation operator.
	* config/c4x/c4x.h: Likewise.
	* config/c4x/c4x.md: Likewise.

Thu Jan  7 23:39:27 1999  Michael Hayes  <m.hayes@elec.canterbury.ac.nz>

	* config/c4x/c4x.c (c4x_preferred_reload_class): Always return class.

Thu Jan  7 00:29:25 1999  Bernd Schmidt  <crux@pool.informatik.rwth-aachen.de>

	* combine.c (num_sign_bit_copies): In NEG, MULT, DIV and MOD cases,
	when a test can't be performed due to limited width of
	HOST_BITS_PER_WIDE_INT, use the more conservative approximation.
	Fix UDIV case for cases where the first operand has the highest bit
	set.

Thu Jan  7 00:01:38 1999  Lutz Vieweg  <lkv@mania.robin.de>

	* pa.h (reg_class): Add FPUPPER_REGS.
	(REG_CLASS_NAMES): Similarly.
	(REG_CLASS_CONTENTS): Similarly.
	(REGNO_REG_CLASS): Handle FPUPPER_REGS.
	(FP_REG_CLASS_P): Likewise.
	(REG_CLASS_FROM_LETTER): Similarly.
	(CLASS_MAX_NREGS): Similarly.

1999-01-06  Brendan Kehoe  <brendan@cygnus.com>

	* fixincludes: For HP/UX 10.20, also look in curses_colr/curses.h
	for a typedef of bool.  Make sure to have a copy of the file is
	in place before we look to fix it.  Fix typo in variable name to
	FILE.

Wed Jan  6 07:51:05 1999  Richard Henderson  <rth@cygnus.com>

	* expr.c (expand_builtin) [case BUILT_IN_CONSTANT_P]: Use
	value_mode for the return mode.

Wed Jan  6 17:55:19 1999  Robert Lipe  <robertlipe@usa.net>

	* configure.in: New flag --with-dwarf2.  If set, enables DWARF-2
	debugging as default.

	* config/tm-dwarf2.h: New file.

Wed Jan  6 16:08:54 1999  Jeffrey A Law  (law@cygnus.com)

	* h8300.h (ASM_OUTPUT_LABELREF): Define.

	* pa.h (DONT_RECORD_EQUIVALENCE): Kill.
	* local-alloc.c (update_equiv_regs): Corresponding changes.
	* tm.texi (DONT_RECORD_EQUIVALENCE): Kill.

	* calls.c (special_function_p): Push alloca test inside the large
	conditional which excludes functions not at file scope or not
	extern.

	* calls.c (special_function_p): New function broken out of
	expand_call.
	(precompute_register_parameters): Likewise.
	(store_one_arg): Likewise.
	(store_unaligned_argumetns_into_pseudos): Likewise.
	(save_fixed_argument_area): Likewise.
	(restore_fixed_argument_area): Likewise.
	(expand_call): Corresponding changes.

Thu Jan  7 00:12:24 1999  Michael Hayes  <m.hayes@elec.canterbury.ac.nz>

	* config/c4x/c4x.md (addqi3): If the destination operand is
	a hard register other than an extended precision register,
	emit addqi3_noclobber.
	(*addqi3_noclobber_reload): New pattern added so that reload
	will recognize a store of a pseudo, equivalent to the sum
	of the frame pointer and a constant, as an add insn.

1999-01-06  Manfred Hollstein  <manfred@s-direktnet.de>

	* fixinc/fixincl.c: Re-indent according to the GNU standards.
	fixinc/server.c: Likewise.
	fixinc/server.h: Likewise.

Wed Jan  6 10:43:29 1999  Andreas Schwab  <schwab@issan.cs.uni-dortmund.de>

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

Wed Jan  6 09:44:51 1999  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* toplev.h: In addition to checking _JBLEN, also check if `setjmp'
	is a macro when deciding if we can use `jmp_buf' in prototypes.

Wed Jan  6 03:18:53 1999  Mark Elbrecht  <snowball3@usa.net>

	* configure.in (pc-msdosdjgpp): Set x_make to x-go32.
	* configure: Rebuilt.
	* i386/xm-go32.h: Define LIBSTDCXX.
	* i386/x-go32: New.
	* i386/go32.h (MD_EXEC_PREFIX): Define.
	(FILE_NAME_ABSOLUTE_P): Define.
	(LINK_COMMAND_SPEC): Define.

Wed Jan  6 02:23:36 1999  "Charles M. Hannum"  <root@ihack.net>

	* expr.c (store_expr): If the lhs is a memory location pointed
	to be a postincremented (or postdecremented) pointer, always
	force the rhs to be evaluated into a pseudo.

Wed Jan  6 00:54:21 1999  Geoff Keating  <geoffk@ozemail.com.au>

	* real.c (mtherr): Print more reasonable warning messages.

Tue Jan  5 21:57:42 1999  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* Makefile.in (gcc.o, prefix.o, cccp.o, cpplib.o): Depend on prefix.h.

	* cccp.c: Include prefix.h, don't prototype prefix.c functions.
	(new_include_prefix): Constify char* parameters.

	* cppfiles.c (read_name_map): Likewise.
	(append_include_chain): Likewise.  Also, use a writable char* copy
	of parameter `dir' which we then modify, rather than using the
	parameter itself to store the new writable string.
	(remap_filename): Constify some variables.  Also, use a writable
	char* to store an allocated string which we will be modifying.

	* cpplib.c: Include prefix.h, don't prototype prefix.c functions.
	(cpp_start_read): Constify variable `str'.

	* cpplib.h (append_include_chain): Constify a char* parameter.

	* gcc.c Include prefix.h, don't prototype prefix.c functions.
	(add_prefix, save_string): Constify char* parameters.
	(fatal, error): Add ATTRIBUTE_PRINTF_1 to prototypes.

	* prefix.c: Include prefix.h.
	(get_key_value, translate_name, save_string, update_path,
	set_std_prefix): Constify various char* parameters and variables.
	(save_string): Use xmalloc, not malloc.
	(translate_name): Use a writable temporary variable to create and
	modify a string before setting it to a const char*.

	* prefix.h: New file to prototype functions exported from prefix.c.

Tue Jan  5 08:52:18 1999  Bruce Korb  (korb@datadesign.com)

	* fixinc/fixincl.c (various): Added debug code so
	Manfred can trace the processing.

	* fixinc/inclhack.def (sys/utsname.h): Provide forward declaration of
	struct utsname on Ultrix V4.[35].

	* fixinc/{fixincl.x|fixincl.sh|inclhack.sh} : Regenerated.

Mon Jan  4 15:37:30 1999  Zack Weinberg  <zack@rabi.phys.columbia.edu>

	* cpplib.c (skip_if_group): Split out the logic that handles
	directive recognition to its own function.  Don't use
	parse markers; use a bare pointer into the buffer.  Use
	copy/skip_rest_of_line instead of doing it by hand.  Remove
	`return on any directive' mode which was never used, and take
	only one argument.
	(consider_directive_while_skipping): New function, subroutine
	of skip_if_group.  Logic streamlined a bit.
	(conditional_skip, do_elif, do_else): Call skip_if_group with
	only one argument.

Mon Jan  4 15:27:30 1999  Zack Weinberg  <zack@rabi.phys.columbia.edu>

	* cpplib.c (do_undef): EOF immediately after '#undef FOO' is not an
	error.

Mon Jan  4 11:55:51 1999  Jason Merrill  <jason@yorick.cygnus.com>

	* extend.texi (Bound member functions): Document.

Mon Jan  4 11:01:48 1999  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* mips-tdump.c (st_to_string, sc_to_string, glevel_to_string,
	lang_to_string, type_to_string): Make return type const char*.
	(print_symbol): Apply `const' keyword to a char*.
	(print_file_desc): Cast structure member `crfd' to ulong when
	comparing against one.

	* mips-tfile.c (pfatal_with_name): Apply `const' keyword to char*.
	(fatal, error): Add ATTRIBUTE_PRINTF_1 to prototypes.
	(progname, input_name): Apply `const' keyword to a char*.
	Don't redundantly include sys/stat.h.
	(alloc_info): Apply `const' keyword to a char*.
	(st_to_string, sc_to_string): Likewise.
	(hash_string): Cast variable `hash_string' to a symint_t when
	comparing against one.
	(add_string): Cast PAGE_USIZE to Ptrdiff_t when comparing against one.
	Likewise cast it to long when comparing against one.
	(add_local_symbol): Apply `const' keyword to a char*.
	(add_ext_symbol): Likewise.
	(add_unknown_tag): Likewise.
	(add_procedure): Cast a printf-style field width to an int.
	(add_file): Cast PAGE_USIZE to long when comparing against one.
	(parse_begin): Cast a printf-style field width to an int.
	(parse_bend): Likewise.
	(parse_def): Likewise.
	(parse_end): Likewise.
	(mark_stabs): Mark parameter `start' with ATTRIBUTE_UNUSED.
	(parse_stabs_common): Fix format specifier.
	(parse_input): Change type of variable `i' to Size_t.
	(write_object): Fix arguments to match format specifiers.
	Cast variable `num_write' to long when comparing against one.
	(read_seek): Cast variable `sys_read' to symint_t when comparing
	against one.  Fix arguments to match format specifiers.  Cast
	variable `size' to long when comparing against one.
	(copy_object): Cast result of `sizeof' to int when comparing
	against one.  Fix arguments to match format specifiers.  Cast
	variable `ifd' to long when comparing against a signed value.
	Likewise, likewise.

Mon Jan  4 10:30:33 1999  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* c-common.c (decl_attributes): Allow applying attribute `unused'
	on a LABEL_DECL.

	* c-parse.in (label): Parse attributes after a label, and call
	`decl_attributes' to handle them.

	* gansidecl.h (ATTRIBUTE_UNUSED_LABEL): Define.

	* genrecog.c (OUTPUT_LABEL, write_tree_1, write_tree): When
	generating labels, mark them with ATTRIBUTE_UNUSED_LABEL.

	* invoke.texi: Note that labels can be marked `unused'.

Sun Jan  3 23:32:18 1999  Jeff Law  (law@cygnus.com)

	* version.c: Bump for snapshot.

Sun Jan  3 23:00:42 1999  Jeffrey A Law  (law@cygnus.com)

	* optabs.c (emit_cmp_and_jump_insns): Use CONSTANT_P canonicalizing
	RTL for a compare/jump sequence.

Sun Jan  3 22:58:15 1999  Michael Hayes  <m.hayes@elec.canterbury.ac.nz>

	* optabs.c (emit_cmp_insn): Abort if asked to emit non-canonical RTL
	for a target with HAVE_cc0 defined.
	(emit_cmp_and_jump_insns): New function.
	* expr.h (emit_cmp_and_jump_insns): Prototype it.
	* loop.c (check_dbra_loop): Use it to replace calls
	to emit_cmp_insn and emit_jump_insn and to canonicalize
	the comparison if necessary.
	* unroll.c (unroll_loop): Likewise.

Sun Jan  3 21:01:04 1999  Rainer Orth  <ro@TechFak.Uni-Bielefeld.DE>

	* fixincludes (sys/utsname.h): Provide forward declaration of
	struct utsname on Ultrix V4.[35].

	* mips.md (div_trap): Use local labels instead of dot-relative
	branches.

Sun Jan  3 20:40:34 1999  Jeffrey A Law  (law@cygnus.com)

	* pa.md (branch, negated branch): Handle (const_int 0) as first
	source operand.
	* pa.c (output_cbranch): Likewise.

Sun Jan  3 03:20:38 1999  David Edelsohn  <edelsohn@gnu.org>

	* rs6000.c (rs6000_stack_info): Undo spurious part of last
	change.

1999-01-01  Manfred Hollstein  <manfred@s-direktnet.de>

	* extend.texi (__builtin_constant_p): Add missing @smallexample.

Fri Jan  1 11:48:20 1999  Jeffrey A Law  (law@cygnus.com)

	* i386.md (doubleword shifts): Fix dumb mistakes in previous change.


Copyright (C) 1999 Free Software Foundation, Inc.

Copying and distribution of this file, with or without modification,
are permitted in any medium without royalty provided the copyright
notice and this notice are preserved.
