Wed Dec 30 23:38:55 1998  Jeffrey A Law  (law@cygnus.com)

	* m68k.md (adddi_dilshr32): Allow all operands to be registers too.
	(adddi_dishl32): Similarly.

	* cse.c (invalidate_skipped_block): Call invalidate_from_clobbers
	for each insn in the skipped block.

	* reload1.c (reload_as_needed): Verify that the insn satisfies its
	constraints after replacing a register address with an autoincrement
	address for reload inheritance purposes.

	* i386.md (doubleword shifts): Avoid namespace pollution.

Wed Dec 30 23:00:28 1998  David O'Brien  <obrien@NUXI.com>

	* configure.in (FreeBSD ELF): Needs special crt files.

Wed Dec 30 22:50:13 1998  Geoffrey Noer  <noer@cygnus.com>

	* i386/xm-cygwin.h: Change DIR_SEPARATOR to forward slash.

1998-12-30  Andreas Schwab  <schwab@issan.cs.uni-dortmund.de>

	* loop.c (check_dbra_loop): While reversing the loop, if the
	comparison value has a VOID mode use the mode of the other operand
	to compute the mask.

Wed Dec 30 22:24:00 1998  Michael Meissner  <meissner@cygnus.com>

	* rs6000.md ({save,restore}_stack_function): Take 2 operands to
	avoid warnings in compiling explow.c.

	(patch from Ken Raeburn, raeburn@cygnus.com)
	* rs6000.c (rs6000_stack_info): Force 8-byte alignment of
	fpmem_offset.  Compute total size after that, and then
	rs6000_fpmem_offset using both values.

Mon Dec 28 19:26:32 1998  Gerald Pfeifer  <pfeifer@dbai.tuwien.ac.at>

	* gcc.texi (Non-bugs): ``Empty'' loops will be optimized away in
	the future; indeed that already happens in some cases.

Tue Dec 29 11:58:53 1998  Richard Henderson  <rth@cygnus.com>

	* sparc.c (input_operand): Recognize (const (constant_p_rtx)).
	(arith_operand): Remove constant_p_rtx handling.
	(const64_operand, const64_high_operand): Likewise.
	(arith11_operand, arith10_operand, arith_double_operand): Likewise.
	(arith11_double_operand, arith10_double_operand, small_int): Likewise.
	(small_int_or_double, uns_small_int, zero_operand): Likewise.
	* sparc.h (PREDICATE_CODES): Likewise.

	* rtl.h (CONSTANT_P): Remove CONSTANT_P_RTX.

Tue Dec 29 11:32:54 1998  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>

	* rtl.def (CONSTANT_P_RTX): Clarify commentary.
	* expr.c (expand_builtin, case BUILT_IN_CONSTANT_P): Rework to
	consider constant CONSTRUCTOR constant and to defer some cases
	to cse.
	* cse.c (fold_rtx, case CONST): Add handling for CONSTANT_P_RTX.
	* regclass.c (reg_scan_mark_refs, case CONST): Likewise.

Tue Dec 29 11:30:10 1998  Richard Henderson  <rth@cygnus.com>

	* expr.c (init_expr_once): Kill can_handle_constant_p recognition.
	* cse.c (fold_rtx, case 'x'): Remove standalone CONSTANT_P_RTX code.

	* alpha.c (reg_or_6bit_operand): Remove CONSTANT_P_RTX handling.
	(reg_or_8bit_operand, cint8_operand, add_operand): Likewise.
	(sext_add_operand, and_operand, or_operand): Likewise.
	(reg_or_cint_operand, some_operand, input_operand): Likewise.
	* alpha.h (PREDICATE_CODES): Likewise.

Sat Dec 26 23:26:26 1998  Jeff Law  (law@cygnus.com)

	* version.c: Bump for snapshot.

Sat Dec 26 09:17:04 1998  Jeffrey A Law  (law@cygnus.com)

	* gengenrtl.c (gencode): Always use bzero to clear memory instead
	of dangerous casts and stores.

	* Makefile.in (compare, gnucompare): Add missing else true clauses.

Fri Dec 25 23:00:56 1998  Jeffrey A Law  (law@cygnus.com)

	* alpha.md (builtin_longjmp): Add missing "DONE".

Thu Dec 24 10:39:57 1998  Stan Cox  <scox@cygnus.com>

	* gcc.c (execute): Enable -pipe with win32.

Wed Dec 23 10:27:44 1998  Nick Clifton  <nickc@cygnus.com>

	* config/arm/t-arm-elf: Add multiplib option for leading
	underscores.

	* config/arm/thumb.h (ASM_OUTPUT_LABELREF): Use variable
	'user_label_prefix' rather than macro USER_LABEL_PREFIX.

	(thumb_shiftable_const): Use macro 'BASE_REG_CLASS' rather
	than variable 'reload_address_base_reg_class'.  [Note this
	change is unrelated to the others in this patch].

	* config/arm/unknown-elf.h (USER_LABEL_PREFIX): Default to no
	leading underscore.

Wed Dec 23 09:51:32 1998  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* alias.c (record_alias_subset): Remove ignored `&'.
	(init_alias_once): Likewise.

	* c-lex.c (UNGETC): Cast first argument of comma expression to void.

	* config/mips/mips.c (mips_asm_file_end): Cast the result of
	fwrite to `int' when comparing against one.

	* config/mips/mips.h (CAN_ELIMINATE): Add parens around && within ||.
	(INITIAL_ELIMINATION_OFFSET): Add braces to avoid ambiguous `else'.

	* cse.c (rehash_using_reg): Change type of variable `i' to
	unsigned int.

	* dwarf2out.c (initial_return_save): Cast -1 to unsigned before
	assigning it to one.

	* except.c (duplicate_eh_handlers): Remove unused variable `tmp'.

	* final.c (final_scan_insn): Likewise for variable `i'.
	(output_asm_insn): Cast a char to unsigned char when used as an
	array index.

	* gcse.c (compute_pre_ppinout): Cast -1 to SBITMAP_ELT_TYPE when
	assigning it to one.

	* loop.c (strength_reduce): Remove unused variables `count' and `temp'.

	* recog.c (preprocess_constraints): Cast a char to unsigned char
	when used as an array index.

	* regmove.c (find_matches): Likewise.

	* reload1.c (calculate_needs): Add default case in switch.
	(eliminate_regs_in_insn): Initialize variable `offset'.
	(set_offsets_for_label): Change type of variable `i' to unsigned.
	(reload_as_needed): Wrap variable `i' in macro check on
	AUTO_INC_DEC || INSN_CLOBBERS_REGNO_P.

	* scan-decls.c (scan_decls): Mark parameters `argc' and `argv'
	with ATTRIBUTE_UNUSED.  Cast variable `start_written' to size_t
	when comparing against one.

	* stor-layout.c (layout_decl): Cast maximum_field_alignment to
	unsigned when comparing against one.  Likewise for
	GET_MODE_ALIGNMENT().
	(layout_record): Cast record_align to int when comparing against a
	signed value.
	(layout_type): Cast TYPE_ALIGN() to int when comparing against a
	signed value.

	* tree.c (get_identifier): Cast variable `len' to unsigned when
	comparing against one.
	(maybe_get_identifier): Likewise

Wed Dec 23 00:10:01 1998  Jeffrey A Law  (law@cygnus.com)

	* toplev.c (rest_of_compilation): Do not set reload_completed.
	* reload1.c (reload): Set reload_completed before calling
	cleanup_subreg_operands.

Tue Dec 22 23:58:31 1998  Richard Henderson  <rth@cygnus.com>

	* reload1.c (emit_reload_insns): Check `set' not null before use.

Tue Dec 22 15:15:45 1998  Nick Clifton  <nickc@cygnus.com>

	* rtlanal.c (multiple_sets): Change type of 'found' from 'rtx' to
	'int'.

Tue Dec 22 13:55:44 1998  Theodore Papadopoulo  <Theodore.Papadopoulo@sophia.inria.fr>

	* halfpic.c (half_pic_encode): Delete redundant code.

Tue Dec 22 13:02:22 1998  Michael Meissner  <meissner@cygnus.com>

	* toplev.c (main): Delete handling of -dM as a preprocessor
	option.

Mon Dec 21 17:39:38 1998  Michael Meissner  <meissner@cygnus.com>

	* toplev.c (main): Don't emit any warnings when using -dD, -dM, or
	-dI, which are handled by the preprocessor.

Sun Dec 20 16:13:44 1998  John F. Carr  <jfc@mit.edu>

	* configure.in: Handle Digital UNIX 5.x the same as 4.x.
	* i386/sol2.h: Define LOCAL_LABEL_PREFIX as ".".

Sun Dec 20 07:39:52 1998  Jeff Law  (law@cygnus.com)

	* version.c: Bump for snapshot.

Sat Dec 19 22:24:22 1998  Jeff Law  (law@cygnus.com)

	* version.c: Bump for snapshot.

Sat Dec 19 21:41:32 1998  Jeff Law  (law@cygnus.com)

	* version.c: Bump for snapshot.

Sat Dec 19 09:52:27 1998  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* genattr.c (fatal): Qualify a char* with the `const' keyword.

	* genattrtab.c (fatal, attr_printf, attr_string, write_attr_set,
	write_unit_name, write_eligible_delay, expand_units,
	make_length_attrs, write_attr_case, find_attr,
	make_internal_attr): Likewise.
	* gencheck.c (tree_codes): Likewise.
	* gencodes.c (fatal): Likewise.
	* genconfig.c (fatal): Likewise.
	* genemit.c (fatal): Likewise.
	* genextract.c (fatal, walk_rtx, copystr): Likewise.
	* genflags.c (fatal): Likewise.
	* genopinit.c (fatal, optabs, gen_insn): Likewise.
	* genoutput.c (fatal, error, predicates): Likewise.
	* genpeep.c (fatal): Likewise.
	* genrecog.c (fatal, decision, pred_table, add_to_sequence,
	write_tree_1, write_tree, change_state, copystr, indents): Likewise.

Thu Dec 17 18:21:49 1998  Rainer Orth  <ro@TechFak.Uni-Bielefeld.DE>

	* configure.in (with-fast-fixincludes): Fix whitespace.
	* configure: Rebuilt.

	* fixincludes (c_asm.h): Wrap Digital UNIX V4.0B DEC C specific
	asm() etc. function declarations in __DECC.

Thu Dec 17 13:57:23 1998  Nick Clifton  <nickc@cygnus.com>

	* expr.c (emit_move_insn_1): Only emit a clobber if the target
	is a pseudo register.

Thu Dec 17 13:50:29 1998  Nick Clifton  <nickc@cygnus.com>

	* gcse.c: Include expr.h in order to get the prototype for
	get_condition() which is used in delete_null_pointer_checks().

Thu Dec 17 15:58:26 1998  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* hwint.h: New file to consolidate HOST_WIDE_INT (etc) macros.

Thu Dec 17 12:31:12 1998  Jim Wilson  <wilson@cygnus.com>

	* Makefile.in (INTERNAL_CFLAGS): Add SCHED_CFLAGS.
	(ALL_CFLAGS): Delete SCHED_CFLAGS.

1998-12-17  Vladimir N. Makarov  <vmakarov@cygnus.com>

	* config/i60/i960.md (extendqihi2): Fix typo (usage ',' instead of
	';').

1998-12-17  Michael Tiemann  <tiemann@axon.cygnus.com>

	* i960.md (extend*, zero_extend*): Don't generate rtl that looks
	like (subreg:SI (reg:SI N) 0), because it's wrong, and it hides
	optimizations from the combiner.

Thu Dec 17 08:27:03 1998  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* loop.c (combine_givs_used_by_other): Don't depend on n_times_set.

Wed Dec 16 17:30:35 1998  Nick Clifton  <nickc@cygnus.com>

	* toplev.c (main): Disable optimize_size if a specific
	optimization level is requested.  Always set optimization
	level to 2 if -Os is specified.

Wed Dec 16 16:33:04 1998  Dave Brolley  <brolley@cygnus.com>

	* objc/lang-specs.h: Pass -MD, -MMD and -MG to cc1obj if configured with
	cpplib.
	* cpplib.c (cpp_start_read): If in_fname is not initialized, try to
	initialize it using fname.

1998-12-16  Zack Weinberg  <zack@rabi.phys.columbia.edu>

	* cpplib.c (do_include): Treat #include_next in the
	primary source file as #include plus warning.  Treat
	#include_next in a file included by absolute path as an
	error.  fp == CPP_NULL_BUFFER is a fatal inconsistency.

Wed Dec 16 12:28:54 1998  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* cccp.c: Don't define MIN/MAX anymore.
	* cpplib.c: Likewise.
	* machmode.h: Likewise.
	* system.h: Provide definitions for MIN/MAX.

Tue Dec 15 23:47:42 1998  Zack Weinberg  <zack@rabi.phys.columbia.edu>

	* fix-header.c: Don't define xstrdup here.

Wed Dec 16 05:11:04 1998  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* loop.c (consec_sets_giv): New argument last_consec_insn.
	(strength_reduce): Provide / use it.

Wed Dec 16 17:24:07 1998  Michael Hayes  <m.hayes@elec.canterbury.ac.nz>

	* loop.h (loop_info): New field 'vtop'.
	* loop.c (check_dbra_loop): Use loop_info->vtop rather than
	scanning loop for vtop.
	* unroll.c (subtract_reg_term, find_common_reg_term): New functions.
	(loop_iterations): Use them to determine if loop has a constant
	number of iterations.  Set loop_info->vtop.  Don't subtract
	common reg term from initial_value and final_value if have a
	do-while loop.

Tue Dec 15 13:49:55 1998  Jeffrey A Law  (law@cygnus.com)

	* mn10200.md (addsi3 expander): Use "nonmemory_operand" for operand 2.

	* mn10300.md (bset, bclr): Operand 0 is a read/write operand.

	* mn10200.md (abssf2, negsf2): New expanders.

	* mn10300.md (absdf2, abssf2, negdf2, negsf2): New expanders.

Tue Dec 15 11:55:30 1998  Nick Clifton  <nickc@cygnus.com>

	* integrate.c (copy_rtx_and_substitute): If a SUBREG is
	replaced by a CONCAT whose components do not have the same
	mode as the original SUBREG, use a new SUBREG to restore the
	mode.

	* emit-rtl.c (subreg_realpart_p): Cope with subregs containing
	multiword complex values.

1998-12-15  Zack Weinberg  <zack@rabi.phys.columbia.edu>

	* cppalloc.c: Add xstrdup here.
	* cpplib.h: Remove savestring prototype.
	* cpplib.c: Remove savestring function. s/savestring/xstrdup/
	  throughout.
	* cppfiles.c: s/savestring/xstrdup/ throughout.

1998-12-15  Zack Weinberg  <zack@rabi.phys.columbia.edu>

	* cpplib.c: Make all directive handlers read their own
	  arguments.
	  (struct directive): Remove last two arguments from FUNC
	  member prototype. Remove `command_reads_line' member
	  entirely.
	  (directive_table): Remove initializations of
	  command_reads_line flag.  Pretty-print.
	  (eval_if_expression, do_define, do_line, do_include,
	  do_undef, do_error, do_pragma, do_ident, do_if, do_xifdef,
	  do_else, do_elif, do_sccs, do_assert, do_unassert,
	  do_warning): Take only two args.

	  (cpp_define): Call do_define with two args and the text to
	  define stuffed into a buffer.
	  (make_assertion): Call do_assert with two args.
	  (handle_directive): Call do_line with two args. Call
	  kt->func with two args.  Remove command_reads_line
	  processing.
	  (do_define, do_undef, do_error, do_warning, do_pragma,
	  do_sccs): Read the rest of the line here.
	  (do_ident): Gobble rest of line, as cccp does.
	  (cpp_undef): New function.
	  (cpp_start_read): Call cpp_undef instead of do_undef.

1998-12-15  Zack Weinberg  <zack@rabi.phys.columbia.edu>

	* cpphash.h (union hash_value): Remove `keydef' member, add a
	  `struct hashnode *aschain' member for #assert.

	* cpplib.c (struct tokenlist_list, struct
	  assertion_hashnode): Delete structure definitions.
	  (assertion_install, assertion_lookup, delete_assertion,
	  check_assertion, compare_token_lists, reverse_token_list,
	  read_token_list, free_token_list): Delete functions.
	  (parse_assertion): New function.
	  (cpp_cleanup): Don't destroy the assertion_hashtable.

	  (do_assert): Gut and rewrite.  #assert foo (bar) places
	  entries for `#foo' and `#foo(bar)' in the macro hash table,
	  type T_ASSERT.  The value union's `aschain' member is used
	  to chain all answers for a given predicate together.
	  (do_unassert): Also rewritten.  Take an un-asserted
	  answer off the chain from its predicate and call
	  delete_macro on the hashnode, or walk a predicate chain
	  calling delete_macro on all the entries.
	  (cpp_read_check_assertion): Simply call parse_assertion to
	  get the canonical assertion name, and look that up in the
	  hash table.

	* cpplib.h (ASSERTION_HASHNODE,ASSERTION_HASHSIZE,assertion_hashtab):
	Removed.

	* cpphash.c (install): Use bcopy instead of an explicit loop
	  to copy the macro name.

	* cppexp.c (cpp_lex): Convert the result of
	  cpp_read_check_assertion to a `struct operation' directly;
	  don't go through parse_number.

Tue Dec 15 18:27:39 1998  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* loop.h (struct induction): Delete times_used member.
	* loop.c (n_times_set): Rename to set_in_loop.  Changed all users.
	(n_times_used): Rename to n_times_set.  Changed all users.
	(scan_loop): Free reg_single_usage before strength reduction.
	(record_giv, combine_givs): Remove handling of times_used member.
	(combine_givs_used_once): Rename to:
	(combine_givs_used_by_other) .  Changed all callers.

Tue Dec 15 01:45:26 1998  Jason Merrill  <jason@yorick.cygnus.com>

	* dwarf2out.c (gen_struct_or_union_type_die): Check AGGREGATE_TYPE_P
	instead of TREE_CODE_CLASS == 't'.
	(gen_type_die): Likewise.
	(scope_die_for): Ignore FUNCTION_TYPE "scopes".

Mon Dec 14 16:23:27 1998  Jim Wilson  <wilson@cygnus.com>

	* real.c (endian): Disable last change unless
	HOST_BITS_PER_WIDE_INT is greater than 32.

Mon Dec 14 17:13:36 1998  Andrew MacLeod  <amacleod@cygnus.com>

	* output.h (force_data_section): New prototype.
	* varasm.c (force_data_section): New function to force the
	data section, regardless of what in_section thinks.
	* dwarf2out.c (output_call_frame_info): Call force_data_section
	since varasm may not realize we've changes sections.

Mon Dec 14 14:09:34 1998  Nick Clifton  <nickc@cygnus.com>

	* reload1.c (reload): Delete REG_RETVAL and REG_LIBCALL notes
	  after completing reload.

	* rtl.texi: Document that REG_RETVAL and REG_LIBCALL are
	  deleted after reload.

Mon Dec 14 01:39:28 1998  Jeffrey A Law  (law@cygnus.com)

	* rtl.h (multiple_sets): Fix prototype.
	* rtlanal.c (multiple_sets): Fix return type.

Sun Dec 13 12:43:58 1998  Jeff Law  (law@cygnus.com)

	* version.c: Bump for snapshot.

Sun Dec 13 01:05:22 1998  Jeff Law  (law@cygnus.com)

	* version.c: Bump for snapshot.

1998-12-13  Manfred Hollstein  <manfred@s-direktnet.de>

	* protoize.c (fputs): Wrap extern declaration in #ifndef fputs.

Sun Dec 13 00:24:14 1998  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* rtl.h (recompute_reg_usage): Add second argument.
	* flow.c (recompute_reg_usage): Likewise.
	* toplev.c (rest_of_compilation): Supply second argument to
	recompute_reg_usage.

	* reload1.c (compute_use_by_pseudos): Allow reg_renumber[regno] < 0
	after reload.

Sat Dec 12 23:39:10 1998  Jeffrey A Law  (law@cygnus.com)

	* m68k/t-m68kelf (MULTILIB_OPTIONS): Add mcpu32.
	(MULTILIB_MATCHES): -m68332 now uses mcpu32 libraries, not m68000.
	(MULTILIB_EXCEPTIONS): Don't build 68881 libraries for m68000,
	mcpu32 or m5200.

	* i386/next.h (ASM_OUTPUT_ALIGN): Use 0x90 for fill character.

	* rtlanal.c (multiple_sets): New function.
	* rtl.h (multiple_sets): Declare it.
	* local-alloc.c (wipe_dead_reg): Use it.
	* global.c (global_conflicts): Likewise.

Sat Dec 12 22:13:02 1998  Mark Mitchell  <mark@markmitchell.com>

	* global.c (record_conflicts): Don't use an array of shorts to
	store an array of ints.
	(global_conflicts): Likewise.

Sat Dec 12 16:49:24 1998  Richard Henderson  <rth@cygnus.com>

	* alpha.c (alpha_expand_block_move): mode_for_size expects
	bits, not bytes.  Infer extra alignment from addressof.

1998-12-11  Michael Meissner  <meissner@cygnus.com>

	* rs6000/sysv4.h (ASM_OUTPUT_ALIGNED_LOCAL): Put small data in the
	.sbss section, not .sdata.

1998-12-11  Manfred Hollstein  <manfred@s-direktnet.de>

	* cccp.c: Do not #include <sys/stat.h> here; this is already done
	by "system.h".
	* collect2.c: Likewise.
	* cpplib.h: Likewise.
	* gcc.c: Likewise.
	* gcov.c: Likewise.
	* getpwd.c: Likewise.
	* protoize.c: Likewise.
	* toplev.c: Likewise.

	* cpplib.h (HOST_WIDE_INT): Get definition from "machmode.h"
	and don't try to define it here.
	* Makefile.in (cppmain.o): Depend on machmode.h.
	(cpplib.o): Likewise.
	(cpperror.o): Likewise.
	(cppexp.o): Likewise.
	(cppfiles.o): Likewise.
	(cpphash.o): Likewise.
	(cppalloc.o): Likewise.
	(fix-header.o): Likewise.
	(scan-decls.o): Likewise.

Fri Dec 11 11:02:49 1998  Stan Cox  <scox@cygnus.com>

	* sh.c (print_operand): Lookup interrupt_handler attribute instead
	of relying on static variable.
	* (calc_live_regs): Likewise.
	* (sh_pragma_insert_attributes): Create interrupt_handler
	attribute if a pragma was specified.
	* (sh_valid_machine_decl_attribute): Don't set static flag.
	* sh.h (PRAGMA_INSERT_ATTRIBUTES): New.

Fri Dec 11 12:56:07 1998  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* reload1.c (reload_combine): Use BASIC_BLOCK_LIVE_AT_START
	to determine if a register is live at a jump destination.
	Everything is dead at a BARRIER.

Thu Dec 10 16:02:06 1998  Jim Wilson  <wilson@cygnus.com>

	* cse.c (simplify_unary_operation): Sign-extend constants when
	they have the most significant bit set for the target.
	* real.c (endian): Sign-extend 32 bit output values on a 64 bit
	host.
	* m32r/m32r.c (m32r_expand_prologue): Store pretend_size in
	HOST_WIDE_INT temporary before negating it.
	* m32r/m32r.md (movsi_insn+1): Use ~0xffff instead of 0xffff0000.

Thu Dec 10 15:05:59 1998  Dave Brolley  <brolley@cygnus.com>

	* objc/objc-act.c (lang_init_options): Enclose cpplib related code in
	#if USE_CPPLIB.

Thu Dec 10 13:39:46 1998  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* collect2.h: New header file for prototypes.

	* Makefile.in (collect2.o, tlink.o): Depend on collect2.h.

	* collect2.c: Include collect2.h.
	* tlink.c: Likewise.

Wed Dec  9 23:55:11 1998  Jeffrey A Law  (law@cygnus.com)

	* flow.c: Update some comments.

Wed Dec  9 15:29:26 1998  Dave Brolley  <brolley@cygnus.com>

	* objc/objc-act.c (cpp_initialized): Removed.
	(lang_init_options): Initialize cpplib.
	(lang_decode_option): Move initialization of cpplib to
	lang_init_options.
	* c-lang.c (parse_options,parse_in): Added.
	(lang_init_options): Initialized cpplib here.
	* c-decl.c (parse_options,cpp_initialized): Removed.
	(c_decode_option): Move initialization of cpplib to
	lang_init_options.

Wed Dec  9 19:36:57 1998  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* reload1.c (reload_combine, reload_combine_note_store):
	Make STORE_RUID always valid.
	(reload_combine): Check if BASE is clobbered too early.

Wed Dec  9 09:53:58 1998  Nick Clifton  <nickc@cygnus.com>

	* reload.c (find_reloads): Display the insn that cannot be
	reloaded.

Wed Dec  9 12:15:26 1998  Dave Brolley  <brolley@cygnus.com>

	* cccp.c (create_definition): Fix end of buffer logic.

Wed Dec  9 10:15:45 1998  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* except.c (duplicate_eh_handlers, rethrow_symbol_map): Function
	pointer parameters changed to use the PARAMS() macro.

Wed Dec  9 09:12:40 1998  Andrew MacLeod  <amacleod@cygnus.com>

	* except.h (struct handler_info): Add handler_number field.
	* except.c (gen_exception_label): EH labels no longer need to be
	on the permanent obstack.
	(get_new_handler): Set the label number field.
	(output_exception_table_entry): Regenerate handler label reference
	from the label number field.
	(init_eh): Remove a blank line.
	* integrate.c (get_label_from_map): Labels no longer need to be
	on the permanent obstack.

Tue Dec  8 22:04:33 1998  Jim Wilson  <wilson@cygnus.com>

	* i960/i960.h (CONST_COSTS, case CONST_INT): Accept power2_operand
	only when OUTER_CODE is SET.

Tue Dec  8 22:47:15 1998  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* loop.c (strength_reduce): If scan_start points to the loop exit
	test, be wary of subversive use of gotos inside expression statements.
	Don't set maybe_multiple for a backward jump that does not
	include the label under consideration into its range.
	* unroll.c (biv_total_increment): Make use of maybe_multiple field.

Tue Dec  8 22:33:18 1998  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* explow.c (plus_constant_wide): Don't immediately return with
	result of recursive call.

Tue Dec  8 15:32:56 1998  Andrew MacLeod  <amacleod@cygnus.com>

	* eh-common.h (struct eh_context): Add table_index for rethrows.

	* rtl.h (enum reg_note): Add REG_EH_REGION and REG_EH_RETHROW reg notes.
	(SYMBOL_REF_NEED_ADJUST): New flag indicating symbol needs to be
	processed when inlined or unrolled (ie duplicated in some way).

	* rtl.c (reg_note_name): Add strings for new reg_note enums.

	* expr.h (rethrow_libfunc): New library decl.

	* optabs.c (rethrow_libfunc): Initialize.

	* except.h (struct eh_entry): Add new field 'rethrow_label'.
	(new_eh_region_entry): No longer exported from except.c.
	(duplicate_handlers): Renamed to duplicate_eh_handlers and
	different prototype.
	(rethrow_symbol_map, rethrow_used): New exported functions.
	(eh_region_from_symbol): New exported function.

	* except.c (create_rethrow_ref): New function to create a single
	SYMBOL_REF for a rethrow region.
	(push_eh_entry): Initialize a rethrow ref.
	(func_eh_entry): Add a rethrow_label field.
	(new_eh_region_entry): Make static, and initialize the rethrow entry.
	(duplicate_eh_handlers): Create a new region, and remap labels/symbols.
	(eh_region_from_symbol): Find an EH region based on its rethrow symbol.
	(rethrow_symbol_map): Given a label map, maps a rethrow symbol for
	a region into an appropriate new symbol.
	(rethrow_used): Indicate whether a rethrow symbol has been referenced.
	(expand_eh_region_end): Don't issue jump around code for new-exceptions.
	(end_catch_handler): Emit a barrier for new-exceptions since
	control can never drop through the end of a catch block.
	(expand_end_all_catch): new-exceptions never fall through a catch
	block.
	(expand_rethrow): Use __rethrow routine for new exceptions.
	(output_exception_table_entry): Generate rethrow labels, if needed.
	(output_exception_table): Generate start and end rethrow labels.
	(init_eh): Create rethrow symbols for beginning and end of table.
	(scan_region): Don't eliminate EH regions which are the targets of
	rethrows.

	* flow.c (make_edges): Add different edges for rethrow calls,
	identified by having the REG_EH_RETHROW reg label.
	(delete_unreachable_blocks): Don't delete regions markers which are
	the target of a rethrow.

	* integrate.c (save_for_inline_eh_labelmap): New callback routine to
	allow save_for_inline_copying to call duplicate_eh_handlers.
	(save_for_inline_copying): Call duplicate_eh_handlers instead of
	exposing internal details of exception regions.
	(copy_for_inline): Check if SYMBOL_REFs need adjustment.
	(expand_inline_function_eh_labelmap): New callback routine to
	allow expand_inline_function to call duplicate_eh_handlers.
	(expand_inline_function): Call duplicate_eh_handlers instead of
	exposing internal details of exception regions.
	(copy_rtx_and_substitute): Adjust SYMBOL_REFS if SYMBOL_REF_NEED_ADJUST
	flag is set.

	* libgcc2.c (find_exception_handler): Generalize to enable it to
	pick up processing where it left off last time for a rethrow.
	(__unwinding_cleanup): New function. debug hook which is called before
	unwinding when __throw finds there is nothing but cleanups left.
	(throw_helper): Common parts of __throw extracted out for reuse.
	(__throw): Common parts moved to throw_helper.
	(__rethrow): New function for performing rethrows.

Tue Dec  8 13:11:04 1998  Jeffrey A Law  (law@cygnus.com)

	* reload1.c (current_function_decl): Tweak declaration.

Tue Dec  8 10:23:52 1998  Richard Henderson  <rth@cygnus.com>

	* c-decl.c (flag_isoc9x): Default off.
	(c_decode_option): Kill -std=gnu, add -std=gnu89 and -std=gnu9x.
	* cccp.c (print_help, main): Likewise.
	* gcc.c (default_compilers): Update for -std=gnu*.

Tue Dec  8 01:14:46 1998  Jeffrey A Law  (law@cygnus.com)

	* Makefile.in (DEMANGLE_H): Change location to shared demangle.h.
	* demangle.h: Deleted.

	* reload1.c (current_function_decl): Declare.

Tue Dec  8 11:58:51 1998  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* cpplib.c (convert_string): Use `0x00ff', not `0x00ffU'.

Tue Dec  8 09:28:36 1998  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* dbxout.c: If USG is defined use gstab.h, even if HAVE_STAB_H is set.

1998-12-08  Ulrich Drepper  <drepper@cygnus.com>

	* configure.in: Test for availability of putc_unlocked, fputc_unlocked,
	and fputs_unlocked.
	* configure: Rebuilt.
	* system.h: If the *_unlocked functions are available use them
	instead of the locked counterparts by defining macros.
	* config.in: Regenerated.

Tue Dec  8 00:34:05 1998  Mike Stump  <mrs@wrs.com>

	* i386/bsd.h (ASM_FILE_START): Don't use dump_base_name, it is
	wrong and should only be used for dump related things, not
	debugging information, instead main_input_filename should be used.
	Also, reuse output_file_directive if possible.
	* i386/aix386ng.h (ASM_FILE_START): Likewise.
	* i386/isc.h (ASM_FILE_START): Likewise.
	* i386/win-nt.h (ASM_FILE_START): Likewise.
	* i386/sun386.h (ASM_FILE_START): Likewise.

Mon Dec  7 23:56:28 1998  Robert Lipe  <robertl@dgii.com>

	* configure.in (mips*-*-linux*): Handle big and little endian
	systems.
	* configure: Rebuilt.

Mon Dec  7 23:14:51 1998  Mike Stump  <mrs@wrs.com>

	* emit-rtl.c: Fix typo.

Mon Dec  7 23:07:38 1998  Nathan Sidwell  <nathan@acm.org>

	* reload1.c (eliminate_regs): Don't do anything, if we're not
	generating code.

Mon Dec  7 15:27:09 1998  DJ Delorie  <dj@cygnus.com>

	* mips/mips.h (ENCODE_SECTION_INFO): Handle TARGET_EMBEDDED_DATA.
	Add comment.
	* mips/mips.c (mips_select_section): Add comment.

Mon Dec  7 17:55:06 1998  Mike Stump  <mrs@wrs.com>

	* cccp.c (ignore_escape_flag): Add support for \ as `natural'
	characters in file names in #line to be consistent with #include
	handling.  We support escape processing in the # 1 "..." version of
	the command.  See also support in cp/lex.c.
	(handle_directive): Likewise.
	(do_line): Likewise.

1998-12-07  Zack Weinberg  <zack@rabi.phys.columbia.edu>

	* cpplib.c (initialize_char_syntax): Use ISALPHA and ISALNUM
	  so it'll work on non-ASCII platforms.  Always consider $ an
	  identifier character.  Take no arguments.
	  (cpp_reader_init): Call initialize_char_syntax with no
	  arguments.
	  (cpp_start_read): Don't call initialize_char_syntax again.
	  Clear is_idchar['$'] and is_idstart['$'] if not
	  opts->dollars_in_ident.

	* cpplib.h (struct cpp_reader): Replace void *data element by
	  cpp_options *opts.  Rearrange elements to make gdb printout
	  less annoying (put buffer stack at end).
	  (CPP_OPTIONS): Get rid of now-unnecessary cast.

	* cppmain.c: s/data/opts/ when initializing cpp_reader
	  structure.
	* c-decl.c: Likewise.
	* objc/objc-act.c: Likewise.
	* fix-header.c: Likewise.

1998-12-07  Zack Weinberg  <zack@rabi.phys.columbia.edu>

	* cpplib.h (struct cpp_buffer): Replace dir and dlen members
	with a struct file_name_list pointer.
	(struct cpp_reader): Add pointer to chain of `actual
	directory' include searchpath entries.
	(struct file_name_list): Add *alloc pointer for the sake of
	the actual-directory chain.

	Move definition of HOST_WIDE_INT here.
	(cpp_parse_escape): Change prototype to match changes in
	cppexp.c.

	* cppfiles.c (actual_directory): New function.
	(finclude): Use it to initialize the buffer's actual_dir
	entry.
	(find_include_file): We don't need to fix up max_include_len
	here.

	* cpplib.c (do_include): Don't allocate a file_name_list on
	the fly for current directory "" includes, use the one that's
	been preallocated in pfile->buffer->actual_dir.  Hoist out
	duplicate code from the search_start selection logic.
	(cpp_reader_init): Initialize pfile->actual_dirs.

	Remove definition of HOST_WIDE_INT.  Change calls
	to cpp_parse_escape to match changes in cppexp.c (note
	hardcoded MASK, which is safe since this is the source
	character set).

	* cppexp.c: Bring over changes to cpp_parse_escape from cccp.c
	to handle wide character constants in #if directives.  The
	function now returns a HOST_WIDE_INT, and takes a third
	argument which is a binary mask for all legal values (0x00ff
	for 8-bit `char', 0xffff for 16-bit `wchar_t', etc.)  Define
	MAX_CHAR_TYPE_MASK and MAX_WCHAR_TYPE_MASK.  Change callers of
	cpp_parse_escape to match.  [Fixes c-torture/execute/widechar-1.c]

Mon Dec  7 15:38:25 1998  Dave Brolley  <brolley@cygnus.com>

	* gcc.c (default_compilers): Fix typo in USE_CPPLIB spec for cc1.

Mon Dec  7 15:38:25 1998  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* c-aux-info.c (concat): Wrap function definition in !USE_CPPLIB.
	* cppalloc.c: Move function `xcalloc' from cpplib.c to here.
	* cpplib.c: Move function `xcalloc' from here to cppalloc.c.

Mon Dec  7 11:30:49 1998  Nick Clifton  <nickc@cygnus.com>

	* final.c (output_asm_name): Use tabs to separate comments from
	assembly text.

	Include instruction lengths (if defined) in output.

Mon Dec  7 10:53:38 1998  Michael Hayes  <m.hayes@elec.canterbury.ac.nz>

	* loop.c (check_dbra_loop): Fix initial_value and initial_equiv_value
	in the loop_info structure.

Mon Dec  7 11:04:40 1998  Catherine Moore  <clm@cygnus.com>

	* configure.in (arm*-*-ecos-elf): New target.
	* configure: Regenerated.
	* config/arm/elf.h (ASM_WEAKEN_LABEL): Define.
	* config/arm/ecos-elf.h: New file.
	* config/arm/unknown-elf.h (TARGET_VERSION): Check
	for redefinition.

Mon Dec  7 16:15:51 1998  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* sh.c (output_far_jump): Emit braf only for TARGET_SH2.

Sun Dec  6 04:19:45 1998  Jeff Law  (law@cygnus.com)

	* version.c: Bump for snapshot.

Sun Dec  6 05:16:16 1998  Michael Hayes  <m.hayes@elec.canterbury.ac.nz>

	* loop.c (check_dbra_loop): New argument loop_info.  Update fields
	as needed.

Sun Dec  6 03:40:13 1998  Jeff Law  (law@cygnus.com)

	* version.c: Bump for snapshot.

Sun Dec  6 07:49:29 1998  Alexandre Oliva  <oliva@dcc.unicamp.br>

	* gcc.texi (Bug Reporting): 40Kb is a soft limit, larger
	compressed reports are ok and preferred over URLs.

Sun Dec  6 07:45:33 1998  Alexandre Oliva  <oliva@dcc.unicamp.br>

	* invoke.texi (Warning Options): Soften the tone of -pedantic.

Sun Dec  6 00:20:44 1998  H.J. Lu  (hjl@gnu.org)

	* print-rtl.c (print_rtx): Add prototype.

	* unroll.c (iteration_info): Make it static.

Sun Dec  6 01:19:46 1998  Richard Henderson  <rth@cygnus.com>

	* alias.c (memrefs_conflict_p): A second ANDed address
	disables the aligned address optimization.

Sat Dec  5 18:48:25 1998  Richard Henderson  <rth@cygnus.com>

	* alpha.c (alpha_emit_set_const_1): Fix parenthesis error
	in -c << n case.

Sat Dec  5 15:14:52 1998  Jason Merrill  <jason@yorick.cygnus.com>

	* i960.h (BOOL_TYPE_SIZE): Define.

Sun Dec  6 00:28:16 1998  Michael Hayes  <m.hayes@elec.canterbury.ac.nz>

	* config/c4x/c4x.c (valid_parallel_load_store): Flog functionality
	from old valid_parallel_operands_4.
	(valid_parallel_operands_4): Check that operands for 4 operand
	parallel insns are valid, excluding load/store insns.
	* config/c4x/c4x.h (valid_parallel_load_store): Add prototype.
	* config/c4x/c4x.md (*movqf_parallel, *movqi_parallel): Use
	valid_parallel_load_store instead of valid_parallel_operands_4.
	(*absqf2_movqf_clobber, *floatqiqf2_movqf_clobber,
	*negqf2_movqf_clobber, *absqi2_movqi_clobber,
	*fixqfqi2_movqi_clobber, *negqi2_movqi_clobber,
	*notqi_movqi_clobber): Use valid_parallel_operands_4.
	(*subqf3_movqf_clobber, *ashlqi3_movqi_clobber,
	*ashrqi3_movqi_clobber, *lshrqi3_movqi_clobber,
	*subqi3_movqi_clobber): Use valid_parallel_operands_5.

Sat Dec  5 23:52:01 1998  Michael Hayes  <m.hayes@elec.canterbury.ac.nz>

	* config/c4x/c4x.c (iteration_info): Delete extern.

Fri Dec  4 20:15:57 1998  Bernd Schmidt  <crux@pool.informatik.rwth-aachen.de>

	* tm.texi (SMALL_REGISTER_CLASSES): Make description match reality.

	* final.c (cleanup_subreg_operands): Delete some unused code.

	* recog.h (MAX_RECOG_ALTERNATIVES): New macro.
	(struct insn_alternative): New structure definition.
	(recog_op_alt): Declare variable.
	(preprocess_constraints): Declare function.
	* recog.c (recog_op_alt): New variable.
	(extract_insn): Verify number of alternatives is in range.
	(preprocess_constraints): New function.
	* reg-stack.c: Include recog.h.
	(constrain_asm_operands): Delete.
	(get_asm_operand_lengths): Delete.
	(get_asm_operand_n_inputs): New function.
	(record_asm_reg_life): Delete OPERANDS, CONSTRAINTS, N_INPUTS and
	N_OUTPUTS args.  All callers changed.
	Compute number of inputs and outputs here by calling
	get_asm_operand_n_inputs.
	Instead of constrain_asm_operands, call extract_insn,
	constrain_operands and preprocess_constraints.  Use information
	computed by these functions throughout.
	(record_reg_life): Delete code that is unused due to changes in
	record_asm_reg_life.
	(subst_asm_stack_regs): Delete OPERANDS, OPERAND_LOC, CONSTRAINTS,
	N_INPUTS and N_OUTPUTS args.  All callers changed.
	Similar changes as in record_asm_reg_life.
	(subst_stack_regs): Move n_operands declaration into the if statement
	where it's used.
	Delete code that is unused due to changes in subst_asm_stack_regs.
	* stmt.c (expand_asm_operands): Verify number of alternatives is in
	range.
	* Makefile.in (reg-stack.o): Depend on recog.h.

Fri Dec  4 02:23:24 1998  Jeffrey A Law  (law@cygnus.com)

	* except.c (set_exception_version_code): Argument is an "int".

Fri Dec  4 01:29:28 1998  Jeffrey A Law  (law@cygnus.com)

	* configure.in (hppa2*-*-*): Handle like hppa1.1-*-* for now.
	* configure: Rebuilt.

Fri Dec  4 01:29:28 1998  Robert Lipe  <robertl@dgii.com>

	* configure.in (mipsel-*-linux*): New target.
	* mips/linux.h: New file, based on other Linux targets.

Thu Dec  3 11:19:50 1998  Mike Stump  <mrs@wrs.com>

	* gthr-vxworks.h (__ehdtor): Fix memory leak.  The delete hook
	runs in the context of the deleter, not the deletee, so we must
	use taskVarGet to find the correct memory to free.
	(__gthread_key_create): Initialize the task
	variable subsystem so that the task variable is still active when
	the delete hook is run.

1998-12-03  Joseph S. Myers  <jsm28@cam.ac.uk>

	* pdp11.h: Use optimize_size for space optimizations.
	* pdp11.c: Likewise.
	* pdp11.md: Likewise.

	* pdp11.h (TARGET_40_PLUS): Fix typo.

Thu Dec  3 11:48:32 1998  Jeffrey A Law  (law@cygnus.com)

	* local-alloc.c (block_alloc): Slightly retune heuristic to widen
	qty lifetimes.

Thu Dec  3 22:30:18 1998  Michael Hayes  <m.hayes@elec.canterbury.ac.nz>

	* alias.c (addr_side_effect_eval): New function.
	(memrefs_conflict_p): Use it.
	* rtl.h (addr_side_effect_eval): Prototype it.

1998-12-02  Joseph S. Myers  <jsm28@cam.ac.uk>

	* pdp11.md (extendsfdf2): Fix mode mismatch in SET.

Wed Dec  2 11:23:07 1998  Jim Wilson  <wilson@cygnus.com>

	* reload.c (find_reloads): When force const to memory, put result
	in substed_operand not *recog_operand_loc.

1998-12-02  Ulrich Drepper  <drepper@cygnus.com>

	* c-lex.c: Fix indentation from last patch.
	Remove trailing whitespace.
	* real.c: Likewise.

Wed Dec  2 10:11:12 1998  Jeffrey A Law  (law@cygnus.com)

	* flow.c (delete_block): Call set_last_insn after we have reset
	NEXT_INSN (kept_tail).

Wed Dec  2 00:47:31 1998  Jeffrey A Law  (law@cygnus.com)

	* mips.md (trap_if): Use "$0" for the value zero.

Tue Dec  1 20:49:49 1998  Ulrich Drepper  <drepper@cygnus.com>
			  Stephen L Moshier  <moshier@world.std.com>
			  Richard Henderson  <rth@cygnus.com>

	* c-common.c (declare_function_name): Declare predefined variable
	`__func__'.

	* c-decl.c (flag_isoc9x): Set to 1 by default.
	(c_decode_option): Handle -std= option.  Remove -flang-isoc9x.
	(grokdeclarator): Always emit warning about implicit int for ISO C 9x.

	* c-parse.in: Allow constructors in ISO C 9x.
	Rewrite designator list handling.
	Allow [*] parameters.
	Don't warn about comma at end of enum definition for ISO C 9x.

	* cccp.c (c9x): New variable.
	(rest_extension): New variable.
	(print_help): Document new -std= option.
	(main): Recognize -std= option.  Set c9x appropriately.
	(create_definition): Recognize ISO C 9x vararg macros.

	* gcc.c (default_compilers): Adjust specs for -std options.
	(option_map): Add --std.
	(display_help): Document -std.

	* toplev.c (documented_lang_options): Add -std and remove
	-flang-isoc9x.

	* c-lex.c (yylex): Recognize hex FP constants and call REAL_VALUE_ATOF
	or REAL_VALUE_HTOF based on base of the constants.
	* fold-const.c (real_hex_to_f): New function.  Replacement function
	for hex FP conversion if REAL_ARITHMETIC is not defined.
	* real.c (asctoeg): Add handling of hex FP constants.
	* real.h: Define REAL_VALUE_HTOF if necessary using ereal_atof or
	real_hex_to_f.

Tue Dec  1 16:45:49 1998  Stan Cox  <scox@cygnus.com>

	* mips.md (divmodsi4*, divmoddi4*, udivmodsi4*, udivmoddi4): Add
	-mcheck-range-division/-mcheck-zero-division checking.  Avoid as macro
	expansion.  Use hi/lo as destination register.
	(div_trap): New.
	(divsi3*, divdi3*, modsi3*, moddi3*, udivsi3*, udivdi3*, umodsi3*,
	umoddi3*): Add -mcheck-range-division/-mcheck-zero-division checking.
	Avoid as macro expansion.  Use hi/lo as destination register.

	* mips.h (MASK_CHECK_RANGE_DIV): New.
	(MASK_NO_CHECK_ZERO_DIV): New.
	(ELIMINABLE_REGS): Added GP_REG_FIRST + 31.
	(CAN_ELIMINATE, INITIAL_ELIMINATION_OFFSET): Allow for getting
	return address for leaf functions out of r31 to support
	builtin_return_address.

Tue Dec  1 15:03:30 1998  Herman A.J. ten Brugge  <Haj.Ten.Brugge@net.HCC.nl>

	* jump.c (jump_optimize): Call regs_set_between_p with PREV_INSN(x),
	NEXT_INSN(x) to check insn x.

Tue Dec  1 15:20:44 1998  Jeffrey A Law  (law@cygnus.com)

	* flow.c (delete_block): Call set_last_insn if we end up deleting the
	last insn in the rtl chain.

	* reload1.c (reload): Do not set reload_completed or split insns
	here.  Instead...
	* toplev.c (rest_of_compilation): Set reload_completed after
	reload returns.  Split insns after reload_cse has run.

Tue Dec  1 11:55:04 1998  Richard Henderson  <rth@cygnus.com>

	* final.c (final_scan_insn): Abort if block_depth falls below 0.

Tue Dec  1 10:23:16 1998  Nick Clifton  <nickc@cygnus.com>

	* config/arm/t-arm-elf (LIBGCC2_CFLAGS): Define inhibit_libc.

Tue Dec  1 10:22:18 1998  Nick Clifton  <nickc@cygnus.com>

	* config/arm/unknown-elf.h (ASM_OUTPUT_DWARF2_ADDR_CONST): Remove
	use of user-label_prefix.

Tue Dec  1 17:58:26 1998  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* reload1.c (emit_reload_insns): Clear spill_reg_store
	when doing a new non-inherited reload from the same pseudo.

	* local-alloc.c (function_invariant_p): New function.
	(update_equiv_regs): Use function_invariant_p instead of CONSTANT_P
	to decide if an equivalence should be recorded.
	* reload1.c (num_eliminable_invariants): New static variable.
	(reload): Set it.  Use function_invariant_p instead of CONSTANT_P
	to decide if an equivalence should be recorded.
	Unshare PLUS.
	(calculate_needs_all_insns): Skip insns that only set an equivalence.
	Take num_eliminable_invariants into account when deciding
	if register elimination should be done.
	(reload_as_needed): Take num_eliminable_invariants into account
	when deciding if register elimination should be done.
	(eliminate_regs): Handle non-constant reg_equiv_constant.
	* rtl.h (function_invariant_p): Declare.

Mon Nov 30 02:00:08 1998  Jeff Law  (law@cygnus.com)

	* version.c: Bump for snapshot.

Mon Nov 30 00:42:59 1998  Jeff Law  (law@cygnus.com)

	* version.c: Bump for snapshot.

Sun Nov 29 22:59:40 1998  Jason Merrill  <jason@yorick.cygnus.com>

	* except.c (add_new_handler): Complain about additional handlers
	after one that catches everything.

Sat Nov 28 10:56:32 1998  Jeffrey A Law  (law@cygnus.com)

	* configure.in (alpha*-*-netbsd): Fix typo.
	* configure: Rebuilt.

Fri Nov 27 12:28:56 1998  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* system.h: Include libiberty.h.

	* c-aux-info.c: Remove prototypes for concat/concat3.  Change
	function `concat' from fixed parameters to variable parameters,
	as is done in libiberty.  All callers of concat/concat3
	changed to use the new `concat' with variable args.

	* cccp.c: Remove things made redundant by libiberty.h and/or
	conform to libiberty standards.
	* cexp.y: Likewise.
	* collect2.c: Likewise.
	* config/1750a/1750a.h: Likewise.
	* cppalloc.c: Likewise.
	* cppexp.c: Likewise.
	* cppfiles.c: Likewise.
	* cpphash.c: Likewise.
	* cpplib.c: Likewise.
	* dyn-string.c: Likewise.
	* fix-header.c: Likewise.
	* gcc.c: Likewise.
	* gcov.c: Likewise.
	* genattr.c: Likewise.
	* genattrtab.c: Likewise.
	* gencheck.c: Likewise.
	* gencodes.c: Likewise.
	* genconfig.c: Likewise.
	* genemit.c: Likewise.
	* genextract.c: Likewise.
	* genflags.c: Likewise.
	* gengenrtl.c: Likewise.
	* genopinit.c: Likewise.
	* genoutput.c: Likewise.
	* genpeep.c: Likewise.
	* genrecog.c: Likewise.
	* getpwd.c: Likewise.
	* halfpic.c: Likewise.
	* hash.c: Likewise.
	* mips-tdump.c: Likewise.  Wrap malloc/realloc/calloc prototypes
	in NEED_DECLARATION_* macros.

	* mips-tfile.c: Remove things made redundant by libiberty.h and/or
	conform to libiberty standards.
	(fatal): Fix const-ification of variable `format' in
	!ANSI_PROTOTYPES case.

	* prefix.c: Remove things made redundant by libiberty.h and/or
	conform to libiberty standards.

	* print-rtl.c: Rename variable `spaces' to `xspaces' to avoid
	conflicting with function `spaces' from libiberty.

	* profile.c: Remove things made redundant by libiberty.h and/or
	conform to libiberty standards.
	* protoize.c: Likewise.
	* rtl.h: Likewise.
	* scan.h: Likewise.
	* tlink.c: Likewise.
	* toplev.c: Likewise.
	* toplev.h: Likewise.
	* tree.h: Likewise.

Thu Nov 26 08:38:06 1998  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* cppfiles.c (simplify_pathname): Un-ANSI-fy function definition.

Thu Nov 26 23:45:37 1998  Michael Hayes  <m.hayes@elec.canterbury.ac.nz>

	* README.C4X: Updated URLs.
	* config/c4x/c4x.c (c4x_address_conflict): Fix typo.
	(valid_parallel_operands_5): Remove unused variable.

Thu Nov 26 23:40:03 1998  Michael Hayes  <m.hayes@elec.canterbury.ac.nz>

	* config/c4x/c4x.h (TARGET_DEFAULT): Fix typo.

1998-11-26  Manfred Hollstein  <manfred@s-direktnet.de>

	* Makefile.in (CONFIG_LANGUAGES): New macro taking all languages
	which can be configured.
	(LANGUAGES): Use $(CONFIG_LANGUAGES) instead of @all_languages@
	(Makefile): Pass actual LANGUAGES through the environment when
	re-configuring.
	(cstamp-h): Likewise.
	(config.status): Likewise.

	* configure.in (enable_languages): Add new configuration parameter
	"--enable-languages=lang1,lang2,...".
	(${srcdir}/*/config-lang.in): Change handling to configure only
	those directories, that the user might have enabled; default to
	"all" existing languages.
	* configure: Regenerate.

Thu Nov 26 00:19:19 1998  Richard Henderson  <rth@cygnus.com>

	* rtlanal.c (regs_set_between_p): New function.
	* rtl.h (regs_set_between_p): Prototype it.
	* jump.c (jump_optimize): Use it instead of modified_between_p
	in the Sep 2 change.

Wed Nov 25 23:32:02 1998  Ian Dall  <Ian.Dall@dsto.defence.gov.au>
			  Matthias Pfaller  <leo@dachau.marco.de>

	* invoke.texi (Option Summary, NS32K Options): Add description
	of NS32K specific options.

	* ns32k.md (tstdf, cmpdf, movdf, truncdfsf2, fixdfqi2, fixdfhi2,
	fixdfsi2, fixunsdfqi2, fixunsdfhi2, fixunsdfsi2, fix_truncdfqi2,
	fix_truncdfhi2, fix_truncdfsi2, adddf3, subdf3, muldf3, divdf3,
	negdf2, absdf2): Use l instead of f since the double class and
	float class are no longer the same.
	(cmpsi, truncsiqi2, truncsihi2, addsi3, subsi3, mulsi3, umulsidi3,
	divsi3, modsi3, andsi3, iorsi3, xorsi3, negsi2, one_cmplsi2,
	ashlsi3, ashlhi3, ashlqi3, rotlsi3, rotlhi3, rotlqi3, abssi2,...):
	Use "g" instead of "rmn" since LEGITIMATE_PIC_OPERAND has been
	fixed.
	(cmpsi, cmphi, cmpqi): Use general_operand instead of
	non_immediate_operand. Removes erroneous assumption that can't
	compare constants.
	(movsf, movsi, movhi, movqi,...): New register numbering scheme.
	(movsi, addsi3): Use NS32K_DISPLACEMENT_P instead of hard coded
	constants.
	(movstrsi, movstrsi1, movstrsi2): Completely new block move
	scheme.
	(...): Patterns to exploit multiply-add instructions.
	(udivmodsi4, udivmodsi_internal4, udivmodhi4,
	udivmoddihi4_internal, udivmodqi4, udivmoddiqi4_internal): New
	patterns to exploit extended divide insns.
	(udivsi3, udivhi3, udivqi3): Remove since superseded by udivmodsi
	etc patterns.

	* ns32k.h (FUNCTION_VALUE, LIBCALL_VALUE): Use f0 for complex
	float return values as well as simple scalar floats.
	(TARGET_32381, TARGET_MULT_ADD, TARGET_SWITCHES):
	Support new flag to denote 32381 fpu.
	(OVERRIDE_OPTIONS): 32381 is a strict superset of 32081.
	(CONDITIONAL_REGISTER_USAGE): Disable extra 32381 registers if not
	compiling for 32381.
	(FIRST_PSEUDO_REGISTER, FIXED_REGISTERS, CALL_USED_REGISTERS,
	REGISTER_NAMES, ADDITIONAL_REGISTER_NAMES, OUTPUT_REGISTER_NAMES,
	REG_ALLOC_ORDER, DBX_REGISTER_NUMBER, R0_REGNUM, F0_REGNUM,
	L1_REGNUM, STACK_POINTER_REGNUM, FRAME_POINTER_REGNUM,
	LONG_FP_REGS_P, ARG_POINTER_REGNUM, reg_class, REG_CLASS_NAMES,
	REG_CLASS_CONTENTS, SUBSET_P,REGNO_REG_CLASS,
	REG_CLASS_FROM_LETTER, FUNCTION_PROLOGUE, FUNCTION_EPILOGUE,
	REGNO_OK_FOR_INDEX_P, FP_REG_P, REG_OK_FOR_INDEX_P,
	REG_OK_FOR_BASE_P, MEM_REG): New register scheme to include 32381
	fpu registers and special register classes for new 32381
	instructions dotf and polyf.
	(MODES_TIEABLE_P): Allow all integer modes, notably DI and SI, to
	be tieable.
	(INCOMING_RETURN_ADDR_RTX, RETURN_ADDR_RTX,
	INCOMING_FRAME_SP_OFFSET): New macros in case DWARF support is
	required.
	(SMALL_REGISTER_CLASSES): Make dependent on -mmult-add option.
	(MOVE_RATIO): Set to zero because of smart movstrsi implementation.
	(REGISTER_MOVE_COST): Move code to register_move_cost function for
	ease of coding and debugging.
	(CLASS_LIKELY_SPILLED_P): Under new register scheme class
	LONG_FLOAT_REGO is likely spilled but not caught by default
	definition.
	(CONSTANT_ADDRESS_P, CONSTANT_ADDRESS_NO_LABEL_P): Use macro
	instead of hard coded numbers in range check.
	(ASM_OUTPUT_LABELREF_AS_INT): Delete since unused.
	(...): Add prototypes for functions in ns32k.c but disable because
	of problems when ns32k.h is included in machine independent files.

	* ns32k.c: Include "system.h", "tree.h", "expr.h", "flags.h".
	(ns32k_reg_class_contents, regcass_map, ns32k_out_reg_names,
	hard_regno_mode_ok, secondary_reload_class,
	print_operand, print_operand_address): New register scheme to
	include 32381 fpu registers and special register classes for new
	32381 instructions dotf and polyf.
	(gen_indexed_expr): Make static to keep namespace clean.
	(check_reg): Remove since never called.
	(move_tail, expand_block_move): Helper functions for "movstrsi"
	block move insn.
	(register_move_cost): Helper function for REGISTER_MOVE_COST macro.
	Increase cost of moves which go via memory.
	* netbsd.h (TARGET_DEFAULT): Set (new) 32381 fpu flag.
	(CPP_PREDEFINES): No longer predefine "unix".

	* ns32k.md (movsi, movsi, adddi3, subdi3, subsi3, subhi3, subqi3,...):
	Remove erroneous %$. print_operand() can work out from the rtx is
	an immediate prefix is required.

	* ns32k.h (RETURN_POPS_ARGS, VALID_MACHINE_DECL_ATTRIBUTE,
	VALID_MACHINE_TYPE_ATTRIBUTE, COMP_TYPE_ATTRIBUTES,
	SET_DEFAULT_TYPE_ATTRIBUTES): Support for -mrtd calling
	convention.
	(LEGITIMATE_PIC_OPERAND_P, SYMBOLIC_CONST): Correct handling of
	pic operands.

	* ns32k.c (symbolic_reference_mentioned_p, print_operand):
	Correct handling of pic operands.
	(ns32k_valid_decl_attribute_p, ns32k_valid_type_attribute_p,
	ns32k_comp_type_attributes, ns32k_return_pops_args): Support for
	-mrtd calling convention.

Wed Nov 25 23:42:20 1998  Tom Tromey  <tromey@cygnus.com>

	* gcc.c (option_map): Recognize --output-class-directory.

Thu Nov 26 18:26:21 1998  Michael Hayes  <m.hayes@elec.canterbury.ac.nz>

	* loop.h (precondition_loop_p): Added new mode argument.
	* unroll.c (precondition_loop_p): Likewise.
	(approx_final_value): Function deleted and subsumed
	into loop_iterations.
	(loop_find_equiv_value): New function.
	(loop_iterations): Use loop_find_equiv_value to find increments
	too large to be immediate constants.  Also use it to find terms
	common to initial and final iteration values that can be removed.

Thu Nov 26 18:05:04 1998  Michael Hayes  <m.hayes@elec.canterbury.ac.nz>

	* loop.h (struct loop_info): Define new structure.
	(precondition_loop_p): Added prototype.
	(unroll_loop): Added new argument loop_info to prototype.
	(final_biv_value, final_giv_value): Added new argument n_iterations
	to prototype.
	* loop.c (strength_reduce): Declare new structure loop_iteration_info
	and new pointer loop_info.
	(loop_n_iterations): Replace global variable by element in
	loop_info structure.
	(check_final_value): New argument n_iterations.
	(insert_bct): New argument loop_info.
	(loop_unroll_factor): Replace global array by element in
	loop_info structure.
	(loop_optimize): Remove code to allocate and initialize
	loop_unroll_factor_array.
	* unroll.c (precondition_loop_p): No longer static since
	used by branch on count optimization.
	(precondition_loop_p, unroll_loop): New argument loop_info.
	(final_biv_value, final_giv_value, find_splittable_regs): New
	argument n_iterations.
	(loop_iteration_var, loop_initial_value, loop_increment,
	loop_final_value, loop_comparison_code, loop_unroll_factor):
	Replaced global variables by loop_info structure.
	(loop_unroll_factor): Replace global array by element in
	loop_info structure.

Thu Nov 26 17:49:29 1998  Michael Hayes  <m.hayes@elec.canterbury.ac.nz>

	* loop.c (check_dbra_loop): Update JUMP_LABEL field of jump insn
	when loop reversed.

	* unroll.c (precondition_loop_p): Return loop_initial_value
	for initial_value instead of loop_iteration_var.

Thu Nov 26 17:15:38 1998  Michael Hayes  <m.hayes@elec.canterbury.ac.nz>

	* config/c4x/c4x.md: Fix minor formatting problems.  Update docs.
	(*b, *b_rev, *b_noov, *b_noov_rev, *db,
	decrement_and_branch_until_zero, rptb_end): Use c4x_output_cbranch
	to output the instruction sequences.
	(rpts): Delete.
	(rptb_top): Provide alternatives to use any register or memory
	for loop counter.
	(rptb_end): Emit use of operands rather than assigning them
	explicitly to the RS and RE registers.

Thu Nov 26 16:37:59 1998  Michael Hayes  <m.hayes@elec.canterbury.ac.nz>

	* config/c4x/c4x.c (c4x_modified_between_p, c4x_mem_set_p,
	c4x_mem_set_p, c4x_mem_modified_between_p, c4x_insn_moveable_p,
	c4x_parallel_pack, c4x_parallel_find, c4x_update_info_reg,
	c4x_update_info_regs, c4x_copy_insn_after, c4x_copy_insns_after,
	c4x_merge_notes, c4x_parallel_process,
	c4x_combine_parallel_independent, c4x_combine_parallel_dependent,
	c4x_combine_parallel): Delete.

Thu Nov 26 15:16:05 1998  Michael Hayes  <m.hayes@elec.canterbury.ac.nz>

	* config/c4x/c4x.c (c4x_override_options): For compatibility
	with old target options clear flag_branch_on_count_reg if
	-mno-rptb specified and set flag_argument_alias is -mno-aliases
	specified.
	(c4x_output_cbranch): Handle a sequence of insns rather than a
	single insn.
	(c4x_rptb_insert): Do not emit a RPTB insn if the RC register
	has not been allocated as the loop counter.
	(c4x_address_conflict): Do not allow two volatile memory references.
	(valid_parallel_operands_4, valid_parallel_operands_5,
	valid_parallel_operands_6): Reject pattern if the register destination
	of the first set is used as part of an address in the second set.

Thu Nov 26 14:56:32 1998  Michael Hayes  <m.hayes@elec.canterbury.ac.nz>

	* config/c4x/c4x.h (TARGET_DEFAULT): Add PARALEL_MPY_FLAG.
	(TARGET_SMALL_REG_CLASS): Set to 0 so that SMALL_REGISTER_CLASSES
	is no longer enabled if PARALLEL_MPY_FLAG set.
	(HARD_REGNO_CALL_CLOBBERED): Add parentheses to remove ambiguity.
	(REG_CLASS_CONTENTS): Add braces around initializers.
	(HAVE_MULTIPLE_PACK): Define.
	(ASM_OUTPUT_BYTE_FLOAT): Use %lf format specifier with
	REAL_VALUE_TO_DECIMAL.
	(ASM_OUTPUT_SHORT_FLOAT): Use %lf format specifier with
	REAL_VALUE_TO_DECIMAL.
	(ar0_reg_operand): Add prototype.
	(ar0_mem_operand): Likewise.
	(ar1_reg_operand): Likewise.
	(ar1_mem_operand): Likewise.
	(ar2_reg_operand): Likewise.
	(ar2_mem_operand): Likewise.
	(ar3_reg_operand): Likewise.
	(ar3_mem_operand): Likewise.
	(ar4_reg_operand): Likewise.
	(ar4_mem_operand): Likewise.
	(ar5_reg_operand): Likewise.
	(ar5_mem_operand): Likewise.
	(ar6_reg_operand): Likewise.
	(ar6_mem_operand): Likewise.
	(ar7_reg_operand): Likewise.
	(ar7_mem_operand): Likewise.
	(ir0_reg_operand): Likewise.
	(ir0_mem_operand): Likewise.
	(ir1_reg_operand): Likewise.
	(ir1_mem_operand): Likewise.
	(group1_reg_operand): Likewise.
	(group1_mem_operand): Likewise.
	(ir1_reg_operand): Likewise.
	(arx_reg_operand): Likewise.
	(not_rc_reg): Likewise.
	(not_modify_reg): Likewise.
	(c4x_group1_reg_operand): Remove prototype.
	(c4x_group1_mem_operand): Likewise.
	(c4x_arx_reg_operand): Likewise.

Wed Nov 25 19:02:55 1998  (Stephen L Moshier)  <moshier@world.std.com>

	* emit-rtl.c (gen_lowpart_common): Remove earlier change.
	* real.c (make_nan): Make SIGN arg actually specify the sign bit.

Thu Nov 26 14:12:05 1998  Michael Hayes  <m.hayes@elec.canterbury.ac.nz>

	* config/c4x/c4x.md (addqi3): Emit addqi3_noclobber pattern
	during reload.

Wed Nov 25 22:05:28 1998  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* config/sh/lib1funcs.asm (___udivsi3_i4): Don't switch to sz == 1
	unless FMOVD_WORKS is defined.

Wed Nov 25 20:11:04 1998  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* regclass.c (init_reg_sets): Move code that calculates tables
	dependent on reg_class_contents from here...
	(init_reg_sets_1): To here.

Wed Nov 25 14:54:46 1998  Zack Weinberg  <zack@rabi.phys.columbia.edu>

	* cpplib.h: Delete struct import_file.  Add ihash element to
	struct cpp_buffer.  Delete dont_repeat_files and
	import_hash_table elements from cpp_reader; change
	all_include_files to a hash table.  Delete all foobar_include
	/ last_foobar_include elements from struct cpp_options; put
	back four such: quote_include, bracket_include,
	system_include, after_include.  Redo struct file_name_list
	completely.  Add new structure type include_hash.  Add
	prototypes for merge_include_chains and include_hash.  Change
	prototypes for finclude, find_include_file, and
	append_include_chain to match changes below.

	* cppfiles.c (simplify_pathname, include_hash,
	remap_filename, merge_include_chains): New functions.
	(add_import, lookup_import, open_include_file): Removed.
	(INO_T_EQ): Define this (copied from cccp.c).
	(hack_vms_include_specification): Remove all calls and #if 0
	out the definition.  It was being called incorrectly and at
	the wrong times.  Until a VMSie can look at this, it's better
	to not pretend to support it.
	(append_include_chain): Change calling convention; now takes
	only one directory at a time, and sets up the data structure
	itself.
	(redundant_include_p): Rewritten - this is now used for all
	include redundancy, whether by #ifndef, #import, or #pragma
	once.  Looks up things in the include hash table.
	(file_cleanup): Decrement pfile->system_include_depth here if
	it's >0.
	(find_include_file): Calling convention changed; now passes
	around a struct include_hash instead of 3 separate parameters.
	Guts ripped out and replaced with new include_hash mechanism.
	(finclude): Calling convention changed as for
	find_include_file.  Error exits pulled out-of-line.  Reformat.
	(safe_read): Return a long, not an int.
	(deps_output): Don't recurse.

	* cpplib.c (is_system_include): Deleted.
	(path_include): Fix up call to append_include_chain.
	(do_include): Fix up calls to find_include_file and finclude.
	Clean up dependency output a bit.  Shorten obnoxiously lengthy
	#import warning message.  Don't decrement
	pfile->system_include_depth here.
	(do_pragma): Understand the include_hash structure.  Reformat.
	(do_endif): Correct handling of control macros.  Understand
	the include_hash.
	(cpp_start_read): Fix up calls to finclude.  Call
	merge_include_chains.
	(cpp_handle_option): Fix up calls to append_include_chain.
	Understand the four partial include chains.
	(cpp_finish): Add debugging code (#if 0-ed out) for the
	include_hash.
	(cpp_cleanup): Free the include_hash, not the import hash and
	the all_include and dont_repeat lists which no longer exist.

Wed Nov 25 11:26:19 1998  Jeffrey A Law  (law@cygnus.com)

	* toplev.c (no_new_pseudos): Define.
	(rest_of_compilation): Set no_new_pseudos as needed.
	* emit-rtl.c (gen_reg_rtx): Abort if we try to create a new pseudo
	if no_new_pseudos is set.
	* rtl.h (no_new_pseudos): Declare it.
	* reload1.c (reload): Update comments.
	* md.texi: Corresponding changes.

Wed Nov 25 11:26:17 1998  Bernd Schmidt  <crux@pool.informatik.rwth-aachen.de>

	* reload1.c (reg_used_in_insn): Renamed from reg_used_by_pseudo.
	(choose_reload_regs): Rename it here as well.  When computing it,
	also merge in used hardregs.

1998-11-25  Zack Weinberg  <zack@rabi.phys.columbia.edu>

	* gcc.c: Split out Objective-C specs to...
	* objc/lang-specs.h: here. (New file.) Make the specs cpplib
	aware.

	* c-lex.c (init_parse): Always initialize the filename global.
	* objc/objc-act.c (lang_init): Always call check_newline at
	beginning of file.

Wed Nov 25 00:48:29 1998  Graham  <grahams@rcp.co.uk>

	* reload1.c (reload): Remove unused variable.
	(reload_reg_free_for_value_p): Add missing parameter definition.

	* jump.c (jump_optimize): Remove unused variable.

Wed Nov 25 00:07:11 1998  Jeffrey A Law  (law@cygnus.com)

	* Makefile.in (graph.o): Depend on $(RTL_H), not rtl.h.

	* cse.c (fold_rtx): Make autoincrement addressing mode tests be
	runtime selectable.
	* expr.c (move_by_pieces): Similarly.
	(move_by_pieces_1, clear_by_pieces, clear_by_pieces_1): Similarly.
	* flow.c (find_auto_inc): Similarly.
	(try_pre_increment): Similarly.
	* loop.c (strength_reduce): Similarly.
	* regclass.c (auto_inc_dec_reg_p): Similarly.
	* regmove.c (try_auto_increment): Similarly.
	(fixup_match_1): Similarly.
	* rtl.h (HAVE_PRE_INCREMENT): Define if not already defined.
	(HAVE_PRE_DECREMENT): Similarly.
	(HAVE_POST_INCREMENT, HAVE_POST_DECREMENT): Similarly.
	* Corresponding changes to all target header files.
	* tm.texi: Update docs for autoinc addressing modes.

Tue Nov 24 20:24:59 1998  Jim Wilson  <wilson@cygnus.com>

	* configure.in (m68020-*-elf*, m68k-*-elf*): New targets.
	* configure: Rebuild.
	* config/elfos.h: New file.
	* config/m68k/m68020-elf.h, config/m68k/m68kelf.h,
	config/m68k/t-m68kelf: New file.

Tue Nov 24 13:40:06 1998  Jeffrey A Law  (law@cygnus.com)

	* Makefile.in (HOST_AR): Define.
	(HOST_AR_FLAGS, HOST_RANLIB, HOST_RANLIB_TEST): Similarly.
	(libcpp.a): Use the host tools explicitly.
	(STAGESTUFF): Add libcpp.a.

Tue Nov 24 09:33:49 1998  Nick Clifton  <nickc@cygnus.com>

	* config/m32r/m32r.md (movstrsi_internal): Describe changes made
	to source and destination registers.

Mon Nov 23 20:28:02 1998  Mike Stump  <mrs@wrs.com>

	* libgcc2.c (top_elt): Remove top_elt, it isn't thread safe.
	The strategy we now use is to pre allocate the top_elt along
	with the EH context so that each thread has its own top_elt.
	This is necessary as the dynamic cleanup chain is used on the
	top element of the stack and each thread MUST have its own.
	(eh_context_static): Likewise.
	(new_eh_context): Likewise.
	(__sjthrow): Likewise.

Mon Nov 23 20:25:03 1998  Jason Merrill  <jason@yorick.cygnus.com>

	* i386/linux.h (ASM_OUTPUT_MAX_SKIP_ALIGN): Wrap in do...while.
	* i386.md (prologue_get_pc): Remove unused variable.

Mon Nov 23 17:05:40 1998  Geoffrey Noer  <noer@cygnus.com>

	* i386/xm-cygwin.h: Rename cygwin_ path funcs back to cygwin32_.

Mon Nov 23 16:40:00 1998  Ulrich Drepper  <drepper@cygnus.com>

	* Makefile.in (OBJS): Add graph.o.
	(graph.o): New dependency list.
	* flags.h: Declare dump_for_graph and define graph_dump_types type.
	* print-rtl.c (dump_for_graph): Define new variable.
	(print_rtx): Rewrite to allow use in graph dumping functions.
	* toplev.c: Declare print_rtl_graph_with_bb, clean_graph_dump_file,
	finish_graph_dump_file.
	Define graph_dump_format.
	(compile_file): If graph dumping is enabled also clear these files.
	Finish graph dump files.
	(rest_of_compilation): Also dump graph information if enabled.
	(main): Recognize -dv to enabled VCG based graph dumping.
	* graph.c: New file.  Graph dumping functions.

Mon Nov 23 16:39:04 1998  Richard Henderson  <rth@cygnus.com>

	* configure.in: Look for <sys/stat.h>.
	* system.h: Include it before substitute S_ISREG definitions.

Mon Nov 23 17:40:37 1998  Gavin Romig-Koch  <gavin@cygnus.com>

	* config/mips/abi.h: Use ABI_O64, duplicating ABI_32 usage.
	* config/mips/iris6.h: Same.
	* config/mips/mips.md: Same.
	* config/mips/mips.c: Same; also add "-mabi=o64" option.
	* config/mips/mips.h: Same; also define ABI_O64.

Mon Nov 23 17:02:27 1998  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	*  configure.in: Use AC_PREREQ(2.12.1).

Mon Nov 23 10:16:38 1998  Melissa O'Neill  <oneill@cs.sfu.ca>

	* cccp.c (S_ISREG, S_ISDIR): Delete defines.
	* cpplib.c, gcc.c: Likewise.
	* system.h (S_ISREG, S_ISDIR): Define if not already defined.

Mon Nov 23 09:53:44 1998  Richard Henderson  <rth@cygnus.com>

	* local-alloc.c (local_alloc): Use malloc not alloca for
	reg_qty, reg_offset, ref_next_in_qty.

Mon Nov 23 16:46:46 1998  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* caller-save.c (insert_one_insn): Initialize the live_before and
	live_after register sets.

	Add SH4 support:

	* config/sh/lib1funcs.asm (___movstr_i4_even, ___movstr_i4_odd): Define.
	(___movstrSI12_i4, ___sdivsi3_i4, ___udivsi3_i4): Define.
	* sh.c (reg_class_from_letter, regno_reg_class): Add DF_REGS.
	(fp_reg_names, assembler_dialect): New variables.
	(print_operand_address): Handle SUBREGs.
	(print_operand): Added 'o' case.
	Don't use adj_offsettable_operand on PRE_DEC / POST_INC.
	Name of FP registers depends on mode.
	(expand_block_move): Emit different code for SH4 hardware.
	(prepare_scc_operands): Use emit_sf_insn / emit_df_insn as appropriate.
	(from_compare): Likewise.
	(add_constant): New argument last_value.  Changed all callers.
	(find_barrier): Don't try HImode load for FPUL_REG.
	(machine_dependent_reorg): Likewise.
	(sfunc_uses_reg): A CLOBBER cannot be the address register use.
	(gen_far_branch): Emit a barrier after the new jump.
	(barrier_align): Don't trust instruction lengths before
	fixing up pcloads.
	(machine_dependent_reorg): Add support for FIRST_XD_REG .. LAST_XD_REG.
	Use auto-inc addressing for fp registers if doubles need to
	be loaded in two steps.
	Set sh_flag_remove_dead_before_cse.
	(push): Support for TARGET_FMOVD.  Use gen_push_fpul for fpul.
	(pop): Support for TARGET_FMOVD.  Use gen_pop_fpul for fpul.
	(calc_live_regs): Support for TARGET_FMOVD.  Don't save FPSCR.
	Support for FIRST_XD_REG .. LAST_XD_REG.
	(sh_expand_prologue): Support for FIRST_XD_REG .. LAST_XD_REG.
	(sh_expand_epilogue): Likewise.
	(sh_builtin_saveregs): Use DFmode moves for fp regs on SH4.
	(initial_elimination_offset): Take TARGET_ALIGN_DOUBLE into account.
	(arith_reg_operand): FPUL_REG is OK for SH4.
	(fp_arith_reg_operand, fp_extended_operand): New functions.
	(tertiary_reload_operand, fpscr_operand): Likewise.
	(commutative_float_operator, noncommutative_float_operator): Likewise.
	(binary_float_operator, get_fpscr_rtx, emit_sf_insn): Likewise.
	(emit_df_insn, expand_sf_unop, expand_sf_binop): Likewise.
	(expand_df_unop, expand_df_binop, expand_fp_branch): Likewise.
	(emit_fpscr_use, mark_use, remove_dead_before_cse): Likewise.
	* sh.h (CPP_SPEC): Add support for -m4, m4-single, m4-single-only.
	(CONDITIONAL_REGISTER_USAGE): Likewise.
	(HARD_SH4_BIT, FPU_SINGLE_BIT, SH4_BIT, FMOVD_BIT): Define.
	(TARGET_CACHE32, TARGET_SUPERSCALAR, TARGET_HARWARD): Define.
	(TARGET_HARD_SH4, TARGET_FPU_SINGLE, TARGET_SH4, TARGET_FMOVD): Define.
	(target_flag): Add -m4, m4-single, m4-single-only, -mfmovd.
	(OPTIMIZATION_OPTIONS): If optimizing, set flag_omit_frame_pointer
	to -1 and sh_flag_remove_dead_before_cse to 1.
	(ASSEMBLER_DIALECT): Define to assembler_dialect.
	(assembler_dialect, fp_reg_names): Declare.
	(OVERRIDE_OPTIONS): Add code for TARGET_SH4.
	Hide names of registers that are not accessible.
	(CACHE_LOG): Take TARGET_CACHE32 into account.
	(LOOP_ALIGN): Take TARGET_HARWARD into account.
	(FIRST_XD_REG, LAST_XD_REG, FPSCR_REG): Define.
	(FIRST_PSEUDO_REGISTER: Now 49.
	(FIXED_REGISTERS, CALL_USED_REGISTERS): Include values for registers.
	(HARD_REGNO_NREGS): Special treatment of FIRST_XD_REG .. LAST_XD_REG.
	(HARD_REGNO_MODE_OK): Update.
	(enum reg_class): Add DF_REGS and FPSCR_REGS.
	(REG_CLASS_NAMES, REG_CLASS_CONTENTS, REG_ALLOC_ORDER): Likewise.
	(SECONDARY_OUTPUT_RELOAD_CLASS, SECONDARY_INPUT_RELOAD_CLASS): Update.
	(CLASS_CANNOT_CHANGE_SIZE, DEBUG_REGISTER_NAMES): Define.
	(NPARM_REGS): Eight floating point parameter registers on SH4.
	(BASE_RETURN_VALUE_REG): SH4 also passes double values
	in floating point registers.
	(GET_SH_ARG_CLASS): Likewise.
	Complex float types are also returned in float registers.
	(BASE_ARG_REG): Complex float types are also passes in float registers.
	(FUNCTION_VALUE): Change mode like PROMOTE_MODE does.
	(LIBCALL_VALUE): Remove trailing semicolon.
	(ROUND_REG): Round when double precision value is passed in floating
	point register(s).
	(FUNCTION_ARG_ADVANCE): No change wanted for SH4 when things are
	passed on the stack.
	(FUNCTION_ARG): Little endian adjustment for SH4 SFmode.
	(FUNCTION_ARG_PARTIAL_NREGS): Zero for SH4.
	(TRAMPOLINE_ALIGNMENT): Take TARGET_HARWARD into account.
	(INITIALIZE_TRAMPOLINE): Emit ic_invalidate_line for TARGET_HARWARD.
	(MODE_DISP_OK_8): Not for SH4 DFmode.
	(GO_IF_LEGITIMATE_ADDRESS): No base reg + index reg for SH4 DFmode.
	Allow indexed addressing for PSImode after reload.
	(LEGITIMIZE_ADDRESS): Not for SH4 DFmode.
	(LEGITIMIZE_RELOAD_ADDRESS): Handle SH3E SFmode.
	Don't change SH4 DFmode nor PSImode RELOAD_FOR_INPUT_ADDRESS.
	(DOUBLE_TYPE_SIZE): 64 for SH4.
	(RTX_COSTS): Add PLUS case.
	Increase cost of ASHIFT, ASHIFTRT, LSHIFTRT case.
	(REGISTER_MOVE_COST): Add handling of R0_REGS, FPUL_REGS, T_REGS,
	MAC_REGS, PR_REGS, DF_REGS.
	(REGISTER_NAMES): Use fp_reg_names.
	(enum processor_type): Add PROCESSOR_SH4.
	(sh_flag_remove_dead_before_cse): Declare.
	(rtx_equal_function_value_matters, fpscr_rtx, get_fpscr_rtx): Declare.
	(PREDICATE_CODES): Add binary_float_operator,
	commutative_float_operator, fp_arith_reg_operand, fp_extended_operand,
	fpscr_operand, noncommutative_float_operator.
	(ADJUST_COST): Use different scale for TARGET_SUPERSCALAR.
	(SH_DYNAMIC_SHIFT_COST): Cheaper for SH4.
	* sh.md (attribute cpu): Add value sh4.
	(attrbutes fmovd, issues): Define.
	(attribute type): Add values dfp_arith, dfp_cmp, dfp_conv, dfdiv.
	(function units memory, int, mpy, fp): Make dependent on issue rate.
	(function units issue, single_issue, load_si, load): Define.
	(function units load_store, fdiv, gp_fpul): Define.
	(attribute hit_stack): Provide proper default.
	(use_sfunc_addr+1, udivsi3): Predicated on ! TARGET_SH4.
	(udivsi3_i4, udivsi3_i4_single, divsi3_i4, divsi3_i4_single): New insns.
	(udivsi3, divsi3): Emit special patterns for SH4 hardware,
	(mulsi3_call): Now uses match_operand for function address.
	(mulsi3): Also emit code for SH1 case.  Wrap result in REG_LIBCALL /
	REG_RETVAL notes.
	(push, pop, push_e, pop_e): Now define_expands.
	(push_fpul, push_4, pop_fpul, pop_4, ic_invalidate_line): New expanders.
	(movsi_ie): Added y/i alternative.
	(ic_invalidate_line_i, movdf_i4): New insns.
	(movdf_i4+[123], reload_outdf+[12345], movsi_y+[12]): New splitters.
	(reload_indf, reload_outdf, reload_outsf, reload_insi): New expanders.
	(movdf): Add special code for SH4.
	(movsf_ie, movsf_ie+1, reload_insf, calli): Make use of fpscr visible.
	(call_valuei, calli, call_value): Likewise.
	(movsf): Emit no-op move.
	(mov_nop, movsi_y): New insns.
	(blt, sge): Generalize to handle DFmode.
	(return predicate): Call emit_fpscr_use and remove_dead_before_cse.
	(block_move_real, block_lump_real): Predicate on ! TARGET_HARD_SH4.
	(block_move_real_i4, block_lump_real_i4, fpu_switch): New insns.
	(fpu_switch0, fpu_switch1, movpsi): New expanders.
	(fpu_switch+[12], fix_truncsfsi2_i4_2+1): New splitters.
	(toggle_sz): New insn.
	(addsf3, subsf3, mulsf3, divsf3): Now define_expands.
	(addsf3_i, subsf3_i, mulsf3_i4, mulsf3_ie, divsf3_i): New insns.
	(macsf3): Make use of fpscr visible.  Disable for SH4.
	(floatsisf2): Make use of fpscr visible.
	(floatsisf2_i4): New insn.
	(floatsisf2_ie, fixsfsi, cmpgtsf_t, cmpeqsf_t): Disable for SH4.
	(ieee_ccmpeqsf_t): Likewise.
	(fix_truncsfsi2): Emit different code for SH4.
	(fix_truncsfsi2_i4, fix_truncsfsi2_i4_2, cmpgtsf_t_i4): New insns.
	(cmpeqsf_t_i4, ieee_ccmpeqsf_t_4): New insns.
	(negsf2, sqrtsf2, abssf2): Now expanders.
	(adddf3, subdf3i, muldf2, divdf3, floatsidf2): New expanders.
	(negsf2_i, sqrtsf2_i, abssf2_i, adddf3_i, subdf3_i): New insns.
	(muldf3_i, divdf3_i, floatsidf2_i, fix_truncdfsi2_i): New insns.
	(fix_truncdfsi2, cmpdf, negdf2, sqrtdf2, absdf2): New expanders.
	(fix_truncdfsi2_i4, cmpgtdf_t, cmpeqdf_t, ieee_ccmpeqdf_t): New insns.
	(fix_truncdfsi2_i4_2+1): New splitters.
	(negdf2_i, sqrtdf2_i, absdf2_i, extendsfdf2_i4): New insns.
	(extendsfdf2, truncdfsf2): New expanders.
	(truncdfsf2_i4): New insn.
	* t-sh (LIB1ASMFUNCS): Add _movstr_i4, _sdivsi3_i4, _udivsi3_i4.
	(MULTILIB_OPTIONS): Add m4-single-only/m4-single/m4.
	* float-sh.h: When testing for __SH3E__, also test for
	__SH4_SINGLE_ONLY__ .
	* va-sh.h (__va_freg): Define to float.
	(__va_greg, __fa_freg, __gnuc_va_list, va_start):
	Define for __SH4_SINGLE_ONLY__ like for __SH3E__ .
	(__PASS_AS_FLOAT, __TARGET_SH4_P): Likewise.
	(__PASS_AS_FLOAT): Use different definition for __SH4__ and
	 __SH4_SINGLE__.
	(TARGET_SH4_P): Define.
	(va_arg): Use it.

	* sh.md (movdf_k, movsf_i): Tweak the condition so that
	init_expr_once is satisfied about the existence of load / store insns.

	* sh.md (movsi_i, movsi_ie, movsi_i_lowpart, movsf_i, movsf_ie):
	Change m constraint in source operand to mr / mf.

	* va-sh.h (__va_arg_sh1): Use __asm instead of asm.

	* (__VA_REEF): Define.
	(__va_arg_sh1): Use it.

	* va-sh.h (va_start, va_arg, va_copy): Add parentheses.

Sun Nov 22 21:34:02 1998  Jeffrey A Law  (law@cygnus.com)

	* i386/dgux.c (struct option): Add new "description field".
	* m88k/m88k.c (struct option): Likewise.

Sun Nov 22 16:07:57 1998  Jeff Law  (law@cygnus.com)

	* version.c: Bump for snapshot.

Sun Nov 22 13:40:02 1998  Bernd Schmidt  <crux@pool.informatik.rwth-aachen.de>

	* regmove.c (regmove_profitable_p): Use return value of find_matches
	properly.

Sun Nov 22 02:47:37 1998  Jeff Law  (law@cygnus.com)

	* version.c: Bump for snapshot.

Sat Nov 21 22:12:09 1998  Jeffrey A Law  (law@cygnus.com)

	* reload1.c (eliminate_regs): Do not lose if eliminate_regs is called
	without reload having been called earlier.

	* v850.c (ep_memory_operand): Offsets < 0 are not valid for EP
	addressing modes.
	(v850_reorg): Similarly.

	* loop.c (check_dbra_loop): Avoid using gen_add2_insn.

Sat Nov 21 02:18:38 1998  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* loop.c (move_movables): Start of libcall might be new loop start.

Fri Nov 20 12:14:16 1998  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* hash.c (hash_table_init_n): Wrap prototype arguments in PARAMS().

Fri Nov 20 08:34:00 1998  Bernd Schmidt  <crux@pool.informatik.rwth-aachen.de>

	* function.c (nonlocal_goto_handler_slots): Renamed from
	nonlocal_goto_handler_slot; now an EXPR_LIST chain.
	(push_function_context_to): Adjust for this change.
	(pop_function_context_from): Likewise.
	(init_function_start): Likewise.
	(expand_function_end): Likewise.
	* function.h (struct function): Likewise.
	* calls.c (expand_call): Likewise.
	* explow.c (allocate_dynamic_stack_space): Likewise.
	* expr.h (nonlocal_goto_handler_slots): Rename its declaration.
	* stmt.c (declare_nonlocal_label): Make a new handler slot for each
	label.
	(expand_goto): When doing a nonlocal goto, find corresponding handler
	slot for it.  Don't put the label address in the static chain register.
	(expand_end_bindings): Break out nonlocal goto handling code into
	three new functions.
	(expand_nl_handler_label, expand_nl_goto_receiver,
	expand_nl_goto_receivers): New static functions, broken out of
	expand_end_bindings and adapted to create one handler per nonlocal
	label.
	* function.c (delete_handlers): Delete insn if it references any of
	the nonlocal goto handler slots.
	* i960.md (nonlocal_goto): Comment out code that modifies
	static_chain_rtx.
	* sparc.md (nonlocal_goto): Likewise.
	(goto_handler_and_restore_v9): Comment out.
	(goto_handler_and_restore_v9_sp64): Comment out.

Thu Nov 19 23:44:38 1998  Bernd Schmidt  <crux@pool.informatik.rwth-aachen.de>

	* expr.c (STACK_BYTES): Delete unused macro.
	* calls.c: Provide default for PREFERRED_STACK_BOUNDARY.
	(STACK_BYTES): Use PREFERRED_STACK_BOUNDARY, not STACK_BOUNDARY.
	(expand_call): Likewise.
	(emit_library_call): Likewise.
	(emit_library_call_value): Likewise.
	* function.c: Provide default for PREFERRED_STACK_BOUNDARY.
	(STACK_BYTES): Use PREFERRED_STACK_BOUNDARY, not STACK_BOUNDARY.
	* explow.c: Provide default for PREFERRED_STACK_BOUNDARY.
	(round_push): Use PREFERRED_STACK_BOUNDARY, not STACK_BOUNDARY.
	(allocate_dynamic_stack_space): Likewise.
	* tm.texi (PREFERRED_STACK_BOUNDARY): Document new macro.
	(STACK_BOUNDARY): Update description to reflect the new situation.

Thu Nov 19 22:20:51 1998  Jeffrey A Law  (law@cygnus.com)

	* reorg.c (relax_delay_slots): When optimizing for code size, if a
	return with a filled delay slot is followed by a return with an
	unfilled delay slot, delete the first return and reemit the insn
	that was previously in its delay slot.

	* i860.c (single_insn_src_p): Add missing parens.
	* ginclude/math-3300.h: Likewise.

Thu Nov 19 20:55:59 1998  H.J. Lu  (hjl@gnu.org)

	* regclass.c (init_reg_sets_1): Add prototype.
	(init_reg_modes): Likewise.

1998-11-19  Zack Weinberg  <zack@rabi.phys.columbia.edu>

	* c-common.c: Change warning messages to say `comparison is
	always true' or `comparison is always false' instead of the
	confusing `is always 0', `is always 1'.

Thu Nov 19 19:05:49 1998  Per Bothner  <bothner@cygnus.com>

	* print-tree.c (print_node): After printing BLOCK or BIND_EXPR,
	break instead of return (which loses closing '>').

Thu Nov 19 19:34:13 1998  Jeffrey A Law  (law@cygnus.com)

	* i386.h (LEGITIMATE_CONSTANT_P): Reject CONST_DOUBLEs that are not
	standard 387 constants.

	* i386.md (jump): Explicitly set "memory" attribute.
	(indirect_jump, prologue_set_stack_ptr): Likewise.
	(prologue_get_pc_and_set_got, pop): Likewise.
	(allocate_stack_worder, blockage, return_internal): Likewise.
	(return_pop_internal, nop): Likewise.
	(epilogue_set_stack_ptr, leave): Likewise.

Thu Nov 19 15:42:54 1998  Nick Clifton  <nickc@cygnus.com>

	* config/arm/coff.h: Set USER_LABEL_PREFIX to "_".

Thu Nov 19 23:20:59 1998  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* reload1.c (reload_reg_free_for_value_p):
	Early auto_inc reloads don't conflict with outputs.

Thu Nov 19 12:58:55 1998  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* configure.in: Don't do AC_CHECK_HEADERS(wait.h sys/wait.h).
	Instead call AC_HEADER_SYS_WAIT.

	* collect2.c: Don't provide defaults for sys/wait.h macros.
	* gcc.c: Likewise.
	* protoize.c: Likewise.  Also, don't include sys/wait.h.

	* system.h: Include sys/wait.h and provide macro defaults.

1998-11-19  Andreas Schwab  <schwab@issan.cs.uni-dortmund.de>

	* Makefile.in (mandir): Set to @mandir@.
	(man1dir): New variable to hold the former value of $(mandir).
	Replace all uses of $(mandir) by $(man1dir).

Wed Nov 18 16:31:28 1998  Jim Wilson  <wilson@cygnus.com>

	* reload.c (find_reloads_address_part): If have a CONST_INT, create
	a new one before passing it to force_const_mem.

	* reload.c (find_reloads_toplev): Pass &x instead of NULL_PTR in
	find_reloads_address call.

Wed Nov 18 22:13:00 1998  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* expr.c (store_expr): Don't generate load-store pair
	if TEMP is identical (according to ==) with TARGET.

Tue Nov 17 22:25:16 1998  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* reload1.c (reload_reg_free_for_value_p): When considered reload
	has an output, matching inputs are not sufficient to avoid conflict.

Tue Nov 17 11:51:16 1998  Mark Mitchell  <mark@markmitchell.com>

	* hash.h (hash_table_key): New type.
	(hash_entry): Change `string' field to generic `key'.
	(hash_table): Add `comp' and `hash' functions.
	(hash_table_init): Take them as input.
	(hash_table_init_n): Likewise.
	(hash_lookup): Modify for generic keys.
	(hash_newfunc): Likewise.
	(hash_traverse): Likewise.
	(string_hash): New function.
	(string_compare): Likewise.
	(string_copy): Likewise.
	* hash.c (hash_table_init_n): Modify for generic keys.
	(hash_table_init): Likewise.
	(hash_lookup): Likewise.
	(hash_newfunc): Likewise.
	(hash_traverse): Likewise.
	(string_hash): Split out from hash_lookup.
	(string_compare): New function.
	(string_copy): Split out from hash_lookup.
	* tlink.c (symbol_hash_newfunc): Modify for new interfaces to hash
	tables.
	(symbol_hash_lookup): Likewise.
	(file_hash_newfunc): Likewise.
	(file_hash_lookup): Likewise.
	(demangled_hash_newfunc): Likewise.
	(demangled_hash_lookup): Likewise.
	(tlink_int): Likewise.
	(read_repo_file): Likewise.
	(recompile_files): Likewise.
	(demangle_new_symbols): Likewise.
	(scan_linker_output): Likewise.

Tue Nov 17 17:13:53 1998  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* flow.c (insn_dead_p): New argument NOTES.  Changed all callers.

Mon Nov 16 17:56:07 1998  David Edelsohn  <edelsohn@gnu.org>

	* rs6000.c (output_mi_thunk): Improve test for local branch.

Mon Nov 16 17:56:07 1998  Franz Sirl  <Franz.Sirl-kernel@lauterbach.com>

	* rs6000.c (output_mi_thunk): Correct test for aggregate values.

Mon Nov 16 21:02:52 1998  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* reload1.c (reload_reg_free_before_p): Delete.
	Changed all callers to use reload_reg_free_for_value_p instead.
	(reload_reg_free_for_value_p): Handle more reload types.
	A RELOAD_FOR_INPUT doesn't conflict with its
	RELOAD_FOR_INPUT_ADDRESS / RELOAD_FOR_INPADDR_ADDRESS.
	Add special case for OUT == const0_rtx.
	Added ignore_address_reloads argument.  Changed all callers.

Mon Nov 16 02:22:29 1998  Jason Merrill  <jason@yorick.cygnus.com>

	* toplev.c (compile_file): Don't pedwarn about undefined static
	functions just because we passed -Wunused.

Mon Nov 16 04:41:41 1998  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* function.c (purge_addressof_1): Unshare rtl created by
	store_bit_field.

Mon Nov 16 04:23:06 1998  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* regmove.c (regmove_optimize): Don't do anything but
	optimize_reg_copy[123] when flag_regmove is not set.

Sat Nov 14 15:05:07 1998  Richard Henderson  <rth@cygnus.com>

	* alpha.md (addsi3, subsi3): Revise 5 Nov change to store DImode
	value in paradoxical SImode result, rather than truncating midpoint.

Fri Nov 13 22:19:23 1998  Richard Henderson  <rth@cygnus.com>

	* alpha.c (reg_not_elim_operand): New.
	* alpha.h (PREDICATE_CODES): Add it.
	* alpha.md (s48addq, s48subq patterns): Use it as the predicate
	for the multiplicand.

Fri Nov 13 22:50:37 1998  David Edelsohn  <edelsohn@gnu.org>

	* rs6000.md (movsf): Remove explicit secondary-reload-like
	functionality.  Only truncate SFmode store if in FPR.
	(movsf splitters): Combine const_double splitters.
	(movsf_hardfloat): Add GPR support.

Fri Nov 13 11:02:11 1998  Stan Cox  <scox@cygnus.com>

	* splet.h (SUBTARGET_OVERRIDE_OPTIONS): New to
	deprecate -mlive-g0 and -mbroken-saverestore.
	* t-splet (MULTILIB_OPTIONS): Likewise.

	* sparc.c (sparc_flat_compute_frame_size): Correctly calc args_size
	in a leaf function.  Clarify total_size/extra_size relationship.

Thu Nov 12 19:20:57 1998  Geoffrey Noer  <noer@cygnus.com>

	* i386/cygwin32.asm: Delete.
	* i386/cygwin.asm: New file, renamed from cygwin32.asm.
	* i386/cygwin32.h: Delete.
	* i386/cygwin.h: New file, renamed from cygwin32.h.
	* i386/t-cygwin32: Delete.
	* i386/t-cygwin: New file, renamed from t-cygwin32.  Include
	cygwin.asm instead of cygwin32.asm.  Remove "32" from comment.
	* i386/x-cygwin32: Delete.
	* i386/x-cygwin: New file, renamed from x-cygwin32.
	* i386/xm-cygwin32: Delete.
	* i386/xm-cygwin: New file, renamed from xm-cygwin32.  Use newly
	renamed cygwin_ funcs for path translations.
	* i386/win32.h: Define __CYGWIN__ when -mcygwin given.
	* i386/winnt.c: Remove "32" from comment about cygwin.
	* i386/mingw32.h: Fix references to cygwin32.h in light of above.
	* rs6000/cygwin32.h: Delete.
	* rs6000/cygwin.h: New file, renamed from cygwin32.h.  Add
	-D__CYGWIN__ to CPP_PREDEFINES.
	* rs6000/x-cygwin32: Delete.
	* rs6000/x-cygwin: New file, renamed from x-cygwin32.
	* rs6000/xm-cygwin32: Delete.
	* rs6000/xm-cygwin: New file, renamed from xm-cygwin32.

	* configure.in: Check for cygwin* instead of cygwin32.  Account
	for the rename of cygwin-related config files to lose the "32"s.
	* configure: Regenerate.

	* cccp.c, collect2.c, gcc.c, getpwd.c, libgcc2.c, protoize.c,
	toplev.c: Change all refs to __CYGWIN32__ to __CYGWIN__.

Wed Nov 11 12:25:19 1998  Tom Tromey  <tromey@cygnus.com>

	* Makefile.in (JAVAGC): New macro.
	* configure: Rebuilt.
	* configure.in: Recognize --enable-java-gc argument.  Subst
	`JAVAGC' variable.

Thu Nov 12 03:32:16 1998  J"orn Rennecke  <amylaar@cygnus.co.uk>

	Handle equivalences that have been obscured by gcse:

	* reload1.c (reload): Handle equivalences set up in multiple places.
	* local-alloc.c (reg_equiv_init_insns): New variable.
	(no_equiv): New function.
	(update_equiv_regs): Handle equivalences set up in multiple places.
	Don't ignore an insn just because its destination is likely to be
	spilled.

Wed Nov 11 13:46:13 1998  Jim Wilson  <wilson@cygnus.com>

	* except.c (expand_eh_return): Readd force_operand call lost in
	Sept 15 change.

Tue Nov 10 17:04:11 1998  David Edelsohn  <edelsohn@gnu.org>

	* rs6000.h (LEGITIMIZE_ADDRESS): Add missing goto on last case.

1998-11-09  Andreas Schwab  <schwab@issan.cs.uni-dortmund.de>

	* dbxout.c: Check HAVE_STAB_H instead of HAVE_STABS_H.

Mon Nov  9 20:15:19 1998  Bernd Schmidt  <crux@pool.informatik.rwth-aachen.de>

	* regmove.c (regmove_optimize): Fix error in last change.

Mon Nov  9 16:37:52 1998  Andrew Cagney  <cagney@b1.cygnus.com>

	* mips.c (function_prologue): When TARGET_MIPS16, adjust the register
	offset in the .mask pseudo to compensate for frame pointer adjustments.
	(mips16_fp_args, build_mips16_call_stub): For little endian, do not
	word swap arguments moved to/from FP registers.
	* mips16.S (DFREVCMP): Reverse arguments to OPCODE.

Mon Nov  9 09:47:06 1998  Jeff Law  (law@cygnus.com)

	* version.c: Bump for snapshot.

Mon Nov  9 02:14:14 1998  Jeff Law  (law@cygnus.com)

	* version.c: Bump for snapshot.

Mon Nov  9 03:06:24 1998  Jeffrey A Law  (law@cygnus.com)

	* reload1.c (delete_output_reload_insn): If a pseudo is set multiple
	times, then it can not be completely replaced.

Mon Nov  9 00:39:02 1998  Richard Henderson  <rth@cygnus.com>

	* alpha.md (call, call_value) [OSF]: Correct alt 3 insn length.

Sun Nov  8 17:50:30 1998  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* gansidecl.h: Prepend a "G" to the macro wrapping this file
	(to distinguish it from the macro wrapping ansidecl.h.)
	Include libiberty's ansidecl.h.  Remove all redundant definitions.
	Define the PROTO() style macros in terms of the PARAMS() ones.


	* calls.c (emit_library_call): Switch on ANSI_PROTOTYPES, not
	__STDC__, when deciding whether to use ANSI variable args.
	(emit_library_call_value): Likewise.

	* cccp.c (error): Likewise.
	(warning): Likewise.
	(error_with_line): Likewise.
	(warning_with_line): Likewise.
	(pedwarn): Likewise.
	(pedwarn_with_line): Likewise.
	(pedwarn_with_file_and_line): Likewise.
	(fatal): Likewise.

	* cexp.y (error): Likewise.
	(pedwarn): Likewise.
	(warning): Likewise.

	* collect2.c (fatal_perror): Likewise.
	(fatal): Likewise.
	(error): Likewise.

	* combine.c (gen_rtx_combine): Likewise.

	* cpperror.c (cpp_message): Likewise.
	(cpp_fatal): Likewise.

	* cpplib.c (cpp_error): Likewise.
	(cpp_warning): Likewise.
	(cpp_pedwarn): Likewise.
	(cpp_error_with_line): Likewise.
	(cpp_warning_with_line): Likewise.
	(cpp_pedwarn_with_line): Likewise.
	(cpp_pedwarn_with_file_and_line): Likewise.

	* cpplib.h: Don't define PARAMS() macro.

	* demangle.h: Likewise.

	* doprint.c (checkit): Switch on ANSI_PROTOTYPES, not __STDC__,
	when deciding whether to use ANSI variable args.

	* emit-rtl.c (gen_rtx): Likewise.
	(gen_rtvec): Likewise.

	* final.c (asm_fprintf): Likewise.

	* fix-header.c (cpp_message): Likewise.
	(fatal): Likewise.
	(cpp_fatal): Likewise.

	* gcc.c (concat): Likewise.
	(fatal): Likewise.
	(error): Likewise.

	* genattr.c (fatal): Likewise.

	* genattrtab.c (attr_rtx): Likewise.
	(attr_printf): Likewise.
	(fatal): Likewise.

	* gencodes.c (fatal): Likewise.

	* genconfig.c (fatal): Likewise.

	* genemit.c (fatal): Likewise.

	* genextract.c (fatal): Likewise.

	* genflags.c (fatal): Likewise.

	* genopinit.c (fatal): Likewise.

	* genoutput.c (fatal): Likewise.
	(error): Likewise.

	* genpeep.c (fatal): Likewise.

	* genrecog.c (fatal): Likewise.

	* halfpic.h: Switch on ANSI_PROTOTYPES, not __STDC__, when
	deciding whether to declare `tree_node' and `rtx_def'.

	* hash.h: Don't define stuff we get from gansidecl.h.

	* mips-tfile.c: Likewise.  Define __proto() in terms of PARAMS().
	(fatal): Switch on ANSI_PROTOTYPES, not __STDC__, when deciding
	whether to use ANSI variable args.
	(error): Likewise.

	* prefix.c (concat): Likewise.

	* scan.h: Likewise.

	* system.h: Likewise.

	* toplev.c (error_with_file_and_line): Likewise.
	(error_with_decl): Likewise.
	(error_for_asm): Likewise.
	(error): Likewise.
	(fatal): Likewise.
	(warning_with_file_and_line): Likewise.
	(warning_with_decl): Likewise.
	(warning_for_asm): Likewise.
	(warning): Likewise.
	(pedwarn): Likewise.
	(pedwarn_with_decl): Likewise.
	(pedwarn_with_file_and_line): Likewise.
	(sorry): Likewise.
	(really_sorry): Likewise.

	* toplev.h: Switch on ANSI_PROTOTYPES, not __STDC__, when deciding
	whether to declare `tree_node' and `rtx_def'.

	* tree.c (build): Switch on ANSI_PROTOTYPES, not __STDC__, when
	deciding whether to use ANSI variable args.
	(build_nt): Likewise.
	(build_parse_node): Likewise.

Sun Nov  8 13:10:55 1998  Jeff Law  (law@cygnus.com)

	* version.c: Bump for snapshot.

Sat Nov  7 23:34:01 1998  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* Makefile.in (libcpp.a): Check RANLIB_TEST before runing RANLIB.

Sat Nov  7 22:26:19 1998  David Edelsohn  <edelsohn@gnu.org>

	* collect2.c (main, case 'b'): Use else if.

Sat Nov  7 15:35:25 1998  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* configure.in (host_xm_file, build_xm_file, xm_file, tm_file):
	Arrange to include gansidecl.h in {ht}config.h & tm.h just
	before the config/ directory headers.
	(tm_file_list, host_xm_file_list, build_xm_file_list): Handle
	gansidecl.h in the list of dependencies.

	* Makefile.in (RTL_BASE_H): Don't depend on gansidecl.h.
	(TREE_H, DEMANGLE_H, RECOG_H, REGS_H, libgcc2.a, stmp-multilib,
	mbchar.o, collect2.o, pexecute.o, vfprintf.o, splay-tree.o, gcc.o,
	gencheck.o, choose-temp.o, mkstemp.o, mkstemp.o, prefix.o,
	dyn-string.o, cexp.o, cccp.o, cppmain.o, cpplib.o, cpperror.o,
	cppexp.o, cppfiles.o, cpphash.o, cppalloc.o, scan-decls.o):
	Likewise.

	* cccp.c: Don't include gansidecl.h.
	* cexp.y: Likewise.
	* collect2.c: Likewise.
	* config/c4x/c4x.c: Likewise.
	* config/v850/v850.h: Likewise.
	* cppalloc.c: Likewise.
	* cpperror.c: Likewise.
	* cppexp.c: Likewise.
	* cppfiles.c: Likewise.
	* cpphash.c: Likewise.
	* cpplib.c: Likewise.
	* cppmain.c: Likewise.
	* cppulp.c: Likewise.
	* demangle.h: Likewise.
	* doprint.c: Likewise.
	* dyn-string.c: Likewise.
	* eh-common.h: Likewise.
	* fix-header.c: Likewise.
	* frame.c: Likewise.
	* gcc.c: Likewise.
	* gcov.c: Likewise.
	* gen-protos.c: Likewise.
	* gencheck.c: Likewise.
	* halfpic.h: Likewise.
	* hash.c: Likewise.
	* machmode.h: Likewise.
	* mbchar.c: Likewise.
	* prefix.c: Likewise.
	* protoize.c: Likewise.
	* recog.h: Likewise.
	* rtl.h: Likewise.
	* scan-decls.c: Likewise.
	* tree.h: Likewise.
	* varray.h: Likewise.

Sat Nov  7 11:37:53 1998  Richard Henderson  <rth@cygnus.com>

	* i386.md (call_value_pop): If we're not popping anything,
	defer to call_value.
	(call_pop): Likewise defer to call.

Sat Nov  7 02:49:56 1998  Richard Henderson  <rth@cygnus.com>

	* function.c (purge_addressof): Clear purge_addressof_replacements
	only after processing the whole function.

Sat Nov  7 00:54:55 1998  Jeffrey A Law  (law@cygnus.com)

	* reload1.c (reload): If we can not perform a particular elimination
	when we thought we could earlier, then we must always iterate through
	the loop at least one more time.

Fri Nov  6 19:37:33 1998  Richard Henderson  <rth@cygnus.com>

	* alpha.c (add_operand): Simplify the CONST_INT match.
	(sext_add_operand): Correct typo in comparison by using
	CONST_OK_FOR_LETTER_P.
	* alpha.md (s?addq): Use sext_add_operand to allow the negative
	constant alternatives to be generated.
	(mulsi3, muldi3, umuldi3_highpart): Loosen constraints to allow
	small constants, since the hw instructions do.

Fri Nov  6 20:15:19 1998  Bernd Schmidt  <crux@pool.informatik.rwth-aachen.de>

	* reload1.c (emit_reload_insns): When rewriting the SET_DEST of a
	previous insn to store directly into our reload register, make sure
	that if the source of the previous insn is a reload register, its
	spill_reg_store and spill_reg_stored_to values are cleared.

Fri Nov  6 16:35:10 1998  David Edelsohn  <edelsohn@gnu.org>

	* rs6000.md (floatunssidf2_internal splitter): Use base register
	operand, not hard-coded SP.

Fri Nov  6 04:07:53 1998  David S. Miller  <davem@pierdol.cobaltmicro.com>

	* jump.c (calculate_can_reach_end): Fix thinko.

Fri Nov  6 00:16:04 1998  Jeffrey A Law  (law@cygnus.com)

	* reorg.c (fill_simple_delay_slots): Fix typo.

	* romp.h (LEGITIMIZE_ADDRESS): Fix typo.

Fri Nov  6 00:10:00 1998  Jan Hubicka  (hubicka@freesoft.cz)

	* i386.md (extendsidi2): Use # in the output template.
	(extendsidi splitters): New splitters.

Thu Nov  5 11:13:27 1998  Nick Clifton  <nickc@cygnus.com>

	* configure.in: Use unknown-elf.h as tm_file for arm-elf
	configurations.
	* configure: Regenerate.

Thu Nov  5 07:59:05 1998  David S. Miller  <davem@pierdol.cobaltmicro.com>

	* jump.c (init_label_info, delete_barrier_successors,
	mark_all_labels, delete_unreferenced_labels,
	delete_noop_moves, calculate_can_reach_end): New functions broken
	out of jump_optimize.
	(jump_optimize): Use them.

Thu Nov  5 07:57:45 1998  Andrew MacLeod  <amacleod@cygnus.com>

	* except.c (expand_fixup_region_end): Make sure outer context labels
	are not issued in an inner context during cleanups.

Thu Nov  5 04:03:06 1998  Richard Henderson  <rth@cygnus.com>

	* alpha.md (addsi3, subsi3): No new temporaries once cse is
	no longer expected.

Thu Nov  5 03:29:19 1998  Richard Henderson  <rth@cygnus.com>

	* alpha.md (addsi3, subsi3): Expand to a DImode temporary so as
	to expose this midpoint to CSE.

Thu Nov  5 03:42:54 1998  David S. Miller  <davem@pierdol.cobaltmicro.com>

	* config/sparc/sparc.md (movdf_const_intreg_sp64): Enable again.

Thu Nov  5 10:53:01 1998  Andreas Schwab  <schwab@issan.cs.uni-dortmund.de>

	* configure.in: Bring over gcc2 change of Nov 19 1997.

Wed Nov  4 23:43:08 1998  Graham  <grahams@rcp.co.uk>

	* toplev.c (output_lang_identify): Make definition dependent on
	ASM_IDENTIFY_LANGUAGE.

	* print-rtl.c (spaces): Make static.

Wed Nov  4 22:16:36 1998  Hans-Peter Nilsson  <hp@axis.se>

	* extend.texi: Clarify proper uses for register clobbers in asms.

Wed Nov  4 22:16:36 1998  Bernd Schmidt  <crux@pool.informatik.rwth-aachen.de>

	* recog.h (enum op_type): Define.
	(constrain_operands): Adjust prototype.
	(recog_op_type): Declare new variable.
	* recog.c (recog_op_type): New variable.
	(insn_invalid_p): Allow modifying an asm statement after reload.
	(extract_insn): Set up recog_op_type.
	(constrain_operands): Lose INSN_CODE_NUM arg.  All callers changed.
	Don't compute operand types, use recog_op_type.
	Use the information computed by extract_insn instead of the previous
	method of finding it by insn code number.
	* caller-save.c (init_caller_save): Use extract_insn, not insn_extract.
	* reorg.c (fill_slots_from_thread): Likewise.
	* reload1.c (reload_as_needed): Likewise.
	(gen_reload): Likewise.
	(inc_for_reload): Likewise.
	(reload_cse_simplify_operands): Likewise.
	Use the information computed by extract_insn instead of the previous
	method of finding it by insn code number.
	* genattrtab.c (write_attr_case): Generate call to extract_insn, not
	insn_extract.
	* final.c (final_scan_insn): Use extract_insn, not insn_extract.
	(cleanup_operand_subregs): Use extract_insn, not insn_extract.
	Use the information computed by extract_insn instead of the previous
	method of finding it by insn code number.
	* regmove.c (find_matches): Likewise.  Change meaning of the return
	value to be nonzero if the optimization can be performed, zero if
	not.  All callers changed.
	Shorten some variable names to fix formatting problems.
	(regmove_optimize): Shorten some variable names to fix formatting
	problems.
	Use the information computed by extract_insn instead of the previous
	method of finding it by insn code number.
	* regclass.c (scan_one_insn): Likewise.
	(record_reg_classes): Don't compute operand types, use recog_op_type.
	* reload.c (find_reloads): Lose CONSTRAINTS1 variable; use
	recog_constraints instead.

Wed Nov  4 21:37:46 1998  Jeffrey A Law  (law@cygnus.com)

	* rtl.h (flow2_completed): Declare.
	* flow.c (flow2_completed): Definition.
	* toplev.c (rest_of_compilation): Set and clear flow2_completed
	as necessary.

Wed Nov  4 19:15:37 1998  Melissa O'Neill  <oneill@cs.sfu.ca>

	* Makefile.in (libcpp.a): Ranlib libcpp.a.

	* cppulp.c (user_label_prefix): Initialize.

Wed Nov  4 19:07:08 1998  John Wehle  (john@feith.com)

	* flow.c (mark_regs_live_at_end): Mark the stack pointer as live
	at a RETURN if current_function_sp_is_unchanging is set.

Wed Nov  4 18:16:29 1998  Herman A.J. ten Brugge  <Haj.Ten.Brugge@net.HCC.nl>

	* emit-rtl.c (try_split): Fixed error in Oct 10 patch.

Wed Nov  4 15:11:15 1998  Geoffrey Noer  <noer@cygnus.com>

	* i386/cygwin32.h (MASK_WIN32, MASK_CYGWIN, MASK_WINDOWS, MASK_DLL,
	TARGET_WIN32, TARGET_CYGWIN, TARGET_WINDOWS, TARGET_DLL): New.
	(SUBTARGET_SWITCHES): Add -mno-cygwin, -mcygwin, and -mdll options.
	(CPP_PREDEFINES): Don't define __CYGWIN32__ here.
	(STARTFILE_SPEC): Handle -mdll, -mno-cygwin options.
	(CPP_SPEC): Handle -mno-cygwin option.  Define __CYWIN__ in addition
	to __CYGWIN32__.
	(LIB_SPEC): Handle -mno-cygwin option.
	(LINK_SPEC): Handle -mdll.

Wed Nov  4 22:56:14 1998  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* reload.c (find_reloads): Fix test for usage by other reload
	to handle secondary reloads properly.

Wed Nov  4 17:25:10 1998  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* reload1.c (ELIMINABLE_REGS, NUM_ELIMINABLE_REGS): Introduce an
	intermediate structure which has exactly the members provided by
	ELIMINABLE_REGS.  Define NUM_ELIMINABLE_REGS in terms of the
	static intermediate structure.

	(init_elim_table): Xmalloc() `reg_eliminate', and initialize it
	from the intermediate structure.  Do the same analogous fix in
	the case where ELIMINABLE_REGS is not defined.

Tue Nov  3 20:50:03 1998  Jeffrey A Law  (law@cygnus.com)

	* pa.h (SELECT_SECTION): Fix thinko.

Tue Nov  3 17:51:36 1998  Jim Wilson  <wilson@cygnus.com>

	* dwarf2out.c (output_call_frame_info): Comments on last change.

Tue Nov  3 07:51:43 1998  Richard Earnshaw  (rearnsha@arm.com)

	* arm.c (add_constant): When taking the address of an item in the
	pool, get the mode of the item addressed.

	* arm.c (final_prescan_insn case INSN): If an insn doesn't
	contain a SET or a PARALLEL, don't consider it for conditional
	execution.

	Restore ABI compatibility for NetBSD.
	* arm/netbsd.h (DEFAULT_PCC_STRUCT_RETURN): Override setting in
	arm.h.
	(RETURN_IN_MEMORY): Likewise.

Mon Nov  2 11:46:17 1998  Doug Evans  <devans@canuck.cygnus.com>

	* m32r/m32r.c (m32r_expand_block_move): Fix byte count computations.
	(m32r_output_block_move): Rewrite bytes < 4 handling.

Mon Nov  2 10:10:35 1998  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* configure.in: Call AC_FUNC_VFORK.

	* collect2.c: Define VFORK_STRING as a printable string for
	error messages (either "vfork" or "fork".)  If HAVE_VFORK_H is
	defined, include vfork.h.  If VMS is defined, define vfork()
	appropriately.  Remove vfork check on USG, we're using autoconf.
	(collect_execute): Pass VFORK_STRING to fatal_perror instead of
	checking locally what string to pass.
	(scan_prog_file): Likewise.
	(scan_libraries): Likewise.

	* gcc.c: Remove vfork check on USG, we're using autoconf.
	Besides, no calls to vfork/fork occur in this file.

	* protoize.c: Likewise.

Mon Nov  2 07:52:28 1998  Alexandre Oliva  <oliva@dcc.unicamp.br>

	* configure.in (DEFAULT_LINKER): Renamed from LD.
	(DEFAULT_ASSEMBLER): Renamed from AS; reverted Schwab's patch.
	(gcc_cv_as): Try $DEFAULT_ASSEMBLER before $AS.
	* configure: Rebuilt.

Mon Nov  2 01:48:10 1998  Alexandre Oliva  <oliva@dcc.unicamp.br>

	* BUGS: Fix the regexp for `more' to find the appropriate node.
	Reported by Joerg Pietschmann  <joerg_pietschmann@zkb.ch>

	* BUGS: Added link to the WWW FAQ.

Sun Nov  1 18:27:15 1998  Jeff Law  (law@cygnus.com)

	* version.c: Bump for snapshot.

Sun Nov  1 11:04:32 1998  Jeffrey A Law  (law@cygnus.com)

	* From Christian Gafton:
	* i386/linux.h (CPP_PREDEFINES): Add -D__i386__.
	* sparc/linux.h (CPP_PREDEFINES): Add -D__sparc__.
	* sparc/linux64.h (CPP_PREDEFINES): Add -D__sparc__.

Sat Oct 31 21:42:39 1998  Mark Mitchell  <mark@markmitchell.com>

	* c-common.c (c_get_alias_set): Allow all type-punning through
	unions.  Don't get confused about the type of a bit-field, despite
	the antics of build_modify_expr.

Sat Oct 31 22:35:29 1998  Jean-Pierre Radley  <jpr@jpr.com>

	* fixinc.sco: Parameterize #include_next values.
	* fixinc/fixinc.sco: Likewise.

Sat Oct 31 20:39:35 1998  Jeffrey A Law  (law@cygnus.com)

	* toplev.c (rest_of_compilation): No longer set reload_completed.
	* reload1.c (reload): Set it here.  Perform instruction splitting
	after reload has completed if we will be running the scheduler
	again.

Sat Oct 31 12:30:02 1998  Jeffrey A Law  (law@cygnus.com)

	* jump.c (jump_optimize): Initialize mappings from INSN_UID to
	EH region if exceptions are enabled and we're performing cross
	jump optimizations.
	(find_cross_jump): Exit loop if the insns are in different EH regions.

Sat Oct 31 10:02:48 1998  Mark Mitchell  <mark@markmitchell.com>

	* dwarf2out.c (output_call_frame_info): Use
	ASM_OUTPUT_DWARF_DELTA4 for the CIE offset to match frame.c.

Sat Oct 31 10:23:14 1998  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	Reinstall Apr 24th fix, lost during May 6th gcc2 merge:
	* c-common.c (check_format_info): Don't check for the 'x'
	format character twice, instead check for 'x' and 'X'

Fri Oct 30 14:50:25 1998  Jeffrey A Law  (law@cygnus.com)

	* configure.in (assembler features): Also make gas is configured if
	we find it in the source tree.

Fri Oct 30 13:23:20 1998  Richard Henderson  <rth@cygnus.com>

	* i386.c (i386_comp_type_attributes): Compare whether the
	attributes are defined, not their tree nodes.

Fri Oct 30 11:39:47 1998  Alexandre Oliva  <oliva@dcc.unicamp.br>

	* configure.in (gxx_include_dir): Bitten by autoconf quoting
	characters.  :-(
	* configure: Rebuilt.

Fri Oct 30 10:43:29 1998  Andreas Schwab  <schwab@issan.cs.uni-dortmund.de>

	* configure.in: Ignore non-absolute value in $AS.

Fri Oct 30 00:54:25 1998  Peter Jakubek  <pjak@snafu.de>

	* m68k.h (INDIRECTABLE_1_ADDRESS_P): Fix thinko.

Fri Oct 30 00:42:34 1998  Mark Elbrecht  <snowball3@usa.net>

	* configure.in (msdosdjgpp): Set exeext and target_alias.

Thu Oct 29 23:55:43 1998  Bernd Schmidt  <crux@pool.informatik.rwth-aachen.de>

	* flow.c (XNMALLOC): New macro.
	(flow_int_list_blocks, basic_block_succ, basic_block_pred): New
	static variables.
	(add_edge, add_edge_to_label): New static functions.
	(free_bb_memory): New function.
	(flow_delete_insn): Delete function.
	(basic_block_drops_in): Delete variable.
	(find_basic_blocks): Allocate and initialize basic_block_head,
	basic_block_succ.  Don't allocate basic_block_drops_in.
	Call free_bb_memory at the beginning.
	(find_basic_blocks_1): Don't do multiple passes.
	Delete code to compute basic_block_drops_in.
	After calling make_edges, mark blocks reached by current block live.
	Update test for unreachable live blocks.
	(mark_label_ref): Delete args X, CHECKDUP.  Add PRED arg.  All callers
	changed.
	Simplify to call add_edge_to_label when a LABEL_REF is found.
	(make_edges): Simplify to call add_edge_to_label instead of
	mark_label_ref most of the time.
	Compute here whether control drops into the next block.
	(delete_unreachable_blocks): Return void.  All callers changed.
	Delete unreachable blocks in reverse order.
	After deleting all unreachable blocks, renumber the remaining ones
	and update n_basic_blocks.
	(delete_block): Speed up deletion a bit.
	Don't set basic_block_drops_in for deleted blocks.
	(free_basic_block_vars): Don't free basic_block_drops_in.
	(life_analysis_1): Update to use new edge representation.
	(dump_flow_info): Delete code to print basic block info; call
	dump_bb_data instead.
	(compute_preds_succs): Delete code to recompute basic_block_drops_in
	and uid_block_number.
	Simply copy the previously computed cfg.
	(dump_bb_data): New arg LIVE_INFO.  All callers changed.
	Print register lifetime information if LIVE_INFO is nonzero.
	* basic-block.h (dump_bb_data): Adjust prototype.
	* gcse.c (gcse_main): Update call to dump_bb_data.
	* rtl.h (free_bb_memory): Declare.
	* toplev.c (rest_of_compilation): Call free_bb_memory.

	* reload1.c (struct elim_table): Delete MAX_OFFSET member.
	(update_eliminable_offsets): Don't compute it.
	(set_initial_elim_offsets): Don't initialize it.
	Break out some code into set_initial_label_offsets so the rest of
	this function can be called from reload_as_needed.
	Assume that INITIAL_FRAME_POINTER_OFFSET is defined when
	ELIMINABLE_REGS isn't.
	(set_initial_label_offsets): New function, broken out of
	set_initial_elim_offsets.
	(set_offsets_for_label): New function, broken out of set_label_offsets
	and reload_as_needed.
	(reload): Call the two new functions.
	(reload_as_needed): Call set_initial_elim_offsets instead of
	duplicating the code.  Likewise for set_offsets_for_label.

	* reload1.c (choose_reload_regs): Fix typo in Oct 17 change.
	(emit_reload_insns): Ensure that when we set reg_reloaded_valid for
	any hard reg, reg_reloaded_dead contains valid data.

Thu Oct 29 22:30:54 1998  Marcus Meissner  <Marcus.Meissner@informatik.uni-erlangen.de>

	* i386.c (i386_comp_type_attributes): Return nonzero for mismatched
	"stdcall" and "cdecl" attributes.

Thu Oct 29 19:05:17 1998  Jim Wilson  <wilson@cygnus.com>

	* sched.c (update_flow_info): Add code to ! found_orig_dest case to
	handle deleted no-op moves of hard registers.
	* haifa-sched.c (update_flow_info): Likewise.

Thu Oct 29 18:07:47 1998  Jeffrey A Law  (law@cygnus.com)

	* mips.md (reload_{in,out}{si,di}): Emit a USE of HILO at the end
	of the sequences to reload the HILO register which do not actually
	reference HILO.

Thu Oct 29 12:39:35 1998  Jim Wilson  <wilson@cygnus.com>

	* c-common.c (c_get_alias_set): Handle ARRAY_REF of union field.

Thu Oct 29 14:10:22 1998  Andrew MacLeod  <amacleod@cygnus.com>

	* except.c (emit_eh_context): Make the EH context register stay alive
	at -O0 so stupid.c doesn't get confused.

1998-10-29  Herman A.J. ten Brugge  <Haj.Ten.Brugge@net.HCC.nl>

	* emit-rtl.c (try_split): Do not try to split a BARRIER.

Thu Oct 29 01:33:54 1998  Jan Hubicka  <hubicka@freesoft.cz>
			  Jeffrey A Law  (law@cygnus.com)

	* i386.md: Change ix86_cpu == PROCESSOR_PENTIUM to TARGET_PENTIUM.
	(zero_extendsidi2): Use # in output template and handle completely by
	splits.
	(zero_extend splitters): New define_splits.
	(ashiftrt_32): New pattern.

Wed Oct 28 22:58:35 1998  Jason Merrill  <jason@yorick.cygnus.com>

	* tree.c (append_random_chars): New fn.
	(get_file_function_name_long): Use it.

Wed Oct 28 22:27:05 1998  Richard Henderson  <rth@cygnus.com>

	* Makefile.in (cc1): Put C_OBJS, and thence @extra_c_objs@ last.
	(LIBCPP_OBJS): New.  Add cppulp.o.
	(cppmain, fix-header): Depend on and use libcpp.a.
	* configure.in (extra_c_objs, extra_cxx_objs): Use libcpp.a instead
	of the individual object files.
	* objc/Make-lang.in (cc1obj): Put OBJC_OBJS, and thence @extra_c_objs@,
	last.

	* cccp.c (user_label_prefix): New.
	(main): Set it off -f*leading-underscore.
	(special_symbol): Use it.
	* cpplib.c (special_symbol): Likewise.
	(cpp_handle_option): Handle -f*leading-underscore.
	* cppulp.c: New file.

	* output.h (user_label_prefix): Declare it.
	* dwarf2out.c (ASM_NAME_TO_STRING): Prepend user_label_prefix.
	* toplev.c (f_options, main): Handle -f*leading-underscore.

	* defaults.h (ASM_OUTPUT_LABELREF): Use asm_fprintf instead of
	referencing USER_LABEL_PREFIX directly.
	* config/nextstep.h (ASM_OUTPUT_LABELREF): Likewise.
	* m32r/m32r.h (ASM_OUTPUT_LABELREF): Likewise.
	* final.c (asm_fprintf): Use user_label_prefix instead.
	* arm/thumb.c (thumb_print_operand): Likewise.

	* gcc.c (default_compilers): Pass -f*leading-underscore on to
	cpp wherever appropriate.

Wed Oct 28 23:09:25 1998  Robert Lipe  <robertl@dgii.com>

	* sco5.h (SUBTARGET_SWITCHES): Add documentation for OpenServer-
	specific compiler switches.

Wed Oct 28 21:05:53 1998  Jeffrey A Law  (law@cygnus.com)

	* Makefile.in (c-common.o): Depend on c-pragma.h.  Use $(RTL_H) instead
	of rtl.h.

Wed Oct 28 20:52:47 1998  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* gcc.c (EXTRA_SPECS, extra_specs): Introduce an intermediate
	structure which has exactly the members provided by EXTRA_SPECS.
	Xmalloc() the real `extra_specs', and initialize it from this
	intermediate structure.

	* alpha.h (EXTRA_SPECS): Revert change for missing initializers.

	* mips.h  (EXTRA_SPECS): Likewise.

	* sparc.h (EXTRA_SPECS): Likewise.

Wed Oct 28 16:46:07 1998  Andreas Schwab  <schwab@issan.cs.uni-dortmund.de>

	* function.c (purge_addressof_1): Instead of aborting when a
	bitfield insertion as a replacement for (MEM (ADDRESSOF)) does not
	work just put the ADDRESSOF on stack.  Otherwise remember all such
	successful replacements, so that exactly the same replacements
	can be made on the REG_NOTEs.  Remove the special case for CALL
	insns again.
	(purge_addressof_replacements): New variable.
	(purge_addressof): Clear it at end.

1998-10-28  Zack Weinberg  <zack@rabi.phys.columbia.edu>

	* c-lang.c: Declare extern char *yy_cur if USE_CPPLIB.
	  (lang_init): Call check_newline always.
	* c-lex.c (init_parse) [USE_CPPLIB=1]: After calling
	  cpp_start_read, set yy_cur and yy_lim to read from
	  parse_in.token_buffer, so that we'll see the first #line
	  directive.
	* cpplib.c (cpp_start_read): finclude the main input file
	  before processing -include/-imacros.	 Process -imacros and
	  -include separately, and handle -include by stacking a
	  buffer for the file in question as if it'd been #included.
	* toplev.c (documented_lang_options): Recognize -H when
	  USE_CPPLIB is on.

1998-10-28  Zack Weinberg  <zack@rabi.phys.columbia.edu>

	* cpplib.c: Merge do_once into do_pragma.  Break file handling
	  code out of do_include.
	  Move append_include_chain, deps_output,
	  file_cleanup, redundant_include_p, import_hash,
	  lookup_import, add_import, read_filename_string, read_name_map,
	  open_include_file, finclude, safe_read to cppfiles.c.
	  Move prototypes for deps_output, append_include_chain,
	  finclude to cpplib.h.  Move definition of struct
	  file_name_list there also.

	* cppfiles.c: New file.  Contains all the above functions
	  broken out of cpplib.c; also hack_vms_include_specification
	  from cccp.c and find_include_file, a new function broken out of
	  do_include.

	* Makefile.in (cppmain): Depend on cppfiles.o.
	  (fix-header): Likewise.
	  (cppfiles.o): New target.
	* configure.in (--enable-c-cpplib): Add cppfiles.o to
	  extra_c_objs.  Add ../cppfiles.o to extra_cxx_objs.

Wed Oct 28 14:06:49 1998  Jim Wilson  <wilson@cygnus.com>

	* dwarfout.c (dwarfout_file_scope_decl): If DECL_CONTEXT, don't abort
	if pending_types is nonzero.
	(dwarfout_finish): Verify pending_types is zero before finishing.

Wed Oct 28 10:29:09 1998  Nick Clifton  <nickc@cygnus.com>

	* expr.c (convert_move): Use shifts to perform the move if a
	suitable extend pattern cannot be found.  Code written by
	Richard Henderson <rth@cygnus.com>.

Wed Oct 28 03:59:29 1998  Bernd Schmidt  <crux@pool.informatik.rwth-aachen.de>

	* regclass.c (renumber, regno_allocated): New static variables, moved
	out of allocate_reg_info.
	(allocate_reg_info): Move these two variables outside the function.
	Move code to free memory into new function free_reg_info.
	(free_reg_info): New function, broken out of allocate_reg_info.
	* toplev.c (compile_file): Call free_reg_info, not allocate_reg_info.
	* rtl.h (allocate_reg_info): Don't declare.
	(free_reg_info): Declare.

	* final.c (cleanup_subreg_operands): ASM_INPUTs need no treatment.

Wed Oct 28 02:38:12 1998  Jason Merrill  <jason@yorick.cygnus.com>

	* toplev.c (compile_file): Temporarily revert last change.

Wed Oct 28 00:00:35 1998  Jason Merrill  <jason@yorick.cygnus.com>

	* c-typeck.c (convert_for_assignment): Parenthesize.

1998-10-28  Andreas Schwab  <schwab@issan.cs.uni-dortmund.de>

	* reload1.c (delete_output_reload): Avoid ambigous else.

Wed Oct 28 00:10:35 1998  Jeffrey A Law  (law@cygnus.com)

	* toplev.c (compile_file): Call allocate_reg_info to free register
	table memory.
	* rtl.h (allocate_reg_info): Declare.

	* PROJECTS: Remove entry for local spilling.

	* final.c (cleanup_subreg_operands): New function.
	(final_scan_insn): Use it.
	(alter_subreg): Clear the "used" field when we turn a SUBREG into
	a REG.
	* reload1.c (reload): Delete CLOBBER insns and also cleanup SUBREG
	operands when reload has finished.
	* reload.h (cleanup_subreg_operands): Declare..
	* flow.c (life_analysis_1): No longer delete CLOBBER insns after
	reload.  Handled in reload itself.

Tue Oct 27 23:32:34 1998  Bernd Schmidt  <crux@pool.informatik.rwth-aachen.de>

	* reload1.c (verify_initial_offsets): New function.
	(reload): Call it after reload_as_needed.  Also verify that the frame
	size stays constant during reload_as_needed.
	* i386.h (CONST_DOUBLE_OK_FOR_LETTER_P): Undo Jul 26 change.

	* reload.h (struct insn_chain): Add need_operand_change element.
	* reload1.c (new_insn_chain): Clear it.
	(calculate_needs_all_insns): Set it; don't overload need_reload.
	(reload_as_needed): Use it.

	* reload.c (find_reloads_address): Use BASE_REG_CLASS instead of
	reload_address_base_reg_class throughout.  Similar for INDEX_REG_CLASS
	and reload_address_index_reg_class.
	(find_reloads_address_1): Likewise.
	* reload.h (reload_address_base_reg_class,
	reload_address_index_reg_class): Don't declare.
	* reload1.c (reg_old_renumber, pseudo_previous_regs,
	pseudo_forbidden_regs, bad_spill_regs_global): New static variables.
	(used_spill_regs): Now static.
	(reload_address_base_reg_class, reload_address_index_reg_class,
	regs_explicitly_used, counted_for_groups, counted_for_nongroups,
	basic_block_needs, max_needs, group_size, group_mode, max_groups,
	max_nongroups, max_needs_insn, max_groups_insn, max_nongroups_insn,
	forbidden_regs):
	Deleted variables.
	(init_reload): Delete code to compute base/index reg classes.
	(reload): Delete variable J.
	Delete code to manage basic_block_needs.
	Don't compute regs_explicitly_used.
	Allocate, initialize and free reg_old_renumber, pseudo_forbidden_regs,
	pseudo_previous_regs.
	Initialize bad_spill_regs_global.
	Don't call order_regs_for_reload here.
	Don't initialize spill_reg_order and n_spills.
	Don't forbid explicitly used regs to be used for spill regs.
	Change main loop to infinite loop, with explicit break statements.
	Make SOMETHING_CHANGED variable local to that loop.
	Don't initialize max_needs, max_groups, max_nongroups, max_needs_insn,
	max_groups_insn, max_nongroups_insn, group_size, group_mode.
	Make sure spilled_pseudos is cleared before calling spill_hard_reg or
	new_spill_reg.
	Don't call dump_needs.
	Delete code to reset potential_reload_regs.
	Delete code to terminate loop conditional on the global needs variables
	showing no further needs.
	(calculate_needs_all_insns): Return void.  All callers changed.
	Initialize something_needs_elimination here, not in reload.
	Delete avoid_return_reg kludge.
	(calculate_needs): Lose AVOID_RETURN_REG and GLOBAL args, return void.
	All callers changed.
	Initialize the group_mode and group_size elements of the arg CHAIN.
	Delete code to manage basic_block_needs.
	Operate on elements of CHAIN instead of global variables.
	Delete avoid_return_reg kludge.
	(find_tworeg_group): Lose GLOBAL arg, take CHAIN arg, return void.
	All callers changed.
	Operate on elements of CHAIN instead of global variables.
	Delete special SMALL_REGISTER_CLASSES code.
	Delete spill_failure code; now in new_spill_reg.
	(find_group): Lose GLOBAL arg, take CHAIN arg, return void.
	All callers changed.
	Operate on elements of CHAIN instead of global variables.
	(maybe_mark_pseudo_spilled): New static function.
	(find_reload_regs): Lose GLOBAL arg, take CHAIN arg, return void.
	All callers changed.
	Operate on elements of CHAIN instead of global variables.
	Call order_regs_for_reload here, not in reload.
	Initialize spill_reg_order and n_spills.
	Simplify test whether an asm insn is involved.
	Delete spill_failure code; now in new_spill_reg.
	Call maybe_mark_pseudo_spilled for everything marked as live in
	CHAIN.  Merge CHAIN's used_spill_regs into the global variable
	used_spill_regs.
	(dump_needs): Take CHAIN arg.  No longer static, to prevent the
	compiler from optimizing this function (now unused) away.
	Operate on elements of CHAIN instead of global variables.
	(possible_group_p): Lose MAX_GROUPS arg, take CHAIN arg.  All callers
	changed.
	Operate on elements of CHAIN instead of global variables.
	(count_possible_groups): Lose GROUP_SIZE, GROUP_MODE, MAX_GROUPS args,
	take CHAIN arg.  All callers changed.
	Operate on elements of CHAIN instead of global variables.
	(new_spill_reg): Lose MAX_NEEDS, MAX_NONGROUPS, GLOBAL args, take
	CHAIN, NONGROUP args.  Return void.  All callers changed.
	Verify caller isn't trying to spill a pseudo.
	Simplify test for illegal reg, just use bad_spill_regs.
	Generate better error messages.
	Operate on elements of CHAIN instead of global variables.
	Mark spilled register in CHAIN's used_spill_regs element.
	Don't call spill_hard_reg.
	(spill_hard_reg): Lose GLOBAL arg, return void.  All callers changed.
	Mark spilled hard regs in bad_spill_regs_global.
	Mark affected pseudos in spilled_pseudos, but don't spill them.
	(ior_hard_reg_set): New static function.
	(finish_spills): Return int.  All callers changed.
	Compute spill_reg_order, n_spills and spill_regs here.  Also update
	regs_ever_live for regs used as spills.
	For every pseudo in spilled_pseudos, spill it and mark the previous
	hard reg it had in pseudo_previous_regs.  Compute which hard regs
	are used as spills in insns during which it is live, and retry global
	register allocation.  Update all life information in the
	reload_insn_chain not to include pseudos without hard regs.
	Call alter_reg for all affected speudos.

	(scan_paradoxical_subregs): Disable SMALL_REGISTER_CLASSES special
	case, it's not clear what it's supposed to do.

	(hard_reg_use_compare): Take bad_spill_regs into account.
	(pseudos_counted): New static variable.
	(count_pseudo): New static function.
	(order_regs_for_reload): Take CHAIN arg.  All callers changed.
	Initialize bad_spill_regs from bad_spill_regs_global, then merge any
	hard registers explicitly used across the current insn into the set.
	Compute hard_reg_n_uses taking only pseudos live across this insn
	into account.
	Tweak sorting of potential_reload_regs.
	(compare_spill_regs): Delete function.
	(reload_as_needed): Don't sort the spill_regs array, it's computed
	in proper order in finish_spills.
	Delete avoid_return_reg kludge.
	Delete code to manage basic_block_needs.
	(allocate_reload_reg): Minor speed/readability tweaks.
	Operate on elements of CHAIN instead of global variables.
	(choose_reload_regs): Lose AVOID_RETURN_REG arg.  All callers changed.
	Delete avoid_return_reg kludge.
	Initialize reload_reg_used from CHAIN's used_spill_regs element.
	Delete unused label FAIL.
	(reload_combine): Replace reload_address_index_reg_class with
	INDEX_REGS.
	Don't use used_spill_regs to determine information about lifetime of
	hard regs.

Tue Oct 27 13:15:02 1998  Nick Clifton  <nickc@cygnus.com>

	* toplev.c (display_help): Ignore empty target specific
	options, and if -W is also specified on the command line then
	display undocumented options.

	* config/arm/arm.c: Updated with changes in devo sources.
	* config/arm/arm.h: Updated with changes in devo sources.
	* config/arm/lib1funcs.asm: Updated with changes in devo sources.
	* config/arm/lib1thumb.asm: Add ELF support.

Tue Oct 27 16:11:43 1998  David Edelsohn  <edelsohn@gnu.org>

	* collect2.c (aix64_flag): New variable.
	(main, case 'b'): Parse it.
	(GCC_CHECK_HDR): Object magic number must match mode.
	(scan_prog_file): Only check for shared object if valid header.
	Print debugging if header/mode mismatch.

Tue Oct 27 10:15:02 1998  Nick Clifton  <nickc@cygnus.com>

	Added support for arm-elf-linux configuration, submitted by Philip
	Blundell <pb@nexus.co.uk>, and integrated this with the arm-elf
	code developed by Catherine Moore <clm@cygnus.com>.  The following
	files are affected:

	* configure.in: Add arm-*-linux-gnu, armv2-*-linux and arm-*-elf
	targets.

	* configure: Regenerated.

	* config/arm/aout.h: Add default definitions of REGISTER_PREFIX,
	USER_LABEL_PREFIX and LOCAL_LABEL_PREFIX.  Make other macro
	definitions conditional on their not having been already defined.

	* config/arm/lin1funcs.asm: Add ELF only macros to generate .size
	and .type directives, and add "(PLT)" qualification to function
	calls.

	* config/arm/linux.h: Deleted.  This file is now superseded by
	either linux-elf.h or linux-aout.h.

	* config/arm/linux-gas.h: Define `inhibit_libc' if cross-compiling.
	(CLEAR_INSN_CACHE): New macro, currently disabled (awaiting kernel
	support).
	Move definitions from old linux.h file here.

	* config/arm/elf.h: New file.  Generic ARM/ELF support.

	* config/arm/linux-aout.h: New file.  Support for Linux with a.out.

	* config/arm/linux-elf.h: New file.  Support for Linux with ELF.

	* config/arm/linux-elf26.h: New file.  Support for Linux with ELF
	using the 26bit APCS.

	* config/arm/unknown-elf.h: New file.  Support for OS'es other
	than Linux with ELF.

	* config/arm/t-arm-elf: New file.  makefile fragment for arm-elf
	builds.

	* config/arm/coff.h: Include aout.h for basic assembler macros.
	Add support for -mstructure_size_boundary=<n> command line option.

	* config/arm/arm.h: Add support for -mstructure_size_boundary=<n>
	command line option.  Make macro definitions conditional on their
	not having been already defined.

	* config/arm/arm.c: Add support for -mstructure_size_boundary=<n>
	command line option.


Tue Oct 27 08:56:46 1998  Andrew MacLeod  <amacleod@cygnus.com>

	* dwarfout.c (ASM_OUTPUT_DWARF_STRING_NEWLINE): ASM_OUTPUT_DWARF_STRING
	has been changed to not include a newline. Use this macro instead.
	(output_enumeral_list, const_value_attribute, name_attribute,
	comp_dir_attribute, prototyped_attribute, producer_attribute,
	inline_attribute, pure_or_virtual_attribute, output_inheritance_die,
	dwarfout_file_scope_decl, generate_new_sfname_entry,
	generate_macinfo_entry, dwarfout_init, dwarfout_finish): Use
	ASM_OUTPUT_DWARF_STRING_NEWLINE macro.

Mon Oct 26 13:35:02 1998  Richard Henderson  <rth@cygnus.com>

	* combine.c (subst): Process the inputs to a parallel asm_operands
	only once.

Mon Oct 26 13:32:31 1998  Richard Henderson  <rth@cygnus.com>

	* stmt.c (expand_asm_operands): Accept `=' or `+' at any position.

Mon Oct 26 12:53:14 1998  Jeffrey A Law  (law@cygnus.com)

	* tm.texi (ASM_OUTPUT_MAX_SKIP_ALIGN): Document.

Mon Oct 26 00:36:58 1998  Jeff Law  (law@cygnus.com)

	* version.c: Bump for snapshot.

Sun Oct 25 23:36:52 1998  Jason Merrill  <jason@yorick.cygnus.com>

	* stmt.c (expand_fixup): Set fixup->before_jump to a
	NOTE_INSN_DELETED instead of a NOTE_INSN_BLOCK_BEG.

Sun Oct 25 15:49:57 1998  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* Makefile.in (recog.o): Depend on toplev.h.
	(insn-emit.o): Depend on recog.h.
	(insn-peep.o): Depend on recog.h and insn-config.h.

	* combine.c (simplify_set): Remove unused variable `scratches'.

	* final.c (final_scan_insn): Wrap declaration of variables `vlen'
	and `idx' in macro conditional controlling their use.

	* genemit.c (main): Make the generated output file include
	recog.h.  Don't have it declare `insn_operand_constraint', since
	we get it from recog.h.

	* genpeep.c (main): Make the generated output file include
	insn-config.h and recog.h.

	* recog.c: Include toplev.h.
	(extract_insn): Remove unused variable `p'.

	* regclass.c (fix_register): Add missing braces around initializer
	for `what_option'.
	(allocate_reg_info): Move variable `i' into the scope where it is
	used.  Change its type to `size_t'.

Sun Oct 25 13:10:15 1998  Bernd Schmidt  <crux@pool.informatik.rwth-aachen.de>

	* reload.c (push_reload): When merging reloads, make sure
	that reload_in_reg and reload_in are from the same reload in
	all cases.

Sun Oct 25 12:07:00 1998  Mumit Khan  <khan@xraylith.wisc.edu>

	* i386/crtdll.h (CPP_PREDEFINES): Fix typo.
	* i386/mingw32.h (CPP_PREDEFINES): Likewise.

Fri Oct 23 23:42:03 1998  David Edelsohn  <edelsohn@gnu.org>

	* loop.c (loop_has_tablejump): New variable.
	(prescan_loop): Scan for it.
	(insert_bct): Replace explicit scan with use of it.
	* regclass.c (regclass): Restore loop variable j.
	(record_reg_classes): Deterine op_types modifiers and initialize
	classes[i] before matching constraints.  Handle matching
	constraints 5-9.

Fri Oct 23 13:55:48 1998  Jim Wilson  <wilson@cygnus.com>

	* m32r/m32r.c (gen_split_move_double): Call alter_subreg.  Delete
	subreg support.

Fri Oct 23 16:19:24 1998  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* mips.h (EXTRA_SPECS): Add missing initializers.

Fri Oct 23 16:08:39 1998  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* sparc.h (EXTRA_SPECS): Add missing initializers.
	(sparc_defer_case_vector): Provide a prototype.

	* svr4.h (ASM_OUTPUT_ASCII): Cast STRING_LIMIT to (long) when
	comparing it to the result of a pointer subtraction.

Fri Oct 23 15:34:14 1998  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* alpha.c (override_options): Use ISDIGIT(), not isdigit().  Cast
	the argument to (unsigned char).

	* alpha.h (EXTRA_SPECS): Add missing initializers.
	(ASM_GENERATE_INTERNAL_LABEL): Ensure the argument matches the
	format specifier.

Fri Oct 23 13:12:35 1998  Jeffrey A Law  (law@cygnus.com)

	* flow.c (life_analysis_1): Enable "rescan" code after reload.
	(propagate_block): Delete dead code after reload.

	* sched.c (update_flow_info): Revert Oct 19, 1998 change.  Brings
	back Oct 15, 1998 change.
	* haifa-sched.c (update_flow_info): Likewise.
	* flow.c (life_analysis_1): Delete CLOBBER insns after reload.

	* mn10200.md (truncated shift): Accept constant inputs too.

Fri Oct 23 04:06:57 1998  Richard Earnshaw  (rearnsha@arm.com)

	* machmode.h (mode_mask_array): No longer const.
	* rtl.c (init_rtl): Fully initialize it if EXTRA_CC_MODES defined.

Fri Oct 23 11:19:06 1998  Martin v. Löwis  <loewis@informatik.hu-berlin.de>

	* frame.c: Somewhat explain `FDE'.
	Suggested by Brendan Kehoe

Fri Oct 23 00:56:11 1998  Jason Merrill  <jason@yorick.cygnus.com>

	* expr.c (pending_chain): Move up.
	(save_expr_status): Do save pending_chain.
	(restore_expr_status): And restore it.
	* function.h (struct function): Add pending_chain.

1998-10-23  Herman A.J. ten Brugge  <Haj.Ten.Brugge@net.HCC.nl>

	* reorg.c (relax_delay_slots): Fixed test for mostly_true_jump. The
	did not match the code.

Fri Oct 23 00:07:01 1998  Bernd Schmidt  <crux@pool.informatik.rwth-aachen.de>

	* regclass.c (regclass): Break out some code into new function
	scan_one_insn, and into regclass_init.
	(init_cost): New static variable, moved out of regclass.
	(regclass_init): Initialize it here, not in .
	(scan_one_insn): New static function, broken out of regclass.
	* recog.c (apply_change_group): Break out some code into new
	function insn_invalid_p.
	(insn_invalid_p): New static fn, broken out of apply_change_group.

Thu Oct 22 22:34:42 1998  Jim Wilson  <wilson@cygnus.com>

	* reload1.c (reload_as_needed): When rewrite POST_INC, verify
	reg_reloaded_contents matches incremented pseudo.

	* v850/v850.c (v850_reorg): Call alter_subreg.  Delete subreg support.

Fri Oct 23 11:11:56 1998  Michael Hayes  <m.hayes@elec.canterbury.ac.nz>

	* rtl.def (POST_MODIFY, PRE_MODIFY): New generalized operators for
	addressing modes with side effects.  These are currently
	placeholders for the C4x target.

Thu Oct 22 16:46:35 1998  Bernd Schmidt  <crux@pool.informatik.rwth-aachen.de>

	* loop.c (express_from): Make sure that when generating a PLUS of
	a PLUS, any constant expression appears on the outermost PLUS.

Thu Oct 22 15:46:23 1998  Per Bothner  (bothner@cygnus.com)

	* Makefile.in (distdir-cvs, distdir-start): Clean up so it
	works if "$(srcdir)" != ".".

Wed Oct 21 19:23:59 1998  Jim Wilson  <wilson@cygnus.com>

	* expmed.c (store_bit_field): If need to add a SUBREG, then remove
	existing SUBREG if we can, otherwise abort.

Wed Oct 21 09:58:51 1998  Mark Mitchell  <mark@markmitchell.com>

	* c-common.c (c_apply_type_quals_to_decl): Don't crash when
	`restrict' is applied to a non-pointer variable.

Wed Oct 21 09:18:58 1998  Mark Mitchell  <mark@markmitchell.com>

	* invoke.texi: Document -flang-isoc9x.

	* Makefile.in (OBJS): Add splay-tree.o.
	(c-common.o): Depend on rtl.h.
	(splay-tree.o): List dependencies and provide build rule.

	* rtl.h (record_alias_subset): New function.
	* alias.c: Include splay-tree.h.
	(alias_set_entry): New type.
	(CHECK_ALIAS_SETS_FOR_CONSISTENCY): Remove.
	(DIFFERENT_ALIAS_SETS_P): Use mem_in_disjoint_alias_sets_p.
	(mems_in_disjoin_alias_sets_p): New function.
	(alias_set_compare): Likewise.
	(insert_subset_children): Likewise.
	(get_alias_set_entry): Likewise.

	* tree.h (TYPE_RESTRICT): New macro.
	(TYPE_UNQUALIFIED): New manifest constant.
	(TYPE_QUAL_CONST): Likewise.
	(TYPE_QUAL_VOLATILE): Likewise.
	(TYPE_QUAL_RESTRICT): Likewise.
	(tree_type): Add restrict_flag.  Reduce count of free bits.
	(DECL_POINTER_ALIAS_SET): New macro.
	(DECL_POINTER_ALIAS_SET_KNOWN_P): Likewise.
	(tree_decl): Add pointer_alias_set.
	(build_qualified_type): New function.
	(build_type_variant): Define in terms of build_qualified_type.
	* tree.c (set_type_quals): New function.
	(make_node): Initialize DECL_POINTER_ALIAS_SET.
	(build_type_attribute_variant): Use build_qualified_type and
	set_type_quals.
	(build_type_variant): Rename, and modify, to become...
	(build_qualified_type): New function.
	(build_complex_type): Use set_type_quals.

	* c-tree.h (C_TYPE_OBJECT_P): New macro.
	(C_TYPE_FUNCTION_P): Likewise.
	(C_TYPE_INCOMPLETE_P): Likewise.
	(C_TYPE_OBJECT_OR_INCOMPLETE_P): Likewise.
	(c_apply_type_quals_to_decl): New function.
	(c_build_qualified_type): New function.
	(c_build_type_variant): Define in terms of c_build_qualified_type.
	(flag_isoc9x): Declare.
	* c-typeck.c (qualify_type): Use c_build_qualified_type.
	(common_type): Change to use TYPE_QUALS.
	(comptypes): Likewise.
	(convert_for_assignment): Likewise.
	* c-aux-info.c (gen_type): Likewise.  Deal with `restrict'.
	* c-decl.c (flag_isoc9x): Define.
	(c_decode_option): Handle -flang-isoc9x.
	(grokdeclarator): Update to handle restrict.  Use TYPE_QUALS,
	c_build_qualified_type, etc.  Use c_apply_type_quals_to_decl.
	* c-lex.c (init_lex): Deal with restrict.
	(init_lex): Don't treat restrict as a reserved word in
	-traditional mode, or without -flang-isoc9x.
	* c-lex.h (rid): Add RID_RESTRICT.
	* c-parse.gperf (restrict, __restrict, __restrict__): Make
	equivalent to RID_RESTRICT.
	* c-parse.in (TYPE_QUAL): Update comment.
	* c-common.c: Include rtl.h.
	(c_find_base_decl): New function.
	(c_build_type_variant): Rename, and modify, to become ...
	(c_build_qualified_type): New function.
	(c_apply_type_quals_to_decl): Likewise.
	(c_get_alias_set): For INDIRECT_REFs, check to see if we can find
	a particular alias set for the reference.
	* toplev.c (documented_lang_options): Add -flang-isoc9x.

Wed Oct 21 09:15:06 1998  Nick Clifton  <nickc@cygnus.com>

	* config/arm/arm.h (TARGET_SWITCHES): Document arm specific
	command line switches.

Tue Oct 20 10:04:51 1998  Graham  <grahams@rcp.co.uk>

	* reload.c (loc_mentioned_in_p): Add missing braces to bind
	else to correct if.

Mon Oct 19 16:34:05 1998  Tom Tromey  <tromey@cygnus.com>

	* gcc.c (option_map): Added --classpath and --CLASSPATH.

Tue Oct 20 10:59:02 1998  Gavin Romig-Koch  <gavin@cygnus.com>

	* regclass.c (fix_register): Add error message.
	* invoke.texi (-fcall-used-REG,-fcall-saved-REG): Note the
	  new error message.

Tue Oct 20 10:12:17 1998  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* c-decl.c (warn_missing_noreturn): New global variable.
	(c_decode_option): Check for new flags -W{no-}missing-noreturn.
	(finish_function): Implement missing noreturn warning.

	* c-tree.h (warn_missing_noreturn): Declare extern.

	* invoke.texi: Document new flags.

	* toplev.c (documented_lang_options): Add description.

Tue Oct 20 22:16:11 1998  Michael Hayes  <m.hayes@elec.canterbury.ac.nz>

	* config/c4x/c4x.c (c4x_parallel_process): Disable until BCT
	loop optimization stable for the C4x.
	(c4x_rptb_info_t, c4x_dump, c4x_rptb_in_range, c4x_rptb_unjumped_loop,
	c4x_rptb_find_comp_and_jump, c4x_rptb_loop_info_get,
	c4x_rptb_emit_init, c4x_rptb_process): Deleted (superseded by BCT
	loop optimization).
	(c4x_address_conflict): Be more paranoid when packing a volatile
	memref in a parallel load/store.

Tue Oct 20 21:56:05 1998  Michael Hayes  <m.hayes@elec.canterbury.ac.nz>

	* config/c4x/c4x.md (repeat_block_top, repeat_block_end,
	repeat_block_filler): Deleted.
	(*ashlqi3_set, *ashrqi3_const_set, *ashrqi3_nonconst_clobber):
	Condition code not set if destination register from 'c' class.
	(*subbqi3_carry_clobber): Fix typo.

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

	* reorg.c (steal_delay_list_from_target): Check for insns that
	modify the condition codes and effect the direction of the jump
	in the sequence.

Sat Oct 17 13:09:09 1998  Graham  <grahams@rcp.co.uk>

	* function.c (purge_addressof_1): Replace call to
	emit_insns_before() with emit_insn_before().

Mon Oct 19 19:34:03 1998  Mike Stump  <mrs@wrs.com>

	* libgcc2.c (__pure_virtual): Call __terminate instead of _exit.

Mon Oct 19 13:26:24 1998  Bernd Schmidt  <crux@pool.informatik.rwth-aachen.de>

	* jump.c (sets_cc0_p): Compile only if HAVE_cc0.

Mon Oct 19 11:40:56 1998  Jeffrey A Law  (law@cygnus.com)

	* gcse.c (compute_hash_table): Correctly identify hard regs which are
	clobbered across calls.

	* loop.c (scan_loop): Be more selective about what invariants are
	moved out of a loop.

Mon Oct 19 10:46:58 1998  Jeff Law  (law@cygnus.com)

	* version.c: Bump for snapshot.

Mon Oct 19 11:40:56 1998  Jeffrey A Law  (law@cygnus.com)

	* libgcc2.c (eh_context_static): Do not call malloc to allocate the
	static eh_context structure.

Mon Oct 19 10:45:40 1998  Bernd Schmidt  <crux@pool.informatik.rwth-aachen.de>

	* combine.c (recog_for_combine): Lose PADDED_SCRATCHES arg.  All
	callers changed.
	(try_combine): Don't update max_scratch.
	* flow.c (max_scratch, num_scratch): Delete variables.
	(life_analysis_1): Don't initialize max_scratch.
	(propagate_block): Don't update max_scratch.
	(mark_set_1): Don't increment num_scratch.
	* regs.h (max_scratch): Delete declaration.

Mon Oct 19 10:28:15 1998  Jeffrey A Law  (law@cygnus.com)

	* reload1.c (reload_reg_free_before_p): Hack.  Return 0 if EQUIV
	is nonzero.  This is temporary!

	* sched.c (update_flow_info): Handle death notes made invalid by
	instruction splitting.  Partially reverts Oct 15, 1998 patch.
	* haifa-sched.c (update_flow_info): Likewise.

Sun Oct 18 17:31:26 1998  Jeffrey A Law  (law@cygnus.com)

	* function.c (uninitialized_vars_warning): Do not warn for a VAR_DECL
	if it has a nonzero DECL_INITIAL.

Sat Oct 17 23:18:08 1998  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* Makefile.in (flow.o): Depend on recog.h.

	* cpplib.h (directive_table): Add missing initializiers.
	(finclude): Change type of variable `bsize' to size_t.

	* cse.c (rtx_cost): Mark parameter `outer_code' with ATTRIBUTE_UNUSED.

	* dwarfout.h (dwarfout_label): Wrap prototype in macro RTX_CODE.

	* fix-header.c (lookup_std_proto): Cast the result of `strlen' to
	`int' when comparing against one.
	(cpp_file_line_for_message): Mark parameter `pfile' with
	ATTRIBUTE_UNUSED.
	(cpp_fatal): Mark parameter `pfile' with ATTRIBUTE_UNUSED.

	* flow.c: Include recog.h.
	(sbitmap_copy): Cast arguments 1 & 2 of `bcopy' to (PTR).

	* function.c (thread_prologue_and_epilogue_insns): Mark parameter
	`f' with ATTRIBUTE_UNUSED.
	(reposition_prologue_and_epilogue_notes): Likewise.

	* genopinit.c (gen_insn): Cast argument of ctype functions to
	`unsigned char'.

	* haifa-sched.c: Include recog.h.
	(blockage_range): Cast result of UNIT_BLOCKED macro to (int) when
	comparing against one.

	* libgcc2.a (__throw): Revert ATTRIBUTE_UNUSED change for now.

	* mips-tfile.c (parse_end): Cast the argument of ctype function to
	`unsigned char'.
	(parse_ent): Likewise.
	(parse_input): Likewise.

	* optabs.c (init_libfuncs): Likewise.

	* protoize.c (find_rightmost_formals_list): Likewise.

	* recog.h (const_double_operand): Fix typo in prototype.

	* tlink.c (scan_linker_output): Cast the argument of ctype
	function to `unsigned char'.

	* toplev.c (check_lang_option): Cast the result of `strlen' to
	`int' when comparing against one.

Sat Oct 17 13:09:09 1998  Graham  <grahams@rcp.co.uk>

	* gcse.c (dump_cuid_table): Correct typo.

Sat Oct 17 11:02:47 1998  Nick Clifton  <nickc@cygnus.com>

	* toplev.c (display_help): Prepend '-m' to target specific
	options.
	(check_lang_option): Ignore text after end of first word of a
	language specific option.

Sat Oct 17 02:26:03 1998  Bernd Schmidt  <crux@pool.informatik.rwth-aachen.de>

	* reload1.c (reg_used_by_pseudo): New static variable.
	(choose_reload_regs): Initialize it.
	Use it instead of testing spill_reg_order to determine whether a
	pseudo is live in a hard register across the current insn.
	Fix a typo in a reference to reload_reg_rtx.

	* flow.c (propagate_block): Replace code that computes and uses
	regs_sometimes_live with simpler code that just walks the set of
	currently live registers.

	* Makefile.in (insn-extract.o): Fix dependencies.
	* genextract.c (main): Generate includes for insn-config.h and
	recog.h.
	Delete generation of declarations which are now in recog.h.
	* genrecog.c (main): Delete generation of definitions which are
	now in recog.c.
	* local-alloc.c (block_alloc): Use extract_insn and the variables
	it sets up instead of looking up values by insn_code.
	* recog.c (recog_operand, recog_operand_loc, recog_dup_loc,
	recog_dup_num): Define here instead of generating the definition in
	genrecog.c.
	(recog_n_operands, recog_n_dups, recog_n_alternatives,
	recog_operand_mode, recog_constraints, recog_operand_address_p):
	New variables.
	(extract_insn): New function.
	* recog.h (extract_insn): Declare function.
	(which_alternative, recog_n_operands, recog_n_dups,
	recog_n_alternatives, recog_operand_mode, recog_constraints,
	recog_operand_address_p): Declare variables.
	* regclass.c (n_occurrences): New static function.
	* reload.c (n_occurrences): Delete function.
	(find_reloads): Use extract_insn.
	* reload.h (n_occurrences): Delete declaration.

Sat Oct 17 01:17:51 1998  Jeffrey A Law  (law@cygnus.com)

	* reload1.c (reload_as_needed): Fix test for when to call
	update_eliminable_offsets.

Fri Oct 16 20:40:50 1998  J"orn Rennecke  <amylaar@cygnus.co.uk>

	Fix consistency problems with reg_equiv_{mem,address};
	Improve reload inheritance;

	* reload.c (reload_out_reg): New variable.
	(loc_mentioned_in_p, remove_address_replacements): New functions.
	(remove_replacements): Deleted.
	(push_reload): Set reload_out_reg[i].
	When merging, also set reload_{in,out}_reg[i], and remove
	duplicate address reloads.
	(combine_reloads): Copy reload_out_reg[i].
	(find_reloads): Do make_memloc substitution also when
	reg_equiv_memory_loc[regno] and num_not_at_initial_offset
	are both nonzero.
	Include *recog_operand_loc in commutativity operand changes.
	Generate optional output reloads.
	Delete reference to n_memlocs.  Don't set *recog_operand_loc before
	processing operands.  Call make_memloc in reg_equiv_address code.
	Set *recog_operand_loc only after processing operands, and only
	if replace is true.  Return a value.
	When changing address reload types for operands that didn't get
	reloaded, use RELOAD_FOR_OPADDR_ADDRESS for
	RELOAD_FOR_INPADDR_ADDRESS / RELOAD_FOR_OUTADDR_ADDRESS reloads.
	Don't emit USEs for pseudo SUBREGs when not replacing.
	(find_reloads_address): Do make_memloc substitution also when
	reg_equiv_memory_loc[regno] and num_not_at_initial_offset
	are both nonzero.
	(find_reloads_toplev): Likewise.
	Call make_memloc in reg_equiv_address code.
	(debug_reload_to_stream): Add code to output reload_out_reg.
	(make_memloc): Delete local variable i, ifdefed out code, and
	references to memlocs and n_memlocs.
	(memlocs, n_memlocs): Delete.
	(push_secondary_reload): Clear reload_out_reg.
	(find_reloads_address_1): Provide memrefloc argument to all calls
	to find_reloads_address.
	In AUTO_INC code, handle non-directly addressable equivalences properly.
	* reload.h (reload_out_reg, num_not_at_initial_offset): Declare.
	(find_reloads): Add return type.
	(remove_address_replacements, deallocate_reload_reg): Declare.
	* reload1.c (num_not_at_initial_offset): No longer static.
	(delete_address_reloads, delete_address_reloads_1): Likewise.
	(deallocate_reload_reg): New function.
	(spill_reg_stored_to): New array.
	(eliminate_regs): Don't substitute from reg_equiv_memory_loc.
	(eliminate_regs_in_insn): Move assignments of previous_offset and
	max_offset fields, and recalculation of num_not_at_initial_offset
	into new static function:
	(update_eliminable_offsets) .
	(reload_as_needed): Call update_eliminable_offsets after calling
	find_reloads.
	Call forget_old_reloads_1 with contents of reloaded auto_inc
	expressions if the actual addressing can't be changed to match the
	auto_inc.
	(choose_reload_regs): For inheritance, replace
	reload_reg_free_before_p test with reload_reg_used_at_all test, and
	remove stand-alone reload_reg_used_at_all test.
	Use reload_out_reg to determine which reload regs have output reloads.
	Treat reload_override_in more similar to inherited reloads.
	Handle (subreg (reg... for inheritance.
	For flag_expensive_optimizations, add an extra pass to remove
	unnecessary reloads from known working inheritance.
	Delete obsolete code for pseudos replaced with MEMs.
	Handle inheritance from auto_inc expressions.
	(emit_reload_insns): If reload_in is a MEM, set OLD to
	reload_in_reg[j].
	Don't reload directly from oldequiv; if it's a pseudo with a
	stack slot, use reload_in[j].
	Check that reload_in_reg[j] is a MEM before replacing reload_in
	from reg_reloaded_contents.
	Include non-spill registers in reload inheritance processing.
	Also try to use reload_out_reg to set spill_reg_store /
	reg_last_reload_reg.
	In code to set new_spill_reg_store, use single_set to find out if
	there is a single set.
	Add code that allows to delete optional output reloads.
	Add code to allow deletion of output reloads that use no spill reg.
	At the end, set reload_override_in to oldequiv.
	Also call delete_output_reload if reload_out_reg is equal to old
	in oldequiv code.
	Add code to call delete_output_reload for stores with no matching load.
	Set / use spill_reg_stored_to.
	Handle case where secondary output reload uses a temporary, but
	actual store isn't found.
	When looking for a store of a value not loaded in order to call
	delete_output_reload, count_occurrences should return 0 for no
	loads; but discount inherited input reloadill_reg_stored_to.
	Do checks for extra uses of REG.  Changed all
	callers.
	Use delete_address_reloads.
	(reload): Take return value of find_reloads into account.
	If a no-op set needs more than one reload, delete it.
	(reload_reg_free_before_p): RELOAD_FOR_INPUT
	can ignore RELOAD_FOR_INPUT_ADDRESS / RELOAD_FOR_INPADDR_ADDRESS
	for the same operand.
	(clear_reload_reg_in_use): Check for other reloads that keep a
	register in use.
	(reload_reg_free_for_value_p): Handle RELOAD_FOR_OPERAND_ADDRESS /
	RELOAD_FOR_OPADDR_ADDR.
	Take into account when an address address reload is only needed
	for the address reload we are considering.
	(count_occurrences): Use rtx_equal_p for MEMs.
	(inc_for_reload): Return instruction that stores into RELOADREG.
	New argument two, IN, and rtx.  Changed all callers.
	(calculate_needs_all_insns, reload_as_needed):
	Don't clear after_call for a CLOBBER.
	Keep track of how many hard registers need to be copied from
	after_call, and don't clear after_call before we have seen
	that much copies, or we see a different instruction.

Fri Oct 16 10:58:23 1998  Jeffrey A Law  (law@cygnus.com)

	* flow.c (find_basic_blocks_1): Do not delete unreachable blocks
	after reload has completed.

Fri Oct 16 17:26:10 1998  Dave Brolley  <brolley@cygnus.com>

	* cpplib.c (cpp_get_token): Replace whitespace that occurs between
	a macro name and the next token with a single blank if that whitespace
	is in a macro buffer and the next token is not '('.

Fri Oct 16 15:44:02 1998  Dave Brolley  <brolley@cygnus.com>

	* cccp.c (rescan): Handle multibyte characters ending in backslash.
	(rescan): Likewise.
	(skip_if_group): Likewise.
	(skip_to_end_of_comment): Likewise.
	(macarg1): Likewise.
	(discard_comments): Likewise.
	(change_newlines): Likewise.

Fri Oct 16 15:26:24 1998  Dave Brolley  <brolley@cygnus.com>

	* c-lex.c (yylex): Fix unaligned access of wchar_t.

Fri Oct 16 10:47:53 1998  Nick Clifton  <nickc@cygnus.com>

	* config/arm/arm.h (TARGET_SWITCHES): Add --help documentation.
	(TARGET_OPTIONS): Add --help documentation.

Fri Oct 16 11:49:01 1998  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* rtl.h (sets_cc0_p): Revert Oct 14 ATTRIBUTE_NORETURN change.

Fri Oct 16 07:08:46 1998  Bruce Korb  <korb@datadesign.com>

	* fixinc/* Moved in from ../contrib directory in preparation
	for integrating it into the normal build process.  In particular,
	fixinc/Makefile.in must be config-ed into the build directory
	as fixinc/Makefile.  Proposed patches to ./Makefile.in and
	./configure.in will be "in the mail" momentarily.

Fri Oct 16 08:13:46 1998  David S. Miller  <davem@pierdol.cobaltnet.com>

	* cse.c (cse_basic_block): Fixup hash flushing loop so we do not
	accidently walk into the free list.  Comment how that can happen.
	(invalidate): Fix indentation.

Thu Oct 15 23:53:29 1998  Bernd Schmidt  <crux@pool.informatik.rwth-aachen.de>
			  Jeffrey A Law  (law@cygnus.com)

	* flow.c (life_analysis_1): Do not clobber regs_ever_live after
	reload.  Never perform rescans of the insn chain after reload.
	(propagate_block): Do not delete insn or create new autoinc addressing
	modes after reload.

	* jump.c (jump_optimize): Unconditionally use the code that was
	previously conditional on PRESERVE_DEATH_INFO_REGNO_P.
	* reload1.c (reload): When reloading is finished, delete all
	REG_DEAD and REG_UNUSED notes.
	(emit_reload_insns): Delete all code that was conditional on
	PRESERVE_DEATH_INFO_REGNO_P.
	(no_longer_dead_regs): Delete variable.
	(reload_cse_delete_death_notes): Delete function.
	(reload_cse_no_longer_dead): Delete function.
	(reload_cse_regs_1): Delete all code to handle deletion of death
	notes.
	(reload_cse_noop_set_p): Likewise.
	(reload_cse_simplify_set): Likewise.
	(reload_cse_simplify_operands): Likewise.
	(reload_cse_move2add): Likewise.
	* reorg.c (used_spill_regs): Delete declaration.
	(max_label_num_after_reload): Delete declaration.
	(find_dead_or_set_registers): Don't assume that spill regs are
	dead at a CODE_LABEL.
	* rtlanal.c (dead_or_set_regno_p): Death notes are always accurate,
	even after reload.
	* sched.c (sched_analyze_insn): Likewise.
	(update_flow_info): Likewise.
	* haifa-sched.c (sched_analyze_insn): Likewise.
	(update_flow_info): Likewise.
	* tm.texi (PRESERVE_DEATH_INFO_REGNO_P): Delete documentation.
	* toplev.c (max_label_num_after_reload): Delete variable.
	(rest_of_compilation): Don't set max_label_num_after_reload.
	Call life_analysis after reload_cse_regs if optimizing.
	* config/gmicro/gmicro.h: Delete comment referring to
	PRESERVE_DEATH_INFO_REGNO_P.
	* config/i386/i386.h: Likewise.
	* config/m88k/m88k.h: Likewise.
	* config/m32r/m32r.h (PRESERVE_DEATH_INFO_REGNO_P): Delete definition.
	* config/sh/sh.h: Likewise.

Thu Oct 15 19:48:41 1998  David Edelsohn  <edelsohn@gnu.org>

	* loop.c (strength_reduce): Restore marking bct_p as
	ATTRIBUTE_UNUSED.
	* rs6000.c (optimization_options): Change #ifdef HAIFA to
	HAVE_decrement_and_branch_on_count.
	(small_data_operand): Remove TARGET_ELF condition for marking
	parameters ATTRIBUTE_UNUSED.

Thu Oct 15 11:45:51 1998  Robert Lipe  <robertl@dgii.com>

	* config/i386/sco5.h (MAX_OFILE_ALIGNMENT): Define.
	(SELECT_SECTION): Resync with svr4.h.

Thu Oct 15 12:42:13 1998  David Edelsohn  <edelsohn@gnu.org>

	* loop.c (strength_reduce): Undo Oct 14 change marking bct_p
	ATTRIBUTE_UNUSED.

Thu Oct 15 00:57:55 1998  Robert Lipe  <robertl@dgii.com>

	* c-pragma.c (handle_pragma_token): Test for null tree before
	dereferencing TREE_CODE.

Thu Oct 15 17:36:48 1998  Michael Hayes  <m.hayes@elec.canterbury.ac.nz>

	* config/c4x/c4x.c: Convert to use GEN_INT.
	(c4x_parallel_process): Rework to handle new repeat loop structure.

	* config/c4x/c4x.md: Convert to use GEN_INT.
	(rptb_end): Convert to use GE test.  Replace uses with clobbers.
	(decrement_and_branch_on_count): Likewise.

	* config/c4x/c4x.h (REPEAT_BLOCK_PROCESS): Deleted hook now that
	loop.c has the desired functionality.
	(rc_reg_operand): New prototype.

	* config/c4x/t-c4x: Can now build all front ends.

Wed Oct 14 23:27:08 1998  Didier FORT  (didier.fort@fedex.com)

	* fixincludes: Fix up rpc/{clnt,svr,xdr}.h for SunOS.

Wed Oct 14 22:13:28 1998  Joel Sherrill  (joel@OARcorp.com)

	* Makefile.in (stmp-fixinc): Do not install assert.h if not desired.
	* config/t-rtems: Do not install assert.h -- use newlib's.

Wed Oct 14 21:57:08 1998  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* combine.c (combine_instructions): When finished, call init_recog.
	* regmove.c (optimize_reg_copy_3): Reject volatile MEMs.

Wed Oct 14 16:10:22 1998  Per Bothner  <bothner@cygnus.com>

	* toplev.c: If flag_syntax_only, don't open or write assembler file.

Wed Oct 14 13:26:05 1998  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* cppalloc.c (memory_full): Mark function prototype with
	ATTRIBUTE_NORETURN.

	* demangle.h (collect_exit): Likewise.

	* fix-header.c (v_fatal, fatal): Likewise.

	* gcc.c (pfatal_with_name, pfatal_pexecute, fatal, fancy_abort):
	Likewise.

	* gcov.c (print_usage): Likewise.

	* genattr.c (fatal, fancy_abort): Likewise.

	* genattrtab.c (fatal, fancy_abort): Likewise.

	* gencodes.c (fatal, fancy_abort): Likewise.

	* genconfig.c (fatal, fancy_abort): Likewise.

	* genemit.c (fatal, fancy_abort): Likewise.

	* genextract.c (fatal, fancy_abort): Likewise.

	* genflags.c (fatal, fancy_abort): Likewise.

	* genopinit.c (fatal, fancy_abort): Likewise.

	* genoutput.c (fatal, fancy_abort): Likewise.

	* genpeep.c (fatal, fancy_abort): Likewise.

	* genrecog.c (fatal, fancy_abort): Likewise.

	* libgcc2.c (__eprintf, __default_terminate, __sjthrow,
	__sjpopnthrow, __throw): Likewise.

	* objc/objc-act.c (objc_fatal): Likewise.

	* protoize.c (usage, aux_info_corrupted,
	declare_source_confusing): Likewise.

	* rtl.c (dump_and_abort): Likewise.

	* rtl.h (sets_cc0_p): Likewise.

	* toplev.c (float_signal, pipe_closed): Likewise.

1998-10-14  Andreas Schwab  <schwab@issan.cs.uni-dortmund.de>

	* dwarf2out.c (expand_builtin_dwarf_reg_size): Look at all ranges
	when generating the decision tree for the general case.

	* config/m68k/m68k.h (HARD_REGNO_MODE_OK): Don't accept modes
	wider that 12 bytes in fpu regs or wider than 8 byte in fpa regs.

Wed Oct 14 11:14:02 1998  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* Makefile.in (sched.o): Depend on recog.h.

	* alias.c (REG_BASE_VALUE): Cast the result of REGNO() macro to
	(unsigned) when comparing against one.
	(find_base_value): Likewise.
	(record_base_value): Cast variable `regno' to (unsigned) when
	comparing against one.  Cast the result of REGNO() macro to
	(unsigned) when comparing against one.
	(memrefs_conflict_p): Change type of variables `r_x' and `r_y'  to
	unsigned.
	(init_alias_analysis): Add unsigned variable `ui'.  Use it as loop
	variable where an unsigned index is needed.

	* caller-save.c (init_caller_save): Cast `-1' to (enum insn_code)
	before comparing against one.

	* collect2.c: Add prototypes for functions `error', `fatal' and
	`fatal_perror'.  Make these functions take variable arguments
	instead of faking it with a fixed number of args.
	(write_c_file_stat): Cast the argument of ctype macro to (unsigned
	char).

	* combine.c (can_combine_p): Mark parameter `pred' with
	ATTRIBUTE_UNUSED.
	(find_split_point): Cast variable `src' to (unsigned
	HOST_WIDE_INT) when comparing against one.
	(simplify_rtx): Cast 1 to (unsigned HOST_WIDE_INT) in shift.
	(simplify_logical): Likewise.
	(force_to_mode): Cast result of INTVAL() macro to (unsigned
	HOST_WIDE_INT) when comparing against one.  Cast 1 to (unsigned
	HOST_WIDE_INT) in shift.
	(simplify_and_const_int): Cast result of INTVAL() macro to
	`unsigned HOST_WIDE_INT' when comparing against one.
	(merge_outer_ops): Cast variable const0 to `unsigned
	HOST_WIDE_INT' when comparing against the result of
	GET_MODE_MASK() macro.
	(simplify_comparison): Likewise for variable `c0'.  Cast variable
	`const_op' to `unsigned HOST_WIDE_INT' when comparing against
	one.  Cast `1' to `unsigned HOST_WIDE_INT' in shift.  Cast the
	result of `GET_MODE_MASK()/2' to `HOST_WIDE_INT' when comparing
	against one.  Cast `1' to `unsigned HOST_WIDE_INT' in shift.  Cast
	result of INTVAL() macro to `unsigned HOST_WIDE_INT' when
	comparing against one.
	(distribute_notes): Wrap variable `cc0_setter' in macro `HAVE_cc0'.

	config/mips/mips.c (gen_int_relational): Cast result of INTVAL()
	macro to `unsigned HOST_WIDE_INT' when comparing against one.
	(output_block_move): Cast `sizeof' expression to (int) when
	comparing against one.
	(function_arg): Cast BITS_PER_WORD to `unsigned' when comparing
	against one.
	(save_restore_insns): Cast `base_offset' to `long' to match format
	specifier in fprintf.

	* config/mips/mips.h (Pmode): Cast the result of `Pmode' macro
	to `enum machine_mode'.

	* flow.c (life_analysis_1): Remove unused variable `insn'.

	* gcc.c (translate_options): Move variables `j' and `k' into the
	scope in which they are used.  Change their types to `size_t'.
	(set_spec): Cast the argument of ctype macro to `unsigned char'.
	(read_specs): Likewise.
	(process_command): Cast `sizeof' to (int) when comparing against one.
	(do_spec_1): Cast the argument of ctype macro to `unsigned char'.
	(handle_braces): Cast both sides of `==' expression to `long' to
	ensure sign matching.
	(main): Cast variable `i' to `int' when comparing against one.

	* gcov-io.h (__fetch_long): Change type of parameter `bytes' from
	int to size_t.  Cast variable `i' to size_t when comparing against
	one.

	* genattrtab.c (convert_set_attr_alternative): Remove unused
	parameter `insn_code'.  All callers changed.
	(convert_set_attr): Likewise.

	* genrecog.c (add_to_sequence): Cast result of XVECLEN() macro to
	size_t when comparing against one.  Likewise for variable `len'.

	* global.c (global_alloc): Cast variable `max_regno' to size_t
	when comparing against one.  Likewise for variable `max_allocno'.

	* jump.c (sets_cc0_p): Mark parameter `x' with ATTRIBUTE_UNUSED.

	* local-alloc.c (validate_equiv_mem_from_store): Mark parameter
	`set' with ATTRIBUTE_UNUSED.
	(find_free_reg): Cast `sizeof' expression to (int) when comparing
	against one.

	* loop.c (count_loop_regs_set): Remove unused variable `dest'.
	(strength_reduce): Mark parameter `bct_p' with ATTRIBUTE_UNUSED.
	(get_condition): Cast variable `const_val' to `unsigned
	HOST_WIDE_INT' when comparing against one.  Cast unsigned
	expression to HOST_WIDE_INT when comparing against one.
	(insert_loop_mem): Mark parameter `data' with ATTRIBUTE_UNUSED.
	(load_mems_and_recount_loop_regs_set): Cast variable `nregs' to
	`unsigned' when comparing against one.

	* protoize.c (is_id_char): Change type of parameter `ch' to
	unsigned char.
	(munge_compile_params): Cast argument of ctype macro to (const
	unsigned char).
	(process_aux_info_file): Cast variable `aux_info_size' to int when
	comparing against one.
	(forward_to_next_token_char): Cast argument of ctype macro to
	`const unsigned char'.
	(edit_formals_lists): Likewise.
	(find_rightmost_formals_list): Likewise.
	(add_local_decl): Likewise.
	(add_global_decls): Likewise.
	(edit_fn_definition): Likewise.
	(do_cleaning): Likewise.
	(scan_for_missed_items): Likewise.
	(edit_file): Cast variable `orig_size' to (int) when comparing
	against one.
	(main): Cast argument of ctype macro to `const unsigned char'.

	* recog.c (const_int_operand): Mark parameter `mode' with
	ATTRIBUTE_UNUSED.

	* regclass.c (record_reg_classes): Change type of variable `c' to
	`unsigned char'.  Cast `char' array index to `unsigned char'.

	* reload.c (push_secondary_reload): Cast argument to
	REG_CLASS_FROM_LETTER() macro to `unsigned char'.

	* reload1.c (calculate_needs): Cast `char' array index to
	`unsigned char'.
	(set_label_offsets): Change type of variable `i' to unsigned int.
	Cast result of XVECLEN() macro to unsigned when comparing against
	one.
	(mark_not_eliminable): Change type of variable `i' to unsigned.
	(order_regs_for_reload): Likewise.  Cast `max_regno' to unsigned
	when comparing against one.
	(reload_as_needed): Cast macro NUM_ELIMINABLE_REGS to (int) when
	comparing against one.
	(choose_reload_regs): Hide unused label `fail'.
	(reload_cse_simplify_operands): Cast `char' array index to
	`unsigned char'.
	(reload_combine_note_store): Mark parameter `set' with
	ATTRIBUTE_UNUSED.  Cast UNITS_PER_WORD to unsigned when comparing
	against one.
	(reload_cse_move2add): Remove unused variable `src2'.

	* sched.c: Include recog.h.
	(sched_note_set): Remove unused parameter `b'.  All callers
	changed.
	(split_hard_reg_notes): Likewise for parameter `orig_insn'.
	(blockage_range): Cast result of UNIT_BLOCKED() macro to (int)
	when comparing against one.

	* stupid.c (stupid_find_reg): Mark parameter `changes_size' with
	ATTRIBUTE_UNUSED.  Cast `sizeof' expression to (int) when
	comparing against one.

	* unroll.c (precondition_loop_p): Remove unused parameter
	`loop_end'.  All callers changed.

Tue Oct 13 22:12:11 1998  Bernd Schmidt  <crux@pool.informatik.rwth-aachen.de>

	* reload1.c (maybe_fix_stack_asms): New static function.
	(reload): Call it.

	* reload.h (compute_use_by_pseudos): Declare.

	* reload1.c (spilled_pseudos, insns_need_reload): New variables.
	(something_needs_reloads): Delete variable.
	(finish_spills): New function.
	(compute_use_by_pseudos): New function.

	(delete_caller_save_insns): Lose argument FIRST.  All callers changed.
	Use the reload_insn_chain instead of walking the rtl directly.

	(reload): Allocate and free spilled_pseudos.
	Ensure that all calls of spill_hard_reg are followed by a call to
	finish_spills.
	Use the insns_need_reload list instead of something_needs_reloads
	to find out if reload_as_needed must be called.
	Clear unused_insn_chains at the end.

	(calculate_needs_all_insns): Lose FIRST parameter.  All callers
	changed.
	Delete code to keep track of current basic block.
	Walk reload_insn_chain instead of the rtl structure.  Build the
	insns_need_reload chain.
	Remember which insns need reloading/elimination by setting the
	appropriate fields in struct insn_chain, not by putting modes on the
	insn.

	(calculate_needs): Lose THIS_BLOCK arg.  Accept arg CHAIN instead of
	arg INSN.  All callers changed.
	Delete declaration of struct needs.
	Don't set something_needs_reloads.
	Record insn needs in the CHAIN argument.

	(spill_hard_reg): Record the affected pseudos in spilled_pseudos.

	(reload_as_needed): Lose FIRST arg.  All callers changed.
	Walk the reload_insn_chain instead of the rtx structure.
	Delete code to keep track of current basic block.
	Rename one of the NEXT variables to OLD_NEXT.

	(allocate_reload_reg): Accept arg CHAIN instead of arg INSN.  All
	callers changed.
	(choose_reload_regs): Likewise.

	(emit_reload_insns): Replace INSN and BB args with arg CHAIN.  All
	callers changed.

	* caller-save.c (MOVE_MAX_WORDS): New macro.  Use it throughout
	instead of (MOVE_MAX / UNITS_PER_WORD) computation.
	(hard_regs_live, hard_regs_need_restore): Delete variables.
	(n_regs_saved): Now static.
	(referenced_regs, this_insn_sets): New variables.

	(setup_save_areas): Restructure the code a bit.

	(restore_referenced_regs): Delete function.
	(mark_referenced_regs): New function, similar to the old
	restore_referenced_regs, but mark registers in referenced_regs.

	(clear_reg_live): Delete function.
	(mark_set_regs): Renamed from set_reg_live.  All callers changed.
	Only mark registers in this_insn_sets.

	(save_call_clobbered_regs): Rework this function to walk the
	reload_insn_chain instead of using the list of instructions directly.
	Delete code to keep track of register lives, compute live regs on the
	fly from information in the chain.
	Instead of calling restore_referenced_regs, use mark_referenced_regs,
	then walk the set it computes and call insert_restore as appropriate.

	(insert_restore): Lose INSN and BLOCK args.  Add CHAIN arg.  All
	callers changed.
	Restructure the code a bit.  Test hard_regs_saved instead of
	hard_regs_need_restore.
	(insert_save): Lose INSN and BLOCK args.  Add CHAIN and TO_SAVE
	args.  All callers changed.
	Restructure the code a bit.  Use TO_SAVE to determine which regs to
	save instead of more complicated test.
	(insert_one_arg): Lose INSN and BLOCK args.  Add CHAIN arg.  All
	callers changed.
	Create a new insn_chain structure for the new insn and place it
	into the chain.

	* rtl.texi: Update documentation to reflect that reload no longer
	puts modes on the insns.

1998-10-14  Andreas Schwab  <schwab@issan.cs.uni-dortmund.de>

	* function.c (purge_addressof_1): Force the first argument of a
	CALL insn to memory.

Wed Oct 14 00:38:40 1998  Jeffrey A Law  (law@cygnus.com)

	* rtl.h: Delete duplicate prototypes.  Add some missing
	prototypes.
	* rtlanal.c (for_each_rtx): Formatting tweak.

1998-10-13  Herman A.J. ten Brugge  <Haj.Ten.Brugge@net.HCC.nl>

	* real.c (emdnorm and etoasc): Disable round to even for c4x target
	to be compatible with TI compiler.

	* Makefile.in (USER_H): Add va-c4x.h to definition.

Tue Oct 13 23:03:37 1998  Richard Henderson  <rth@cygnus.com>

	* function.c (purge_addressof_1): Fix typo in inequality: do
	bitfield optimization for equal mode sizes.
	* expmed.c (store_bit_field): Don't take subregs of subregs in
	the movstrict case.  Tidy a potential problem in the multi-word case.
	(extract_bit_field): Likewise.

Tue Oct 13 22:12:11 1998  Bernd Schmidt  <crux@pool.informatik.rwth-aachen.de>

	* flow.c (find_basic_blocks): Emit NOPs after normal calls in this
	function.
	Compute max_uid_for_flow by calling get_max_uid after the scan.
	(find_basic_blocks_1): Don't emit NOPs here.

Tue Oct 13 22:05:49 1998  Richard Henderson  <rth@cygnus.com>

	* alias.c (base_alias_check): Accept new args for the modes of the
	two references.  Use them to determine if an AND can overlap.  Update
	all callers.
	(memrefs_conflict_p): Assume sizes are aligned, and uses them
	to determine if an AND can overlap.

Tue Oct 13 17:51:04 1998  Jim Wilson  <wilson@cygnus.com>

	* config/m68k/m68k.h (HARD_REGNO_MODE_OK): For FP regs, add REGNO >= 16
	check.  Add comment to document problems with TARGET_SUN_FPA version
	of this macro.
	* config/m68k/m68k.md (movxf+1): Support 'r'/'r' moves.

Tue Oct 13 17:46:18 1998  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* Makefile.in (gencheck.o): Depend on gansidecl.h.

	* c-common.c (print_char_table): Add missing initializers.
	(scan_char_table): Likewise.
	(time_char_table): Likewise.

	* c-decl.c (c_decode_option): Mark parameter `argc' with
	ATTRIBUTE_UNUSED.
	(declare_parm_level): Mark parameter `definition_flag' with
	ATTRIBUTE_UNUSED.

	* c-lex.c (readescape): Use `(unsigned)1' in shift.
	(yylex): Likewise.  Cast `sizeof' to an (int) when comparing
	against one.

	* calls.c (store_one_arg): Remove unused parameter `fndecl'.  All
	callers changed.
	(emit_call_1): Mark parameters `fndecl' and `funtype' with
	ATTRIBUTE_UNUSED.
	(expand_call): Cast result of MIN() to (unsigned int) when
	comparing against an unsigned value.

	* cccp.c (pcfinclude): Remove unused parameter `limit'.  All
	callers changed.
	(make_definition): Remove unused parameter `op'.  All callers
	changed.
	(create_definition): Cast REST_EXTENSION_LENGTH to (long) when
	comparing against the result of pointer arithmetic.

	* config/mips/mips.h (FUNCTION_ARG_BOUNDARY): Cast to (unsigned)
	when comparing against one.

	* dwarf2out.c (dwarf2out_frame_debug): Cast REGNO() and
	HARD_FRAME_POINTER_REGNUM to (unsigned) when comparing against
	one.
	(output_die): Move variable `i' into the scope in which it is
	used.  Change its type to `unsigned'.
	(output_die): Cast the result of `strlen' to (int) when passing it
	to ASM_OUTPUT_ASCII().
	(output_pubnames): Likewise.
	(output_line_info): Likewise.

	* emit-rtl.c (global_rtl): Add missing initializers.

	* explow.c (promote_mode): Mark parameter `for_call' with
	ATTRIBUTE_UNUSED.

	* expmed.c (expand_shift): Cast the result of GET_MODE_BITSIZE to
	`unsigned HOST_WIDE_INT' when comparing against one.
	(synth_mult): Change type of variable `cost' to int.
	(emit_store_flag): Use `(unsigned HOST_WIDE_INT) 1' in shift.

	* expr.c (copy_blkmode_from_reg): Cast BITS_PER_WORD to (unsigned)
	when comparing against one.
	(get_inner_reference): Change variable `alignment' to unsigned.
	(expand_expr): Cast the result of GET_MODE_ALIGNMENT to (unsigned
	int) when comparing against one.
	(expand_builtin_setjmp): Change type of variable `i' to size_t.

	* fold-const.c (div_and_round_double): Cast BASE to
	(HOST_WIDE_INT) when comparing against one.

	* gencheck.c: Include gansidecl.h.
	(main): Mark parameter `argv' with ATTRIBUTE_UNUSED.

	* optabs.c (gen_cond_trap): Mark parameters `code', `op2' and
	`tcode' with ATTRIBUTE_UNUSED.

	* real.c (edivm): Cast constant value to (unsigned long) in
	expression compared against an unsigned value.

	* stmt.c (expand_return): Cast BITS_PER_WORD to (unsigned) when
	comparing against one.
	(expand_end_case): Cast CASE_VALUES_THRESHOLD to (unsigned int)
	when comparing against one.

	* stor-layout.c (mode_for_size): Cast MAX_FIXED_MODE_SIZE to
	(unsigned int) when comparing against one.  Likewise for
	GET_MODE_BITSIZE.
	(smallest_mode_for_size): Likewise.
	(save_storage_status): Mark parameter `p' with ATTRIBUTE_UNUSED.
	(restore_storage_status): Likewise.

	* toplev.c (debug_args): Add missing initializer.
	(f_options): Spelling correction.  Add missing initializers.
	(documented_lang_options): Likewise.
	(debug_end_source_file): Mark parameter `lineno' with
	ATTRIBUTE_UNUSED.

	* tree.c (valid_machine_attribute): Mark parameters `attr_args',
	`decl' and `type' with ATTRIBUTE_UNUSED.

	* varasm.c (decode_reg_name): Cast `sizeof' expression to (int)
	when comparing against one.
	(assemble_variable): Mark parameter `top_level' with
	ATTRIBUTE_UNUSED.
	(assemble_external_libcall): Mark parameter `fun' with
	ATTRIBUTE_UNUSED.
	(output_constant_pool): Mark parameters `fnname' and `fndecl' with
	ATTRIBUTE_UNUSED.

Tue Oct 13 12:51:04 1998  Nick Clifton  <nickc@cygnus.com>

	* config/v850/lib1funcs.asm (_udivsi3): Add .type declaration.
	Replace use of r5 with use of r19.

	* config/v850/v850.h (LINK_POINTER_REGNUM): Define.

	* config/v850/v850.c (compute_register_save_size): Allow for the
	fact that helper functions save all registers, not just those used
	by the function.

	Replace constant 31 with macro LINK_POINTER_REGNUM.

	* config/v850/v850.md: Use 'indirect_operand' rather than
	'memory_operand' for bit test/set/clear patterns.

Tue Oct 13 11:49:14 1998  Jason Merrill  <jason@yorick.cygnus.com>

	* mips/iris6.h (ASM_OUTPUT_WEAK_ALIAS): Call ASM_GLOBALIZE_LABEL.
	* varasm.c (assemble_start_function et al): Don't call
	ASM_GLOBALIZE_LABEL for weak symbols.

Tue Oct 13 11:37:45 1998  Nick Clifton  <nickc@cygnus.com>

	* cse.c (equiv_constant): Check for NULL return from
	gen_lowpart_if_possible().

Tue Oct 13 11:24:51 1998  Jeffrey A Law  (law@cygnus.com)

	* mn10200.md (addsi3, subsi3, negsi2): Only allow register operands.

	* collect2.c (main): Pass -EL/-EB through to the compiler.

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

	* expr.c (push_block): Handle targets where the stack grows
	to higher addresses, but args grow to lower addresses and
	ACCUMULATE_OUTGOING_ARGS is not defined.

Tue Oct 13 08:00:52 1998  Catherine Moore  <clm@cygnus.com>

	* config/v850/v850.c (print_operand): Extend meaning
	of 'c' operands to support .vtinherit.

Tue Oct 13 21:38:35 1998  Michael Hayes  <m.hayes@elec.canterbury.ac.nz>

	* config/c4x/c4x.c: Convert to gen_rtx_FOO.
	Added ATTRIBUTE_UNUSED to unused function arguments.
	(rc_reg_operand): New predicate.
	(c4x_rptb_insert): New function.
	(c4x_rptb_nop_p): Recognize modified rptb_top pattern.
	(c4x_optimization_options): New function.

	* config/c4x/c4x.md: Convert to gen_rtx_FOO.
	 (decrement_and_branch_on_count): New pattern.
	 (rptb_top): Modified pattern to work with BCT optimization.

	* config/c4x/c4x.h (RC_REG): New register class.
	(rc_reg_operand): Define prototype.
	(IS_RC_REG): New macro.
	(IS_RC_OR_PSEUDO_REG): New macro.
	(IS_RC_OR_PSEUDO_REGNO): New macro.
	(OPTIMIZATION_OPTIONS): Define.

Mon Oct 12 19:57:34 1998  Jason Merrill  <jason@yorick.cygnus.com>

	* collect2.c (extract_init_priority): No priority is 65535.

Mon Oct 12 12:10:37 1998  Alexandre Oliva  <oliva@dcc.unicamp.br>

	* Makefile.in (build_tooldir): New variable, same as old
	$(tooldir), but without depending on $(libdir)/$(unlibsubdir).
	(GCC_FOR_TARGET): Add -B$(build_tooldir)/bin/.
	(bootstrap, bootstrap2, bootstrap3, bootstrap4): Likewise.

	* configure.in (gxx_include_dir): Set default based on unlibsubdir.
	* Makefile.in (tooldir): Likewise.
	(cccp.o, cpplib.o): Use unlibsubdir implicitly through
	gxx_include_dir, includedir and tooldir.
	(protoize.o, unprotoize.o): Likewise.

Mon Oct 12 10:50:44 1998  Nick Clifton  <nickc@cygnus.com>

	* config/arm/arm.md: Replace (reg 24) with (reg:CC 24).

	* config/arm/thumb.c (thumb_override_options): Add warning about
	PIC code not being supported just yet.

Sun Oct 11 16:49:15 1998  John Wehle  (john@feith.com)

	* flow.c: Update comment.
	(notice_stack_pointer_modification): New static function.
	(record_volatile_insns): Use it.
	(mark_regs_live_at_end): Mark the stack pointer as alive
	at the end of the function if current_function_sp_is_unchanging
	is set.
	(life_analysis_1): Set current_function_sp_is_unchanging.
	* function.c: Define it.
	(init_function_start): Initialize it.
	* output.h: Declare it.
	* reorg.c (fill_simple_delay_slots, dbr_schedule): Mark
	the stack pointer as alive at the end of the function if
	current_function_sp_is_unchanging is set.
	* i386.c (ix86_epilogue): Optimize the restoring
	of the stack pointer.

Mon Oct 12 01:22:53 1998  Jeff Law  (law@cygnus.com)

	* version.c: Bump for snapshot.

Sun Oct 11 23:04:30 1998  Robert Lipe  <robertl@dgii.com>

	* c-pragma.c (handle_pragma_token): If passed a token instead
	of a tree, use that as the pack value.

Sun Oct 11 14:21:14 1998  Mark Mitchell  <mark@markmitchell.com>

	* flow.c (find_basic_blocks_1): Fix prototype.

Sun Oct 11 05:03:41 1998  Ken Raeburn  <raeburn@cygnus.com>

	* tree.h (DECL_NO_CHECK_MEMORY_USAGE): New macros.
	(struct tree_decl): New fields no_check_memory_usage.
	* c-common.c (enum attrs): Add A_NO_CHECK_MEMORY_USAGE.
	(init_attributes): Register it as a new attribute.
	(decl_attributes): Set flags on functions given that attribute.
	* c-decl.c (duplicate_decls): Merge new attribute.
	* expr.h (current_function_check_memory_usage): Declare new var.
	* calls.c, expr.c, function.c, stmt.c, alpha.c, clipper.c, m88k.c,
	pa.c, sparc.c: Replace uses of flag_check_memory_usage with
	current_function_check_memory_usage.
	* function.h: Add field to struct function.
	* function.c (current_function_check_memory_usage): Define it.
	(push_function_context_to, pop_function_context_from): Save and
	restore it.
	(expand_function_start): Set it, based on global flag and function
	attribute.

	* expr.c (expand_expr, case VAR_DECL): In memory-checking code, do
	check non-automatic variables, to permit detection of writes to
	read-only locations in embedded systems without memory management.
	* calls.c (store_one_arg): Use ARGS_SIZE_RTX to get size of argument
	when emitting chkr_set_right_libfunc call, even if the argument is
	BLKmode or variable-sized; don't abort.

	* optabs.c (init_optabs): Create Checker and __cyg_profile_*
	symbols in Pmode, not VOIDmode.

Sun Oct 11 01:03:05 1998  Zack Weinberg  <zack@rabi.phys.columbia.edu>

	* cppexp.c: When forcing unsigned comparisons, cast both sides
	of the operation.

	* cpphash.h: Move static declaration of hashtab[]...
	* cpphash.c: ...here.

	* cpplib.c: Cast difference of two pointers to size_t before
	comparing it to size_t.  Cast signed to unsigned
	before comparing to size_t. (FIXME: struct argdata should use
	unsigned buffer sizes.)
	* cpplib.h (struct cpp_reader): Declare token_buffer_size as
	unsigned int. (CPP_WRITTEN): Cast return value to size_t.
	(CPP_RESERVE): Parenthesize N for evaluation order, cast to
	size_t before comparison.

Sun Oct 11 00:15:29 1998  Jeffrey A Law  (law@cygnus.com)

	* flow.c (find_basic_blocks): Delete "live_reachable_p" argument.
	(find_basic_blocks_1): Similarly.
	* output.h (find_basic_blocks): Fix prototype.
	* gcse.c, toplev.c: Don't pass "live_reachable_p" argument to
	find_basic_blocks anymore.

Sat Oct 10 22:00:34 1998  Richard Henderson  <rth@cygnus.com>

	* basic-block.h (EXECUTE_IF_SET_IN_SBITMAP): New macro.
	(sbitmap_free, sbitmap_vector_free): New macros.
	* output.h (rtl_dump_file): Declare.

Sat Oct 10 17:01:42 1998  Jeffrey A Law  (law@cygnus.com)

	* regmove.c (optimize_reg_copy_3): Honor TRULY_NOOP_TRUNCATION.

Fri Oct  9 22:08:05 1998  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* fp-bit.c (SFtype): Don't implicitly use int in declaration.
	(DFtype): Likewise.
	(_fpdiv_parts): Remove unused parameter `tmp', all callers changed.
	(divide): Remove unused variable `tmp'.
	(si_to_float): Cast numeric constant to (SItype) before comparing
	it against one.

Fri Oct  9 16:03:19 1998  Graham  <grahams@rcp.co.uk>

	* flow.c (print_rtl_with_bb): Changed type of in_bb_p to match use.
	* gcc.c (add_preprocessor_option): Correct typo when allocating
	memory, sizeof() argument had one too many `*'.
	(add_assembler_option): Likewise.
	(add_linker_option): Likewise.
	* gcov.c (output_data): Likewise.
	* local-alloc.c (memref_used_between_p): Likewise.
	(update_equiv_regs): Likewise.
	* loop.c (strength_reduce): Likewise.
	* reg-stack.c (record_asm_reg_life): Likewise.
	(subst_asm_stack_reg): Likewise.
	* reorg.c (dbr_schedule): Likewise.

Fri Oct  9 15:57:51 1998  Bernd Schmidt  <crux@Pool.Informatik.RWTH-Aachen.DE>

	* flow.c (life_analysis_1): Break out some functions.
	(find_basic_blocks_1): Likewise.  Also move some variables out and
	make them static.
	Rename NONLOCAL_LABEL_LIST arg to NONLOCAL_LABELS and initialize
	new static var nonlocal_label_list with it.
	(active_eh_region, nested_eh_region, label_value_list,
	nonlocal_label_list): New static variables.
	(make_edges, delete_unreachable_blocks, delete_block): New static
	functions, broken out of find_basic_blocks_1.
	(record_volatile_insns, mark_regs_live_at_end, set_noop_p,
	noop_move_p): New static functions, broken out of life_analysis_1.

Fri Oct  9 15:49:29 1998  Richard Henderson  <rth@cygnus.com>

	* expmed.c (store_bit_field): Pun non-integral str_rtx modes.
	Take extra care for op0 now possibly being a subreg.
	(extract_bit_field): Likewise.
	* function.c (purge_addressof_1): Revert Oct 4 change.  Drop
	the reg to memory if there is no equal sized integral mode.
	* stor-layout.c (int_mode_for_mode): New function.
	* machmode.h: Prototype it.

Fri Oct  9 14:26:44 1998  Jeffrey A Law  (law@cygnus.com)

	* global.c (build_insn_chain): Verify no real insns exist past the
	end of the last basic block, then exit the loop.

Fri Oct  9 11:44:47 1998  David Edelsohn  <edelsohn@gnu.org>

	* loop.c (insert_bct): Ensure loop_iteration_var nonzero before use.

Thu Oct  8 21:59:47 1998  Dave Brolley  <brolley@cygnus.com>

	* emit-rtl.c (init_emit_once): Call INIT_EXPANDERS.

Thu Oct  8 22:03:45 1998  David Edelsohn  <edelsohn@gnu.org>

	* rs6000.h (RTX_COSTS): Add PROCESSOR_PPC604e cases.

Thu Oct  8 17:00:18 1998  Richard Henderson  <rth@cygnus.com>

	* flow.c (find_basic_blocks): Correctly determine when a call
	is within an exception region.

Thu Oct  8 17:15:04 1998  Jeffrey A Law  (law@cygnus.com)

	* toplev.c (output_file_directive): Use DIR_SEPARATOR, not '/'.

	* cpplib.h: Protect from multiple inclusions.
	* cpplib.c: Fix minor formatting problems.

	* i386/xm-cygwin32.h: Only define POSIX if it is not already defined.

	* jump.c (jump_optimize): Revert accidental patch.

	* Makefile.in (cpplib.o): Use unlibsubdir.

Thu Oct  8 12:50:47 1998  Jim Wilson  <wilson@cygnus.com>

	* loop.c (get_condition): Allow combine when either compare is
	VOIDmode.

Thu Oct  8 11:31:01 1998  Jeff Law  (law@cygnus.com)

	* version.c: Bump for snapshot.

Thu Oct  8 12:21:14 1998  Richard Frith-Macdonald  <richard@brainstorm.co.uk>

	* c-lex.c (remember_protocol_qualifiers): Handle RID_BYREF.
	(init_lex): Initialize ridpointers[RID_BYREF].
	* c-lex.h (enum rid): Add RID_BYREF.
	* c-parse.gperf: Add RID_BYREF as a type qualifier.
	* objc/objc-act.c (is_objc_type_qualifiers): Handle RID_BYREF.
	(encode_type_qualifiers): Similarly.
	* c-gperf.h: Rebuilt.

Thu Oct  8 05:56:00 1998  Jeffrey A Law  (law@cygnus.com)

	* c-common.c (type_for_mode): Only return TItype nodes when
	HOST_BITS_PER_WIDE_INT is >= 64 bits.
	* c-decl.c (intTI_type_node, unsigned_intTI_type_node): Only declare
	when HOST_BITS_PER_WIDE_INT is >= 64 bits.
	(init_decl_processing): Only create TItype nodes when
	HOST_BITS_PER_WIDE_INT is >= 64 bits.
	* c-tree.h (intTI_type_node, unsigned_intTI_type_node): Only declare
	when HOST_BITS_PER_WIDE_INT is >= 64 bits.

Thu Oct  8 05:05:34 1998  Bernd Schmidt  <crux@Pool.Informatik.RWTH-Aachen.DE>

	* stmt.c (n_occurrences): New static function.
	(expand_asm_operands): Verify that all constrains match in the
	number of alternatives.
	Verify that '+' or '=' are at the beginning of an output constraint.
	Don't allow '&' for input operands.
	Verify that '%' isn't written for the last operand.
	* reload.c (find_reloads): Abort if an asm is found with invalid
	constraints; all possible problems ought to be checked for earlier.

Thu Oct  8 04:26:20 1998  Michael Hayes  <m.hayes@elec.canterbury.ac.nz>

	* flags.h (flag_branch_on_count_reg): Always declare.
	* toplev.c (flag_branch_on_count_reg): Likewise.
	* toplev.c: Fix typos.

	* real.c (c4xtoe): Remove unused variables.  Add some missing parens.
	(toc4x): Similarly.

Thu Oct  8 01:25:22 1998  Richard Henderson  <rth@cygnus.com>

	* flow.c (find_basic_blocks): Calc upper bound for extra nops in
	max_uids_for_flow.
	(find_basic_blocks_1): Add a nop to the end of a basic block when
	a trailing call insn does not have abnormal control flow.
	* gcse.c (pre_transpout): New variable.
	(alloc_pre_mem, free_pre_mem, dump_pre_data): Bookkeeping for it.
	(compute_pre_transpout): Calculate it.
	(compute_pre_ppinout): Use it to eliminate impossible placements
	due to abnormal control flow through calls.
	(compute_pre_data): Call compute_pre_transpout.

Wed Oct  7 21:40:24 1998  David S. Miller  <davem@pierdol.cobaltmicro.com>

	* config/sparc/sol2-sld-64.h (ASM_CPU_SPEC): Fix typo.

Wed Oct  7 21:19:46 1998  Ken Raeburn  <raeburn@cygnus.com>

	* config/mips/mips.md (tablejump_internal3, tablejump_internal4
	and matching define_insns): Tack on a `use' of the table label, so
	flow analysis will recognize a tablejump.

Wed Oct  7 17:33:39 1998  Richard Henderson  <rth@cygnus.com>

	* gcse.c (pre_insert_insn): Tweek to notice that calls do not
	always end basic blocks for abnormal edge reasons.

Wed Oct  7 14:40:43 1998  Nick Clifton  <nickc@cygnus.com>

	* config/i386/i386.h: Remove definition of
	HANDLE_PRAGMA_PACK_PUSH_POP.

	* config/i386/go32.h: Add definition of
	HANDLE_PRAGMA_PACK_PUSH_POP.

	* config/i386/win32.h: Add definition of
	HANDLE_PRAGMA_PACK_PUSH_POP.

	* config/i386/cygwin32.h: Add definition of
	HANDLE_PRAGMA_PACK_PUSH_POP.

	* c-pragma.c (insert_pack_attributes): Do not insert
	attributes unless #pragma pack(push,<n>) is in effect.

Wed Oct  7 12:10:46 1998  Jim Wilson  <wilson@cygnus.com>

	* expr.c (emit_group_store): Handle a PARALLEL destination.

Wed Oct  7 10:07:29 1998  Richard Henderson  <rth@cygnus.com>

	* gcse.c (pre_insert_insn): When a call ends a bb, insert
	the new insns before the argument regs are loaded.

Wed Oct  7 12:55:26 1998  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* Makefile.in (c-gperf.h): Add -L KR-C -F ', 0, 0' flags to gperf.
	(c-parse.gperf): Update comments describing invocation flags.
	(c-gperf.h): Regenerate using gperf 2.7.1 (19981006 egcs).

1998-10-07  Manfred Hollstein  <manfred@s-direktnet.de>

	* reload1.c (reload): Call free before clobbering the memory
	locations or constants pointers.

Wed Oct  7 02:05:20 1998  David S. Miller  <davem@pierdol.cobaltmicro.com>

	* config/sparc/sol2-sld-64.h (TRANSFER_FROM_TRAMPOLINE): Rework
	for efficiency by checking whether we need to modify the current
	stack permission at all.
	(ASM_OUTPUT_CONSTRUCTOR, ASM_OUTPUT_DESTRUCTOR): Define.
	* config/sparc/sparc.c (sparc_initialize_trampoline): Emit
	__enable_execute_stack libcall here too if
	TRANSFER_FROM_TRAMPOLINE is defined.
	* config/sparc/sparc.h: Set TARGET_ARCH32 to a constant if
	IN_LIBGCC2.

Wed Oct  7 02:27:52 1998  Jeffrey A Law  (law@cygnus.com)

	* Makefile.in (DRIVER_DEFINES): Remove last change.

Wed Oct  7 01:08:43 1998  Bernd Schmidt  <crux@Pool.Informatik.RWTH-Aachen.DE>

	* jump.c (duplicate_loop_exit_test): Strip REG_WAS_0 notes off all
	insns we're going to copy.
	* regclass.c (reg_scan_mark_refs): Don't test X for NULL_RTX.

	* loop.c (count_one_set): Add prototype.

	* caller-save.c (restore_referenced_regs): Lose mode argument.
	(insert_save): Lose mode argument.
	(insert_restore): Lose mode argument.
	(insert_one_insn): Lose mode argument.
	(save_call_clobbered_regs): Lose mode argument.
	(setup_save_areas): Take no argument and return void.  All callers
	changed.
	Don't verify validity of memory addresses.
	* reload.h (setup_save_ares): Adjust prototype.
	(save_call_clobbered_regs): Likewise.
	* reload1.c (delete_caller_save_insns): New function.
	(caller_save_spill_class): Delete variable.
	(caller_save_group_size): Delete variable.
	(reload): Call setup_save_areas and save_call_clobbered_regs
	in the main loop, before calling calculate_needs_all_insns.
	Don't call save_call_clobbered_regs after the loop.
	Call delete_caller_save_insns at the end of an iteration if
	something changed.
	Delete code to manage caller_save_spill_class.
	Emit the final note before setting reload_first_uid.
	Simplify test that determines whether reload_as_needed gets run.
	(calculate_needs): Delete code to manage caller_save_spill_class.

Tue Oct  6 15:42:27 1998  Richard Henderson  <rth@cygnus.com>

	* collect2.c (main): Initialize ld_file_name.

Tue Oct  6 15:45:15 1998  Catherine Moore  <clm@cygnus.com>

	* config/sparc/sysv4.h (ASM_OUTPUT_SECTION_NAME): Don't
	check for flag_function_sections.

Tue Oct  6 20:02:31 1998  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* cse.c (insert_regs): Fix bug in Sep 24 change.

Tue Oct  6 17:00:42 1998  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* flags.h (flag_dump_unnumbered): Declare.
	* toplev.c (flag_dump_unnumbered): Don't declare.
	* print-rtl.c (flags.h): Include.
	(print_rtl_single): Add return value.
	* rtl.h (print_rtl_single): Update declaration.
	* flow.c (flag_dump_unnumbered): Don't declare.
	(print_rtl_with_bb): Use return value of print_rtl_single.

Tue Oct  6 01:36:00 1998  Bernd Schmidt  <crux@Pool.Informatik.RWTH-Aachen.DE>

	* loop.c (count_one_set): New static function, broken out of
	count_loop_regs_set.
	(count_loop_regs_set): Call it.
	* global.c (mark_reg_store): Handle clobbers here by not calling
	set_preference.
	(mark_reg_clobber): Just call mark_reg_store after ensuring SETTER
	is in fact a clobber.
	* integrate.c (process_reg_param): New function, broken out of
	expand_inline_function.
	(expand_inline_function): Call it.

	* i386.md (addsidi3_1): Delete unused variable temp.
	(addsidi3_2): Likewise.
	(clstrstrsi): Delete unused variable addr1.

	* rtl.h: Don't declare any functions also declared in recog.h.

	* Makefile.in (stupid.o): Update dependencies.
	(global.o): Likewise.

	* global.c: Include reload.h.
	(reg_becomes_live): New function.
	(reg_dies): New function.
	(build_insn_chain): New function.
	(global_alloc): Call build_insn_chain before calling reload.

	* reload.h (struct needs): New structure definition.
	(struct insn_chain): Likewise.
	(reload_insn_chain): Declare variable.
	(new_insn_chain): Declare function.

	* reload1.c (reload_startobj): New variable.
	(reload_insn_chain): New variable.
	(unused_insn_chains): New variable.
	(new_insn_chain): New function.
	(init_reload): Initialize reload_startobj, not reload_firstobj.
	(reload): Initialize reload_firstobj.
	Before returning, free everything on the reload_obstack.

	* stupid.c: Include insn-config.h, reload.h and basic-block.h.
	(reg_where_dead_chain, reg_where_born_exact, reg_where_born_clobber,
	current_chain): New variables.
	(reg_where_born): Delete variable.
	(REG_WHERE_BORN): New macro.
	(find_clobbered_regs): New function.
	(stupid_life_analysis): Don't allocate/free reg_where_born.
	Allocate and free reg_where_born_exact, reg_where_born_clobber,
	reg_where_dead_chain.
	Use REG_WHERE_BORN instead of reg_where_born.
	While processing the insns, build the reload_insn_chain with
	information about register lifetimes.
	(stupid_reg_compare): Use REG_WHERE_BORN instead of reg_where_born.
	(stupid_mark_refs): Replace arg INSN with arg CHAIN.  All callers
	changed.
	Compute and information about birth and death of pseudo registers in
	reg_where_dead_chain, reg_where_born_exact and reg_where_born_clobber.
	Delete code to set elements of reg_where_born.

Mon Oct  5 22:34:30 1998  Alexandre Petit-Bianco  <apbianco@cygnus.com>

	* tree.def (GOTO_EXPR): Modified documentation.
	* expr.c (expand_expr): Expand GOTO_EXPR into a goto or a computed
	goto.

Mon Oct  5 22:43:36 1998  David Edelsohn  <edelsohn@gnu.org>

	* unroll.c (loop_iteration_var, loop_initial_value, loop_increment
	loop_final_value, loop_comparison_code): No longer static.
	(unroll_loop): Delete loop_start_value update.
	* loop.h (loop_iteration_var, loop_initial_value, loop_increment,
	loop_final_value, loop_comparison_code): Extern.
	(loop_start_value): Delete extern.
	* loop.c (loop_can_insert_bct, loop_increment, loop_start_value,
	loop_comparison_value, loop_comparison_code): Delete.
	(loop_optimize): Remove initialization for deleted variables.
	(strength_reduce): Delete analyze_loop_iterations call.  Only call
	insert_bct if flag_branch_count_on_reg set.
	(analyze_loop_iterations): Delete.
	(insert_bct): Remove iteration count calculation.  Move checks for
	viable BCT optimization to here.  Obtain iteration count from
	loop_iterations and correct for unrolling.  Check for enough
	iteration to be beneficial.  Comment out runtime iteration count
	case.
	(insert_bct): Print iteration count in dump file.  Remove
	loop_var_mode and use word_mode directly.

	* rs6000.h (processor_type): Add PROCESSOR_PPC604e.
	* rs6000.c (rs6000_override_options): Use it.
	(optimization_options): Enable use of flag_branch_on_count_reg.
	* rs6000.md (define_function_unit): Describe 604e.

1998-10-05  Herman A.J. ten Brugge  <Haj.Ten.Brugge@net.HCC.nl>

	* loop.c (move_movables): Corrected threshold calculation for
	moved_once registers.

Mon Oct  5 21:18:45 1998  Bernd Schmidt  <crux@Pool.Informatik.RWTH-Aachen.DE>

	* loop.c (combine_givs_p): Fix test for identical givs.

Mon Oct  5 10:11:28 1998  Nick Clifton  <nickc@cygnus.com>

	* dwarf2out.c (gen_subprogram_die): If errorcount nonzero, don't
	call abort if the function is already defined.

Mon Oct  5 10:02:36 1998  Jeffrey A Law  (law@cygnus.com)

	* combine.c (simplify_rtx): Do not replace TRUNCATE with a SUBREG if
	truncation is not a no-op.

Mon Oct  5 09:02:04 1998  Jeff Law  (law@cygnus.com)

	* version.c: Bump for snapshot.

Mon Oct  5 08:19:55 1998  Jeff Law  (law@cygnus.com)

	* version.c: Bump for snapshot.

Mon Oct  5 01:07:23 1998  Torbjorn Granlund  <tege@matematik.su.se>

	* expmed.c (expand_divmod): Don't widen for computing remainder
	if we seem to have a divmod pattern for needed mode.

Mon Oct  5 01:01:42 1998  Zack Weinberg  <zack@rabi.phys.columbia.edu>

	* cpplib.c (macroexpand): Correct off-by-one error in handling
	of escapes.

Sun Oct  4 23:58:30 1998  Richard Henderson  <rth@cygnus.com>

	* combine.c (expand_field_assignment): Don't do bitwise operations
	on MODE_FLOAT; pun to MODE_INT if possible.

Sun Oct  4 18:33:24 1998  Jason Merrill  <jason@yorick.cygnus.com>
			  scott snyder  <snyder@d0sgif.fnal.gov>

	* tlink.c (scan_linker_output): Recognize errors from irix 6.2
	linker.  Recognize mangled names in quotes.

Sun Oct  4 02:58:20 1998  Jakub Jelinek  <jj@sunsite.ms.mff.cuni.cz>

	* config/sparc/sparc.md (ashldi3+1): Name it ashldi3_sp64.
	(ashlsi3_const1, ashldi3_const1): New combiner patterns.
	(ashrsi3_extend, ashrsi3_extend2): New combiner patterns.
	(lshrsi3_extend, lshrsi3_extend2): Likewise.

Sun Oct  4 00:23:00 1998  David S. Miller  <davem@pierdol.cobaltmicro.com>

	* function.c (purge_addressof_1): If trying to take a sub-word
	integral piece of a floating point mode, put it on the stack.

Sat Oct  3 19:01:03 1998  Richard Henderson  <rth@cygnus.com>

	* alpha/linux.h (CPP_PREDEFINES): Define __alpha__ for imake.

Sat Oct  3 14:42:19 1998  Jason Merrill  <jason@yorick.cygnus.com>

	* PROJECTS: Remove template friends.

	* collect2.c (sort_ids): Remove unused variable.

	* tm.texi (MATH_LIBRARY): Document.
	(NEED_MATH_LIBRARY): Remove.

	* varasm.c (assemble_start_function, assemble_variable, weak_finish,
	assemble_alias): Do ASM_GLOBALIZE_LABEL for weak symbols, too.

Sat Oct  3 16:14:44 1998  John Carr  <jfc@mit.edu>

	* dwarf2out.c (expand_builtin_dwarf_reg_size): Initialize
	last_end to 0x7fffffff.

Fri Oct  2 19:14:20 1998  David S. Miller  <davem@pierdol.cobaltmicro.com>

	* function.c (purge_addressof_1): Do not perform endianness
	corrections on bitpos, who we call will do it for us.

Fri Oct  2 11:52:35 1998  Jeffrey A Law  (law@cygnus.com)

	* h8300.c (WORD_REG_USED): Fix typo.
	(initial_offset): Use WORD_REG_USED.

	* h8300.c (handle_pragma): Fix typo.

Fri Oct  2 10:51:35 1998  Bernd Schmidt  <crux@Pool.Informatik.RWTH-Aachen.DE>

	* caller-save.c (insert_save_restore): Break this function up
	into new functions insert_restore, insert_save and insert_one_insn.
	All callers changed.
	(insert_restore): New function, mostly broken out of
	insert_save_restore.
	(insert_save): Likewise.
	(insert_one_insn): Likewise.
	(restore_referenced_regs): New argument BLOCK.  All callers changed.
	(save_call_clobbered_regs): Don't keep track of basic block boundaries
	in this function, do it in insert_one_insn instead.

	* reload1.c (reload): Break out some more pieces into separate
	functions.
	(dump_needs): New function, broken out of reload.
	(set_initial_elim_offsets): Likewise.
	(init_elim_table): Likewise.
	(update_eliminables): Likewise.

	* global.c (global_alloc): Delete code to manage the scratch_list.
	* local-alloc.c (qty_scratch_rtx): Delete.
	(scratch_block): Delete.
	(scratch_list): Delete.
	(scratch_list_length): Delete.
	(scratch_index): Delete.
	(alloc_qty_for_scratch): Delete.
	(local-alloc): Update initialization of max_qty.
	Delete code to manage the scratch list.
	Delete code to allocate/initialize qty_scratch_rtx.
	(block_alloc): Don't allocate quantities for scratches.
	Delete code to manage the scratch list.
	* regs.h (scratch_list): Delete declaration.
	(scratch_block): Delete declaration.
	(scratch_list_length): Delete declaration.
	* reload1.c (reload): Delete code to manage the scratch list.
	(spill_hard_reg): Likewise.
	(mark_scratch_live): Delete.

	* recog.c (alter_subreg): Delete declaration.

1998-10-02  Andreas Jaeger  <aj@arthur.rhein-neckar.de>

	* Makefile.in (cccp.o): Fix typo in last patch.

Fri Oct  2 16:13:12 1998  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* t-sh (LIB1ASMFUNCS): Add _set_fpscr .
	* config/sh/lib1funcs.asm (___set_fpscr): Add.

Fri Oct  2 02:01:59 1998  Jeffrey A Law  (law@cygnus.com)

	* regclass.c (reg_scan_mark_refs): Return immediately if passed a
	NULL_RTX as an argument.

	* Makefile.in (unlibsubdir): Define.
	(DRIVER_DEFINES): Use unlibsubdir.
	(cccp.o, cpplib.o, protoize.o, unprotoize.o): Similarly.
	(stmp-fixinc): Similarly.

Thu Oct  1 19:58:30 1998  Bernd Schmidt  <crux@Pool.Informatik.RWTH-Aachen.DE>

	* regmove.c (regmove_optimize): Add variable old_max_uid.
	At the end of the function, update basic_block_end.

Thu Oct  1 17:58:25 1998  David S. Miller  <davem@pierdol.cobaltmicro.com>

	* dwarf2out.c (expand_builtin_dwarf_reg_size): Use
	FIRST_PSEUDO_REGISTER as upper bound for last_end, not an
	arbitrary constant.

Thu Oct  1 17:57:14 1998  Nick Clifton  <nickc@cygnus.com>

	* config/arm/arm.c: Improve interworking support.

Thu Oct  1 18:43:35 1998  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* reload1.c (choose_reload_regs): Fix test if reload_reg_rtx[r] was
	copied from reload_out[r] .

Thu Oct  1 19:20:09 1998  John Carr  <jfc@mit.edu>

	* dwarf2out.c (expand_builtin_dwarf_reg_size): Fix to work
	with more than three size ranges.

	* flow.c (sbitmap_copy): Use bcopy to copy bitmap.

	* rtl.c (mode_name): Add a null string at the end of the array.
	(mode_wider_mode): Change type to unsigned char.
	(mode_mask_array): New variable.
	(init_rtl): Update for mode_wider_mode type change.

	* rtl.h (mode_wider_mode): Change type to unsigned char.
	(mode_mask_array): Declare.
	(GET_MODE_MASK): Use mode_mask_array.

Thu Oct  1 15:56:01 1998  Gavin Romig-Koch  <gavin@cygnus.com>

	* calls.c (expand_call) : Encapsulate code into
	copy_blkmode_from_reg.
	* expr.c (copy_blkmode_from_reg): New function.
	* expr.h (copy_blkmode_from_reg): New function.
	* integrate.c (function_cannot_inline_p): We can inline
	these now.
	(expand_inline_function): Use copy_blkmode_from_reg
	if needed.  Avoid creating BLKmode REGs.
	(copy_rtx_and_substitute): Don't try to SUBREG a BLKmode
	object.

Thu Oct  1 10:42:27 1998  Nick Clifton  <nickc@cygnus.com>

	* config/v850/v850.c: Add function prototypes.
	Add support for v850 special data areas.

	* config/v850/v850.h: Add support for v850 special data areas.

	* c-pragma.c: Add support for HANDLE_PRAGMA_PACK and
	HANDLE_PRAGMA_PACK_PUSH_POP.
	(push_alignment): New function: Cache an alignment requested
	by a #pragma pack(push,<n>).
	(pop_alignment): New function: Pop an alignment from the
	alignment stack.
	(insert_pack_attributes): New function: Generate __packed__
	and __aligned__ attributes for new decls whilst a #pragma pack
	is in effect.
	(add_weak): New function: Cache a #pragma weak directive.
	(handle_pragma_token): Document calling conventions.  Add
	support for #pragma pack(push,<n>) and #pragma pack (pop).

	* c-pragma.h: If HANDLE_SYSV_PRAGMA or HANDLE_PRAGMA_PACK_PUSH_POP
	are defined enable HANDLE_PRAGMA_PACK.
	Move 'struct weak_syms' here (from varasm.c).
	Add pragma states for push and pop pragmas.

	* c-common.c (decl_attributes): Call PRAGMA_INSERT_ATTRIBUTES
	if it is defined.

	* c-lex.c: Replace occurrences of HANDLE_SYSV_PRAGMA with
	HANDLE_GENERIC_PRAGMAS.

	* varasm.c: Move definition of 'struct weak_syms' into
	c-pragma.h.
	(handle_pragma_weak): Deleted.

	* config/i386/i386.h: Define HANDLE_PRAGMA_PACK_PUSH_POP.

	* config/winnt/win-nt.h: Define HANDLE_PRAGMA_PACK_PUSH_POP.

	* c-decl.c (start_function): Add invocation of
	SET_DEFAULT_DECL_ATTRIBUTES, if defined.

	* tm.texi: Remove description of non-existent macro
	SET_DEFAULT_SECTION_NAME.

	(HANDLE_SYSV_PRAGMA): Document.
	(HANDLE_PRAGMA_PACK_PUSH_POP): Document.

Wed Sep 30 22:27:53 1998  Robert Lipe  <robertl@dgii.com>

	* config.sub: Recognize i[34567]86-pc-udk as new target.
	* configure.in: Likewise.
	* config/i386/t-udk: New file.
	* config/i386/udk.h: New file.

Wed Sep 30 19:33:07 1998  Jeffrey A Law  (law@cygnus.com)

	* reorg.c (check_annul_list_true_false): Remove unused variables.
	(steal_delay_list_from_target): Add missing "used_annul" variable.
	(try_merge_delay_insns): Close out half formed comment.

Wed Sep 30 19:13:20 1998  Zack Weinberg  <zack@rabi.phys.columbia.edu>

	* cpplib.c (macroexpand): If arg->raw_before or
	arg->raw_after, remove any no-reexpansion escape at the
	beginning of the pasted token.  Correct handling of whitespace
	markers and no-reexpand markers at the end if arg->raw_after.

	* toplev.c (documented_lang_options): Recognize -include,
	-imacros, -iwithprefix, -iwithprefixbefore.
	* cpplib.c (cpp_start_read): Process -imacros and -include
	switches at the same time and in command-line order, after
	initializing the dependency-output code.  Emit properly nested
	#line directives for them.  Emit a #line for the main file
	before processing these switches, and don't do it again
	afterward.

Wed Sep 30 18:03:22 1998  Richard Henderson  <rth@cygnus.com>

	* function.c (purge_addressof_1): Use bitfield manipulation
	routines to handle mem mode < reg mode.

Wed Sep 30 18:43:32 1998  Herman ten Brugge  <Haj.Ten.Brugge@net.HCC.nl>

	* reorg.c (try_merge_delay_insns): Account for resources referenced
	in each instruction in INSN's delay list before trying to eliminate
	useless instructions.  Similarly when looking at a trial insn's delay
	slots.

	* reorg.c (check_annul_list_true_false): New function.
	(steal_delay_list_from_{target,fallthrough}): Call it and also
	refine tests for when we may annul if already filled a slot.
	(fill_slots_from_thread): Likewise.
	(delete_from_delay_slot): Return newly-created thread.
	(try_merge_delay_isns): Use its new return value.

Wed Sep 30 18:29:26 1998  Jeffrey A Law  (law@cygnus.com)

	* loop.c (check_dbra_loop): Use a vanilla loop reversal if the biv is
	used to compute a giv or as some other non-counting use.

Wed Sep 30 18:19:27 1998  Michael Hayes  <m.hayes@elec.canterbury.ac.nz>

	* regs.h (HARD_REGNO_CALL_PART_CLOBBERED): New macro.
	* local-alloc.c (find_free_reg): Use it.
	* global.c (find_reg): Likewise.
	* tm.texi: Document HARD_REGNO_CALL_PART_CLOBBERED.

	* regs.h (HARD_REGNO_CALLER_SAVE_MODE): New macro.
	* caller-save.c (init_caller_save): Use it.
	* tm.texi: Document HARD_REGNO_CALLER_SAVE_MODE.

Wed Sep 30 12:57:30 1998  Zack Weinberg  <zack@rabi.phys.columbia.edu>

	* configure.in: Add --enable-cpplib option which uses cpplib
	for cpp, but doesn't link cpplib into cc1.  Make help text
	capitalization consistent.
	* configure: Rebuilt.

Wed Sep 30 10:09:39 1998  Mark Mitchell  <mark@markmitchell.com>

	* function.c (gen_mem_addressof): If the address REG is
	REG_USERVAR_P make the new REG be so also.
	* loop.c (scan_loop): Apply DeMorgan's laws and add documentation
	in an attempt to clarify slightly.

Wed Sep 30 09:57:40 1998  Jeffrey A Law  (law@cygnus.com)

	* expr.c (expand_expr): Handle COMPONENT_REF, BIT_FIELD_REF ARRAY_REF
	and INDIRECT_REF in code to check MAX_INTEGER_COMPUTATION_MODE.

Wed Sep 30 10:13:39 1998  Catherine Moore  <clm@cygnus.com>

	* toplev.c: Fix last patch.

Tue Sep 29 20:03:18 1998  Jim Wilson  <wilson@cygnus.com>

	* loop.c (get_condition): Fix typo in May 9 change.

Tue Sep 29 11:11:38 1998  Andrew MacLeod  <amacleod@cygnus.com>

	* invoke.texi (-fexceptions): Merge 2 different descriptions.

Mon Sep 28 22:08:52 1998  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* toplev.c (documented_lang_options): Spelling corrections.

Mon Sep 28 19:41:24 1998  Alexandre Oliva  <oliva@dcc.unicamp.br>

	* configure.in: New flags --with-ld and --with-as, equivalent
	to setting LD and AS environment variables.  Test whether
	specified arguments are GNU commands, and report them with
	checking messages.  Use the specified AS for configure
	tests too.
	* configure: Likewise.
	* acconfig.h: Add DEFAULT_ASSEMBLER and DEFAULT_LINKER.
	* config.in: Likewise.
	* gcc.c (find_a_file): When looking for `as' and `ld', return
	the DEFAULT program if it exists.
	* collect2.c (main): Use DEFAULT_LINKER if it exists.

	* gcc.c (find_a_file): The test for existence of a full
	pathname was reversed.

Mon Sep 28 17:34:35 1998  Michael Meissner  <meissner@cygnus.com>

	* rs6000.h (ASM_OUTPUT_MI_THUNK): Only define on ELF systems.
	* rs6000.c (output_mi_thunk): Always use a raw jump for now.

Mon Sep 28 14:24:03 1998  Mark Mitchell  <mark@markmitchell.com>

	* tree.h (TYPE_BINFO): Document.

Mon Sep 28 12:55:49 1998  Stan Cox  <scox@cygnus.com>

	* i386-coff.h (dbxcoff.h): Added.

Mon Sep 28 12:51:00 1998  Catherine Moore  <clm@cygnus.com>

	* toplev.c: Fix bad patch around flag_data_sections.

Mon Sep 28 10:32:28 1998  Nick Clifton  <nickc@cygnus.com>

	* reload1.c (reload): Use reload_address_index_reg_class and
	reload_address_base_reg_class when setting
	caller_save_spill_class.  (Patch generated by Jim Wilson:
	wilson@cygnus.com).

Mon Sep 28 07:43:34 1998  Mark Mitchell  <mark@markmitchell.com>

	* c-common.c (c_get_alias_set): Tighten slightly for FUNCTION_TYPEs
	and ARRAY_TYPEs.  Tidy up.  Improve support for type-punning.
	* expr.c (store_field): Add alias_set parameter.  Set the
	MEM_ALIAS_SET accordingly, if the target is a MEM.
	(expand_assignment): Use it.
	(store_constructor_field): Pass 0.
	(expand_expr): Likewise.

Mon Sep 28 07:54:03 1998  Catherine Moore  <clm@cygnus.com>

	* flags.h: Add flag_data_sections.
	* toplev.c: Add option -fdata-sections.  Add flag_data_sections.
	(compile_file): Error if flag_data_sections not supported.
	* varasm.c (assemble_variable): Handle flag_data_sections.
	* config/svr4.h: Modify prefixes for UNIQUE_SECTION_NAME.
	* config/mips/elf.h: Likewise.
	* config/mips/elf64.h: Likewise.
	* invoke.texi: Describe -fdata-sections.

Mon Sep 28 04:15:44 1998  Craig Burley  <burley@melange.gnu.org>

	* invoke.texi (-ffloat-store): Clarify that this option
	does not affect intermediate results -- only variables.

Mon Sep 28 04:11:35 1998  Jeffrey A Law  (law@cygnus.com)

	* cpp.texi: Update for Fortran usage from Craig.

Fri Sep 25 22:09:47 1998  David Edelsohn  <edelsohn@gnu.org>

	* rs6000.c (function_arg_boundary): Revert accidental change on
	September 18.

Fri Sep 25 20:30:00 1998  Michael Meissner  <meissner@cygnus.com>

	* rs6000.h (ASM_OUTPUT_MI_THUNK): Declare, call output_mi_thunk.
	(output_mi_thunk): Declare.

	* rs6000.c (output_mi_thunk): Function to create thunks for MI.
	(output_function_profiler): Use r12 for temp, instead of r11 so
	that we preserve the static chain register.

Fri Sep 25 14:18:33 1998  Jim Wilson  <wilson@cygnus.com>

	* sdbout.c (sdbout_one_type): Don't look at TYPE_BINFO field of enums.

Fri Sep 25 19:30:19 1998  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* sh.c (gen_shl_sext): Fix case 5.

Fri Sep 25 17:35:23 1998  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* reload1.c (reload_combine): Re-add line that got accidentally lost.

Fri Sep 25 10:43:47 1998  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* cccp.c (pedwarn_with_file_and_line): For !__STDC__ case, avoid
	accessing variables until they are initialized via va_arg().

Thu Sep 24 22:12:16 1998  David S. Miller  <davem@pierdol.cobaltmicro.com>

	* reload1.c (reload_combine): Initialize set before using.

Thu Sep 24 18:53:20 1998  Jason Merrill  <jason@yorick.cygnus.com>

	* sdbout.c (sdbout_field_types): Don't emit the types of fields we
	won't be emitting.

Thu Sep 24 17:05:30 1998  Nick Clifton  <nickc@cygnus.com>

	* config/arm/arm.md (insv): Add comment.  In CONST_INT case, and
	operand3 with mask before using it.  Patch provided by Jim Wilson.

Thu Sep 24 15:08:08 1998  Jakub Jelinek  <jj@sunsite.ms.mff.cuni.cz>

	* config/sparc/sparc.c (function_value): Perform the equivalent of
	PROMOTE_MODE for ARCH64.
	(eligible_for_epilogue_delay): Allow DImode operations in delay
	slot of a return for ARCH64.

Thu Sep 24 22:17:54 1998  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* sh.md (sqrtsf2): Fix mode of sqrt.

Thu Sep 24 21:48:51 1998  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* reload1.c (choose_reload_regs): Also try inheritance when
	reload_in is a stack slot of a pseudo, even if we already got a
	reload reg.

Thu Sep 24 21:22:39 1998  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* reload1.c (reload_cse_regs_1): Renamed from reload_cse_regs.
	(reload_cse_regs): New function body: call reload_cse_regs_1,
	reload_combine, reload_cse_move2add.
	When doing expensive_optimizations, call reload_cse_regs_1 a
	second time after reload_cse_move2add.
	(reload_combine, reload_combine_note_store): New functions.
	(reload_combine_note_use): New function.
	(reload_cse_move2add, move2add_note_store): New functions.

Thu Sep 24 18:48:43 1998  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* reload.c (find_reloads): In code to promote RELOAD_FOR_X_ADDR_ADDR
	reloads to RELOAD_FOR_X_ADDRESS reloads, test for reload sharing.

	Properly keep track of first RELOAD_FOR_X_ADDRESS also for
	more than 3 such reloads.

	If there is not more than one RELOAD_FOR_X_ADDRESS, don't change
	RELOAD_FOR_X_ADDR_ADDR reload.

Thu Sep 24 17:45:55 1998  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* expr.c (store_constructor): When initializing a field that is smaller
	than a word, at the start of a word, try to widen it to a full word.

	* cse.c (cse_insn): When we are about to change a register,
	remove any invalid references to it.

	(remove_invalid_subreg_refs): New function.
	(mention_regs): Special treatment for SUBREGs.
	(insert_regs): Don't strip SUBREG for call to mention_regs.
	Check if reg_tick needs to be bumped up before that call.
	(lookup_as_function): Try to match known word_mode constants when
	looking for a norrower constant.
	(canon_hash): Special treatment for SUBREGs.

Thu Sep 24 01:35:34 1998  David S. Miller  <davem@pierdol.cobaltmicro.com>

	* config/sparc/sol2-sld-64.h (TRANSFER_FROM_TRAMPOLINE): Define.
	* config/sparc/sparc.c (sparc64_initialize_trampoline): If that is
	defined, emit libcall to __enable_execute_stack.  Also fix opcodes
	and offsets in actual stack trampoline code so they match the
	commentary and actually work.

Thu Sep 24 01:19:02 1998  Jakub Jelinek  <jj@sunsite.ms.mff.cuni.cz>

	* configure.in (sparcv9-*-solaris): Use t-sol2 and t-sol2-64 for
	tmake_file.
	(sparc64-*-linux): Use t-linux and sparc/t-linux64 for
	tmake_file.  Set extra_parts to needed crt objects.
	* configure: Rebuilt.
	* config/sparc/linux64.h (SPARC_BI_ARCH): Define.
	(TARGET_DEFAULT): Set if default is v9 or ultra.
	(STARTFILE_SPEC32, STARTFILE_SPEC64): New macros.
	(STARTFILE_SPEC): Set to those upon SPARC_BI_ARCH.
	(ENDFILE_SPEC32, ENDFILE_SPEC64, ENDFILE_SPEC): Likewise.
	(SUBTARGET_EXTRA_SPECS, LINK_ARCH32_SPEC, LINK_ARCH64_SPEC,
	LINK_SPEC, LINK_ARCH_SPEC): Likewise.
	(TARGET_VERSION): Define.
	(MULTILIB_DEFAULT): Define.
	* config/sparc/sparc.h (CPP_CPU_DEFAULT_SPEC): Rearrange so that
	mixed 32/64 bit compilers based upon SPARC_BI_ARCH work.
	(CPP_CPU64_DEFAULT_SPEC, CPP_CPU32_DEFAULT_SEC): Define
	appropriately.
	(TARGET_SWITCHES): Allow ptr32/ptr64 options once more.
	* config/sparc/sparc.c (sparc_override_options): If arch and
	pointer size disagree, emit diagnostic and fix it up.  If
	SPARC_BI_ARCH and TARGET_ARCH32, set cmodel to CM_32.  Turn off
	V8PLUS in 64-bit mode.
	* config/sparc/t-linux64: New file.
	* config/sparc/t-sol2-64: New file.
	* config/sparc/t-sol2: Adjust build rules to use MULTILIB_CFLAGS.
	* config/sparc/sol2-sld-64.h (SPARC_BI_ARCH): Define.
	(ASM_CPU32_DEFAULT_SPEC, ASM_CPU64_DEFAULT_SPEC,
	CPP_CPU32_DEFAULT_SPEC, CPP_CPU64_DEFAULT_SPEC): Define.
	(ASM_SPEC, CPP_CPU_SPEC): Set appropriately based upon those.
	(STARTFILE_SPEC32, STARTFILE_SPEC32, STARTFILE_ARCH_SPEC):
	Define.
	(STARTFILE_SPEC): Set appropriately based upon those.
	(CPP_CPU_DEFAULT_SPEC, ASM_CPU_DEFAULT_SPEC): Set based upon
	disposition of DEFAULT_ARCH32_P.
	(LINK_ARCH32_SPEC, LINK_ARCH64_SPEC): Define.
	(LINK_ARCH_SPEC, LINK_ARCH_DEFAULT_SPEC): Set based upon those.
	(CC1_SPEC, MULTILIB_DEFAULTS): Set based upon DEFAULT_ARCH32_P.
	(MD_STARTFILE_PREFIX): Set correctly based upon SPARC_BI_ARCH.
	* config/sparc/xm-sysv4-64.h (HOST_BITS_PER_LONG): Only set on
	arch64/v9.
	* config/sparc/xm-sp64.h (HOST_BITS_PER_LONG): Likewise.

Wed Sep 23 22:32:31 1998  Mark Mitchell  <mark@markmitchell.com>

	* rtl.h (init_virtual_regs): New function.
	* emit-rtl.c (init_virtual_regs): Define.
	(insn_emit): Use it.
	* integrate.c (save_for_inline_copying): Likewise.

Wed Sep 23 16:22:01 1998  Nick Clifton  <nickc@cygnus.com>

	* config/arm/thumb.h: The following patches were made by Jim Wilson:
	(enum reg_class): Add NONARG_LO_REGS support.
	(REG_CLASS_NAMES, REG_CLASS_CONTENTS, REGNO_REG_CLASS,
	PREFERRED_RELOAD_CLASS, SECONDARY_RELOAD_CLASS): Likewise.
	(GO_IF_LEGITIMATE_ADDRESS): Disable REG+REG addresses before reload
	completes.  Re-enable HImode REG+OFFSET addresses.
	(LEGITIMIZE_RELOAD_ADDRESS): Define.

	* expmed.c (extract_bit_field): Add comment from Jim Wilson.

Wed Sep 23 13:26:02 1998  Richard Henderson  <rth@cygnus.com>

	* alpha.c (get_aligned_mem): Revert Sep 20 change.
	(alpha_set_memflags, alpha_set_memflags_1): Likewise.
	(alpha_align_insns): Properly calculate initial offset wrt max_align.

Wed Sep 23 10:45:44 1998  Richard Earnshaw  (rearnsha@arm.com)

	* arm.c (find_barrier): Revert change of Apr 23.  Handle table
	jumps as a single entity, taking into account the size of the
	table.

Tue Sep 22 15:13:34 1998  Alexandre Petit-Bianco  <apbianco@cygnus.com>

	* tree.def (SWITCH_EXPR): New tree node definition.

Mon Sep 21 23:40:38 1998  Jeff Law  (law@cygnus.com)

	* version.c: Bump for snapshot.

Mon Sep 21 22:31:14 1998  Jeff Law  (law@cygnus.com)

	* version.c: Bump for snapshot.

Mon Sep 21 22:48:09 1998  Jeffrey A Law  (law@cygnus.com)

	* configure.in: Recognize i[34567]86-*-openbsd* and handle it like
	NetBSD.

Mon Sep 21 22:05:28 1998  Jeffrey A Law  (law@cygnus.com)

	* Revert this patch.
	* reload.c (find_reloads): Do not replace a pseudo with
	(MEM (reg_equiv_addr)) in the initializing insn for the
	pseudo.

Mon Sep 21 20:19:41 1998  John Carr  <jfc@mit.edu>

	* final.c (final_scan_insn): Disable tracking CC across branches.

Mon Sep 21 17:15:26 1998  Andrew MacLeod  <amacleod@cygnus.com>

	* expr.h (eh_rtime_match_libfunc): New extern declaration.
	* optabs.c (init_optabs): Set eh_rtime_match_libfunc.
	* except.c (start_catch_handler): Use eh_rtime_match_libfunc.
	* libgcc2.c (__eh_rtime_match): Always return 0 if the matcher is
	NULL. Only include <stdio.h> if inhibit_libc is not defined.

Mon Sep 21 14:10:51 1998  Jason Merrill  <jason@yorick.cygnus.com>

	* toplev.c (rest_of_compilation): Skip compiling anything with
	DECL_EXTERNAL set, not just if it has DECL_INLINE as well.

Mon Sep 21 13:51:05 1998  Jim Wilson  <wilson@cygnus.com>

	* flow.c (find_basic_blocks): Delete check for in_libcall_block when
	prev_code is a CALL_INSN.  Change check for REG_RETVAL note to
	use in_libcall_block.
	(find_basic_blocks_1): Delete check for in_libcall_block when prev_code
	is a CALL_INSN.  If CALL_INSN and in_libcall_block, then change code
	to INSN.

Mon Sep 21 14:02:23 1998  Robert Lipe  <robertl@dgii.com>

	* i386.h (TARGET_SWITCHES): Improve doc for align-double.  Fix
	typo in no-fancy-math-387 description.

Mon Sep 21 09:27:18 1998  Jeff Law  (law@cygnus.com)

	* version.c: Bump for snapshot.

Mon Sep 21 09:24:49 1998  Stan Cox  <scox@cygnus.com>

	* i386-coff.h (DBX_DEBUGGING_INFO): Added.

Mon Sep 21 09:14:49 1998  Robert Lipe  <robertl@dgii.com>

	* i386.h (TARGET_SWITCHES): Add description fields for flags
	documented in install.texi.
	(TARGET_OPTIONS): Likewise.

Mon Sep 21 01:39:03 1998  Jeff Law  (law@cygnus.com)

	* version.c: Bump for snapshot.

Mon Sep 21 01:53:05 1998  Felix Lee  <flee@cygnus.com>

	* c-lex.c (init_lex): Use getenv ("LANG"), not GET_ENVIRONMENT ().
	* cccp.c (main): Likewise.

	* cccp.c, collect2.c, cpplib.c, gcc.c, config/i386/xm-cygwin32.h:
	Rename GET_ENVIRONMENT to GET_ENV_PATH_LIST, and fix some
	macro-use bugs.

Mon Sep 21 00:52:12 1998  Per Bothner  <bothner@cygnus.com>

	* Makefile.in (LIBS): Link in libiberty.a.
	* c-common.c, gcc.c, toplev.c: Replace (some) bcopy calls by memcpy.

Sun Sep 20 23:28:11 1998  Richard Henderson  <rth@cygnus.com>

	* reload1.c (emit_reload_insns): Accept a new arg for the bb.  Use
	it to update bb boundaries.  Update caller.
	* function.c (reposition_prologue_and_epilogue_notes): Update
	bb boundaries wrt the moved note.

Sun Sep 20 20:57:02 1998  Robert Lipe  <robertl@dgii.com>

	* configure.in (i*86-*-sysv5*): Use fixinc.svr4 to patch byteorder
	problems.
	* configure: Regenerate.

Sun Sep 20 19:01:51 1998  Richard Henderson  <rth@cygnus.com>

	* alpha.c (alpha_sr_alias_set): New variable.
	(override_options): Set it.
	(alpha_expand_prologue, alpha_expand_epilogue): Use it.
	(mode_mask_operand): Fix signed-unsigned comparison warning.
	(alpha_expand_block_move): Likewise.
	(print_operand): Likewise.
	(get_aligned_mem): Use change_address.
	(alpha_set_memflags, alpha_set_memflags_1): Set the alias set.
	(alphaev4_insn_pipe, alphaev4_next_group): New functions.
	(alphaev4_next_nop, alphaev5_next_nop): New functions.
	(alpha_align_insns): Remade from old alphaev5_align_insns
	to handle multiple processors.
	(alpha_reorg): Call alpha_align_insns for both ev4 and ev5.
	* output.h (label_to_alignment): Prototype.

	* tree.c (new_alias_set): New function.
	* tree.h (new_alias_set): Declare it.
	* c-common.c (c_get_alias_set): Use it.

Sun Sep 20 12:35:55 1998  Richard Henderson  <rth@cygnus.com>

	* fold-const.c (fold): Yet another COND_EXPR bug: when folding
	to an ABS expr, convert an unsigned input to signed.

Sun Sep 20 12:14:45 1998  Jeffrey A Law  (law@cygnus.com)

	* fold-const.c (fold): Fix another type in COND_EXPR handling code.

1998-09-20  Michael Hayes  <m.hayes@elec.canterbury.ac.nz>

	* configure.in: Add support for c4x targets.
	* configure: Rebuilt.

Sun Sep 20 00:00:51 1998  Richard Henderson  <rth@cygnus.com>

	* combine.c (distribute_notes): If an insn is a cc0 user, only
	delete it if we can also delete the cc0 setter.

Sun Sep 20 00:22:23 1998  Michael Tiemann  <michael@impact.tiemann.org>

	* fold-const.c (fold): Fix typo in COND_EXPR handling code.
	(invert_truthvalue): Enable truthvalue inversion for
	floating-point operands if -ffast-math.

Sat Sep 19 23:58:07 1998  Melissa O'Neill  <oneill@cs.sfu.ca>

	* configure.in: Disable collect2 for nextstep.  Instead use
	crtbegin/crtend.
	* configure: Rebuilt.
	* config/nextstep.h (STARTFILE_SPEC): Add crtbegin.
	(ENDFILE_SPEC): Define.
	(OBJECT_FORMAT_MACHO): Define.
	(EH_FRAME_SECTION_ASM_OP): Define.
	* crtstuff.c: Handle MACHO.

Sun Sep 20 00:24:24 1998  Robert Lipe  <robertl@dgii.com>

	* config/i386/sco5.h (TARGET_MEM_FUNCTIONS): Define.

1998-09-19  Torbjorn Granlund  <tege@matematik.su.se>

	* fp-bit.c (pack_d): Do not clear SIGN when fraction is 0.
	(_fpadd_parts): Get sign right for 0.

1998-09-19  Michael Hayes  <m.hayes@elec.canterbury.ac.nz>

	* ginclude/varargs.h: Add support for C4x target.
	* ginclude/stdargs.h: Likewise.

Sat Sep 19 12:05:09 1998  Richard Henderson  <rth@cygnus.com>

	* alpha.c (alpha_return_addr): SET should be VOIDmode.
	(alpha_emit_set_long_const): Rewrite to be callable from reload
	and 32-bit hosts.
	(alpha_expand_epilogue): Update for alpha_emit_set_long_const.
	* alpha.md (movdi): Likewise.

Sat Sep 19 07:33:36 1998  Richard Earnshaw  (rearnsha@arm.com)

	* arm.c (add_constant): New parameter address_only, change caller.
	Set it nonzero if taking the address of an item in the pool.
	(arm_reorg): Handle cases where we need the address of an item in
	the pool.

	* arm.c (bad_signed_byte_operand): Check both arms of a sum in
	a memory address.
	* arm.md (splits for *extendqihi_insn and *extendqisi_insn): Handle
	memory addresses that are not in standard canonical form.

Sat Sep 19 01:00:32 1998  Michael Hayes  (mph@elec.canterbury.ac.nz)

	* README.C4X: New file with information about the c4x ports.
	* ginclude/va-c4x.h: New file for c4x varargs support.
	* config/c4x: New directory with c4x port files.

Fri Sep 18 22:52:05 1998  Jeffrey A Law  (law@cygnus.com)

	* reload.c (find_reloads): Do not replace a pseudo with
	(MEM (reg_equiv_addr)) in the initializing insn for the
	pseudo.

Fri Sep 18 23:50:56 1998  David Edelsohn  <edelsohn@gnu.org>

	* toplev.c (rest_of_compilation): Set bct_p on second call to
	loop_optimize.
	* loop.c (loop_optimize, scan_loop, strength_reduce): New argument
	bct_p.
	(strength_reduce): Only call analyze_loop_iterations and
	insert_bct if bct_p set.
	(check_dbra_loop): Fix typo.
	(insert_bct): Use word_mode instead of SImode.
	(instrument_loop_bct): Likewise.  Do not delete iteration count
	condition code generation insn.  Initialize iteration count before
	loop start.
	* rtl.h (loop_optimize): Update prototype.

	* ginclude/va-ppc.h (va_arg): longlong types in overflow area are
	not doubleword aligned.

	* rs6000.c (optimization_options): New function.
	(secondary_reload_class): Only call true_regnum for PSEUDO_REGs.
	* rs6000.h (OPTIMIZATION_OPTIONS): Define.
	(REG_ALLOC_ORDER): Allocate highest numbered condition regsiters
	first; cr1 can be used for FP record condition insns.

Fri Sep 18 09:44:55 1998  Nick Clifton  <nickc@cygnus.com>

	* config/m32r/m32r.h (m32r_block_immediate_operand): Add to
	PREDICATE_CODES.

	* config/m32r/m32r.md: Add "movstrsi" and "movstrsi_internal"
	patterns.

	* config/m32r/m32r.c (m32r_print_operand): Add 's' and 'p'
	operators.
	(block_move_call): New function: Call a library routine to copy a
	block of memory.
	(m32r_expand_block_move): New function: Expand a "movstrsi"
	pattern into a sequence of insns.
	(m32r_output_block_move): New function: Expand a
	"movstrsi_internal" pattern into a sequence of assembler opcodes.
	(m32r_block_immediate_operand): New function: Return true if the
	RTL is an integer constant, less than or equal to MAX_MOVE_BYTES.

Thu Sep 17 16:42:16 1998  Andrew MacLeod  <amacleod@cygnus.com>

	* except.c (start_catch_handler): Issue 'fatal' instead of 'error' and
	re-align some code.
	* libgcc2.c (__eh_rtime_match): fprintf a runtime error. Use <stdio.h>.

Thu Sep 17 12:24:33 1998  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* regmove.c (copy_src_to_dest): Check that modes match.

Wed Sep 16 22:10:42 1998  Robert Lipe  <robertl@dgii.com>

	* config/i386/sco5.h (SUPPORTS_WEAK): True only if targeting ELF.

Wed Sep 16 15:24:54 1998  Richard Henderson  <rth@cygnus.com>

	* i386.h (PREFERRED_RELOAD_CLASS): Respect an existing class
	narrower than FLOAT_REGS.

Wed Sep 16 17:51:00 1998  Alexandre Oliva  <oliva@dcc.unicamp.br>

	* cpplib.c: Removed OLD_GPLUSPLUS_INCLUDE_DIR.
	* cccp.c: Likewise.
	* Makefile.in (old_gxx_include_dir): Removed.

Wed Sep 16 12:29:22 1998  Nick Clifton  <nickc@cygnus.com>

	* config/sh/sh.h: Update definition of HANDLE_PRAGMA to match
	new specification.

	* config/sh/sh.c (handle_pragma): Rename to sh_handle_pragma().
	(sh_handle_pragma): Change function arguments to match new
	specification for HANDLE_PRAGMA.

Wed Sep 16 12:43:19 1998  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* gen-protos.c (parse_fn_proto): Cast argument of ISALNUM to
	`unsigned char'.
	(main): Mark parameter `argc' with ATTRIBUTE_UNUSED.
	When generating output, initialize missing struct member to zero.

Wed Sep 16 14:47:43 1998  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* regmove.c (copy_src_to_dest): Don't copy if that requires
	(a) new register(s).

Wed Sep 16 01:29:12 1998  Bernd Schmidt  <crux@pool.informatik.rwth-aachen.de>

	* global.c (reg_allocno): Now static.
	* reload1.c (reg_allocno): Delete declaration.
	(order_regs_for_reload): Take no arguments.  Don't treat regs
	allocated by global differently than those allocated by local-alloc.

Wed Sep 16 01:09:01 1998  Kamil Iskra  <iskra@student.uci.agh.edu.pl>

	* m68k/m68k.c (output_function_prologue): Reverse NO_ADDSUB_Q
	condition, fix format strings.
	(output_function_epilogue): Likewise.

	* m68k/m68k.c: Don't include <stdlib.h> directly.

Wed Sep 16 00:30:56 1998  Geoff Keating  <geoffk@ozemail.com.au>

	* gcse.c: New definition NEVER_SET for reg_first_set, reg_last_set,
	mem_first_set, mem_last_set; because 0 can be a CUID.
	(oprs_unchanged_p): Use new definition.
	(record_last_reg_set_info): Likewise.
	(record_last_mem_set_info): Likewise.
	(compute_hash_table): Likewise.

Tue Sep 15 22:59:52 1998  Jeffrey A Law  (law@cygnus.com)

	* rs6000.c (output_epilogue): Handle Chill.

	* mn10200.h (ASM_OUTPUT_DWARF2_ADDR_CONST): Define.
	* mn10300.h (ASM_OUTPUT_DWARF2_ADDR_CONST): Define.

	* combine.c (make_extraction): If no mode is specified for
	an operand of insv, extv, or extzv, default it to word_mode.
	(simplify_comparison): Similarly.
	* expmed.c (store_bit_field): Similarly.
	(extract_bit_field): Similarly.
	* function.c (fixup_var_regs_1): Similarly.
	* recog.c (validate_replace_rtx_1): Similarly.
	* mips.md (extv, extzv, insv expanders): Default modes for most
	operands.  Handle TARGET_64BIT.
	(movdi_uld, movdi_usd): New patterns.

	* pa.c (emit_move_sequence): Do not replace a pseudo with its
	equivalent memory location unless we have been provided a scratch
	register.  Similarly do not call find_replacement unless a
	scratch register has been provided.

Tue Sep 15 19:23:01 1998  Bernd Schmidt  <crux@pool.informatik.rwth-aachen.de>

	* i386.h (PREFERRED_RELOAD_CLASS): For standard 387 constants,
	return FLOAT_REGS.

Tue Sep 15 19:09:06 1998  Richard Henderson  <rth@cygnus.com>

	* tree.h (BUILT_IN_CALLER_RETURN_ADDRESS): Unused.  Kill.
	(BUILT_IN_FP, BUILT_IN_SP, BUILT_IN_SET_RETURN_ADDR_REG): Kill.
	(BUILT_IN_EH_STUB_OLD, BUILT_IN_EH_STUB, BUILT_IN_SET_EH_REGS): Kill.
	(BUILT_IN_EH_RETURN, BUILT_IN_DWARF_CFA): New.
	* c-decl.c (init_decl_processing): Update accordingly.
	* expr.c (expand_builtin): Likewise.

	* rtl.h (global_rtl): Add cfa entry.
	(virtual_cfa_rtx, VIRTUAL_CFA_REGNUM): New.
	(LAST_VIRTUAL_REGISTER): Update.
	* emit-rtl.c (global_rtl): Add cfa entry.
	(init_emit): Initialize it.
	* function.c (cfa_offset): New.
	(instantiate_virtual_regs): Initialize it.
	(instantiate_virtual_regs_1): Instantiate virtual_cfa_rtx.
	(expand_function_end): Call expand_eh_return.
	* tm.texi (ARG_POINTER_CFA_OFFSET): New.

	* except.c (current_function_eh_stub_label): Kill.
	(current_function_eh_old_stub_label): Likwise; update all references.
	(expand_builtin_set_return_addr_reg): Kill.
	(expand_builtin_eh_stub_old, expand_builtin_eh_stub): Kill.
	(expand_builtin_set_eh_regs): Kill.
	(eh_regs): Produce a third reg for the actual handler address.
	(eh_return_context, eh_return_stack_adjust): New.
	(eh_return_handler, eh_return_stub_label): New.
	(init_eh_for_function): Initialize them.
	(expand_builtin_eh_return, expand_eh_return): New.
	* except.h: Update prototypes.
	* flow.c (find_basic_blocks_1): Update references to the stub label.
	* function.h (struct function): Kill stub label elements.

	* libgcc2.c (in_reg_window): For REG_SAVED_REG, check that the
	register number is one that would be in the previous window.
	Provide a dummy definition for non-windowed targets.
	(get_reg_addr): New function.
	(get_reg, put_reg, copy_reg): Use it.
	(__throw): Rely on in_reg_window, not INCOMING_REGNO.  Kill stub
	generating code and use __builtin_eh_return.  Use __builtin_dwarf_cfa.

	* alpha.c (alpha_eh_epilogue_sp_ofs): New.
	(alpha_init_expanders): Initialize it.
	(alpha_expand_epilogue): Use it.
	* alpha.h: Declare it.
	* alpha.md (eh_epilogue): New.

	* m68h.h (ARG_POINTER_CFA_OFFSET): New.
	* sparc.h (ARG_POINTER_CFA_OFFSET): New.

Tue Sep 15 19:31:58 1998  Michael Meissner  <meissner@cygnus.com>

	* i960.h (CONST_COSTS): Fix thinko.  Test flag, not the constant
	flag bit mask.

Tue Sep 15 14:10:54 1998  Andrew MacLeod  <amacleod@cygnus.com>

	* except.h (struct eh_entry): Add false_label field.
	(end_catch_handler): Add prototype.
	* except.c (push_eh_entry): Set false_label field to NULL_RTX.
	(start_catch_handler): When using old style exceptions, issue
	runtime typematch code before continuing with the handler.
	(end_catch_handler): New function, generates label after handler
	if needed by older style exceptions.
	(expand_start_all_catch): No need to check for new style exceptions.
	(output_exception_table_entry): Only output the first handler label
	for old style exceptions.
	* libgcc2.c (__eh_rtime_match): New routine to lump runtime matching
	mechanism into one function, if a runtime matcher is provided.

Tue Sep 15 13:53:59 1998  Andrew MacLeod  <amacleod@cygnus.com>

	* config/i960/i960.h (SLOW_BYTE_ACCESS): Change definition to 1.

Tue Sep 15 09:59:01 1998  Mark Mitchell  <mark@markmitchell.com>

	* integrate.c (copy_decl_list): Fix typo.

Tue Sep 15 04:18:52 1998  David S. Miller  <davem@pierdol.cobaltmicro.com>

	* config/sparc/sparc.md (movdf_const_intreg_sp32): Fix length
	attribute.

Mon Sep 14 14:02:53 1998  Jeff Law  (law@cygnus.com)

	* version.c: Bump for snapshot.

Mon Sep 14 10:33:56 1998  Jeff Law  (law@cygnus.com)

	* version.c: Bump for snapshot.

Mon Sep 14 09:51:05 1998  Jeff Law  (law@cygnus.com)

	* version.c: Bump for snapshot.

Sun Sep 13 22:10:18 1998  David S. Miller  <davem@pierdol.cobaltmicro.com>

	* invoke.texi (C Dialect Options): Put back missing @end itemize.

Mon Sep 14 02:33:46 1998  Alexandre Oliva  <oliva@dcc.unicamp.br>

	* configure.in: Remove usage of `!' to negate the result of a
	command; some common shells do not support it.

Sun Sep 13 19:17:35 1998  David S. Miller  <davem@pierdol.cobaltmicro.com>

	* configure.in: In sparc9-sol2 config, use 'if test' not
	brackets.
	* configure: Rebuilt.

	* config/sparc/sol2-sld-64.h (SPARC_DEFAULT_CMODEL): Change to
	CM_MEDANY.
	(CPP_CPU_SPEC): Do not define _LP64, header files do this.
	(CPP_CPU_DEFAULT_SPEC): Likewise.
	* config/sparc/sol2.h (INIT_SUBTARGET_OPTABS): Get the names right
	for arch64 libfuncs.

	* config/sparc/sparc.md (goto_handler_and_restore): Allow any mode
	for operand zero.

Sun Sep 13 09:11:59 1998  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* acconfig.h (NEED_DECLARATION_STRSIGNAL): Provide a stub.

	* collect2.c: Don't declare `sys_siglist' here.
	(my_strsignal): Prototype and define new function.  Use it in
	place of `sys_siglist' hacks.

	* mips_tfile.c: Likewise.

	* configure.in (AC_CHECK_FUNCS): Check for strsignal.
	(GCC_NEED_DECLARATIONS): Likewise.

	* system.h (strsignal): Prototype it, if necessary.
	(sys_siglist): Declare it, if necessary.

Sun Sep 13 04:37:28 1998  David S. Miller  <davem@pierdol.cobaltmicro.com>

	* loop.c (move_movables): While removing insn sequences, preserve
	the next pointer of the most recently deleted insn when we skip
	over a NOTE.

Sun Sep 13 08:13:39 1998  Ben Elliston  <bje@cygnus.com>

	* objc/config-lang.in: Do not output the name of the selected
	thread file when building the front-end.  The Makefile for the
	runtime library will do this.

	* objc/Make-lang.in: Do not build the runtime library or install
	the Objective-C header files.  The Makefile for the runtime
	library will do this.

	* objc/Makefile.in (all.indirect): Only build the front-end.
	(compiler): Rename to `frontend'.
	(obj-runtime): Remove target.
	(copy-headers): Likewise.
	(clean): No need to remove `libobjc.a' any longer.

Sat Sep 12 11:37:19 1998  Michael Meissner  <meissner@cygnus.com>

	* rs6000.h ({ASM,CPP}_CPU_SPEC): Add support for all machines
	supported with -mcpu=xxx.

Fri Sep 11 23:55:54 1998  David S. Miller  <davem@pierdol.cobaltmicro.com>

	* flow.c (mark_set_1): Recognize multi-register structure return
	values in CALL insns.
	(mark_used_regs): Likewise.
	(count_reg_sets_1): Likewise.
	(count_reg_references):	Likewise.
	* rtlanal.c (note_stores): Likewise.
	(reg_overlap_mentioned_p): Likewise.
	* haifa-sched.c (check_live_1): Likewise.
	(update_live_1): Likewise.
	(sched_analyze_1): Likewise.
	(sched_note_set): Likewise.
	(birthing_insn_p): Likewise.
	(attach_deaths): Likewise.

	* config/sparc/sparc.md (movdf_const_intreg_sp64): Disable.

Fri Sep 11 22:57:55 1998  Eric Dumazet  <dumazet@cosmosbay.com>

	* config/i386/sco5.h (ASM_WEAKEN_LABEL): Defined as in svr4.h.

Thu Sep 10 22:02:04 1998  David S. Miller  <davem@pierdol.cobaltmicro.com>

	* glimits.h (__LONG_MAX__): Recognize __sparcv9 too.

Thu Sep 10 21:19:10 1998  Jakub Jelinek  <jj@sunsite.ms.mff.cuni.cz>

	* configure.in: Add check for GAS subsection -1 support.
	* acconfig.h (HAVE_GAS_SUBSECTION_ORDERING): Add.
	* configure config.in: Rebuilt.
	* config/sparc/sparc.h (CASE_VECTOR_MODE): For V9 flag_pic, use
	SImode is subsection -1 works, else use DImode.
	(ASM_OUTPUT_ADDR_VEC_START, ASM_OUTPUT_ADDR_VEC_END): Define if
	subsection -1 works.
	* config/sparc/sparc.c (sparc_output_addr_vec,
	sparc_output_addr_diff_vec): Use them if defined.

Thu Sep 10 10:46:01 1998  Mark Mitchell  <mark@markmitchell.com>

	* tree.h (DECL_ORIGIN): New macro.
	* integrate.c (copy_and_set_decl_abstract_origin): New function.
	(copy_decl_list): Use it.
	(integrate_parm_decls): Likewise.
	(integrate_decl_tree): Likewise.
	* dwarf2out.c (decl_ultimate_origin): Simplify.
	* dwarfout.c (decl_ultimate_origin): Likewise.
	* c-decl.c (duplicate_decls): Use DECL_ORIGIN.
	(pushdecl): Likewise.

Thu Sep 10 08:01:31 1998  Anthony Green  <green@cygnus.com>

	* config/rs6000/rs6000.c (output_epilog): Add Java support.

Thu Sep 10 14:48:59 1998  Martin von Löwis  <loewis@informatik.hu-berlin.de>

	* invoke.texi (C++ Dialect Options): Document -fhonor-std.

Thu Sep 10 01:38:05 1998  Jeffrey A Law  (law@cygnus.com)

	* reg-stack.c (straighten_stack): Do nothing if the virtual stack is
	empty or has a single entry.

	* toplev.c (rest_of_compilation): Open up the dump file for reg-stack
	before calling reg_to_stack.

Thu Sep 10 00:03:34 1998  Richard Henderson  <rth@cygnus.com>

	* alpha.c (alphaev5_insn_pipe): Abort on default case.
	(alphaev5_next_group): Swallow CLOBBERs and USEs.

	* c-tree.h (warn_long_long): Declare it.

Wed Sep  9 23:31:36 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.

Wed Sep  9 23:00:48 1998  Nathan Sidwell  <nathan@acm.org>

	* c-lex.c (real_yylex): Don't warn about long long constants if
	we're allowing long long

Wed Sep  9 21:58:41 1998  Bernd Schmidt  <crux@pool.informatik.rwth-aachen.de>

	* except.h (current_function_eh_stub_label): Declare.
	(current_function_eh_old_stub_label): Declare.
	* function.h (struct function): New members eh_stub_label and
	eh_old_stub_label.
	* except.c (current_function_eh_stub_label): New variable.
	(current_function_eh_old_stub_label): New variable.
	(init_eh_for_function): Clear them.
	(save_eh_status): Save them.
	(restore_eh_status): Restore them.
	(expand_builtin_eh_stub): Set current_function_eh_stub_label.
	(expand_builtin_eh_stub_old): Set current_function_eh_old_stub_label.
	* flow.c (find_basic_blocks_1): When handling a REG_LABEL note, don't
	make an edge from the block that contains it to the block starting
	with the label if this label is one of the eh stub labels.
	If eh stub labels exist, show they are reachable from the last block
	in the function.

	* reload1.c (reload): Break out several subroutines and make some
	variables global.
	(calculate_needs_all_insns): New function, broken out of reload.
	(calculate_needs): Likewise.
	(find_reload_regs): Likewise.
	(find_group): Likewise.
	(find_tworeg_group): Likewise.
	(something_needs_reloads): New global variable, formerly in reload.
	(something_needs_elimination): Likewise.
	(caller_save_spill_class): Likewise.
	(caller_save_group_size): Likewise.
	(max_needs): Likewise.
	(group_size): Likewise.
	(max_groups): Likewise.
	(max_nongroups): Likewise.
	(group_mode): Likewise.
	(max_needs_insn): Likewise.
	(max_groups_insn): Likewise.
	(max_nongroups_insn): Likewise.
	(failure): Likewise.

	* print-rtl.c (print_rtx): For MEMs, print MEM_ALIAS_SET.

Wed Sep  9 13:14:41 1998  Richard Henderson  <rth@cygnus.com>

	* loop.c (load_mems): Copy rtx for output mem.

Wed Sep  9 15:16:58 1998  Gavin Romig-Koch  <gavin@cygnus.com>

	* mips/abi64.h (LONG_MAX_SPEC): Don't set LONG_MAX for
	mips1 or mips2 either.

Wed Sep  9 12:31:35 1998  Jeffrey A Law  (law@cygnus.com)

	* pa.c (pa_reorg): New marking scheme for jumps inside switch
	tables.
	(pa_adjust_insn_length): Update to work with new marking scheme
	for jumps inside switch tables.
	* pa.md (switch_jump): Remove pattern.
	(jump): Handle jumps inside jump tables.

	* Makefile.in (profile.o): Depend on insn-config.h

Wed Sep  9 09:36:51 1998  Jim Wilson  <wilson@cygnus.com>

	* iris6.h (DWARF2_UNWIND_INFO): Undef.

Wed Sep  9 01:32:01 1998  David S. Miller  <davem@pierdol.cobaltmicro.com>

	Add preliminary native sparcv9 Solaris support.
	* configure.in: Recognize sparv9-*-solaris2*
	* configure: Rebuilt.
	* config.sub: Recognize sparcv9 just like sparc64.
	* config/sparc/sol2-c1.asm config/sparc/sol2-ci.asm
	config/sparc/sol2-cn.asm: Macroize so it can be shared between
	32-bit and 64-bit Solaris systems.
	* config/sparc/t-sol2: Assemble those with cpp.
	* config/sparc/sparc.h (TARGET_CPU_sparcv9): New alias for v9.
	(*TF*_LIBCALL): If ARCH64 use V9 names.
	* config/sparc/{xm-sysv4-64,sol2-sld-64}.h: New	files.

Wed Sep  9 01:07:30 1998  Jakub Jelinek  <jj@sunsite.ms.mff.cuni.cz>

	* config/sparc/sparc.h (TARGET_CM_MEDMID): Fix documentation.
	(CASE_VECTOR_MODE): Set to SImode even if PTR64, when MEDLOW and
	not doing pic.
	(ASM_OUTPUT_ADDR_{VEC,DIFF}_ELT): Check CASE_VECTOR_MODE not
	Pmode.
	* config/sparc/sparc.md (tablejump): Likewise, and sign extend op0
	to Pmode if CASE_VECTOR_MODE is something else.

Wed Sep  9 00:10:31 1998  Jeffrey A Law  (law@cygnus.com)

	* prefix.c (update_path): Correctly handle cases where PATH is
	a substring of the builtin prefix, but specifies a different
	directory location.

Tue Sep  8 23:46:04 1998  Hans-Peter Nilsson  <hp@axis.se>

	* expr.c: Corrected comment about what MOVE_RATIO does.
	* config/alpha/alpha.h: Likewise.
	* config/1750a/1750a.h: Likewise.
	* config/clipper/clipper.h: Likewise.
	* config/i386/i386.h: Likewise.

Tue Sep  8 22:56:12 1998  Jeffrey A Law  (law@cygnus.com)

	* configure.in (m68k-next-nextstep3*): Use collect2.
	Similarly for x86 NeXT configurations.
	* configure: Rebuilt.

Tue Sep  8 01:38:57 1998  Nathan Sidwell  <nathan@acm.org>

	* configure.in: Don't assume srcdir is .../gcc.
	* configure: Rebuilt.

Sat Sep  5 16:34:34 1998  John Wehle  (john@feith.com)

	* global.c: Update comments.
	(global_alloc): Assign allocation-numbers
	even for registers allocated by local_alloc in case
	they are later spilled and retry_global_alloc is called.
	(mark_reg_store, mark_reg_clobber,
	mark_reg_conflicts, mark_reg_death): Always record a
	conflict with a pseudo register even if it has been
	assigned to a hard register.
	(dump_conflicts): Don't list pseudo registers already assigned to
	a hard register as needing to be allocated, but do list their
	conflicts.
	* local-alloc.c: Update comment.

Mon Sep  7 23:38:01 1998  Jeffrey A Law  (law@cygnus.com)

	* configure.in: Check for bogus GCC_EXEC_PREFIX and LIBRARY_PATH.
	* configure: Rebuilt.

Mon Sep  7 22:41:46 1998  Michael Meissner  <meissner@cygnus.com>

	* rs6000.c (rs6000_override_options): Fix name for ec603e, to add
	missing 'c'.
	* t-ppccomm (MULTILIB_MATCHES_FLOAT): Add support for -mcpu=xxx
	for all targets that set -msoft-float.

Mon Sep  7 23:30:07 1998  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* toplev.c (print_switch_values): Make static to match prototype.

Mon Sep  7 19:13:59 1998  Jeffrey A Law  (law@cygnus.com)

	* configure.in: If we are unable to find the "gnatbind" program,
	then do not configure the ada subdir.
	* configure: Rebuilt.

Sun Sep  6 14:03:58 1998  Jeff Law  (law@cygnus.com)

	* version.c: Bump for snapshot.

Sun Sep  6 13:28:07 1998  Jeff Law  (law@cygnus.com)

	* version.c: Bump for snapshot.

Sun Sep  6 08:54:14 1998  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* Makefile.in (toplev.o): Depend on $(EXPR_H).
	(insn-extract.o, insn-attrtab.o): Depend on toplev.h.

	* gansidecl.h: Define ATTRIBUTE_NORETURN.

	* genattrtab.c: Have insn-attrtab.c include toplev.h.

	* genextract.c: Have insn-extract.c include toplev.h.

	* rtl.h: Don't prototype `fatal_insn_not_found' and `fatal_insn'.

	* toplev.c: Include expr.h.
	(really_sorry, fancy_abort): Remove prototypes.
	(set_target_switch): Add argument in prototype.
	(vfatal): Mark prototype with ATTRIBUTE_NORETURN.
	(v_really_sorry): Likewise.
	(print_version, print_single_switch, print_switch_values): Make
	static and add prototype arguments.
	(decl_printable_name): Add prototype arguments.
	(lang_expand_expr_t): New typedef.
	(lang_expand_expr): Declare as a lang_expand_expr_t.
	(incomplete_decl_finalize_hook): Add prototype argument.
	(decl_name): Mark variable `verbosity' with ATTRIBUTE_UNUSED.
	(botch): Likewise for variable `s'.
	(rest_of_type_compilation): Mark variables `type' and `toplev'
	with ATTRIBUTE_UNUSED if none of DBX_DEBUGGING_INFO,
	XCOFF_DEBUGGING_INFO or SDB_DEBUGGING_INFO are defined.
	(display_help): Make variable `i' an `unsigned long'.
	(main): Remove unused parameter `envp'.
	Cast assignment to `lang_expand_expr' to a `lang_expand_expr_t'.
	Cast -1 when comparing it with a `size_t'.

	* toplev.h (fatal, fatal_io_error, pfatal_with_name): Mark
	prototype with ATTRIBUTE_NORETURN.
	(fatal_insn_not_found, fatal_insn, really_sorry,
	push_float_handler, pop_float_handler): Add prototypes.
	(fancy_abort): Mark prototype with ATTRIBUTE_NORETURN.
	(do_abort, botch): Add prototypes.

Sat Sep  6 12:05:18 1998  John Carr  <jfc@mit.edu>

	* final.c (final): If a label is reached only from a single jump,
	call NOTICE_UPDATE_CC on the jump and its predecessor before
	emitting the insn after the label.

	* i386.h: Add AMD K6 support.
	Change TARGET_* macros to use table lookup.
	(INITIALIZE_TRAMPOLINE): Improve trampoline code.
	(ADJUST_COST): Change definition to call function in i386.c.
	(ISSUE_RATE): Define as 2 for anything newer than an 80486.
	* i386.c: Add AMD K6 support.
	Add constants for feature tests used by TARGET_* macros.
	(split_di): If before reload, call gen_lowpart and gen_highpart.
	(x86_adjust_cost): New function.
	(put_jump_code): New function.
	(print_operand): New codes 'D' and 'd'.
	* i386.md: New insn types.  New insn attribute "memory".
	Redefine scheduling parameters to use new types and add AMD K6
	support.  Explicitly set type of most insns.
	(move insns): K6 prefers movl $0,reg to xorl reg,reg.  Pentium
	Pro and K6 prefer movl $1,reg to incl reg.
	(adddi3, subdi3): Set cc_status.
	(DImode shift patterns): Change label counters from HOST_WIDE_INT
	to int; x86 can't have more than 2^31 DImode shifts per	file.
	(setcc): Combine all setcc patterns.  Allow writing memory.
	Combine all jump patterns using match_operator.
	(*bzero): Name pattern.  Emit multiple stos instructions when that
	is faster than rep stos.
	(xordi3, anddi3, iordi3): Simplify DImode logical patterns and
	add define_split.

Sun Sep  6 11:17:20 1998  Dave Love  <d.love@dl.ac.uk>

	* config/m68k/x-next (BOOT_LDFLAGS): Define suitably for f771
	linking.

Sat Sep  5 22:05:25 1998  Richard Henderson  <rth@cygnus.com>

	* alpha.c (alpha_ra_ever_killed): Inspect the topmost sequence,
	not whatever we're generating now.

	* alpha.c (set_frame_related_p, FRP): New.
	(alpha_expand_prologue): Mark frame related insns.
	(alpha_expand_epilogue): Likewise, but with a null FRP.
	* alpha.h (INCOMING_RETURN_ADDR_RTX): New.
	* alpha.md (exception_receiver): New.
	* alpha/crtbegin.asm (.eh_frame): New beginning.
	(__do_frame_setup, __do_frame_takedown): New.
	* alpha/crtend.asm (.eh_frame): New ending.
	* alpha/elf.h (DWARF2_DEBUGGING_INFO): Define.
	(ASM_SPEC): Don't emit both dwarf2 and mdebug.
	(ASM_FILE_START): Don't emit .file for dwarf2.

	* rtl.h (enum reg_note): Add REG_FRAME_RELATED_EXPR.
	* rtl.c (reg_note_name): Likewise.
	* rtl.texi (REG_NOTES): Likewise.
	* dwarf2out.c (dwarf2out_frame_debug): Use it.  Recognize a store
	without an offset.

Sat Sep  5 14:47:17 1998  Richard Henderson  <rth@cygnus.com>

	* i386.h (PREFERRED_RELOAD_CLASS): Standard fp constants load to TOS.
	* i386.md (movsf, movdf, movxf): Validate memory address returned
	from force_const_mem.  Kill useless REG_EQUAL setting code.

Sat Sep  5 14:23:31 1998  Torbjorn Granlund  <tege@matematik.su.se>

	* m68k.md (zero_extendsidi2): Fix typo.

Sat Sep  5 13:40:24 1998  Krister Walfridsson  <cato@df.lth.se>

	* configure.in: Removed references to the removed file.
	* config/xm-netbsd.h: Use ${cpu_type}/xm-netbsd.h for
	arm*-*-netbsd* and ns32k-*-netbsd*.
	* config/i386/xm-netbsd.h: Removed unnecessary file.
	* config/m68k/xm-netbsd.h: Likewise.
	* config/sparc/xm-netbsd.h: Likewise.
	* config/mips/xm-netbsd.h: Likewise.

Sat Aug 29 13:32:58 1998  Mumit Khan  <khan@xraylith.wisc.edu>

	* i386/cygwin32.h (BIGGEST_ALIGNMENT): Define.
	(PCC_BITFIELD_TYPE_MATTERS): Define to be 0.

	* i386/cygwin32.h (ASM_OUTPUT_SECTION_NAME): Don't check for
	for exact section attributions.

	* i386/mingw32.h (CPP_PREDEFINES): Add __MSVCRT__ for msvc
	runtime.
	* i386/crtdll.h (CPP_PREDEFINES): Define.

Sat Sep  5 03:23:05 1998  Jeffrey A Law  (law@cygnus.com)

	* m68k.md (5200 movqi): Do not allow byte sized memory references
	using address regs.
	* m68k.c (output_move_qimode): Do not use byte sized operations on
	address registers.

	* Makefile.in (pexecute.o): Use pexecute.c from libiberty.  Provide
	explicit rules for building.  Similarly for alloca, vfprintf,
	choose-temp and mkstemp, getopt, getopt1, and obstack.
	(INCLUDES): Add $(srcdir)/../include.
	* pexecute.c, alloca.c, vfprintf.c, choose-temp.c, mkstemp.c: Delete.
	* getopt.h, getopt.c getopt1.c, obstack.c, obstack.h: Likewise.

Fri Sep  4 11:57:50 1998  Tom Tromey  <tromey@cygnus.com>

	* gcc.c (do_spec_1): [case 'o'] Account for
	lang_specific_extra_outfiles.
	(main): Correctly clear all slots in outfiles for
	lang_specific_extra_outfiles.  Set input_file_number before
	calling lang_specific_pre_link.

Fri Sep  4 10:37:07 1998  Jim Wilson  <wilson@cygnus.com>

	* loop.c (load_mems): Fix JUMP_LABEL field after for_each_rtx call.

Fri Sep  4 02:01:05 1998  David S. Miller  <davem@pierdol.cobaltmicro.com>

	* config/sparc/sparc.c (output_double_int): In all V9 symbolic
	cases, use xword.
	(sparc_output_deferred_case_vectors): If no work to do, return.
	Fix thinko in Sept 1 change.

1998-09-03  SL Baur  <steve@altair.xemacs.org>

	* Makefile.in: Add semicolon in BISON definition for portability.

Thu Sep  3 13:34:41 1998  Toon Moene  <toon@moene.indiv.nluug.nl>

	* config/nextstep.c (handle_pragma): Correct name of third
	argument.

Tue Sep  1 11:30:33 1998  Nick Clifton  <nickc@cygnus.com>

	* config/m32r/m32r.md: Change (reg:CC 17) to (reg:SI 17).
	* config/m32r/m32r.h: Make register 17 be fixed.
	* config/m32r/m32r.c: Use SImode for cc operations.

Thu Sep  3 18:17:34 1998  Benjamin Kosnik  <bkoz@cygnus.com>

	* invoke.texi (Warning Options): Add -Wnon-template-friend
	documentation.

Thu Sep  3 18:16:16 1998  Michael Meissner  <meissner@cygnus.com>

	* rs6000.c (rs6000_override_options): Add -mcpu={401,e603e}.

Thu Sep  3 18:05:16 1998  David Edelsohn  <edelsohn@gnu.org>

	* rs6000.md (movsf): Disable explicit secondary-reload-like
	functionality if TARGET_POWERPC64.
	(movdf): Remove TARGET_POWERPC64 explicit secondary-reload-like
	functionality.

Thu Sep  3 11:41:40 1998  Robert Lipe  <robertl@dgii.com>

	* fixinc.sco: Borrow code to wrap 'bool' typedefs from tinfo.h
	and term.h from fixinc.wrap.

Thu Sep  3 09:47:31 1998  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* aclocal.m4 (GCC_HEADER_STRING): New macro to detect if it is
	safe to include both string.h and strings.h together.
	(GCC_NEED_DECLARATION): Test STRING_WITH_STRINGS when deciding
	which headers to search for function declarations.  Continue to
	prefer string.h over strings.h when both are not acceptable.

	* acconfig.h (STRING_WITH_STRINGS): Add stub.

	* configure.in: Call GCC_HEADER_STRING.

	* system.h: Test STRING_WITH_STRINGS when deciding which headers
	to include.  Continue to prefer string.h over strings.h when both
	are not acceptable.

Wed Sep  2 23:56:29 1998  David S. Miller  <davem@pierdol.cobaltmicro.com>

	* config/sparc/sparc.c (output_double_int): If V9 and MEDLOW, do
	not assume top 32-bits of symbolic addresses are zero if
	flag_pic.

Thu Sep  3 00:23:21 1998  Richard Henderson  <rth@cygnus.com>

	* ginclude/va-alpha.h: Protect entire second portion of the
	file against double inclusion.

Thu Sep  3 00:37:55 1998  Ovidiu Predescu  <ovidiu@aracnet.com>

	Added support for the Boehm's garbage collector.
	* configure.in: Handle --enable-objc-gc.
	* configure: Rebuilt.
	* Makefile.in (CHECK_TARGETS): Add check-objc.
	(check-objc): New rule.
	* objc/Make-lang.in: Build a different Objective-C library that
	runs with the Boehm's collector.
	* objc/encoding.c (objc_round_acc_size_for_types): New function.
	* objc/encoding.c: Correctly compute the size of compound types in
	the presence of bitfields. Skip the variable name of the type if
	any. Added support for long long.
	* objc/encoding.h (_C_GCINVISIBLE): New specifier.
	(_F_GCINVISIBLE): New mask.
	* objc/gc.c: New file. Compute the type memory mask associated with
	a class based on the runtime information.
	* objc/misc.c: Added the hooks that use the Boehm's collector
	allocation functions.
	* objc/objc-act.c (build_class_template): Generate a new class
	member (gc_object_type) to hold the class' type memory mask.
	(build_shared_structure_initializer): Initialize the new member to
	NULL.
	(encode_complete_bitfield): New function. Generate the new
	encoding.
	(encode_field_decl): Generate the new encoding only for the GNU
	runtime.
	* objc/objc-api.h (_C_LNG_LNG, _C_ULNG_LNG): New specifiers for the
	long long types.
	(class_get_gc_object_type): New function to mark a pointer instance
	variable as a weak pointer.
	* objc/objc-features.texi: New file.
	* objc/objc.h (gc_object_type): New class member.
	* objc/objects.c (class_create_instance): Create a typed memory
	object when compiled with Boehm's collector support.
	* objc/sendmsg.c (__objc_init_install_dtable): Call
	__objc_send_initialize instead of setting the initialize flag.
	(__objc_send_initialize): Call __objc_generate_gc_type_description
	to generate the class type memory mask. Rewrite the code that
	sends the +initialize so that it is called only once (bug report
	and fix from Ronald Pijnacker <Ronald.Pijnacker@best.ms.philips.com>).
	* testsuite/objc: New testsuite for Objective-C type encoding.
	* testsuite/lib/objc-torture.exp: New file.
	* testsuite/lib/objc.exp: New file.

Wed Sep  2 14:47:36 1998  Jim Wilson  <wilson@cygnus.com>

	* jump.c (jump_optimize): In if/then/else transformations, add
	another call to modified_between_p for the jump insn.

Wed Sep  2 14:16:49 1998  Jeffrey A Law  (law@cygnus.com)

	* fix-header.c (symlink): Treat like readlink.

Wed Sep  2 19:30:06 1998  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* dwarfout.c (fundamental_type_code): Encode 32 bit floats/doubles
	as FT_float.

Wed Sep  2 10:06:07 1998  Nick Clifton  <nickc@cygnus.com>

	* config/nextstep.h:    Update HANDLE_PRAGMA macro.
	* config/h8300/h8300.h: Update HANDLE_PRAGMA macro.
	* config/i960/i960.h:   Update HANDLE_PRAGMA macro.

	* config/nextstep.c (handle_pragma): Take three arguments, as per
	the new HANDLE_PRAGMA macro specification.
	* config/h8300/h8300.c (handle_pragma): Take three arguments, as
	per the new HANDLE_PRAGMA macro specification.
	* config/i960/i960.c (process_pragma): Take three arguments, as
	per the new HANDLE_PRAGMA macro specification.

Wed Sep  2 09:25:29 1998  Nick Clifton  <nickc@cygnus.com>

	* c-lex.c (check_newline): Call HANDLE_PRAGMA before
	HANDLE_SYSV_PRAGMA if both are defined.  Generate warning messages
	if unknown pragmas are encountered.
	(handle_sysv_pragma): Interpret return code from
	handle_pragma_token ().  Return success/failure indication rather
	than next unprocessed character.
	(pragma_getc): New function: retrieves characters from the
	input stream.  Defined when HANDLE_PRAGMA is enabled.
	(pragma_ungetc): New function: replaces characters back into the
	input stream.  Defined when HANDLE_PRAGMA is enabled.

	* c-pragma.c (handle_pragma_token): Return success/failure status
	of the parse.

	* c-pragma.h: Change prototype of handle_pragma_token().

	* varasm.c (handle_pragma_weak): Only create this function if
	HANDLE_PRAGMA_WEAK is defined.

	* c-common,c (decl_attributes): If defined call the expression
	contained within the INSERT_ATTRIBUTES macro before adding
	attributes to a decl.

	* tm.texi (HANDLE_PRAGMA): Document the new version of
	HANDLE_PRAGMA, which takes three arguments.
	(INSERT_ATTRIBUTES): Document this new macro.

	* LANGUAGES: Document the new version of HANDLE_PRAGMA and the
	new INSERT_ATTRIBUTES macro.

Wed Sep  2 02:03:23 1998  David S. Miller  <davem@pierdol.cobaltmicro.com>

	* config/sparc/sparc.md (movdf): Only generate special RTL for
	LABEL_REFs when PIC.
	(move_label_di): Remove.
	(movdi_pic_label_ref, movdi_high_pic_label_ref,
	movdi_lo_sum_pic_label_ref): New patterns for 64-bit label
	references when PIC.
	* config/sparc/sparc.h (ASM_OUTPUT_ADDR_VEC_ELT,
	ASM_OUTPUT_ADDR_DIFF_ELT): Don't do anything special for MEDLOW,
	output an .xword for all 64-bit cases.

Tue Sep  1 15:55:17 1998  David S. Miller  <davem@pierdol.cobaltmicro.com>

	* config/sparc/sparc.c (finalize_pic): Don't output arbitrary
	alignment, use FUNCTION_BOUNDARY instead.
	(sparc_output_deferred_case_vectors): Likewise.

Mon Aug 31 17:25:41 1998  David S. Miller  <davem@pierdol.cobaltmicro.com>

	* config/sparc/sparc.md (movsf_const_intreg): Kill warning.
	(movtf_insn_sp64, movtf_no_e_insn_sp64): Reorder alternatives.

Mon Aug 31 13:57:55 1998  Richard Henderson  <rth@cygnus.com>

	* alpha/va_list.h: New file.
	* alpha/x-alpha (EXTRA_HEADERS): New.  Add va_list.h.

Mon Aug 31 14:55:02 1998  Jeffrey A Law  (law@cygnus.com)

	* NEWS: Add SCO Openserver and Unixware 7 notes.

	* NEWS: Fix typos.

Mon Aug 31 15:42:18 1998  Dave Brolley  <brolley@cygnus.com>

	* varasm.c (compare_constant_1): Handle RANGE_EXPR.
	(record_constant_1): Handle RANGE_EXPR.

Mon Aug 31 10:54:03 1998  Richard Henderson  <rth@cygnus.com>

	* print-rtl.c (print_rtx): NOTE_INSN_LIVE has an rtx not a bitmap.
	* haifa-sched.c (sched_analyze): Handle NOTE_INSN_RANGE_START
	and NOTE_INSN_RANGE_END specially.
	(reemit_notes): Likewise.

Mon Aug 31 10:18:52 1998  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* sparc.c (TMASK, UMASK): Use `(unsigned)1' not `1U'.
	(ultrasparc_sched_init): Remove unneeded &.

Mon Aug 31 10:47:16 1998  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* config/m68k/m68k.h (TARGET_SWITCHES): Don't remove MASK_68040
	for m68020-60, to prevent the use of fintrz.

Sun Aug 30 22:17:20 1998  Mark Mitchell  <mark@markmitchell.com>

	* configure.in: If the native compiler is GCC use $(WARN_CFLAGS)
	even in stage1.
	* Makefile.in: Likewise.
	* configure: Regenerated.

Sun Aug 30 22:15:41 1998  H.J. Lu  (hjl@gnu.org)

	* configure.in (gxx_include_dir): Changed to
	'${prefix}/include/g++'-${libstdcxx_interface}.
	* configure: Rebuilt.

Sun Aug 30 20:19:43 1998  Hans-Peter Nilsson  <hp@axis.se>

	* expr.c (expand_expr): Change ">" to ">=" making MOVE_RATIO use
	consistent.
	* tm.texi (Costs): Say MOVE_RATIO is number of mem-mem move
	*sequences* *below* which scalar moves will be used.

Sun Aug 30 17:18:43 1998  Jeffrey A Law  (law@cygnus.com)

	* collect2.c (mktemp): Delete unused declaration.

	* config/xm-netbsd.h: Remove unnecessary file.
	* config/*/xm-netbsd.h: Do not include the generic xm-netbsd.h
	file anymore, it is not needed.

Sun Aug 30 16:05:45 1998  Mark Mitchell  <mark@markmitchell.com>

	* convert.c (convert_to_integer): Issue an error on conversions to
	incomplete types.

Sun Aug 30 16:47:20 1998  Martin von Lvwis  <loewis@informatik.hu-berlin.de>

	* Makefile.in: Add lang_tree_files and gencheck.h.
	* configure.in: Generate them.
	* gencheck.c: Include gencheck.h.

Sat Aug 29 21:38:24 1998  David S. Miller  <davem@pierdol.cobaltmicro.com>

	* config/sparc/sparc.md (pic_lo_sum_di, pic_sethi_di): Rename to
	movdi_lo_sum_pic and movdi_high_pic and make visible.
	* config/sparc/sparc.c (legitimize_pic_address): For -fPIC,
	emit these when Pmode is not SImode.
	* config/sparc/linux64.h (SPARC_DEFAULT_CMODEL): Make CM_MEDLOW.

Sat Aug 29 14:59:32 1998  Mumit Khan  <khan@xraylith.wisc.edu>

	* i386/cygwin32.h (ASM_OUTPUT_SECTION_NAME): Don't emit
	.linkonce directive after the first time.

Sat Aug 29 12:39:56 1998  Jeffrey A Law  (law@cygnus.com)

	* m68k.md (beq0_di): Generate correct (and more efficient) code when
	the clobbered operand overlaps with an input.
	(bne0_di): Similarly.

	* Makefile.in (INSTALL): Remove "--no-header" argument.

	* NEWS: Various updates.

Fri Aug 28 19:00:44 1998  David S. Miller  <davem@pierdol.cobaltmicro.com>

	* config/sparc/sparc.c (arith_operand, const64_operand,
	const64_high_operand, arith_double_4096_operand): Mark mode as
	unused.
	(create_simple_focus_bits): Remove unused arg highest_bit_set, all
	callers changed.
	(sparc_emit_set_const64): Remove unused variable i.
	(sparc_splitdi_legitimate): Likewise for addr_part.
	(ultra_code_from_mask): Likewise for mask.
	(ultra_cmove_results_ready_p): Fixup entry modulo calc. and
	reverse return values so it matches usage and comments.
	(ultra_flush_pipeline): Likewise.
	(ultra_fpmode_conflict_exists): Likewise, remove unused variable
	this_type, and allow loads and stores of differing FP modes as
	they do not create a conflict.
	(ultra_find_type): Initialize fpmode to SFmode, fix
	parenthesization thinkos in large conditional.
	(ultrasparc_sched_init): Mark dump and sched_verbose as unused.
	Init free_slot_mask after ultra_cur_hist is reset, not before.
	(ultrasparc_rescan_pipeline_state): Remove unused variable ucode.
	(ultrasparc_sched_reorder): Don't bzero current pipeline state,
	use ultra_flush_pipeline instead, then re-init group pointer.
	Fix statement with no effect.  If no progress made in, and no
	instructions scheduled at all, advance to new pipeline cycle else
	we get into an endless loop.
	(ultrasparc_adjust_cost): Remove previous arg.
	* config/sparc/sparc.h (ADJUST_COST): Update to reflect that.

Fri Aug 28 13:52:35 1998  Jim Wilson  <wilson@cygnus.com>

	* sparc.md (DImode, DFmode, TFmode splits): Delete self_reference
	code.  Use reg_overlap_mentioned_p to detect when source and
	destination overlap.
	(negtf2_notv9+1): Use DFmode instead of SFmode in last two operands.

1998-08-28  Brendan Kehoe  <brendan@cygnus.com>

	* loop.c (check_dbra_loop): Pass COMPARISON_VALUE, not
	COMPARISON_VAL, into invariant_p.

Fri Aug 28 15:13:25 1998  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* regmove.c (regclass_compatible_p): New function.
	(regmove_optimize): Use it.

	Use NREGS parameter instead of calling max_reg_num.

	(fixup_match_1): Don't use code = MINUS when later tieing with
	a hard register is likely.

Fri Aug 28 14:54:07 1998  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* loop.c (check_dbra_loop): Fix calculation of FINAL_VALUE when
	COMPARISON_VAL was normalized.

Thu Aug 27 20:10:46 1998  Jeffrey A Law  (law@cygnus.com)

	* loop.c (check_dbra_loop): The loop ending comparison value
	must be an invariant or we can not reverse the loop.

	* loop.c (scan_loop): Count down from max_reg_num - 1 to
	FIRST_PSEUDO_REGISTER to avoid calling max_reg_num each iteration
	of the loop.
	(load_mems_and_recount_loop_regs_set): Likewise.

	* i386.c (print_operand): Remove obsolete 'c' docs.

Wed Aug 26 17:13:37 1998  Tom Tromey  <tromey@cygnus.com>

	* gthr.h: Document __GTHREAD_MUTEX_INIT_FUNCTION.
	* frame.c (init_object_mutex): New function.
	(init_object_mutex_once): Likewise.
	(find_fde): Call it.
	(__register_frame_info): Likewise.
	(__register_frame_info_table): Likewise.
	(__deregister_frame_info): Likewise.

Thu Aug 27 15:14:18 1998  Jeffrey A Law  (law@cygnus.com)

	* haifa-sched.c (sched_analyze_insn): Fix thinko in last change.

Thu Aug 27 16:34:51 1998  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* loop.c (check_dbra_loop): Enable code for reversal
	of some loops without a known constant loop end.

Wed Aug 26 18:38:15 1998  Richard Henderson  <rth@cygnus.com>

	* haifa-sched.c (last_clock_var): New.
	(schedule_block): Initialize it.
	(schedule_insn): Use it to fill insn modes with issue information.

	* alpha.c (alpha_handle_trap_shadows): Remove do-nothing exit.
	Tag trapb and next insn with TImode.
	(alphaev5_insn_pipe, alphaev5_next_group, alphaev5_align_insns): New.
	(alpha_reorg): Add conditional for alpha_handle_trap_shadows.
	Invoke alphaev5_align_insns as appropriate.
	* alpha.h (LABEL_ALIGN_AFTER_BARRIER): Was ALIGN_LABEL_AFTER_BARRIER.
	(MD_SCHED_VARIABLE_ISSUE): New.
	* alpha.md (attr type): Add multi.
	(define_asm_attributes): New.
	(prologue_stack_probe_loop, builtin_setjmp_receiver): Set type multi.
	(arg_home): Likewise.
	(fnop, unop, realign): New.

Wed Aug 26 15:55:41 1998  Jim Wilson  <wilson@cygnus.com>

	* iris5.h (PREFERRED_DEBUGGING_TYPE): Undef.
	* iris5gas.h (PREFERRED_DEBUGGING_TYPE): Define.

	* configure.in (powerpc-ibm-aix4.[12]*): Change from 4.[12].*.
	(rs6000-ibm-aix4.[12]*): Likewise.
	* configure: Regenerate.

Wed Aug 26 09:30:59 1998  Nick Clifton  <nickc@cygnus.com>

	* config/arm/thumb.c (thumb_exit): Do not move a4 into lr if it
	already contains the return address.

Wed Aug 26 12:57:09 1998  Jeffrey A Law  (law@cygnus.com)

	* calls.c (expand_call): Use bitfield instructions to extract/deposit
	word sized hunks when loading unaligned args into registers.

	* haifa-sched.c (sched_analyze_insn): Only create scheduling
	barriers for LOOP, EH and SETJMP notes on the loop_notes list.

	* mn10300.h (RTX_COSTS): Handle UDIV and UMOD too.

Wed Aug 26 16:35:37 1998  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* loop.c (check_dbra_loop): Add some code that would allow reversal
	of some loops without a known constant loop end if it were enabled.

Wed Aug 26 11:08:44 1998  Gavin Romig-Koch  <gavin@cygnus.com>

	* mips.md (lshrsi3_internal2+2): Fix type-o.

Wed Aug 26 10:53:03 1998  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* system.h: Include stdarg.h/varargs.h, make sure they are ordered
	correctly with regards to stdio.h.

	* calls.c: Remove stdarg.h/varargs.h.
	* cccp.c: Likewise.
	* cexp.y: Likewise.
	* combine.c: Likewise.
	* cpperror.c: Likewise.
	* cpplib.c: Likewise.
	* cpplib.h: Likewise.
	* doprint.c: Likewise.
	* emit-rtl.c: Likewise.
	* final.c: Likewise.
	* fix-header.c: Likewise.
	* gcc.c: Likewise.
	* genattr.c: Likewise.
	* genattrtab.c: Likewise.
	* gencodes.c: Likewise.
	* genconfig.c: Likewise.
	* genemit.c: Likewise.
	* genextract.c: Likewise.
	* genflags.c: Likewise.
	* genopinit.c: Likewise.
	* genoutput.c: Likewise.
	* genpeep.c: Likewise.
	* genrecog.c: Likewise.
	* mips-tfile.c: Likewise.
	* prefix.c: Likewise.
	* protoize.c: Likewise.
	* regmove.c: Likewise.
	* toplev.c: Likewise.
	* tree.c: Likewise.

Wed Aug 26 05:09:27 1998  Jakub Jelinek  <jj@sunsite.ms.mff.cuni.cz>

	* config/sparc/sparc.c (sparc_override_options): If not
	TARGET_FPU, turn off TARGET_VIS.
	* config/sparc/sparc.h (TARGET_SWITCHES): Add no-vis.
	(LEGITIMATE_CONSTANT_P): Allow SF/DF mode zero when TARGET_VIS.
	* config/sparc/sparc.md (movsi_insn): Use fzeros not fzero.
	(movdi_insn_sp64): Add VIS fzero alternative.
	(clear_sf, clear_df): New VIS patterns.
	(movsf, movdf expanders): Allow fp_zero_operand flat out when
	TARGET_VIS.
	(one_cmpldi2_sp64): Provide new fnot1 VIS alternative.

Tue Aug 25 10:57:41 1998  Mark Mitchell  <mark@markmitchell.com>

	* loop.c (n_times_set, n_times_used, may_not_optimize,
	reg_single_usage): Convert to varrays.  All uses changed.
	(insert_loop_mem): Return a value.
	(scan_loop): Tweak AVOID_CC_MODE_COPIES code.
	(load_mems_and_recount_loop_regs_set): Likewise.  Grow the arrays, if
	necessary.

Tue Aug 25 23:57:12 1998  Jeffrey A Law  (law@cygnus.com)

	* From Alexandre:
	* configure.in: Do not set thread_file to "irix" since no such
	support exists yet.

	* sparc.md (float abs/neg splits): Check reload_completed before
	calling alter_subreg.

Tue Aug 25 19:17:59 1998  David S. Miller  <davem@pierdol.cobaltmicro.com>

	* config/sparc/sparc.c (sparc_absnegfloat_split_legitimate): New
	function.
	* config/sparc/sparc.h: Declare it.
	* config/sparc/sparc.md (float abs/neg splits): Use it.
	(all other splits): Handle SUBREGs properly where necessary.
	(unnamed (1<<x)-1 V8PLUS pattern): Disable for now.

Tue Aug 25 19:48:46 1998  Jeffrey A Law  (law@cygnus.com)

	* reorg.c (fill_simple_delay_slots): Do not abort if we encounter
	an insn on the unfilled_slots_list that has no delay slots.
	(fill_eager_delay_slots): Similarly.

Tue Aug 25 13:35:20 1998  Nick Clifton  <nickc@cygnus.com>

	* config/v850/v850.c (movsi_source_operand): Treat CONSTANT_P_RTX
	as an ordinary operand.

Tue Aug 25 12:54:57 1998  Jason Merrill  <jason@yorick.cygnus.com>

	* tree.c (valid_machine_attribute): Don't apply attributes to both
	decl and type.

Tue Aug 25 12:23:20 1998  Richard Henderson  <rth@cygnus.com>

	* reload.c (operands_match_p): Handle rtvecs.

	* i386.c (legitimate_pic_address_disp_p): New.
	(legitimate_address_p): Use it.
	(legitimize_pic_address): Use unspecs to represent @GOT and @GOTOFF.
	Handle constant pool symbols just like statics.
	(emit_pic_move): Use Pmode not SImode for clarity.
	(output_pic_addr_const) [SYMBOL_REF]: Remove @GOT and @GOTOFF hacks.
	[UNSPEC]: New, handling what we killed above.
	[PLUS]: Detect and abort on invalid symbol arithmetic.
	* i386.h (CONSTANT_ADDRESS_P): Remove HIGH.

Tue Aug 25 12:02:23 1998  Mark Mitchell  <mark@markmitchell.com>

	* alias.c: Include output.h.
	(DIFFERENT_ALIAS_SETS_P): Don't treat alias sets as
	different if we're in a varargs function.
	* Makefile.in (alias.o): Depend on output.h

Tue Aug 25 19:20:12 1998  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* sh.h (GIV_SORT_CRITERION): Delete.

Tue Aug 25 13:19:46 1998  Dave Brolley  <brolley@cygnus.com>

	* regclass.c (regclass): Use xmalloc/free instead of alloca.
	* stupid.c (stupid_life_analysis): Likewise.
	* reload1.c (reload): Likewise.

Tue Aug 25 05:48:18 1998  Jakub Jelinek  <jj@sunsite.ms.mff.cuni.cz>

	* config/sparc/sparc.c (arith_4096_operand, arith_add_operand,
	arith_double_4096_operand, arith_double_add_operand): New
	predicates.
	* config/sparc/sparc.h (PREDICATE_CODES): Add them, declare them.
	* config/sparc/sparc.md (adddi3, addsi3, subdi3, subsi3): Use
	them to transform add/sub 4096 into add/sub -4096.

Mon Aug 24 23:31:03 1998  David S. Miller  <davem@pierdol.cobaltmicro.com>

	* loop.c (scan_loop): Allocate some slop to handle pseudos
	generated by move_movables.
	(load_mems_and_recount_loop_regs_set): Honor AVOID_CC_MODE_COPIES
	here too.

Mon Aug 24 19:45:40 1998  Jim Wilson  <wilson@cygnus.com>

	* tree.def (DECL_RESULT): Correct documentation.

Tue Aug 25 01:15:27 1998  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* reload1.c (reload_reg_free_before_p): New argument EQUIV;  Changed
	all callers.  Abort for RELOAD_FOR_INSN.  RELOAD_FOR_OUTADDR_ADDR:
	conflicts will all RELOAD_FOR_OUTPUT reloads.

	* reload1.c (reload_cse_regs_1): When deleting a no-op move that
	loads the function result, substitute with a USE.

Mon Aug 24 15:20:19 1998  David Edelsohn  <edelsohn@gnu.org>

	* rs6000.h (GO_IF_LEGITIMATE_ADDRESS): Use TARGET_POWERPC64
	when testing LEGITIMATE_INDEXED_ADDRESS_P DFmode and DImode.
	(LEGITIMIZE_ADDRESS): Use TARGET_POWERPC64 for INDEXED fixup.
	* rs6000.c (print_operand, case 'L'): Add UNITS_PER_WORD, not 4.
	(print_operand, cases 'O' and 'T'): Fix typos in lossage strings.
	* rs6000.md (fix_truncdfsi2_store): Remove %w from non-CONST_INT
	operand.
	(movdf_softfloat32, movdf_hardfloat64, movdf_softfloat64): Change
	'o' to 'm' for GPR variant constraints.

Mon Aug 24 10:25:46 1998  Jeffrey A Law  (law@cygnus.com)

	* loop.c (scan_loop): Honor AVOID_CC_MODE_COPIES.

	* h8300.h (STRIP_NAME_ENCODING): Fix typo.

	* sparc.md (TFmode splits): Use reg_overlap_mentioned_p to detect
	when the source and destination overlap.

	* stmt.c (emit_case_nodes): Change rtx_function to rtx_fn to avoid
	clash with global type.

Mon Aug 24 00:53:53 1998  Jason Merrill  <jason@yorick.cygnus.com>

	* fixinc.irix: Add curses.h handling from fixinc.wrap.

	* c-common.c (combine_strings): Also set TREE_READONLY.
	Change warn_write_strings to flag_const_strings.
	* c-decl.c, c-tree.h: Likewise.

Sun Aug 23 18:39:11 1998  David S. Miller  <davem@pierdol.cobaltmicro.com>

	* config/sparc/sparc.c (sparc_emit_set_const32): If outputting a
	CONST_INT, not a symbolic reference, don't use a HIGH/LO_SUM
	sequence, use SET/IOR instead so CSE can see it.
	* config/sparc/sparc.md (movhi_const64_special,
	movsi_const64_special): New patterns necessitated by that change.
	(movhi_high): Remove.
	(movhi_lo_sum): Change to match an IOR.
	(movdf_insn_sp32): Test TARGET_V9 not TARGET_ARCH64.
	(movdf_insn_v9only): New pattern for when V9 but not ARCH64.
	(movdf_insn_sp64): Test both TARGET_V9 and TARGET_ARCH64.
	(movdf splits): Allow when not V9 or when not ARCH64 and integer
	registers are involved.
	(snesi_zero_extend split): Remove reload_completed test.
	(unnamed plus and minus zero_extend sidi splits): Add it.

Sun Aug 23 11:56:08 1998  Mark Mitchell  <mark@markmitchell.com>

	* extend.texi: Remove description of extension to explicit
	instantiation that is now endorsed by standard C++.

Sun Aug 23 09:39:09 1998  David S. Miller  <davem@pierdol.cobaltmicro.com>

	* config/arc/arc.c (arc_initialize_pic): Remove.
	* config/arc/arc.h (INITIALIZE_PIC): Similarly, this routine does
	nothing on any platform and is invoked by no-one, it does not even
	appear in the documentation.
	* config/sparc/sparc.h (INITIALIZE_PIC): Likewise.
	* config/sparc/sparc.c (initialize_pic): Likewise.
	(find_addr_reg): Remove this as well, no longer referenced after
	my rewrite.

Sun Aug 23 00:17:14 1998  Jeffrey A Law  (law@cygnus.com)

	* recog.c (validate_replace_rtx_group): New function.
	* recog.h (validate_replace_rtx_group): Declare it.
	* regmove.c (optimize_reg_copy_3): If any substitution fails, then undo
	the entire group of substitutions.

Sat Aug 22 23:31:00 1998  Klaus-Georg Adams  (Klaus-Georg.Adams@chemie.uni-karlsruhe.de)

	* loop.c (load_mems): Fix initializers.

Fri Aug 21 23:07:46 1998  David S. Miller  <davem@pierdol.cobaltmicro.com>

	* config/sparc/sparc.md (TFmode splits): Handle destination
	registers being referenced in the address correctly.

	* expmed.c (make_tree) [CONST_INT]: Sign extend even if
	TREE_UNSIGNED, when bitsize of type's mode is larger than
	HOST_BITS_PER_WIDE_INT.

Fri Aug 21 19:31:31 1998  Alexandre Petit-Bianco  <apbianco@cygnus.com>

	* tree.def (LABELED_BLOCK_EXPR, EXIT_BLOCK_EXPR): New tree nodes.
	* tree.h (LABELED_BLOCK_LABEL, LABELED_BLOCK_BODY,
	EXIT_BLOCK_LABELED_BLOCK, EXIT_BLOCK_RETURN, LOOP_EXPR_BODY): New
	macros.
	* expr.c (expand_expr): Handle LABELED_BLOCK_EXPR and
	EXIT_BLOCK_EXPR.

Thu Aug 20 19:43:44 1998  Jeffrey A Law  (law@cygnus.com)

	* h8300.c (h8300_encode_label): Use '&' for tiny data items.
	* h8300.h (TINY_DATA_NAME_P): Likewise.
	(STRIP_NAME_ENCODING): Handle '&'.

	* mn10200.h (REG_OK_FOR_INDEX_P): Do not check the mode of the
	register (it could be accessed via an outer SUBREG).
	(REG_OK_FOR_BASE_P): Likewise.
	(GO_IF_LEGITIMATE_ADDRESS): Consistently use REGNO_OK_FOR_BASE_P.

	* remove.c (optimize_reg_copy_3): Abort instead of silently generating
	bogus rtl.

	* jump.c (rtx_renumbered_equal_p): Do not consider PLUS commutative.

Thu Aug 20 17:35:20 1998  David S. Miller  <davem@pierdol.cobaltmicro.com>

	* config/sparc/sparc.md (movtf_insn_sp32): All memory operands
	must be offsettable so the splits can be made.

Thu Aug 20 13:56:53 1998  Michael Meissner  <meissner@cygnus.com>

	* config/i386/winnt.c: Include system.h, not stdio.h to get
	sys/param.h pulled in before rtl.h in case the system defines MIN
	and MAX.

Thu Aug 20 13:44:20 1998  David Edelsohn  <edelsohn@gnu.org>

	* rs6000.md (movqi, movhi): Add CONSTANT_P_RTX.

Thu Aug 20 13:15:11 1998  Dave Brolley  <brolley@cygnus.com>

	* stor-layout.c (layout_type): Compute TYPE_SIZE_UNIT correctly for
	arrays of bits.
	* cpplib.c (cpp_define): Handle macros with parameters.

Wed Aug 19 21:33:19 1998  David Edelsohn  <edelsohn@gnu.org>

	* rs6000.c (rs6000_output_load_toc_table): Use ld for 64-bit.
	(output_toc): Use single TOC slot or llong minimal-toc for DFmode
	and DImode 64-bit.  Use llong for minimal-toc SFmode and
	SYMBOL_REF / LABEL_REF 64-bit.
	(output_function_profiler): Use llong for profiler label and ld to
	load 64-bit label address.

Wed Aug 19 17:52:27 1998  Nick Clifton  (nickc@cygnus.com)

	* config/arm/thumb.md (extendqisi2_insn): Cope with REG +
	OFFSET addressing.

Wed Aug 19 14:13:31 1998  Jeff Law  (law@cygnus.com)

	* version.c: Bump for snapshot.

Wed Aug 19 13:10:30 1998  Jeff Law  (law@cygnus.com)

	* version.c: Bump for snapshot.

Wed Aug 19 13:06:47 1998  Jason Merrill  <jason@yorick.cygnus.com>

	* collect2.c (extract_init_priority): Use atoi instead of strtoul.

Wed Aug 19 13:51:35 1998  Hans-Peter Nilsson  <hp@axis.se>

	* tm.texi (Misc): Fix typo "teh".

	* tm.texi (PIC): Fix typo "PPIC".

	* tm.texi (Caller Saves): Say that DEFAULT_CALLER_SAVES has no
	effect when -O2 and higher.
	* invoke.texi (Optimize Options): Likewise for -fcaller-saves.

1998-08-19  Michael Hayes  <michaelh@ongaonga.chch.cri.nz>

	* regclass.c: Changed register set documentation to be consistent
	with GCC behavior.

	* final.c (final_start_function): Removed redundant test for
	call_fixed_regs.

Wed Aug 19 13:28:41 1998  Mark Mitchell  <mark@markmitchell.com>

	* rtl.h (rtx_function): New type.
	(for_each_rtx): New function.
	* rtlanal.c (for_each_rtx): Define it.

	* recog.c (change_t): New type.
	(change_objects, change_old_codes, change_locs, change_olds):
	Replace with ...
	(changes): New variable.
	(validate_change): Dynamically allocate room for more changes, if
	necessary.  Uses changes array instead of change_objects, etc.
	(apply_change_group): Use changes array instead of
	change_objects, etc.

	* loop.c (loop_mem_info): New type.
	(loop_mems): New variable.
	(loop_mems_idx): Likewise.
	(looop_mems_allocated): Likewise.
	(scan_loop): Remove nregs parameter.
	(next_insn_in_loop): New function.
	(load_mems_and_recount_loop_regs_set): Likewise.
	(load_mems): Likewise.
	(insert_loop_mem): Likewise.
	(replace_loop_mem): Likewise.
	(replace_label): Likewise.
	(INSN_IN_RANGE_P): New macro.
	(loop_optimize): Don't pass max_reg_num() to scan_loop.
	(scan_loop): Remove nregs parameter, compute it after any new
	registers are created by load_mems.  Use INSN_IN_RANGE_P and
	next_insn_in_loop rather than expanding them inline.  Call
	load_mems to load memory into pseudos, if appropriate.
	(prescan_loop): Figure out whether or not there are jumps from the
	loop to targets other than the label immediately following the
	loop.  Call insert_loop_mem to notice all the MEMs used in the
	loop, if it could be safe to pull MEMs into REGs for the duration
	of the loop.
	(strength_reduce): Use next_insn_in_loop.  Tweak comments.

Wed Aug 19 08:29:44 1998  Richard Earnshaw  (rearnsha@arm.com)

	* arm.c (arm_override_options): Remove lie about ignoring PIC flag.

Wed Aug 19 07:08:15 1998  David S. Miller  <davem@pierdol.cobaltmicro.com>

	* config/sparc/sparc.c (finalize_pic): Check for the correct
	nonlocal_goto_receiver UNSPEC number.
	* config/sparc/sparc.md (nonlocal_goto_receiver): Add comment
	making note of this dependency existing in sparc.c.
	(negtf2_notv9 split): Give NEG SFmode.
	(negsf2): Fix insn output string.

Tue Aug 18 12:40:27 1998  Richard Henderson  <rth@cygnus.com>

	* c-common.c (decl_attributes): Issue an error if the argument
	to alias is not a string.

Tue Aug 18 10:33:30 1998  Jeffrey A Law  (law@cygnus.com)

	* haifa-sched.c (sched_analyze): Put all JUMP_INSNs on the last
	pending memory flush list.

	* combine.c (can_combine_p): Allow combining insns with REG_RETVAL
	notes.
	(try_combine): Allow combining insns with REG_LIBCALL notes.

	* expr.c (emit_block_move): Do not call memcpy as a libcall
	instead build up a CALL_EXPR and call it like any other
	function.
	(clear_storage): Similarly for memset.

	* regmove.c (fixup_match_2): Do not call reg_overlap_mentioned_p
	on notes.

	* Makefile.in (cplus-dem.o): Provide explicit rules for building
	cplus-dem.o.

	* regmove.c (optimize_reg_copy_1): Update REG_N_CALLS_CROSSED
	and REG_LIVE_LENGTH as successful substitutions are made.

Tue Aug 18 07:15:27 1998  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* config/sparc/sparc.c (ultra_find_type): Add empty semicolon
	statement after end of loop label.

Tue Aug 18 07:13:27 1998  David S. Miller  <davem@pierdol.cobaltmicro.com>

	* config/sparc/sparc.c (ultra_types_avail): New variable.
	(ultra_build_types_avail): New function to record mask of insn
	types in ready list at this cycle.
	(ultrasparc_sched_reorder): Call it.
	(ultra_find_type): Use it to quicken the search.  Also simplif
	dependency check, don't use rtx_equal_p because we know exactly
	what we are looking for.

Tue Aug 18 03:20:53 1998  Richard Earnshaw  (rearnsha@arm.com)

	* arm.h (SECONDARY_INPUT_RELOAD_CLASS): Return NO_REGS if compiling
	for architecture v4.

Mon Aug 17 21:26:38 1998  David S. Miller  <davem@pierdol.cobaltmicro.com>

	* config/sparc/sparc.md (sltu, sgeu): Don't FAIL, call
	gen_compare_reg.
	(movsf_const_intreg, movsf_const_high, movsf_const_lo,
	movdf_const_intreg and helper splits): New patterns to move float
	constants into integer registers.
	(negtf2, negdf2, abstf2, absdf2): Rework using new patterns and
	splits.

Mon Aug 17 11:46:19 1998  Jeffrey A Law  (law@cygnus.com)

	* From Graham
	* tree.c (build_index_type): Copy TYPE_SIZE_UNIT from sizetype
	to itype.
	* c-decl.c (finish_enum): Copy TYPE_SIZ_UNIT from enumtype to tem.

	* rs6000.c (secondary_reload_class): For TARGET_ELF, indicate that
	a BASE_REGS register is needed as an intermediate when copying
	a symbolic value into any register class other than BASE_REGS.

	* expr.c (move_by_pieces): No longer static.  Remove prototype.
	* rtl.h (move_by_pieces): Add extern prototype.
	* mips.c (expand_block_move): Handle aligned straight line copy by
	calling move_by_pieces.

	* expr.c (expand_expr): Allow assignments from TImode PARM_DECLs
	and VAR_DECLs.

Mon Aug 17 10:28:52 1998  Mark Mitchell  <mark@markmitchell.com>

	* stmt.c (expand_end_loop): Tidy.  Allow unconditional
	jumps out of the loop to be treated as part of the exit test.

Mon Aug 17 10:06:11 1998  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
			  Jeff Law  <law@cygnus.com>

	* Makefile.in (cplus-dep.o): Use cplus-dem.c from libiberty.
	* cplus-dem.c: Delete.

	* Makefile.in (fold-const.o): Depend on $(RTL_H).

	* fold-const.c: Include rtl.h to get the prototype for
	`set_identifier_local_value'.

	* loop.c (express_from_1): Remove unused variable `tmp'.
	(combine_givs): Cast the first argument of bzero to char *.

	* toplev.c (display_help): Remove unused variable `looking_for_start'.

	* c-decl.c (init_decl_processing): Remove unneeded &.

	* alpha.h (alpha_initialize_trampoline): Provide prototype.

	* except.c (set_exception_lang_code, set_exception_version_code):
	Change parameter from `short' to `int' to avoid using a gcc
	extension.

	* except.h (set_exception_lang_code, set_exception_version_code):
	Likewise for prototypes.

	* flow.c (count_reg_references): Remove unused variables `regno'
	and `i'.

	* gcse.c (hash_scan_insn): Declare parameter `in_libcall_block'.

	* prefix.c (translate_name): Cast the result of `alloca'.

	* varray.h (VARRAY_FREE): Reimplement as a `do-while(0)' statement.

Mon Aug 17 09:23:42 1998  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* config/m68k/m68k.c: Include "system.h" instead of <stdio.h>.
	Include "toplev.h".
	(valid_dbcc_comparison_p): Mark mode argument as unused.
	(symbolic_operand): Likewise.
	(legitimize_pic_address): Likewise.
	(const_uint32_operand): Likewise.
	(const_sint32_operand): Likewise.
	* sched.c [!INSN_SCHEDULING]: Define only dummy function
	schedule_insns and comment out rest of file.

	* m68k.c (output_move_simode_const): Use subl to move a zero into an
	address register.
	(output_move_[hq]imode): Likewise.

Mon Aug 17 09:15:47 1998  Jeffrey A Law  (law@cygnus.com)

	* toplev.c (main): Enable -fstrict-aliasing for -O2 and above.
	* invoke.texi: Corresponding changes.

Mon Aug 17 02:03:55 1998  Richard Henderson  <rth@cygnus.com>

	* regclass.c (allocate_reg_info): Respect MIN when clearing data.

Sun Aug 16 17:37:06 1998  David S. Miller  <davem@pierdol.cobaltmicro.com>

	* config/sparc/sparc.c (ultra_code_from_mask,
	ultra_cmove_results_ready_p, ultra_fpmode_conflict_exists,
	ultra_find_type, ultra_schedule_insn, ultra_flush_pipeline,
	ultrasparc_sched_init, ultrasparc_variable_issue,
	ultra_rescan_pipeline_state, ultrasparc_sched_reorder): New
	functions to describe UltraSPARC pipeline exactly to Haifa.
	(ultrasparc_adjust_cost): Indicate IMUL type insns have zero cost,
	as there is nothing the scheduler can do about it.  Indicate that
	REG_DEP_OUTPUT's collide.  Fixup formatting.
	* config/sparc/sparc.h (RTX_COSTS): Fixup integer multiply and
	divide costs on Ultra for DImode.
	(MD_SCHED_INIT, MD_SCHED_REORDER, MD_SCHED_VARIABLE_ISSUE):
	Define.
	* config/sparc/sparc.md (ieu_unnamed function unit): Rename to
	ieuN and add call_no_delay_slot to type list.
	(cti function unit): New unit for branches on UltraSPARC.
	(subx/addx insns): Set type to misc.
	(sidi zero/sign extension insns on arch64): Set type to shift.
	(sign_extendhidi2_insn): Set type to sload.

Sun Aug 16 13:52:00 1998  David Edelsohn  <edelsohn@gnu.org>

	* rs6000.c (rs6000_stack_info): Use if == 0 for sizes.
	(output_epilog): Use if != 0 for offset.
	(rs6000_fatal_bad_address): Prepare for Intl.
	* rs6000.h (rs6000_fatal_bad_address): Declare.
	* rs6000.md (movsfcc, movdfcc): Use else if.
	(elf_high): Use {liu|lis}.
	(elf_low): Use {cal|la}.  Remove %a template from old mnemonics.
	(movsi): Use rs6000_fatal_bad_address.

Sun Aug 16 01:53:21 1998  Richard Henderson  <rth@cygnus.com>

	* reload.c (find_equiv_reg): Reject equivalences separated
	by a volatile instruction.

Sun Aug 16 00:21:44 1998  Franz Sirl  <Franz.Sirl-kernel@lauterbach.com>

	* rs6000/linux.h (CPP_OS_DEFAULT_SPEC): Define.

Sat Aug 15 20:51:35 1998  Richard Henderson  <rth@cygnus.com>

	* alpha.md (movsicc): Fix mode mismatch.

Sat Aug 15 20:22:33 1998  H.J. Lu  (hjl@gnu.org)

	* config/alpha/alpha.h (ASM_OUTPUT_MI_THUNK): Handle aggregated
	return type.
	* config/alpha/win-nt.h (ASM_OUTPUT_MI_THUNK): Likewise.

Sat Aug 15 08:39:49 1998  David S. Miller  <davem@pierdol.cobaltmicro.com>

	* config/sparc/sparc.md (movsi_lo_sum_pic_label_reg): Remove
	write-only modifier from operand 1 constraint.

Sat Aug 15 06:28:19 1998  David S. Miller  <davem@pierdol.cobaltmicro.com>

	* config/sparc/sparc.c (sparc_emit_set_const64_quick1): If
	emitting a XOR of -1 at the end, emit a NOT instead for combine's
	sake.
	(sparc_emit_set_const64): Likewise, also when computing trailing
	bits do not negate low_bits and make fast_int an int.

Fri Aug 14 21:07:03 1998  Jeffrey A Law  (law@cygnus.com)

	* loop.c (add_label_notes): Do not ignore references to labels
	before dispatch tables.  Mirrors Apr 8 change to mark_jump_label.
	* gcse.c (add_label_notes): Similarly.

	* pa.h (ASM_OUTPUT_MI_THUNK): Strip name encoding.

	* m68k.md (adddi_dilshr32): One of the operands must be a register.
	(adddi_dishl32): Similarly.

Fri Aug 14 14:12:59 1998  Jason Merrill  <jason@yorick.cygnus.com>

	* i386.h (MODES_TIEABLE_P): Reorganize to shut up warnings.
	* alias.c (memrefs_conflict_p): Add braces to shut up warnings.
	* cse.c (cse_basic_block): Add parens to shut up warnings.

Fri Aug 14 12:58:21 1998  David S. Miller  <davem@pierdol.cobaltmicro.com>

	* config/sparc/sparc.c (sparc_emit_set_const64_quick2,
	sparc_emit_set_const64_longway, const64_is_2insns,
	create_simple_focus_bits, sparc_emit_set_const64): Fix more bugs
	in 64-bit constant formation.
	* config/sparc/sparc.md (snesi_zero_extend split): Generate
	rtl for addx not subx.
	(define_insn movdi_const64_special): Make available even when
	HOST_BITS_PER_WIDE_INT is not 64.
	(movdi_lo_sum_sp64_cint, movdi_high_sp64_cint): Remove.
	(losum_di_medlow, sethm, setlo): Make op2 symbolic_operand.
	(cmp_siqi_trunc_set, cmp_diqi_trunc_set): Encapsulate both
	instances of operand 1 inside a QI subreg.
	(xordi3_sp64_dbl): Remove '%' constraint for op1.
	(one_cmpldi2_sp64): Fix output string.
	(one_cmplsi2_not_liveg0): Rewrite to remove unneeded extra
	alternative case.
	(unnamed arch64 ashift DI): Truncate shift count if greater than
	63, not 31.

Fri Aug 14 21:52:53 1998  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* expr.c (store_expr): Don't optimize away load-store pair
	when either source or destination have a side effect.

Fri Aug 14 16:50:10 1998  John Carr  <jfc@mit.edu>

	* genrecog.c (add_to_sequence): Fatal error if the modes of the
	operands of SET are incompatible.

	* alpha.md: Fix max and min patterns so modes of SET operands match.

Fri Aug 14 12:22:55 1998  Ian Lance Taylor  <ian@cygnus.com>

	* configure.in: Avoid [[ by using test and changequote.
	* configure: Rebuild.

Fri Aug 14 01:22:31 1998  David S. Miller  <davem@pierdol.cobaltmicro.com>

	* rtl.def (CONSTANT_P_RTX): Fix typo in string name.

	* config/sparc/sparc.md (seqdi_special_trunc, snedi_special_trunc,
	seqsi_special_extend, snesi_special_extend, snesi_zero_extend and
	split, snedi_zero_trunc and split, seqsi_zero_extend and split,
	seqdi_zero_trunc and split, pic_lo_sum_di, pic_sethi_di,
	movdi_cc_sp64_trunc, movdi_cc_reg_sp64_trunc, addx_extend_sp32 and
	split, addx_extend_sp64, subx_extend_sp64, subx_extend and split):
	Fix mismatching modes in SET operands.
	(conditional move patterns): Fix formatting.
	(unnamed subx arch64 pattern): Remove duplicate insn.

Fri Aug 14 00:34:34 1998  David S. Miller  <davem@pierdol.cobaltmicro.com>

	* config/sparc/sparc.c (const64_operand, const64_high_operand):
	Get it right when HOST_BITS_PER_WIDE_INT is not 64.
	(input_operand): Fixup test for what we accept for constant
	integers.
	(sparc_emit_set_const32, sparc_emit_set_symbolic_const64): Give
	set VOIDmode.
	(safe_constDI): Remove.
	(sparc_emit_set_safe_HIGH64, gen_safe_SET64, gen_safe_OR64,
	gen_safe_XOR64): New functions.
	(sparc_emit_set_const64_quick1, sparc_emit_set_const64_quick2,
	sparc_emit_set_const64_longway, sparc_emit_set_const64): Use
	them.
	* config/sparc/sparc.md (define_insn xordi3_sp64_dbl): Only make
	available when HOST_BITS_PER_WIDE_INT is not 64.
	(define_insn movdi_sp64_dbl, movdi_const64_special): Likewise and
	move before movdi_insn_sp64 pattern.
	(define_insn movdi_lo_sum_sp64_dbl, movdi_high_sp64_dbl): Remove.
	(define_insn sethi_di_medlow, seth44, setm44, sethh): Use
	symbolic_operand as predicate for second operand.
	(DImode minus split on arch32, negsi2 expander, one_cmplsi2
	expander): Give set VOIDmode.

Fri Aug 14 01:45:06 1998  Mumit Khan  <khan@xraylith.wisc.edu>

	* i386/cygwin32 (DEFAULT_PCC_STRUCT_RETURN): Define.

Fri Aug 14 01:40:21 1998  Geoffrey Keating  <geoffk@ozemail.com.au>

	* rs6000/linux.h (LINK_SPEC): Pass -G args to the linker.

Fri Aug 14 01:23:23 1998  Richard Earnshaw  (rearnsha@arm.com)

	* arm/netbsd.h (TARGET_DEFAULT): Default includes software floating
	point.
	(CPP_FLOAT_DEFAULT_SPEC): Re-define accordingly.

Fri Aug 14 01:19:08 1998  Robert Lipe  <robertl@dgii.com>

	* install.texi: Various SCO OpenServer tweaks.

Thu Aug 13 20:14:40 1998  Jim Wilson  <wilson@cygnus.com>

	* reload1.c (eliminate_regs_in_insn): Handle another case when
	eliminating the frame pointer to the hard frame pointer.  Add
	missing	ep->to_rtx check to one existing case.

	* mips/mips.md (movhi_internal2+2): Fix typo mem:SI -> mem:HI.

Thu Aug 13 17:08:11 1998  Jason Merrill  <jason@yorick.cygnus.com>

	* tree.h: De-conditionalize init_priority code.

	* mips.h (NM_FLAGS): Change from -Bp to -Bn.
	* collect2.c (NM_FLAGS): Change from -p to -n.

	* configure.in: Turn on collect2 for mipstx39-elf.
	Handle use_collect2=no properly.

	* c-common.c: De-conditionalize init_priority code.
	* collect2.c (extract_init_priority, sort_ids): New fns.
	(main): Call sort_ids.
	Move sequence_number to file scope.

	* configure.in: Handle --enable-init-priority.
	* c-common.c (attrs): Add A_INIT_PRIORITY.
	(init_attributes, decl_attributes): Likewise.
	* tree.h (DEFAULT_INIT_PRIORITY, MAX_INIT_PRIORITY): New macros.
	* tree.c (get_file_function_name_long): Split out...
	(get_file_function_name): ...from here.

Thu Aug 13 16:09:53 1998  Martin von Löwis  <loewis@informatik.hu-berlin.de>

	* expr.c (safe_from_p): Change code to ERROR_MARK only when not
	accessing nodes.

Thu Aug 13 15:24:48 1998  Jason Merrill  <jason@yorick.cygnus.com>

	* toplev.c (display_help): Add braces to shut up warnings.
	* tree.c (simple_cst_equal): Likewise.

	* fold-const.c (non_lvalue): Don't deal with null pointer
	constants here.
	(fold, case COMPOUND_EXPR): Wrap a constant 0 in a NOP_EXPR.

	* c-typeck.c (initializer_constant_valid_p): Allow conversion of 0
	of any size to a pointer.

Thu Aug 13 12:53:13 1998  Jim Wilson  <wilson@cygnus.com>

	* i386/winnt.c (i386_pe_asm_file_end): Check TREE_SYMBOL_REFERENCED.

Wed Aug 12 17:25:18 1998  Jeffrey A Law  (law@cygnus.com)

	* mn10300.c (REG_SAVE_BYTES): Only reserve space for registers
	which will be saved.
	* mn10300.md (prologue insn): Only save registers which need saving.
	(epilogue insn): Similarly.

	* mn10300.c, mn10300.h, mn10300.md: Remove "global zero register"
	optimizations.

Wed Aug 12 12:39:16 1998  Gavin Romig-Koch  <gavin@cygnus.com>

	* mips/mips.h (ENCODE_SECTION_INFO): Set SYMBOL_REF_FLAG for
	VAR_DECL's in gp addressable sections.

Tue Aug 11 23:02:31 1998  John Carr  <jfc@mit.edu>

	* sparc.c: Change return <exp> to <exp>; return; in functions
	returning void.
	* sparc.md: Add empty semicolon statement after final label in
	move expanders.

Tue Aug 11 22:42:01 1998  David S. Miller  <davem@pierdol.cobaltmicro.com>

	* config/sparc/sparc.md (define_insn addx_extend): Rename to
	addx_extend_sp64, only allow when TARGET_ARCH64.
	(define_insn addx_extend_sp32 and split): Version that works when
	not TARGET_ARCH64.
	(define_insn subx_extend): Likewise.
	(define_split adddi3 and subdi3 with zero extension): Fixup and
	correct bugs when not TARGET_ARCH64.

Tue Aug 11 16:04:34 1998  John Carr  <jfc@mit.edu>

	* except.c (set_exception_lang_code, set_exception_version_code):
	Use prototype-style definition if __STDC__, to match declaration
	in except.h.

	* genemit.c: Change FAIL and DONE macros not to use loops.

Tue Aug 11 12:27:03 1998  Jim Wilson  <wilson@cygnus.com>

	* dwarf2out.c (ASM_OUTPUT_DWARF_ADDR_CONST): Use
	ASM_OUTPUT_DWARF2_ADDR_CONST if defined.

	* mips/mips.md (reload_outsi): Use M16_REG_P when TARGET_MIPS16.

Tue Aug 11 18:12:53 1998  Dave Love  <d.love@dl.ac.uk>

	* README.g77: Update from Craig.

Tue Aug 11 04:46:01 1998  David S. Miller  <davem@pierdol.cobaltmicro.com>

	* config/sparc/sparc.c (sparc_emit_set_const32): INTVAL is of
	type HOST_WIDE_INT.
	(safe_constDI sparc_emit_set_const64_quick1,
	sparc_emit_set_const64_quick2, sparc_emit_set_const64_longway,
	analyze_64bit_constant, const64_is_2insns,
	create_simple_focus_bits): Fix some bugs when compiled on real
	64-bit hosts.
	(function_arg_record_value_3, function_arg_record_value_2,
	function_arg_record_value): Add fully prototyped forward decls.
	* config/sparc/sparc.md (define_insn cmpsi_insn_sp32): Rename back
	to cmpsi_insn and use on both 64 and 32 bit targets.
	(define_insn cmpsi_insn_sp64): Remove.
	(define_expand zero_extendsidi2): Allow for 32-bit target too.
	(define_insn zero_extendsidi2_insn): Rename to
	zero_extendsidi2_insn_sp64.
	(define_insn zero_extendsidi2_insn_sp32): New pattern and
	associated forced split for it.

	* config/sparc/sparc.c (const64_operand, const64_high_operand):
	New predicates.
	* config/sparc/sparc.h: Declare them.
	(PREDICATE_CODES): Add them.
	* config/sparc/sparc.md (movdi_lo_sum_sp64_dbl,
	movdi_high_sp64_dbl, xordi3_sp64_dbl): Use them.

Mon Aug 10 22:57:24 1998  John Carr  <jfc@mit.edu>

	* config/sparc/sparc.md (define_insn jump): Output ba,pt not b,pt
	in v9 case as the latter makes the Solaris assembler crash.

Mon Aug 10 22:39:09 1998  David S. Miller  <davem@pierdol.cobaltmicro.com>

	* config/sparc/sparc.c (input_operand): Do not accept a LO_SUM MEM
	for TFmode when !v9.  We require offsettable memory addresses.
	* config/sparc/sparc.h (ALTER_HARD_SUBREG): Handle TFmode to
	DFmode register number conversions.
	* config/sparc/sparc.md (define_split DFmode moves): If register
	is a SUBREG do alter_subreg on it before using.
	(define_expand movtf): Fixup comment about alignment on v9.
	(define_split TFmode moves): Don't use gen_{high,low}part, create
	explicit SUBREGs instead.

Mon Aug 10 19:02:55 1998  John Carr  <jfc@mit.edu>

	* Makefile.in (mbchar.o): Depend on mbchar.c.

Mon Aug 10 04:28:13 1998  David S. Miller  <davem@pierdol.cobaltmicro.com>
			  Richard Henderson  <rth@cygnus.com>

	Rewrite SPARC backend for better code generation and
	improved sparc64 support.
	* config/sparc/sp64-elf.h: Set JUMP_TABLES_IN_TEXT_SECTION to
	zero.
	* config/sparc/sysv4.h: Likewise.
	* config/sparc/sparc.c (v8plus_regcmp_p, sparc_operand,
	move_operand, v8plus_regcmp_op, emit_move_sequence,
	singlemove_string, doublemove_string, mem_aligned_8,
	output_move_double, output_move_quad, output_fp_move_double,
	move_quad_direction, output_fp_move_quad, output_scc_insn):
	Remove.
	(small_int_or_double): New predicate.
	(gen_compare_reg): Remove TARGET_V8PLUS cmpdi_v8plus emission.
	(legitimize_pic_address): Emit movsi_{high,lo_sum}_pic instead of
	old pic_{sethi,lo_sum}_si patterns.
	(mem_min_alignment): New generic function to replace
	mem_aligned_8, which uses REGNO_POINTER_ALIGN information when
	available and can test for arbitrary alignments.  All callers
	changed.
	(save_regs, restore_regs, build_big_number,
	output_function_prologue, output_cbranch, output_return,
	sparc_flat_save_restore, sparc_flat_output_function_prologue,
	sparc_flat_output_function_epilogue): Prettify
	insn output.
	(output_function_epilogue): Likewise and add code to output
	deferred case vectors.
	(output_v9branch): Likewise, add new arg INSN and use it to tack
	on branch prediction settings.  All callers changed.
	(print_operand): Likewise and output %l44 for LO_SUMs when
	TARGET_CM_MEDMID.
	(sparc_splitdi_legitimate): New function to make sure DImode
	splits can be run properly when !arch64.
	(sparc_initialize_trampoline, sparc64_initialize_trampoline):
	Reformat example code in comments.
	(set_extends): Remove UNSPEC/v8plus_clear_high case.
	(sparc_addr_diff_list, sparc_addr_list): New statics to keep track
	of deferred case vectors we need to output.
	(sparc_defer_case_vector): Record a case vector.
	(sparc_output_addr_vec, sparc_output_addr_diff_vec,
	sparc_output_deferred_case_vectors): New functions to output them.
	(sparc_emit_set_const32): New function to form 32-bit constants in
	registers when that requires more than one instruction.
	(safe_constDI, sparc_emit_set_const64_quick1,
	sparc_emit_set_const64_quick2, sparc_emit_set_const64_longway,
	analyze_64bit_constant, const64_is_2insns,
	create_simple_focus_bits, sparc_emit_set_const64): New functions
	which do the same for 64-bit constants when arch64.
	(sparc_emit_set_symbolic_const64): New function to emit address
	loading for all code models on v9.
	* config/sparc/sparc.h (CONDITIONAL_REGISTER_USAGE): Do not make
	%g1 fixed when arch64, unfix %g0 when TARGET_LIVE_G0.
	(ALTER_HARD_SUBREG): Fix thinko, return REGNO + 1 not 1.
	(SECONDARY_INPUT_RELOAD_CLASS, SECONDARY_OUTPUT_RELOAD_CLASS): Fix
	inaccuracies in comments, add symbolic and text_segment operands
	when TARGET_CM_MEDANY and TARGET_CM_EMBMEDANY respectively.  Use
	GENERAL_REGS in these cases as a temp REG is needed to load these
	addresses into a register properly.
	(EXTRA_CONSTRAINT): Document more accurately, remove Q case as it
	is no longer used.
	(GO_IF_LEGITIMATE_ADDRESS): Allow TFmode for LO_SUM on v9 since fp
	quads are guaranteed to have 16-byte alignment.
	(LEGITIMIZE_ADDRESS): For SYMBOL_REF, CONST, and LABEL_REF use
	copy_to_suggested_reg instead of explicit LO_SUM and HIGH.
	(ASM_OUTPUT_ADDR_VEC, ASM_OUTPUT_ADDR_DIFF_VEC): New macros for
	deferred case vector implementation.
	(ASM_OUTPUT_ADDR_VEC_ELT): Use fputc to output newline.
	(ASM_OUTPUT_ADDR_DIFF_ELT): Parenthesize LABEL in macro calls.
	Generate "internal label - label" instead of "label - 1b".
	(PRINT_OPERAND_ADDRESS): For LO_SUM use %l44 on TARGET_CM_MEDMID.
	(PREDICATE_CODES): Remove sparc_operand, move_operand,
	v8plus_regcmp_op.  Add small_int_or_double, input_operand, and
	zero_operand.
	(doublemove_string, output_block_move, output_fp_move_double,
	output_fp_move_quad, output_move_double, output_move_quad,
	output_scc_insn, singlemove_string, mem_aligned_8, move_operand,
	sparc_operand, v8plus_regcmp_op, v8plus_regcmp_p): Remove externs.
	(sparc_emit_set_const32, sparc_emit_set_const64,
	sparc_emit_set_symbolic_const64, input_operand, zero_operand,
	mem_min_alignment, small_int_or_double): Add externs.
	* config/sparc/sparc.md: Document the many uses of UNSPEC and
	UNSPEC_VOLATILE in this backend.
	(define_function_unit ieu): Rename to ieu_unnamed.  Add move and
	unary to types which execute in it.
	(define_function_unit ieu_shift): Rename to ieu0.
	(define_function_unit ieu1): New, executes compare, call, and
	uncond_branch type insns.
	(define_function_units for type fdivs, fdivd, fsqrt): These
	execute in the fpu multiply unit not the adder on UltraSPARC.
	(define_expand cmpdi): Disallow TARGET_V8PLUS.
	(define_insn cmpsi_insn): Rename to cmpsi_insn_sp32.
	(define_insn cmpsi_insn_sp64): New, same as sp32 variant except it
	allows the arith_double_operand predicate and rHI constraint when
	TARGET_ARCH64.
	(define_insn cmpdi_sp64, cmpsf_fpe, cmpdf_fpe, cmptf_fpe,
	cmpsf_fp, cmpdf_fp, cmptf_fp, sltu_insn, neg_sltu_insn,
	neg_sltu_minux_x, neg_sltu_plus_x, sgeu_insn, neg_sgeu_insn,
	sltu_plus_x, sltu_plus_x, sltu_plus_x_plus_y, x_minus_sltu,
	sgeu_plus_x, x_minus_sgeu, movqi_cc_sp64, movhi_cc_sp64,
	movsi_cc_sp64, movdi_cc_sp64, movsf_cc_sp64, movdf_cc_sp64,
	movtf_cc_sp64, movqi_cc_reg_sp64, movhi_cc_reg_sp64,
	movsi_cc_reg_sp64, movdi_cc_reg_sp64, movsf_cc_reg_sp64,
	movdf_cc_reg_sp64, movtf_cc_reg_sp64, zero_extendhisi2_insn,
	cmp_siqi_trunc, cmp_siqi_trunc_set, sign_extendhisi2_insn,
	sign_extendqihi2_insn, sign_extendqisi2_insn,
	sign_extendqidi2_insn, sign_extendhidi2_insn,
	extendsfdf2, extendsftf2, extenddftf2, truncdfsf2, trunctfsf2,
	trunctfdf2, floatsisf2, floatsidf2, floatsitf2, floatdisf2,
	floatdidf2, floatditf2, fix_truncsfsi2, fix_truncdfsi2,
	fix_trunctfsi2, fix_truncsfdi2, fix_truncdfdi2, fix_trunctfdi2,
	adddi3_sp64, addsi3, cmp_ccx_plus, cmp_cc_plus_set, subdi_sp64,
	subsi3, cmp_minus_ccx, cmp_minus_ccx_set, mulsi3, muldi3,
	muldi3_v8plus, cmp_mul_set, mulsidi3, mulsidi3_v8plus,
	const_mulsidi3_v8plus, mulsidi3_sp32, const_mulsidi3,
	smulsi3_highpart_v8plus, unnamed subreg mult,
	const_smulsi3_highpart_v8plus, smulsi3_highpart_sp32,
	const_smulsi3_highpart, umulsidi3_v8plus, umulsidi3_sp32,
	const_umulsidi3, const_umulsidi3_v8plus, umulsi3_highpart_v8plus,
	const_umulsi3_highpart_v8plus, umulsi3_highpart_sp32,
	const_umulsi3_highpart, divsi3, divdi3, cmp_sdiv_cc_set, udivsi3,
	udivdi3, cmp_udiv_cc_set, smacsi, smacdi, umacdi, anddi3_sp64,
	andsi3, and_not_di_sp64, and_not_si, iordi3_sp64, iorsi3,
	or_not_di_sp64, or_not_si, xordi3_sp64, xorsi3, xor_not_di_sp64,
	xor_not_si, cmp_cc_arith_op, cmp_ccx_arith_op,
	cmp_cc_arith_op_set, cmp_ccx_arith_op_set, cmp_ccx_xor_not,
	cmp_cc_xor_not_set, cmp_ccx_xor_not_set, cmp_cc_arith_op_not,
	cmp_ccx_arith_op_not, cmp_cc_arith_op_not_set,
	cmp_ccx_arith_op_not_set, negdi2_sp64, cmp_cc_neg, cmp_ccx_neg,
	cmp_cc_set_neg, cmp_ccx_set_neg, one_cmpldi2_sp64, cmp_cc_not,
	cmp_ccx_not, cmp_cc_set_not, cmp_ccx_set_not, addtf3, adddf3,
	addsf3, subtf3, subdf3, subsf3, multf3, muldf3, mulsf3,
	muldf3_extend, multf3_extend, divtf3, divdf3, divsf3, negtf2,
	negdf2, negsf2, abstf2, absdf2, abssf2, sqrttf2, sqrtdf2, sqrtsf2,
	ashlsi3, ashldi3, unnamed DI ashift, cmp_cc_ashift_1,
	cmp_cc_set_ashift_1, ashrsi3, ashrdi3, unnamed DI ashiftrt,
	ashrdi3_v8plus, lshrsi3, lshrdi3, unnamed DI lshiftrt,
	lshrdi3_v8plus, tablejump_sp32, tablejump_sp64, call_address_sp32,
	call_symbolic_sp32, call_address_sp64, call_symbolic_sp64,
	call_address_struct_value_sp32, call_symbolic_struct_value_sp32,
	call_address_untyped_struct_value_sp32,
	call_symbolic_untyped_struct_value_sp32, call_value_address_sp32,
	call_value_symbolic_sp32, call_value_address_sp64,
	call_value_symbolic_sp64, branch_sp32, branch_sp64,
	flush_register_windows, goto_handler_and_restore,
	goto_handler_and_restore_v9, goto_handler_and_restore_v9_sp64,
	flush, all ldd/std peepholes, return_qi, return_hi, return_si,
	return_addsi, return_di, return_adddi, return_sf, all call+jump
	peepholes, trap, unnamed trap insns): Prettify output strings.
	(define_insn anddi3_sp32, and_not_di_sp32, iordi3_sp32,
	or_not_di_sp32, xordi3_sp32, xor_not_di_sp32, one_cmpldi2):
	Likewise and force + implement splits for integer cases.
	(define_insn return_sf_no_fpu): Likewise and allow to match when
	no-fpu because of our subreg SFmode splits.
	(define_insn zero_extendqihi2, zero_extendqisi2_insn,
	zero_extendqidi2_insn, zero_extendhidi2_insn,
	zero_extendsidi2_insn, sign_extendsidi2_insn): Likewise and use
	input_operand for second operand.
	(cmp_minus_cc, cmp_minus_cc_set): Likewise and use
	reg_or_0_operand for operand 2 so new splits can use it.
	(cmp_zero_extendqisi2, cmp_zero_extendqisi2_set, cmp_cc_plus,
	cmp_cc_xor_not): Likewise and don't forget to check TARGET_LIVE_G0
	too.
	(cmp_zero_extract, cmp_zero_extract_sp64): Likewise and allow
	CONST_DOUBLEs for operand 2.
	(define_insn move_label_di): Likewise and label distance
	optimization because it no longer works with new deferred case
	vector scheme.  To be revisited.
	(define_insn x_minus_y_minus_sltu, x_minus_sltu_plus_y): Likewise
	and allow reg_or_0_operand and J constraint for second operand.
	(define_insn jump): Set branch predict taken on V9.
	(define_insn tablejump): Emit LABEL_REF + PLUS memory address for
	new deferred case vector scheme.
	(define_insn pic_tablejump_32, pic_tablejump_64): Remove.
	(define_insn negdi2_sp32): Force + implement splits.
	(define_insn negsi2, one_cmplsi2): Rename to negsi2_not_liveg0 and
	one_cmplsi2_not_liveg0 respectively, and create	expander of original
	names which emit special rtl for TARGET_LIVE_G0.
	(define_insn cmpdi_v8plus, scc_si, scc_di): Remove.
	(define_insn seq, sne, slt, sge, sle, sltu, sgeu): Don't do
	gen_compare_reg, FAIL instead.
	(define_insn sgtu, sleu): Likewise and check gen_s*() return
	values when trying to reverse condition codes, if they FAIL then
	do likewise.
	(define_insn snesi_zero, neg_snesi_zero, snesi_zero_extend,
	snedi_zero, neg_snedi_zero, snedi_zero_trunc, seqsi_zero,
	neg_seqsi_zero, seqsi_zero_extend, seqdi_zero, neg_seqdi_zero,
	seqdi_zero_trunc, x_plus_i_ne_0, x_minus_i_ne_0, x_plus_i_eq_0,
	x_minus_i_eq_0): Add new splits to perform these multi-insn cases,
	set output string to # to indicate they are mandatory splits.
	(define_insn pic_lo_sum_si, pic_sethi_si, pic_lo_sum_di,
	pic_sethi_di, move_pic_label_si): Remove.
	(define_insn movsi_low_sum, movsi_high, movsi_lo_sum_pic,
	movsi_high_pic, movsi_pic_label_reg): New patterns to take their
	place.
	(define_expand movsi_pic_label_ref, define_insn
	movsi_high_pic_label_ref, movsi_lo_sum_pic_label_ref): New
	expander and insns to handle PIC label references and deferred
	case vectors.
	(define_insn get_pc_via_rdpc): Comment out as it is no longer
	used.
	(define_expand movqi, movhi, movsi, movdi, movsf, movdf, movtf):
	Rewrite to not use emit_move_sequence, make use of new constant
	formation code, and new splits for all multi-insn cases.
	(define_insn movqi_insn): Remove sethi case, it can never happen.
	Use reg_or_zero_operand instead of const0_rtx explicit test,
	use input_operand instead of move_operand for source, and use
	general_operand now for dest.
	(define_insn movhi_insn): Similar but leave sethi case.
	(define_insn lo_sum_qi, store_qi, store_hi): Remove.
	(define_insn sethi_hi lo_sum_hi): Rename to movhi_high and
	movhi_lo_sum respectively, prettify output string.
	(define_insn movsi_zero_liveg0): New pattern to put zero into a
	register when needed on TARGET_LIVE_G0.
	(define_insn movsi_insn): Use general_operand and input_operand
	for dest and src respectively.  Simplify applicability test.
	Prettify output strings, and add clr alternative for J
	constraint.
	(define_insn movdi_sp32_v9, movdi_sp32, define_splits for
	deprecated std and reg-reg DI moves): Remove and...
	(define_insn movdi_insn_sp32, movdi_insn_sp64): Replace with new
	implementation which uses forced splits for all non-single insn
	cases.
	(define_split DI move cases on !arch64): New splits to handle all
	situations of 64-bit double register DImode on 32bit, and
	unaligned registers and memory addresses for all subtargets.
	(define_insn movsf_const_insn, movdf_const_insn, store_sf):
	Remove.
	(define_insn movsf_insn, movsf_no_f_insn): Use general_operand and
	input_operand for dest and src respectively, prettify output
	strings.
	(define_insn movdf_insn, movdf_no_e_insn, store_df,
	movtf_const_insn, movtf_insn, movtf_no_e_insn, store_tf): Remove
	and...
	(define_insn movdf_insn_sp32, movdf_no_e_insn_sp32,
	movdf_insn_sp64, movdf_no_e_insn_sp64, movtf_insn,
	movtf_no_e_insn_sp32, movtf_insn_hq_sp64, movtf_insn_sp64,
	movtf_no_e_insn_sp64): Replace with new
	implementation which uses forced splits for all non-single insn
	cases.
	(define_split DF move cases): New splits in similar vein to DI
	move counterparts.
	(define_insn sethi_di_medlow, sethi_di_medium_pic,
	sethi_di_embmedany_data, sethi_di_embmedany_text, sethi_di_sp64,
	movdi_sp64_insn): Remove old v9 code model and constant loading
	support insns and..
	(define_insn pic_lo_sum_di, pic_sethi_di,
	sethi_di_medlow_embmedany_pic, sethi_di_medlow, losum_di_medlow,
	seth44, setm44, setl44, sethh, setlm, sethm, setlo,
	embmedany_sethi, embmedany_losum, embmedany_brsum,
	embmedany_textuhi, embmedany_texthi, embmedany_textulo,
	embmedany_textlo, movdi_lo_sum_sp64_cint, movdi_lo_sum_sp64_dbl,
	movdi_high_sp64_cint, movdi_high_sp64_dbl): Replace with new
	scheme, using unspecs, secondary reloads, and one to one sparc
	insn to rtl insn mapping for better scheduling and code gen.
	(define_expand reload_indi, reload_outdi): Reload helpers for
	MEDANY and EMBMEDANY symbol address loading cases which require a
	temporary register.
	(define_expand movsicc): Remove v8plus_regcmp cases.
	(define_insn movdi_cc_sp64_trunc, movdi_cc_reg_sp64_trunc,
	cmp_zero_extendqidi2, cmp_zero_extendqidi2_set, cmp_qidi_trunc,
	cmp_diqi_trunc_set): New patterns used by some of the new scc
	splits on arch64.
	(define_insn xordi3_sp64_dbl): New pattern used for constant
	formation when crossing from 32-bit targets.
	(define_insn movsi_cc_reg_v8plus, v8plus_clear_high, and helper
	split): Remove.
	(define_insn addx, subx): Make visible and prettify.
	(define_insn adddi3_insn_sp32): Likewise and force split.
	(define_insn addx_extend, subx_extend, unnamed): New patterns for
	64bit scc split usage.
	(define_insn unnamed plusDI zero_extend, unnamed minusDI
	zero_extend, subdi3): Force and implement splits.

	* final.c (final_scan_insn): Don't output labels if target
	specifies ASM_OUTPUT_ADDR_{DIFF}_VEC.  Do these macro operations
	instead.

	* reorg.c (dbr_schedule): When taking on BR_PRED notes at the end,
	don't forget to walk inside SEQUENCESs too as these are what the
	delay slot scheduler will create.

Mon Aug 10 01:21:01 1998  Richard Henderson  <rth@cygnus.com>

	* alpha.md (extxl+1,+2): New patterns to work around
	combine lossage.

Sat Aug  8 19:20:22 1998  Gary Thomas  (gdt@linuxppc.org)

	* rs6000.c (rs6000_allocate_stack_space): Fix typo which
	caused bad assembly code to be generated.

Sat Aug  8 18:53:28 1998  Jeffrey A Law  (law@cygnus.com)

	* netbsd.h: Fix typo.

Mon Aug  3 00:06:42 1998  Robert Lipe  <robertl@dgii.com>

	* config.sub: Fix typo.

Sun Aug  2 22:39:08 1998  Hans-Peter Nilsson  <hp@axis.se>

	* invoke.texi (Environment Variables): Typo: Change "ascpects"
	into "aspects".
	(Running Protoize): Typo: Change "ther" into "other".

Sun Aug  2 00:42:50 1998  Jeffrey A Law  (law@cygnus.com)

	* i386/netbsd.h: Undo previous change to DWARF2_UNWIND_INFO.
	* m68k/netbsd.h: Likewise.
	* ns32k/netbsd.h: Likewise.
	* sparc/netbsd.h: Likewise.

Sat Aug  1 17:59:30 1998  Richard Henderson  <rth@cygnus.com>

	* ginclude/va-alpha.h (va_list): Use a typedef, not a define.
	* ginclude/va-clipper.h (va_list): Likewise.

Fri Jul 31 20:22:02 1998  Michael Meissner  <meissner@cygnus.com>

	* rs6000.c (rs6000_override_options): If big endian and -Os, use
	load/store multiple instructions unless user overrides.

Fri Jul 31 17:08:59 1998  Jeffrey A Law  (law@cygnus.com)

	* ns32k/netbsd.h: Fix typo.

Fri Jul 31 10:23:55 1998  Doug Evans  <devans@canuck.cygnus.com>

	* m32r/m32r.h (ASM_OUTPUT_SOURCE_LINE): Always output line number
	labels with .debugsym if no parallel insns.

Thu Jul 30 19:15:53 1998  Richard Henderson  <rth@cygnus.com>

	* alpha.md (fp cmp): Replicate patterns for ALPHA_TP_INSN.
	(fcmov): Remove ALPHA_TP_INSN patterns -- fcmov doesn't trap.

Thu Jul 30 19:50:15 1998  David Edelsohn  <edelsohn@gnu.org>

	* rs6000/x-aix43 (AR_FOR_TARGET_FLAGS): Delete.
	(AR_FOR_TARGET): Define.

Thu Jul 30 12:29:12 1998  Mark Mitchell  <mark@markmitchell.com>

	* dyn-string.h: New file.
	* dyn-string.c: Likewise.
	* Makefile.in (OBJS): Add dyn-string.o.
	(dwarf2out.o): Add dyn-string.h dependency.
	(dyn-string.o): List dependencies.
	* dwarf2out.c: Include dyn-string.h.
	(ASM_NAME_TO_STRING): Use dyn_string_append, rather than strcpy.
	(addr_const_to_string): Take a dyn_string_t, not a char* as a
	prototype.  Use dyn_string_append rather than strcat, throughout.
	(addr_to_string): Use dyn_string_t.

Thu Jul 30 13:08:07 1998  Ken Raeburn  <raeburn@cygnus.com>

	Function entry/exit profiling instrumentation:
	* expr.h (profile_function_entry_libfunc,
	profile_function_exit_libfunc): Declare new variables.
	* optabs.c: Define them here.
	(init_optabs): Initialize them.
	* tree.h (struct tree_decl): New flag
	no_instrument_function_entry_exit.
	(DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT): New accessor macro.
	* c-decl.c (duplicate_decls): Merge it.
	* c-common.c (enum attrs): New value A_NO_INSTRUMENT_FUNCTION.
	(init_attributes): Use it for "no_instrument_function".
	(decl_attributes): Handle it, for functions that have not yet been
	compiled.  Set decl flag.
	* flags.h (flag_instrument_function_entry_exit): Declare new
	variable.
	* toplev.c (flag_instrument_function_entry_exit): Define it here.
	(f_options): New option "instrument-functions".
	* function.h (struct function): New field instrument_entry_exit.
	* function.c (current_function_instrument_entry_exit): New
	variable.
	(push_function_context_to, pop_function_context_from): Save and
	restore.
	(expand_function_start): Set current_ variable, maybe emit return
	label and entry profile call.
	(expand_function_end): Maybe emit exit profile call.

Thu Jul 30 00:58:34 1998  Jeffrey A Law  (law@cygnus.com)

	* i386.md (movqi): When optimizing a load of (const_int 1) into a
	NON_QI_REG_P, pretend the register is SImode.

Wed Jul 29 23:49:23 1998  Todd Vierling  <tv@netbsd.org>

	* configure.in: Use xm-netbsd.h as the NetBSD xm file (not xm-siglist).
	Accept arm32 as arm, m68k4k as m68k, mipsle as mips-dec, and any
	manufacturer id for ns32k.
	* configure: Regenerated.
	* config/netbsd.h: When using ASM_WEAKEN_LABEL, make it global too.
	* config/t-netbsd: Don't compile libgcc1-test as the fns are in libc.
	* config/i386/netbsd.h: Undefine DWARF2_UNWIND_INFO, not define as 0.
	* config/m68k/netbsd.h: Same.
	* config/ns32k/netbsd.h: Same.
	* config/sparc/netbsd.h: Same.

Wed Jul 29 22:39:21 1998  Jeffrey A Law  (law@cygnus.com)

	* unroll.c (unroll_loop): Do not abort for an UNROLL_MODULO
	or UNROLL_COMPLETELY loop that starts with a jump to its
	exit code.

Wed Jul 29 22:18:14 1998  David Edelsohn  <edelsohn@gnu.org>

	* rs6000/rs6000.md (absdi2 define_split): Swap operands of MINUS.
	* rs6000/rs6000.c (mask64_operand): Use HOST_BITS_PER_WIDE_INT.
	(print_operand, case 'B'): Don't fall through.
	(print_operand, case 'S'): Correct mask begin/end computation.
	Use HOST_BITS_PER_WIDE_INT.
	* rs6000/rs6000.h (CPP_PREDEFINES): Define _LONG_LONG.
	(CONDITIONAL_REGISTER_USAGE): GPR13 fixed if TARGET_64BIT.
	* rs6000/aix41.h (CPP_PREDEFINES): Same.
	* rs6000/aix43.h (CPP_PREDEFINES): Same.

Wed Jul 29 11:47:10 1998  Nick Clifton  <nickc@cygnus.com>

	* config/arm/thumb.md (extendqisi2_insn): Remove earlyclobber
	constraint from second alternative.

Tue Jul 28 23:29:04 1998  Jason Merrill  <jason@yorick.cygnus.com>

	* configure.in: Fix --without/--disable cases for local-prefix,
	gxx-include-dir and checking.

Tue Jul 28 22:01:23 1998  David S. Miller  <davem@pierdol.cobaltmicro.com>

	* configure.in (enable_haifa): Set by default for sparc64 too.
	configure: Rebuilt.

Tue Jul 28 23:29:04 1998  Jason Merrill  <jason@yorick.cygnus.com>

	* i386/cygwin32.h (VALID_MACHINE_TYPE_ATTRIBUTE): New macro.
	* i386/winnt.c (associated_type): New fn.
	(i386_pe_valid_type_attribute_p): New fn.
	(i386_pe_check_vtable_importexport): Remove.
	(i386_pe_dllexport_p): Use associated_type.
	(i386_pe_dllimport_p): Likewise.

	From Antonio M. O. Neto <anmendes@cruzeironet.com.br>:
	* i386.c (i386_valid_type_attribute_p): Also accept
	attributes for METHOD_TYPEs.

Tue Jul 28 23:17:39 1998  Peter Gerwinski  <peter@gerwinski.de>

	* tree.c (build_range_type): Copy TYPE_SIZE_UNIT.

Tue Jul 28 22:31:12 1998  Craig Burley  <burley@gnu.org>

	* gcc.c: Fix commentary describing %g, %u, %U, and %O.

	* gcc.c (do_spec_1): Fix handling of %g%O and %U%O to prevent
	them from generating a new base name for each occurrence of
	a specific suffix.

1998-07-28  Vladimir N. Makarov  <vmakarov@cygnus.com>

	* cse.c (cse_insn): Enable substitution inside libcall only for REG,
	SUBREG, MEM.
	* rtlanal.c (replace_rtx): Prohibit replaces in	CONST_DOUBLE.

	* cplus-dem.c (type_kind_t): New type.
	(demangle_template_value_parm): Add type_kind_t parameter.  Rely
	on this parameter, rather than demangling the type again.
	(demangle_integral_value): Pass tk_integral.
	(demangle_template_: Pass the value returned from do_type.
	(do_type): Return a type_kind_t.  Pass tk_integral to
	demangle_template_value_parm for array bounds.
	(demangle_fund_type): Likewise.

Mon Jul 27 00:54:41 1998  Jason Merrill  <jason@yorick.cygnus.com>

	* tree.c (simple_cst_equal, case CONSTRUCTOR): OK if the elts are
	identical.

Mon Jul 27 22:18:36 1998  Jeffrey A Law  (law@cygnus.com)

	* pa.c (move_operand): Accept CONSTANT_P_RTX.

Mon Jul 27 17:18:52 1998  Dave Brolley  <brolley@cygnus.com>

	* stor-layout.c (layout_type): Handle arrays of bits, for Chill.

	* expr.c (get_inner_reference): Handle zero-based, unsigned, array
	index conversion.

Mon Jul 27 14:51:33 1998  Jeffrey A Law  (law@cygnus.com)

	* mn10300.h (DEBUGGER_AUTO_OFFSET): Define.
	(DEBUGGER_ARG_OFFSET): Likewise.

	* mn10300.md (movsf): Remove last change.  Not needed.

Mon Jul 27 14:22:36 1998  Dave Brolley  <brolley@cygnus.com>

	* c-lex.c (yylex): Fix boundary conditions in character literal and
	string literal loops.

Mon Jul 27 11:43:54 1998  Stan Cox  <scox@cygnus.com>

	* longlong.h (count_leading_zeros): SPARClite scan instruction was
	being invoked incorrectly.

	* i386.c (ix86_prologue): Added SUBTARGET_PROLOGUE invocation.
	* i386/cygwin32.h (STARTFILE_SPEC, LIB_SPEC, SUBTARGET_PROLOGUE):
	Add -pg support.
	* i386/win32.h: New file.  Hybrid mingw32.h/cygwin32.h configuration.
	* configure.in: Added i[34567]86-*-win32.
	* config.sub: Likewise.
	* configure: Rebuilt.

Sun Jul 26 01:11:12 1998  H.J. Lu  (hjl@gnu.org)

	* i386.h (CONST_DOUBLE_OK_FOR_LETTER_P): Return 0 when eliminating
	the frame pointer and compiling PIC code and reload has not completed.

	* i386.c (output_to_reg): Add code to emulate non-popping DImode
	case.

Sun Jul 26 01:01:32 1998  Jeffrey A Law  (law@cygnus.com)

	* regmove.c (regmove_optimize): Fix typo initializing regmove_bb_head.

Sat Jul 25 23:29:23 1998  Gerald Pfeifer  <pfeifer@dbai.tuwien.ac.at>

	* Makefile.in (install-info): Only try to update the info
	directory file if it exists in the first place.

Fri Jul 24 18:58:37 1998  Klaus Espenlaub  <kespenla@student.informatik.uni-ulm.de>

	* rs6000.h (ASM_OUTPUT_CONSTRUCTOR, ASM_OUTPUT_DESTRUCTOR): Delete.

Fri Jul 24 14:20:26 1998  Jeffrey A Law  (law@cygnus.com)

	* mn10300.md (movqi, movhi, movsi, movsf): Correctly handle
	CONST_DOUBLE source.

Fri Jul 24 11:17:04 1998  Nick Clifton  <nickc@cygnus.com>

	* config/arm/thumb.c (thumb_print_operand): Decode %_ in asm
	strings as the insertion of USER_LABEL_PREFIX.
	* config/arm/thumb.h (PRINT_OPERAND_PUNCT_VALID_P): Accept _ as a
	valid code.
	* config/arm/thumb.md: Use %_ as a prefix to gcc library function
	calls.

Thu Jul 23 18:53:20 1998  Jim Wilson  <wilson@cygnus.com>

	* dbxout.c (dbxout_range_type): Only call dbxout_type_index for
	already defined type.

Thu Jul 23 13:49:41 1998  Jeffrey A Law  (law@cygnus.com)

	* expr.c (check_max_integer_computation_mode): Allow conversions
	of constant integers to MAX_INTEGER_COMPUTATION_MODE.
	(expand_expr): Likewise.

Thu Jul 23 11:12:06 1998  Alexandre Petit-Bianco  <apbianco@cygnus.com>

	* expr.c (expand_expr): Expand RETURN_EXPR.

Thu Jul 23 11:00:29 1998  Jim Wilson  <wilson@cygnus.com>

	* dwarf2out.c (dwarf2out_finish): Call stripattributes on TEXT_SECTION.

Wed Jul 22 19:10:00 1998  Catherine Moore  <clm@cygnus.com>

	* dwarf2out.c (output_aranges): Call stripattributes
	for TEXT_SECTION references.
	(output_line_info): Likewise.

Wed Jul 22 14:08:54 1998  David S. Miller  <davem@pierdol.cobaltmicro.com>

	* profile.c (branch_prob): Call allocate_reg_info after outputting
	profile rtl in instrument_arcs.

Wed Jul 22 12:47:49 1998  Jim Wilson  <wilson@cygnus.com>

	* fixinc.irix (math.h): Install wrapper instead of copying.

Wed Jul 22 12:37:14 1998  Alexandre Petit-Bianco  <apbianco@cygnus.com>

	* tree.def (EXPR_WITH_FILE_LOCATION): Defined as an 'e' expression
	so WFL are expanded correctly when contained in a COMPOUND_EXPR.
	* tree.h (EXPR_WFL_EMIT_LINE_NOTE): Change macro not to use
	lang_flag_0. Added documentation in the flag table.

Tue Jul 21 23:28:35 1998  Klaus Kaempf  <kkaempf@rmi.de>

	* cccp.c (do_include): Fix vax c style include handling.

Tue Jul 21 13:28:19 1998  Jason Merrill  <jason@yorick.cygnus.com>

	* cplus-dem.c (do_type): Use demangle_template_value_parm for arrays.

Sun Jul 12 01:27:05 1998  Jason Merrill  <jason@yorick.cygnus.com>

	* fold-const.c (non_lvalue): Don't deal with null pointer
	constants here.
	(fold, case COMPOUND_EXPR): Wrap a constant 0 in a NOP_EXPR.

Tue Jul 21 15:49:31 1998  David Edelsohn  <edelsohn@gnu.org>

	* rs6000.h (PREDICATE_CODES): Add CONSTANT_P_RTX.
	* rs6000.md (movsi, movdi): Add CONSTANT_P_RTX.
	* rs6000.c (short_cint_operand): Add CONSTANT_P_RTX.
	(u_short_cint_operand): Same.
	(reg_or_cint_operand): Same.
	(logical_operand): Same.
	(input_operand): Same.
	(reg_or_short_operand): Use u_short_cint_operand.

Tue Jul 21 08:56:42 1998  Richard Henderson  <rth@cygnus.com>

	* alpha.md (fix_truncdfsi2, fix_truncsfsi2): Remove the define_expands,
	but keep the insns and splits.  Adjust so when the ultimate destination
	is memory, use cvtql.

Tue Jul 21 08:55:09 1998  Richard Henderson  <rth@cygnus.com>

	* flow.c (regno_uninitialized): Fixed regs are never uninitialized.

Tue Jul 21 00:31:01 1998  Jeffrey A Law  (law@cygnus.com)

	* gcc.c (do_spec): Call "error" not "warning".

	* configure.in: Fix minor problems with gas feature detection code.
	* configure: Rebuilt.

	* gcc.c (do_spec): Issue a warning for '%[]' usage.

	* Undo this change.
	* gcc.c: Delete %[spec] support.
	(do_spec_1, case '('): Likewise.
	(do_spec_1, case '['): Call error.

Mon Jul 20 22:34:17 1998  Richard Henderson  <rth@cygnus.com>

	* alpha.h (CPP_SPEC): Tidy.  Hook to cpp_cpu and cpp_subtarget.
	(CPP_SUBTARGET_SPEC): Default to empty string.
	(CPP_AM_*, CPP_IM_*, CPP_CPU_*, CPP_CPU_SPEC): New.
	(EXTRA_SPECS, SUBTARGET_EXTRA_SPECS): New.
	* alpha/elf.h (LD_SPEC): Use %(elf_dynamic_linker).
	* alpha/linux-elf.h (SUBTARGET_EXTRA_SPECS): New.
	(LIB_SPEC): Tidy.
	* alpha/linux.h (CPP_PREDEFINES): Tidy.
	* alpha/netbsd-elf.h (SUBTARGET_EXTRA_SPECS): New.
	* alpha/netbsd.h (CPP_PREDEFINES): Tidy.
	* alpha/osf.h (CPP_PREDEFINES): Remove bits subsumed by CPP_CPU_SPEC.
	* alpha/win-nt.h (CPP_PREDEFINES): Likewise.
	* alpha/vsf.h (CPP_PREDEFINES): Likewise.
	(CPP_SUBTARGET_SPEC): New.  Do this instead of overriding CPP_SPEC.
	* alpha/vxworks.h: Likewise.

Mon Jul 20 22:51:57 1998  Ken Raeburn  <raeburn@cygnus.com>

	* mips.md (reload_outsi): Added missing REGNO call.
	(smulsi3_highpart, umulsi3_highpart): Provide prototype for
	function pointer.
	(mul_acc_di, mul_acc_64bit_di): Don't use match_op_dup, use
	another match_operator and compare the codes.

	* mips.h (MASK_DEBUG_E, MASK_DEBUG_I): Set to zero.

	* MIPS multiply pattern fixes:
	* mips.h (enum reg_class, REG_CLASS_NAMES, REG_CLASS_CONTENTS):
	Add union classes for HI, LO, or HILO plus general registers.
	(GENERATE_MADD): Deleted.
	* mips.md (mulsi3_mult3): Don't disparage output-LO alternative.
	Add TARGET_MAD to condition.
	(mulsi3): Test HAVE_mulsi3_mult3, not specific flags.
	(mul_acc_si): Expand GENERATE_MADD here; it's the only use.  Use
	"*d" for accumulator, to give preference to LO initially but not
	during reload.

Mon Jul 20 16:16:38 1998  Dave Brolley  <brolley@cygnus.com>

	* configure.in (enable_c_mbchar): New configure option.
	(extra_cpp_objs): Always available now.

	* cexp.y (mbchar.h): #include it.
	(yylex): Handle Multibyte characters in character literals.

	* cccp.c (mbchar.h): #include it.
	(main): Set character set based on LANG environment variable.
	(rescan): Handle multibyte characters in comments.
	(skip_if_group): See above.
	(validate_else): See above.
	(skip_to_end_of_comment): See above.
	(macarg1): See above.
	(discard_comments): See above.
	(rescan): Handle multibyte characters in string and character literals.
	(collect_expansion): See above.
	(skip_quoted_string): See above.
	(macroexpand): See above.
	(macarg1): See above.
	(discard_comments): See above.
	(change_newlines): See above.

	* c-lex.c (mbchar.h): #include it.
	(GET_ENVIRONMENT): New macro.
	(init_lex): Set character set based on LANG environment variable.
	(yylex): Handle multibyte characters in character literals.
	(yylex): Handle multibyte characters in string literals.

	* Makefile.in (mbchar.o): New target.
	(cccp$(exeext)): @extra_cpp_objs@ is always available.
	(cppmain$(exeext)): @extra_cpp_objs@ is always available.

	* mbchar.[ch]: New files for multibyte character handling.

Mon Jul 20 01:11:11 1998  David S. Miller  <davem@pierdol.cobaltmicro.com>

	* jump.c (jump_optimize): When simplifying noop moves and
	PUSH_ROUNDING, fix thinko so we use same criterion for identifying
	the PUSHes to rewrite in second loop as we did in the first.

Sun Jul 19 08:23:53 1998  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* cplus-dem.c (demangle_nested_args): Make function definition
	static to match the prototype.

Fri Jul 17 14:58:44 1998  Richard Henderson  <rth@cygnus.com>

	* alloca.c: Respect USE_C_ALLOCA.
	* gencheck.c (xmalloc): Ignore __GNUC__ for definition.
	* gengenrtl.c (xmalloc): Likewise.

Fri Jul 17 14:18:14 1998  Richard Henderson  <rth@cygnus.com>

	* loop.h (struct induction): Add no_const_addval.
	* loop.c (the_movables, reg_address_cost): New variables.
	(init_loop): Init reg_address_cost.
	(loop_optimize): Call end_alias_analysis.
	(scan_loop): Init the_movables.
	(record_giv): Init induction->no_const_addval.
	(basic_induction_var) [PLUS]: Use rtx_equal_p instead of ==.
	[REG]: Rearrange loop search test to catch more cases.
	(general_induction_var): Return success not benefit; take an extra
	argument for that.  Change all callers.
	(simplify_giv_expr) [PLUS]: Always combine invariants.  Use sge_plus.
	[MULT]: Use rtx_equal_p instead of ==.  Combine simple invariants.
	[default]: Search the_movables for additional combinations.
	(sge_plus_constant, sge_plus): New functions.
	(express_from_1): New function.
	(express_from): Always define.  Rewrite using express_from_1.
	(combine_givs_p): Handle more cases.  Ignore address cost.
	(cmp_combine_givs_stats): New function.
	(combine_givs_used_once, combine_givs_benefit_from): New functions.
	(combine_givs): Rewrite to do best-fit combination.

	* fold-const.c (operand_equal_p): Handle RTL_EXPR.
	(fold): Do a complete (A*C)+(B*C) association check.

Fri Jul 17 11:21:55 1998  Jim Wilson  <wilson@cygnus.com>

	* function.c (fixup_var_refs_insns): Handle CLOBBER of a CONCAT.

Fri Jul 17 11:48:55 1998  Jeffrey A Law  (law@cygnus.com)

	* mn10300.c (MODES_TIEABLE_P): Fix typo.

Fri Jul 17 03:26:12 1998  Rihcard Earnshaw  (rearnsha@arm.com)

	* tree.c (valid_machine_attribute): Only create a new type variant if
	there is a decl to use it.

Thu Jul 16 14:48:04 1998  Nick Clifton  <nickc@cygnus.com>

	* gcc.c (do_spec_1): Cope with %g/%u/%U options which do not have
	a suffix.

Fri Jul 17 03:24:40 1998  Hans-Peter Nilsson  <hp@axis.se>

	* extend.texi (Explicit Reg Vars): Typo: change "may deleted" into "may
	be deleted"

Thu Jul 16 14:48:47 1998  Jeffrey A Law  (law@cygnus.com)

	* mn10300.c (count_tst_insns): New arg oreg_countp.  Callers changed.
	Simplify tests for clearing an address register.
	(expand_prologue): Corresponding changes.

	* mn10300.md (movXX patterns): Make sure the destination is an
	ADDRESS_REG when substituting "zero_areg" for (const_int 0).
	(logical patterns): Split into expanders + patterns.
	(zero and sign extension patterns): Similarly.
	(shift patterns): Similarly.

Thu Jul 16 01:17:44 1998  Richard Henderson  <rth@cygnus.com>

	* loop.c (emit_iv_add_mult): Scan the entire insn list generated
	for the sequence, recording base values.

Wed Jul 15 10:49:55 1998  Richard Henderson  <rth@cygnus.com>

	* i386.h (CPP_CPU_SPEC): Remove -Asystem(unix).

Tue Jul 14 14:15:30 1998  Nick Clifton  <nickc@cygnus.com>

	* gcc.c: Remove ANSI-C ism from --help code.

	* toplev.c: Support --help with USE_CPPLIB.

Tue Jul 14 14:46:08 1998  Jeffrey A Law  (law@cygnus.com)

	* configure.in: Rework gas feature code to work with symlink based
	source trees.

	* extend.texi: Clarify some issues related to local variables
	assigned to explicit registers.

	* mn10300.md (mulsi): Turn into expander + pattern.

	* mn10300.md (movsi, movsf, movdi, movdf): Remove "x" from I -> a
	alternative.

Tue Jul 14 07:41:59 1998  Richard Earnshaw  (rearnsha@arm.com)

	* arm/tcoff.h (USER_LABEL_PREFIX): Make it empty to match coff.h.

Tue Jul 14 03:02:44 1998  Jeffrey A Law  (law@cygnus.com)

	* version.c: Bump again to distinguish mainline tree from the
	egcs-1.1 branch.

Tue Jul 14 02:20:38 1998  Jeffrey A Law  (law@cygnus.com)

	* version.c: Bump to avoid problems with old spec files during
	bootstrap.

Mon Jul 13 23:11:44 1998  David S. Miller  <davem@pierdol.cobaltmicro.com>

	* config/sparc/sparc.c (output_scc_insn): Enclose || conditions in
	parens while walking over notes.
	* config/sparc/sparc.md (reg movdi split): Clean up matching
	conditions.
	(all DI arithop splits on 32-bit): Handle immediate arguments
	correctly when they are CONST_INTs.

Mon Jul 13 23:57:21 1998  Kamil Iskra  <iskra@student.uci.agh.edu.pl>

	* m68k/m68k.h (TARGET_SWITCHES): Clear MASK_68040_ONLY for
	-m68020-40, -m68020-60 and -m5200.

Mon Jul 13 23:52:05 1998  Weiwen Liu  <weiwen.liu@yale.edu>

	* gcc.c (do_spec_1): Fix %O handling for secure temporary file
	creation.

Mon Jul 13 23:42:36 1998  Ralf Corsepius  <corsepiu@faw.uni-ulm.de>

	* sh/elf.h (MAX_OFILE_ALIGNMENT): Undefine before including svr4.h.

Mon Jul 13 23:36:08 1998  Jim Wilson  <wilson@cygnus.com>

	* i386/i386.h (CPP_486_SPEC, CPP_586_SPEC, CPP_686_SPEC): New specs.
	(CPP_CPU_DEFAULT_SPEC, CPP_CPU_SPEC): Use them.
	(EXTRA_SPECS): Support them.
	* gcc.c: Delete %[spec] support.
	(do_spec_1, case '('): Likewise.
	(do_spec_1, case '['): Call error.
	* i386/aix386ng.h, cygwin32.h, freebsd-elf.h, gas.h, isc.h,
	linux-aout.h, linux-oldld.h, linux.h, osfelf.h, osfrose.h, sco.h,
	sco4.h, sco4dbx.h, sco5.h, sol2.h, sysv3.h (CPP_SPEC): Delete
	%[cpp_cpu].

Mon Jul 13 23:31:04 1998  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* m68k.c (output_scc_di): Use cmpw #0 only for address registers.

Mon Jul 13 23:26:43 1998  Jeffrey A Law  (law@cygnus.com)

	* tree.h (tree_common): Note front-end dependencies on layout of
	this structure.

Mon Jul 13 23:18:39 1998  Craig Burley  <burley@gnu.org>

	* stmt.c (expand_expr_stmt): If not assigning fresh
	value to last_expr_value, zero it, so old garbage
	doesn't get dereferenced.

Mon Jul 13 23:06:55 1998  Henning.Petersen@t-online.de  (Henning Petersen)

	* gcse.c (hash_scan_insn): Add missing argument declaration.

Mon Jul 13 18:59:13 1998  Jim Wilson  <wilson@cygnus.com>

	* configure.in (mips-sgi-irix5cross64, mips-sgi-irix5*): Remove
	HAVE_INTTYPES_H from xm_defines.  Define xm_file to mips/xm-iris5.h.
	* mips/xm-iris5.h (USG): Delete.

Mon Jul 13 17:18:47 1998  Nick Clifton  <nickc@cygnus.com>

	* cccp.c (main): Add support for parsing --help.
	(display_help): New function: display command line switches.

	* cpplib.c (cpp_handle_option): Add support for parsing --help.
	(display_help): New function: display command line switches.

	* gcc.c (main): Add support for parsing --help, and passing it on
	to the sub-processes invoked by gcc.
	(display_help): New function: display command line switches.	

	* tm.texi (TARGET_SWITCHES and TARGET_OPTIONS): Document
	'description' field added to structure.

	* toplev.c: Add support for parsing --help.
	Add documentation strings to command line option tables.
	(display_help): New function: display comman line switches.

Mon Jul 13 16:15:10 1998  John Carr  <jfc@mit.edu>

	* sparc.c, sparc.h, sparc.md: New trampoline code.
	Allow integer operand 1 to V8+ DImode shift instructions.
	Fix bugs in V8+ wide multiply patterns.
	In 32 bit mode, split DImode register moves and logical instructions.
	Write V9 branch prediction flag.
	Use V9 conditional move more often for scc.

Mon Jul 13 15:10:09 1998  Philippe De Muyter  <phdm@macqel.be>

	* invoke.texi(-fno-builtin): Explain that the names of built-in
	functions begin with `__builtin_', not `__'.

Mon Jul 13 19:01:52 1998  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* reload1.c (reload_reg_free_before_p): Abort for RELOAD_FOR_OUTPUT.

Mon Jul 13 10:50:17 1998  Mark Mitchell  <mark@markmitchell.com>

	* cplus-dem.c (SCOPE_STRING): Remove DMGL_JAVA stuff.
	(cplus_demangle_opname): Initialize work.
	(demangle_template): Remove is_java_array.
	(do_type): Remove DMGL_JAVA stuff.
	(long_options): Remove "java".
	(main): Remove 'j' option.

Mon Jul 13 10:19:00 1998  Jeffrey A Law  (law@cygnus.com)

	* mn10300.h (REG_CLASS_FROM_LETTER): Map 'y' to SP_REGS.
	Handle 'x' as NO_REGS for this cpu.
	(REGNO_OK_FOR_BIT_BASE_P): Define.
	(REG_OK_FOR_BIT_BASE_P): Define.
	(GO_IF_LEGITIMATE_ADDRESS): Use them.
	(REG_OK_FOR_INDEX_P): Tweak.
	* mn13000.c (REG_SAVE_BYTES): Define.
	(expand_epilogue, initial_offset): Use it.
	(secondary_reload_class): Slightly reformat.
	(output_tst): Tweak comments.
	* mn10300.md: Change 'x' to 'y' for SP_REGS.  Then add 'x' to many
	patterns.
	(addsi3): Turn into a define_expand/define_insn pair.  Rework code for
	three operand addition case to be more efficient.
	(subsi3): Turn into a define_expand/define_insn pair.

	* expr.c (expand_expr): Only set MEM_IN_STRUCT_P if the memory address
	is not varying for REFERENCE_TYPE or when we think we might have found
	an optimized access to the first element in an array.

Mon Jul 13 02:24:08 1998  David S. Miller  <davem@pierdol.cobaltmicro.com>

	* regclass.c (reg_scan_mark_refs): New arg min_regno.  Only update
	regscan information for REGs with numbers greater than or equal to
	this.  All callers changed.
	(reg_scan_update): New function to efficiently update regscan
	information on the fly.
	* rtl.h: Add prototype.
	* jump.c (jump_optimize): Call it when we make a transformation
	which generates new pseudo-REGs.

Sun Jul 12 13:08:14 1998  Jeffrey A Law  (law@cygnus.com)

	* collect2.c (main): Use "-x c" instead of "-lang-c" for force the
	compiler into C mode.

Sun Jul 12 01:27:05 1998  Jason Merrill  <jason@yorick.cygnus.com>

	* cplus-dem.c (demangle_nested_args): Return a value.

	* tree.h (TYPE_P): New macro.

Sat Jul 11 16:19:48 1998  Mark Mitchell  <mark@markmitchell.com>

	* cplus-dem.c (string): Move definition before work_stuff.
	(work_stuff): Add volatile_type, forgetting_types,
	previous_argument, and nrepeats fields.
	(SCOPE_STRING): New macro.
	(demangle_template): Add `remember' parameter.  Add comment.
	Register the `B' code type here, if remembering.  Tidy.  Fix crash
	on NULL tmpl_argvec.  Be consistent with use of tname/trawname.
	(demangle_nested_args): New function.
	(internal_cplus_demangle): Handle volatile-qualified member
	functions.
	(mop_up): Delete the previous_argument string if present.
	(demangle_signature): Tidy.  Handle volatile-qualified member
	functions.  Handle back-references using the `B' code.  Use extra
	parameter to demangle_template and SCOPE_STRING where appropriate.
	(demangle_template_value_parm): Fix thinko; 'B' is not an integral
	code.
	(demangle_class): Use SCOPE_STRING.
	(gnu_special): Pass additional argument to demangle_template.
	Use SCOPE_STRING.
	(demangle_qualified): Save qualified types for later
	back-references.  Handle constructors and destructors for template
	types correctly.
	(do_type): Tidy.  Use SCOPE_STRING.  Pass extra argument to
	demangle_template.  Use demangled_nested_args.  Don't remember
	qualified types here; that's now done in demangle_qualified.
	Similarly for templates.
	(do_arg): Improve comment.  Handle 'n' repeat code.
	(remember_type): Check forgetting_types.
	(demangle_args): Deal with 'n' repeat codes.  Tidy.
	
Sat Jul 11 02:59:08 1998  Richard Earnshaw  <rearnsha@arm.com>

	* arm.md (extendhisi2_mem, movhi, movhi_bytes): Propagate the volatile
	and structure attribute flags to MEMs generated.
	(splits for sign-extended HI & QI mode from memory): Also propagate
	the volatile flag.

	* configure.in (thumb-*-coff*): Don't cause fixincludes to be run.

Fri Jul 10 19:06:59 1998  Michael Meissner  <meissner@cygnus.com>

	* varray.h: Include system.h if it hasn't already been included
	before to get size_t declared.

Fri Jul 10 12:53:58 1998  David S. Miller  <davem@pierdol.cobaltmicro.com>

	* jump.c (jump_optimize): If after_regscan and our transformations
	generate new REGs, rerun reg_scan.

Fri Jul 10 11:50:43 1998  Andrew MacLeod  <amacleod@cygnus.com>

	* config/i960/i960.c (i960_address_cost): MEMA operands with
	positive offsets < 4096 are free.

Fri Jul 10 12:34:37 1998  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* config/m68k/m68k.c (const_uint32_operand): Recognize
	CONSTANT_P_RTX.
	(const_sint32_operand): Likewise.

Thu Jul  9 22:58:59 1998  Jeffrey A Law  (law@cygnus.com)

	* Makefile.in (alias.o): Depend on $(EXPR_H).

Thu Jul  9 18:24:56 1998  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* reload1.c (choose_reload_regs): If using an equivalence from
	find_equiv_reg and reg_reloaded_valid is not set for this register,
	clear the associated spill_reg_store.

Thu Jul  9 18:12:49 1998  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* reload1.c (emit_reload_insns): If an output reload copies only
	to a secondary reload register, indicate that the secondary reload
	does the actual store.

Thu Jul  9 18:01:05 1998  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* reload.c (find_equiv_reg): If need_stable_sp is set,
	check if stack pointer is changed directly in a PARALLEL.

Thu Jul  9 10:38:14 1998  Jeffrey A Law  (law@cygnus.com)

	* jump.c (duplicate_loop_exit_test): Fix thinko.

Thu Jul  9 01:30:37 1998  Joel Sherrill  <joel@OARcorp.com>
			  Ralf Corsepius  <corsepiu@faw.uni-ulm.de>

	* config/i386/rtemself.h: Updated to keep in sync with
	config/i386/linux.h.

	* configure.in: Added sh-rtemself.
	* configure: Rebuilt.
	* config/sh/rtems.h: Removed -D__ELF__ since it is now COFF.
	* config/sh/rtemself.h: New file.

	* config/rs6000/rtems.h: Defined STARTFILE_DEFAULT_SPEC.

Wed Jul  8 21:43:14 1998  Jeffrey A Law  (law@cygnus.com)

	* configure.in: Check if the assembler supports ".balign" and
	".p2align" and define HAVE_GAS_BALIGN_AND_P2ALIGN appropriately.
	* acconfig.h (HAVE_GAS_BALIGN_AND_P2ALIGN): New tag.
	* i386/gas.h (ASM_OUTPUT_ALIGN): If the assembler has support for
	".balign" then use it.

	* print-rtl.c (print_rtx): Revert previous patch.

	* jump.c (duplicate_loop_exit_test): Do not duplicate the loop exit
	test if the exit code has an insn with ASM_OPERANDS.

	* i386/cygwin32.h (STDIO_PROTO): Fix typo.
	* m32r.h (STDIO_PROTO): Fix typo.

	* pa.h (LEGITIMIZE_RELOAD_ADDRESS): Handle addresses created by
	LEGITIMIZE_RELOAD_ADDRESS.
	* tm.texi (LEGITIMIZE_RELOAD_ADDRESS): Note that this macro must be
	able to handle addresses created by previous invocations of the macro.

	* flow.c (find_auto_inc): Remove most recent change.  Real bug was
	elsewhere.

	* cse.c (count_reg_usage): Count registers used in addresses of
	CLOBBERs.

Wed Jul  8 15:08:29 1998  Jim Wilson  <wilson@cygnus.com>

	* Makefile.in (STAGESTUFF): Readd line lost during June 9 FSF merge.

	* configure.in (mips64orion-*-rtems*): Use elf64.h not elfl64.h.

1998-07-08  Vladimir N. Makarov  <vmakarov@cygnus.com>

	* config/fp-bit.c (__gexf2, __fixxfsi, __floatsixf): Add function
	stubs.

	* toplev.c (lang_options): Add -Wlong-long, -Wno-long-long
	options.
	* c-decl.c (warn_long_long): Define.
	(c_decode_option): Parse -Wlong-long, -Wno-long-long options.
	(grokdeclarator): Add flag `warn_long_long' as guard for
	warning "ANSI C does not support `long long'".
	* invoke.texi: Add description of options -Wlong-long,
	-Wno-long-long.
	* gcc.1: The same as above.
	
Wed Jul  8 02:43:34 1998  Jeffrey A Law  (law@cygnus.com)

	* rtlanal.c (reg_overlap_mentioned_p): Handle STRICT_LOW_PART.  If
	either argument is CONSTANT_P, then return zero.
	* reload.c (reg_overlap_mentioned_for_reload_p): Similarly.

	* configure.in: Also look at $srcdir/gas/configure to find a
	gas version #.

Wed Jul  8 00:28:22 1998  Carlo Wood  <carlo@runaway.xs4all.nl>

	* dsp16xx.h : Clean up of macro OPTIMIZATION_OPTIONS

Tue Jul  7 21:18:14 1998  Mumit Khan  <khan@xraylith.wisc.edu>

	* i386/cygwin32.h (ASM_DECLARE_FUNCTION_NAME): Merge duplicate
	definitions from last two patches.

Tue Jul  7 23:03:34 1998  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* reload1.c (choose_reload_regs): Don't set reload_override_in
	if EQUIV is clobbered in INSN and the reload is done after INSN.

Tue Jul  7 21:23:36 1998  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* expr.c (emit_queue): If emitting a SEQUENCE, set QUEUED_INSN
	to the first insn of the sequence.

Tue Jul  7 21:05:25 1998  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* cse.c (cse_insn): Don't make change without validation.

Tue Jul  7 11:40:05 1998  Jeffrey A Law  (law@cygnus.com)

	* mn10200.md (various zero/sign extension patterns): Zero and sign
	extensions which use "sub" clobber cc0.

Tue Jul  7 09:12:08 1998  Jeff Law  (law@cygnus.com)

	* version.c: Bump for snapshot.

Tue Jul  7 10:07:20 1998  Jeffrey A Law  (law@cygnus.com)

	* print-rtl.c (print_rtx): Use REAL_VALUE_TYPE instead of "double".

Tue Jul  7 08:41:27 1998  Richard Henderson  (rth@cygnus.com)

	* print-rtl.c (print_rtx): Only print fp values when REAL_VALUE_TYPE
	is a double.

Tue Jul  7 00:31:58 1998  Jeff Law  (law@cygnus.com)

	* version.c: Bump for snapshot.

Tue Jul  7 01:03:03 1998  Mumit Khan  <khan@xraylith.wisc.edu>

	Support for dllimport and dllexport attributes for i386-pe.

	* tree.h (DECL_NON_ADDR_CONST_P): New accessor macro.
	(struct tree_decl): Add non_addr_const_p field.
	* tree.c (staticp): Use.

	* i386/cygwin32.h (CPP_PREDEFINES): Map __declspec(x) to GCC
	attributes.
	(SUBTARGET_SWITCHES): Switches to turn on/off dllimport|export
	attributes. Also accept -mwindows option.
	(VALID_MACHINE_DECL_ATTRIBUTE): New macro.
	(MERGE_MACHINE_DECL_ATTRIBUTE): New macro.
	(REDO_SECTION_INFO_P): New macro.
	(DRECTVE_SECTION_FUNCTION): New macro.
	(drectve_section): Cover function to implement above.
	(SWITCH_TO_SECTION_FUNCTION): New macro.
	(switch_to_section): Covert function to implement above.
	(EXTRA_SECTIONS): Add in_drectve.
	(EXTRA_SECTION_FUNCTIONS): Add in_drectve and switch_to_section.
	(ENCODE_SECTION_INFO): Delete old macro and redefine as a function.
	(STRIP_NAME_ENCODING): Handle new attributes.
	(ASM_OUTPUT_LABELREF): New macro.
	(ASM_OUTPUT_FUNCTION_NAME): New macro.
	(ASM_OUTPUT_COMMON): New macro.
	(ASM_OUTPUT_DECLARE_OBJECT_NAME): New macro.

	* i386/mingw32.h (CPP_PREDEFINES): Map __declspec(x) to GCC
	attributes.

	* i386/winnt.c (i386_pe_valid_decl_attribute_p): New function.
	(i386_pe_merge_decl_attributes): New function.
	(i386_pe_check_vtable_importexport): New function.
	(i386_pe_dllexport_p): New function.
	(i386_pe_dllimport_p): New function.
	(i386_pe_dllexport_name_p): New function.
	(i386_pe_dllimport_name_p): New function.
	(i386_pe_mark_dllexport): New function.
	(i386_pe_mark_dllimport): New function.
	(i386_pe_encode_section_info): New function.
	(i386_pe_unique_section): Strip encoding from name first.

Tue Jul  7 00:50:17 1998  Manfred Hollstein  (manfred@s-direktnet.de)

	* libgcc2.c (L_exit): Provide a fake for atexit on systems which
	define ON_EXIT but not HAVE_ATEXIT.

Tue Jul  7 00:44:35 1998  Franz Sirl  <Franz.Sirl-kernel@lauterbach.com>

	* m68k.md (zero_extend QI to HI): Correctly handle TARGET_5200.

Tue Jul  7 00:36:41 1998  Ulrich Drepper  <drepper@cygnus.com>

	* i386.c: Remove random whitespace at end of lines.

	* i386.c (ix86_epilogue): For pentium processors, try to deallocate
	4 or 8 byte stacks with pop instructions instead of an add instruction.

Tue Jul  7 00:30:08 1998  Klaus Kaempf  <kkaempf@rmi.de>

	* alpha.c: Include tree.h before expr.h.

Mon Jul  6 22:50:48 1998  Jason Merrill  <jason@yorick.cygnus.com>

	* c-parse.in (struct_head, union_head, enum_head): New nonterminals.
	(structsp): Use them.  Update files generated from c-parse.in.
	* extend.texi (Type Attributes): Document it.

	* c-decl.c: Add warn_multichar.
	(c_decode_option): Handle -Wno-multichar.
	* c-lex.c (yylex): Check it.
	* c-tree.h: Declare it.
	* toplev.c (lang_options): Add it.
	* invoke.texi: Document it.

Mon Jul  6 22:47:55 1998  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* reload.c (find_equiv_reg): When looking for stack pointer + const,
	make sure we don't use a stack adjust.

	* reload.c (find_equiv_reg): If need_stable_sp is set,
	check if stack pointer is changed directly.

	* reload1.c (delete_dead_insn): Don't delete feeding insn
	if that insn has side effects.

	* flow.c (find_auto_inc): Clear UNCHANGING bit of register that is
	changed.

	* reload1.c (reload_reg_free_before_p): RELOAD_FOR_OPADDR_ADDR
	precedes RELOAD_FOR_OUTADDR_ADDRESS.

	* gcse.c (hash_scan_insn): New argument IN_LIBCALL_BLOCK.  Changed
	caller.

Mon Jul  6 22:21:56 1998  Kamil Iskra  <iskra@student.uci.agh.edu.pl>

	* m68k.c (output_scc_di): Use cmpw #0 instead of tstl when
	testing address registers on the 68000.

Mon Jul  6 22:17:19 1998  Alasdair Baird  <alasdair@wildcat.demon.co.uk>

	* i386.c (is_fp_test): Fix thinko.

	* jump.c (jump_optimize): Check for CONST_INT before using INTVAL.

Mon Jul  6 22:14:31 1998  Richard Henderson  (rth@cygnus.com)

	* print-rtl.c (print_rtx): Display the real-value equivalent of
	a const_double when easy.

	* real.h (REAL_VALUE_TO_TARGET_SINGLE): Use a union to pun types.
	Zero memory first for predictability.
	(REAL_VALUE_TO_TARGET_DOUBLE): Likewise.
	* varasm.c (immed_real_const_1): Notice width of H_W_I == double.

	* regclass.c (allocate_reg_info): Initialize the entire reg_data
	virtual array.

Mon Jul  6 22:09:32 1998  Ian Lance Taylor  <ian@cygnus.com>
			  Jeff Law	    <law@cygnus.com>

	* i386/cygwin32.h: Add some declaration of external functions.
	(ASM_DECLARE_FUNCTION_NAME): Define.
	(ASM_OUTPUT_EXTERNAL, ASM_OUTPUT_EXTERNAL_LIBCALL): Define.
	(ASM_FILE_END): Define.
	* i386/winnt.c (i386_pe_declare_function_type): New function.
	(struct extern_list, extern_head): Define.
	(i386_pe_record_external_function): New function.
	(i386_pe_asm_file_end): New function.

	* cpplib.c (cpp_options_init): Initialize cplusplus_comments to 1,
	matching July 18, 1995 change to cccp.c.  If -traditional then
	disable cplusplus_comments.

Mon Jul  6 21:28:14 1998  Jeffrey A Law  (law@cygnus.com)

	* combine.c (expand_compound_operation): Fix thinko in code to optimize
	(zero_extend:DI (subreg:SI (foo:DI) 0)) to foo:DI.

	* Disable the following change from gcc2.  Not appropriate for egcs:

	Sun Jun  7 09:30:31 1998  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
	* reload.c (find_reloads): Give preference to pseudo that was the
	reloaded output of previous insn.

Mon Jul  6 21:07:14 1998  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* aclocal.m4 (GCC_FUNC_PRINTF_PTR): Don't define HOST_PTR_PRINTF.
	Instead, define a new macro HAVE_PRINTF_PTR which only signifies
	whether we have the %p format specifier or not.

	* acconfig.h: Delete stub for HOST_PTR_PRINTF, add HAVE_PRINTF_PTR.
	
	* machmode.h (HOST_PTR_PRINTF): When determining the definition,
	check HAVE_PRINTF_PTR to see whether "%p" is okay.

	* mips-tfile.c: Include machmode.h to get HOST_PTR_PRINTF.

	* Makefile.in (mips-tfile.o): Depend on machmode.h.

Mon Jul  6 10:42:05 1998  Mark Mitchell  <mark@markmitchell.com>

	* jump.c (duplicate_loop_exit_test): Don't refuse to copy a
	section of code just because it contains
	NOTE_INSN_BLOCK_{BEG,END}.
	* stmt.c (expand_end_loop): Likewise.  Also, don't refuse to
	move CALL_INSNs or CODE_LABELs.  When moving code, don't move
	NOTE_INSN_BLOCK_{BEG,END}.

Mon Jul  6 09:38:15 1998  Mark Mitchell  <mark@markmitchell.com>

	* cse.c (CSE_ADDRESS_COST): New macro, based on ADDRESS_COST, but
	dealing with ADDRESSOF.
	(find_best_addr): Use it.

Mon Jul  6 09:27:08 1998  Richard Henderson  <rth@cygnus.com>

	* alpha/vms.h (TRAMPOLINE_TEMPLATE): Revert last change.

Mon Jul  6 09:25:06 1998  Dave Love  <d.love@dl.ac.uk>

	* libgcc2.c (__eprintf): Make args consistent with prototype in
	assert.h.

Mon Jul  6 00:28:43 1998  Mark Mitchell  <mark@markmitchell.com>

	* cse.c (cse_insn): When SETting (MEM (ADDRESSOF (X))) to Y,
	don't claim that the former is equivalent to the latter.

Sun Jul  5 23:58:19 1998  Jeffrey A Law  (law@cygnus.com)

	* cse.c (cse_insn): Second arg is an RTX now.  Update all callers.
	(cse_basic_block): Keep track of the current RETVAL insn for a
	libcall instead of just noting that we're in a libcall.

	* combine.c (simplify_comparison): Do not commute a AND into
	a paradoxical SUBREG if not WORD_REGISTER_OPERATIONS.

	* i386/freebsd-elf.h (ASM_OUTPUT_MAX_SKIP_ALIGN): Protect with
	HAVE_GAS_MAX_SKIP_P2ALIGN.
	* i386/linux.h: Likewise.
	
Fri Jul  3 02:33:35 1998  David S. Miller  <davem@pierdol.cobaltmicro.com>

	* sparc.c (sparc_operand, move_operand,	arith_operand,
	arith11_operand, arith10_operand, arith_double_operand,
	arith11_double_operand, arith10_double_operand, small_int,
	uns_small_int): Recognize CONSTANT_P_RTX.
	(output_sized_memop, output_move_with_extension,
	output_load_address, output_size_for_block_move,
	output_block_move, delay_operand): Remove, has not been
	enabled or referenced for years.
	* sparc.md (movstrsi, block_move_insn): Likewise.
	* sparc.h (PREDICATE_CODES): Define.
	* linux-aout.h (MACHINE_STATE_{SAVE,RESTORE}): Override with
	version which uses getcc/setcc traps to save/restore condition
	codes.
	* linux64.h: Likewise.
	* sunos4.h: Likewise.
	* linux.h: Likewise.
	* sol2.h: Likewise.
	* sun4o3.h: Likewise.

Fri Jul  3 02:28:05 1998  Richard Henderson  <rth@cygnus.com>

	* alpha.c (alpha_initialize_trampoline): Hack around Pmode/ptr_mode
	lossage on VMS.  Reported by kkaempf@rmi.de.
	* alpha/vms.h (TRAMPOLINE_TEMPLATE): Add missing 0.

Thu Jul  2 17:41:14 1998  Nick Clifton  <nickc@cygnus.com>

	* config/m32r/m32r.h (MUST_PASS_IN_STACK): Override default
	version.

Thu Jul  2 14:34:48 1998  David Edelsohn  <edelsohn@mhpcc.edu>

	* expr.h (STACK_SIZE_MODE): New macro.
	* explow.c (allocate_dynamic_stack_space): Use it for
	mode of allocate_stack pattern increment operand.
	* tm.texi (STACK_SAVEAREA_MODE, STACK_SIZE_MODE): Document.
	* md.texi (stack_save_block, ...): Reflect use of macro.

	* rs6000.h (PROMOTE_MODE): Always promote to word_mode.
	(PROMOTE_FUNCTION_ARGS): Define.
	(PROMOTE_FUNCTION_RETURN): Define.
	(FUNCTION_VALUE): Promote to word_mode if smaller.
	Convert to gen_rtx_FOO.
	* rs6000.md (call_indirect): Store doubleword in 64-bit mode.
	Convert to gen_rtx_FOO.
	* rs6000.c: Convert to gen_rtx_FOO.
	
Thu Jul  2 14:16:11 1998  Michael Meissner  <meissner@cygnus.com>

	* varray.{c,h}: New files to provide virtual array support.

	* Makefile.in (OBJS): Add varray.o.
	(varray.o): Add new file.
	(REGS_H): New variable for dependencies for files including
	regs.h.  Add varray.h and files it includes.  Change all regs.h
	dependencies to $(REGS_H).

	* toplev.c (x{m,re}alloc): If size is 0, allocate 1 byte.
	(xcalloc): Provide frontend for calloc.
	* {tree,rtl}.h (xcalloc): Add declaration.

	* basic-block.h (REG_BASIC_BLOCK): Convert reg_n_info to be a
	varray.

	* regs.h (toplevel): Include varray.h.
	(reg_n_info): Switch to use a varray.
	(REG_*): Likewise.
	(allocate_reg_info): Change num_regs argument to be size_t.

	* regclass.c (reg_info_data): New structure to remember groups of
	reg_info structures allocated that are to be zeroed.
	({pref,alt}class_buffer): New statics to hold buffers
	allocate_reg_info allocates for {pref,alt}class_buffer.
	(regclass): Use {pref,alt}class_buffer to initialize
	{pref,alt}class.
	(allocate_reg_info): Switch to make reg_n_info use varrays.
	Allocate buffers for the preferred and alter register class
	information.  Change num_regs argument to be size_t, not int.

	* flow.c (reg_n_info): Switch to use varrays.

Thu Jul  2 10:11:47 1998  Robert Lipe  <robertl@dgii.com>

	* install.texi (sco3.2v5): Document new --with-gnu-as flag.
	* config/i386/sco5.h (JUMP_TABLES_IN_TEXT_SECTION): Defined as
	in other targets.
	(USE_GAS): Conditionalize away native assembler usage.
	* config/i386/sco5gas.h: New file.
	* config/i386/t-sco5gas: New file.
	* configure.in (ix86-sco3.2v5*): Use new files if --with-gnu-as

Thu Jul  2 08:20:00 1998  Catherine Moore  <clm@cygnus.com>

	* haifa-sched.c (alloc_EXPR_LIST): Change to use
	unused_expr_list.

Thu Jul  2 14:13:28 1998  Dave Love  <d.love@dl.ac.uk>

	* Makefile.in (install-info): Don't use $realfile.  Ignore
	possible errors from the install-info program.

Thu Jul  2 01:53:32 1998  Alasdair Baird  <alasdair@wildcat.demon.co.uk>

	* combine.c (simplify_comparison): Apply SUBREG_REG to SUBREGs.

Wed Jul  1 23:06:03 1998  Richard Henderson  <rth@cygnus.com>

	* i386.h (HARD_REGNO_MODE_OK): Kill spurious test.
	(MODES_TIEABLE_P): Tie SImode and HImode.

1998-07-01  Andreas Jaeger  <aj@arthur.rhein-neckar.de>

	* invoke.texi (Optimize Options): Fix typo.

Wed Jul  1 22:25:43 1998  Jim Wilson  <wilson@cygnus.com>

	* xcoffout.c (xcoffout_begin_function): Call xcoffout_block for
	the zero'th block.

Wed Jul  1 23:12:58 1998  Ken Raeburn  <raeburn@cygnus.com>

	* h8300.c (print_operand): Delete %L support.
	* h8300.md (branch_true, branch_false): Use %= with a prefix
	instead of %L for local branch labels.

Wed Jul  1 21:27:13 1998  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* reload1.c (emit_reload_insns): Use proper register classes for
	SECONDARY_INPUT_RELOAD_CLASS / SECONDARY_MEMORY_NEEDED code.

Wed Jul  1 21:17:36 1998  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* reload.c (find_reloads): If there are multiple
	RELOAD_FOR_INPUT_ADDRESS / RELOAD_FOR_OUTPUT_ADDRESS reloads for
	one operand, change RELOAD_FOR_INPADDR_ADDRESS /
	RELOAD_FOR_OUTADDR_ADDRESS for all but the first
	RELOAD_FOR_INPUT_ADDRESS / RELOAD_FOR_OUTPUT_ADDRESS reloads.

Wed Jul  1 17:23:23 1998  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* regmove.c (fixup_match_2): Check that P has RTX_CLASS 'i' before
	using its PATTERN.

Wed Jul  1 05:04:41 1998  Richard Henderson  <rth@cygnus.com>

	* expr.c (emit_group_load, emit_group_store): Rewrite considering
	the size and alignment of the structure being manipulated.
	* expr.c, calls.c, function.c: Update all callers.
	* expr.h: Update prototypes.
	* cse.c (invalidate): Cope with parallels.

Wed Jul  1 04:22:23 1998  Richard Henderson  <rth@cygnus.com>

	* sparc.c (function_arg_record_value): Take a MODE arg with which to
	create the PARALLEL.  Update all callers.

Wed Jul  1 04:10:35 1998  Richard Henderson  <rth@cygnus.com>

	* expr.c (expand_assignment, store_constructor, expand_expr): Use
	convert_memory_address instead of convert_to_mode when possible.

Wed Jul  1 03:48:00 1998  Richard Henderson  <rth@cygnus.com>

	* alpha.c (alpha_initialize_trampoline): Take arguments describing
	the layout.  Use ptr_mode.  Disable hint generation.  Use gen_imb.
	* alpha.h (INITIALIZE_TRAMPOLINE): Pass extra args to the init func.
	(TRANSFER_FROM_TRAMPOLINE): Move ...
	* alpha/osf.h: ... here.
	* alpha/vms.h (INITIALIZE_TRAMPOLINE): Use alpha_initialize_trampoline.
	(TRANSFER_FROM_TRAMPOLINE): Remove undef.
	* alpha/win-nt.h: Likewise.
	* alpha/vxworks.h: Likewise.

	* alpha/linux.h: Revert gcc2 merge lossage.

Wed Jul  1 10:56:55 1998  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* c-decl.c (grokdeclarator): Don't warn about implicit int in
	`typedef foo = bar'.

Wed Jul  1 02:12:33 1998  Robert Lipe  <robertl@dgii.com>

	* i386.c (asm_output_function_prefix): Make 686 function
	prologues not issue .types for non-global labels.

Tue Jun 30 23:46:53 1998  Dmitrij Tejblum  <tejblum@arc.hq.cti.ru>

	* i386/freebsd.h (WCHAR_TYPE): Chagne to an "int".
	(WCHAR_TYPE_SIZE): Update appropriately.

Tue Jun 30 23:16:39 1998  Jeffrey A Law  (law@cygnus.com)

	* flow.c (recompute_reg_usage): Does not return a value.
	* rtl.h (recompute_reg_usage): Update prototype.

	* jump.c (jump_optimize): Show that the jump chain is not
	valid when not optimizing.

Tue Jun 30 16:01:01 1998  Richard Henderson  <rth@cygnus.com>

	* rtl.def (CONSTANT_P_RTX): New.
	* rtl.h (CONSTANT_P): Recognize it.
	* cse.c (fold_rtx): Eliminate it.
	* expr.c (can_handle_constant_p): New variable.
	(init_expr_once): Initialize it.
	(expand_builtin): Generate CONSTANT_P_RTX if the expression is not
	immediately recognizable as a constant.

	* alpha.c (reg_or_6bit_operand): Recognize CONSTANT_P_RTX.
	(reg_or_8bit_operand, cint8_operand, add_operand): Likewise.
	(sext_add_operand, and_operand, or_operand): Likewise.
	(reg_or_cint_operand, some_operand, input_operand): Likewise.
	* alpha.h (PREDICATE_CODES): Add CONSTANT_P_RTX where needed.

1998-06-30  Benjamin Kosnik  <bkoz@bliss.nabi.net>

	* dbxout.c (dbxout_type_methods): Remove warn_template_debugging.

Tue Jun 30 14:03:34 1998  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* aclocal.m4 (GCC_NEED_DECLARATION): Accept an optional second
	argument, which is typically preprocessor code used to draw in
	additional header files when looking for a function declaration.
	(GCC_NEED_DECLARATIONS): Likewise.

	* configure.in (GCC_NEED_DECLARATIONS): Add checks for getrlimit
	and setrlimit, search for them in sys/resource.h.

	* acconfig.h: Add stubs for NEED_DECLARATION_GETRLIMIT and
	NEED_DECLARATION_SETRLIMIT.

	* system.h: Prototype getrlimit/setrlimit if necessary.

Tue Jun 30 10:54:48 1998  Mark Mitchell  <mark@markmitchell.com>

	* rtl.texi: Don't say that RTX_INTEGRATED_P is not depended
	upon.

Tue Jun 30 13:11:42 1998  Franz Sirl  <Franz.Sirl-kernel@lauterbach.com>

	* rs6000/sysv4.h (asm output): Add tabs for asm directives.

Tue Jun 30 13:11:42 1998  David Edelsohn  <edelsohn@mhpcc.edu>

	* Makefile.in (FLAGS_TO_PASS): Set AR_FLAGS to AR_FOR_TARGET_FLAGS.

Tue Jun 30 08:59:15 1998  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* gansidecl.h (ATTRIBUTE_UNUSED): Use __unused__ not `unused'.
	Don't define NULL here.  Also, remove all vestiges of autoconf
	based checks for bcmp/bcopy/bzero/index/rindex.

	* system.h: Immediately after including stdio.h, check for and if
	necessary provide a default definition of NULL.

Tue Jun 30 08:22:05 1998  Michael Meissner  <meissner@cygnus.com>

	* reload1.c (reload_cse_simplify_operands): Call
	fatal_insn_not_found, not abort.

Tue Jun 30 02:34:02 1998  Jeffrey A Law  (law@cygnus.com)

	* choose-temp.c (make_temp_file): Accept new argument for the
	file suffix to use.  Allocate space for it and add it to the
	template.
	* mkstemp.c (mkstemps): Renamed from mkstemp.  Accept new argument
	for the length of the suffix.  Update template structure checks
	to handle optional suffix.
	* collect2.c (make_temp_file): Update prototype.
	(main): Put proper suffixes on temporary files.
	* gcc.c (make_temp_file): Update prototype.
	(do_spec_1): Put proper suffixes on temporary files.

Tue Jun 30 00:56:19 1998  Bruno Haible  <haible@ilog.fr>

	* invoke.texi: Document new implicit structure initialization
	warning.

Mon Jun 29 21:40:15 1998  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* toplev.c (flag_dump_unnumbered): Declare.
	(f_options): Add dump-unnumbered.
	* print-rtl.c (flag_dump_unnumbered): Define.
	(print_rtx): Print only '#' for insn numbers if flag_dump_unnumbered
	is nonzero.
	(print_rtl): Don't output line number notes if flag_dump_unnumbered
	is nonzero.
	* flow.c (print_rtl_with_bb): Don't output newline after line
	numbers note if flag_dump_unnumbered is nonzero.

Mon Jun 29 22:12:06 1998  Jeffrey A Law  (law@cygnus.com)

	* Merge from gcc2 June 9, 1998 snapshot.  See ChangeLog.13 for
	details.

	* pa.c, pa.h, pa.md: Convert to gen_rtx_FOO.

Mon Jun 29 20:12:41 1998  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* Makefile.in (fix-header): Don't needlessly depend on cpperror.o.

	* alias.c (CHECK_ALIAS_SETS_FOR_CONSISTENCY): Cast expansion to
	void since it is evaluated in a comma list.

	* mips.h (ASM_GENERATE_INTERNAL_LABEL): Always sprintf `NUM'
	argument as a long and cast `NUM' to long to ensure it is of the
	proper width.  Wrap macro arguments in parens when they appear in
	the expansion.

	* sol2.h (ASM_GENERATE_INTERNAL_LABEL): Likewise.

	* sparc.h (ASM_GENERATE_INTERNAL_LABEL): Likewise.
	(ASM_DECLARE_RESULT): Fix fprintf format specifier to match
	function argument return type.
	(REGNO_OK_FOR_INDEX_P, REGNO_OK_FOR_BASE_P, REGNO_OK_FOR_FP_P,
	REGNO_OK_FOR_CCFP_P): Use `(unsigned)' not `U'.

	* cpplib.c (cpp_message_from_errno): Remove unneeded argument to
	cpp_message.

	* dbxout.c: Fix the comments after an #endif to reflect the actual
	condition tested in the preceding #if.

	* except.c (find_all_handler_type_matches): Switch to old-style
	function definition.

	* expr.c (expand_builtin): Remove unused variable `type' twice.

	* gbl-ctors.h (DO_GLOBAL_CTORS_BODY): Cast -1 before comparing it
	to an unsigned long.

	* haifa-sched.c (print_insn_chain): Remove unused function.

	* objc/objc-act.c (build_msg_pool_reference): Hide prototype and
	definition.

	* toplev.c: When testing whether to include dbxout.h, also include
	it when XCOFF_DEBUGGING_INFO is defined.

	* unroll.c (unroll_loop): Add parentheses around assignment used
	as truth value.

Mon Jun 29 12:18:00 1998  Catherine Moore  <clm@cygnus.com>

	* config/lb1spc.asm (.div, .udiv): Replace routines.

Mon Jun 29 09:44:24 1998  Mark Mitchell  <mark@markmitchell.com>

	* rtl.h: Update comment about special gen_rtx variants.
	* emit-rtl.c (gen_rtx): Handle MEMs using gen_rtx_MEM.

Sun Jun 28 20:58:51 1998  Jeffrey A Law  (law@cygnus.com)

	* choose-temp.c (choose_temp_base): Restore original variant of
	this function for compatibility.
	(make_temp_file): This is the new, preferred interface to create
	temporary files.
	* collect2.c (choose_temp_base): Delete declaration.
	(make_temp_file): Declare.
	(temp_filename_length, temp_filename): Delete.
	(main): Use make_temp_file to get temporary files.  Use --lang-c
	to force the resulting ctort/dtor file to be compiled with the C
	compiler.  Make sure to remove temporary files on all exit paths.
	* gcc.c (make_temp_file): Provide prototype if MKTEMP_EACH_FILE is
	defined.
	(choose_temp_base): Only provide prototype if MKTEMP_EACH_FILE is
	not defined.
	(do_spec): Use make_temp_file if MKTEMP_EACH_FILE is defined.

Sun Jun 28 08:57:09 1998  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* configure.in (GCC_NEED_DECLARATIONS): Add strerror, getcwd and
	getwd.

	* acconfig.m4: Add stubs for NEED_DECLARATION_STRERROR,
	NEED_DECLARATION_GETCWD and NEED_DECLARATION_GETWD.

	* cccp.c: Remove strerror()/sys_nerr/sys_errlist decls.
	(my_strerror): Add prototype and make it static.

	* collect2.c: Likewise.

	* cpplib.c: Likewise.

	* gcc.c: Likewise, but keep `my_strerror' extern.

	* protoize.c: Likewise.

	* pexecute.c (my_strerror): Add argument to prototype.

	* system.h: Add prototypes for getcwd, getwd and strerror.  Add
	extern decls for sys_nerr and sys_errlist.  Make abort decl
	explicitly extern.

	* getpwd.c: Remove decls for getwd and getcwd.

Sun Jun 28 02:11:16 1998  Jeff Law  (law@cygnus.com)

	* version.c: Bump for snapshot.

Sat Jun 27 23:32:25 1998  Richard Henderson  <rth@cygnus.com>

	* jump.c (jump_optimize): Use side_effects_p & may_trap_p instead
	of rtx_unsafe_p.  Use modified_between_p instead of reg_set_between_p.
	Allow FP moves to be optimized.
	(rtx_unsafe_p): Delete.

Sat Jun 27 23:02:04 1998  Richard Henderson  <rth@cygnus.com>

	* objc/archive.c: Remove <string.h> prototypes.

Sat Jun 27 22:37:05 1998  Jeffrey A Law  (law@cygnus.com)

	* tm.texi (NEED_MATH_LIBRARY): Document new target macro.

	* Makefile.in (gencheck): Remove $(TREE_H) dependency.

Sat Jun 27 20:20:00 1998  John Carr  <jfc@mit.edu>

	* dsp16xx.h (FIRST_PSEUDO_REGISTER): Add parentheses to definition.
	* dsp16xx.c (next_cc_user_unsigned): New function.
	Remove save_next_cc_user_code.
	(print_operand): Use HOST_WIDE_INT_PRINT_* macros.
	* dsp16xx.md: Call next_cc_user_unsigned instead of using
	save_next_cc_user_code.
	Use gen_rtx_* functions instead of gen_rtx.

Sat Jun 27 20:18:34 1998  Franz Sirl  <Franz.Sirl-kernel@lauterbach.com>

	* rs6000.h: Add trap_comparison_operator to PREDICATE_CODES.

Sat Jun 27 16:45:42 1998  Jeffrey A Law  (law@cygnus.com)

	* flow.c (count_reg_sets): New function.
	(count_reg_sets_1, count_ref_references): Likewise.
	(recompute_reg_usage): Likewise.
	* rtl.h (recompute_reg_usage): Add prototype.
	* toplev.c (rest_of_compilation): Call recompute_reg_usage just
	before local register allocation.

Sat Jun 27 13:15:30 1998  Richard Henderson  <rth@cygnus.com>

	* alpha.md (negsf, negdf): Revert Jan 22 change.

Sat Jun 27 07:35:21 1998  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* mkstemp.c: Include gansidecl.h.  Rename uint64_t to gcc_uint64_t.
	(mkstemp): Remove size specifier for variable `letters'.  Call
	gettimeofday, not __gettimeofday.

	* Makefile.in (EXPR_H): New dependency variable.
	(c-typeck.o): Depend on $(EXPR_H) instead of expr.h.
	(c-iterate.o): Likewise.
	(gencheck): Depend on $(TREE_H) instead of tree.h, etc.
	(stor-layout.o): Depend on $(EXPR_H) instead of expr.h.
	(toplev.o): Likewise.  Also depend on $(RECOG_H) instead of recog.h.
	(varasm.o): Depend on $(EXPR_H) instead of expr.h.
	(function.o): Likewise.
	(stmt.o): Likewise.
	(except.o): Likewise.
	(expr.o): Likewise.
	(calls.o): Likewise.
	(expmed.o): Likewise.
	(explow.o): Likewise.
	(optabs.o): Likewise.
	(sdbout.o): Likewise.
	(dwarf2out.o): Likewise.
	(emit-rtl.o): Likewise.
	(integrate.o): Likewise.
	(jump.o): Likewise.
	(cse.o): Likewise.
	(gcse.o): Likewise.  Also depend on $(BASIC_BLOCK_H) instead of
	basic-block.h.
	(loop.o): Depend on $(EXPR_H) instead of expr.h.
	(unroll.o): Likewise.
	(combine.o): Likewise.
	(reload.o): Likewise.
	(reload1.o): Likewise.
	(caller-save.o): Likewise.
	(reorg.o): Likewise.
	(alias.o): Don't depend on insn-codes.h.
	(regmove.o): Depend on $(RECOG_H)/$(EXPR_H) instead of recog.h/expr.h.
	(insn-emit.o): Depend on $(EXPR_H) instead of expr.h.
	(insn-opinit.o): Likewise.

Sat Jun 27 01:35:14 1998  Jeffrey A Law  (law@cygnus.com)

	* choose-temp.c (choose_temp_base): Remove MPW bits.  Use mkstemp
	instead of mktemp.
	* gcc.c (MKTEMP_EACH_FILE): Define.
	(main): No need to call choose_temp_base if we are going to
	use choose_temp_base to create each file later.
	* mkstemp.c: New file.  Adapted from glibc.
	* Makefile.in (xgcc, colect2, protoize, unprotoize): Link in mkstemp.o.
	(mkstemp.o): Add dependencies.

	* configure.in (gettimeofday): Check for its existence.
	* config.in (HAVE_GETTIMEOFDAY): Define.
	* configure: Rebuilt.

1998-06-26  Michael Meissner  <meissner@cygnus.com>

	* rs6000.md (ne 0, non power case): Add missing & constraint.
	Name pattern ne0.
	(negative abs insns): Add pattern names.

Fri Jun 26 17:36:42 1998  Dave Love  <d.love@dl.ac.uk>

	* Makefile.in (install-info): Run install-info program in separate
	loop.

Fri Jun 26 16:03:15 1998  Michael Meissner  <meissner@cygnus.com>

	* haifa-sched.c (schedule_block): Add hooks for the machine
	description to reorder the ready list, and update how many more
	instructions can be issued this cycle.
	* tm.texi (MD_SCHED_{INIT,REORDER,VARIABLE_ISSUE}): Document.
	
Fri Jun 26 11:54:11 1998  David S. Miller  <davem@pierdol.cobaltmicro.com>

	* config/sparc/sparc.h (REGNO_OK_FOR_{INDEX,BASE,FP,CCFP}_P):
	Explicitly mark the constant being compared against as unsigned.
	* config/sparc/sparc.c (sparc_select, cpu_default, cpu_table):
	Fully initialize final members.
	(mem_aligned_8): Explicit init of offset to zero.
	(output_function_prologue): Explicit init of n_regs to zero.
	(output_function_epilogue): Likewise, and mark arg size as
	unused.
	(init_cumulative_args): Mark libname and indirect as unused.
	(function_arg_pass_by_reference): Likewise for cum and named.
	(sparc_builtin_saveregs): Likewise for arglist.
	(sparc_flat_eligible_for_epilogue_delay): Likewise for slot.

Fri Jun 26 06:58:54 1998  Richard Earnshaw  (rearnsha@arm.com)

	* arm.h (SECONDARY_INPUT_RELOAD_CLASS): Only need a secondary reload
	if reloading a MEM.

	* arm.h (arm_adjust_cost): Renamed bogus prototype from
	arm_adjust_code.
	(bad_signed_byte_operand): Add prototype.
	* arm.c (arm_override_options): Make I unsigned.
	(const_ok_for_arm): Add casts to the constants.	
	(load_multiple_operation): Don't redeclare elt in sub-block.
	(arm_gen_movstrqi): Delete external declaration of optimize.
	(gen_compare_reg): Declare parameter fp.

	* arm.c (final_prescan_insn): Only initialize scanbody if the insn
	has a pattern.

Fri Jun 26 09:31:24 1998  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* alpha.c: Include system.h and toplev.h.
	(cint8_operand): Mark parameter `mode' with ATTRIBUTE_UNUSED.
	(const48_operand): Likewise.
	(mode_width_operand): Likewise.
	(mode_mask_operand): Likewise.
	(mul8_operand): Likewise.
	(current_file_function_operand): Likewise.
	(signed_comparison_operator): Likewise.
	(divmod_operator): Likewise.
	(any_memory_operand): Likewise.
	(alpha_return_addr): Likewise for parameter `frame'.
	(alpha_builtin_saveregs): Likewise for parameter `arglist'.
	(vms_valid_decl_attribute_p): Likewise for parameters `decl' and
	`attributes'.
	(alpha_start_function): Likewise for parameter `decl'.  Use
	HOST_WIDE_INT_PRINT_DEC in call to fprintf.  Fix various format
	specifiers.  Remove unused variables `lab' and `name'.
	(alpha_end_function): Mark parameter `decl' with ATTRIBUTE_UNUSED.
	(check_float_value): Likewise for parameter `overflow'.
	(alpha_need_linkage): Likewise for parameters `name' and `is_local'.
	
	* alpha.h (ASM_IDENTIFY_GCC, ASM_IDENTIFY_LANGUAGE): Define as
	taking an argument.
	(ASM_OUTPUT_SHORT): Cast argument to `int' in call to fprintf.
	(ASM_OUTPUT_CHAR): Likewise.
	(ASM_OUTPUT_BYTE): Likewise.
	(PRINT_OPERAND_ADDRESS): Use HOST_WIDE_INT_PRINT_DEC in call to
	fprintf.
	(PUT_SDB_EPILOGUE_END): Mention argument `NAME' in definition.
	Add prototypes for functions in alpha.c.

	* alpha.md (ashldi3): Add default case in switch.

1998-06-26  Manfred Hollstein  <manfred@s-direktnet.de>

	* Makefile.in (gcc_version, gcc_version_trigger): New macros.
	(version): Initialize from $(gcc_version).

	* configure.in (version): Rename to gcc_version.
	(gcc_version_trigger): New variable; call AC_SUBST for it and
	emit it into the generated config.status.
	* configure: Regenerate.

Thu Jun 25 12:47:41 1998  Mark Mitchell  <mark@markmitchell.com>

	* fold-const.c (make_range): Don't go looking at TREE_OPERANDs of
	nodes that are not expressions.

Thu Jun 25 15:08:16 1998  Mark Mitchell  <mark@markmitchell.com>

	* invoke.texi (-fstrict-aliasing): Document.
	* rtl.texi (MEM_ALIAS_SET): Document.

	* flags.h (flag_strict_aliasing): Declare.
	* toplev.c (flag_strict_aliasing): Define.
	(f_options): Add -strict-aliasing.
	(main): Set flag_strict_aliasing if -O2 or higher.

	* tree.h (tree_type): Add alias_set field.
	(TYPE_ALIAS_SET): New macro.
	(TYPE_ALIAS_SET_KNOWN_P): Likewise.
	(get_alias_set): Declare.
	* tree.c (lang_get_alias_set): Define.
	(make_node): Initialize TYPE_ALIAS_SET.
	(get_alias_set): New function.
	* print-tree.c (print_node): Dump the alias set for a type.

	* c-tree.h (c_get_alias_set): Declare.
	* c-common.c (c_get_alias_set): New function.
	* c-decl.c (init_decl_processing): Set lang_get_alias_set.

	* expr.c (protect_from_queue): Propagate alias sets.
	(expand_assignment): Calculate alias set for new MEMs.
	(expand_expr): Likewise.
	* function.c (put_var_into_stack): Likewise.
	(put_reg_into_stack): Likewise.
	(gen_mem_addressof): Likewise.
	(assign_parms): Likewise.
	* stmt.c (expand_decl): Likewise.
	* varasm.c (make_decl_rtl): Eliminate redundant clearing of
	DECL_RTL.  Calculate alias set for new MEMs.

	* rtl.def (REG): Add dummy operand.
	(MEM): Add extra operand to store the MEM_ALIAS_SET.
	* rtl.h (MEM_ALIAS_SET): New macro.
	(gen_rtx_MEM): Declare.
	* emit-rtl.c (gen_rtx_MEM): New function.
	* gengenrtl.c (sepcial_rtx): Make MEMs special.

	* alias.c (CHECK_ALIAS_SETS_FOR_CONSISTENCY): New macro.
	(DIFFERENT_ALIAS_SETS_P): Likewise.
	(canon_rtx): Propagate the alias set to the new MEM.
	(true_dependence): Check the alias sets.
	(anti_dependence): Likewise.
	(output_dependence): Likewise.
	* explow.c (stabilize): Progoate alias sets.
	* integrate.c (copy_rtx_and_substitute): Likewise.
	* final.c (alter_subreg): Make sure not to leave MEM_IN_STRUCT_P
	in an unpredictable state.  Propagate alias sets.
	* reload1.c (reload): Clear MEM_ALIAS_SET for new MEMs about which
	we have no alias information.
	
Thu Jun 25 16:59:18 1998  Andrew MacLeod  <amacleod@cygnus.com>

	* except.h (CATCH_ALL_TYPE): Definition moved to eh-common.h.
	(find_all_handler_type_matches): Add function prototype.
	* eh-common.h (CATCH_ALL_TYPE): Definition added.
	* except.c (find_all_handler_type_matches): Add function to find all
	runtime type info in the exception table.
	(output_exception_table_entry): Special case for CATCH_ALL_TYPE.

Thu Jun 25 15:47:55 1998  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* Makefile.in (xcoffout.o): Depend on toplev.h, output.h and dbxout.h.

	* config/fp-bit.c (_fpmul_parts): Move variables `x', `ylow',
	`yhigh' and `bit' into the scope in which they are used.
	(_fpdiv_parts): Remove unused variables `low', `high', `r0', `r1',
	`y0', `y1', `q', `remainder', `carry', `d0' and `d1'.

	* rs6000.c: Move include of output.h below tree.h.  Include toplev.h.
	(any_operand): Mark unused parameters `op' and `mode' with
	ATTRIBUTE_UNUSED.
	(count_register_operand): Likewise for parameter `mode'.
	(fpmem_operand): Likewise.
	(short_cint_operand): Likewise.
	(u_short_cint_operand): Likewise.
	(non_short_cint_operand): Likewise.
	(got_operand): Likewise.
	(got_no_const_operand): Likewise.
	(non_add_cint_operand): Likewise.
	(non_logical_cint_operand): Likewise.
	(mask_operand): Likewise.
	(current_file_function_operand): Likewise.
	(small_data_operand): Likewise for parameters `op' and `mode' but
	only when !TARGET_ELF.
	(init_cumulative_args): Mark parameters `libname' with
	ATTRIBUTE_UNUSED.
	(function_arg_pass_by_reference): Likewise for parameters `cum',
	`mode' and `named'.
	(expand_builtin_saveregs): Likewise for parameter `args'.
	(load_multiple_operation): Likewise for parameter `mode'.
	(store_multiple_operation): Likewise.
	(branch_comparison_operator): Likewise.
	(secondary_reload_class): Likewise.
	(print_operand): Add parentheses around & operation.
	(output_prolog): Mark parameter `size' with ATTRIBUTE_UNUSED.
	(output_epilog): Likewise.  Cast argument to fprintf to int.
	(rs6000_adjust_cost): Mark parameter `dep_insn' with ATTRIBUTE_UNUSED.
	(rs6000_valid_decl_attribute_p): Likewise for parameters `decl',
	`attributes', `identifier' and `args'.
	(rs6000_valid_type_attribute_p): Likewise for parameter `attributes'.
	(rs6000_comp_type_attributes): Likewise for parameters `type1' and
	`type2'.
	(rs6000_set_default_type_attributes): Likewise for parameter `type'.

	* rs6000.h (RTX_COSTS): Add parentheses around & operation.
	(toc_section, private_data_section, trap_comparison_operator): Add
	prototypes.

	* dbxout.h (dbxout_parms, dbxout_reg_parms, dbxout_syms): Add
	prototypes.

	* xcoffout.c: Include toplev.h, outout.h and dbxout.h.

	* xcoffout.h (stab_to_sclass, xcoffout_begin_function,
	xcoffout_begin_block, xcoffout_end_epilogue,
	xcoffout_end_function, xcoffout_end_block,
	xcoff_output_standard_types, xcoffout_declare_function,
	xcoffout_source_line): Add prototypes.

Thu Jun 25 09:54:55 1998  Nick Clifton  <nickc@cygnus.com>

	* config/arm/arm.h (REG_ALLOC_ORDER): Add ARG_POINTER_REGNUM,
	noticed by grahams@rcp.co.uk.

Thu Jun 25 11:12:29 1998  Dave Brolley  <brolley@cygnus.com>

	* gcc.c (default_compilers): Use new | syntax to eliminate
	string concatenation.

Thu Jun 25 01:00:48 1998  Richard Henderson  <rth@cygnus.com>

	* alpha.c (alpha_function_name): Delete.
	(alpha_ra_ever_killed): Notice current_function_is_thunk.
	(alpha_sa_mask, alpha_sa_size, alpha_does_function_need_gp): Likewise.
	(alpha_start_function): Reorg from output_prologue.
	(alpha_end_function): Reorg from output_epilogue.
	* alpha.h (ASM_DECLARE_FUNCTION_NAME): Call alpha_start_function.
	(ASM_DECLARE_FUNCTION_SIZE): New.
	(FUNCTION_PROLOGUE, FUNCTION_EPILOGUE): Delete.
	(PROFILE_BEFORE_PROLOGUE): Set.
	(ASM_OUTPUT_MI_THUNK): Remove bits now output by start/end_function.
	* alpha/win-nt.h (ASM_OUTPUT_MI_THUNK): Likewise.

Thu Jun 25 01:18:47 1998  John Wehle  (john@feith.com)

	* i386/freebsd-elf.h (ASM_OUTPUT_MAX_SKIP_ALIGN): Define.

1998-06-25  Herman A.J. ten Brugge  <Haj.Ten.Brugge@net.HCC.nl>

	* expr.c (expand_assignment): Rework address calculation for structure
	field members to expose more invariant computations to the loop
	optimizer.
	(expand_expr): Likewise.

Wed Jun 24 22:44:22 1998  Jeffrey A Law  (law@cygnus.com)

	* local-alloc.c (block_alloc): Do not try to avoid false dependencies
	when SMALL_REGISTER_CLASSES is nonzero.

Wed Jun 24 17:55:15 1998  Klaus Kaempf  <kkaempf@progis.de>

	* alpha.md (call_vms, call_value_vms): Strip leading * from symbol.

Wed Jun 24 16:27:23 1998  John Carr  <jfc@mit.edu>

	* expr.c (get_memory_rtx): New function.
	(expand_builtin): Call get_memory_rtx for MEM arguments to builtin
	string functions.

	* expmed.c (init_expmed): Initialize all elements of *_cost arrays.

	* optabs.c: Use gen_rtx_FOO (...) instead of gen_rtx (FOO, ...).
	* expr.c: Likewise.
	* explow.c: Likewise.
	* combine.c: Likewise.
	* reload1.c: Likewise.
	* gcse.c: Likewise.

Wed Jun 24 15:13:01 1998  Dave Brolley  <brolley@cygnus.com>

	* README.gnat: Add patch for new lang_decode_options interface.

Wed Jun 24 09:14:04 1998  Andrew MacLeod  <amacleod@cygnus.com>

	* except.c (start_catch_handler): Do nothing if EH is not on.

1998-06-24  Manfred Hollstein  <manfred@s-direktnet.de>

	* configure.in (gxx_include_dir): Initialize default value depending on
	new flag --enable-version-specific-runtime-libs; remove superfluous
	default initialization afterwards.
	* configure: Regenerate.

Wed Jun 24 01:32:12 1998  David S. Miller  <davem@pierdol.cobaltmicro.com>

	* toplev.c (rest_of_compilation): Revert May 15 change.

Tue Jun 23 21:27:27 1998  Ken Raeburn  <raeburn@cygnus.com>

	* reload.c (find_reloads): Fix check for failure to match any
	alternative, to account for Mar 26 change in initial "best" cost.

Tue Jun 23 16:44:21 1998  Dave Brolley  <brolley@cygnus.com>

	* cpplib.c (do_line): Typo broke #line directive.
	(cpp_message_from_errno): New function.
	(cpp_error_from_errno): Call cpp_message_from_errno.
	* cpplib.h (cpp_message_from_errno): New function.

Tue Jun 23 13:38:18 1998  Andrew MacLeod  <amacleod@cygnus.com>

	* libgcc2.c (__get_eh_table_version, __get_eh_table_language): New
	functions to return exception descriptor information.
	(find_exception_handler): Pass match_info field to runtime matcher,
	not a descriptor table entry.

Tue Jun 23 09:30:58 1998  Dave Love  <d.love@dl.ac.uk>

	* cpp.texi, gcc.texi: Add @dircategory, @direntry meant to
	accompany previous Makefile.in (install-info) change.

Tue Jun 23 10:06:07 1998  Andrew MacLeod  <amacleod@cygnus.com>

	* eh-common.h (struct __eh_info): Remove coerced value field.
	* libgcc2.c (find_exception_handler): Don't set coerced_value field.
	* except.c (get_dynamic_handler_chain, get_dynamic_cleanup_chain): Use
	POINTER_SIZE instead of Pmode.
	(expand_start_all_catch): Call start_catch_handler() if we are not
	using new style exceptions.

Tue Jun 23 06:45:00 1998  Catherine Moore  <clm@cygnus.com>

	* varasm.c (assemble_variable): Remove reference to warn_bss_align.

Mon Jun 22 23:57:31 1998  David S. Miller  <davem@pierdol.cobaltmicro.com>

	* config/sparc/sparc.md (zero_extendhidi2, extendhisi2,
	extendqihi2, extendqisi2, extendqidi2, extendhidi2, adddi3,
	subdi3, negdi2, call, call_value, untyped_return, nonlocal_goto,
	splits and peepholes): Change remaining generic gen_rtx calls to
	specific genrtl ones.
	* config/sparc/sparc.c: Likewise.
	
Mon Jun 22 22:21:46 1998  Richard Henderson  <rth@cygnus.com>

	* gcc.c (handle_braces): Recognize | between options as an or.

Mon Jun 22 23:13:47 1998  John Wehle  (john@feith.com)

	* i386/freebsd-elf.h (JUMP_TABLES_IN_TEXT_SECTION): Define as flag_pic.
	* i386/sysv4.h (JUMP_TABLES_IN_TEXT_SECTION): Define as flag_pic.

	* i386.md (exception_receiver): Define.

Mon Jun 22 12:01:48 1998  Jim Wilson  <wilson@cygnus.com>

	* Makefile.in (PROTOIZE_INSTALL_NAME, UNPROTOIZE_INSTALL_NAME,
	PROTOIZE_CROSS_NAME, UNPROTOIZE_CROSS_NAME): New variables.
	(install-common): Use them.

	* gcse.c (add_label_notes): New function.
	(pre_insert_insn): Call it.
	* unroll.c (unroll_loop): Look for insns with a REG_LABEL note, and
	pass the label to set_label_in_map.

Mon Jun 22 19:01:14 1998  Dave Love  <d.love@dl.ac.uk>

	* Makefile.in (install-info): Fix typpo in previous change.

Mon Jun 22 11:10:00 1998  Catherine Moore  <clm@cygnus.com>

	* varasm.c (assemble_variable): Emit alignment warning.

Mon Jun 22 08:18:46 1998  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

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

	* collect2.c (scan_prog_file): Cast fprintf argument to `long' and
	use %ld specifier.

	* final.c (shorten_branches): Cast first arg of `bzero' to char *.

	* genextract.c (main): When creating insn-extract.c, mark variable
	`i' with ATTRIBUTE_UNUSED.

	* genpeep.c (main): When creating insn-peep.c, mark variables
	`insn', `x' and `pat' with ATTRIBUTE_UNUSED.

	* objc/init.c (__objc_tree_print): Wrap function definition in
	macro `DEBUG'.

	* objc/objc-act.c (encode_array): Cast sprintf argument to `long'
	and use %ld specifier.
	(adorn_decl): Likewise, twice.

	* reload1.c (reload_cse_regs): Cast first arg of `bzero' to char *.

	* sdbout.c: Include output.h and toplev.h.
	(PUT_SDB_INT_VAL): Use HOST_WIDE_INT_PRINT_DEV to print argument
	`a'.  Cast `a' to HOST_WIDE_INT to force it to always be so.
	(PUT_SDB_SIZE): Likewise.

	* sdbout.h (sdbout_mark_begin_function): Add prototype.

	* stmt.c (check_for_full_enumeration_handling): Cast argument of
	`warning' to long and use %ld specifier.

	* toplev.c (main): Likewise for `fprintf'.

	* toplev.h (output_file_directive): Add prototype.

	* unroll.c (unroll_loop): Use HOST_WIDE_INT_PRINT_DEC specifier in
	call to `fprintf'.
	(precondition_loop_p): Likewise.

	* varasm.c Include sdbout.h.
	(assemble_static_space): Move sometimes-unused variable `rounded'
	into the scope in which it is used.
	
	* mips.c (gpr_mode): Don't say `static' twice.

	* cpplib.c (cpp_handle_option): Don't pass unneeded NULL to cpp_fatal.

	* objc/objc-act.c (init_selector): Hide prototype and definition.

	* optabs.c (gen_cond_trap): Remove unused variable `icode'.
	
	* regmove.c (copy_src_to_dest): Likewise for `i'.

	* mips-tfile.c (add_local_symbol): Cast width format specifier to int.
	(add_ext_symbol): Likewise.
	(add_file): Likewise.
	(parse_def): Likewise.
	(write_varray): Use HOST_PTR_PRINTF to print a pointer.  Fix
	remaining format specifiers and arguments.
	(write_object): Likewise, several times.
	(read_seek): Likewise.
	(out_of_bounds): Likewise.
	(allocate_cluster): Likewise.
	(xmalloc): Likewise.
	(xcalloc): Likewise.
	(xrealloc): Likewise.
	(xfree): Likewise.

	* mips-tdump.c (print_symbol): Likewise.
	
Sun Jun 21 17:05:34 1998  Dave Love  <d.love@dl.ac.uk>

	* Makefile.in (install-info): Use install-info program if
	available, per GNU standard.

Sun Jun 21 18:56:44 1998  Jeffrey A Law  (law@cygnus.com)

	* invoke.texi: Document -mrelax for the mn10300 and mn10200.

	* basic-block.h (init_regset_vector): Delete declaration.
	* flow.c (init_regset_vector): Make it static and add a prototype.

	* bitmap.h (debug_bitmap): Declare.

	* haifa-sched.c (debug_ready_list): Make static.

	* toplev.h (fancy_abort): Declare.

Sun Jun 21 18:30:13 1998  H.J. Lu  (hjl@gnu.org)

	* basic-block.h (init_regset_vector): New declaration.

	* Makefile.in (sdbout.o): Add insn-codes.h to dependency.

	* global.c: Include machmode.h amd move hard-reg-set.h before
	rtl.h.

	* haifa-sched.c (insn_issue_delay, birthing_insn_p,
	adjust_priority, print_insn_chaino): New declaration.
	(schedule_insns): Remove declaration.
	(init_target_units, get_visual_tbl_length,
	init_block_visualization): Add prototype.

	* integrate.c (pushdecl, poplevel): Remove declaration.

	* rtl.h (expand_expr): Remove declaration.

	* loop.c (oballoc): Remove declaration.
	(replace_call_address): Add prototype.

Sun Jun 21 01:08:17 1998  Jeff Law  (law@cygnus.com)

	* version.c: Bump for snapshot.

Sun Jun 21 01:16:38 1998  John Wehle  (john@feith.com)

	* i386.c (output_fp_conditional_move): Don't bother handling
	(cc_prev_status.flags && CC_NO_OVERFLOW) since the INSN patterns
	prevent this from happening.

	* i386.md (nonlocal_goto_receiver): Delete.

Sun Jun 21 00:42:20 1998  H.J. Lu  (hjl@gnu.org)

	* Makefile.in (crtbeginS.o, crtendS.o): Add -fno-exceptions and
	-DCRTSTUFFS_O.
	(INSTALL): cd $(srcdir) before make.

	* flow.c (allocate_for_life_analysis, init_regset_vector):
	Remove declaration.

	* function.h (get_first_block_beg): New declaration.

	* gbl-ctors.h (__do_global_dtors): Add prototype.

	* gcov-io.h (__fetch_long): New declaration.
	(__store_long): Likewise.
	(__read_long): Likewise.
	(__write_long): Likewise.

	* gcov.c (print_usage): New declaration.

	* Makefile.in (c-iterate.o): Depend on insn-codes.h too.

Sat Jun 20 00:36:16 1998  Jeffrey A Law  (law@cygnus.com)

	* calls.c (expand_call): Initialize "src" and "dest".
	* stmt.c (expand_return): Likewise.
	* expmed.c (extract_split_bit_field): Similarly for "result"
	* gcse.c (compute_hash_table): Mark first arg as unused.
	* jump.c (jump_optimize): Initialize reversep.
	* tree.c (make_node): Initialize length.

	* c-common.c (check_format_info): Initialize length_char and
	fci to keep -Wall quiet.

	* except.c (jumpif_rtx): Put declaration and definition
	inside a suitable #ifdef.
	(jumpifnot_rtx): Delete dead function.

	* i386.h (output_int_conditional_move): Declare.
	(output_fp_conditional_move): Likewise.
	(ix86_can_use_return_insn_p): Likewise.

	* optabs.c (init_traps): Put prototype inside a suitable #ifdef.

Sat Jun 20 00:27:40 1998  Graham  <grahams@rcp.co.uk>

	* alias.c: Include toplev.h.
	* caller-save.c: Include toplev.h.
	* combine.c: Include toplev.h.
	* flow.c Include toplev.h.
	* global.c: Include toplev.h.
	* jump.c: Include toplev.h.
	* local-alloc.c: Include toplev.h.
	* loop.c: Include toplev.h.
	* regmove.c: Include toplev.h.
	* stupid.c: Include toplev.h.
	* unroll.c: Include toplev.h.
	* Makefile.in: Add toplev.h dependencies.

Fri Jun 19 22:40:25 1998  Jason Merrill  <jason@yorick.cygnus.com>

	* regmove.c (copy_src_to_dest): Add decl for loop_depth.

	* svr4.h (ASM_GENERATE_INTERNAL_LABEL): Cast arg to unsigned.
	* dwarf2out.c (ASM_OUTPUT_DWARF_DATA1): Likewise.
	Add parens to various macros.

Fri Jun 19 23:22:42 1998  Bruno Haible  <bruno@linuix.mathematik.uni-karlsruhe.de>

	* c-typeck.c (pop_init_level): Warn about implicit zero initialization
	of struct members.

Fri Jun 19 23:06:33 1998  Jason Merrill  <jason@yorick.cygnus.com>

	* varasm.c (assemble_start_function): Add weak_global_object_name.
	* tree.c (get_file_function_name): Use it.

Fri Jun 19 22:55:14 1998  Jeffrey A Law  (law@cygnus.com)

	* except.c (jumpif_rtx): Make static and add prototype.
	(jumpifnot_rtx): Likewise.

	* README.gnat: Add a build patch from Fred Fish.

	* c-lang.c (GNU_xref_begin, GNU_xref_end): Deleted.

	* Makefile.in (c-iterate.o): Depend on expr.h.

Fri Jun 19 20:38:34 1998  H.J. Lu  (hjl@gnu.org)

	* except.h (emit_unwinder, end_eh_unwinder): Removed.

	* dwarfout.c (getpwd): Add prototype.
	(is_pseudo_reg, type_main_variant, is_tagged_type,
	is_redundant_typedef): New declaration.
	(output_decl): Add prototype for FUNC.
	(type_main_variant): Make it static.
	(is_tagged_type): Likewise.
	(is_redundant_typedef): Likewise.

	* expr.c (do_jump_by_parts_greater_rtx): Removed.
	(truthvalue_conversion): Likewise.

	* c-iterate.c: Include "expr.h".
	(expand_expr): Use proper values when calling the function.

	* explow.c (emit_stack_save): Add prototype for FCN.
	(emit_stack_restore): Likewise.

	* dwarf2out.c (getpwd): Add prototype.

	* dwarf2out.h (debug_dwarf, debug_dwarf_die): New declarations.

	* c-typeck.c (c_expand_asm_operands): Use proper values when calling
	expand_expr.

	* c-lex.c (yyprint): Add prototype.
	(check_newline, build_objc_string): Remove declaration.

	* c-tree.h (comptypes_record_hook): Removed.
	(finish_incomplete_decl): New prototype.

	* alias.c (find_base_value): Add prototype.
	(true_dependence): Add prototype for function argument.

	* c-aux-info.c (xmalloc): Remove declaration.

Fri Jun 19 20:23:05 1998  Robert Lipe  <robertl@dgii.com>

	* i386.c: Include system.h.  Remove redundant includes.
	(optimization_options): Mark param 'size' with ATTRIBUTE_UNUSED.
	(i386_cc_probably_useless_p): Likewise for 'decl', 'attributes',
	'identifier', 'args'.
	(i386_valid_type_attribute_p): Likewise for 'attributes'.
	(i386_comp_type_attribute_p): Likewise for 'type1', 'type2'.
	(function_arg_partial_nregs): Likewise for 'cum', 'mode', 'type',
	and 'named'.
	(symbolic_operand): Likewise for 'mode'.
	(call_insn_operand): Likewise.
	(expander_call_insn_operand): Likewise.
	(ix86_logical_operator): Likewise.
	(ix86_binary_operator_ok): Likewise.
	(emit_pic_move): Likewise.
	(VOIDmode_compare_op): Likewise.
	(is_mul): Likewise.
	(str_immediate_operand): Likewise.
	(ix86_uary_operator_ok): Likewise for 'code', 'mode', and 'operands'.yy
	(asm_output_function_prefix): Likewise for 'name'.
	(function_prologue): Likewise for 'file', and 'size'.
	(function_epilogue): Likewise.

1998-06-19  Jim Wilson  <wilson@cygnus.com>

	* loop.h (struct induction): Clarify comment for unrolled field.
	* unroll.c (find_splittable_givs): Move set of unrolled field
	after address validity check.

Fri Jun 19 18:38:04 1998  Michael Meissner  <meissner@cygnus.com>

	* config/fp-bit.c (INLINE): Only define if not already defined.

1998-06-19  Manfred Hollstein  <manfred@s-direktnet.de>

	* Makefile.in (installdirs): Loop over directories in $(libsubdir)
	creating probably missing ones, instead of single if statements.

Fri Jun 19 10:43:52 1998  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* c-common.c (truthvalue_conversion): Protect side effects in the
	expression when splitting a complex value.
	* fold-const.c (fold): Likewise.

Fri Jun 19 02:31:16 1998  Klaus Kaempf  (kkaempf@progis.de)

	* cccp.c (hack_vms_include_specification): Rewrite to handle
	'#include <dir/file.h>' correctly.

Fri Jun 19 02:24:11 1998  H.J. Lu  (hjl@gnu.org)

	* config/i386/linux.h (ASM_OUTPUT_MAX_SKIP_ALIGN): Defined.

Fri Jun 19 02:10:10 1998  John Wehle  (john@feith.com)

	* i386.c (notice_update_cc): Integer conditional moves don't
	affect cc0.

	* i386.md (movsfcc, movdfcc, movxfcc): Use emit_store_flag
	to support LT, LE, GE, and GT signed integer comparisons.
	(movsfcc+1, movsfcc+2, movdfcc+1, movdfcc+2,
	movxfcc+1, movxfcc+2): Pattern doesn't match if the comparison
	is LT, LE, GE, or GT.
	(movdicc): Remove code resulting from an earlier patch which
	didn't apply correctly.

Fri Jun 19 02:00:19 1998  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>

	* reload1.c (reload_cse_regno_equal_p): If -ffloat-store, don't
	consider a MEM in FP mode as equal.

Fri Jun 19 01:02:17 1998  Jeffrey A Law  (law@cygnus.com)

	* c-decl.c (duplicate_decls): Avoid setting TREE_ASM_WRITTEN for
	duplicate declarations of a function.

Fri Jun 19 00:33:33 1998  H.J. Lu  (hjl@gnu.org)

	* config/float-i386.h: New.

	* configure.in (i[34567]86-*-linux-*): Set float_format to i386.

Thu Jun 18 20:11:00 1998  Jim Wilson  <wilson@cygnus.com>

	* sched.c (schedule_insns): Use xmalloc not alloca for max_uid
	indexed arrays.  Call free at the end of the function for them.
	* haifa-sched.c (schedule_insns): Likewise.

Thu Jun 18 18:16:01 1998  Jim Wilson  <wilson@cygnus.com>

	* dwarf2out.c (size_of_string): Do count backslashes.

Thu Jun 18 11:43:54 1998  Nick Clifton  <nickc@cygnus.com>

	* config/arm/thumb.h (GO_IF_LEGITIMATE_ADDRESS): Disallow REG+REG
	addressing when one register is the frame pointer or stack
	pointer.  Disallow REG+CONST addressing in HI mode.

Thu Jun 18 17:30:39 1998  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* reload.c (find_reloads): Don't narrow scope of RELOAD_OTHER to
	RELOAD_FOR_INSN.

Thu Jun 18 09:36:50 1998  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* Makefile.in (c-lang.o): Depend on output.h.

	* c-lang.c: Include output.h.

	* sparc.c (sparc_builtin_saveregs): Remove unused variable `fntype'.

	* except.c (expand_builtin_eh_stub): Likewise for variable `jump_to'.

	* genrecog.c (write_subroutine): When writing insn-recog.c, mark
	variables `insn', `pnum_clobbers', `x[0 .. max_depth]' and `tem'
	with ATTRIBUTE_UNUSED.

	* regmove.c (copy_src_to_dest): Make function static to match its
	prototype.

	* reload1.c Include hard-reg-set.h before rtl.h to get macro
	HARD_CONST.  Include machmode.h before hard-reg-set.h.

	* rtl.h: Prototype `retry_global_alloc' and wrap with macro
	HARD_CONST to protect usage of typedef HARD_REG_SET.

	* tree.c: Prototype `_obstack_allocated_p'.

	* varasm.c: Wrap prototype of `asm_output_aligned_bss' in macro
	BSS_SECTION_ASM_OP.

Thu Jun 18 09:20:47 1998  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* pa.c: Include system.h and toplev.h.  Remove redundant code.
	(call_operand_address): Mark parameter `mode' with ATTRIBUTE_UNUSED.
	(symbolic_operand): Likewise.
	(symbolic_memory_operand): Likewise.
	(pic_label_operand): Likewise.
	(fp_reg_operand): Likewise.
	(pre_cint_operand): Likewise.
	(post_cint_operand): Likewise.
	(ireg_or_int5_operand): Likewise.
	(int5_operand): Likewise.
	(uint5_operand): Likewise.
	(int11_operand): Likewise.
	(uint32_operand): Likewise.
	(ior_operand): Likewise.
	(lhs_lshift_cint_operand): Likewise.
	(pc_or_label_operand): Likewise.
	(legitimize_pic_address): Likewise.
	(hppa_legitimize_address): Likewise for parameter `old'.
	(output_block_move): Likewise for parameter `size_is_constant'.
	(output_function_prologue): Likewise for parameter `size'.
	(output_function_epilogue): Likewise.
	(return_addr_rtx): Likewise for parameter `count'.
	(output_mul_insn): Likewise for parameter `unsignedp'.
	(hppa_builtin_saveregs): Likewise for parameter `arglist'.
	(output_bb): Likewise for parameter `operands'.
	(output_bvb): Likewise.
	(function_label_operand): Likewise for parameter `mode'.
	(plus_xor_ior_operator): Likewise.
	(shadd_operand): Likewise.
	(non_hard_reg_operand): Likewise.
	(eq_neq_comparison_operator): Likewise.
	(movb_comparison_operator): Likewise.
	(pa_combine_instructions): Likewise for parameter `insns'.

	* pa.h: Add prototypes for functions `output_deferred_plabels',
	`override_options', `output_ascii', `output_function_prologue',
	`output_function_epilogue', `print_operand',
	`symbolic_expression_p', `reloc_needed', `compute_frame_size',
	`hppa_address_cost', `and_mask_p', `symbolic_memory_operand',
	`pa_adjust_cost', `pa_adjust_insn_length' and
	`secondary_reload_class'.

Wed Jun 17 22:28:48 1998  Jason Merrill  <jason@yorick.cygnus.com>

	* configure.in: Don't turn on collect2 unconditionally.

Wed Jun 17 20:20:48 1998  Mark Mitchell  <mark@markmitchell.com>

	* cse.c (cse_basic_block): Don't include NOTE insns in the count
	that is used to decide whether or not it is time to erase the
	equivalence table.

Wed Jun 17 18:30:43 1998  Franz Sirl  <Franz.Sirl-kernel@lauterbach.com>

	* rs6000/linux.h (JUMP_TABLES_IN_TEXT_SECTION): Define to zero.

Wed Jun 17 19:05:03 1998  John Carr  <jfc@mit.edu>

	* haifa-sched.c (haifa_classify_insn): TRAP_IF is risky.
	(sched_analyze_2): Allow scheduling TRAP_IF.

	* reorg.c (mark_referenced_resources): Examine operands of TRAP_IF.

	* rtl.h (TRAP_CODE): New macro.

	* rtl.def (TRAP_IF): Change second operand type to rtx.

	* optabs.c (gen_cond_trap): New function.
	(init_traps): New function.
	(init_optabs): Call init_traps.
	* expr.h: Declare gen_cond_trap.

	* jump.c (jump_optimize): Optimize jumps to and around traps.

	* sparc.md: Define trap instructions.

	* rs6000.md: Define trap instructions.
	* rs6000.c (print_operand): New code 'V' for trap condition.
	(trap_comparison_operator): New function.

	* m88k.md: Update use of TRAP_IF.

	* tree.h (enum built_in_function): New function code BUILT_IN_TRAP.
	* c-decl.c (init_decl_processing): New builtin __builtin_trap.
	* expr.c (expand_builtin): Handle BUILT_IN_TRAP.

	* expr.c (expand_builtin): Error if __builtin_longjmp second argument
	is not 1.

Wed Jun 17 15:20:00 1998  Catherine Moore  <clm@cygnus.com>

	 * reload1.c (spill_hard_reg): Check mode of register when
	 spilling from scratch_list.

Wed Jun 17 16:25:38 1998  Andrew MacLeod  (amacleod@cygnus.com)

	* except.c (add_new_handler): Fix bug in finding last region handler.
	* libgcc2.c (find_exception_handler): Pass exception table pointer
	to runtime type matcher, not the match info field.

Wed Jun 17 15:57:48 1998  Andrew MacLeod  (amacleod@cygnus.com)

	* eh-common.h (struct eh_context): Add comment for hidden use of
	field dynamic_handler_chain.
	* except.c (get_dynamic_handler_chain): Comment on, and use the
	correct offset of the dynamic_handler_chain field.

1998-06-17  Jim Wilson  <wilson@cygnus.com>

	* mips/iris6.h (LINK_SPEC): Add -woff 131.

1998-06-17  Jason Merrill  <jason@yorick.cygnus.com>

	* dwarf2out.c: Disable EH_FRAME_SECTION if we don't have .init.

	* configure.in: Don't disable collect2 when we have GNU ld.

Wed Jun 17 08:38:13 1998  Jeffrey A Law  (law@cygnus.com)

	* fold-const.c (make_range): Do not widen the type of the expression.

	* expr.c (check_max_integer_computation_mode): New function.
	(expand_expr): Avoid integer computations in modes wider than
	MAX_INTEGER_COMPUTATION_MODE.
	* fold-const.c (fold): Likewise.
	* tree.h (check_max_integer_computation_mode): Declare.
	* tm.texi (MAX_INTEGER_COMPUTATION_MODE): Document it.

	* configure.in (nm): Make a link to "nm" in the build tree too.

	* mn10300.md (andsi3): Fix typo.

Tue Jun 16 22:58:40 1998  Richard Henderson  <rth@cygnus.com>

	* reload1.c (reload_cse_regs): Call bzero instead of looping.

Tue Jun 16 18:30:35 1998  Jim Wilson  <wilson@cygnus.com>

	* dwarf2out.c (stripattributes): Prepend '*' to the section name.

Tue Jun 16 16:49:26 1998  Richard Henderson  <rth@cygnus.com>

	* alpha.c (alpha_expand_prologue, alpha_expand_epilogue): New fns.
	(output_prologue, output_epilogue): Merge VMS and OSF versions;
	Remove anything related to the actual code generation.
	(output_end_prologue): New function.
	(alpha_sa_mask, alpha_sa_size): Merge VMS and OSF versions.
	(alpha_does_function_need_gp): Return false for VMS.
	(alpha_function_needs_gp): Make static.
	(add_long_const): Delete.
	(summarize_insn): Don't assume a SUBREG is of a REG.
	Prototype all static functions.  Rename VMS-specific global
	variables vms_*.
	* alpha.h (TARGET_CAN_FAULT_IN_PROLOGUE): Default to 0.
	(FUNCTION_BOUNDARY): Align to cache line.
	(LOOP_ALIGN, ALIGN_LABEL_AFTER_BARRIER): Align to octaword.
	(FUNCTION_END_PROLOGUE): New macro.
	* alpha.md (attribute length): New.  Mark all insns.
	(return_internal, prologue_stack_probe_loop): New patterns.
	(prologue, init_fp, epilogue): New patterns.
	Disable peepholes.
	* linux.h (TARGET_CAN_FAULT_IN_PROLOGUE): Define.

Tue Jun 16 17:36:35 1998  Dave Brolley  <brolley@cygnus.com>

	* toplev.c (lang_options): Add -trigraphs option for cpplib.

Tue Jun 16 23:33:24 1998  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* reload1.c (reload_reg_free_before_p): RELOAD_FOR_OUTADDR_ADDRESS
	is earlier than RELOAD_FOR_OUTPUT_ADDRESS; RELOAD_FOR_INPADDR_ADDRESS
	is earlier than RELOAD_FOR_INPUT_ADDRESS.

Tue Jun 16 13:15:16 1998  Jim Wilson  <wilson@cygnus.com>

	* libgcc1-test.c (memcpy): Define.

Tue Jun 16 13:44:02 1998  Michael Meissner  <meissner@cygnus.com>

	* genattrtab.c (struct attr_desc): Change int flags to bit
	fields.  Add bit fields for this being function_units_used
	or *_blockage_range attributes.
	(write_unit_name): New function to print a function unit name
	given unit #.
	(expand_units): Indicate whether this is function_units_used or
	*_blockage_range attributes.
	(write_toplevel_expr): Print function_units_used and
	*_blockage_range attributes in a more friendly fashion.
	(make_internal_attr): Indicate whether this attribute is either
	function_units_used or *_blockage_range.

Mon Jun 15 17:06:43 1998  Michael Meissner  <meissner@cygnus.com>
			  Jim Wilson  <wilson@cygnus.com>

	* regmove.c (copy_src_to_dest): Do not copy src to dest if either
	the source or destination is special.

Mon Jun 15 13:20:33 1998  Jim Wilson  <wilson@cygnus.com>

	* c-decl.c (shadow_tag_warned): Use specs not declspecs in for loop.

Mon Jun 15 07:16:29 1998  Jeff Law  (law@cygnus.com)

	* version.c: Bump for snapshot.

Sat Jun 13 13:10:40 1998  Krister Walfridsson  <cato@df.lth.se>

	* config/sparc/netbsd.h (DEFAULT_PCC_STRUCT_RETURN): Undefine before
	redefining it.

Fri Jun 12 18:06:45 1998  Doug Evans  <devans@egcs.cygnus.com>

	* m32r/m32r.h (STARTFILE_SPEC): Delete crtsysc.o.
	(ENDFILE_SPEC): Add -lgloss.

Fri Jun 12 14:57:59 1998  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* mips.c (small_int): Mark parameter `mode' with ATTRIBUTE_UNUSED.
	(large_int): Likewise.
	(pc_or_label_operand): Likewise.
	(call_insn_operand): Likewise.
	(consttable_operand): Likewise.
	(m16_uimm3_b): Likewise.
	(m16_simm4_1): Likewise.
	(m16_nsimm4_1): Likewise.
	(m16_simm5_1): Likewise.
	(m16_nsimm5_1): Likewise.
	(m16_uimm5_4): Likewise.
	(m16_nuimm5_4): Likewise.
	(m16_simm8_1): Likewise.
	(m16_nsimm8_1): Likewise.
	(m16_uimm8_1): Likewise.
	(m16_nuimm8_1): Likewise.
	(m16_uimm8_m1_1): Likewise.
	(m16_uimm8_4): Likewise.
	(m16_nuimm8_4): Likewise.
	(m16_simm8_8): Likewise.
	(m16_nsimm8_8): Likewise.
	(m16_usym8_4): Likewise.
	(m16_usym5_4): Likewise.
	(mips_move_1word): Change type of variable `i' from int to size_t.
	(mips_move_2words): Likewise.
	(output_block_move): Mark parameter `libname' with ATTRIBUTE_UNUSED.
	(function_arg_advance): Use HOST_PTR_PRINTF to print an address.
	(function_arg): Likewise.
	(function_arg_partial_nregs): Mark parameter `named' with
	ATTRIBUTE_UNUSED.
	(override_options): Use ISDIGIT instead of isdigit.
	(mips_output_external): Mark parameter `file' with ATTRIBUTE_UNUSED.
	(final_prescan_insn): Likewise for parameters `opvec' and `noperands'.
	(save_restore_insns): Cast HOST_WIDE_INT arguments passed to
	function `fatal' to long before printing.  Use
	HOST_WIDE_INT_PRINT_DEC in fprintf.  Both changes done several
	times in this function.
	(function_prologue): Mark parameter `size' with ATTRIBUTE_UNUSED.
	(function_epilogue): Likewise for parameters `file' and `size'.
	Print an int with "%d" not "%ld".
	(mips_select_rtx_section): Mark parameter `x' with ATTRIBUTE_UNUSED.
	(mips_function_value): Likewise for parameter `func'.
	(function_arg_pass_by_reference): Likewise for parameters `cum'
	and `named'.
	(extend_operator): Likewise for parameter `mode'
	(highpart_shift_operator): Likewise.

	* mips.md (mul_acc_si): Remove unused variable `macc'.

Fri Jun 12 09:33:44 1998  Richard Henderson  <rth@cygnus.com>

	* fold-const.c (fold): Revert last change.  It breaks constant
	expressions somehow.

Fri Jun 12 10:23:36 1998  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* expr.c (do_jump, case EQ_EXPR, NE_EXPR): When comparing complex
	prevent operands from being evaluated twice.

Fri Jun 12 00:50:27 1998  Sergey Okhapkin  <sos@prospect.com.ru>

	* toplev.c (lang_options): Add -remap as a preprocessor option.

Fri Jun 12 00:30:32 1998  John Wehle  (john@feith.com)

	* i386.md (cmpsi_1, cmphi_1, cmpqi_1): Remove code
	which set CC_REVERSED since reload should ensure that
	the operands are already the correct type.

Thu Jun 11 17:14:15 1998  Jim Wilson  <wilson@cygnus.com>

	* except.c (expand_builtin_eh_stub): Call emit_move_insn rather than
	calling gen_rtx_SET.

Thu Jun 11 18:45:49 1998  David Edelsohn  <edelsohn@mhpcc.edu>

	* config/rs6000/x-aix43 (AR): Delete.
	(AR_FOR_TARGET_FLAGS): Add -X32_64 here.

Thu Jun 11 16:19:17 1998  David W. Schuler  <schuld@btv.ibm.com>

	* config/i386/aix386ng.h (CPP_SPEC): Remove extraneous quote.

Thu Jun 11 12:40:27 1998  Jim Wilson  <wilson@cygnus.com>

	* mips.c (override_options): Replace word_mode with explicit
	TARGET_64BIT check.

Thu Jun 11 14:50:02 1998  Michael Meissner  <meissner@cygnus.com>

	* regmove.c (regmove_optimize): If we can't replace the
	destination in an insn that sets the source, generate an explicit
	move of the source to the destination.
	(copy_src_to_dest): New function.
	(toplevel): Include basic-block.h.

	* Makefile.in (regmove.o): Add basic-block.h dependencies.

Thu Jun 11 10:30:09 1998  Dave Brolley  <brolley@cygnus.com>

	* toplev.c (lang_options): Add missing options (nostdinc, idirafter).

Wed Jun 10 23:39:32 1998  Mark Mitchell  <mark@markmitchell.com>

	* rtl.h (rtx_def): Improve documentation.
	(MEM_IN_STRUCT_P): Likewise.

Wed Jun 10 23:23:17 1998  Graham  <grahams@rcp.co.uk>

	* c-decl.c (start_decl): Correct test for -Wmain.

	* c-decl.c (grokdeclarator): Remove unused variable "last".

Wed Jun 10 14:52:27 1998  Jim Wilson  <wilson@cygnus.com>

	* expr.c (expand_builtin_setjmp): Store const1_rtx in target.
	(expand_builtin_longjmp): Abort if value isn't const1_rtx.
	Delete code storing value in static_chain_rtx.
	(expand_builtin, case BUILT_IN_LONGJMP): Pass NULL_RTX for target
	to second expand_expr call.

Wed Jun 10 13:08:41 1998  Mark Mitchell  <mark@markmitchell.com>

	* mips/mips.c: Remove -mabi=o32 and -mabi=n64.

Wed Jun 10 13:41:23 1998  Dave Brolley  <brolley@cygnus.com>

	* cppmain.c (fatal): New function.
	* configure.in (cpp_main): New configuration variable.
	* configure: Regenerated.
	* Makefile.in (CCCP): Use a configuration variable to select basex
	for cccp.
	(cppmain$(exeext)): Add @extra_cpp_objs@.

Wed Jun 10 13:07:02 1998  Dave Brolley  <brolley@cygnus.com>

	* objc/objc-act.c: Add cpplib declarations.
	(lang_decode_option): Initialize cpplib if necessary.
	(lang_decode_option): New argc/argv interface.
	* tree.h (lang_decode_option): New argc/argv interface.
	* toplev.c (lang_options): Add cpp options.
	(main): New interface for lang_decode_option.
	* gcc.c (default_compilers): Don't call cpp for a cpplib-enabled C compiler
	unless -E, -M or -MM is specified.
	* cpplib.h (cpp_handle_option): New function.
	* cpplib.c (cpp_handle_option): New function.
	(cpp_handle_options): Now calls cpp_handle_option.
	* c-tree.h (c_decode_option): New argc/argv interface.
	* c-lex.c (init_parse): cpplib now initialized in c_decode_option.
	* c-lang.c (lang_decode_option): New argc/argv interface.
	* c-decl.c: Add cpplib declarations.
	(c_decode_option): New argc/argv interface.
	(c_decode_option): Call cpp_handle_option.
	(c_decode_option): Now returns number of strings processed.

Wed Jun 10 09:47:13 1998  Richard Earnshaw  (rearnsha@arm.com)

	* unroll.c (verify_addresses): Use validate_replace_rtx to undo the
	changes.  Abort if the undo fails.

1998-06-10  Vladimir N. Makarov  <vmakarov@cygnus.com>

	* config/rs6000/rs6000.c (output_prolog): Change locations and
	directions of saving and restoring arguments of main on the stack.

Wed Jun 10 08:56:27 1998  John Carr  <jfc@mit.edu>

	* reload1.c (reload_cse_simplify_operands): Do not call gen_rtx_REG
	for each alternative.  Do not replace a CONST_INT with a REG unless
	the reg is cheaper.

Wed Jun 10 02:11:55 1998  Jeffrey A Law  (law@cygnus.com)

	* decl.c (init_decl_processing): Fix typo.

	* mips.c (gpr_mode): New variable.
	(override_options): Initialize gpr_mode.
	(compute_frame_size): Use "gpr_mode" instead of "word_mode" to
	determine size and offset of general purpose registers save slots.
	(save_restore_insns, mips_expand_prologue): Similarly.

	* reload.c (find_reloads_toplev): Use gen_lowpart common to convert
	between constant representations when we have (SUBREG (REG)) with
	REG equivalent to a constant.

Wed Jun 10 01:39:00 1998  Juha Sarlin  <juha@c3l.tyreso.se>

	* h8300.c (get_shift_alg): Add special cases for shifts of 8 and 24.

Tue Jun  9 22:05:34 1998  Richard Henderson  <rth@cygnus.com>

	* fold-const.c (fold): Even with otherwise constant trees, look for
	opportunities to combine integer constants.

Wed Jun  3 23:41:24 1998  John Wehle  (john@feith.com)

	* i386.c (notice_update_cc): Clear cc_status.value2 in the
	case of UNSPEC 5 (bsf).

	* i386.md (movsfcc, movdfcc, movxfcc): The floating point
	conditional move instructions don't support signed integer
	comparisons.

Tue Jun  9 14:31:19 1998  Nick Clifton  <nickc@cygnus.com>

	* config/v850/t-v850 (TCFLAGS): Add assembler options to warn of
	overflows.

	* config/v850/lib1funcs.asm (__return_interrupt): Use 'addi
	16,sp,sp' ratehr than 'add 16,sp'.  Patch courtesy of Biomedin
	<glctr@abc.it>.

Tue Jun  9 16:23:13 1998  Andrew MacLeod  <amacleod@cygnus.com>

	* except.c (expand_start_catch): Rename to start_catch_handler.
	(expand_end_catch): Delete function.
	(expand_end_all_catch): Remove catch status that expand_end_catch
	use to do.
	* except.h (expand_start_catch): Rename prototype.
	(expand_end_catch): Delete prototype.

Tue Jun  9 12:57:32 1998  Mark Mitchell  <mark@markmitchell.com>

	* invoke.texi: Add documentation for -mips4 and -mabi=*.

Tue Jun  9 12:12:34 1998  Klaus Kaempf  (kkaempf@progis.de)

	* alpha/vms.h (EXTRA_SECTIONS): Add in_ctors and in_dtors.
	(EXTRA_SECTION_FUNCTIONS): Add ctors_section and dtors_section.
	(ASM_OUTPUT_CONSTRUCTOR, ASM_OUTPUT_DESTRUCTOR): Define.

Tue Jun  9 12:10:27 1998  John Carr  <jfc@mit.edu>

	* haifa-sched.c (update_flow_info): Use UNITS_PER_WORD, not MOVE_MAX,
	as the threshold to permit splitting memory operations.

Tue Jun  9 12:36:16 1998  Jeffrey A Law  (law@cygnus.com)

	* mips.c (gpr_mode): New variable.
	(override_options): Initialize gpr_mode.
	(compute_frame_size): Use "gpr_mode" instead of "word_mode" to
	determine size and offset of general purpose registers save slots.
	(save_restore_insns, mips_expand_prologue): Similarly.

	* Makefile.in (LIB2FUNCS_EH): Define.  Just "_eh" for now.
	(LIBGCC2_CFLAGS): Remove -fexceptions.
	(LIB2FUNCS): Remove "_eh".
	(libgcc2.a): Iterate over LIB2FUNCS_EH and build everything in
	it with -fexceptions.

	* Makefile.in (local-alloc.o): Depend on insn-attr.h.
	* local-alloc.c (block_alloc): Avoid creating false
	dependencies for targets which use instruction scheduling.

Tue Jun  9 02:40:49 1998  Richard Henderson  <rth@cygnus.com>

	* mips/elf.h (ASM_DECLARE_OBJECT_NAME): Define.
	(ASM_FINISH_DECLARE_OBJECT): Define;
	* mips/elf64.h: Likewise.

Tue Jun  9 01:08:47 1998  Richard Henderson  <rth@cygnus.com>

	* toplev.c (flag_new_exceptions): Remove extraneous `extern'.

Mon Jun  8 23:24:48 1998  Jeff Law  (law@cygnus.com)

	* version.c: Bump for snapshot.

Mon Jun  8 23:24:58 1998  David Edelsohn  <edelsohn@mhpcc.edu>

	* rs6000.md (mulsidi3): Add !TARGET_POWERPC64 constraint.
	(mulsidi3_ppc64): Delete.

Mon Jun  8 20:57:40 1998  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* Makefile.in (varasm.o): Depend on dbxout.h.
	(cse.o): Depend on toplev.h and output.h.
	(gcse.o): Depend on output.h.

	* mips.c: Include system.h and toplev.h and remove redundant code.
	Include output.h after tree.h so all its prototypes get activated.
	* mips.md (table_jump): Remove unused variable `dest'.

	* sparc.h: Add prototype for `v8plus_regcmp_op'.

	* crtstuff.c (fini_dummy, init_dummy): Mark function definitions
	with __attribute__ ((__unused__)).
	(__frame_dummy): Provide prototype before use, wrap it with
	EH_FRAME_SECTION_ASM_OP.

	* cse.c: Move inclusion of <setjmp.h> above local headers.
	Include toplev.h and output.h.

	* dbxout.h: Add prototype for `dbxout_begin_function'.

	* final.c (final_scan_insn): Wrap variable `max_skip' in macro
	ASM_OUTPUT_MAX_SKIP_ALIGN.

	* gcse.c: Include system.h and output.h.
	(dump_cuid_table, dump_rd_table, dump_cprop_data, dump_pre_data):
	Make extern instead of static.
	(compute_can_copy): Only declare variables `reg' and `insn' when
	AVOID_CCMODE_COPIES is not defined.
	(record_set_info): Mark parameter `setter' with ATTRIBUTE_UNUSED.
	(hash_scan_clobber): Likewise for `x' and `insn'.
	(hash_scan_call): Likewise.
	(record_last_set_info): Likewise for `setter'.
	(mark_call): Likewise for `pat'.
	(pre_insert_insn): Wrap variable `note' in macro HAVE_cc0.

	* libgcc2.c (__bb_init_prg): Replace bzero with memset and fix the
	length parameter so that it multiplies the number of elements by
	the sizeof(element).

	* output.h: Add prototype for `weak_finish'.

	* recog.h: Likewise for `validate_replace_src'.

	* rtl.h: Likewise for `optimize_save_area_alloca',
	`fix_sched_param', `purge_addressof', `gcse_main',
	`regmove_optimize', `dbr_schedule', `branch_prob' and
	`end_branch_prob'.

	* toplev.h: Likewise for `set_float_handler' and
	`output_quoted_string'.

	* varasm.c: Include dbxout.h.

Mon Jun  8 18:12:06 1998  Jim Wilson  <wilson@cygnus.com>

	* mips.c (mips_secondary_reload_class): Use gp_reg_p instead of
	GP_REG_P.  Use gr_regs instead of GR_REGS.

Mon Jun  8 16:54:12 1998  Ken Raeburn   <raeburn@cygnus.com>
			  Jeff Law      <law@cygnus.com>

	* Revamped multiply support for MIPS chips.
	* mips.c (extend_operator): New function.
	(highpart_shift_operator): Likewise.
	* mips.h: Declare new functions.
	(PREDICATE_CODES): Add support for new predicates.
	* mips.md (mulsi3 expander): Simplify.
	(mulsi_mult3): Add another constraint alternative.  Support
	3 operand multiply instructions as found on various mips
	parts.
	(mulsi3_r4650): Delete pattern, now handled by mulsi_mult3.
	(mul_acc_si): New pattern and associated splitters.
	(mulsidi3 expander): Rework to use mulsidi3_64bit and
	mulsidi3_internal.
	(umulsidi3): New expander.
	(mulsidi3_internal): Accept either sign or zero extended
	operands and generate code as appropriate appropriately.
	(mulsidi3_64bit): Similarly.
	(smulsi3_highpart): Turn into an expander and generate code
	to match new patterns.
	(umulsi3_highpart): Likewise.
	(xmulsi3_highpart_internal): New pattern.
	(maddi patterns): Delete.  Replace with:
	(mul_acc_di, mul-acc_64bit_di): New patterns.

Mon Jun  8 14:16:15 1998  Andrew MacLeod  <amacleod@cygnus.com>

	* eh-common.h: Remove NEW_EH_MODEL compile time flag, and replace with
	flag_new_exceptions runtime flag.
	(struct old_exception_table): New struct which represents what
	the exception table looks like without the new model.
	(NEW_EH_RUNTIME): New value used as a tag in the exception table to
	flag that this is a new style table.
	* except.h: Remove compile time flag NEW_EH_MODEL.
	(expand_builtin_eh_stub_old): New prototype.
	* tree.h (enum built_in_function): Add BUILT_IN_EH_STUB_OLD.
	* expr.c (expand_builtin): New builtin func BUILT_IN_EH_STUB_OLD.
	* c-decl.c (init_decl_processing): Add new builtin function
	__builtin_eh_stub_old.
	* final.c (final_scan_insn): Replace compile time flag NEW_EH_MODEL.
	* flags.h (flag_new_exceptions): New runtime flag.
	* toplev.c (flag_new_exceptions): Initialize default to 0,
	-fnew-exceptions sets to 1.
	* except.c (output_exception_table_entry): Output New style exception
	identifier into table, and replace compile time flag NEW_EH_MODEL
	with runtime flag flag_new_exceptions.
	(output_exception_table): Replace compile time flag NEW_EH_MODEL.
	(expand_builtin_eh_stub_old): Duplicates original functionality of
	expand_builtin_eh_stub.
	(expand_builtin_eh_stub): Replace compile time flag NEW_EH_MODEL.
	* libgcc2.c (find_exception_handler): Remove NEW_EH_MODEL #ifdefs.
	(old_find_exception_handler): New func, same as find_exception_handler
	except it works on the old style exception table.
	(__throw): Replace NEW_EH_MODEL. Detect new model based on presence
	of identifier in the exception table, and call appropriate routines.

Mon Jun  8 01:21:13 1998  Jason Merrill  <jason@yorick.cygnus.com>

	* function.c: Define current_function_cannot_inline.
	(push_function_context_to): Save it.
	(pop_function_context_from): Restore it.
	* function.h (struct function): Provide it a home.
	* output.h: Declare it.
	* integrate.c (function_cannot_inline_p): Check it.

Mon Jun  8 10:43:15 1998  Richard Henderson  <rth@cygnus.com>

	* expr.c (force_operand): Detect PIC address loads before
	splitting arithmetic.

Mon Jun  8 09:22:38 1998  Jeff Law  (law@cygnus.com)

	* version.c: Bump for snapshot.

Mon Jun  8 02:55:56 1998  Graham  <grahams@rcp.co.uk>

	* tree.c (tree_class_check): Add braces to eliminate ambiguous
	else warning.
	(tree_check): Likewise.

Mon Jun  8 02:49:23 1998  H.J. Lu  (hjl@gnu.org)

	* reg-stack.c (subst_stack_regs_pat): Make sure the top of
	stack is the destination for conditional move insn.

Mon Jun  8 01:21:13 1998  Jason Merrill  <jason@yorick.cygnus.com>

	* tree.h (TREE_VEC_END): Cast unused value to void.

	* i386.c (print_operand): Use %lx for long operand.

Mon Jun  8 00:04:07 1998  Richard Henderson  <rth@cygnus.com>

	* alpha.c (summarize_insn): Ignore rtl slot format 'i'.

Sun Jun  7 14:15:45 1998  John Carr  <jfc@mit.edu>

	* sol2.h (INIT_SUBTARGET_OPTABS): Use Solaris libc float/long long
	conversion functions.

Sun Jun  7 14:02:58 1998  Richard Henderson  <rth@cygnus.com>

	* toplev.c (flag_exceptions): Default to 0.
	(compile_file): Remove flag_exceptions == 2 hack.
	(main): Call lang_init_options.
	* tree.h: Declare it.
	* c-lang.c: Implement it.
	* objc/objc-act.c: Likewise.
	
Sun Jun  7 12:27:30 1998  David Edelsohn  <edelsohn@mhpcc.edu>

	* rs6000.md (restore_stack_block): Generate MEM and specify mode.
	* rs6000.h (STACK_SAVEAREA_MODE): SAVE_FUNCTION is VOIDmode.
	* rs6000.c (rs6000_output_load_toc_table): Use fputs.
	(output_function_profiler): Use asm_fprintf and fputs.

Sat Jun  6 12:17:12 1998  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* gencheck.c: Remove redundant stdio.h include.  Add a definition
	of xmalloc for when we are forced to link with alloca.o.

	* reload1.c (reload_reg_free_for_value_p): Use `(unsigned)1'
	instead of `1U'.

	* fold-const.c (constant_boolean_node): Make definition static to
	match the prototype.

Fri Jun  5 15:53:17 1998  Per Bothner  <bothner@cygnus.com>

	* gcc.c (lang_specific_pre_link): New LANG_SPECIFIC_DRIVER function.
	(lang_specific_extra_outfiles): New LANG_SPECIFIC_DRIVER variable.
	(do_spec, input_filename, input_filename_length): Make public.
	(main): Adjust outfiles allocation by lang_specific_extra_outfiles.
	Call lang_specific_pre_link befor elinking.

Fri Jun  5 12:29:28 1998  Jeffrey A Law  (law@cygnus.com)

	* haifa-sched.c (rank_for_schedule): For "equally good insns", prefer
	the insn which has the most insns dependent on it.

Fri Jun  5 09:03:22 1998  John Carr  <jfc@mit.edu>

	* alias.c (find_base_value): Avoid reading past	end of reg_base_value.

Fri Jun  5 03:05:34 1998  Richard Henderson  <rth@cygnus.com>

	* alpha.md (insxh-1): New insxl pattern for combine.

Fri Jun  5 01:12:15 1998  H.J. Lu  (hjl@gnu.org)

	* i386/i386.c (output_fp_conditional_move): New function
	to output floating point conditional move.
	(output_int_conditional_move): New function to output integer
	conditional move.

	* i386/i386.md (movsicci+5, movhicc+5, movdicc+5): Call
	output_int_conditional_move () to output int conditional move.
	(movsfcc+5, movdfcc+5, movxfcc+5): Call
	output_fp_conditional_move () to output floating point
	conditional move.

	* i386/i386.c (put_condition_code): In INT mode, check
	cc_prev_status.flags & CC_NO_OVERFLOW for GE and LT.

Thu Jun  4 16:09:51 1998  Dave Brolley  <brolley@cygnus.com>

	* dbxout.c (dbxout_type): Output arrays of bits as if
	they were bitstrings for Chill

Thu Jun  4 14:35:27 1998  David Edelsohn  <edelsohn@mhpcc.edu>

	* tree.c (get_inner_array_type): New function.
	* tree.h (get_inner_array_type): Prototype.
	* expr.h (STACK_SAVEAREA_MODE): New macro.
	* expr.c (expand_builtin_setjmp): Initialize sa_mode using
	STACK_SAVEAREA_MODE.
	(expand_builtin_longjmp): Likewise.
	* explow.c (emit_stack_save): Likewise.
	(allocate_dynamic_stack_space): Use Pmode not insn_operand_mode.

	* rs6000/aix41.h (ASM_CPU_SPEC): Define relative to ASM_DEFAULT_SPEC.
	(CPP_CPU_SPEC): Define relative to CPU_DEFAULT_SPEC.
	* rs6000/aix43.h: New file.
	* rs6000/t-aix43: New file.
	* rs6000/x-aix41: New file.
	* rs6000/x-aix43: New file.
	* configure.in (rs6000-ibm-aix*): Use them.
	* rs6000/powerpc.h: Delete.
	* rs6000/sysv4.h: Move necessary powerpc.h definitions to here,
	* rs6000/netware.h: and here,
	* rs6000/win-nt.h: and here.

	* rs6000/rs6000.c (processor_target_table, 620): Do not affect
	MASK_POWERPC64.
	(rs6000_override_options): Ignore flag_pic for AIX.
	(rs6000_immed_double_const): Delete.
	(u_short_cint_operand): Don't assume 32-bit CONST_INT.
	(reg_or_u_short_operand): Don't assume 32-bit CONST_INT.
	(num_insns_constant): mask64_operand() is 2 insns.
	(logical_operand): Don't assume 32-bit CONST_INT.
	(non_logical_cint_operand): Don't assume 32-bit CONST_INT.
	(easy_fp_constant): Any CONST_DOUBLE_HIGH is okay for 64-bit.
	(mask_constant): HOST_WIDE_INT parameter.
	(non_and_cint_operand): Delete.
	(mask64_operand): New function.
	(and64_operand): New function.
	(function_arg_advance): DImode arguments do not need special
	alignment when 64-bit.
	(function_arg): Likewise.
	(setup_incoming_varargs): Reverse reg_size assignment.
	(print_operand): HOST_WIDE_INT second parameter.
	(print_operand, 'B'): New case.
	(print_operand, 'M'): Fix typo in lossage string.
	(print_operandm 'S'): New case.
	(rs6000_stack_info): Reverse reg_size assignment.  Use total_raw_size
	to compute AIX push_p.  Use reg_size to compute {cr,lr}_save_offset.
	(rs6000_output_load_toc_table): Reverse init_ptr assignment.  Use
	TARGET_64BIT not TARGET_POWERPC64.  Convert fprintf to fputs.
	Load GOT highpart, don't add it.  Add lowpart with {cal|la}.
	(rs6000_allocate_stack_space): Use {cal|la}.
	(output_epilog): Use {cal|la}
	(output_function_profiler): Add call glue to mcount call.
	Load GOT highpart, don't add it.  Add lowpart with {cal|la}.

	* rs6000/rs6000.h (TARGET_SWITCHES): Add powerpc64.
	(STACK_BOUNDARY): Depend on TARGET_32BIT.
	(ADJUST_FIELD_ALIGN): Calculate array alignment using innermost type.
	(CONST_OK_FOR_LETTER_P): Don't assume 32-bit CONST_INT.
	(EXTRA_CONSTRAINTS): Remove NT 'S' and 'T'.  Replace 'S' with
	64-bit mask operand.
	(RS6000_SAVE_TOC): Depend on TARGET_32BIT.
	(STACK_SAVEAREA_MODE): New macro.
	(LEGITIMATE_CONSTANT_P): DImode okay for 64bit.
	(LEGITIMIZE_RELOAD_ADDRESS): New macro.
	(RTX_COSTS, AND/IOR/XOR): Reflect current machine description.
	(ASM_FILE_START): Emit 64-bit ABI directive.
	(ASM_DECLARE_FUNCTION_NAME): Align CSECT on doubleword in 64-bit mode.
	(ASM_OUTPUT_SPECIAL_POOL_ENTRY): DImode okay for 64-bit.
	(PREDICATE_CODES): Add "and64_operand" and "mask64_operand".
	Delete "non_and_cint_operand".  "input_operand" includes CONST_DOUBLE.

	* rs6000/rs6000.md (iorsi3, xorsi3): Use HOST_WIDE_INT for mask.
	Restore define_splits.
	(floatsidf2, floatunssidf2): Remove !TARGET_POWERPC64 final constraint.
	(floatsidf2_internal, floatunssidf2_internal2): Likewise.
	Do not specify base register operand mode.
	(floatsidf2_loadaddr): Do not specify base register operand mode.
	(floatsidf2_store1, floatsidf2_store2): Operand 1 must be base
	register; do not specify mode.  Remove !TARGET_POWERPC64 final
	constraint.
	(floatsidf2_load): Do not specify base register operand mode.  Remove
	!TARGET_POWERPC64 final constraint.
	(fix_truncdfsi2_internal, fix_truncdfsi2_{store,load}): Do not specify
	base register operand mode.
	(adddi3): Split large constants early.
	(absdi3): Shift by 63, not 31.
	(*mulsidi3_ppc64): New pattern.
	(rotldi3): Add masking combiner patterns.
	(anddi3): Add rldic{r,l} masking.  Remove split of large constants
	because PPC insns zero-extend.
	(iordi3, xordi3): Split large constants early.
	(movsi matcher): Remove S and T constraints.
	(movsf const_double): Create SImode constant from TARGET_DOUBLE.
	(movdf_hardfloat32): Add default abort() case.
	(movdf easy_fp_const): Create DImode constant from TARGET_DOUBLE.
	(movdi): Remove 64-bit constant generator.  Try to convert
	CONST_DOUBLE to CONST_INT.  Handle TOC memory constants.
	(movdi_32): Add default abort() case.
	(movdi_64): Add numerous ways to split 64-bit constants.
	Make catch-all define_split more optimal and never FAIL.
	(movti_ppc64): Add default abort() case.
	(allocate_stack): Remove operand modes.  Use Pmode.
	(restore_stack_block): Remove operand modes.  Generate Pmode
	temporary.
	(save_stack_nonlocal, restore_stack_nonlocal): Generate Pmode
	temporary.  Save area is double Pmode.
	(call_indirect_aix64, call_value_indirect_aix64): New patterns.
	(call, call_value): Do not specify address operand mode.  Choose
	appropriate AIX ABI.
	(*call_local64, *ret_call_local64): New patterns.
	(*call_nonlocal_aix64, *ret_call_nonlocal_aix64): New patterns.
	(*ret_call_nonlocal_aix32): Use call_value_indirect for REG.
	(compare): Materialize DImode truthvalues.

Thu Jun  4 01:26:57 1998  Craig Burley  <burley@gnu.org>

	* expr.c (safe_from_p): Avoid combinatorial explosion
	over duplicate SAVE_EXPRs by ensuring we never recurse
	on one that has already been visited.

Thu Jun  4 00:54:21 1998  Graham  <grahams@rcp.co.uk>

	* loop.c (check_dbra_loop): Initialize final_value before
	normalizing the loop.

Wed Jun  3 20:00:04 1998  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* reload1.c (reload_reg_free_for_value_p): New arguments out and
	reloadnum.  Changed all callers.

1998-06-03  Ulrich Drepper  <drepper@cygnus.com>

	* system.h: Add _() and N_() macros in preparation for gettext.

Wed Jun  3 11:02:24 1998  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* c-common.c (check_format_info): Put back check for C9x `hh'
	length modifier.  Warn about %n format writing into const.  Remove
	obsolete comment.
	(format_char_info): Fix comments.

	* configure.in: Set float_format to m68k for all m68k targets that
	do not override LONG_DOUBLE_TYPE_SIZE.
	* config/float-m68k.h: New file.

Tue Jun  2 23:14:01 1998  Richard Henderson  <rth@cygnus.com>

	* jump.c (jump_optimize): Remove debug messages accidentally left in
	with the previous change.

Tue Jun  2 22:46:08 1998  Richard Henderson  <rth@cygnus.com>

	* expr.c (store_expr): Revert stray patch associated with
	1998-05-23 commit.

Tue Jun  2 21:59:01 1998  Richard Henderson  <rth@cygnus.com>

	* jump.c (rtx_unsafe_p): New function.
	(jump_optimize): Use it on if/then/else transformations and
	conditional move transformations.

Tue Jun  2 22:50:10 1998  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* fold-const.c (fold, case EQ_EXPR): When folding VAR++ == CONST
	or VAR-- == CONST construct a proper mask if VAR is a bitfield.
	Cope with CONST being out of range for the bitfield.

Tue Jun  2 22:28:31 1998  Bernd Schmidt  <crux@ohara.Informatik.RWTH-Aachen.DE>

	* expr.c (emit_move_insn_1): When moving complex values in several
	steps, emit a CLOBBER to show the destination dies.

Tue Jun  2 22:17:26 1998  Jeffrey A Law  (law@cygnus.com)

	* Makefile.in (site.exp): Use the object testsuite directory as
	the temporary directory.

	* expr.c (expand_expr, case ADDR_EXPR): Handle taking the
	address of an ADDRESSOF rtx.

1998-06-02  Mike Stump  <mrs@wrs.com>

	* expr.c (expand_builtin_setjmp): Handle BUILTIN_SETJMP_FRAME_VALUE.
	* i960.h (SETUP_FRAME_ADDRESSES, BUILTIN_SETJMP_FRAME_VALUE): Define.
	* i960.md (ret, flush_register_windows): Define.
	(nonlocal_goto): Likewise.  Nested function nonlocal gotos don't
	work yet.
	* tm.texi (BUILTIN_SETJMP_FRAME_VALUE): Document new macro.

Tue Jun  2 14:02:38 1998  Richard Henderson  <rth@cygnus.com>

	* alpha.md (divsi3, udivsi3, modsi3, umodsi3): Enable, and work
	around an OSF/1 library bug wrt sign-extension of inputs.

Tue Jun  2 13:02:44 1998  Richard Henderson  <rth@cygnus.com>

	* vax/netbsd.h (DWARF2_UNWIND_INFO): Must be undef, not defined 0.

Mon Jun  1 03:44:03 1998  Catherine Moore  <clm@cygnus.com>

	* config/sh/sh.h (MAX_OFILE_ALIGNMENT): Define.

	* varasm.c (assemble_variable): Augment alignment warning.

Mon Jun  1 12:14:28 1998  Michael Meissner  <meissner@cygnus.com>

	* config/fp-bit.c (_fp{add,div}_parts): Return correct IEEE result
	in the presence of IEEE negative 0's.

Sun May 31 16:11:41 1998  John Wehle  (john@feith.com)

	* reload.c (find_reloads): Record the existing mode if
	operand_mode == VOIDmode before replacing a register with
	a constant.
	* i386.md (tstsi, tsthi, tstqi, tstsf, tstdf, tstxf): Set
	i386_compare_op1 to const0_rtx for the benefit of the
	conditional move patterns.
	(movsicc, movhicc, movsfcc, movdfcc, movxfcc, movdicc): Rewrite
	based on suggestions from Jim Wilson.

Sun May 31 00:44:02 1998  Jeff Law  (law@cygnus.com)

	* version.c: Bump for snapshot.

Sun May 31 00:34:17 1998  Bruce Korb  <korbb@datadesign.com>

	* Makefile.in (fixinc.sh): Update rules again.

Sun May 31 00:27:47 1998  Jeffrey A Law  (law@cygnus.com)

	* extend.texi: Bring back reference to trampoline paper.

Sun May 31 00:22:34 1998  Ulrich Drepper  <drepper@cygnus.com>

	* Makefile.in (USER_H): Add stdbool.h.
	* ginclude/stdbool.h: New file.

Fri May 29 01:48:25 1998  Jeffrey A Law  (law@cygnus.com)

	* jump.c (thread_jumps): Do not look at the NOTE_LINE_NUMBER
	of a non-note insn.

	* gcse.c (pre_delete): Fix code to determine the mode of
	the reaching pseudo register.

Fri May 29 01:07:28 1998  Bernd Schmidt  <crux@Pool.Informatik.RWTH-Aachen.DE>

	* Makefile.in (GEN): Add gencheck.
	(STAGESTUFF): Add tree-check.h and gencheck.

Fri May 29 00:57:37 1998  Bruce Korb  <korbb@datadesign.com>

	* Makefile.in (cstamp-h.in): Remove before trying to recreate.
	(fixinc.sh): Set some additional environment variables before
	calling mkfixinc.sh.

Thu May 28 12:57:05 1998  Jeffrey A Law  (law@cygnus.com)

	* reload.c (find_reloads): Do not force a reloads of match_operators.

Thu May 28 10:22:22 1998  Andrew MacLeod  <amacleod@cygnus.com>

	* except.h (remove_handler): Add new prototype.
	* except.c (remove_handler): New function to remove handlers
	from an exception region.
	* flow.c (find_basic_blocks_1): Remove handlers from regions when
	handler label is deleted; remove exception regions with no handlers.

Thu May 28 09:36:39 1998  Michael Meissner  <meissner@cygnus.com>

	* except.h (rtx): Define rtx type correctly if needed.
	* function.h (rtx): Likewise.
	(tree): Define tree type correctly if needed.

	* c-pragma.c (toplevel): Include rtl.h.

	* stor-layout.c (toplevel): Move include of rtl.h before
	except.h.

	* Makefile.in (c-pragma.o): Add except.h, rtl.h dependencies.
	(tree.o): Add except.h dependency.

Wed May 27 22:02:40 1998  Jeffrey A Law  (law@cygnus.com)

	* reload1.c: Revert accidental checkin.

	* configure.lang: Fix thinko when adding a definition for
	target_alias to the Makefile.

Wed May 27 02:50:00 1998  Catherine Moore  (clm@cygnus.com)

	* config/sparc/lb1spc.asm (.rem and .urem): Replace
	routines.

Wed May 27 02:48:31 1998  Richard Earnshaw  (rearnsha@arm.com)

	* arm.c (arm_gen_constant): Rework to eliminate uninitialized
	variable warnings.  Don't generate scratch registers if only
	counting insns.
	(find_barrier): Eliminate unused variable SRC.

1998-05-27  Manfred Hollstein  <manfred@s-direktnet.de>

	* toplev.h (rtx_def): Provide global declaration to avoid
	`limited scope' warnings.

Tue May 26 23:47:52 1998  Mumit Khan  <khan@xraylith.wisc.edu>

	* Makefile.in (gencheck.o): Use HOST_CC.
	* i386/t-mingw32: New file.
	* configure.in (i386-*-mingw32*): Use.

Tue May 26 07:31:04 1998  Richard Earnshaw  (rearnsha@arm.com)

	* arm.c (bad_signed_byte_operand): New predicate function.
	* arm.h (PREDICATE_CODES): Add it to the list.
	* arm.md (*extendqi[sh]i_insn): Split any addresses that ldrsb
	can't handle.
	(define_split): Two new splits for above insns.

	* arm.c: Include toplev.h.
	(arm_override_options): Add parentheses around use of tune_flags.
	(arm_split_constant): Remove unused variable.
	(arm_gen_constant, arm_gen_movstrqi, add_constant): Likewise.
	(output_func_prologue, arm_expand_prologue): Likewise.
	(arm_canonicalize_comparison): Make I unsigned; rework constants
	accordingly.  Add missing parentheses around << operation.
	(arm_rtx_costs): Correctly parenthesize MULT costs.  Add a DEFAULT
	clause.
	({load,store}_multiple_sequence): Initialize BASE_REG.
	(select_dominance_cc_mode): Add DEFAULT clauses.
	(broken_move): Return zero if the destination is not a register.
	(arm_reorg): Move unused REGNO declaration into the dead code.
	* arm.h (CANONICALIZE_COMPARISON): Ensure OP1 is updated.

Mon May 25 22:49:56 1998  Jeff Law  (law@cygnus.com)

	* version.c: Bump for snapshot.

Mon May 25 11:56:24 1998  Jeff Law  (law@cygnus.com)

	* version.c: Bump for snapshot.

Mon May 25 14:00:13 1998  Dave Brolley  <brolley@cygnus.com>

	* cpperror.c (v_cpp_message): Remove static prototype.
	* cpplib.c (v_cpp_message): Move prototype to cpplib.h.
	* cpplib.h (v_cpp_message): Add protoptype.
	(stdarg.h,varargs.h): Needed for v_cpp_message prototype.

Sun May 24 20:36:15 1998  Jeff Law  (law@cygnus.com)

	* version.c: Bump for snapshot.

Sun May 24 02:08:57 1998  Jeff Law  (law@cygnus.com)

	* version.c: Bump for snapshot.

1998-05-24  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* m68k.h: Declare more functions used in macros.
	(REG_CLASS_CONTENTS): Completely embrace initializer.
	* m68k.md (adddi3, subdi3): Add abort call to avoid warning
	about returning no value.
	* cse.c (find_best_addr): Declare p and found_better only if
	needed.
	* dbxout.c (dbxout_continue): Define only if DBX_CONTIN_LENGTH > 0.
	* dwarfout.c (string_length_attribute): #if 0 away.
	* function.c (expand_function_end): Define varible blktramp only
	if needed.
	* jump.c (find_insert_position): Define only if !HAVE_cc0.
	* loop.c (combine_givs_p): Define variable tem only if needed.
	* real.c: Comment out unused functions eabs, eround,
	e{24,53,64,113}toasc and eiinfin.

Sat May 23 23:44:53 1998  Alexandre Oliva  <oliva@dcc.unicamp.br>

	* Makefile.in (boostrap2-lean, bootstrap3-lean,
	bootstrap4-lean): New targets.

Sat May 23 23:35:14 1998  Jeffrey A Law  (law@cygnus.com)

	* warn_summary, test_summary: Moved into the contrib directory.

1998-05-23  Manfred Hollstein  <manfred@s-direktnet.de>

	* Makefile.in (ENQUIRE_CFLAGS, ENQUIRE_LDFLAGS): Move down to the end
	of the Makefile.
	(FLOAT_H_TEST): Likewise.
	(ENQUIRE): Likewise.
	(float.h-nat): Likewise.
	(float.h-cross): Likewise.
	(enquire): Likewise.
	(enquire.o): Likewise.
	(stmp-int-hdrs): Fix comment about enquire; depend upon gfloat.h.
	(stmp-headers): Move actions to stmp-int-hdrs, retaining only a
	no-op.
	(FLOAT_H): Remove old float.h-nat version; move current definition
	to CROSS_FLOAT_H location.
	(all.cross): Remove comments about enquire stuff.

	* Makefile.in (all.cross): Swap $(LIBGCC) and $(STMP_FIXPROTO).
	(rest.encap): Likewise.
	(libgcc2.ready): Depend upon $(STMP_FIXPROTO)

	* toplev.h (tree_node): Provide global declaration to avoid
	`limited scope' warnings.

Sat May 23 23:23:35 1998  Robert Lipe  <robertl@dgii.com>

	* test_summary: Display section breaks for each entry
	in a multilibbed target's output.

1998-05-23  Richard Henderson  <rth@cygnus.com>

	* expr.c (expand_expr): For {BITFIELD,COMPONENT,ARRAY}_REF, if the
	offset's mode is not ptr_mode, convert it.

1998-05-22  Jason Merrill  <jason@yorick.cygnus.com>

	* fold-const.c (ssize_binop): New fn.
	* tree.h: Declare it.

Fri May 22 03:42:05 1998  Richard Earnshaw  (rearnsha@arm.com)

	* genextract.c (print_path): Handle zero-length path as a special
	case.

Fri May 22 01:38:07 1998  Hans-Peter Nilsson  <hp@axis.se>

	* cplus-dem.c (MBUF_SIZE): Bumped from 512 to 32767.

Fri May 22 00:57:00 1998  Bernd Schmidt  (crux@pool.informatik.rwth-aachen.de>

	* final.c (JUMP_TABLES_IN_TEXT_SECTION): Provide a default value.
	(shorten_branches, final_scan_insn): Test value of
	JUMP_TABLES_IN_TEXT_SECTION instead of just testing whether it
	is defined.
	* tm.texi (JUMP_TABLES_IN_TEXT_SECTION): Corresponding changes.
	* arm/coff.h: Define JUMP_TABLES_IN_TEXT_SECTION to 1.
	* arm/tcoff.h: Likewise.
	* i386/386bsd.h: Likewise.
	* i386/freebsd-elf.h: Likewise.
	* i386/freebsd.h: Likewise.
	* i386/netbsd.h: Likewise.
	* i386/ptx4-i.h: Likewise.
	* i386/sysv4.h: Likewise.
	* pa/pa.h: Likewise.
	* rs6000/linux.h: Likewise.
	* rs6000/rs6000.h: Likewise.
	* sh/sh.h: Likewise.
	* sparc/sp64-elf.h: Likewise.
	* v850/v850.h: Likewise.
	* rs6000/sysv4.h: Define JUMP_TABLES_IN_TEXT_SECTION to 0.
	* i386/linux.h: Define JUMP_TABLES_IN_TEXT_SECTION to (flag_pic).

Thu May 21 19:50:13 1998  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* regmove.c (gen_add3_insn): New function.
	(fixup_match_2): Use it instead of calling gen_addsi3.

Thu May 21 23:09:50 1998  Jeffrey A Law  (law@cygnus.com)

	* Makefile.in (gencheck): Depend on HOST_LIBDEPS.

	* alias.c (rtx_equal_for_memref_p): Handle SCRATCH as a memory
	address.

Thu May 21 20:18:13 1998  Martin von Löwis  <loewis@informatik.hu-berlin.de>

	* Makefile.in (TREE_H): Add tree-check.h.
	(tree-check.h, gencheck): New targets.
	* gencheck.c: New file.
	* tree.c (tree_check, tree_class_check): New functions.
	* tree.h (TREE_CHECK, TREE_CLASS_CHECK): Define.
	(TYPE_CHECK, DECL_CHECK): Define.
	Modify all access macros to use generated checking macros.

Wed May 20 23:44:28 1998  John Wehle  (john@feith.com)

	* acconfig.h (HAVE_GAS_MAX_SKIP_P2ALIGN): New tag.
	* configure.in: Check for it.
	* i386/gas.h (ASM_OUTPUT_MAX_SKIP_ALIGN): Use it.
	* final.c (uid_align, uid_shuid, label_align): Make static.
	(label_align): Change type to struct label_alignment pointer.
	(LABEL_TO_ALIGNMENT, shorten_branches): Update due to type change.
	(LABEL_TO_MAX_SKIP): Define.
	(LABEL_ALIGN_MAX_SKIP, LOOP_ALIGN_MAX_SKIP,
	LABEL_ALIGN_AFTER_BARRIER_MAX_SKIP): Provide defaults.
	(shorten_branches): Record the maximum bytes to skip when
	aligning a label.
	(final_scan_insn): Use the maximum bytes to skip when aligning a label
	if ASM_OUTPUT_MAX_SKIP_ALIGN is available.
	* i386.h (LOOP_ALIGN_MAX_SKIP,
	LABEL_ALIGN_AFTER_BARRIER_MAX_SKIP): Define.
	* i386.c (override_options): i386_align_jumps and i386_align_loops
	default to 4 if ASM_OUTPUT_MAX_SKIP_ALIGN is available.
	* invoke.texi: Document new i386 align-loops and align-jumps behavior.

1998-05-21  Mark Mitchell  <mmitchell@usa.net>

	* cplus-dem.c (do_type): Handle volatile qualification.

Thu May 21 12:23:17 1998  Per Bothner  <bothner@cygnus.com>

	* function.c (init_function_start): Don't call emit_line_note if
	lineno is 0.  (Can happen when compiling Java .class files.)

Thu May 21 19:50:13 1998  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* reload1.c (reload_reg_free_for_value_p): Fix RELOAD_FOR_INPUT
	end of lifetime and RELOAD_FOR_OUTPUT start of lifetime.

Thu May 21 19:32:27 1998  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* combine.c (nonzero_bits): For paradoxical subregs, take
	LOAD_EXTENDED_OP into account.

Thu May 21 11:51:15 1998  Dave Brolley  <brolley@cygnus.com>

	* configure.in (extra_c_objs): Add prefix.o.
	(extra_cxx_objs): Extra objects for C++ with cpplib.
	* configure: Regenerate.

	* c-tree.h (get_directive_line): Different prototype for cpplib.
	(GET_DIRECTIVE_LINE): Macro wrapper for get_directive_line.

	* c-lex.h (get_directive_line): Not needed here for cpplib.

	* c-lex.c (yy_cur,yy_lim,yy_get_token): Move to c-common.c.
	(GET_DIRECTIVE_LINE): Move to c-common.c and rename to get_directive_line.

	* c-common.c (parse_in,parse_options,cpp_token): Declare for cpplib.
	(yy_cur,yy_lim,yy_get_token,get_directive,line): Moved here from c-lex.c

Thu May 21 09:04:42 1998  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* gengenrtl.c (type_from_format, accessor_from_format): Change
	type of parameter `c' from `char' to `int'.

Wed May 20 22:28:34 1998  Jeffrey A Law  (law@cygnus.com)

	* warn_summary, test_summary: New scripts from
	Kaveh Ghazi and Alexandre Oliva respectively.

	* gcse.c (current_function_calls_longjmp): Declare.

1998-05-20  Jason Merrill  <jason@yorick.cygnus.com>

	* dwarf2out.c (base_type_die): Use int_size_in_bytes.

Wed May 20 01:11:02 1998  Doug Evans  (devans@cygnus.com)
			  Jeff Law  (law@cygnus.com)

	* Global CSE and constant/copy propagation.
	* Makefile.in (OBJS): Add gcse.o.
	(STAGESTUFF): Add *.gcse.
	(gcse.o): Add dependencies.
	(mostlyclean): Remove *.gcse and */*.gcse.
	* gcse.c: New file.
	* loop.c (loop_optimize): Move call to init_alias_analysis.
	* recog.c (validate_replace_src): New function.
	* toplev.c (gcse_dump): New global variable.
	(flag_gcse, gcse_time): Likewise.
	(compile_file): Initialize gcse_time and clean out the gcse dump
	file if necessary.
	(rest_of_compilation): Call gcse_main as requested.  Dump RTL
	after gcse if requested.
	(main): Enable gcse for -O2 and above.  Handle -dG.  Enable gcse
	dumps for -da.
	* gcc.texi: Add gcse related internal documentation.
	* invoke.texi: Note new command line options for gcse.
	* tm.texi: Document AVOID_CCMODE_COPIES.
	* mips.h (AVOID_CCMODE_COPIES): Define.

Tue May 19 22:31:20 1998  Jeffrey A Law  (law@cygnus.com)

	* Makefile.in (deduced.h): Only run scan-types if $(SYSTEM_HEADER_DIR)
	exists.
	(stmp-fixproto): Simlarly for running fixproto.
	* cross-make (SYSTEM_HEADER_DIR): Now $(tooldir)/sys-include.

Tue May 19 19:08:52 1998  Jim Wilson  <wilson@cygnus.com>

	* config/mips/mips.c (double_memory_operand): Accept any MEM during
	reload when TARGET_64BIT.

Tue May 19 18:21:25 1998  Jim Wilson  <wilson@cygnus.com>

	Finish incomplete change started by Kenner.
	* configure.in (*-*-linux-gnu*): Delete NO_STAB_H from xm_defines.
	(powerpcle-*-cygwin32): Delete xm_defines.
	* final.c, mips-tfile.c, xcoffout.c, config/mips/mips.c: Use
	HAVE_STAB_H instead of NO_STAB_H.
	* config/xm-linux.h (NO_STAB_H): Delete.
	(HAVE_STAB_H): Undefine.
	* config/i386/xm-go32.h (NO_STAB_H): Delete.

1998-05-19  Jim Wilson  <wilson@cygnus.com>

	* dwarfout.c (dwarfout_file_scope_decl, case TYPE_DECL): Ignore
	LANG_TYPE trees with DECL_SOURCE_LINE of 0.

Tue May 19 15:07:54 1998  Todd Vierling  <tv@netbsd.org>

	* arm/netbsd.h: Ensure DWARF2_UNWIND_INFO is undefined.

Tue May 19 17:19:16 1998  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* reload1.c (reload_reg_free_for_value_p): New function.
	(allocate_reload_reg, choose_reload_regs): Use it.

Tue May 19 11:51:00 1998  Andrew MacLeod  (amacleod@cygnus.com)

	* except.c (expand_start_catch): Correct logic for when to
	generate a new handler label, and when to use the old one.

Tue May 19 11:08:52 1998  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* Makefile.in (print-rtl.o): Depend on bitmap.h.
	(dbxout.o): Depend on toplev.h.
	($(SCHED_PREFIX)sched.o): Likewise.
	($(out_object_file)): Likewise for system.h and toplev.h.
	(cppmain.o): Depend on gansidecl.h.
	(cpplib.o): Likewise.
	(cpperror.o): Likewise.
	(cppexp.o): Likewise.
	(cpphash.o): Likewise.
	(cppalloc.o): Likewise.
	(fix-header.o): Depend on cpplib.h and cpphash.h.
	(scan-decls.o): Depend on gansidecl.h.

	* basic-block.h (free_regset_vector): Add prototype.

	* cccp.c (check_precompiled): Mark parameter `fname' with
	ATTRIBUTE_UNUSED.
	(do_assert): Likewise for `op' and `keyword'.
	(do_unassert): Likewise.
	(do_line): Likewise for `keyword'.
	(do_error): Likewise for `op' and `keyword'.
	(do_warning): Likewise.
	(do_ident): Likewise for `keyword'.
	(do_pragma): Likewise for `limit', `op' and `keyword'.
	(do_sccs): Likewise.
	(do_if): Likewise for `keyword'.
	(do_elif): Likewise.
	(do_else): Likewise.
	(do_endif): Likewise.

	* collect2.c (getenv): Remove redundant prototype.
	(collect_exit, collect_execute, dump_file): Likewise.
	(dump_list): Wrap prototype and definition in COLLECT_EXPORT_LIST.
	(dump_prefix_list): Hide prototype and definition.

	* sparc.c: Include toplev.h.
	(intreg_operand): Mark parameter `mode' with ATTRIBUTE_UNUSED.
	(symbolic_memory_operand): Likewise.
	(sp64_medium_pic_operand): Likewise.
	(data_segment_operand): Likewise.
	(text_segment_operand): Likewise.
	(splittable_symbolic_memory_operand): Likewise.
	(splittable_immediate_memory_operand): Likewise.
	(eq_or_neq): Likewise.
	(normal_comp_operator): Likewise.
	(noov_compare_op): Likewise.
	(v9_regcmp_op): Likewise.
	(v8plus_regcmp_op): Likewise.
	(extend_op): Likewise.
	(cc_arithop): Likewise.
	(cc_arithopn): Likewise.
	(small_int): Likewise.
	(uns_small_int): Likewise.
	(clobbered_register): Likewise.
	(legitimize_pic_address): Likewise.
	(delay_operand): Likewise.
	(sparc_builtin_saveregs): Remove unused variable `stdarg'.

	* sparc.h (order_regs_for_local_alloc, eligible_for_return_delay,
	sparc_issue_rate, v8plus_regcmp_p): Add prototypes.

	* sparc.md (cmpdi_v8plus): Add abort for default case in switch.

	* cppalloc.c: Include gansidecl.h.

	* cpperror.c: Include stdarg.h/varargs.h and gansidecl.h.
	(cpp_file_line_for_message): Mark parameter `pfile' with
	ATTRIBUTE_UNUSED.
	(v_cpp_message): New function.
	(cpp_message): Use it.  Also convert to variable arguments.
	(cpp_fatal): Likewise.
	(cpp_pfatal_with_name): Constify parameter `name'.

	* cppexp.c: Move gansidecl.h before cpplib.h.
	* cpphash.c: Likewise.
	* cpphash.h (hashf, delete_macro): Add prototypes.

	* cpplib.c: Include stdarg.h/varargs.h and move gansidecl.h before
	cpplib.h.  Don't include errno.h.
	(update_path): Add arguments to prototype.
	(cpp_fatal, cpp_file_line_for_message, cpp_message, delete_macro,
	cpp_print_containing_files): Remove redundant prototypes.
	(cpp_hash_cleanup, add_import, append_include_chain,
	make_assertion, path_include, initialize_builtins,
	initialize_char_syntax, finclude, validate_else, comp_def_part,
	lookup_import, redundant_include_p, is_system_include,
	read_name_map, read_filename_string, open_include_file,
	check_macro_name, compare_defs, compare_token_lists,
	eval_if_expression, change_newlines): Add prototype arguments.
	(hashf): Remove redundant prototype.
	(read_token_list, free_token_list, safe_read, xcalloc, savestring,
	conditional_skip, skip_if_group): Add prototype arguments.
	(fdopen): Remove redundant prototype.
	(do_define, do_line, do_include, do_undef, do_error, do_pragma,
	do_ident, do_if, do_xifdef, do_else, do_elif, do_endif, do_sccs,
	do_once, do_assert, do_unassert, do_warning): Add prototype arguments.
	(struct directive): Add prototype arguments to function pointer
	member `func'.
	(handle_directive): Add missing arguments to call to `do_line'.
	(do_include): Mark parameters `unused1' and `unused2' with
	ATTRIBUTE_UNUSED.
	(do_line): Likewise for `keyword' and new parameters `unused1' and
	`unused2'.
	(do_error): Likewise for `keyword'.
	(do_warning): Likewise.  Also add missing argument `pfile' in call
	to cpp_pedwarn.
	(do_once): Mark parameter `keyword', `unused1' and `unused2' with
	ATTRIBUTE_UNUSED.
	(do_ident): Likewise for `keyword', `buf' and `limit'.
	(do_pragma): Likewise.  Also add missing arguments in call to do_once.
	(do_sccs): Mark parameter `keyword', `buf' and `limit' with
	ATTRIBUTE_UNUSED.
	(do_if): Likewise for `keyword'.
	(do_elif): Likewise.
	(eval_if_expression): Likewise for `buf' and `length'.
	(do_xifdef): Likewise for `unused1' and `unused2'.
	(do_else): Likewise for `keyword', `buf' and `limit'.
	(do_endif): Likewise.
	(parse_name): Add missing argument `pfile' in call to cpp_pedwarn.
	(cpp_handle_options): Remove superfluous NULL argument in call to
	cpp_fatal.
	(cpp_handle_options): Likewise.
	(do_assert): Mark parameter `keyword', `buf' and `limit' with
	ATTRIBUTE_UNUSED.
	(do_unassert): Likewise.
	(cpp_print_file_and_line): Add missing argument `pfile' in call to
	cpp_file_line_for_message.
	(v_cpp_error): New function.
	(cpp_error): Use it. Also accept variable arguments.
	(v_cpp_warning): New function.
	(cpp_warning): Use it. Also accept variable arguments.
	(cpp_pedwarn): Accept variable arguments.
	(v_cpp_error_with_line): New function.
	(cpp_error_with_line): Use it.  Accept variable arguments.
	(v_cpp_warning_with_line): New function.
	(cpp_warning_with_line): Use it.  Accept variable arguments.  Hide
	definition.
	(cpp_pedwarn_with_line): Accept variable arguments.
	(cpp_pedwarn_with_file_and_line): Likewise.
	(cpp_error_from_errno): Constify parameter `name'.  Add missing
	argument `pfile' in call to cpp_file_line_for_message.
	(cpp_perror_with_name): Constify parameter `name'.

	* cpplib.h: Define PARAMS() in terms of PROTO().
	(fatal): Remove redundant prototype.
	(cpp_error, cpp_warning, cpp_pedwarn, cpp_error_with_line,
	cpp_pedwarn_with_line, cpp_pedwarn_with_file_and_line,
	cpp_error_from_errno, cpp_perror_with_name, cpp_pfatal_with_name,
	cpp_fatal, cpp_message, cpp_pfatal_with_name,
	cpp_file_line_for_message, cpp_print_containing_files): Add
	arguments to prototypes.
	(scan_decls, cpp_finish): Add prototypes.

	* cppmain.c: Include gansidecl.h.
	(main): Remove unused variable `i'.

	* dbxout.c: Include toplev.h.

	* demangle.h (do_tlink, collect_execute, collect_exit,
	collect_wait, dump_file, file_exists): Add prototype.

	* dwarf2out.c (dwarf_type_encoding_name, decl_start_label): Hide
	prototype and definition.
	(gen_unspecified_parameters_die): Don't assign results of call to
	function new_die() to unused variable `parm_die'.
	(dwarf2out_line): Mark parameter `filename' with ATTRIBUTE_UNUSED.
	(dwarf2out_define): Likewise for `lineno' and `buffer'.

	* dwarfout.c (output_unsigned_leb128, output_signed_leb128): Hide
	prototype and definition.
	(output_die): Add prototype arguments to function pointer arg.
	(output_unspecified_parameters_die): Mark parameter `arg' with
	ATTRIBUTE_UNUSED.

	* except.c (output_exception_table_entry): Remove unused variable
	`eh_entry'.

	* except.h (expand_fixup_region_start, expand_fixup_region_end):
	Add prototypes.

	* expr.c (do_jump_by_parts_equality_rtx): Remove prototype.

	* expr.h (do_jump_by_parts_equality_rtx): Add prototype.

	* fix-header.c: Include stdarg.h/varargs.h, move gansidecl.h
	before cpplib.h, include cpphash.h, remove redundant prototype of
	cpp_fatal, don't define `const', add a prototype for `fatal'.
	(cpp_file_line_for_message): Add missing arguments `pfile'.
	(v_cpp_message): New function.
	(cpp_message): Use it.
	(v_fatal): New function.
	(fatal, cpp_fatal): Use it.
	(cpp_pfatal_with_name): Constify parameter `name'.

	* flow.c (free_regset_vector): Remove redundant prototype.

	* function.c (round_down): Wrap prototype and definition with
	macro ARGS_GROW_DOWNWARD.
	(record_insns): Wrap prototype and definition with
	defined (HAVE_prologue) || defined (HAVE_epilogue).

	* gansidecl.h (ATTRIBUTE_PRINTF_4, ATTRIBUTE_PRINTF_5): New macros.

	* gen-protos.c: Include gansidecl.h.
	(hashf): Don't make it static, constify parameter `name'.

	* genattrtab.c (check_attr_test): Change XEXP() to XSTR() to match
	specifier %s in calls to function `fatal'.

	* haifa-sched.c: Include toplev.h.
	(find_rgns): Remove unused variable `j'.

	* integrate.c (note_modified_parmregs): Mark parameter `x' with
	ATTRIBUTE_UNUSED.
	(mark_stores): Likewise.

	* jump.c (mark_modified_reg): Likewise.

	* output.h (insn_current_reference_address): Add prototype.
	(eh_frame_section): Likewise.

	* print-rtl.c: Include bitmap.h.

	* reload1.c (reload): Wrap variables `note' and `next' in macro
	PRESERVE_DEATH_INFO_REGNO_P.
	(forget_old_reloads_1): Mark parameter `ignored' with
	ATTRIBUTE_UNUSED.
	(choose_reload_regs): Remove unused variable `in'.
	(reload_cse_invalidate_mem): Mark parameter `ignore' with
	ATTRIBUTE_UNUSED.
	(reload_cse_check_clobber): Likewise.

	* rtl.h (expand_null_return, reg_classes_intersect_p): Add prototype.
	(mark_elimination): Fix typo in prototype.

	* scan-decls.c: Include gansidecl.h.

	* tree.h (using_eh_for_cleanups, supports_one_only): Add prototype.

Mon May 18 22:37:33 1998  Jeffrey A Law  (law@cygnus.com)

	* function.c (identify_blocks): Fix thinko when setting the
	block number for NOTE_INSN_BLOCK_END.

Mon May 18 15:30:42 1998  Nick Clifton  <nickc@cygnus.com>

	* config/v850/lib1funcs.asm: Add .text pseudo op to start of
	___udivsi3.

	* config/v850/lib1funcs.asm: Fix .size pseudo ops to use three
	underscores for the prefixes to the names of the maths functions.

	* dbxout.c (dbxout_parms): Revert to using DECL_ARG_TYPE.  Add
	comment explaining why.

Mon May 18 13:20:23 1998  Richard Henderson  <rth@cygnus.com>

	* tree.h (TYPE_SIZE_UNIT): New.
	(struct tree_type): Add size_unit member.
	* stor-layout.c (layout_type): Initialize it.
	* expr.c (get_inner_reference) [ARRAY_REF]: Use it.
	* tree.c (size_in_bytes, int_size_in_bytes): Likewise.

Mon May 18 12:07:37 1998  Richard Earnshaw  (rearnsha@arm.com)

	* stor-layout.c (layout_record): Fix off-by-one error when checking
	length of the TYPE_BINFO vector.

Mon May 18 10:59:23 1998  Nick Clifton  <nickc@cygnus.com>

	* dbxout.c (dbxout_parms): Use TREE_ARG to compute the type of a
	function parameter passed in memory.

Mon May 18 09:02:09 1998  Robert Lipe  <robertl@dgii.com>

	* dwarfout.h, dwarf2out.h, dbxout.h, sdbout.h: New files.
	Prototypes for externally used functions in respective C files.
	* dwarfout.c, dbxout.c, dwarf2out.c, sdbout.c, toplev,c,
	final.c: Include above files.
	* Makefile.in (toplev.o): Add dependency for above four headers.
	(final.o): Likewise.
	(dwarfout.o, dbxout.o, dwarf2out.o, sdbout.o): Depend on four
	respective header files.

Mon May 18 01:23:33 1998  Jeffrey A Law  (law@cygnus.com)

	* Makefile.in (TARGET_TOOLPREFIX): No longer define.
	(AR_FOR_TARGET, RANLIB_FOR_TARGET): Define to use versions in
	the build tree if they exist.
	(AR, AR_FLAGS, OLDAR, OLDAR_FLAGS, RANLIB, RANLIB_TEST): Update
	appropriately.
	(objdir): Let configure substitute value.
	(FLOAT_H): Let configure select a pre-built version from the
	config subdir.
	* build-make (INSTALL_TARGET, ALL): Disable, no longer needed.
	* configure.in: Substitute for objdir.

	* Makefile.in (build_canonical, host_canonical): Let configure
	substitute values for these variables.
	* configure.in: Substitute for build_canonical, host_canonical
	and target_subdir in generated Makefile.

	* output.h (find_basic_blocks): Declare.
	(free_basic_block_vars, set_block_num, life_analysis): Likewise.

	* Makefile.in (BISON): Use bison from the build tree if it exists.
	(FLEX): Similarly.

Mon May 18 00:08:19 1998  Nick Clifton  <nickc@cygnus.com>

	* gcc.c (SWITCH_CURTAILS_COMPILATION): Definition.
	(DEFAULT_SWITCH_CURTAILS_COMPILATION): True for options -S and -c.
	(process_command): If HAVE_EXECUTABLE_SUFFIX is defined then scan
	command line arguments to see if an executable is not being
	created, and if so - do not append the suffix.

	* tm.texi (SWITCH_CURTAILS_COMPILATION): Add description of new
	driver macro.

Sun May 17 23:59:45 1998  John Wehle  (john@feith.com)

	* i386.h (ALIGN_DFmode): Delete.
	(CONSTANT_ALIGNMENT): Define.
	* varasm.c (force_const_mem): Use it.

Sun May 17 19:31:05 1998  Richard Henderson  <rth@cygnus.com>

	* alpha.c (alpha_emit_conditional_branch): Clear cmp_code after
	using it with swap_condition, not before.

Sun May 17 13:44:32 1998  Jim Wilson  <wilson@cygnus.com>

	* alias.c (mode_alias_check): Delete.
	(true_dependence, anti_dependence, output_dependence): Revert April 21
	change.

Sun May 17 08:45:21 1998  Krister Walfridsson  <cato@df.lth.se>

	* toplev.c (output_lang_identify): Enable prototype and definition.

Sun May 17 01:12:27 1998  Jeff Law  (law@cygnus.com)

	* version.c: Bump for snapshot.

Sat May 16 23:20:32 1998  Richard Henderson  <rth@cygnus.com>

	* alpha/osf.h (HAVE_STAMP_H): Define.
	* alpha.c: Use it.
	* alpha/netbsd.h, alpha/netbsd-elf.h: New files.
	* configure.in (alpha*-*-netbsd*): New.
	Based on patches from Paul H. Anderson <pha@pdq.com>.

	* configure.in (alpha*-*-linux-*): Kill xm_defines.
	(alpha*-*-linux-gnulibc1*) [fixincludes]: Define.
	* alpha/xm-linux.h: Remove file.

Sat May 16 18:32:45 1998  Doug Evans  <devans@canuck.cygnus.com>

	* dbxout.c (dbxout_parms): If mode of type of parameter living
	in memory doesn't match mode of DECL_RTL, make big endian correction.

Fri May 15 21:40:06 1998  John Wehle  (john@feith.com)

	* i386.md (movdi-1, movdi): Rewrite based on SI move patterns.

Fri May 15 18:55:22 1998  Jason Merrill  <jason@yorick.cygnus.com>

	* tree.h (BINFO_SIZE, TYPE_BINFO_SIZE): New macros.
	* stor-layout.c (layout_record): Set it.

Fri May 15 18:49:30 1998  Mark Mitchell  <mmitchell@usa.net>

	* toplev.c (rest_of_compilation): Don't defer nested functions.

Fri May 15 17:42:52 1998  Bob Manson  <manson@charmed.cygnus.com>

	* config/rs6000/rs6000.c (rs6000_stack_info): Align the stack bottom
	to an 8-byte boundary if info_ptr->fpmem_p.

Fri May 15 17:36:11 1998  Bill Moyer  <ttk@cygnus.com>

	* loop.c (basic_induction_var): Added test preventing
	CCmode parameter passed to convert_modes().

Fri May 15 17:26:18 1998  Alexandre Petit-Bianco  <apbianco@cygnus.com>

	* expr.c (expand_expr, case EXPR_WITH_FILE_LOCATION): Save/restore
	input_filename and lineno around expand_expr call.  Set them to values
	in WFL before expand_expr call.

Fri May 15 12:44:57 1998  Benjamin Kosnik  <bkoz@rhino.cygnus.com>

	* stor-layout.c (set_sizetype): Set TYPE_NAME on bitsizetype.

Fri May 15 07:20:03 1998  Mark Mitchell  <mmitchell@usa.net>

	* fold-const.c (constant_boolean_node): New function.
	(fold): Use it.

Fri May 15 11:21:16 1998  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* sh.c (gen_shl_and): Don't sign extend constant for kind two.
	Abort if trying to split kind 3 or 4 outside of combine.

Fri May 15 01:47:37 1998  Jeffrey A Law  (law@cygnus.com)

	* mips.c (print_operand, case 'x'): Use HOST_WIDE_INT_PRINT_HEX.

Fri May 15 01:42:45 1998  Mumit Khan  <khan@xraylith.wisc.edu>

	* objc/Make-lang.in (OBJC_O): Add missing exeext.
	(libobjc.a, runtime-info.h): Likewise.

Fri May 15 01:29:39 1998  John Wehle  (john@feith.com)

	* i386.h (DATA_ALIGNMENT): Define.

Fri May 15 05:35:37 1998  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* reload1.c (delete_output_reload): Ignore single USE that
	was emitted for the pseudo use of this INSN.
	If the no reference to REG between OUTPUT_RELOAD_INSN and INSN
	remains, we can always delete OUTPUT_RELOAD_INSN.

Thu May 14 18:38:50 1998  Jim Wilson  <wilson@cygnus.com>

	* reload.c (find_reloads): Don't penalize SCRATCH output reload.

Thu May 14 15:10:30 1998  Jeffrey A Law  (law@cygnus.com)

	* Makefile.in (expr.o): Remove dependency on deleted modemap.def file.

Thu May 14 16:30:47 1998  Andrew MacLeod  <amacleod@cygnus.com>

	* eh-common.h: New file for basic EH data structures.
	* except.h: Various prototypes and structures for NEW_EH_MODEL.
	* function.h (struct function): Add a struct eh_stack for the catch
	clause stack.
	* except.c (gen_exception_label): New function to generate an
	exception label.
	(push_eh_entry): Use gen_exception_label() and init 'label_used' field.
	(push_entry): New function to push an existing entry onto a stack.
	(receive_exception_label): New function to emit the code required
	at the start of all catch blocks.
	(struct func_eh_entry): New structure for maintaining handlers
	associated with EH regions.
	(new_eh_region_entry): New function to register an EH region.
	(add_new_handler): New function to register a handler with a region.
	(get_new_handler): Creates  anew handler entry for registering.
	(find_func_region): New function to convert a NOTE eh region number
	to an Eh region index.
	(get_first_handler): New function to get the first handler in a region.
	(clear_function_eh_region): New function to release memory.
	(duplicate_handlers): New function to duplicate a list of handlers.
	(expand_eh_region_end): Create a new region entry node as well.
	(expand_leftover_cleanups): Call receive_exception_label() and
	register the cleanup as a handler to the current region.
	(expand_start_catch): New function to start a catch clause.
	(expand_end_catch): New function to end a catch clause.
	(expand_start_all_catch): Restructure to not do the equivalent of
	what expand_start_catch() does now. Push the exception region being
	handled onto the catch stack.
	(output_exception_table_entry): Issue an entry for each handler
	associated with a region.
	(set_exception_lang_code): New function for setting the language code.
	(set_exception_version_code): New function to set the version number.
	(output_exception_table): Output version and language codes.
	(find_exception_handler_labels): Find handler labels using new scheme.
	(is_exception_handler_label): New function, returns 1 if label is
	present as a handler in some exception region.
	(check_exception_handler_labels): Use the new scheme.
	(init_eh_for_function): Initialize the catch stack.
	(save_eh_status): Save the catch stack.
	(restore_eh_status): Restore the catch stack.
	(scan_region): Don't remove unreferenced handler label. Flow does it.
	(get_reg_for_handler): New function to get the eh_context pointer
	passed by __throw.
	(expand_builtin_eh_stub): Changes required for NEW_EH_MODEL only.
	* final.c (final_scan_insn): With NEW_EH_MODEL, add EH table
	entry when processing END region rather that START region.
	* flow.c (find_basic_blocks_1): Find all potential handler regions
	now that we don't automatically know what the labels might be.
	Let scan_region() remove unreferenced EH BEGIN/END labels.
	* integrate.c (get_label_from_map): Put inlined labels onto the
	permanent obstack since we don't know which ones might be exception
	labels.
	(save_for_inline_copying): Make new copies of all the handlers.
	(expand_inline_function): Make new copies of all the handlers.
	* libgcc2.c: Remove local struct decls, and include eh-common.h.
	(find_exception_handler): With NEW_EH_MODEL the first matching
	region we find is the right one. Add eh_info as a new parameter.
	(__throw): Pass eh_info to find_exception_handler. Set handler
	and pass use different regs  under NEW_EH_MODEL.

Thu May 14 12:58:21 1998  Jim Wilson  <wilson@cygnus.com>

	* i960.h (hard_regno_mode_ok): Changed to function from array of
	unsigned.
	(HARD_REGNO_MODE_OK): Call function instead of testing bit.
	* i960.c (hard_regno_mode_ok): Changed to function from array of
	unsigned.

Thu May 14 08:41:46 1998  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* reload.c (remove_replacements): New function.
	* reload.h (remove_replacements): Declare.
	* reload1.c (choose_reload_regs): Disable some reloads that
	belong to inherited reloads.

Thu May 14 02:17:17 1998  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* loop.c (scan_loop): Don't call move_movables for optimize_size.

	* reload1.c (merge_assigned_reloads): When merging, reset
	reload_spill_index for the eliminated reload.

Wed May 13 17:51:13 1998  Jeffrey A Law  (law@cygnus.com)

	* haifa-sched.c (schedule_insns): Fix merge goof.

1998-05-13  Jim Wilson  <wilson@cygnus.com>

	* varasm.c (make_decl_rtl): Revert April 1 change.
	* alpha/alpha.h, alpha/win-nt.h, arm/arm.h, i386/unix.h, i960/i960.h,
	m68k/linux.h, pa/pa.h, sparc/sparc.h, vax/vax.h (ASM_OUTPUT_MI_THUNK):
	Get function name from the SYMBOL_REF in the DECL_RTL, not from
	DECL_ASSEMBLER_NAME.
	* i386/winnt.c (gen_stdcall_suffix): Comment for questionable use of
	DECL_ASSEMBLER_NAME.

Wed May 13 13:09:19 1998  Jim Wilson  <wilson@cygnus.com>

	* i386.c (notice_update_cc, output_float_compare): Disable
	TARGET_CMOVE support.

Wed May 13 15:28:59 1998  Michael Meissner  <meissner@cygnus.com>
			  Jeff Law  <law@cygnus.com>

	* rtlanal.c (find_reg_note): Ignore notes that are not on on
	insns of class 'i'.
	(find_regno_note): Likewise.

	* Makefile.in (stor-layout.o): Depend on except.h.
	(varasm.o, function.o): Likewise.
	(expr.o): Depend on except.h, modemap.def and hard-reg-set.h.

	* Makefile.in (HOST_RTL): Add $(HOST_PREFIX)bitmap.o.
	(rtl.o, emit-rtl.o): Add dependency on bitmap.h.
	($(HOST_PREFIX_1)rtl.o): Likewise.
	($(HOST_PREFIX_1)bitmap.o): New host object.
	* emit-rtl.c (toplevel): Include bitmap.h.
	(gen_rtx): Handle 't' and 'b' nodes.
	* print-rtl.c (print_rtx): Handle printing NOTE_INSN_LIVE notes.
	Print block number for block begin/end notes.  Print 't' type
	nodes as a pointer.  Know that the 3rd argument of live range
	start/stop notes is really a range_info rtx.  If type is 'b', print
	out argument as a bitmap.
	* rtl.c: Include bitmap.c.
	(copy_rtx): Copy tree nodes as is.  Copy bitmaps if type is 'b'.
	(note_insn_name): Add NOTE_INSN_RANGE_{START,END}, NOTE_INSN_LIVE.
	* rtl.def (RANGE_LIVE): New node to hold live information while we
	recalculate the basic blocks.
	(RANGE_REG, RANGE_INFO): New rtl types for live range splitting.
	(RANGE_VAR): New node, to hold information saved in symbol node for New
	communicating live range information to the debug output functions.
	* rtl.h (rtunion_def): Add rttree and rtbit fields.
	(XBITMAP, XTREE): New accessor macros.
	(NOTE_LIVE_INFO): Overload NOTE_SOURCE_FILE for NOTE_INSN_LIVE notes.
	(NOTE_RANGE_INFO): Similarly for NOTE_INSN_RANGE_{START,END} notes.
	(NOTE_BLOCK_LIVE_RANGE_BLOCK): Define.
	(NOTE_INSN_RANGE_START, NOTE_INSN_RANGE_END, NOTE_INSN_LIVE): New notes.
	(RANGE_LIVE_{BITMAP,ORIG_BLOCK}): New accessor macros.
	(RANGE_REG_{SYMBOL,BLOCK}_NODE, RANGE_VAR_*): New accessor macros.
	(RANGE_INFO_*): Likewise.
	* sched.c (sched_analyze): Keep live range start/stop notes.
	(unlink_other_notes): Likewise.
	* haifa-sched.c (sched_analyze): Keep live range start/stop notes.
	(unlink_other_notes): Likewise.
	* tree.h (BLOCK_LIVE_RANGE_{START,END,VAR_FLAG}): New accessor macros.
	(BLOCK_LIVE_RANGE_FLAG): Likewise.
	(DECL_LIVE_RANGE_RTL): Likewise.
	(struct tree_block): Add live_range_flag, live_range_var_flag,
	live_range_start and live_range_end.
	(struct tree_decl): Add live_range_rtl field.
	* gengenrtl.c (type_from_format): Handle 'b' and 't'.
	(accessor_from_format): Likewise.

	* haifa-sched.c (schedule_block): Make verbose output line up.
	Also add a blank line in printing the individual ready lists.

Wed May 13 15:43:44 1998  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* Makefile.in (c-lang.o): Depend on c-tree.h, c-lex.h and toplev.h.
	(c-lex.o): Depend on output.h.
	(c-common.o): Likewise.
	(stmt.o): Likewise.
	(calls.o): Likewise.
	(integrate.o): Depend on toplev.h.
	(regclass.o): Depend on output.h.
	(final.o): Depend on reload.h.

	* c-common.c: Include output.h.
	(check_format_info): Remove unused variable `integral_format'.

	* c-decl.c (print_lang_decl): Mark parameters `file', `node' and
	`indent' with ATTRIBUTE_UNUSED.
	(print_lang_type): Likewise.
	(maybe_build_cleanup): Likewise for parameter `decl'.
	(copy_lang_decl): Likewise for parameter `node'.

	* c-lang.c: Include c-tree.h, c-lex.h and toplev.h.
	(lang_print_xnode): Mark parameters `file', `node' and `indent'
	with ATTRIBUTE_UNUSED.
	(lookup_interface): Likewise for parameter `arg'.
	(is_class_name): Likewise.
	(maybe_objc_check_decl): Likewise for parameter `decl'.
	(maybe_objc_comptypes): Likewise for parameters `lhs', `rhs' and
	`reflexive'.
	(maybe_objc_method_name): Likewise for parameter `decl'.
	(build_objc_string): Likewise for parameters `len' and `str'.

	* c-lex.c: Include output.h.

	* c-lex.h (position_after_white_space): Correct typo in prototype.

	* c-tree.h (finish_file, c_expand_start_cond, c_expand_start_else,
	c_expand_end_cond, init_iterators): Add prototypes.

	* caller-save.c (set_reg_live): Mark parameters `reg' and `setter'
	with ATTRIBUTE_UNUSED.

	* calls.c: Include output.h.

	* cccp.c (pipe_closed): Mark parameter `signo' with
	ATTRIBUTE_UNUSED.

	* combine.c: Move inclusion of expr.h to after insn-config.h.

	* iris6.h (ASM_IDENTIFY_GCC, ASM_IDENTIFY_LANGUAGE): Don't define
	as empty, rather define as ((void)0).

	* sparc.c (sparc_check_64): Add braces around ambiguous `else'.
	Add parentheses around assignment used as truth value.

	* cplus-dem.c (squangle_mop_up): Change return type to void.
	(internal_cplus_demangle): Remove unused parameter `options'.
	All callers changed.
	(cplus_demangle_opname): Remove function wide variable `int i' and
	replace with `size_t i' at each location where it is used.
	(cplus_demangle_opname): Change type of `i' from int to size_t.

	* cppexp.c (right_shift): Mark parameter `pfile' with
	ATTRIBUTE_UNUSED.

	* cpphash.c (cpp_lookup): Likewise.
	(cpp_hash_cleanup): Likewise.

	* cpplib.c (parse_name): Add a prototype and make it static.
	(null_underflow): Mark parameter `pfile' with ATTRIBUTE_UNUSED.
	(null_cleanup): Likewise for parameters `pbuf' and `pfile'.
	(macro_cleanup): Likewise for parameter `pfile'.
	(file_cleanup): Likewise.

	* cpplib.h (cpp_reader_init, cpp_options_init, cpp_start_read,
	cpp_read_check_assertion, skip_rest_of_line): Add prototypes.

	* crtstuff.c (force_to_data, __CTOR_LIST__, force_to_data,
	__DTOR_END__, __FRAME_END__): Mark with ATTRIBUTE_UNUSED.

	* cse.c (cse_check_loop_start): Mark parameter `set' with
	ATTRIBUTE_UNUSED.

	* dbxout.c (flag_minimal_debug, have_used_extensions,
	source_label_number): Move inside macro wrapper check against
	defined (DBX_DEBUGGING_INFO) || defined (XCOFF_DEBUGGING_INFO).

	* dwarf2out.c (gen_entry_point_die): Hide prototype and definition.

	* except.h (doing_eh): Provide prototype.

	* expr.c: Move inclusion of expr.h to after insn-config.h.

	* final.c: Include reload.h.
	(shorten_branches): Cast the first argument of bzero to char *.

	* fix-header.c (cpp_print_containing_files): Mark parameter
	`pfile' with ATTRIBUTE_UNUSED.
	(cpp_fatal): Likewise.

	* flow.c (find_basic_blocks_1): Cast the first argument of bzero
	to char *.

	* genattrtab.c (make_length_attrs): Change the type of variable
	`i' from int to size_t.
	(zero_fn): Mark parameter `exp' with ATTRIBUTE_UNUSED.
	(one_fn): Likewise.

	* genextract.c (main): When generating insn-extract.c, mark
	variable `junk' with ATTRIBUTE_UNUSED.

	* gengenrtl.c (gencode): When generating genrtl.c, cast the first
	argument of bzero to char*.

	* integrate.c: Include toplev.h.

	* libgcc2.c: Wrap `struct exception_table' and
	`find_exception_handler' in macro DWARF2_UNWIND_INFO.

	* objc/Make-lang.in (objc-act.o): Depend on toplev.h.

	* objc/objc-act.c: Include toplev.h.
	(lang_print_xnode): Mark parameters `file', `node' and `indent'
	with ATTRIBUTE_UNUSED.
	(finish_protocol): Likewise for parameter `protocol'.

	* output.h (declare_weak): Add prototype.
	(decode_reg_name): Don't wrap with TREE_CODE macro.
	(assemble_alias): Add prototype.

	* regclass.c: Include output.h.

	* reload.h (reloads_conflict): Add prototype.

	* rtl.h (print_rtl_single, mark_elimination, reg_class_subset_p,
	output_func_start_profiler): Add prototypes.

	* rtlanal.c (reg_set_p_1): Mark parameters `x' and `pat' with
	ATTRIBUTE_UNUSED.

	* scan-decls.c: Include scan.h.

	* scan.h (recognized_function, recognized_extern): Add prototypes.

	* stmt.c: Include output.h.

	* toplev.c (error_for_asm, warning_for_asm): Remove prototypes.
	(output_lang_identify): Hide prototype and definition.
	(float_signal): Mark parameter `signo' with ATTRIBUTE_UNUSED.
	(pipe_closed): Likewise.

	* toplev.h (count_error, strip_off_ending, error_for_asm,
	warning_for_asm): Add prototypes.

Wed May 13 12:54:19 1998  Michael Meissner  <meissner@cygnus.com>

	* toplev.c (rest_of_compilation): "Charge" final for any time
	doing various cleanup operations after finishing compilation
	of a function.

	* flow.c (dump_flow_info): Also print number of sets and
	whether or not the pseudo is a user variable.

	* flow.c (reg_n_max): New global variable.
	* regclass.c (allocate_reg_info): Keep reg_n_max up to date.
	Delete regno_max variable.
	* regs.h (REG_N_CHECK): Define.
	(REG_N_REFS, REG_N_SETS, REG_N_DEATHS): Use REG_N_CHECK.
	(REG_N_CHANGES_SIZE, REG_N_CALLS_CROSSED, REG_LIVE_LENGTH): Likewise.
	(REGNO_FIRST_UID, REGNO_LAST_UID, REGNO_LAST_NOTE_UID): Likewise.

Wed May 13 12:54:19 1998  Martin von Löwis  <martin@mira.isdn.cs.tu-berlin.de>

	* acconfig.h (ENABLE_CHECKING): Undefine.
	* configure.in (--enable-checking): New option.

Wed May 13 08:52:08 1998  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* reload1.c (merge_assigned_reloads): Can merge
	RELOAD_FOR_INPUT_ADDRESS and RELOAD_FOR_OTHER_ADDRESS even
	if RELOAD_FOR_INPUT with the same reload_reg_rtx is present.

Tue May 12 20:05:57 1998  Jim Wilson  <wilson@cygnus.com>

	* collect2.c (main): Ignore do_collecting when COLLECT_EXPORT_LIST.

Wed May 13 03:23:45 1998  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* reload1.c (gen_reload): Create REG_EQUIV notes.

Tue May 12 22:21:07 1998  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* reload1.c (reload): Fix check for USEs to use code of pattern.
	(choose_reload_regs): Remove dead variable use_insn.

Tue May 12 14:04:49 1998  Jeffrey A Law  (law@cygnus.com)

	* pa.h (DBX_CONTIN_LENGTH): Reduce to 3000 bytes.

Tue May 12 15:16:02 1998  Michael Meissner  <meissner@cygnus.com>

	* haifa-sched.c (HAIFA_INLINE): Define to be __inline unless
	already defined.
	(find_insn_{,mem_}list): Use HAIFA_INLINE, not __inline.
	(insn_{unit,issue_delay}): Likewise.
	(blockage_range): Likewise.
	(actual_hazard{,_this_instance}): Likewise.
	(schedule_unit): Likewise.
	(potential_hazard): Likewise.
	(insn_cost): Likewise.
	(swap_sort): Likewise.
	(queue_insn): Likewise.
	(birthing_insn_p): Likewise.
	(adjust_priority): Likewise.
	(get_block_head_tail): Likewise.
	(init_rgn_data_dependences): Likewise.

Tue May 12 10:27:54 1998  Klaus Kaempf  <kkaempf@progis.de>

	* alpha/vms.h (COMMON_ASM_OP, ASM_OUTPUT_ALIGNED_COMMON): Define.

Tue May 12 11:44:14 1998  Gavin Koch  <gavin@cygnus.com>

	* config/mips/mips.h (ASM_OUTPUT_ALIGN): Remove trailing semi-colon.

Tue May 12 11:38:31 1998  Gavin Koch  <gavin@cygnus.com>

	* config/mips/mips.md (dslot): Move after definition of "cpu"
	attribute.  Handle r3900 case.

Tue May 12 10:21:36 1998  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* system.h: Define the STRINGIFY macro here.
	* protoize.c: Not here.
	* gengenrtl.c (DEF_RTL_EXPR): Use the STRINGIFY macro.

Tue May 12 00:47:33 1998  John Wehle  (john@feith.com)

	* varasm.c (assemble_variable): Compute the alignment of the data
	earlier so that both initialized and uninitialized variables are
	effected by DATA_ALIGNMENT.
	* tm.texi (DATA_ALIGNMENT): Updated appropriately.

Mon May 11 19:57:58 1998  Jeffrey A Law  (law@cygnus.com)

	* mips.c: Prototype static functions.

Mon May 11 17:43:03 1998  Jim Wilson  <wilson@cygnus.com>

	* regmove.c (fixup_match_2, find_matches, regmove_profitable):
	Add explanatory comments.

	* sparc.h (SPARC_INCOMING_INT_ARG_FIRST): Support TARGET_FLAT.

Mon May 11 17:24:27 1998  Richard Henderson  <rth@cygnus.com>

	* sparc.md (ffsdi2): Disable.  Simplify the expression as well.

Mon May 11 13:30:44 1998  Jim Wilson  <wilson@cygnus.com>

	* varasm.c (make_decl_rtl): Disable April 1 change.

Mon May 11 09:14:41 1998  Richard Henderson  <rth@cygnus.com>

	* configure.in (alpha-*-linux-gnu): Undo lossage from gcc2 merge.

Mon May 11 08:24:18 1998  Richard Henderson  <rth@cygnus.com>

	* alpha.h (PRINT_OPERAND_PUNCT_VALID_P): Add '`'.
	* alpha.c (print_operand): Handle it.
	* alpha.md (fix_truncdfsi2, fix_truncsfsi2): New patterns and
	related define_splits.  Also add peepholes for SImode reload
	plus sign_extend lossage.

Mon May 11 09:33:10 1998  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* genattr.c: Include stdarg.h/varargs.h.  Change function
	`fatal' to use variable arguments instead of faking it with
	integer parameters.  Provide a prototype which also
	checks the format specifiers using ATTRIBUTE_PRINTF_1.

	* genattrtab.c: Likewise.
	* gencodes.c: Likewise.
	* genconfig.c: Likewise.
	* genemit.c: Likewise.
	* genextract.c: Likewise.
	* genflags.c: Likewise.
	* genopinit.c: Likewise.
	* genpeep.c: Likewise.
	* genrecog.c: Likewise.
	* genoutput.c: Likewise.  Similarly for function `error'.

Sun May 10 02:27:03 1998  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* acconfig.h (HAVE_VOLATILE): Insert stub for autoconf.
	* alocal.m4 (GCC_C_VOLATILE): New autoconf test.
	* configure.in: Use GCC_C_VOLATILE.
	* system.h (volatile): Define as empty if no volatile support is
	available.

Sun May 10 01:21:43 1998  Jeffrey A Law  (law@cygnus.com)

	* genemit.c (output_add_clobbers): Removed unused variable 'i' from
	generated function.

Sat May  9 02:02:15 1998  Richard Henderson  <rth@cygnus.com>

	* loop.c (get_condition): Don't combine when either compare is MODE_CC.
	* alpha.c (alpha_emit_conditional_branch): New function.  Taken from
	the body of beq; additionally set the mode of the branch to CCmode for
	FP compares and not fast_math.
	(alpha_emit_conditional_move): Always use a compare insn for FP
	when not fast_math, as well as setting CCmode on the cmov.
	* alpha.md (beq, bne, blt, et al): Call alpha_emit_conditional_branch.

	* machmode.h (COMPLEX_MODE_P): New macro.

Sat May  9 01:53:23 1998  Richard Henderson  <rth@cygnus.com>

	* haifa-sched.c (print_exp): Fix typo.

Fri May  8 21:48:50 1998  Jeff Law  (law@cygnus.com)

	* version.c: Bump for snapshot.

Fri May  8 18:23:08 1998  Michael Meissner  <meissner@cygnus.com>

	* final.c (final_scan_insn): Call fatal_insn instead of abort if
	we could not split an insn when required to.

	* m32r.md ({add,sub}di3): Add define_splits and appropriate low
	level insns.
	(peepholes): Disable peepholes that call dead_or_set_p.
	(movsi): Rewrite to handle addresses better after last change.
	Add define_split to split load of addresses in large/medium modes.
	(prologue): Call m32r_expand_prologue.
	(movsi_{push,pop}): Generators for push/pop.
	(movsi): Support PRE_{INC,DEC}, POST_INC.
	(mov{di,df}): Rewrite.  Always split the insns.
	(movsf): Add define_split to get register load in correct mode.
	(cmp_ne_small_const_insn): Use 'N' instead of 'S' constraint.
	(attributes): Rewrite attributes so that type indicates both the
	type and the length of the insn directly.
	(all insns): Change to use new type attributes.
	(debug): New attribute to convey whether -mdebug was used.
	(opt_space): New attribute to convey whether -Os was used.
	(function units): Loads are 3 cycles, not 2.  Better classify all
	insns into short/long.
	(load/store/extend insns): Add separate case for load/store
	indirect operations without an offset.
	(divsi3): Division is a long operation, not short.

	* m32r.h (LEGITIMATE_LO_SUM_ADDRESS_P): Do not allow LO_SUM for
	modes > 1 word.
	(GO_IF_MODE_DEPENDENT_ADDRESS): LO_SUM is now mode dependent.
	(CONST_OK_FOR_LETTER_P): Make 'N' handle reverse 8 bit compares.
	(EXTRA_CONSTRAINT): Remove 'S' special support.  Add 'U' for
	operands with PRE_{INC,DEC}, POST_INC.
	(FUNCTION_PROFILER): Call abort instead of doing nothing.
	(GO_IF_LEGITIMATE_ADDRESS): Allow PRE_{INC,DEC}, POST_INC of
	SImode variables.
	(gen_split_move_double): Declare.
	(EXTRA_CONSTRAINT): Add 'T' for memory reference with no offset.

	* m32r.c (gen_split_move_double): Fix typo.  Also, don't call
	emit_move_insn, build up SET's directly.
	(toplevel): Include system.h, not stdio.h.
	(move_double_src_operand): Allow any DF or DI mode constant.
	(gen_split_move_double): Split moves of DI or DF values into the
	appropriate moves, loads, or stores.  Don't handle use of auto
	inc/dec if using dead index.  Do handle overlapping moves, etc.
	(m32r_frame_info): Remove prologue_size field.
	(m32r_compute_frame_size): Don't calculate prologue size.
	(m32r_output_function_prologue): Change to pretty much a NOP.
	(m32r_expand_prologue): Expand prologue as a series of INSNs.
	(m32r_print_operand): Add support for PRE_{INC,DEC}, POST_INC.
	(m32r_print_operand_address): Likewise.

Fri May  8 14:13:21 1998  H.J. Lu  (hjl@gnu.org)

	* reload1.c (emit_reload_insns): When performing expensive
	optimizations, do not output the last reload insn if OLD is
	not the dest of NSN and is in the src and is clobbered by INSN.

Fri May  8 09:47:29 1998  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* Makefile.in (genrtl.o): Depend on system.h.
	* gengenrtl.c (gencode): When creating genrtl.c, have it
	include system.h.

Fri May  8 10:57:33 1998  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* config/m68k/t-linux: Remove extra stuff already included in
	config/t-linux.

Fri May  8 09:53:24 1998  Paul Eggert  <eggert@twinsun.com>

	* fixinc.wrap: Renamed from fixinc.math.  Put wrapper around
	curses.h if it contains `typedef char bool;', as suggested by
	Manfred Hollstein <manfred@s-direktnet.de>.

	* configure.in: Rename fixinc.math to fixinc.wrap.

Thu May  7 19:26:34 1998  Jim Wilson  <wilson@cygnus.com>

	* gcc.c (read_specs): Handle missing blank line at end of specs file.

	* i386.md (movsicc, movhicc, movsicc_1, movhicc_1, movsfcc_1,
	movdfcc_1): Disable.

Thu May  7 15:39:14 1998  Jim Wilson  <wilson@cygnus.com>

	* configure.in (enable_threads): Rename to enable_threads_flag before
	main loop.  Set enable_threads to enable_threads_flag inside main
	loop.

Thu May  7 17:38:03 1998  Michael Meissner  <meissner@cygnus.com>

	* r6000/eabi.asm (__eabi): Restore LR in case __eabi is called
	multiple times.

Thu May  7 14:26:05 1998  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* aclocal.m4 (GCC_FUNC_VFPRINTF_DOPRNT): New macro.

	* configure.in: Add a call to GCC_FUNC_VFPRINTF_DOPRNT.
	(AC_CHECK_HEADERS): Remove unused check for varargs.h,sys/varargs.h.
	(AC_CHECK_FUNCS): Remove unused check for vprintf.

	* Makefile.in: Add support for linking in vfprintf.c and doprint.c.
	(cccp.o): Depend on gansidecl.h.
	(cexp.o): Likewise.

	* cccp.c: Convert from using PRINTF_ALIST/PRINTF_DCL to VPROTO as
	per the rest of gcc source.
	* cexp.y: Likewise.  Include gansidecl.h and remove all code made
	redundant.

	* cccp.c: Remove checks for HAVE_VPRINTF and the associated code
	used when vfprintf is missing.
	* cexp.y: Likewise.
	* gcc.c: Likewise.
	* genattrtab.c: Likewise.
	* mips-tfile.c: Likewise.
	* toplev.c: Likewise.

	* vfprintf.c: New file.
	* doprint.c: New file.

Thu May  7 10:18:41 1998  Jeffrey A Law  (law@cygnus.com)

	* config/linux.h (ASM_COMMENT_START): Remove from here,
	* config/linux-aout.h (ASM_COMMENT_START): and here,
	* config/i386/linux.h (ASM_COMMENT_START): to here,
	* config/i386/linux-aout.h (ASM_COMMENT_START): and here.
	* config/i386/linux-oldld.h (ASM_COMMENT_START): Define
	here as '#' too.

Thu May  7 10:55:59 1998  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* config/m68k/m68k.md (adddi3, subdi3): Properly negate the DImode
	constant.

Wed May  6 22:32:37 1998  Robert Lipe  <robertl@dgii.com>

	* Makefile.in (dwarfout.o): Add toplev.h dependency.
	* dwarfout.c, i386.c: Include toplev.h.
	* toplev.h (pfatal_with_name): Add prototype.

Wed May  6 19:02:29 1998  Jason Merrill  <jason@yorick.cygnus.com>

	* Makefile.in: Fix .SUFFIXES.

Wed May  6 19:31:32 1998  Alan Modra  <alan@spri.levels.unisa.edu.au>

	* config/linux.h (ASM_COMMENT_START): Define as "#".
	* config/linux-aout.h (ASM_COMMENT_START): Likewise.

Wed May  6 15:51:39 1998  Jim Wilson  <wilson@cygnus.com>

	* objc/Make-lang.h (objc-parse.o): Add toplev.h dependency.
	* objc/objc-parse.y, objc/objc-parse.c: Regenerate.

	* toplev.c: Include toplev.h.
	* Makefile.in (c-common.o, c-convert.o, c-decl.o, c-iterate.o,
	c-lex.o, c-parse.o, c-pragma.o, c-typeck.o, calls.o, convert.o,
	dwarf2out.o, except.o, expr.o, final.o, fold-const.o, function.o,
	hash.o, profile.o, real.o, reg-stack.o, regclass.o, reload.o,
	reload1.o, stmt.o, stor-layout.o, tlink.o, tree.o, varasm.o): Add
	toplev.h dependency.

	* mips/mips.c (save_restore_insns): Change FRAME_POINTER_REGNUM to
	HARD_FRAME_POINTER_REGNUM.

	* expr.c (target_temp_slot_level): Delete duplicate definition.

Wed May  6 16:46:01 1998  Jeffrey A Law  (law@cygnus.com)

	* stmt.c (mark_seen_cases): Make it have external linkage again.
	* expr.h (mark_seen_cases): Add declaration, but only when tree.h
	has been included.

	* haifa-sched.c (print_value, case SUBREG): Fix typo.

	* i386.c (output_387_binary_op): Add some braces to avoid warnings.
	* i386.h (REG_CLASS_CONTENTS): Similarly.

	* toplev.c (-fsched-max): Delete flag.
	(-fsched-interblock-max-blocks,-fsched-interblock-max-insns): Likewise.
	* haifa-sched.c: Remove -fsched-max-N, -fsched-interblock-max-blocks-N
	and -fsched-interblock-max-insns-N support.  Remove INTERBLOCK_DEBUG
	conditionals.

	* haifa-sched.c (find_rgns): Correctly handle reducible loops with
	inner loops which are not reducible.

	* loop.c (regs_match_p): Fix typo in prototype.

	* regmove.c (try_auto_increment): Wrap declaration inside an
	#ifdef AUTO_INC_DEC.

Wed May  6 17:07:47 1998  Michael Meissner  <meissner@cygnus.com>

	* final.c (output_operand_lossage): Call fatal with the operand
	lossage message instead of calling abort.

Wed May  6 15:37:27 1998  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* c-common.c: Convert to using ctype macros defined in system.h.
	* c-lex.c: Likewise.
	* cccp.c: Likewise.
	* collect2.c: Likewise.
	* rs6000.c: Likewise.
	* cpplib.c: Likewise.
	* fix-header.c: Likewise.
	* gcc.c: Likewise.
	* gen-protos.c: Likewise.
	* pexecute.c: Likewise.
	* protoize.c: Likewise.
	* rtl.c: Likewise.
	* scan.c: Likewise.
	* stmt.c: Likewise.
	* tlink.c: Likewise.
	* toplev.c: Likewise.

Wed May  6 14:44:14 1998  Gavin Koch  <gavin@cygnus.com>

	* config/mips/r3900.h (SUBTARGET_ASM_DEBUGGING_SPEC) :
	Replace -gdwarf-2 with -g0.

Wed May  6 11:43:18 1998  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* Makefile.in (mips-tfile.o, mips-tdump.o): Depend on system.h.
	* mips-tdump.c: Include system.h, remove redundant headers.
	* mips-tfile.c: Likewise.  Also, convert all ctype function calls
	to calls of the macro versions defined in system.h.

	* objc/Make-lang.in (objc-act.o): Depend on system.h.
	* objc/objc-act.c: Include system.h, remove redundant headers.

Wed May  6 11:21:06 1998  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* configure.in (AC_CHECK_FUNCS): Add isascii.
	(GCC_NEED_DECLARATIONS): Add atof.

	* system.h: Provide prototypes for abort, atof, atol and sbrk here.
	* rtl.c, rtl.h, toplev.c, tree.h: Not here.

Wed May  6 10:52:49 1998  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* system.h: Wrap time.h and sys/file.h in autoconf checks.
	Provide default definitions for O_RDONLY and O_WRONLY here.

	* cccp.c, cpplib.c, fix-header.c, gcc.c, protoize.c: Not here.

1998-05-06  Mark Mitchell  <mmitchell@usa.net>

	* tree.h (IS_EXPR_CODE_CLASS): Remove bogus '3'.

Wed May  6 06:35:38 1998  Robert Lipe  <robertl@dgii.com>

	* toplev.h: New file.  Protypes for functions in toplev.c.
	* tree.h, rtl.h: Deleted protos for functions in toplev.c.
	* c-common.c, c-convert.c, c-decl.c, c-iterate.c, c-lex.c,
	c-parse.in, c-parse.y, c-pragma.c, c-typeck.c, calls.c,
	convert.c, dwarf2out.c, except.c, expr.c, final.c, fold-const.c,
	function.c, hash.c, profile.c, real.c, reg-stack.c, regclass.c,
	reload.c, reload1.c, stmt.c, stor-layout.c, tlink.c, tree.c,
	varasm.c: Include it.

Wed May  6 01:09:01 1998  Jeffrey A Law  (law@cygnus.com)
			  Jim Wilson  (wilson@cygnus.com)

	* haifa-sched.c (find_rgns): In no_loops case, fix test for leaf
	blocks.  Check for 1 successor which is the EXIT_BLOCK.

	* haifa-sched.c (find_rgns): Detect unreachable blocks, including
	unreachable loops with more than one block.

Wed May  6 08:22:24 1998  Manfred Hollstein  <manfred@s-direktnet.de>

	* fix-header.c (write_rbrac): Add "abort" to functions which need to
	be protected.

Wed May  6 00:09:36 1998  Jeffrey A Law  (law@cygnus.com)

	* Check in merge from gcc2.  See ChangeLog.12 for details.

Tue May  5 14:33:49 1998  Jim Wilson  <wilson@cygnus.com>

	* c-common.c (scan_char_table): Separate 's' and 'c'.  'c' does not
	accept 'a' flag.  'S' does accept 'a' flag.
	(check_format_info): When pedantic, warn for m/C/S/a/A formats,
	and `a' flag.

	* elf64.h (MULTILIB_DEFAULTS): Move definition after mips.h include.

Tue May  5 10:50:39 1998  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* config/m68k/m68k.h: Declare functions from m68k.c used in
	macros and machine description.
	(ASM_OUTPUT_LONG_DOUBLE): Always use `l' flag in print format for
	long values.
	(ASM_OUTPUT_FLOAT): Likewise.
	(ASM_OUTPUT_FLOAT_OPERAND): Likewise.

Tue May  5 01:28:12 1998  Jason Merrill  <jason@yorick.cygnus.com>

	* tree.def: Add NAMESPACE_DECL.
	* dwarfout.c (type_ok_for_scope): Ignore NAMESPACE_DECLs for now.
	* dwarf2out.c (push_decl_scope): Likewise.
	(scope_die_for): Likewise.
	* tree.c (decl_function_context): Use TREE_CODE_CLASS to determine
	how to get next context level.

Tue May  5 01:43:16 1998  Jim Wilson  <wilson@cygnus.com>

	* i386.c (output_fix_trunc): Add code to emulate non-popping DImode
	case.

Tue May  5 01:15:06 1998  Jeffrey A Law  (law@cygnus.com)

	* h8300.h (ADDITIONAL_REGISTER_NAMES): Add "er" registers.

	* reorg.c (fill_slots_from_thread): Update REG_DEAD/REG_UNUSED notes
	for any insns skipped at the start of a block because they were
	redundant.

Mon May  4 20:23:51 1998  Jim Wilson  <wilson@cygnus.com>

	* alpha.h (DBX_CONTIN_LENGTH): Decrease to 3000.

1998-05-04  Ulrich Drepper  <drepper@cygnus.com>

	* c-common.c (format_char_info): Add new field hhlen.
	(print_char_table, scan_char_table, time_char_table): Initialize
	hhlen field appropriately.
	(char_format_info): Recognize hh modifier and lookup correct char
	table entry.

Mon May  4 19:15:29 1998  Jim Wilson  <wilson@cygnus.com>

	* expr.c (expand_expr, case INDIRECT_REF): Don't optimize string
	reference if this is a store.

Mon May  4 17:25:17 1998  Richard Henderson  <rth@cygnus.com>

	* sparc.c (output_move_quad): Fix typo in mov_by_64 argument.

Sun May  3 23:57:25 1998  Robert Lipe  <robertl@dgii.com>

	Make UnixWare 7 bootstrap support work with final shipping product.
	* configure.in (i[34567]86-*-sysv5): Append, not overwrite, xm_file.
	Pick up xm-siglist and xm-alloca.
	(xm_defines): Add USG so dbxout will build.
	* configure: Regenerate.

Sun May  3 13:51:34 1998  Richard Henderson  <rth@cygnus.com>

	Support for official SPARC V9 ABI:
	* sparc.c (sparc_override_options): Force stack bias off for !arch64.
	Care for flag_pcc_struct_return default.
	(output_move_quad): Rewrite to move by halves on v9 and in the
	proper direction.
	(move_quad_direction): New function.
	(output_fp_move_quad): Use it to determine the direction of copy.
	(function_arg_slotno): Return -1 for FP reg overflow as well.
	(function_arg_record_value*): New functions.
	(function_arg): Use them.  Streamline unprototyped parameter passing.
	(function_arg_pass_by_reference): Pass TCmode by reference.
	(function_value): New function.
	* sparc.h (PTRDIFF_TYPE, SIZE_TYPE): For -pedantic's sake, don't use
	long long in 64-bit mode.
	(RETURN_IN_MEMORY): v9 returns structs < 32-bytes in regs.
	(DEFAULT_PCC_STRUCT_RETURN): Make the default detectable.
	(BASE_RETURN_VALUE_REG): Consider complex float types for arch64.
	(BASE_OUTGOING_VALUE_REG, BASE_PASSING_ARG_REG): Likewise.
	(BASE_INCOMING_ARG_REG): Likewise.
	(FUNCTION_VALUE): Call function_value.
	(FUNCTION_OUTGOING_VALUE, LIBCALL_VALUE): Likewise.
	* sparc.md (movdi_sp32_v9): Disable for arch64.
	(movsf, movdf, movtf): Sort all alternatives using fp regs first.
	(call_value_address_sp64): Remove register class constraints.
	(call_value_symbolic_sp64): Likewise.
	(nonlocal_goto): Pass label reg directly to goto_handlers.  Constrain
	v9 case to 32-bit constants.
	(goto_handler_and_restore_v9): Provide a version for arch64.
	* sparc/linux64.h (SIZE_TYPE, PTRDIFF_TYPE): Remove private definition.
	* sparc/sp64-aout.h (TARGET_DEFAULT): Turn on stack bias.
	(CPP_PREDEFINES): New.
	* sparc/sp64-elf.h: Likewise.
	(PREFERRED_DEBUGGING_TYPE): Dwarf2.
	(ASM_OUTPUT_DWARF2_ADDR_CONST): New.
	* sparc/sysv4.h (SIZE_TYPE, PTRDIFF_TYPE): Undo svr4.h's changes.

Sat May  2 17:47:17 1998  Jeff Law  (law@cygnus.com)

	* version.c: Bump for snapshot.

Sat May  2 01:37:29 1998  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* reload.c (find_reloads): Emit USEs to mark where a pseudo
	is reloaded with the MEM of its stack slot.
	* reload1.c (cannot_omit_stores): Delete.
	(reload): Don't initialize it.
	Don't apply avoid_return_reg logic to USEs.
	When done, remove USEs that have a REG_EQUAL note on them.
	(emit_reload_insns): Handle case where we have inherited a MEM.
	(choose_reload_regs): Likewise.
	(delete_output_reload): Don't use cannot_omit_stores.

Thu Apr 30 18:59:03 1998  Jim Wilson  <wilson@cygnus.com>

	* Makefile.in (cpp.info, gcc.info): Put -o option before input file.

Thu Apr 30 16:57:34 1998  Michael Meissner  <meissner@cygnus.com>

	* haifa-sched.c (print_{exp,value}): Various changes to make the
	debug output easier to read.  Also, use only one buffer, and make
	sure the buffer we are passed in doesn't overflow.
	(safe_concat): Concatenate to a buffer without overflow.

Thu Apr 30 16:57:34 1998  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* haifa-sched.c (alloc_{INSN,EXPR}_LIST): Make static to agree
	with the prototype.

Wed Apr 29 21:45:16 1998  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* sched.c (new_insn_dead_notes): Check if the register was
	used in the original instruction.
	* haifa-sched.c (new_insn_dead_notes): Likewise.

Wed Apr 29 13:46:03 1998  Jim Wilson  <wilson@cygnus.com>

	* dwarf2out.c (scope_die_for): If could not find proper scope,
	check for and handle tagged type with incorrect TYPE_CONTEXT.

Wed Apr 29 15:34:40 1998  John Carr  <jfc@mit.edu>

	* calls.c (expand_call): Fix recognition of C++ operator new.

	* alias.c (mode_alias_check): Disable type based alias detection.

Wed Apr 29 15:06:42 1998  Gavin Koch  <gavin@cygnus.com>

	* config/mips/elf.h (ASM_OUTPUT_DEF,ASM_WEAKEN_LABEL,
	ASM_OUTPUT_WEAK_ALIAS): Define.
	* config/mips/elf64.h: Same.
	* config/mips/r3900.h (ASM_OUTPUT_DEF,SUPPORTS_WEAK,
	ASM_WEAKEN_LABEL): Removed.

Wed Apr 29 10:53:29 1998  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* calls.c (expand_call): Bump the length limit on the specially
	recognized function names to 17.

Tue Apr 28 17:53:33 1998  Jim Wilson  <wilson@cygnus.com>

	* ginclude/stddef.h: Add check for _MACHINE_ANSI_H_ for BSD/OS
	when undefining macros at the end.

	* expr.c (expand_builtin, case BUILT_IN_MEMSET): Break if either
	val or len has TREE_SIDE_EFFECTS set.

	* sparc.md (mulsidi3): Call const v8plus and v8plus routines.
	(mulsidi3_v8plus, const_mulsidi3_v8plus): Delete asterisk from name.
	(smuldi3_highpart): Call const v8plus routine.
	(smulsi3_highpart_v8plus): Renamed from smulsidi3_highpart_v8plus.
	(const_smulsi3_highpart_v8plus): New pattern.
	(smulsi3_highpart_sp32): Renamed from smulsidi3_highpart_sp32.
	(umulsidi3): Call const v8plus routine.
	(umulsi3_highpart): Handle const before v8plus.  Call const v8plus
	routine.
	(umulsi3_highpart_v8plus): Renamed from umulsidi3_highpart_v8plus.
	(umulsi3_highpart_sp32): Renamed from umulsidi3_highpart_sp32.

Tue Apr 28 08:55:26 1998  Michael Meissner  <meissner@cygnus.com>

	* m32r.c (*_oper{and|ator}): Change enum arguments and return
	values to int, so they can be prototyped even in files that don't
	include rtl.h.
	({small,large}_insn_p): Likewise.
	(m32r_select_cc_mode): Likewise.
	(gen_compare): Likewise.
	(function_arg_partial_nregs): Likewise.
	(m32r_setup_incoming_varargs): Likewise.
	(init_reg_tables): Add prototype.
	(m32r_frame_info): Add prolog_size field.
	(m32r_compute_frame_size): Calculate the size of the prologue.
	(m32r_first_insn_address): Return prologue size.
	(m32r_output_function_prologue): Calculate frame size before
	printing out information.  Print out the prologue size.

	* m32r.h: Prototype all functions in m32r.c.
	(FIRST_INSN_ADDRESS): Declare, returning prologue size.

	* m32r.md (bcc functions): Cast enum's to int.

	* m32r.c (conditional_move_operand): Silence a debug message.
	({small,long}_insn): New predicates.

	* m32r.h (TARGET_M32R): New macro.
	(PREDICATE_CODES): Rearrange somewhat, add small_insn/long_insn.
	(HAIFA_P): Define as 1/0 depending on whether the Haifa scheduler
	was selected.
	(ISSUE_RATE): Define as 2.

	* m32r.md (insn_size): New attribute.
	({,rev_}branch_insn): Add .s qualifier to branches believed to be
	short.
	(m32r): New attribute.

	* configure.in (enable_haifa): Switch m32r to Haifa by default.
	* configure: Regenerate.

	(Changes from Nick Clifton <nickc@cygnus.com>)
	* m32r.h (EXTRA_CONSTRAINT): Implement 'S' constraint to perfoirm
	the equivalent of a negated 'I' constraint.
	(PRESERVE_DEATH_INFO_REGNO_P): Define in order to allow peephole
	optimization to work.

	* m32r.md (cmp_ne_small_const_insn): Use 'S' constraint rather
	than 'I' since the value is negated.
	(peephole): Add peephole optimization to cope with optimization of
	divide and subtracts of the same operands.

	* m32r.c zero_and_one, emit_cond_move): Add support for MVFC.
	* m32r.h: Likewise.
	* m32r.md: Likewise.

	* m32r.h (PREDICATE_CODES): Add declaration of machine specific
	predicates.

Tue Apr 28 07:25:53 1998  Manfred Hollstein  <manfred@s-direktnet.de>

	* Makefile.in (libgcc2.ready): Revert last patch (Apr 24).

Mon Apr 27 18:39:47 1998  Nick Clifton  <nickc@cygnus.com>

	* config/arm/thumb.h (GO_IF_LEGITIMATE_ADDRESS): Check against
	frame_pointer_rtx not FRAME_POINTER_REGNUM.

Mon Apr 27 18:36:28 1998  Jim Wilson  <wilson@cygnus.com>

	* reg-stack.c: Revert last patch (Apr 20).
	(convert_regs): Set insn to PREV_INSN (next) after do while loop.

	* m68k/lb1sf68.asm (Laddsf$3): Fix typos in mcf5200 exg code.

	* loop.c (check_dbra_loop): New locals jump, first_compare, and
	compare_and_branch.  Call get_condition to set first_compare.
	Set compare_and_branch to number of compare/branch instructions.
	Replace PREV_INSN (PREV_INSN (loop_end)) with first_compare.
	Replace '2' with compare_and_branch.

Mon Apr 27 15:53:30 1998  Andrew MacLeod  <amacleod@cygnus.com>

	* cplus-dem.c (demangle_qualified): Replace missing else.

Mon Apr 27 20:22:08 1998  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* sh.c (gen_ashift_hi): Don't make SUBREG of a SUBREG.

Mon Apr 27 18:23:51 1998  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* sh.c (sh_expand_prologue, sh_expand_epilogue):
	If TARGET_DOUBLE_ALIGN, preserve 64 bit stack alignment.
	* sh.h (STACK_BOUNDARY): Likewise.

Mon Apr 27 17:22:48 1998  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* sh.h (LEGITIMIZE_RELOAD_ADDRESS): Define.

Mon Apr 27 08:55:23 1998  Michael Meissner  <meissner@cygnus.com>

	* system.h (abort): If abort is not defined, and neither is
	USE_SYSTEM_ABORT, redefine abort to call fprintf and exit,
	reporting the line and filename of the error.

	* .gdbinit: Add breakpoints on exit and fancy_abort.

	* final.c (split_double): Avoid a compiler warning if
	BITS_PER_WORD is less than or equal to HOST_BIT_PER_WIDE_INT.

	* rtl.h (JUMP_{CROSS_JUMP,NOOP_MOVES,AFTER_REGSCAN}): New macros
	for calling jump_optimize.

	* toplev.c (rest_of_compilation): Call jump_optimize using JUMP_*
	macros, rather than 0/1's.

Sun Apr 26 23:19:10 1998  Richard Henderson  <rth@cygnus.com>

	* alpha.h (CONST_COSTS): Zero is always free.
	(RTX_COSTS): Add EV6 costs.  Abort if alpha_cpu is unknown.

Sun Apr 26 15:38:50 1998  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* cplus-dem.c (gnu_special): Fix off-by-one bug when checking the
	length in the name of a virtual table.

Sun Apr 26 01:21:06 1998  Richard Henderson  <rth@cygnus.com>

	* alpha.c (print_operand): Don't add 'v' suffix for ALPHA_FPTM_N.

Sat Apr 25 22:11:38 1998  Jeff Law  (law@cygnus.com)

	* version.c: Bump for snapshot.

Sat Apr 25 17:17:15 1998  Jeffrey A Law  (law@cygnus.com)

	* fold-const.c (fold_convert): Fix typo.

Sat Apr 25 17:55:54 1998  John Carr  <jfc@mit.edu>

	* alias.c (alias_invariant): New variable.
	(record_base_value): New argument INVARIANT.
	(memrefs_conflict_p): If a register has an entry in the alias_invariant
	array, try substituting that value for the register.

	* rtl.h: Declare record_base_value.

	* loop.c, unroll.c: Update callers of record_base_value.

	* alias.c (find_base_value, find_base_term): SIGN_EXTEND and
	ZERO_EXTEND do not affect base values.

Fri Apr 24 15:57:02 1998  Jeffrey A Law  (law@cygnus.com)

	* dbxout.c (dbxout_type): Fix typo.
	(dbxout_range_type): Another HOST_WIDE_INT_PRINT_DEC fix.

	* configure.in: Use CC_FOR_BUILD, not BUILD_CC.

Fri Apr 24 16:11:47 1998  John Carr  <jfc@mit.edu>

	* expr.c (expand_builtin, case MEMSET): Set MEM_IN_STRUCT_P
	if the argument is the address of a structure or array.

	* configure.in: Enable Haifa scheduler by default for SPARC.

Fri Apr 24 20:55:47 1998  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* cse.c (cse_set_around_loop): Don't do optimization when
	new pseudos are created.

Fri Apr 24 11:00:18 1998  Jeffrey A Law  (law@cygnus.com)

	* dbxout.c (dbxout_type_fields): Use HOST_WIDE_INT_PRINT_DEC
	appropriately.
	(dbxout_type_method_1, dbxout_type): Likewise.
	(print_int_cst_octal, print_octal, dbxout_symbol): Likewise.
	(dbxout_type): Fix check for when to print a type range in
	octal vs decimal.

Fri Apr 24 16:45:03 1998  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* (gen_shl_and, in case 1): Fix comparison with mask.

Fri Apr 24 06:46:40 1998  Nick Clifton  <nickc@cygnus.com>

	* config/arm/thumb.h (GO_IF_LEGITIMATE_ADDRESS): Disallow frame
	pointer as second register in REG+REG pair.

Fri Apr 24 09:22:23 1998  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* c-common.c (check_format_info): Don't check for the 'x' format
	character twice, instead check for 'x' and 'X'

Fri Apr 24 08:02:30 1998  Manfred Hollstein  <manfred@s-direktnet.de>

	* Makefile.in (libgcc2.ready): Add explicit dependency from
	$(STMP_FIXPROTO) to ensure all necessary include files have
	been created and to guarantee proper parallel builds.

Fri Apr 24 04:42:35 1998  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* sh.c (sh_expand_prologue, in !SH3E code): Don't push an extra
	register for stdarg functions.
	* sh.h (current_function_varargs): Declare.
	(FUNCTION_ARG): Ignore NAMED for stdarg functions.

1998-04-23  Jim Wilson  <wilson@cygnus.com>

	* frame.c, libgcc2.c (stdlib.h, unistd.h): Don't include when
	inhibit_libc is defined.

	* c-aux-info.c (gen_type): Use DECL_NAME only for TYPE_DECL.

Thu Apr 23 19:09:33 1998  Jim Wilson  <wilson@cygnus.com>

	* profile.c (tablejump_entry_p): New function.
	(branch_prob): Add code to recognize MIPS tablejump entry branch.
	Use tablejump_entry_p in MIPS and HPPA tablejump checking code.

Thu Apr 23 15:01:13 1998  Nick Clifton  <nickc@cygnus.com>

	* config/arm/arm.c (find_barrier): Return as soon as a barrier is
	found, rather than at end of the loop, after the insn has been
	changed.

Thu Apr 23 20:21:06 1998  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* sh.c (gen_ashift_hi): Implement right shifts via gen_ashift.
	* sh.md (ashrhi3_k, lshrhi3_k, lshrhi3_m, lshrhi3, lshrhi3+1): Delete.

Wed Apr 22 17:07:35 1998  Michael Meissner  <meissner@cygnus.com>

	* loop.c (note_addr_stored): Correct function to take 2 arguments,
	instead of 1.

	* rtl.def (MATCH_INSN2): Add new matching pattern.
	* genrecog.c (add_to_sequence): Support MATCH_INSN2.

Wed Apr 22 15:52:22 1998  John Carr  <jfc@mit.edu>

	* emit-rtl.c (gen_highpart): The high part of a CONST_INT is not zero
	if HOST_BITS_PER_WIDE_INT is larger than BITS_PER_WORD.

	* final.c (split_double): Sign extend both halves of a split CONST_INT.

Wed Apr 22 10:42:45 1998  Jeffrey A Law  (law@cygnus.com)

	* mips.c (compute_frame_size): Change only argument to a HOST_WIDE_INT.

Wed Apr 22 10:53:49 1998  Andrew MacLeod  <amacleod@cygnus.com>

	* cplus-dem.c (struct work stuff): Add field for B and K mangle codes.
	(cplus_demangle_opname): Call mop_up_squangle.
	(cplus_demangle): Initialize squangle info, then call
	internal_cplus_demangle. (Most code moved there as well)
	(internal_cplus_demangle): New function, performs most of what use
	to be done in cplus_demangle, but is only called with this file.
	(squangle_mop_up): New function to clean up B and K code data.
	(mop_up): Set pointers to NULL after freeing.
	(demangle_signature, demangle_template, demangle_class): Add
	switch elements to handle K and B codes.
	(demangle_prefix, gnu_special, demangle_qualified): Add
	code to handle K and B codes.
	(do_type, demangle_fund_type): Handle B and K codes.
	(remember_Ktype): New function to store K info.
	(register_Btype, remember_Btype): New functions for B codes.
	(forget_B_and_K_types): New function to destroy B and K info.

1998-04-21  Jim Wilson  <wilson@cygnus.com>

	* stmt.c (check_seenlabel): When search for line number note for
	warning, handle case where there is no such note.

Tue Apr 21 20:48:37 1998  John Carr  <jfc@mit.edu>

	* genemit.c (gen_exp): Allow machine description to set mode of
	MATCH_OP_DUP.

Tue Apr 21 16:36:01 1998  John Carr  <jfc@mit.edu>

	* alias.c (mode_alias_check): New function.
	(true_dependence, anti_dependence, output_dependence): Call
	mode_alias_check.

Tue Apr 21 12:05:32 1998  Jeffrey A Law  (law@cygnus.com)

	* mips.h (STACK_BOUNDARY): Allow specific targets to override.
	(MIPS_STACK_ALIGN): Similarly.

	* c-common.c (type_for_mode): Handle TI types.
	* c-decl.c (intTI_type_node, unsigned_int_TI_type_node): Define.
	(init_decl_processing): Handle TI types.
	* c-tree.h (intTI_type_node, unsigned_int_TI_type_node): Declare.

	* mips.c (block_move_loop): Test Pmode == DImode instead of
	TARGET_MIPS64.
	(expand_block_move, save_restore_insns): Likewise.
	(function_prologue, mips_expand_prologue): Likewise.
	(mips_expand_epilogue): Likewise.
	* mips.h (POINTER_SIZE): Allow specific targets to override.
	(Pmode): Allow specific targets to override.
	(FUNCTION_PROFILER): Test Pmode == DImode instead of TARGET_MIPS64.
	(POINTER_BOUNDARY, FUNCTION_MODE): Likewise.
	(TRAMPOLINE_TEMPLATE, TRAMPOLINE_SIZE): Likewise.
	(TRAMPOLINE_ALIGNMENT, INITIALIZE_TRAMPOLINE): Likewise.
	(CASE_VECTOR_MODE, ASM_OUTPUT_ADDR_VEC_ELT): Likewise.
	(ASM_OUTPUT_ADDR_DIFF_ELT, SIZE_TYPE, PTRDIFF_TYPE): Likewise.
	* mips.md (indirect, tablejump & casesi support): Test for
	Pmode == DImode instead of TARGET_MIPS64.
	(call patterns): Likewise.

Tue Apr 21 09:43:55 1998  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* objc/sendmsg.c: Define gen_rtx_MEM() to 1, as is already done
	for gen_rtx(MEM, ...).

Tue Apr 21 02:15:36 1998  Richard Henderson  <rth@cygnus.com>

	* sparc.h (MACHINE_STATE_SAVE, MACHINE_STATE_RESTORE): Rewrite
	to not be so gross, and to properly function with PIC.

Mon Apr 20 20:44:25 1998  Jim Wilson  <wilson@cygnus.com>

	* frame.c (heapsort): Rename to frame_heapsort.

	* gcc.c (do_spec_1, case '['): Move flag out of loop and initialize it.

Mon Apr 20 12:43:09 1998  Doug Evans  <devans@canuck.cygnus.com>

	* flow.c (sbitmap_vector_alloc): Ensure sbitmaps properly aligned.

Mon Apr 20 15:04:14 1998  John Wehle  (john@feith.com)

	* i386.md (movsf_push, movdf_push, movxf_push): Allow memory
	operands during and after reload.

Mon Apr 20 22:37:50 1998  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* final.c (shorten_branches, init_insn_lengths): Move code
	to free label_align, uid_shuid, insn_lengths, insn_addresses
	and uid_align from the former function into the latter one;
	Add code to clear these variables.
	* sh.h (label_align): Remove declaration.

Mon Apr 20 14:48:29 1998  Michael Meissner  <meissner@cygnus.com>

	* gcc.c (lang_specific_driver): Declare prototype properly so
	fatal can be passed to it without error.

	* configure.in (AC_CHECK_FUNCS): Check for strchr and strrchr.
	* configure: Regenerate.
	* config.in: Add #undef's for strchr and strrchr.

	* protoize.c (toplevel): If we have rindex, but not strrchr, map
	rindex to strrchr.
	(file_could_be_converted): Use strrchr, not rindex since rindex is
	not defined on Linux systems when _POSIX_SOURCE is defined.
	(file_normally_convertible): Likewise.
	(process_aux_info_file): Likewise.
	(main): Likewise.

	* rs6000.md (mov{sf,df} define_splits): When splitting a move of
	a constant to an integer register, don't split the insns that do
	the simple AND and OR operations, rather just split each word, and
	let the normal movsi define split handle it further.

Mon Apr 20 18:19:40 1998  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* sh.c (find_barrier): Fix bug in ADDR_DIFF_VEC handling.
	(split_branches): Call init_insn_lengths.

Mon Apr 20 07:37:49 1998  Michael Meissner  <meissner@cygnus.com>

	* i386.c: Include expr.h to get the change_address prototype
	declared.

Mon Apr 20 01:00:05 1998  H.J. Lu  (hjl@gnu.org)

	* reg-stack.c (subst_asm_stack_regs): Change to return the last
	new insn generated by this function.
	(subst_stack_regs): Likewise.
	(convert_regs): Record the last newly generated insn and use
	it for change_stack () instead of INSN.

Sun Apr 19 15:41:24 1998  Manfred Hollstein  <manfred@s-direktnet.de>

	* fix-header.c (enum special_file): Undefine enumerators if they
	are already defined by include files.
	* fixproto (rel_source_file in unistd.h stdlib.h): Prefix file protection
	macro with '__' to not pollute user namespace.

Sun Apr 19 02:42:06 1998  Richard Henderson  <rth@cygnus.com>

	* haifa-sched.c (queue_to_ready): Fix typo in prototype.

Sat Apr 18 23:52:35 1998  Jeff Law  (law@cygnus.com)

	* version.c: Bump for snapshot.

Sat Apr 18 18:30:22 1998  Jim Wilson  <wilson@cygnus.com>

	* i386.md (fix_truncsfdi2+[123]): Add + to operand 1 constraints.

	* i386.h (CPP_CPU_DEFAULT): Renamed to CPP_CPU_DEFAULT_SPEC.
	Add missing -Dpentium* options.
	(CPP_CPU_SPEC): Delete redundant definition.  Include cpp_cpu_default
	instead of CPP_CPU_DEFAULT.
	(EXTRA_SPECS): Add entry for cpp_cpu_default.

Sat Apr 18 19:06:59 1998  David Edelsohn  <edelsohn@mhpcc.edu>

	* rs6000.md (floatsidf2_loadaddr): rs6000_fpmem_offset will be
	negative in a stackless frame.
	* rs6000.c (rs6000_stack_info): Don't include fixed-size link area
	in stackless frame size.  Support 64-bit stackless frame size.
	Combine fpmem offset calculations and don't add total_size to
	offset if not pushing a stack frame.

Sat Apr 18 15:41:16 1998  Jim Wilson  <wilson@cygnus.com>

	* regmove.c (fixup_match_1): In three places, in flag_exceptions
	check, change p to q.

Sat Apr 18 15:30:49 1998  Jim Wilson  <wilson@cygnus.com>

	* gcc.c (lang_specific_driver): Add new parm type to prototype.
	(added_libraries): New file scope static variable.
	(process_command): Initialize added_libraries.  Pass it to
	lang_specific_driver.
	(main): Use added_libraries in check for no input files.

Sat Apr 18 01:23:11 1998  John Carr  <jfc@mit.edu>

	* sparc.c, sparc.h, sparc.md, sol2.h: Many changes related to V9
	code generation.  Use 64 bit instructions in 32 bit mode when
	possible.  Use V9 return instruction.  UltraSPARC optimizations.

	* sparc.h: Change gen_rtx (CODE to gen_rtx_CODE (.

Fri Apr 17 22:38:17 1998  Jeffrey A Law  (law@cygnus.com)

	* global.c (global_alloc): Don't pass HARD_CONST (0) to find_reg,
	just pass zero.  That will work regardless of the size of HARD_REG_SET.

	* libgcc2.c (__floatdisf): Fix a couple typos.

Fri Apr 17 17:28:26 1998  Jim Wilson  <wilson@cygnus.com>

	* Makefile.in (mostlyclean): Delete *.mach and *.bp files.

Fri Apr 17 16:35:35 1998  Greg McGary  <gkm@gnu.org>

	* emit-rtl.c (gen_highpart): Initialize `word' properly for pseudo.

Fri Apr 17 14:30:37 1998  John Carr  <jfc@mit.edu>

	* emit-rtl.c (operand_subword_force): If a register can not be
	accessed by words, copy it to a pseudo register.

Fri Apr 17 14:30:37 1998  Jim Wilson  <wilson@cygnus.com>

	* rs6000/vxppc.h (CPP_SPEC): Add support for mrelocatable*.

Fri Apr 17 17:01:25 1998  Michael Meissner  <meissner@cygnus.com>

	* tree.h (mark_seen_cases): Delete declaration.

Fri Apr 17 13:32:20 1998  Jeffrey A Law  (law@cygnus.com)

	* stmt.c (mark_seen_cases): Make static and add prototype.

Fri Apr 17 11:21:43 1998  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* frame.c: Include stdlib.h and unistd.h to possibly get various
	function prototypes.  The fixproto script guarantees these header
	files exist on the target system.
	* libgcc2.c: Likewise.

	* gthr-single.h (__gthread_mutex_lock, __gthread_mutex_trylock,
	__gthread_mutex_unlock): Add __attribute__ ((__unused__)) to the
	function parameters.
	* libgcc2.c (__udiv_w_sdiv): Likewise.

Thu Apr 16 22:41:02 1998  Jeffrey A Law  (law@cygnus.com)

	* varasm.c (asm_output_bss): Add prototype.
	(asm_output_aligned_bss): Likewise.

	* unroll.c (verify_addresses): Add prototype.

	* toplev.c: Add many prototypes.  Too many to mention here.

	* stmt.c (check_seenlabel): Add prototype.

	* rtlanal.c (reg_set_p_1): Add prototype.
	(reg_set_last_1): Likewise.

	* reorg.c (find_dead_or_set_registers): Add prototype.

	* regmove (try_auto_increment): Add prototype.

	* reg-stack.c (pop_stack): Add prototype.

	* recog.c (validate_replace_rtx_1): Add prototype.
	(find_constant_term_loc): Likewise.

	* loop.c (regs_patch_p): Add prototype.
	(add_label_notes, count_nonfixed_reads): Likewise.
	(find_single_use_in_loop): Likewise.
	(express_from): Surround prototype with #ifdef.
	(giv_sort): Similarly.

	* jump.c (mark_modified_reg): Add prototype.

	* haifa-sched.c (is_prisky): Add prototype.
	(queue_to_ready): Likewise.

	* genextract.c (gen_insn): Add prototype.

	* genemit.c (max_operand_1): Add prototype.
	(max_operand_vec, print_code, gen_exp, gen_insn): Likewise.
	(gen_expand, gen_explit, output_add_clobbers): Likewise.
	(output_init_mov_optab): Likewise.

	* genattrtab.c (attr_hash_add_rtx): Add prototype.
	(attr_hash_add_string, write_length_unit_log): Likewise.

	* genattr.c (init_range): Add prototype.

	* combine.c (sets_function_arg_p): Add prototype.

	* expr.c (store_constructor_field): Add prototype.
	(get_memory_usage_from_modifier): Likewise.

	* expmed.c (synth_mult): Add prototype.
	(choose_multiplier, invert_mod2n): Likewise.

	* except.c (push_eh_entry): Add prototype.
	(pop_eh_entry, enqueue_eh_entry, dequeu_eh_entry): Likewise.
	(call_get_eh_context, start_dynamic_cleanup): Likewise.
	(start_dynamic_handler, can_throw): Likewise.
	(output_exception_table_entry, scan_region): Likewise.
	(eh_regs, set_insn_eh_region): Likewise.

	* dwarfout.c (decl_class_context): Add prototype.
	(output_inheritance_die, type_ok_for_scope): Likewise.

	* c-lex.c (skip_white_space_on_line): Add prototype.

	* alias.c (record_set): Add prototype.
	(find_base_term, base_alias_check): Likewise.

	* function.c (assign_outer_stack_local): Make static and add prototype.

	* haifa-sched.c (build_control_flow): Accept raw data as inputs
	instead of computing it locally.  Callers changed.
	(find_rgns): Several new arguments.  Callers changed.
	Generally clean up and comment better.  Use dominators to
	identify reducible loops.  Convert some flag arrays to bitmaps.
	Convert most of the code to work on pred/succ lists instead of
	an edge table.  Add comments for future improvements.
	(schedule_insns): Allocate temporary tables for flow data, call
	routines to compute flow data and pass it along to children as
	arguments.
	(debug_control_flow): Delete.  Use dump_bb_data instead.

	* basic-block.h (compute_dominators): Declare.

	* flow.c (dump_sbitmap, dump_sbitmap_vector): New debugging
	functions.
	* basic-block.h: Declare them.

Thu Apr 16 13:45:51 1998  Jim Wilson  <wilson@cygnus.com>

	* reg-stack.c (constrain_asm_operands): Set n_alternatives to zero if
	no operands.

Wed Apr 15 11:33:09 1998  Alexandre Petit-Bianco  <apbianco@sendai.cygnus.com>

	* tree.c (build_expr_wfl): Use NULL_TREE if the file name is NULL.
	Propagate TREE_SIDE_EFFECTS and TREE_TYPE iff the encapsulated
	node is non NULL. Cache last file name and file name identifier node.

1998-04-15  Mark Mitchell  <mmitchell@usa.net>

	* c-common.c (declare_hidden_char_array): Use TYPE_DOMAIN to get
	the length of an array, not TREE_TYPE.

Wed Apr 15 15:31:34 1998  Jeffrey A Law  (law@cygnus.com)

	* flow.c (sbitmap_union_of_successors): New function.
	* basic-block.h (sbitmap_union_of_successors): Declare it.

Wed Apr 15 12:38:03 1998  Jim Wilson  <wilson@cygnus.com>

	* configure.in (gnu_ld): Rename to gnu_ld_flag before main loop.
	Set gnu_ld to gnu_ld_flag inside main loop.
	(gas): Likewise.

Wed Apr 15 14:50:05 1998  Dave Brolley  <brolley@cygnus.com>

	* toplev.c (compile_file): Call init_parse using new interface.
	(init_lex): Remove declaration.

	* c-lex.c (init_parse): Now returns char* containing filename.

Wed Apr 15 12:37:10 1998  Jeffrey A Law  (law@cygnus.com)

	* pa.h (LEGITIMIZE_RELOAD_ADDRESS): Do nothing if not optimizing.

Wed Apr 15 12:10:18 1998  Michael Meissner  <meissner@cygnus.com>

	* Makefile.in (gen{config,flags,codes,emit}): Link in host print-rtl.o.
	(gen{extract,peep,opinit,output}): Likewise.

	* gen{attr,codes,config,emit,output}.c (insn_attr_name): Provide a
	global definition so print-rtl.o can be linked in.
	* gen{peep,recog}.c (insn_attr_name): Likewise.

Tue Apr 14 07:30:57 1998  K. Richard Pixley  <rich@kyoto.noir.com>

	* fixincludes: Discard empty C++ comments, as found in sys/time.h
	on hpux-11.0.

Wed Apr 15 10:47:21 1998  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* config/m68k/m68k.md (adddi3, subdi3): Optimize for constant
	operand.

Wed Apr 15 01:21:21 1998  Jeffrey A Law  (law@cygnus.com)

	* emit-rtl.c (operand_subword): Rework slightly to avoid
	bogus warning from previous change.

Tue Apr 14 23:39:13 1998  Richard Henderson  <rth@cygnus.com>

	* alpha.md: Revert Oct 27 change, as it is superseded by Kenner's
	Nov 8 find_replacement change.  Move decls of get_unaligned_address
	* alpha.h: ... here.

Tue Apr 14 22:00:39 1998  John Carr  <jfc@mit.edu>

	* function.c (assign_parms): Initialize unsignedp before passing
	its pointer to promote_mode.

	* genattrtab.c (check_attr_test): Handle MATCH_INSN like MATCH_OPERAND.
	(write_test_expr): Allow MATCH_INSN.

Tue Apr 14 21:57:57 1998  Paul Eggert  <eggert@twinsun.com>

	* install.texi: Update section on warnings that can be safely ignored.

Tue Apr 14 14:55:16 1998  Jim Wilson  <wilson@cygnus.com>

	* mips.md (reload_outdi): Change the scratch mode from DImode to
	TImode.  New variable scratch, used instead of operand[2] in template.
	Add code for MIPS16 HILO_REGNUM case where output reg is not M16_REG_P.

Tue Apr 14 16:19:03 1998  Michael Meissner  <meissner@cygnus.com>

	* expr.c (MOVE_RATIO): Set to 3 if optimizing for space.

Tue Apr 14 11:31:28 1998  Krister Walfridsson  <cato@df.lth.se>

	* i386/bsd386.h (ASM_OUTPUT_ALIGN): Redefine.

Tue Apr 14 09:02:32 1998  Jeffrey A Law  (law@cygnus.com)

	* svr4.h (ASM_DECLARE_OBJECT_NAME): Use HOST_WIDE_INT_PRINT_DEC.
	(ASM_FINISH_DECLARE_OBJECT): Likewise.

	* Idea and part of the patch from HJ.
	* Makefile.in: auto-host.h renamed from auto-config.h.  All references
	changed.
	(distclean): Remove auto-build.h too.
	* configure.in: Rename host autoconf generated file to auto-host.h.
	If host != build, then run autoconf to generate auto-build.h for
	the build machine and include it in build_xm_files.
	Check for wait.h and sys/wait.h.

	* combine.c (simplify_rtx, case TRUNCATE): Respect value of
	TRULY_NOOP_TRUNCATION.

Mon Apr 13 11:31:49 1998  Jason Merrill  <jason@yorick.cygnus.com>

	* tree.h (BINFO_OFFSET_ZEROP): Use integer_zerop.

Sun Apr 12 20:55:32 1998  Catherine Moore  <clm@cygnus.com>

	* invoke.texi (ld options): Include memset requirements
	for options -nodstdlib and -nodefaultlibs.

1998-04-12  Paul Eggert  <eggert@twinsun.com>

	This change is from an idea suggested by Arthur David Olson.

	* c-common.c (decl_attributes, record_function_format,
	check_format_info, init_function_format_info):
	Add support for strftime format checking.
	(enum format_type): New type.
	(record_function_format): Now static, and takes value of type
	enum format_type instead of int.
	(time_char_table): New constant.
	(struct function_format_info): format_type member renamed from is_scan.
	(check_format_info): Use `warning' rather than sprintf followed by
	`warning', to avoid mishandling `%' in warnings.
	Change `pedwarn' to `warning', since these warnings do not necessarily
	mean the program does not conform to the C Standard, as the code
	need not be executed.

	* c-tree.h (record_function_format): Remove decl; no longer extern.

	* extend.texi: Add documentation for strftime format checking.

Sun Apr 12 20:23:03 1998  Jeffrey A Law  (law@cygnus.com)

	* mips/ecoffl.h: Do not include mips.h.
	* mips/elf.h: Likewise.

	* configure.in (mips-*-ecoff): Do not mention mips/mips.h in tm_files.
	* mips/ecoff.h: Include "mips/mips.h".

Sat Apr 11 22:42:54 1998  Jeff Law  (law@cygnus.com)

	* version.c: Bump for snapshot.

Sat Apr 11 01:24:28 1998  Jeffrey A Law  (law@cygnus.com)

	* cse.c (count_reg_usage): Correctly handle REG_NONNEG notes.
	(delete_trivially_dead_insns): Renamed from delete_dead_from_cse.
	* toplev.c (rest_of_compilation): Call delete_trivially_dead_insns		instead of delete_dead_from_cse.  Also call delete_trivially_dead_insns
	between loop optimization passes.
	* rtl.h: Updated appropriately.

Fri Apr 10 22:28:32 1998  Jeffrey A Law  (law@cygnus.com)

	Reinstall this patch from Jason.
	* function.c (push_function_context_to): Don't call init_emit.

Fri Apr 10 13:40:20 1998  Nick Clifton  <nickc@cygnus.com>

	* rtl.c (read_skip_spaces): Prevent infinite loops upon
	encountering unterminated comments.

Fri Apr 10 10:43:41 1998  Jeffrey A Law  (law@cygnus.com)

	* emit-rtl.c (operand_subword): Properly handle CONST_INTs for
	64x32 cross builds.

	* configure.in: Handle --with-fast-fixincludes.
	(fixincludes): If --with-fast-fixincludes, then use a different
	fixincludes program by default.
	* Makefile.in (fixinc.sh): New rule.

Fri Apr 10 00:36:31 1998  H.J. Lu  (hjl@gnu.org)

	* i386.md (movqi+1): Handle invalid QI register.
	(movsf_push-1): Likewise.

Thu Apr  9 16:53:59 1998  Nick Clifton  <nickc@cygnus.com>

	* config/m32r/m32r.c: call_address_operand(): Only accept symbolic
	addresses.
	symbolic_memort_operand(), call32_operand(), int8_operand(),
	int16_operand(), uint24_operand(), reg_or_int8_operand(): Removed.
	Not used.
	uint16_operand(): Made static.

Thu Apr  9 01:43:04 1998  Jeffrey A Law  (law@cygnus.com)

	* calls.c (expand_call): Fix typo.

Thu Apr  9 00:18:44 1998  Dave Brolley  (brolley@cygnus.com)

	* c-lex.c (finput): New global.
	(init_parse): Always included.  Handle !USE_CPPLIB using
	code originally in compile_file.
	(finish_parse): Update for CPPLIB.
	* toplev.c (init_parse, finish_parse): Declare.
	(finput): Delete variable.  Now in front-ends.
	(compile_file): Remove code which is now handled by init_parse
	which is unconditionally called.  Similarly for finish_parse.

Wed Apr  8 23:13:50 1998  Gavin Koch  <gavin@cygnus.com>

	* config/mips/r3900.h (ASM_OUTPUT_DEF,SUPPORTS_WEAK,
	ASM_WEAKEN_LABEL): Add.

Wed Apr  8 18:21:30 1998  Richard Henderson  <rth@cygnus.com>

	* alpha/crtbegin.asm, alpha/crtend.asm, alpha/t-crtb: New files.
	* configure.in (alpha-*-linux*): Use them.

Fri Apr  3 17:02:13 1998  Alexandre Petit-Bianco  <apbianco@cygnus.com>

	* tree.def (EXPR_WITH_FILE_LOCATION): New tree node definition.
	* tree.h (EXPR_WFL_{NODE,FILENAME,FILENAME_NODE,LINENO,
	COLNO,LINECOL,SET_LINECOL,EMIT_LINE_NOTE}): New macros.
	(build_expr_wfl): New prototype declaration.
	* tree.c (build_expr_wfl): New function, to build
	EXPR_WITH_FILE_LOCATION nodes.
	(copy_node): Don't zero TREE_CHAIN if copying a
	EXPR_WITH_FILE_LOCATION node.
	* print-tree.c (print_node): Handle EXPR_WITH_FILE_LOCATION.
	* expr.c (expand_expr): Handle EXPR_WITH_FILE_LOCATION.

Wed Apr  8 12:51:19 1998  Jeffrey A Law  (law@cygnus.com)

	* configure.in (v850): Use t-v850.
	(ix86-wrs-vxworks): Recognize 786 just like other x86 configurations.

	* protoize.c (creat, read, write): Do not declare.

	* jump.c (mark_jump_label): Record REG_LABEL notes for insns which
	refer to the CODE_LABEL before a dispatch table.

	* invoke.texi: Add ARC options.

	* gcc.c (process_command): Improve error message for -o with
	either -c or -S.

	* i386/x-cygwin32 (CLIB): Link in advapi32.

	* alpha.h (ASM_IDENTIFY_GCC): Define to nothing.
	(ASM_IDENTIFY_LANGUAGE): Likewise.

	* i386.md (movqi recognizer): Don't perfom byte increment into
	a NON_QI_REG_P.

	* configure.in (x86-dg-dgux): Run fixinc.dgux.

	* i370.h: Fix typo in GEN_INT changes.

	* bitmap.c (bitmap_element_allocate): Use "void" for arglist instead
	of an empty arglist in prototype.

	* Makefile.in: Remove bytecode crud that crept back in after the
	gcc2 merge.

1998-04-08  Brendan Kehoe  <brendan@cygnus.com>

	* c-lex.h (is_class_name): Fix arg type to be tree, not void.
	(make_pointer_declarator, reinit_parse_for_function): Fix typo.

Wed Apr  8 06:16:45 1998  Richard Earnshaw  (rearnsha@arm.com)

	* arm.h (LEGITIMIZE_RELOAD_ADDRESS): Define.

Wed Apr  8 00:44:18 1998  Bernd Schmidt  (crux@pool.informatik.rwth-aachen.de>

	* c-lex.c (is_class_name): Delete declaration.
	(whitespace_cr): Make static and add prototype.
	* c-lex.h (make_pointer_declarator, reinit_parse_for_function,
	yylex, get_directive_line): Turn declarations into prototypes.
	(position_after_whitespace, check_newline, yyerror,, is_class_name,
	forget_protocol_qualifiers, remember_protocol_qualifiers): Add
	prototypes.
	* genattr.c (extend_range, write_upcase, gen_attr, write_units): Add
	prototypes.
	* gencodes.c (gen_insn): Add prototype.
	* genconfig.c (walk_insn, gen_insn, gen_expand, gen_split,
	gen_peephole): Add prototypes.
	* genflags.c (num_operands, gen_proto, gen_nonproto, gen_insn): Add
	prototypes.
	* gengenrtl.c (type_from_format, accessor_from_format, special_rtx,
	special_format, find_formats, gendecl, genmacro, gendef, genlegend,
	genheader, gencode): Add prototypes.
	* genopinit.c (gen_insn): Add prototype.
	* genoutput.c (output_prologue, output_epilogue, scan_operands,
	process_template, validate_insn_alternatives, gen_insn, gen_peephole,
	gen_expand, gen_split, n_occurrences): Add prototypes.
	* genpeep.c (gen_peephole): Add prototype.
	* loop.c (find_and_verify_loops, mark_loop_jump, prescan_loop,
	reg_in_basic_block_p, consec_sets_invariant_p, libcall_other_reg,
	labels_in_range_p, count_loop_regs_set, note_addr_stored,
	loop_reg_used_before_p, scan_loop, replace_call_address,
	skip_consec_insns, libcall_benefit, ignore_some_movables,
	force_movables, combine_movables, rtx_equal_for_loop_p, move_movables,
	strength_reduce, valid_initial_value_p, find_mem_givs, record_biv,
	check_final_value, record_giv, update_giv_derive, basic_induction_var,
	simplify_giv_expr, general_induction_var, consec_sets_giv,
	check_dbra_loop, express_from, combine_givs_p, combine_givs,
	product_cheap_p, maybe_eliminate_biv, maybe_eliminate_biv_1,
	last_use_this_basic_block, record_initial, update_reg_last_use,
	iteration_info, analyze_loop_iterations, insert_bct,
	instrument_loop_bct, indirect_jump_in_function_p): Turn declarations
	into prototypes.

Tue Apr  7 21:48:52 1998  Jeffrey A Law  (law@cygnus.com)

	* pa.h (LEGITIMIZE_RELOAD_ADDRESS): Define.

1998-04-07  Ken Raeburn  <raeburn@cygnus.com>

	* config/mips/mips.c (siginfo): Deleted.
	(override_options): Don't install SIGINFO signal handler.

Tue Apr  7 11:58:04 1998  Jim Wilson  <wilson@cygnus.com>

	* loop.c (check_dbra_loop): When normalize comparison_val, add check
	to verify it is non-negative.

Tue Apr  7 02:01:47 1998  Richard Henderson  <rth@cygnus.com>

	* alpha.c (alpha_expand_block_move): Correctly collect block offsets.
	(alpha_expand_block_clear): Likewise.

Mon Apr  6 23:36:01 1998  Richard Henderson  <rth@cygnus.com>

	* tree.h (sizetype_tab): Fix previous change for K&R.

Mon Apr  6 22:23:29 1998  Jeff Law  (law@cygnus.com)

	* version.c: Bump for snapshot.

Mon Apr  6 23:16:10 1998  Richard Earnshaw  (rearnsha@arm.com)

	* configure.in (sparc-*-solaris2*): Add xm-siglist.h to xm_file.
	Add USG and POSIX to xm_defines.

Mon Apr  6 21:49:57 1998  Bob Manson  <manson@charmed.cygnus.com>

	* gcc.c: Add linker spec.
	(link_command_spec): Use %(linker) instead of ld.
	(main): If collect2 is requested as the linker, see if it exists;
	if not, use ld instead.

	* Makefile.in (USE_COLLECT2): It's named collect2 now, not ld.
	(ld): Deleted.
	(install-collect2): Install as collect2, not ld.

	* configure.in(will_use_collect2): It's named collect2 now.

	* collect2: Remove checks to see if we were invoked recursively.
	(collect_execute): Use _spawnvp under cygwin32.

Mon Apr  6 17:23:41 1998  Jim Wilson  <wilson@cygnus.com>

	* haifa-sched.c (build_control_flow): Set unreachable for block whose
	only predecessor is itself.

Mon Apr  6 16:08:04 1998  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* c-parse.in: Include system.h, and remove stuff now made redundant.
	* cccp.c: Likewise.
	* cexp.y: Likewise.
	* protoize.c: Likewise.  Properly check for cpp stringification.

	* Makefile.in (c-parse.o, cccp.o, cexp.o, protoize.o, unprotoize.o):
	Depend on system.h.

	* objc/Make-lang.in (objc-parse.o): Likewise.

Mon Apr  6 14:59:58 1998  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* gansidecl.h: Check if compiler supports __attribute__.  Provide
	definitions for ATTRIBUTE_UNUSED and ATTRIBUTE_PRINTF using
	__attribute__ when its available.  Also provide definitions for
	ATTRIBUTE_PRINTF_1, ATTRIBUTE_PRINTF_2 and ATTRIBUTE_PRINTF_3 in
	terms of ATTRIBUTE_PRINTF.

	* genoutput.c (process_template): Use ATTRIBUTE_UNUSED in place
	of __attribute__.

Mon Apr  6 07:17:52 1998  Catherine Moore  <clm@cygnus.com>

	* combine.c (can_combine_p): Include successor in volatile test.

Mon Apr  6 14:16:33 1998  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* sh.h (CASE_VECTOR_SHORTEN_MODE): Fix logic when to set
	offset_unsigned.

Mon Apr  6 02:03:29 1998  Jeffrey A Law  (law@cygnus.com)

	* objc/objc-act.c (encode_aggregate_within): Avoid GNU extensions
	in prototype and definition.

Mon Apr  6 00:48:56 1998  Jeff Law  (law@cygnus.com)

	* version.c: Bump for snapshot.

Mon Apr  6 00:08:50 1998  Richard Henderson  <rth@cygnus.com>

	* alpha.c (alpha_expand_block_clear): Add missing offset arg to
	alpha_expand_unaligned_store_words.

Sun Apr  5 21:31:24 1998  John Wehle  (john@feith.com)

	* i386.md (movsf_push, movsf_mem): Remove.
	(movsf_push): Rename from movsf_push_nomove and move in front of
	movsf.  Use nonmemory_operand predicate and don't bother checking
	TARGET_MOVE.
	(movsf_push_memory): New pattern.
	(movsf): Don't bother checking for push_operand.  If TARGET_MOVE and
	both operands refer to memory then force operand[1] into a register.
	(movsf_normal): Change to unnamed pattern.
	Likewise for movdf, movxf, and friends.

Sun Apr  5 18:45:51 1998  Jeff Law  (law@cygnus.com)

	* version.c: Bump for snapshot.

Sun Apr  5 16:31:10 1998  Richard Henderson  <rth@cygnus.com>

	* configure.in (alpha-dec-osf*): Match osf1.3 correctly.

Sun Apr  5 16:53:37 1998  Don Bowman  <don@pixsci.com>

	* configure.in (mips-wrs-vxworks): New target.

Sat Apr  4 23:34:32 1998  Jeff Law  (law@cygnus.com)

	* expmed.c (synth_mult): The value -1, has no zeros, so it can
	never have the form ...011.

	* version.c: Bump for snapshot.

Sat Apr  4 20:16:46 1998  Richard Henderson  <rth@cygnus.com>

	* i386.c (asm_output_function_prefix, load_pic_register):
	Use ASM_GENERATE_INTERNAL_LABEL properly.
	(output_pic_addr_const): Recognize %X to suppress any PIC sym suffix.
	(print_operand): Ignore it.
	(load_pic_register): Use it for the got load call.
	* i386.md (prologue_set_got, prologue_get_pc): Likewise.
	(prologue_get_pc_and_set_got): Likewise.
	* i386.h: Update print_operand docs.

Sat Apr  4 19:08:37 1998  Richard Henderson  <rth@cygnus.com>

	* i386.md (ffssi, ffshi): Rewrite as define_expands.
	(ffssi_1, ffshi_1): New (unspec [] 5) support patterns.
	* i386.c (notice_update_cc): Recognize unspec 5.

Sat Apr  4 18:07:16 1998  David Mosberger-Tang  (davidm@mostang.com)

	* alpha.h (PRINT_OPERAND_PUNCT_VALID_P): Accept '(' for s/sv/svi.
	* alpha.c (print_operand): Handle it.
	* alpha.md (fix_truncsfdi2): Use it.  Add earlyclobber pattern
	for ALPHA_TP_INSN.
	(fix_truncdfdi2): Likewise.

Sat Apr  4 17:42:05 1998  Richard Henderson  <rth@cygnus.com>

	* tree.h (sizetype_tab[2], sbitsizetype, ubitsizetype): Merge all
	of these into a single struct, with additional [us]sizetype entries.
	* stor-layout.c (set_sizetype): Initialize [us]sizetype.
	* fold-const.c (size_int_wide): Don't rely on sizetype_tab being
	an array.

Sat Apr  4 17:04:41 1998  Richard Henderson  <rth@cygnus.com>

	* configure.in (alpha-*-linux-*): Undo tm_file changes from gcc2 merge.

Sat Apr  4 13:50:01 1998  Richard Henderson  <rth@cygnus.com>

	* haifa-sched.c (split_block_insns): Don't suppress insn splitting
	on subsequent passes.

	* alpha.c (hard_fp_register_operand): New function.
	* alpha.h (PREDICATE_CODES): Add it.
	* alpha.md (extendsidi2): Kill bogus f<-f cvtql+cvtlq case.  Add an
	f<-m case and accompanying define_split.
	(trapb): Use a unique unspec_volatile number.

Sat Apr  4 13:32:08 1998  Richard Henderson  <rth@cygnus.com>

	* configure.in (alpha-*-linux-gnu*): Undo Feb 3 change brought in
	from gcc2 merge.

Sat Apr  4 10:23:41 1998  Jeffrey A Law  (law@cygnus.com)

	* Check in merge from gcc2.  See ChangeLog.11 and ChangeLog.12
	for details.

	* haifa-sched.c: Mirror recent changes from gcc2.

Fri Apr  3 00:17:01 1998  Jeffrey A Law  (law@cygnus.com)

	* Makefile.in (insn*.o): Depend on system.h.

	* pa.c (output_global_address): Initialize base.
	* pa.h (GO_IF_LEGITIMATE_ADDRESS): Initialize index.

1998-04-03  Mike Stump  <mrs@wrs.com>

	* gthr.h: Support systems that don't have weak, but have threads.
	* configure.in (*wrs-vxworks*): Use VxWorks threads by default.
	* gthr-vxworks.h: New file.
	* objc/thr-vxworks.h: Dummy file from thr-single.c for now.

Thu Apr  2 18:00:52 1998  Jim Wilson  <wilson@cygnus.com>

	* i386.md (movqi+1): Change alternative 1 from *r/r to *r/*rn.

1998-04-02  Vladimir N. Makarov  <vmakarov@cygnus.com>

	* ginclude/va-i960.h (va_end): Change void * to void.

Thu Apr  2 13:51:10 1998  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* Makefile.in (choose-temp.o): Depend on system.h.

	* choose-temp.c: Include system.h when IN_GCC.

Thu Apr  2 02:37:07 1998  Joern Rennecke  (amylaar@cygnus.co.uk)
			  Richard Henderson  <rth@cygnus.com>

	* reload.c (find_reloads_address): Try LEGITIMIZE_RELOAD_ADDRESS.
	(move_replacements): New function.
	* reload.h: Prototype it.

	* alpha.h (LEGITIMIZE_RELOAD_ADDRESS): New definition.

Thu Apr  2 01:01:34 1998  Richard Henderson  <rth@cygnus.com>

	* configure (alpha-*-linuxecoff, alpha-*-linux-gnulibc1):
	Run fixincludes.

	* emit-rtl.c (gen_lowpart_common): Skip count by HARD_REGNO_NREGS.
	(gen_highpart): Likewise.
	* final.c (alter_subreg): Allow the target to hook by-mode subreg
	hard register number changes.

Wed Apr  1 22:26:22 1998  Jeffrey A Law  (law@cygnus.com)

	* fold-const.c optimze_bit_field_compare): Initialize rnbitpos,
	rnbitsize, rnmode and rinner.
	(make_range): Initialize type.
	(fold): Initialize arg0, arg1 and varop.

	* function.c (instantiate_virtual_regs_1): Initialize offset, regnoi
	and regnor.
	(expand_function_start): Initialize last_ptr.

	* stor-layout.c (layout_record): Initialize desired_align.
	(get_best_mode): Initialize unit.

	* tree.c (copy_node): Initialize length.

	* c-lex.c (yylex): Initialize traditional_type, ansi_type and type.

	* caller-save.c (insert_save_restore): Initialize pat, code and
	numregs.

	* emit-rtl.c (push_to_sequence): Initialize top.
	(push_topmost_sequence): Likewise.

	* genattrtab.c (simplify_by_exploding): Initialize defval.

	* profile.c (branch_prob): Initialize dest.

	* rtl.h (note_stores): Remove duplicate prototype.
	(GEN_INT): Reinstate cast of second arg to HOST_WIDE_INT.

	* cplus-dem.c (gnu_special): Don't get confused by .<digits>
	strings that are not actually lengths.

	* genattrtab.c: Make generated file use system.h, instead of
	including stdio.h, etc directly.
	* genextract.c, genopinit.c, genoutput.c: Likewise.
	* genpeep.c, genrecog.c: Likewise.

	* genoutput.c (process_template): Mark operands in the generated
	function as potentially unused if compiling with GNU CC.

	* i386/freebsd-elf.h (CPP_PREDEFINES): Update from FreeBSD folks.

	* pa.md (reload peepholes): Remove unused variable "mode".

Wed Apr  1 17:06:19 1998  Nick Clifton  <nickc@cygnus.com>

	* config/arm/thumb.h: Add super interworking support.
	* config/arm/thumb.c: Add super interworking support.
	* config/arm/thumb.md: Add super interworking support.
	* config/arm/lib1funcs.asm: Add interworking support.
	* config/arm/lib1thumb.asm: Add super interworking support.
	* config/arm/t-semi: Add interworking support.
	* config/arm/t-thumb: Add interworking support.
	* config/arm/README-interworking: New file.

Wed Apr  1 14:38:10 1998  Jim Wilson  <wilson@cygnus.com>

	* config/mips/iris6.h (MD_EXEC_PREFIX): Set to /usr/bin/.
	(MD_STARTFILE_PREFIX): Unset.

1998-04-01  Mark Mitchell  <mmitchell@usa.net>

	* varasm.c (make_decl_rtl): Update the DECL_ASSEMBLER_NAME for a
	entity in a local scope.

	* fold-const.c (fold): Call truthvalue_conversion for values which
	are folded to boolean type.

Wed Apr  1 06:09:53 1998  Jeffrey A Law  (law@cygnus.com)

	* 1750a.md, arm.c, clipper.c, clipper.md: Use GEN_INT consistently.
	* convex.h, dsp16xx.c, fx80.md, gmicro.c, gmicro.md: Likewise.
	* i370.h, i370.md, i860.c, i860.h, i860.md, i960.c: Likewise.
	* i960.h, i960.md, m32r.md, m68k.md, m68kv4.h, m88k.c: Likewise.
	* m88k.md, ns32k.c, ns32k.md, pdp11.c, pdp11.h, pdp11.md: Likewise.
	* pyr.c, pyr.h, pyr.md, romp.c, romp.h, romp.md: Likewise.
	* rs6000.md, sparc.c, sparc.h, sparc.md, spur.c, spur.md: Likewise.
	* tahoe.md, vax.h, vax.md, we32k.c, we32k.h, we32k.md: Likewise.
	* md.texi: Likewise.

Wed Apr  1 08:33:44 1998  Manfred Hollstein  <manfred@s-direktnet.de>

	* fixincludes (limits.h): Fix nested comments in Motorola's
	limits.h and sys/limits.h.

Tue Mar 31 16:57:33 1998  Jim Wilson  <wilson@cygnus.com>

	* alpha.c (alpha_expand_unaligned_load): Use tgt instead of addr
	as dest of expand_binop call.

	* alpha.md (extzv): Correct check for valid operand[2] values.

	* profile.c (branch_prob): Add code to recognize HPPA tablejump entry
	branch.

	* toplev.c (rest_of__compilation): Call init_recog_no_volatile at end.

Mon Mar 30 13:11:05 1998  Stan Cox  <scox@cygnus.com>

	* libgcc2.c (__main, __do_global_dtors, __do_global_ctors):
	For __CYGWIN32__ use the versions in winsup/dcrt0.cc.

	* gcc.c, cccp.c, cpplib.c, collect2.c (GET_ENVIRONMENT): Added.
	cygwin32 can override this to allow both unix and win32 style PATHs.

	* i386/xm-cygwin32.h (GET_ENVIRONMENT): Defined to allow win32
	style environment paths.

Mon Mar 30 14:43:20 1998  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* Makefile.in (cppalloc.o, cpperror.o, cppexp.o, cpphash.o,
	cpplib.o, cppmain.o, fix-header.o, gcov.o, gen-protos.o,
	gengenrtl.o, halfpic.o, hash.o, scan-decls.o, scan.o): Depend on
	system.h.

	* cpphash.c: Include config.h.
	* cppalloc.c: Include system.h.  Add parameters to various
	function prototypes.
	* cpperror.c: Likewise.
	* cppexp.c: Likewise.
	* cpphash.c: Likewise.
	* cpplib.c: Likewise.
	* cppmain.c: Likewise.
	* fix-header.c: Likewise.
	* gcov.c: Likewise.
	* gen-protos.c: Likewise.
	* gengenrtl.c: Likewise.
	* halfpic.c: Likewise.
	* hash.c: Likewise.
	* scan-decls.c: Likewise.
	* scan.c: Likewise.

Mon Mar 30 11:06:45 1998  Jim Wilson  <wilson@cygnus.com>

	* README.gnat: Add lang_print_xnode definition.

Mon Mar 30 11:12:24 1998  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* config/m68k/m68k.c (standard_68881_constant_p): Don't use
	fmovecr on the 68060.

Mon Mar 30 00:21:03 1998  Jeffrey A Law  (law@cygnus.com)

	* genemit.c (DONE): Rework so that it works in the true arm if
	an if-else conditional.
	(FAIL): Likewise.

Sun Mar 29 12:45:23 1998  Jeffrey A Law  (law@cygnus.com)

	* rs6000.c: Do not include stdioh or ctype.h anymore.

	* Makefile.in (c-typeck.o): Delete on expr.h, insn-codes.h and
	$(RTL_H).
	(stor-layout.o): Likewise.
	* c-typeck.c: Include rtl.h and expr.h.
	* stor-layout.c: Likewise.

	* cpplib.c (cpp_file_line_for_message): Delete unused parameter.
	All callers changed.
	(do_sccs): Wrap in an SCCS_DIRECTIVE ifdef.
	* fix-header.c (cpp_file_line_for_message): Delete unused parameter.
	All callers changed.

	* collect2.c (is_in_list): Wrap inside COLLECT_EXPORT_LIST ifdef.

	* local-alloc.c (reg_classes_overlap_p): Delete dead function.

	* tree.h (lang_print_xnode): Provide prototype.

Sat Mar 28 23:50:44 1998  Jeff Law  (law@cygnus.com)

	* version.c: Bump for snapshot.

Sun Mar 29 00:42:21 1998  Jeffrey A Law  (law@cygnus.com)

	* objc/sendmsg.c (__objc_block_forward): Add braces for return
	value if INVISIBLE_STRUCT_RETURN.

	* pa.c (arith_double_operand): Fix parens.

	* haifa-sched.c (print_pattern): Correct arg to sprintf.

	* Makefile.in (libgcc1.null): Make return type for __foo void.

Sat Mar 28 14:37:20 1998  Jeffrey A Law  (law@cygnus.com)

	* pa.h: Add declarations for many functions defined in pa.c.

	* genpeep.c (main): Remove unused variable 'i' from the generated
	file.

	* genemit.c (gen_expand): Do not emit "_done" or "_fail" labels.
	(gen_split): Likewise.
	(main): Rework generated definitions of DONE and FAIL so that they
	no longer use gotos.  Avoids warnings about unused labels.

	* integrate.c (copy_rtx_and_substitute): Rework to avoid need for
	unused "junk" variable.

	* genattrtab.c (write_complex_function): Add a default case in
	generated switch statement to keep -W -Wall quiet.

Sat Mar 28 10:47:21 1998  Nick Clifton  <nickc@cygnus.com>

	* invoke.texi: Document more ARM and Thumb command line options.

	* config/arm/xm-thumb.h: New file.

Sat Mar 28 01:37:33 1998  Craig Burley  <burley@gnu.ai.mit.edu>

	* stmt.c (expand_expr_stmt): Must generate code for
	statements within an expression (gcc's `({ ... )}')
	even if -fsyntax-only.

Sat Mar 28 01:06:12 1998  Bernd Schmidt  <crux@pool.informatik.rwth-aachen.de>
			  Jeffrey A Law  (law@cygnus.com)

	* basic-block.h (basic_block_computed_jump_target): Declare.
	* flags.h (current_function_has_computed_jump): Declare.
	* flow.c (basic_block_computed_jump_target): Define.
	(flow_analysis): Allocate it. Set current_function_has_computed_jump
	to 0.
	(find_basic_blocks): Set current_function_has_computed_jump and
	elements of basic_block_computed_jump_target to 1 as appropriate.
	* function.c (current_function_has_computed_jump): Define.
	* global.c (global_conflicts): Don't allocate pseudos into stack regs
	at the start of a block that is reachable by a computed jump.
	* reg-stack.c (stack_reg_life_analysis): If must restart, do so
	immediately.
	(subst_stack_regs): Undo change from Sep 4 1997.
	(uses_reg_or_mem): Now unused, deleted.
	* stupid.c (stupid_life_analysis): Compute
	current_function_has_computed_jump.
	(stupid_find_reg): Don't allocate stack regs if the function has a
	computed goto.
	* haifa-sched.c (is_cfg_nonregular): Delete code to determine if
	the current function has a computed jump.  Use the global value
	instead.

Sat Mar 28 00:21:37 1998  Jeffrey A Law  (law@cygnus.com)

	* i386/freebsd.h (CPP_PREDEFINES): Remove __386BSD__.
	(DWARF2_UNWIND_INFO): Define to zero.

Fri Mar 27 16:04:49 1998  Michael Meissner  <meissner@cygnus.com>

	* gcc.c (set_std_prefix): Add declaration.
	(process_command): If GCC_EXEC_PREFIX is set, remove /lib/gcc-lib/
	suffix, and update the standard prefix prefix.c uses.

	* prefix.c (std_prefix): New global to hold default prefix value.
	(get_key_value): Change to use std_prefix instead of PREFIX.
	(translate_name): Likewise.
	(update_path): Likewise.
	(get_key_value): Release allocated scratch storage.
	(set_std_prefix): New function to reset the standard prefix.

Fri Mar 27 18:08:21 1998  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* sh.c (find_barrier): Fix calculations for alignment increase.

Fri Mar 27 08:56:52 1998  Manfred Hollstein  <manfred@s-direktnet.de>

	* Makefile.in (stmp-fixinc): If we're actually fixing include
	files, copy gcc's assert.h into the fixed include dir.
	* fixincludes (assert.h): Avoid any attempts to fix a probably
	broken system specific assert.h file.
	* fixproto (stdlib.h): Make sure, it'll contain a definition of
	size_t.

Fri Mar 27 00:49:46 1998  Jeffrey A Law  (law@cygnus.com)

	* regclass.c (reg_scan_mark_refs): Be more selective about
	when we mark a register with REGNO_POINTER_FLAG.

Thu Mar 26 23:00:11 1998  J"orn Rennecke  <amylaar@cygnus.co.uk>

	reload inheritance improvement:
	* reload1.c (reg_reloaded_contents, reg_reloaded_insn):
	Change meaning: index is now hard reg number.
	(reg_reloaded_valid, reg_reloaded_dead): New variables.
	(reload_spill_index): Content is now a hard reg number.
	(reload_as_needed): Change to fit new variable meaning.
	(forget_old_reloads_1, allocate_reload_reg): Likewise.
	(choose_reload_regs, emit_reload_insns): Likewise.

Thu Mar 26 18:34:13 1998  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* regclass.c (record_reg_classes): '?' increases cost by two.

	* reload.c (find_reloads): Double previous costs.  Output
	reloads cost one unit extra.

	* reload1.c (eliminate_regs): Delete LOAD_EXTENDED_OP code that
	boiled down to && ! 0.

	* reload.c (find_equiv_reg): Also consider a goal offset from the
	frame pointer to be constant.

Thu Mar 26 17:34:46 1998  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* sh.h (OPTIMIZATION_OPTIONS): Define.

Thu Mar 26 00:19:47 1998  Richard Henderson  <rth@cygnus.com>

	* combine.c (make_compound_operation): Simplify (subreg (*_extend) 0).

Wed Mar 25 23:53:11 1998  Jeffrey A Law  (law@cygnus.com)

	* pa.c (pa_adjust_cost): Avoid redundant calls to get_attr_type.

Wed Mar 25 13:40:48 1998  Jim Wilson  <wilson@cygnus.com>

	* c-common.c (check_format_info): Initialize type, is_type.  New local
	integral_format.  Don't warn for 'L' when pedantic.  Do warn for 'L'
	when pedantic if used with integral format specifier.

Wed Mar 25 16:09:01 1998  Michael Meissner  <meissner@cygnus.com>

	* rs6000.h (FUNCTION_ARG_PADDING): Cast result to be enum
	direction.
	(function_arg_padding): Declare.

	* rs6000.c: Include system.h.
	(function_arg_padding): Change return type to int, cast enum's to
	int.

	(From Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>)
	* collect2.c (scan_prog_file): Add explicit braces to avoid
	ambiguous `else'.

	* dbxout.c (dbxout_type_fields): Add braces around empty body in
	an if-statement.
	(dbxout_type): Likewise.

	* rs6000.c (rs6000_override_options): Change type of `i', `j' and
	`ptt_size' from int to size_t.
	(rs6000_file_start): Likewise for `i'.
	(rs6000_replace_regno): Add default case in enumeration switch.
	(output_epilog): Remove unused variable `i'.
	(rs6000_longcall_ref): Remove unused variables `len', `p', `reg1'
	and `reg2'.

	* rs6000.h (ADDITIONAL_REGISTER_NAMES): Add missing braces around
	initializer.
	(get_issue_rate, non_logical_cint_operand): Add prototype.
	(rs6000_output_load_toc_table): Likewise.

	* rs6000.md (udivmodsi4): Add explicit braces to avoid ambiguous
	`else'.

Wed Mar 25 10:05:19 1998  Nick Clifton  <nickc@cygnus.com>

	* config/arm/thumb.c: New File.  Support for ARM's Thumb
	instruction set.
	* config/arm/thumb.h: New File.  Thumb definitions.
	* config/arm/thumb.md: New File.  Thumb machine description.
	* config/arm/tcoff.h: New File.  Thumb COFF support.
	* config/arm/t-thumb: New File.  Thumb makefile fragment.
	* config/arm/lib1thumb.asm: New File.  Thumb libgcc support functions.

	* configure.in: Add Thumb-coff target.
	* configure: Add Thumb-coff target.
	* config.sub: Add Thumb-coff target.

Wed Mar 25 10:30:32 1998  Jim Wilson  <wilson@cygnus.com>

	* loop.c (scan_loop): Initialize move_insn_first to zero.

Wed Mar 25 01:06:49 1998  Joel Sherrill  (joel@OARcorp.com)

	* config/i386/go32-rtems.h: Defined TARGET_MEM_FUNCTIONS.
	* config/i386/rtems.h: Likewise.
	* config/i960/rtems.h: Likewise.
	* config/m68k/rtems.h: Likewise.
	* config/mips/rtems64.h: Likewise.
	* config/pa/rtems.h: Likewise.
	* config/rs6000/rtems.h: Likewise.
	* config/sh/rtems.h: Likewise.
	* config/sparc/rtems.h: Likewise.

Wed Mar 25 00:57:26 1998  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>

	* pa.c (emit_move_sequence): If in reload, call find_replacement.

Tue Mar 24 10:44:11 1998  Nick Clifton  <nickc@cygnus.com>

	* Makefile.in (gcov$(exeext)): Support .exe extension to gcov.

	* collect2.c (find_a_file): Add debugging.
	(find_a_file): Test for win32 style absolute paths if
	DIR_SERPARATOR is defined.
	(prefix_from_string): Add debugging.
	(main): Test for debug command line switch at start of program
	execution.
	(main): Use GET_ENVIRONMENT rather than getenv().
	(prefix_from_env): Use GET_ENVIRONMENT.

1998-03-24  Mark Mitchell  <mmitchell@usa.net>

	* cplus-dem.c (optable): Add sizeof.
	(demangle_template_value_parm): New function containing code
	previously found in demangle_template.
	(demangle_integral_value): New function which handles complicated
	integral expressions.
	(demangle_template): Use them.

Tue Mar 24 12:13:18 1998  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* Makefile.in (genconfig.o, genflags.o, gencodes.o, genemit.o,
	genopinit.o, genrecog.o, genextract.o, genpeep.o, genattr.o,
	genattrtab.o, genoutput.o): Depend on system.h.

	* genattr.c: Include system.h.  Add arguments to various function
	prototypes.  Remove redundant prototype of read_rtx().
	* genattrtab.c: Likewise.
	* gencodes.c: Likewise.
	* genconfig.c: Likewise.
	* genemit.c: Likewise.
	* genextract.c: Likewise.
	* genflags.c: Likewise.
	* genopinit.c: Likewise.
	* genoutput.c: Likewise.
	* genpeep.c: Likewise.
	* genrecog.c: Likewise.

1998-03-24  Martin von Löwis  <loewis@informatik.hu-berlin.de>

	* c-lang.c (lang_print_xnode): New function.
	* objc/objc-act.c (lang_print_xnode): Likewise.
	* print-tree.c (print_node): Call it

Mon Mar 23 23:59:11 1998  H.J. Lu  (hjl@gnu.org)

	* c-parse.in: Recognize protocol qualifiers in class
	definitions for objc.
	Include "output.h".
	(yyerror): Remove redundant decl.
	(yyprint): Fix prototype.

Mon Mar 23 23:49:47 1998  Jeffrey A Law  (law@cygnus.com)

	* cse.c (rtx_cost): Only call CONST_COSTS if it is defined.

	* stmt.c (unroll_block_trees): Free block_vector if needed.

Mon Mar 23 23:26:42 1998  Philippe De Muyter  <phdm@macqel.be>

	* m68k/m68k.md (zero_extendqidi2, zero_extendhidi2): New patterns.
	(zero_extendsidi2): Avoid useless copy.
	(iordi_zext): New pattern.
	(iorsi_zexthi_ashl16): Pattern reworked to avoid "0" constraint for
	operand 2.
	(iorsi_zext): New name for old unnamed pattern; indentation fixes.

	* m68k/m68k.md (ashldi_const): Allow shift count in range ]32,63].
	(ashldi3): Allow constant shift count in range ]32,63].
	(ashrdi_const, ashrid3, lshrdi_const, lshrdi3): Likewise.

1998-03-22  Mark Mitchell  <mmitchell@usa.net>

	* tree.h (IS_EXPR_CODE_CLASS): New macro.

Mon Mar 23 23:18:48 1998  Jeffrey A Law  (law@cygnus.com)

	* h8300.h (CONST_COSTS): Remove definition.
	(DEFAULT_RTX_COSTS): Define.

Mon Mar 23 22:58:22 1998  Joel Sherrill  (joel@OARcorp.com)

	* config/sh/rtems.h: Switched from ELF to COFF.

Mon Mar 23 14:14:20 1998  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* freebsd.h (ASM_OUTPUT_ALIGN): Redefine.

Sat Mar 21 23:52:56 1998  Jeff Law  (law@cygnus.com)

	* version.c: Bump for snapshot.

Sun Mar 22 00:50:42 1998  Nick Clifton  <nickc@cygnus.com>
			  Geoff Noer	<noer@cygnus.com>

	* Makefile.in: Various fixes for building cygwin32 native toolchains.

	* objc/Makefile.in: Various fixes for building cygwin32 native toolchains.
	* objc/Make-lang.in: Likewise.

	* config/i386/xm-cygwin32.h (PATH_SEPARATOR): Set to a semi-colon.

Sun Mar 22 00:21:46 1998  R. Ganesan  <rganesan@novell.com>

	* configure.in: Handle with-PACKAGE=no correctly

Fri Mar 20 17:36:23 1998  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* Makefile.in (alias.o, bitmap.o, c-aux-info.o, c-common.o,
	c-decl.o, c-iterate.o, c-lang.o, c-lex.o, c-pragma.o, c-typeck.o,
	caller-save.o, calls.o, collect2.o, combine.o, cse.o, dbxout.o,
	dwarf2out.o, dwarfout.o, emit-rtl.o, except.o, explow.o, expmed.o,
	expr.o, final.o, flow.o, function.o, getpwd.o, global.o,
	integrate.o, jump.o, local-alloc.o, loop.o, optabs.o, pexecute.o,
	prefix.o, print-rtl.o, print-tree.o, profile.o, real.o, recog.o,
	reg-stack.o, regclass.o, regmove.o, reload.o, reload1.o, reorg.o,
	rtl.o, rtlanal.o, sdbout.o, stmt.o, stor-layout.o, stupid.o,
	tlink.o, toplev.o, tree.o, unroll.o, varasm.o, xcoffout.o): Depend
	on system.h.

	* alias.c, bitmap.c, c-aux-info.c, c-common.c, c-decl.c,
	c-iterate.c, c-lang.c, c-lex.c, c-pragma.c, c-typeck.c,
	caller-save.c, calls.c, collect2.c, combine.c, cse.c, dbxout.c,
	dwarf2out.c, dwarfout.c, emit-rtl.c, except.c, explow.c, expmed.c,
	expr.c, final.c, flow.c, function.c, gcc.c, getpwd.c, global.c,
	integrate.c, jump.c, local-alloc.c, loop.c, optabs.c, pexecute.c,
	prefix.c, print-rtl.c, print-tree.c, profile.c, real.c, recog.c,
	reg-stack.c, regclass.c, regmove.c, reload.c, reload1.c, reorg.c,
	rtl.c, rtlanal.c, sched.c, sdbout.c, stmt.c, stor-layout.c,
	stupid.c, tlink.c, toplev.c, tree.c, unroll.c, varasm.c,
	xcoffout.c: Include system.h.  Organize include ordering so
	that stdarg/varargs comes before other system headers.  Remove
	spurious casts of functions assured of a prototype in system.h.

Fri Mar 20 11:19:40 1998  Stan Cox  <scox@equinox.cygnus.com>

	* reg-stack.c (pop_stack): Define. Pops any register on the
	regstack and adjusts regstack.
	(compare_for_stack_reg): Use pop_stack.

Thu Mar 19 23:51:01 1998  Jeffrey A Law  (law@cygnus.com)

	* configure.in (hppa1.0-hp-hpux10): Handle threads for this
	config too.

Thu Mar 19 20:30:31 1998  Philippe De Muyter  <phdm@macqel.be>

	* libgcc2.c (exit): Do not call __bb_exit_func if HAVE_ATEXIT.

	* fold-const.c (fold): Replace sign-extension of a zero extended
	value by a single zero extension.

Thu Mar 19 00:58:07 1998  Jason Merrill  <jason@yorick.cygnus.com>

	* except.c (init_eh): Do nothing.
	(save_eh_status): Call init_eh_for_function, not init_eh.
	* function.c (push_function_context_to): Don't call init_emit.

Thu Mar 19 13:39:52 1998  Michael Meissner  <meissner@cygnus.com>

	* rs6000/sysv4.h (RELATIVE_PREFIX_NOT_LINKDIR): Undef for System V
	and EABI.

Thu Mar 19 10:10:36 1998  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* final.c (shorten_branches): Add parentheses around +/- in
	operand of &.

	* flow.c (life_analysis): Wrap variable `i' in macro ELIMINABLE_REGS.

Thu Mar 19 09:15:17 1998  Manfred Hollstein  <manfred@s-direktnet.de>

	* regclass.c (memory_move_secondary_cost): Wrap uses of
	SECONDARY_INPUT_RELOAD_CLASS and SECONDARY_OUTPUT_RELOAD_CLASS
	with #ifdef tests.

Thu Mar 19 09:06:35 1998  Manfred Hollstein  <manfred@s-direktnet.de>

	* config/m68k/m68k.md (addqi3): Fix typo gen_INT vs. GEN_INT.

	* flow.c (life_analysis): #include <sys/types.h> to make sure
	size_t is defined.
	* cplus-dem.c (demangle_function_name): Likewise.

Thu Mar 19 09:00:01 1998  Manfred Hollstein  <manfred@s-direktnet.de>

	* final.c (insn_noperands): Change type to unsigned int.
	(final_scan_insn): Likewise for noperands;
	properly check operand number boundaries.

Wed Mar 18 16:20:30 1998  Richard Henderson  <rth@cygnus.com>

	* alpha.md (extzv): Don't reject register operands.  Fix
	mode of operand 1.

Wed Mar 18 16:14:23 1998  Richard Henderson  <rth@cygnus.com>

	* dbxout.c (dbxout_function_end): Fix last change.  The correct
	predicate is ASM_OUTPUT_SECTION_NAME.

Wed Mar 18 12:43:20 1998  Jim Wilson  <wilson@cygnus.com>

	* sh.md (ashlsi_c-1): Delete 3rd argument to gen_ashlsi_c.
	(ashlsi): Use match_dup 1 instead of match_operand 2.

Wed Mar 18 13:46:07 1998  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>

	* fold-const.c (operand_equal_for_comparison_p): See if equal
	when nop conversions are removed.

Wed Mar 18 13:42:01 1998  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>

	* expr.c (expand_expr, case COND_EXPR): If have conditional move,
	don't use ORIGINAL_TARGET unless REG.

Wed Mar 18 16:53:19 1998  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* netbsd.h (ASM_OUTPUT_ALIGN): Redefine.

Wed Mar 18 12:43:20 1998  Jim Wilson  <wilson@cygnus.com>

	* loop.c (struct movable): New field move_insn_first.
	(scan_loop): In consec sets code, set it.  Clear it otherwise.
	(move_movables): In consec sets code, use it.  Copy REG_NOTES from
	p to i1 only if i1 does not have REG_NOTES.  Delete obsolete ifdefed
	out code.

Wed Mar 18 09:52:56 1998  Richard Henderson  <rth@cygnus.com>

	* rtl.c (read_rtx): Fall back on homebrew atoll if HOST_WIDE_INT
	is large, and the system doesn't provide atoll or atoq.
	(atoll): New.

	* alpha/xm-vms.h (HAVE_ATOLL): Define.
	Reported by Klaus Kaempf <kkaempf@progis.de>.

Wed Mar 18 09:56:26 1998  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* c-lang.c (finish_file): Wrap variable `void_list_node' with macro
	test !ASM_OUTPUT_CONSTRUCTOR || !ASM_OUTPUT_DESTRUCTOR.

	* calls.c (emit_call_1): Wrap variable `already_popped' with macro
	test !ACCUMULATE_OUTGOING_ARGS.

	* collect2.c (write_c_file_glob): Wrap function definition in
	macro test !LD_INIT_SWITCH.

	* combine.c (try_combine): Wrap variables `cc_use' and
	`compare_mode' in macro test EXTRA_CC_MODES.

	* cpplib.c (do_ident): Remove unused variable `len'.
	(skip_if_group): Remove unused variables `at_beg_of_line' and
	`after_ident'.
	(cpp_get_token): Remove unused variable `dummy'.

	* dbxout.c (scope_labelno): Move static variable definition inside
	the one function scope where it is used.
	(dbxout_function_end): Wrap prototype and definition in
	macro test !NO_DBX_FUNCTION_END.

	* dwarf2out.c (add_subscript_info): Wrap variable `dimension_number'
	in macro test !MIPS_DEBUGGING_INFO.

	* expr.c (expand_builtin_setjmp): Move declaration of variable `i'
	into the scope where it is used.  Wrap empty else-statement body
	in braces.

	* fix-header.c: Fix typo in comment.
	(inf_skip_spaces): Cast results of INF_UNGET to (void).
	(check_protection, main): Likewise.

	* flow.c (find_basic_blocks_1): Remove dangling comment text.

	* function.c (contains): Wrap prototype and definition in macro
	test HAVE_prologue || HAVE_epilogue.
	(fixup_var_refs_1): Remove unused variable `width'.

	* gen-protos.c (main): Remove unused variable `optr'.

	* haifa-sched.c (debug_control_flow): Remove unused variable `j'.

	* libgcc2.c (__udiv_w_sdiv): Provide dummy return value of 0.
	(__sjpopnthrow): Remove unused variable `jmpbuf'.
	(__throw): Remove unused variable `val'.

	* protoize.c: Check for a previously existing definition before
	defining *_OK macros.

	* scan-decls.c (scan_decls): Remove unused variable `old_written'.

Tue Mar 17 00:45:48 1998  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* vax.h (ADDR_VEC_ALIGN): Define.

Mon Mar 16 15:57:17 1998  Michael Meissner  <meissner@cygnus.com>

	* gcc.c (default_arg): Don't wander off the end of allocated
	memory.

	(From Geoffrey Keating  <geoffk@ozemail.com.au>)
	* rs6000.c (small_data_operand): Ensure that any address
	referenced relative to the small data area is inside the SDA.

Mon Mar 16 12:55:15 1998  Jim Wilson  <wilson@cygnus.com>

	* config/m68k/netbsd.h (ASM_SPEC): Add %{m68060}.

Mon Mar 16 15:50:20 1998  Andrew MacLeod  <amacleod@cygnus.com>

	* except.h (in_same_eh_region): New prototype.
	(free_insn_eh_region, init_insn_eh_region): New prototypes.
	* except.c (insn_eh_region, maximum_uid): New static variables.
	(set_insn_eh_region): New static function to set region numbers.
	(free_insn_eh_region): New function to free EH region table.
	(init_insn_eh_region): New function to initialize EH region table.
	(in_same_eh_region): New function used to determine if two rtl
	instructions are in the same exception region or not.
	* final.c (final): Initialize the table indicating which instructions
	belong in which exception region.
	* genpeep.c (main): Add "except.h" to include file list in generated
	file insn-peep.c.
	* config/sparc/sparc.md: Add calls to 'in_same_eh_region' in 4
	peepholes involving calls and unconditional branches.

Mon Mar 16 11:16:50 1998  Jim Wilson  <wilson@cygnus.com>

	* README.gnat: New file.

Mon Mar 16 11:14:20 1998  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* config/m68k/m68k.c: Include <stdlib.h> for atoi.  Include
	"recog.h" for offsettable_memref_p.
	(legitimize_pic_address): Remove unused variable `offset'.
	(notice_update_cc): Change return type to void.  Add default label
	to switch.
	(standard_68881_constant_p): Remove unused variable mode.
	(print_operand): Define local variable i only if SUPPORT_SUN_FPA.
	(const_int_cost): Explicitly declare as returning int.
	(output_dbcc_and_branch): Change return type to void.

	* config/m68k/linux.h, config/m68k/m68k.md, config/m68k/m68k.c,
	config/m68k/m68k.h: Replace gen_rtx (XXX, ...) with gen_rtx_XXX
	(...).  Use GEN_INT instead of gen_rtx_CONST_INT.

Sun Mar 15 22:30:44 1998  Jeff Law  (law@cygnus.com)

	* version.c: Bump for snapshot.

Fri Mar 13 11:30:12 1998  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* config/m68k/m68k.h (CONST_OK_FOR_LETTER_P): Fix logic in range
	check for 'M' constraint.

Thu Mar 12 14:47:14 1998  Jim Wilson  <wilson@cygnus.com>

	* cccp.c (create_definition): If pedantic, call pedwarn for macro
	varargs feature.

Thu Mar 12 13:43:25 1998  Bernd Schmidt  <crux@Pool.Informatik.RWTH-Aachen.DE>

	* i386.c (ix86_logical_operator): New function.
	(split_di): Ensure that when a MEM is split, the resulting MEMs have
	SImode.
	* i386.md (anddi3, xordi3, iordi3): New patterns. Add a define_split
	to implement them.

Thu Mar 12 15:13:16 1998  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
			  Richard Earnshaw  <rearnsha@arm.com>
			  Nick Clifton  <nickc@cygnus.com>

	* tm.texi (DEFAULT_RTX_COSTS): Document new macro.

	* arm.h (DEFAULT_RTX_COSTS): Define instead of RTX_COSTS.

	* cse.c (rtx_cost): Provide a default case in an enumeration
	switch, and call DEFAULT_RTX_COSTS if it's defined.

Thu Mar 12 10:02:38 1998  Manfred Hollstein  <manfred@s-direktnet.de>

	* basic-block.h (compute_preds_succs): Change return type in
	prototype to void.
	* flow.c (compute_preds_succs): Likewise in function definition.

	* regmove.c (find_matches): Cast char used as array index to unsigned char
	to suppress warning.

Thu Mar 12 09:39:40 1998  Manfred Hollstein  <manfred@s-direktnet.de>

	* i386.h (RTX_COSTS): Insert braces around nested if.
	(ADDITIONAL_REGISTER_NAMES): Insert braces around structured
	elements.

	* gcc.c (default_compilers): Properly put brackets around array elements in
	initializer.

	* getopt.c (_getopt_internal): Add explicit braces around nested if;
	reformatted.

	* reg-stack.c (record_asm_reg_life): Add explicit braces around nested if's.
	(record_reg_life_pat): Add explicit parens around && and || in expression.
	(stack_reg_life_analysis): Add parens around assignment used as expression.
	(convert_regs): Likewise.

Thu Mar 12 09:25:29 1998  Manfred Hollstein  <manfred@s-direktnet.de>

	* bitmap.c (bitmap_element_allocate): Remove unused parameter;
	change callers accordingly.

	* cplus-dem.c (arm_special): Remove unused parameter work in prototype
	and definition; change all callers accordingly.

	* except.c (init_eh): Avoid assignment of unused return value of
	build_pointer_type; cast it to void, instead, and remove unused
	variable type.

	* gcc.c (lang_specific_driver): Define prototype only #ifdef
	LANG_SPECIFIC_DRIVER.
	(temp_names): Define only #ifdef MKTEMP_EACH_FILE.

	* genoutput.c (output_epilogue): Initialize next_name to 0.

	* real.c (efrexp): #if 0 prototype and function definition.
	(eremain): Likewise.
	(uditoe): Likewise.
	(ditoe): Likewise.
	(etoudi): Likewise.
	(etodi): Likewise.
	(esqrt): Likewise.

	* reload.c (push_secondary_reload): Define prototype only
	#ifdef HAVE_SECONDARY_RELOADS.

	* varasm.c (assemble_static_space): Define rounded only
	#ifndef ASM_OUTPUT_ALIGNED_LOCAL.

Thu Mar 12 09:11:35 1998  Manfred Hollstein  <manfred@s-direktnet.de>

	* i386.md (andsi): Add default case in enumeration switch.
	(iorsi3): Likewise.
	(iorhi3): Likewise.
	(xorsi3): Likewise.

Thu Mar 12 08:37:02 1998  Manfred Hollstein  <manfred@s-direktnet.de>

	* c-decl (finish_struct): Change type of min_align to unsigned.

	* cplus-dem.c (demangle_function_name): Change type of variable i to size_t;
	remove unused variable len.

	* dwarf2out.c (reg_save): Add explicit cast of -1 to unsigned and a
	comment indicating this is proper behavior.
	(reg_loc_descriptor): Remove redundant comparison of unsigned variable
	reg >= 0.
	(based_loc_descr): Likewise.

	* enquire.c (bitpattern): Change type of variable i to unsigned.

	* final.c (output_asm_insn): Don't cast insn_noperands to unsigned.

	* flow.c (life_analysis): Change type of variable i to size_t;
	remove unused variable insn.

	* gcc.c (translate_options): Change type of variables optlen, arglen and
	complen to size_t.
	(input_filename_length): Change type to size_t.
	(do_spec_1): Change type of variable bufsize to size_t.
	(main): Change type of variables i and j to size_t;
	remove subblock local definition of variable i.
	(lookup_compiler): Change type of second argument to size_t;
	change type of variable i to size_t.

	* genemit.c (output_init_mov_optab): Change type of variable i to size_t.

	* genopinit.c (get_insn): Change type of variable pindex to size_t.

	* genrecog.c (add_to_sequence): Change type of variable i to size_t.

	* global.c (global_alloc): Change type of variable i to size_t.

	* regclass.c (init_reg_sets): Change type of variables i and j to unsigned.

	* stmt.c (expand_end_bindings): Change type of variable i to size_t.
	(expand_end_case): Change type of variable count to size_t.

	* toplev.c (main): Change type of variable j to size_t.
	(set_target_switch): Change type of variable j to size_t.
	(print_switch_values): Change type of variable j to size_t;
	remove unused variable flags.

	* varasm.c (assemble_variable): Change type of variable align to size_t.
	(const_hash_rtx): Change type of variable i to size_t.

1998-03-11  Mark Mitchell  <mmitchell@usa.net>

	* dbxout.c (dbxout_type_methods): Only treat TYPE_METHODS as a
	TREE_VEC if that's what it really is.

Wed Mar 11 15:16:01 1998  Michael Meissner  <meissner@cygnus.com>

	* {haifa-,}sched.c (rank_for_schedule): Only take void * arguments
	as per ISO C spec.

Wed Mar 11 12:05:20 1998  Teemu Torma  <tot@trema.com>

	* gthr.h: Changed the comment about return values.
	* gthr-solaris.h (__gthread_once): Do not use errno; return the
	error number instead of -1.
	(__gthread_key_create): Any nonzero return value is an error.
	* libgcc2.c (eh_context_initialize): Check for nonzero return
	value from __gthread_once.
	Check that the value of get_eh_context was really changed.

Wed Mar 11 18:26:25 1998  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* sh.h (LOOP_ALIGN): Only align when optimizing.
	* sh.c (find_barrier): Clear inc for CODE_LABELs.
	When not optimizing, calculate alignment for BARRIERs directly.

Wed Mar 11 15:07:18 1998  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* final.c (shorten_branches): Remove conditionalizing on
	SHORTEN_WITH_ADJUST_INSN_LENGTH.
	* sh.h, pa.h (SHORTEN_WITH_ADJUST_INSN_LENGTH): Remove.

Wed Mar 11 02:37:41 1998  Jeffrey A Law  (law@cygnus.com)

	* flow.c (find_basic_blocks_1): Keep the cfg accurate when removing
	an unconditional jump around deleted blocks.

Mon Mar  9 12:02:23 1998  Jim Wilson  <wilson@cygnus.com>

	* profile.c (branch_prob): If see computed goto, call fatal instead of
	abort.

	* config/mips/sni-svr4.h (CPP_PREDEFINE): Add -DSNI and -Dsinix.

	* configure.in (alpha-dec-osf): Add default case for osf* to switch.
	Patch from Bruno Haible.

	* function.c (put_reg_into_stack): Copy MEM_IN_STRUCT_P from new.
	(assign_parms): Set aggregate if hide_last_arg and last_named.

Mon Mar  9 19:57:56 1998  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* final.c (shorten_branches): Initialize insn_addresses.

Mon Mar  9 14:10:23 1998  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* sh.h (MUST_PASS_IN_STACK): Define.

Sun Mar  8 13:01:56 1998  Jeffrey A Law  (law@cygnus.com)

	* final.c (shorten_branches): Fix minor logic error in
	ADDR_DIFF_VEC shortening support.

Sun Mar  8 02:17:42 1998  Jeff Law  (law@cygnus.com)

	* version.c: Bump for snapshot.

Sat Mar  7 00:54:15 1998  Jeffrey A Law  (law@cygnus.com)

	* haifa-sched.c (is_cfg_nonregular): Change return type to
	an int.  No longer compute "estimated" number of edges.  Use
	computed_jump_p instead of duplicating the code.  Fixup/add
	some comments.
	(build_control_flow): Returns a value indicating an irregularity
	in the cfg was detected.  Count the number of edges in the cfg.
	allocate various edge tables.
	(find_rgns): No longer look for unreachable blocks.
	(schedule_insns): Do not allocate memory for edge tables here.
	Free memory for edge tables before returning.  Do not perform
	cross block scheduling if build_control_flow returns nonzero.
	* flow.c (compute_preds_succs): More accurately determine when
	a block drops in.

	* basic-block.h (free_basic_block_vargs): Provide prototype.

	* cccp.c (main): Fix dumb mistakes in last change.

Fri Mar  6 21:28:45 1998  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* rtl.h (addr_diff_vec_flags): New typedef.
	(union rtunion_def): New member rt_addr_diff_vec_flags.
	(ADDR_DIFF_VEC_FLAGS): New macro.

	* sh.c (output_branch): Fix offset overflow problems.

	* final.c (shorten_branches): Implement CASE_VECTOR_SHORTEN_MODE.
	(final_scan_insn): New argument BODY for ASM_OUTPUT_ADDR_DIFF_ELT.
	* rtl.def (ADDR_DIFF_VEC): Three new fields (min, max and flags).
	* stmt.c (expand_end_case): Supply new arguments to
	gen_rtx_ADDR_DIFF_VEC.
	* 1750a.h (ASM_OUTPUT_ADDR_DIFF_ELT): New argument BODY.
	* alpha.h, arc.h, clipper.h, convex.h : Likewise.
	* dsp16xx.h, elxsi.h, fx80.h, gmicro.h, h8300.h : Likewise.
	* i370.h, i386.h, i860.h, i960.h, m32r.h, m68k.h, m88k.h : Likewise.
	* mips.h, mn10200.h, mn10300.h, ns32k.h, pa.h, pyr.h : Likewise.
	* rs6000.h, sh.h, sparc.h, spur.h, tahoe.h, v850.h : Likewise.
	* vax.h, we32k.h, alpha/vms.h, arm/aof.h, arm/aout.h : Likewise.
	* i386/386bsd.h, i386/freebsd-elf.h : Likewise.
	* i386/freebsd.h, i386/linux.h : Likewise.
	* i386/netbsd.h, i386/osfrose.h, i386/ptx4-i.h, i386/sco5.h : Likewise.
	* i386/sysv4.h, m68k/3b1.h, m68k/dpx2.h, m68k/hp320.h : Likewise.
	* m68k/mot3300.h, m68k/sgs.h : Likewise.
	* m68k/tower-as.h, ns32k/encore.h, sparc/pbd.h : Likewise.
	* sh.h (INSN_ALIGN, INSN_LENGTH_ALIGNMENT): Define.
	(CASE_VECTOR_SHORTEN_MODE): Define.
	(short_cbranch_p, align_length, addr_diff_vec_adjust): Don't declare.
	(med_branch_p, braf_branch_p): Don't declare.
	(mdep_reorg_phase, barrier_align): Declare.
	(ADJUST_INSN_LENGTH): Remove alignment handling.
	* sh.c (uid_align, uid_align_max): Deleted.
	(max_uid_before_fixup_addr_diff_vecs, branch_offset): Deleted.
	(short_cbranch_p, med_branch_p, braf_branch_p, align_length): Deleted.
	(cache_align_p, fixup_aligns, addr_diff_vec_adjust): Deleted.
	(output_far_jump): Don't use braf_branch_p.
	(output_branchy_insn): Don't use branch_offset.
	(find_barrier): Remove checks for max_uid_before_fixup_addr_diff_vecs.
	Remove paired barrier stuff.
	Don't use cache_align_p.
	Take alignment insns into account.
	(fixup_addr_diff_vecs): Reduce to only fixing up the base label of
	the addr_diff_vec.
	(barrier_align, branch_dest): New function.
	(machine_dependent_reorg, split_branches): Remove infrastructure
	for branch shortening that is now provided in the backend.
	* sh.md (short_cbranch_p, med_branch_p, med_cbranch_p): New attributes.
	(braf_branch_p, braf_cbranch_p): Likewise.
	(attribute length): Use new attributes.
	(casesi_worker): Get mode and unsignednedd from ADDR_DIFF_VEC.
	(addr_diff_vec_adjust): Delete.
	(align_2): Now a define_expand.
	(align_log): Now length 0.

Fri Mar  6 14:41:33 1998  Michael Meissner  <meissner@cygnus.com>

	* m32r.md (right): Correctly check for length == 2, not 1.

Fri Mar  6 14:00:04 1998  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* mips/mips.h: Prototype `machine_dependent_reorg'.
	(ASM_OUTPUT_ALIGN): Remove unused variable `mask'.

Fri Mar  6 11:43:35 1998  Joern Rennecke  (amylaar@cygnus.co.uk)

	* final.c (shorten_branches): Restore accidentally removed code.

Fri Mar  6 11:00:49 1998  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* configure.in: Remove duplicate uses of AC_PROG_CC and
	AC_PROG_MAKE_SET.

Fri Mar  6 00:59:30 1998  Richard Henderson  <rth@cygnus.com>

	* configure.in (target_cpu_default2): Correct typo for alphapca56.

Thu Mar  5 23:24:50 1998  Jeffrey A Law  (law@cygnus.com)
			  Doug Evans	 (devans@cygnus.com)

	* haifa-sched.c (build_jmp_edges): Delete dead function.
	(build_control_flow): Use cfg routines from flow.c.
	(schedule_insns): Remove debugging code accidentally checked
	in earlier today.

	* basic-block.h: Add external integer list structures, typdefs,
	accessor macros and function declarations.  Similarly for
	basic block pred/succ support and simple bitmap stuff.
	* flow.c: Add functions for integer list, basic block pred/succ
	support and simple bitmap support.
	(compute_dominators): New function to compute dominators and
	post dominators.
	(find_basic_blocks): Split into two functions.
	(life_analysis): Likewise.
	(flow_analysis): Removed.  Now handled by calling find_basic_blocks,
	the life_analysis from toplev.c.
	* toplev.c (rest_of_compilation): Call find_basic_blocks, then
	life_analysis instead of flow_analysis.

Thu Mar  5 23:06:26 1998  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* jump.c (jump_optimize): Call mark_jump_label also for deleted
	insns.
	(mark_jump_label): Don't increment ref counts for deleted insns.

Thu Mar  5 09:55:15 1998  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* mips/iris6.h (TARGET_DEFAULT): Parenthesize macro definition.

	* mips/mips.c: Include stdlib.h and unistd.h.
	(mips_asm_file_end): Add braces around empty body in an if-statement.
	(function_prologue): Wrap variable `fnname' in
	!FUNCTION_NAME_ALREADY_DECLARED.  Correct format specifier in fprintf.
	(mips_select_rtx_section, mips_select_section): Declare as void.

	* mips/mips.h: Add prototypes for extern functions in mips.c.
	(FUNCTION_ARG_REGNO_P): Add parentheses around && within ||.
	(ENCODE_SECTION_INFO): Add braces around empty body in an
	if-statement.

	* mips/mips.md (movdi): Add parentheses around && within ||.
	(movsf, movdf): Likewise.
	(branch_zero, branch_zero_di): Add default case in
	enumeration switch.

Thu Mar  5 02:45:48 1998  Richard Henderson  <rth@cygnus.com>

	* alpha/alpha.h (TARGET_WINDOWS_NT, TARGET_OPEN_VMS): Just make them
	real constants, since they can't be changed.
	(TARGET_AS_CAN_SUBTRACT_LABELS): New.
	* alpha/alpha.md (builtin_setjmp_receiver): Use it.
	* alpha/osf.h (TARGET_AS_CAN_SUBTRACT_LABELS): New.
	* alpha/osf2or3.h (TARGET_AS_CAN_SUBTRACT_LABELS): New.
	* alpha/vms.h (TARGET_OPEN_VMS): New.
	* alpha/win-nt.h (TARGET_WINDOWS_NT): New.

Thu Mar  5 02:41:27 1998  Richard Henderson  <rth@cygnus.com>

	* reload.c (find_reloads): Always force (subreg (mem)) to be
	reloaded if WORD_REGISTER_OPERATIONS.

Thu Mar  5 02:14:44 1998  Richard Henderson  <rth@cygnus.com>

	* haifa-sched.c (free_list): Rename from free_pnd_lst.
	(free_pending_lists): Rename free_pnd_lst uses.
	(remove_dependence): Place expunged element on unused_insn_list.
	(alloc_INSN_LIST, alloc_EXPR_LIST): New.  Change all callers of
	gen_rtx_*_LIST and alloc_rtx to use them.
	(compute_block_backward_dependences): Free the reg_last_* lists.

Thu Mar  5 00:05:40 1998  Jeffrey A Law  (law@cygnus.com)

	* cccp.c (main): Avoid undefined behavior when setting pend_includes
	and pend_files.

Wed Mar  4 21:58:25 1998  Franz Sirl  <franz.sirl-kernel@lauterbach.com>

	* rs6000/linux.h: Don't define DEFAULT_VTABLE_THUNKS to 1 if
	USE_GNULIBC_1 is defined.
	* configure.in: Add a new case powerpc-*-linux-gnulibc1 which
	includes the t-linux-gnulibc1 fragment.

Wed Mar  4 12:11:36 1998  Jim Wilson  <wilson@cygnus.com>

	* mips.md (movdf_internal1a): Fix misplaced parenthesis in condition.

Wed Mar  4 18:47:48 1998  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* final.c (final_scan_insn, case CODE_LABEL: Cleanup.

Wed Mar  4 15:51:19 1998  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* final.c (shorten_branches): Tag the loop alignment onto the
	first label after NOTE_INSN_LOOP_BEG even if there is an
	intervening insn.

Tue Mar  3 21:48:35 1998  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* final.c (insn_current_reference_address):
	Use SEQ instead of BRANCH as argument to align_fuzz, to get a
	proper alignment chain.

	* final.c (max_labelno): New static variable.
	(final_scan_insn): Check max_labelno before outputting an
	alignment for a label.
	(shorten_branches): Remove unused variable length_align.

Tue Mar  3 14:27:23 1998  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* sparc.c (ultrasparc_adjust_cost): Add default case in
	enumeration switch.

	* sparc.h: Add prototypes for extern functions defined in
	sparc.c.

Tue Mar  3 10:00:11 1998  Nick Clifton  <nickc@cygnus.com>

	* toplev.c: Only generate <name>.dbr file when dumping RTL if
	DEALY_SLOTS is defined.

Tue Mar  3 07:36:37 1998  Manfred Hollstein  <manfred@s-direktnet.de>

	* reorg.c (fill_eager_delay_slots): Add new argument delay_list
	in call to fill_slots_from_thread.

Mon Mar  2 13:45:03 1998  Richard Henderson  <rth@cygnus.com>

	* alpha/linux.h (CPP_PREDEFINES): Correct connecting whitespace
	to SUB_CPP_PREDEFINES.  Reported by asun@saul4.u.washington.edu.

Mon Mar  2 22:59:28 1998  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* final.c (insn_last_address, insn_current_align, uid_align):
	New variables.
	(in_align_chain, align_fuzz, align_shrink_fuzz): New functions.
	(insn_current_reference_address): Likewise.
	(shorten_branches, final_scan_insn): Implement LABEL_ALIGN,
	LABEL_ALIGN_AFTER_BARRIER and LOOP_ALIGN target macros.
	(label_to_alignment): New function.
	* genattrtab.c (write_test_expr): If one of LABEL_ALIGN,
	LABEL_ALIGN_AFTER_BARRIER or LOOP_ALIGN is defined, call
	insn_current_reference_address instead of insn_current_address.
	(or_attr_value, write_length_unit_log): New functions.
	(main): Call write_length_unit_log.
	(write_const_num_delay_slots): Output extra '\n'.
	* alpha.h (ASM_OUTPUT_LOOP_ALIGN, ASM_OUTPUT_ALIGN_CODE):
	Replace with:
	(LOOP_ALIGN, ALIGN_LABEL_AFTER_BARRIER).
	* i386.h, i386/osfrose.h, i386/svr3dbx.h, m68k.h, sparc.h: Likewise.
	* arc.h, m32r.h (ASM_OUTPUT_LOOP_ALIGN): Replace with:
	(LOOP_ALIGN).
	* i960.h, m88k.h (ASM_OUTPUT_ALIGN_CODE): Replace with:
	(LABEL_ALIGN_AFTER_BARRIER).
	* ns32k/encore.h, ns32k/merlin.h, ns32k.h, ns32k/sequent.h: Likewise.
	* ns32k/tek6000.h: Likewise.
	* i386/gas.h (ASM_OUTPUT_LOOP_ALIGN, ASM_OUTPUT_ALIGN_CODE): Delete.
	* i386.md (casesi+1): Use ASM_OUTPUT_ALIGN instead of
	ASM_OUTPUT_ALIGN_CODE.

Mon Mar  2 01:05:50 1998  Jeff Law  (law@cygnus.com)

	* version.c: Bump for snapshot.

Mon Mar  2 00:52:18 1998  Jeff Law  (law@cygnus.com)

	* version.c: Bump for snapshot.

Sun Mar  1 18:25:49 1998  Michael P. Hayes  <michaelh@ongaonga.chch.cri.nz>

	* reorg.c (fill_slots_from_thread): Don't steal delay list from target
	if condition code of jump conflicts with opposite_needed.

	* reorg.c (fill_slots_from_thread): Mark resources referenced in
	opposite_needed thread.  Return delay_list even when cannot get
	any more delay insns from end of subroutine.

Sun Mar  1 18:26:21 1998  Ken Rose  (rose@acm.org)

	* reorg.c (fill_slots_from_thread): New parameter, delay_list.
	All callers changed.

Sun Mar  1 18:25:37 1998  Bruno Haible  <bruno@linuix.mathematik.uni-karlsruhe.de>

	* frame.c (start_fde_sort, fde_split, heapsort, fde_merge,
	end_fde_sort): New functions for fast sorting of an FDE array.
	(fde_insert): Simplified.
	(add_fdes): Change argument list.
	(frame_init): Use the new functions.

Sun Mar  1 18:06:21 1998  Jeffrey A Law  (law@cygnus.com)

	* ginclude/va-ppc.h (va_arg): Fix typo in long long support.

	* i386.c (reg_mentioned_in_mem): Fix dangling else statement.

	* fold-const.c (fold_range_test): Always return a value.

Sun Mar  1 17:57:34 1998  Mumit Khan  <khan@xraylith.wisc.edu>

	* config/i386/winnt.c (i386_pe_unique_section): Put read-only
	data in the text section unless READONLY_DATA_SECTION is defined.

Sun Mar  1 17:48:46 1998  Jeffrey A Law  (law@cygnus.com)

	* c-parse.in (undeclared variable error): Tweak error message to
	be clearer.

Sun Mar  1 10:22:36 1998  Jeff Law  (law@cygnus.com)

	* version.c: Bump for snapshot.

1998-02-28  Mark Mitchell  <mmitchell@usa.net>

	* final.c (final_scan_insn): Undo overzealous removal of `set'.

Sat Feb 28 07:54:03 1998  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* pa.h (CONST_COSTS): When checking the CONST_DOUBLE enumerated
	case, add parentheses to specify the proper order of precedence in
	the if-statement.

	* c-aux-info.c: Include string.h/strings.h.

	* pa.c: Include stdlib.h.
	(pa_combine_instructions): Prototype the function.
	(pa_can_combine_p, forward_branch_p, shadd_constant_p): Likewise.
	(reloc_needed): Add default case for enumeration switch.
	(remove_useless_addtr_insns): Remove unused variable `all'.
	(hppa_expand_prologue): Add explicit braces to avoid
	ambiguous `else'.
	(output_function_epilogue): Remove unused variable `i'.
	(output_millicode_call): Remove unused variable `link'.
	(shadd_constant_p, forward_branch_p): Make the function static.
	(following_call): Explicitly declare to return int.
	(pa_reorg): Declare as void.
	(pa_combine_instructions): Declare as static void.  Add
	parentheses around && within ||.

	* pa.h: Add prototypes for pa_reorg, symbolic_operand,
	following_call, function_label_operand, lhs_lshift_cint_operand
	and zdepi_cint_p.

	* pa.md: Add parentheses around && within ||.

	* cppalloc.c: Include stdlib.h.

	* cpperror.c (cpp_print_containing_files): Remove unused variable
	`i'.  Fix format specifier in fprintf.

	* cse.c (cse_around_loop): Add explicit braces to avoid
	ambiguous `else'.
	(delete_dead_from_cse): Wrap variable `tem' in macro HAVE_cc0.

	* expr.c (expand_expr): Add parentheses around && within ||.

	* final.c (app_enable): Replace fprintf with fputs where there are
	no format specifiers and no trailing argument after the string.
	Eg, when printing ASM_APP_ON/ASM_APP_OFF.
	(app_disable): Likewise.
	(final_end_function): Likewise.
	(final_scan_insn): Likewise.  Remove unused variable `set'.
	(profile_function): Wrap empty if-statement body in {} brackets.

	* function.c: Include stdlib.h.
	(pad_below): Wrap prototype and definition in ARGS_GROW_DOWNWARD.
	(reposition_prologue_and_epilogue_notes): Add parentheses
	around assignment used as truth value.

	* integrate.c (expand_inline_function): Wrap variable
	`cc0_insn' in macro HAVE_cc0.

	* jump.c (jump_optimize): Wrap variable `q' in macro
	HAVE_cc0.  Remove unused variable `prev1'.

	* libgcc2.c (__bb_exit_trace_func): Add parentheses around &&
	within ||.  Fix format specifier in fprintf.
	(__bb_init_prg): Add parentheses around assignment used as
	truth value.

	* local-alloc.c: Include stdlib.h.
	(requires_inout): Add parentheses around assignment used
	as truth value.

	* loop.c (analyze_loop_iterations): Wrap prototype and definition
	in macro HAVE_decrement_and_branch_on_count.
	(insert_bct, instrument_loop_bct): Likewise.
	(move_movables): Add parentheses around assignment used as
	truth value.
	(consec_sets_invariant_p): Likewise.
	(maybe_eliminate_biv_1): Wrap variable `new' in macro HAVE_cc0.

	* objc/objc-act.c: Include stdlib.h.
	(lookup_method_in_protocol_list): Wrap empty else-statement body
	in braces.
	(lookup_protocol_in_reflist): Likewise.
	(objc_add_static_instance): Remove unused variables `decl_expr'
	and `decl_spec'.
	(get_objc_string_decl): Remove unused variable `decl'.
	(generate_static_references): Remove unused variables `idecl' and
	`instance'.
	(check_protocols): Wrap empty else-statement body in braces.

	* protoize.c: Include stdlib.h.
	(substr): Add parentheses around assignment used as truth value.
	(abspath): Likewise.
	(shortpath): Likewise.

	* regmove.c (fixup_match_1): Add parentheses around assignment
	used as truth value.

	* reload.c (push_secondary_reload): Remove unused variable `i'.
	(find_reloads): Add parentheses around assignment used as truth
	value.

	* reload1.c: Include stdlib.h.

	* rtl.h: Correct typo in prototype of offsettable_memref_p.

	* stmt.c (add_case_node): Add parentheses around assignment used
	as truth value.
	(case_tree2list): Likewise.

	* tree.c (valid_machine_attribute): Wrap variable `decl_attr_list'
	in macro VALID_MACHINE_DECL_ATTRIBUTE.  Wrap variable
	`type_attr_list' in macro VALID_MACHINE_TYPE_ATTRIBUTE.
	(merge_attributes): Add explicit braces to avoid ambiguous
	`else'.

	* unroll.c (copy_loop_body): Wrap variable `cc0_insn' in
	macro HAVE_cc0.

	* varasm.c: Include stdlib.h.

	* system.h: Remove sys/stat.h.
	* gcc.c: Add sys/stat.h.

	* genattr.c: Wrap prototype of `free' in NEED_DECLARATION_FREE.
	* genattrtab.c: Likewise.
	* genconfig.c: Likewise.
	* genemit.c: Likewise.
	* genextract.c: Likewise.
	* genflags.c: Likewise.
	* genopinit.c: Likewise.
	* genoutput.c: Likewise.
	* genpeep.c: Likewise.
	* genrecog.c: Likewise.
	* tlink.c: Likewise.  Also wrap `getenv' in NEED_DECLARATION_GETENV.

Fri Feb 27 11:02:47 1998  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* invoke.texi: Use @itemx for a secondary item in a @table.

	* config/m68k/m68k.md (movsf+1): Optimize moving a CONST_DOUBLE
	zero.

Thu Feb 26 00:13:21 1998  Ian Lance Taylor  <ian@cygnus.com>

	* choose-temp.c: Fix handling of sys/file.h to work in libiberty.

Wed Feb 25 23:40:54 1998  Jeffrey A Law  (law@cygnus.com)

	* i386.c (struct machine_function): Add new fields for PIC stuff.
	(save_386_machine_status): Fix argument to xmalloc.  Save pic_label_rtx
	and pic_label_name.
	(restore_386_machine_status): Corresponding changes.
	(clear_386_stack_locals): Also clear pic_label_rtx and pic_label_name.

Wed Feb 25 01:31:40 1998  Jeffrey A Law  (law@cygnus.com)

	* c-parse.y (undeclared variable error): Tweak error message
	to be clearer.

Tue Feb 24 23:54:07 1998  Richard Henderson  <rth@cygnus.com>

	* flags.h (g_switch_value, g_switch_set): Declare.
	* alpha.c (override_options): Set g_switch_value=8 if not set.
	* alpha/elf.h (CC1_SPEC): New.
	(ASM_SPEC): New.
	(LINK_SPEC): Pass along the -G value we were given.
	(LOCAL_ASM_OP): Remove.
	(ASM_OUTPUT_ALIGNED_LOCAL): Output to .bss or .sbss by size.
	(MAX_OFILE_ALIGNMENT): New.
	(BSS_SECTION_ASM_OP, SBSS_SECTION_ASM_OP, SDATA_SECTION_ASM_OP): New.
	(EXTRA_SECTIONS): Add sbss and sdata.
	(SECTION_FUNCTION_TEMPLATE): New.
	(EXTRA_SECTION_FUNCTIONS): Use it.
	(CTORS_SECTION_FUNCTION, DTORS_SECTION_FUNCTION): Remove.
	(SELECT_SECTION): Use sdata when small enough.
	* alpha/linux.h (ASM_SPEC): Remove.

Mon Feb 23 15:09:18 1998  Bruno Haible  <bruno@linuix.mathematik.uni-karlsruhe.de>
	* config.sub (sco5): Fix typo.

Mon Feb 23 18:19:31 1998  Manfred Hollstein  <manfred@s-direktnet.de>

	* config/t-linux (LIBGCC1, CROSS_LIBGCC1, LIBGCC1_TEST): Add macros and
	set to empty.
	* config/t-linux-aout (LIBGCC1, CROSS_LIBGCC1, LIBGCC1_TEST): Likewise.
	* config/alpha/t-linux: Remove file.
	* config/sparc/t-linux: Remove file.
	* config/m68k/t-linux (LIBGCC1, CROSS_LIBGCC1): Remove.
	* config/m68k/t-linux-aout (LIBGCC1, CROSS_LIBGCC1): Likewise.
	* configure.in (alpha*-*-linux-gnulibc1*): Use t-linux instead of alpha/t-linux
	for tmake_file.
	(alpha*-*-linux-gnu*): Likewise.
	(sparc-*-linux-gnulibc1*): Use t-linux instead of sparc/t-linux for tmake_file.
	(sparc-*-linux-gnu*): Likewise.

Mon Feb 23 10:47:39 1998  Robert Lipe  <robertl@dgii.com>
	* collect2.c (ldd_file_name): Bracket declaration with same
	manifests as use.
	(full_real_ld_suffix): Deleted.  Variable was calloced and
	written into, but never read.

1998-02-23  Mike Stump  <mrs@wrs.com>

	* configure.in: Add support for i386-wrs-vxworks configuration.
	* i386/vxi386.h: New file.

Sun Feb 22 21:16:51 1998  Bruno Haible  <bruno@linuix.mathematik.uni-karlsruhe.de>

	* tree.c (contains_placeholder_p): Ensure function always returns
	a value.
	* sparc.md (movdi_sp64_insn): Add default case in enumeration switch.
	(movsf_const_insn, movdf_const_insn, movtf_const_insn): Likewise.

Sun Feb 22 20:58:19 1998  Jeffrey A Law  (law@cygnus.com)

	* vms.h (SELECT_SECTION): Use TREE_CODE_CLASS correctly.

1998-02-22  Paul Eggert  <eggert@twinsun.com>

	* config/sparc/sol2-sld.h (LINKER_DOES_NOT_WORK_WITH_DWARF2):
	Define this new symbol.
	(DWARF2_DEBUGGING_INFO, DWARF_DEBUGGING_INFO): Do not #undef.
	* toplev.c (main): Do not default to DWARF2_DEBUG with -ggdb if
	LINKER_DOES_NOT_WORK_WITH_DWARF2 is defined.

Sun Feb 22 20:07:32 1998  Jim Wilson  <wilson@cygnus.com>

	* iris5.h (DWARF2_UNWIND_INFO): Define to 0.
	* iris5gas.h (DWARF2_UNWIND_INFO): Define to 1.

Sun Feb 22 15:29:48 1998  Richard Henderson  <rth@cygnus.com>

	* objc/Object.m (-error): Call objc_verror with our va_list.

Sun Feb 22 09:45:39 1998  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* collect2.c (scan_prog_file): Completely cover uses of variable
	`exports' with macro COLLECT_EXPORT_LIST.

Sat Feb 21 20:36:23 1998  Jeff Law  (law@cygnus.com)

	* version.c: Bump for snapshot.

Fri Feb 20 16:22:13 1998  Michael Meissner  <meissner@cygnus.com>

	* sched.c (schedule_block): Remove code to get arguments from hard
	regs into pseudos early.  Same as Aug 25, 1997 change to
	haifa-sched.c.

1998-02-20  Jason Merrill  <jason@yorick.cygnus.com>

	* collect2.c (main): Still handle !do_collecting for non-AIX targets.

1998-02-16  Mark Mitchell  <mmitchell@usa.net>

	* toplev.c (rest_of_compilation): Do not defer the output of a
	nested function.

Fri Feb 20 10:39:47 1998  Michael Tiemann  <michael@impact.tiemann.org>

	* ginclude/va-mips.h (va_arg): Remove trailing space after '\'
	continuation character (line 243).

Fri Feb 20 12:10:26 1998  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* genrecog.c (main): Remove duplicated sentence in emitted comment.

Thu Feb 19 22:36:53 1998  Andrey Slepuhin  <pooh@msu.net>
			  David Edelsohn  <edelsohn@mhpcc.edu>

	* collect2.c (XCOFF_SCAN_LIBS): Remove.
	(export_flag): New variable.
	(export_file): #ifdef COLLECT_EXPORT_LIST.
	(import_file, exports, imports, undefined): New variables.
	(libs, cmdline_lib_dirs, libpath_lib_dirs, libpath, libexts): Same.
	(dump_list, dump_prefix_list, is_in_list): New functions.
	(write_export_file): $ifdef COLLECT_EXPORT_LIST.
	(write_import_file, resolve_lib_name): New functions.
	(use_import_list, ignore_library): Same.
	(collect_exit): maybe_unlink import_file and #ifdef.
	(handler): Same.
	(main): New variable importf, #ifdef exportf.  Move parsing of
	-shared before general argument parsing.  Resolve AIX library
	paths and import libgcc.a symbols.  Treat .so shared libraries the
	same as objects and .a libraries.  Create alias for object_lst and
	increment it instead of original pointer.  Scan AIX libraries as
	objects earlier instead of using scan_libraries.  Perform AIX
	tlink later to resolve templates instead of forking ld.
	(GCC_OK_SYMBOL): Ensure symbol not in undef section.
	(GCC_UNDEF_SYMBOL): New macro.
	(scan_prog_file): Loop for members of AIX libraries.  Handle
	export/import of ctors/dtors.
	(aix_std_libs): New variable.
	(scan_libraries, XCOFF): Delete.

Thu Feb 19 22:36:52 1998  Robert Lipe  <robertl@dgii.com>

	* collect2.c (full_real_ld_suffix): #ifdef CROSS_COMPILE.

1998-02-19  Mike Stump  <mrs@wrs.com>

	* Makefile.in: Use $tooldir for sys-include to match toplevel
	configure.

Thu Feb 19 01:32:37 1998  Jeffrey A Law  (law@cygnus.com)
			  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>

	* emit-rtl.c (gen_lowpart_common): Suppress last change if __complex__.

	* emit-rtl.c (hard-reg-set.h): Include.
	(get_lowpart_common): Don't make new REG for hard reg in a
	class that cannot change size.
	* Makefile.in (emit-rtl.o): Depend on hard-reg-set.h.

	* combine.c: Revert previous patch.

1998-02-19  Paul Eggert  <eggert@twinsun.com>

	* config/sparc/sol2-sld.h: New file.
	* configure.in (sparc-*-solaris2*): Use it when using the
	system linker.

Thu Feb 19 00:46:59 1998  Jeffrey A Law  (law@cygnus.com)

	* loop.c (force_movables): Fix typo.

Thu Feb 19 08:26:30 1998  Manfred Hollstein  <manfred@s-direktnet.de>

	* m88k.h: Change file pattern to match reality.

Wed Feb 18 23:19:52 1998  Jeffrey A Law  (law@cygnus.com)

	* varasm.c (output_constant_pool): Fix dumb thinko in last
	change.

	* pa.h (ASM_OUTPUT_FUNCTION_PREFIX): Correctly translate from
	a function name to a section name.

1998-02-18  Doug Evans  <devans@cygnus.com>

	* tree.h (merge_machine_{type,decl}_attributes): Declare.
	(split_specs_attrs, strip_attrs): Add prototypes.
	* tree.c (merge_machine_{type,decl}_attributes): New functions.
	* c-decl.c (duplicate_decls): Call merge_machine_decl_attributes.
	Update olddecl's attributes too.
	* c-common.c (strip_attrs): New function.
	* c-typeck.c (common_type): Call merge_machine_type_attributes.
	* varasm.c (make_function_rtl): New target macro REDO_SECTION_INFO_P.
	(make_decl_rtl): Likewise.

1998-02-18  Jim Wilson  <wilson@cygnus.com>

	* c-decl.c (shadow_tag_warned): Call split_specs_attrs.

Wed Feb 18 09:09:50 1998  Jeffrey A Law  (law@cygnus.com)

	Remove this change until we can fix it correctly.
	* collect2.c: Bracket declaration of 'exportf' and
	'full_real_ld_suffix'.

Wed Feb 18 08:44:25 1998  Bernd Schmidt  <crux@ohara.Informatik.RWTH-Aachen.DE>

	* Makefile.in (STAGESTUFF): Add genrtl.c, genrtl.h and gengenrtl.

Tue Feb 17 23:30:20 1998  Bernd Schmidt  <crux@ohara.Informatik.RWTH-Aachen.DE>

	* c-common.c (c_expand_start_cond, c_expand_end_cond,
	c_expand_start_else): Don't warn about non-ambiguous else even if
	braces are missing.

Tue Feb 17 23:56:50 1998  Robert Lipe  <robertl@dgii.com>

	* sco5.h (ASM_OUTPUT_DOUBLE, ASM_OUTPUT_FLOAT,
	ASM_OUTPUT_LONG_DOUBLE): Delete.  Use the ones from i386.h
	instead.

Tue Feb 17 22:56:14 1998  Richard Henderson  <rth@cygnus.com>

	* combine.c (simplify_rtx): Obey CLASS_CANNOT_CHANGE_SIZE when
	simplifying a subreg of a hard reg.
	(expand_compound_operation): Likewise.
	(force_to_mode): Likewise.

Tue Feb 17 22:37:22 1998  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* fold-const.c: Include "system.h" to get stdlib.h and stdio.h.
	(lshift_double): Add parentheses around + or - inside shift.
	(rshift_double): Likewise.
	(size_int_wide): Explicitly set type of `bit_p' to `int'.

	* Makefile.in (fold-const.o): Depend on system.h.

	* Makefile.in (gcc.o): Depend on system.h, in accordance with last
	change to gcc.c.

	* haifa-sched.c: Include "system.h" to get <stdlib.h> and <stdio.h>.
	(BLOCKAGE_RANGE): Add parentheses around arithmetic in operand of |.
	(sched_note_set): Remove unused parameter `b', all callers changed.
	(schedule_block): Likewise for `rgn'.
	(split_hard_reg_notes): Likewise for `orig_insn'.
	(check_live): Likewise for `trg'.
	(update_live): Likewise.
	(check_live_1): Explicitly declare variable `i' as int.
	(update_live_1): Likewise.
	(insn_issue_delay): Remove unused variable `link'.
	(sched_analyze_2): Add default case in enumeration switch.
	(schedule_insns): Remove unused variable `i'.

	* Makefile.in ($(SCHED_PREFIX)sched.o): Depend on system.h.

Tue Feb 17 22:31:04 1998  Jeffrey A Law  (law@cygnus.com)

	* loop.c (rtx_equal_for_loop_p): Add some braces to disambiguate
	a dangling else clause.

Tue Feb 17 21:28:12 1998  Gavin Koch  <gavin@cygnus.com>

	* mips/mips.h (CAN_ELIMINATE): Don't eliminate the frame
	pointer for the stack pointer in MIPS16 and 64BIT.

Tue Feb 17 21:17:30 1998  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* rtl.h (force_line_numbers, restore_line_number_status): Declare.
	* emit-rtl.c (force_line_numbers, restore_line_number_status):
	New functions.
	* stmt.c (struct nesting): Replace seenlabel with line_number_status.
	(expand_start_case): Adjust to this change.
	(check_seenlabel): New function.
	(pushcase, pushcase_range, expand_endcase): Use it.

Tue Feb 17 10:14:32 1998  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* i386.md (adddi3): Add =!r,0,0,X alternative.

Mon Feb 16 16:13:43 1998  David Edelsohn  <edelsohn@mhpcc.edu>

	* rs6000.h (MY_ISCOFF): Add numeric value of U803XTOCMAGIC.
	* x-aix31 (INSTALL): Delete.

Mon Feb 16 09:24:32 1998  Gavin Koch  <gavin@cygnus.com>

	* mips/mips.c (mips_expand_epilogue): Update tsize_rtx if
	tsize changes to something other than zero.

Mon Feb 16 09:11:48 1998  Gavin Koch  <gavin@cygnus.com>

	* ginclude/va-mips.h: Replace casts of pointers to int with
	casts of pointers to __PTRDIFF_TYPE__.

Mon Feb 16 08:17:14 1998  John Carr  <jfc@mit.edu>

	* loop.c (strength_reduce, record_biv, record_giv): Use
	HOST_WIDE_INT_PRINT_DEC to print CONST_INT values.

1998-02-16  Jason Merrill  <jason@yorick.cygnus.com>

	* tree.c (first_rtl_op): New fn.
	(unsave_expr_now): Use it.
	* print-tree.c (print_node): Likewise.
	* tree.c (has_cleanups): New fn.
	* fold-const.c (fold, case CLEANUP_POINT_EXPR): Use it.  Be more
	conservative about pushing the cleanup point down.
	* tree.h: Declare them.

Sun Feb 15 23:28:44 1998  Jeffrey A Law  (law@cygnus.com)

	* toplev.c (flag_schedule_reverse_before_reload): Delete variable.
	(flag_schedule_reverse_after_reload): Likewise.
	(f_options): Remove reverse scheduling support.
	* flags.h (flag_schedule_reverse_before_reload): Delete declaration.
	(flag_schedule_reverse_after_reload): Likewise.
	* haifa-sched.c (rank_for_schedule): Remove support for reverse
	scheduling.

Sun Feb 15 21:33:55 1998  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* gcc.c: Get system includes, prototypes and macros via "system.h"
	instead of doing it manually.  Change all calls of the ctype
	macros to custom versions defined in "system.h".

	* system.h: Fix return type of bcmp prototype from `void' to `int'.
	Make bcopy, bcmp and bzero prototypes explicitly `extern'.
	Add a prototype for getenv.

Sun Feb 15 17:05:41 1998  Jim Wilson  <wilson@cygnus.com>

	* mips/mips.h (INITIAL_ELIMINATION_OFFSET): Readd Jun 6 change.

Sun Feb 15 15:23:15 1998  John Carr  <jfc@mit.edu>

	* alias.c: Include <stdlib.h> and <string.h>.
	(init_alias_analysis): Pass NULL_RTX instead of 0 to record_set.

Sat Feb 14 11:23:09 1998  Jeff Law  (law@cygnus.com)

	* version.c: Bump for snapshot.

Sat Feb 14 05:08:21 1998  Richard Earnshaw  (rearnsha@arm.com)

	* arm.md (movsfcc): Also validate operands[3] when compiling hard
	float.
	(movdfcc): Only accept fpu_add_operand for operands[3].

	* arm/t-semi (STMP_FIXPROTO): Define to nothing.
	* arm/t-semiaof (STMP_FIXPROTO): Likewise.

Sat Feb 14 02:02:41 1998  Jeffrey A Law  (law@cygnus.com)

	* varasm.c (output_constant_pool): Bring back 'done' label inside
	an appropriate #ifdef.

	* bitmap.c (bitmap_element_allocate): Wrap variable 'i' in an
	appropriate #ifdef.
	(bitmap_copy, bitmap_operation): Likewise.
	* combine.c (combinable_i3pat): Similarly for 'src'.
	* function.c (fixup_var_refs_1): Similarly for 'outerdest'.
	(locate_and_pad_parm): Similarly for 'reg_parm_stack_space'.
	* regclass.c (copy_cost): Similarly for 'secondary_class'.
	* reload.c (make_memloc): Similarly for 'i'.
	(find_reloads_address_1): Similarly for 'link'.
	* reload1.c (reload): Similarly for 'previous_frame_pointer_needed'.
	(emit_reload_insns): Similarly for 'second_reloadreg'.
	* unroll.c (iteration_info): Similarly for 'v'.

	* caller-save.c (insert_save_restore): Remove unused variable 'i'.
	* calls.c (expand_call): Similarly for 'i'.
	(emit_library_call, emit_library_call_value): Similarly for 'mode'.
	* fold-const.c (strip_compound_expr): Similarly for 'type'.
	* function.c (fixup_var_refs_1): Similarly  for 'width'.
	(fixup_memory_subreg): Similarly for 'saved'.
	(locate_and_pad_parm): Similarly for 'boundary_in_bytes.'
	(setjmp_protect): Similarly for 'sub'.
	(thread_prologue_and_epilogue_insns): Similarly for 'insn'.
	* loop.c (record_giv): Similarly for 'p'.
	(combine_givs): Similarly for 'temp_iv'.
	(indirect_jump_in_function_p): Similarly for 'is_indirect_jump'.
	* recog.c (validate_replace_rtx_1): Similarly for 'width'.
	* tree.c (get_set_constructor_bytes): Similarly for 'vals'.
	* unroll.c (unroll_loop): Similarly for 'copy'.
	(iteration_info): Similarly for 'b'.
	* varasm.c (assemble_string): Similarly for 'i'.
	* i386.h (LEGITIMIZE_ADDRESS): Similarly for 'orig_x'.

1998-02-13  Martin von Löwis  <loewis@informatik.hu-berlin.de>

	* c-lang.c (lang_print_xnode): New function.
	* objc/objc-act.c (lang_print_xnode): Likewise.
	* print-tree.c (print_node): Call it

Fri Feb 13 14:38:34 1998  Jim Wilson  <wilson@cygnus.com>

	* dwarf2out.c (decl_scope_node): New type.
	(decl_scope_table): Change type to use it.
	(decl_scope_table_allocated, decl_scope_depth): Change type to int.
	(push_decl_scope): Use new type.  New locals containing_scope, i.
	Add code to handle setting previous field.
	(scope_die_for): Change type of local i to int.  Add code to use
	previous field.
	(dwarf2out_init): Use new type.

1998-02-13  Jason Merrill  <jason@yorick.cygnus.com>

	* except.c (emit_throw): Lose throw_used.

Fri Feb 13 20:36:05 1998  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* sched.c (update_flow_info, REG_WAS_0): Ignore if setting insn
	was deleted.
	* haifa-sched.c (update_flow_info, REG_WAS_0): Likewise.

Fri Feb 13 12:18:40 1998  Jeffrey A Law  (law@cygnus.com)

	* genextract.c (main): Fix typo.

Fri Feb 13 08:41:49 1998  Robert Lipe  <robertl@dgii.com>

	* c-lang.c (finish_file): Bracket declaration of static_ctors,
	static_dtors.

	* calls.c (expand_call): Bracket declaration of 'rtx_before_call',
	'old_stack_arg_under_construction'
	(emit_library_call): Bracket declaration of 'upper_bound',
	'lower_bound', 'i', 'reg_parm_stack_space'
	(emit_library_call_value): Likewise.
	(store_one_arg):

	* collect2.c: Include <unistd.h> when appropriate.
	Bracket declaration of 'exportf' and 'full_real_ld_suffix'.

	* emit-rtl.c (prev_cc0_setter): Remove unused variable 'link'.

	* explow.c (plus_constant_for_output_wide): Remove unused variable
	'code'.
	(memory_address): Remove unused variable 'orig_x'.

	* genattrtab.c (make_canonical): Remove unreferenced label 'cond:'.
	(write_const_num_delay_slots): Remove unused variable 'i'.

	* genopinit.c (main): Remove unused variables 'dummy', 'insn_ptr'.
	(gen_insn): Remove unused variable 'obstack_ptr'.

	* libgcc2.c (__bb_exit_func): Remove unused variables 'ret',
	'j', 'tmp', 'i'.
	(__bb_exit_trace_func): Remove unused variable 'e'.

	* optabs.c (expand_binop): Remove unused variables 'lhs', 'rhs',
	'funexp'.
	(expand_unop): Remove unused variable 'funexp'.
	(expand_complex_abs): Remove unused variable 'funexp'.
	(init_optabs): Bracket declaration of 'j'.
	(init_complex_libfuncs): Deleted.  Dead static function.

	* profile.c (branch_prob): Remove unused variables 'insn', 'dest'.

	* reg-stack.c: Fix typo in proto for 'get_asm_operand_lengths'
	(reg_to_stack): 'initialized', 'before_function_beg'
	explicitly type as ints instead of defaulting.
	(emit_swap_insn): Remove unused variable 'i2'.
	(compare_for_stack_reg): Remove unused variable 'src_note'.

	* rtlanal.c (computed_jump_p): Remove unused variable 'computed_jump'.

	* sched.c (actual_hazard): Bracket declaration of 'this_cost'.

	* stmt.c (add_case_node): Add parens for assignment used as truth.
	(all_cases_count): Remove unused variable 'count_high'.
	(mark_seen_cases): Remove unused variable 'i'.
	(check_for_full_enumeration_handling): Remove unused variable 't'.
	Bracket declaration of  'all_values', 'l'.

	* tlink.c: Include <stdlib.h>, <unistd.h>, <string.h>/<strings.h>.

	* varasm.c (assemble_string): Remove unused variable 'i'.
	(immed_double_const): Remove unused variable 'in_current_obstack'.
	(immed_real_const_1): Likewise.
	(output_constant_pool): Remove unreferenced label 'done'.
	(output_constant): Remove unused variable 'x'.

	* i386/i386.h (ENCODE_SECTION_INFO): TREE_PUBLIC is an int, not
	a string.

	* i386/sco5.h (ASM_OUTPUT_ASCII): Add parens for assignment used
	as truth.

Fri Feb 13 10:21:41 1998  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* combine.c (can_combine_p): Handle USEs in PARALLELs.

Fri Feb 13 01:34:14 1998  H.J. Lu  (hjl@gnu.org)

	* config/linux.h (LIB_SPEC): Add -lc for -shared if
	USE_GNULIBC_1 is not defined.
	* config/sparc/linux.h; Likewise.

	* config/sparc/linux64.h (LIB_SPEC): Add -lc for -shared.

	* config/alpha/linux-elf.h (LIB_SPEC): New. Defined if
	USE_GNULIBC_1 is not defined.

Fri Feb 13 01:29:29 1998  Franz Sirl  <franz.sirl-kernel@lauterbach.com>

	* rs6000/sysv4.h (ENDFILE_SPEC): Add missing %(endfile_linux)
	for -mcall-linux.

Fri Feb 13 01:23:46 1998  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* system.h: New file to get common systems includes and various
	definitions and declarations based on autoconf macros.

Fri Feb 13 00:46:19 1998  Jeffrey A Law  (law@cygnus.com)

	* cccp.c (new_include_prefix): Correctly handle -I./.

Thu Feb 12 20:16:35 1998  Michael Meissner  <meissner@cygnus.com>

	* rs6000.md: Replace gen_rtx (CONST_INT,...) with GEN_INT.

Thu Feb 12 16:45:17 1998  Robert Lipe  <robertl@dgii.com>

	* expr.c (expand_assignment): Correct typo exposed by -Wall.
	offset should have been a truth value, not an assignment.

Thu Feb 12 15:26:50 1998  Jeffrey A Law  (law@cygnus.com)

	* cse.c (delete_dead_from_cse): If a libcall produces a constant
	result and that result can be substituted into SET_SRC of the
	insn with the REG_RETVAL note, then perform the substitution
	and delete the libcall.

Thu Feb 12 14:04:09 1998  Gavin Koch  <gavin@cygnus.com>

	* mips.md (trucndihi2,truncdiqi2): Change these to support
	mips16.

Thu Feb 12 11:34:55 1998  Gavin Koch  <gavin@cygnus.com>

	* mips/mips.c (movdi_operand): Direct references to symbols
	that arn't mips16 consts in mips16 mode arn't valid operands.

	* mips/mips.c (mips_move_2words): Add gprel handling.

Thu Feb 12 11:18:37 1998  Gavin Koch  <gavin@cygnus.com>

	* mips.md (extendsidi2): Allow extension to/from a non-mips16
	register.

Thu Feb 12 00:04:16 1998  Marc Lehmann  <pcg@goof.com>

	* i386.c: Conditionally include <stdlib.h>, <string.h>, and
	<strings.h>.

Wed Feb 11 11:43:34 1998  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* Makefile.in (WARN_CFLAGS): New variable.
	(bootstrap, bootstrap2, bootstrap3, bootstrap4): Use it.

1998-02-11  Mark Mitchell  <mmitchell@usa.net>

	* config/i386/i386.c (reg_mentioned_in_mem): Don't abort when
	falling through default case in switch.
	(i386_aligned_p): Likewise.

Wed Feb 11 12:59:56 1998  Lee Iverson  <leei@Canada.AI.SRI.COM>

	* mips/mips.h (mips_abi_string): Correct typo in comment.

Wed Feb 11 08:29:56 1998  Gavin Koch  <gavin@cygnus.com>

	* mips/mips.md (movdi): These PLUS's need to be Pmode.

Wed Feb 11 01:47:54 1998  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* Makefile.in (dwarf2out.o, emit-rtl.o, jump.o, cse.o, unroll.o,
	reorg.o, regmove.o): Depend on insn-codes.h, it gets included
	indirectly via expr.h.

Wed Feb 11 01:44:13 1998  Richard Henderson  <rth@cygnus.com>

	* stor-layout.c (layout_type): Do upper - lower in the native type,
	so as to properly handle negative indices.

Wed Feb 11 01:35:55 1998  Robert Lipe  <robertl@dgii.com>

	* except.c (start_dynamic_cleanup): Remove unused variable 'dhc'.
	(expand_eh_region_start_tree): Remove unused variable 'note'.
	(exception_optimize): Remove unused variable 'regions'.
	(expand_builtin_eh_stub): Remove unused variable 'temp'.
	(copy_eh_entry): Deleted.  Dead function.

	* expr.c (move_block_to_reg): Bracket declaration of 'pat' and
	'last' with same #if HAVE_load_multiple as use of it.
	(move_block_from_reg): Likewise.
	(emit_move_insn_1): Remove unused variable 'insns'.
	(store_constructor): Bracket declaration of startb, endb with
	#if TARGET_MEMFUNCTIONS.  Remove unused variables 'set_word_size'
	'target', and 'xtarget'.
	(expand_builtin_setjmp): Remove unused variables 'op0',
	'next_arg_reg', 'old_inhibit_defer_pop'.
	(expand_builtin): Remove unused variable 'offset'.
	(do_store_flag): Remove unused variables 'pattern', 'jump_pat'.
	(emit_queue): Add parens for assignment used as conditional.
	(expand_expr): Case TARGET_EXPR: Remove unused variable 'temp'.

Wed Feb 11 01:30:49 1998  Marc Lehmann  <pcg@goof.com>

	* i386.c: Added include for recog.h.
	(override_options): Removed unused variable p. Initialized regno to
	avoid warning.
	(order_regs_for_local_alloc): Initialized regno to avoid warning.
	(legitimize_address): Likewise for 'other'.
	(i386_aligned_reg_p): Added default case with abort ().
	(print_operand): Likewise.
	(reg_mentioned_in_mem): Likewise.
	(ix86_expand_binary_operator): Removed unused variables i & insn.
	(ix86_expand_unary_operator): Removed unused variable insn.
	(output_fp_cc0_set): Removed unused variable unordered_label.

Wed Feb 11 01:23:03 1998  John F. Carr  <jfc@mit.edu>

	* i386.c, i386.h, i386.md: Change gen_rtx (X, ...) to gen_rtx_X (...).
	Use GEN_INT instead of gen_rtx (CONST_INT). Make printf arguments
	and format string match.

Wed Feb 11 01:17:39 1998  Jeffrey A Law  (law@cygnus.com)

	* flow.c (life_analysis): Do not consider the stack pointer live at
	the end of a function if the function calls alloca.
	(mark_used_regs): Similarly.

1998-02-10  John F Carr  <jfc@mit.edu>

	* config/sparc/sparc.md (movdi_v8plus): Output stx on alternative
	1, fzero on alternative 8.

Tue Feb 10 09:02:19 1998  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>

	* rs6000.c (setup_incoming_varargs): Always set rs6000_sysv_varargs_p.

Tue Feb 10 03:35:43 1998  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* reload.c (find_reloads_toplev): Handle arbitrary non-paradoxical
	SUBREGs of CONST_INTs.

Mon Feb  9 17:52:36 1998  John Carr  <jfc@mit.edu>

	* mips.c (print_operand, function_prologue): Make printf format
	match argument type.

Mon Feb  9 02:37:25 1998  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* alpha.c (alpha_return_addr): Remove unused variable `first'.
	(alpha_ra_ever_killed): Remove unused variables `ra' and `i'.
	(output_epilog): Remove unused variable `frame_size_from_reg_save'.

Sun Feb  8 14:56:03 1998  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>

	* loop.c (strength_reduce): When placing increment for auto-inc
	case, do comparison in loop order.

Sun Feb  8 13:21:38 1998  John Carr  <jfc@mit.edu>

	* bitmap.c (bitmap_debug_file): HOST_PTR_PRINTF converts a pointer,
	not a HOST_WIDE_INT.

	* calls.c (expand_call): Change test of expand_inline_function
	return value to stop compiler warning.

	* genattrtab.c (RTL_HASH): Cast pointer to long, not HOST_WIDE_INT.

Sun Feb  8 12:04:24 1998  Jim Wilson  (wilson@cygnus.com)
			  Jeff Law  (law@cygnus.com)

	* regmove.c: Fix various minor formatting problems.
	(optimize_reg_copy_1): Stop search at CALL_INSNs if flag_exceptions
	is true.  Make end of basic block tests consistent through regmove.c.
	(optimize_reg_copy_2, optimize_reg_copy_3): Likewise.
	(fixup_match_2, fixup_match_1, regmove_optimize): Likewise.

Sun Feb  8 01:49:18 1998  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* gansidecl.h: Check for a conflicting macro definition before
	attempting to prototype bcopy, bcmp or bzero.

Sun Feb  8 00:09:59 1998  Jeffrey A Law  (law@cygnus.com)

	* expr.c (clear_pending_stack_adjust): Handle case where a function
	calls alloca, but the user has specified -fomit-fframe-pointer.

	* function.c (assign_parms): Fix typo in last change.

Sat Feb  7 23:54:29 1998  Robert Lipe  <robertl@dgii.com>

	* gcc.c: Include <strings.h>/<string.h>, <stdlib.h>, <unistd.h>,
	<fcntl.h>.
	(free_path_suffix): Remove unreferenced static function.
	(process_command): Remove unused variable temp.
	(default_arg): Remove unused variable i.
	(do_spec_1): Add parens for assignment used as truth value.
	(main): Likewise.
	(validate_all_switches): Likewise.
	(main): Remove unused variables i, first_time>

	* c-common.c: Include <stdlib.h> and <string.h>/<strings.h>.

	* calls.c (expand_call): Remove unused variables funtree,
	n_regs, and tmpmode.

	* dbxout.c, except.c: Include <string.h>/<strings.h>.

	* explow.c (plus_constant_for_output_wide): Removed unused
	variable all_constant.

	* c-decl.c, genattr.c, genattrtab.c, getconfig.c, genemit.c
	genextract.c, genflags.c, genopinit.c genoutput.c, genpeep.c,
	genrecog.c, global.c, integrate.c , stupid.c : Include
	<stdlib.h>.

	* genextract.c (walk_rtx): Remove unused variable link.

	* genrecog.c (concat): Remove unreferenced static function.

	* prefix.c: Include <string.h>/<strings.h>, <stdlib.h>

	* stmt.c: Include <stdlib.h>.
	(expand_asm_operands): Remove unused variable val1.
	(expand_return): Remove unused variable block.
	(pushcase): Remove unused variables l and n.
	(pushcaserange): Likewise.

	* unroll.c (unroll_loop): Remove unused variable temp.

Sat Feb  7 23:46:09 1998  Greg McGary  <gkm@gnu.org>

	* c-decl.c (pushdecl): Set DECL_ORIGINAL_TYPE once only.

Sat Feb  7 15:11:28 1998  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* aclocal.m4 (GCC_FUNC_PRINTF_PTR): New macro to test the printf
	functions for whether they support the %p format specifier.
	* acconfig.h (HOST_PTR_PRINTF): Insert stub for autoconf.
	* configure.in (GCC_FUNC_PRINTF_PTR): Use it.
	* configure, config.in: Rebuild.

Fri Feb  6 14:20:16 1998  Jim Wilson  <wilson@cygnus.com>

	* function.c (assign_parms): New variable named_arg, with value
	depending on STRICT_ARGUMENT_NAMING.  Use instead of ! last_named.

Fri Feb  6 14:34:28 1998  Gavin Koch  <gavin@cygnus.com>

	* mips/t-r3900: New - same as t-ecoff but eliminate
	multilibs: mips1 and mips3.
	* configure.in (tx39*): Use new mips/t-r3900.
	* configure: Rebuild.
	* mips/r3900.h (MULTILIB_DEFAULTS): Eliminate mips1.

1998-02-06  Jason Merrill  <jason@yorick.cygnus.com>

	* dwarf2out.c: Add old_args_size.
	(dwarf2out_args_size): Use it.
	(dwarf2out_begin_prologue): Initialize it.
	(dwarf2out_stack_adjust): If !asynchronous_exceptions, save up
	pushed args until we see a call.
	* final.c (final_scan_insn): Hand CALL_INSNs off to the dwarf2 code
	before outputting them.

1998-02-06  Kriang Lerdsuwanakij  <lerdsuwa@scf.usc.edu>

	* cplus-dem.c (demangle_template_template_parm): New function.
	(demangle_template): Handle template template parameters.

1998-02-02  Mark Mitchell  <mmitchell@usa.net>

	* calls.c (expand_call): Don't confuse member functions named
	realloc, setjmp, and so forth with the standard library
	functions of the same names.

Thu Feb  5 21:59:49 1998  Jeffrey A Law  (law@cygnus.com)

	* stmt.c (expand_asm_operands): Correctly identify asm statements
	no output operands.

Thu Feb  5 21:56:06 1998  Mumit Khan  <khan@xraylith.wisc.edu>

	* c-common.c (decl_attributes): Flag unrecognized attribute
	functions as warnings instead of as errors.

1998-02-05  Marc Lehmann  <pcg@goof.com>

	* integrate.c (INTEGRATE_THRESHOLD): Inline only small functions
	when -Os is specified.
	* toplev.c (main): Don't disable flag_inline_functions anymore when
	-Os is in effect.

Fri Feb  6 00:27:36 1998  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* regmove.c: Update.
	* flags.h (flag_regmove): Declare.
	* rtl.h (optimize_reg_copy_1, optimize_reg_copy_2): Don't declare.
	* local-alloc.c (optimize_reg_copy_1, optimize_reg_copy_2):
	Moved into regmove; changed caller.
	* toplev.c (rest_of_compilation): Call regmove_optimize also for
	expensive_optimizations.

Thu Feb  5 13:38:42 1998  Jeff Law  (law@cygnus.com)

	* version.c: Bump for snapshot.

Thu Feb  5 01:45:19 1998  J"orn Rennecke  <amylaar@cygnus.co.uk>
	Undo this change (the problem was actually in reload):
	Fri Jan 23 23:28:59 1998  J"orn Rennecke  <amylaar@cygnus.co.uk>

	  * sh.md (movqi_i+1): New peephole.

Tue Feb  3 01:11:12 1998  Jeffrey A Law  (law@cygnus.com)

	* jump.c (jump_optimize): Lose calls to modified_in_p they are
	not needed anymore due to changes elsewhere in jump.c.

	* jump.c (jump_optimize): Fix first arg to modified_in_p in
	previous change.

Mon Feb  2 19:18:14 1998  Richard Henderson  <rth@cygnus.com>

	* expr.c (expand_builtin_setjmp): Accept two new arguments for
	the labels to branch to on first and subsequent executions.  Don't
	play with __dummy.  Rename `setjmp' insn to `builtin_setjmp_setup',
	and provide it with the jmp_buf.  Use only one of
	`builtin_setjmp_receiver' or `nonlocal_goto_receiver',
	and provide the former with the target label.
	(expand_builtin) [BUILTIN_SETJMP]: Generate a label for use by setjmp.
	(expand_builtin) [BUILTIN_LONGJMP]: Split out to ...
	(expand_builtin_longjmp): ... here.  Recognize a `builtin_longjmp'
	insn to replace all of the normal nonlocal_goto code.  Don't play
	with __dummy.  Correct arguments to nonlocal_goto.
	* expr.h (expand_builtin_setjmp): Update prototype.
	* except.c (start_dynamic_handler): When using builtin_setjmp,
	generate more accurate flow information.

	* alpha.md (nonlocal_goto_receiver_osf): Delete.
	(nonlocal_goto_receiver_vms): Rename to nonlocal_goto_receiver.
	(builtin_longjmp, builtin_setjmp_receiver): New.
	* sparc.md (update_return): Disambiguate unspec number.
	(nonlocal_goto): Rearrange arguments to match caller in except.c.
	(builtin_setjmp_setup): Rename from setjmp.  Match and ignore the
	jmp_buf operand.
	* mips.md (nonlocal_goto_receiver, builtin_setjmp_receiver): Remove.
	(builtin_setjmp_setup*, builtin_longjmp): New.

Mon Feb  2 16:43:10 1998  John Carr  <jfc@mit.edu>

	* mips.md: Change gen_rtx (CONST_INT) to GEN_INT.

Mon Feb  2 13:06:47 1998  Jim Wilson  <wilson@cygnus.com>

	* vmsconfig.com: Remove bytecode references.

1998-01-30  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* dwarf2out.c (dwarf2out_frame_init): Undo last change, so that
	-fno-sjlj-exceptions works for a target that defines
	DWARF2_UNWIND_INFO as zero.

	* regmove.c (fixup_match_1): Undo last change which removed some
	"useless" code, and add a comment explaining this.

Mon Feb  2 10:47:14 1998  Gavin Koch  (gavin@cygnus.com)

	* mips.c (mips_expand_prologue): Change uses of TARGET_64BIT
	to TARGET_LONG64.

Mon Feb  2 10:38:41 1998  Klaus Kaempf  <kkaempf@progis.de>

	* makefile.vms: Remove bytecode references.
	Create genrtl files.

Mon Feb  2 02:08:04 1998  Michael P. Hayes  <michaelh@ongaonga.chch.cri.nz>

	* jump.c (jump_optimize): Allow conditional loading of floating point
	constants and constants from memory.  Reinstalled modified_in_p tests.

Mon Feb  2 01:38:39 1998  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* loop.c (get_condition): Handle sign-extended constants.

Mon Feb  2 01:22:46 1998  Hans-Peter Nilsson  <hp@axis.se>

	* expr.c (emit_push_insn): Add code to use movstrti if present.

	* expr.c (emit_push_insn): Use same max-move-amount for movstrhi
	and movstrqi as in emit_block_move ().

Mon Feb  2 00:09:52 1998  Toon Moene  <toon@moene.indiv.nluug.nl>

	* config/m68k/x-next: Remove /NextDeveloper/Headers from
	the directories to fixinclude - /usr/include is a link
	to it and hence its contents are fixed by default.

Sun Feb  1 14:15:33 1998  Franz Sirl  <franz.sirl-kernel@lauterbach.com>

	* rs6000/linux.h: Define JUMP_TABLES_IN_TEXT_SECTION.

Sun Feb  1 13:01:15 1998  Klaus Kaempf  <kkaempf@progis.de>

	* cccp.c (main): Predefine __VMS_VER on VMS.

Sun Feb  1 12:39:53 1998  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* expr.c (get_inner_reference): Use sbitsizetype for type sizes.
	* fold-const.c (size_int): Replace with
	(size_int_wide).
	(make_bit_field_ref): Use bitsize_int for bit position.
	* stor-layout.c (sizetype): Delete.
	(sizetype_tab, sbitsizetype, ubitsizetype): Declare.
	(layout_record, layout_union, layout_type):
	Use bitsize_int for bit size.
	(set_sizetype): New function.
	(make_signed_type, make_unsigned_type): Use it.
	* c-decl.c (init_decl_processing): Likewise.
	* tree.h (size_int): Don't delcare, #define.
	(size_int_wide, sizetype_tab, sbitsize, ubitsize): Declare.
	(set_sizetype): Declare.
	(bitsize_int, size_int_2, BITS_PER_UNIT_LOG, sizetype, bitsizetype):
	Define.
	* c-typeck.c (c_sizeof, c_sizeof_nowarn, c_size_in_bytes):
	Convert result to sizetype.
	(really_start_incremental_init, push_init_level):
	Set type of constructor_bit_index to sbitsizetype.
	(push_init_level): Use unsigned arithmetic to determine padding.
	(output_init_element): Likewise.

Sun Feb  1 03:32:07 1998  Jeffrey A Law  (law@cygnus.com)

	* combine.c (simplify_shift_const): Fix typo in last change.

Sun Feb  1 02:50:46 1998  John Carr  <jfc@mit.edu>

	* combine.c (simplify_shift_const): (lshiftrt (truncate (lshiftrt)))
	is (truncate (lshiftrt)).

Sun Feb  1 01:06:53 1998  Richard Henderson  <rth@cygnus.com>

	* alpha.c (alpha_expand_unaligned_load): Use expand_binop properly.
	Make sure result winds up in TGT.
	(alpha_expand_unaligned_store): Use expand_binop properly.  Allow
	src to be other than DImode.
	(alpha_expand_unaligned_load_words): Tidy.  Take an offset argument.
	(alpha_expand_unaligned_store_words): Likewise.
	(alpha_expand_block_move): Use REGNO_POINTER_ALIGN.  Restructure so
	that source and destination are separately optimized for alignment.
	(alpha_expand_block_clear): Use REGNO_POINTER_ALIGN.

Sun Feb  1 01:55:09 1998  Jeffrey A Law  (law@cygnus.com)

	* mips.md (adddi3_internal_2): Be consistent with adddi3 expander
	with handling of -32768.

Sun Feb  1 01:48:18 1998  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* aclocal.m4 (GCC_NEED_DECLARATION): Modify macro to accept a
	shell variable argument instead of only hard coded functions.
	(GCC_NEED_DECLARATIONS): New macro to accept multiple functions.

	* configure.in: Collapse multiple calls to AC_CHECK_FUNCS into one
	call.  Collapse multiple calls to GCC_NEED_DECLARATION into one
	call to GCC_NEED_DECLARATIONS (new macro.)  Check if we need
	declarations for bcopy, bcmp and bzero.

	* acconfig.h: Add stubs for bcopy, bcmp and bzero declarations.

	* gansidecl.h: If we have bcopy but don't declare it, then do so.
	Likewise for bcmp and bzero.  Only define macros for bcopy, bcmp,
	bzero, index and rindex if they aren't already present.

Sat Jan 31 11:26:58 1998  Jeffrey A Law  (law@cygnus.com)

	* toplev.c (close_dump_file): Wrap function prototype for
	argument "func" in PROTO.
	(dump_rtl): Likewise.

Fri Jan 30 22:30:39 1998  John Carr  <jfc@mit.edu>

	* sparc.c (sparc_override_options): Make v8plus and ultrasparc set
	MASK_V8PLUS.
	(output_function_epilogue): Omit epilogue if nothing drops through.
	(output_move_double): Suppress int ldd usage on ultrasparc and v9.
	(registers_ok_for_ldd_peep): Likewise.
	(print_operand): Suppress b,a on ultrasparc.  Let Y accept a constant.
	(ultrasparc_adjust_cost): New function.
	(sparc_issue_rate): New function.
	* sparc.h (MASK_VIS, TARGET_VIS): New.
	(MASK_V8PLUS, TARGET_V8PLUS): New.
	(TARGET_HARD_MUL32, TARGET_HARD_MUL): New.
	(TARGET_SWITCHES): Add vis and v8plus.
	(REG_CLASS_FROM_LETTER): Accept d and b for VIS.
	(REGISTER_MOVE_COST): FP<->INT move cost 12 for ultrasparc.
	(RTX_COSTS): Use TARGET_HARD_MUL.
	(ADJUST_COST): Call ultrasparc_adjust_cost.
	(ISSUE_RATE): New.
	* sparc.md (attr type): Add sload, fpmove, fpcmove.  Adjust users
	of load & fp appropriately.
	(supersparc function units): Adjust for Haifa.
	(ultrasparc function units): Likewise.
	(get_pc_via_rdpc): All v9, not just arch64.
	(movdi_v8plus, movdi_v8plus+1): New.
	(adddi3_sp32+1): New.
	(subdi3_sp32+1): New.
	(movsi_insn, movsf_const_insn, movdf_const_insn): Know VIS.
	(addsi3, subsi3, anddi3_sp32, andsi3, and_not_di_sp32): Likewise.
	(and_not_si, iordi3_sp32, iorsi3, or_not_di_sp32, or_not_si): Likewise.
	(xorsi3_sp32, xorsi3, xor_not_di_sp32, xor_not_si): Likewise.
	(one_cmpldi2_sp32, one_cmplsi2): Likewise.
	(ldd peepholes): Suppress for v9.
	(return_adddi): Kill redundant test.  Arg1 may be arith_operand.
	(return_subsi): Revmove.

Fri Jan 30 18:30:03 1998  John F Carr  <jfc@mit.edu>

	* mips.c (save_restore_insns): Set RTX_UNCHANGING_P in register
	save/restore MEM rtl.

Fri Jan 30 09:08:16 1998  Jeffrey A Law  (law@cygnus.com)

	* configure.in: Check for declaration of abort.
	* acconfig.h: Corresponding changes.
	* toplev.c: Use NEED_DECLARATION_ABORT to determine if abort should
	be declared.

Thu Jan 29 20:26:12 1998  Jeffrey A Law  (law@cygnus.com)

	* genattrtab.c (optimize): Define in case PRESERVE_DEATH_INFO_REGNO_P
	uses it.

Thu Jan 29 09:27:56 1998  Jeff Law  (law@cygnus.com)

	* version.c: Bump for snapshot.

Thu Jan 29 10:12:27 1998  Jeffrey A Law  (law@cygnus.com)

	* configure.in: Check for atoq and atoll.
	* rtl.c (read_rtx): Use HAVE_ATOLL and HAVE_ATOQ to select the
	proper routine for converting ascii into long long values.

Thu Jan 29 01:28:14 1998  Klaus Kaempf  <kkaempf@progis.de>

	* cccp.c (SYS$SEARCH, SYS$PARSE): Write as upper-case.

	* vmsconfig.com: Remove bytecode references.

	* alpha/vms.h (PREFIX): Define.

	* alpha/vms.h (ASM_OUTPUT_ALIGNED_COMMON): Remove.

	* am-alpha.h: Don't include alloca for OPEN_VMS.

	* alpha/xm-vms.h (HAVE_CPP_STRINGIFY): Define.

	* alpha/xm-vms.h (INCLUDE_DEFAULTS): Define.
	(GCC_INCLUDE_DIR): Define.

	* make-cc.com, make-cccp.com, make-cc1.com: Removed.
	* makefile.vms: New file.

	* alpha/vms.h (CPP_PREDEFINES): Remove -Dalpha.

	* alpha.c (output_prolog): Output '.name' directive
	for minimal traceback information.

	* alpha.c (output_prolog): Don't prepend entry point symbols
	with '$' on OPEN_VMS.

Thu Jan 29 00:25:35 1998  David S. Miller  <davem@tanya.rutgers.edu>
			  Jeffrey A Law  (law@cygnus.com)

	* rtl.c (read_rtx): Use atol/atoq based upon disposition of
	HOST_WIDE_INT.

	* genattrtab.c (write_test_expr): Use HOST_WIDE_INT_PRINT_DEC
	as needed.
	* genemit.c (gen_exp): Likewise.
	* genpeep.c (match_rtx): Likewise.
	* genrecog.c (write_tree_1): Likewise.

	* c-lex.c (yyprint): Use proper format string based upon
	disposition of HOST_BITS_PER_WIDE_INT.
	(yylex): Put casts in right place for args to build_int_2.

Thu Jan 29 00:24:29 1998  Jeffrey A Law  (law@cygnus.com)

	* combine.c: Fix typos in Jan27 changes.

Thu Jan 29 00:07:49 1998  Ollivier Robert  <roberto@keltia.freenix.fr>

	* i386/freebsd.h (LIB_SPEC): Correctly handle -shared, -p and friends.
	(LINK_SPEC): Likewise.
	(STARTFILE_SPEC): Likewise.

1998-01-28  Mike Stump  <mrs@wrs.com>

	* rtlanal.c (dead_or_set_regno_p): Ignore REG_DEAD notes after
	reload completes.
	* genattrtab.c (reload_completed): Define.

	* m32r.md, mips.md, mn10200.md, mn10300.md, pyr.md: Remove obsolete
	comments.

Wed Jan 28 20:11:06 1998  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* reload.c (push_reload): If WORD_REGISTER_OPERATIONS, reload the
	SUBREG_REG if the word count is unchanged, also in the input reload
	case.  Disable non-applicable sanity checks.

Wed Jan 28 20:08:26 1998  Jeffrey A Law  (law@cygnus.com)

	* config/t-svr4 (TARGET_LIBGCC2_CFLAGS): Add -fPIC.

Wed Jan 28 20:04:43 1998  Ian Lance Taylor  <ian@cygnus.com>

	* i386/t-cygwin32 (LIMITS_H_TEST, LIBGCC2_INCLUDES): Define.

Wed Jan 28 11:45:27 1998  Per Bothner  <bothner@cygnus.com>

	* dbxout.c (dbxout_type): For a RECORD_TYPE, check that TYPE_BINFO
	is a TREE_VEC before trying to use it for baseclasses.
	(Chill uses the same field for a different purpose.)

	* toplev.c (strip_off_ending): Generalize to endings up to 5 chars.

Tue Jan 27 23:15:55 1998  Lassi A. Tuura  <lat@iki.fi>

	* config.sub: More accurate determination of HP processor types.

Tue Jan 27 23:11:11 1998  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* c-lex.c: Include <stdlib.h> and <string.h>/<strings.h>.  Add
	prototype for `handle_sysv_pragma', and make it static.  Add
	parentheses around assignment used as truth value.

	* combine.c (combine_instructions): Protect variable `prev' with
	macro HAVE_cc0.
	(can_combine_p): Protect variable `link' with AUTO_INC_DEC.
	(extract_left_shift): Add parentheses around operand of &.
	(merge_outer_ops): Avoid an empty body in an else-statement.
	(gen_rtx_combine): Remove unused variable `i'.

	* sparc/gmon-sol2.c: Include <fcntl.h>.  Make return type of
	function monstartup `void'.  Likewise for internal_mcount.  Add
	`static void' prototype for moncontrol.  Reconcile sprintf format
	vs. args.

	* sparc/sparc.c: Include <stdlib.h> and <string.h>/<strings.h>.
	Make return type of function_arg_slotno explicitly `int'.
	(reg_unused_after): Add	parentheses around assignment used as
	truth value.
	(save_regs): Add explicit braces to avoid ambiguous `else'.
	(function_arg_slotno): Add parentheses around && within ||.
	(function_arg_pass_by_reference): Likewise.
	(sparc_flat_output_function_prologue): Reconcile fprintf format
	vs. args.

	* svr4.h (ASM_OUTPUT_LIMITED_STRING): Add parentheses around
	assignment used as truth value.

	* cplus-dem.c: Include <stdlib.h>.
	(demangle_signature): Avoid an empty body in an else-statement.
	(do_type): Remove unused variable `lvl'.

	* cppexp.c: Don't have <stdlib.h> depend on MULTIBYTE_CHARS.
	Include <string.h>/<strings.h>.
	(cpp_lex): Remove unused variable `namelen'.
	(cpp_lex): Explicitly declare `num_chars' as an int.

	* cpplib.c: Avoid duplicate inclusion of <stdlib.h>, include
	<unistd.h> instead.  Explicitly declare is_system_include
	returning int.
	(make_assertion): Remove unused variable `kt'.
	(cpp_expand_to_buffer): Hide variable `obuf'.
	(output_line_command): Remove unused variables, `line_end',
	`line_cmd_buf' and `len'.
	(macarg): Remove unused variable `arg_start'.
	(special_symbol): Remove unused variable `i'.  Add parentheses
	around assignment used as truth value.
	(do_include): Remove unused variables `pcfname' and `retried',
	hide `pcf' and `pcfbuflimit'.
	(do_line): Remove unused variable `i'.
	(finclude): Hide variable `missing_newline'.
	(cpp_handle_options): Remove unused variable `j'.
	(read_token_list): Remove unused variable `eofp'.
	(cpp_error_with_line): Remove unused variable `i'.
	(cpp_warning_with_line): Likewise.
	(cpp_pedwarn_with_line): Explicitly declare `column' as int.
	(cpp_error_from_errno): Remove unused variable `i'.

	* cse.c (invalidate): Add parentheses around assignment used as
	truth value.
	(find_best_addr): Move declaration of variable `our_cost' inside
	the conditional macro where its used.
	(fold_rtx): Avoid an empty body in an if-statement.
	(cse_insn): Wrap variables  `this_insn_cc0_mode' and
	`this_insn_cc0' in macro HAVE_cc0.

	* dwarf2out.c: Include <stdlib.h> and <string.h>/<string.h>.
	(ASM_OUTPUT_DWARF_DATA8): Reconcile format vs. args in fprintf's.
	(output_uleb128): Likewise.
	(output_sleb128): Likewise.
	(output_cfi): Likewise.
	(output_call_frame_info): Remove unused variables `j', `fde_size'
	and `fde_pad'.
	(comp_unit_has_inlines): Hide declaration as per rest of file.
	(size_of_line_prolog): Correct typo in prototype.
	(add_arange): Likewise.
	(output_aranges): Likewise.
	(add_name_and_src_coords_attributes): Likewise.
	(gen_array_type_die): Likewise.
	(gen_inlined_subroutine_die): Likewise.
	(equate_decl_number_to_die): Remove unused variable `i'.
	(print_die): Reconcile format vs. args in fprintf's.
	(print_dwarf_line_table): Likewise.
	(output_die): Likewise.
	(output_line_info): Likewise.
	(add_subscript_info): Avoid an empty body in an else-statement.
	(gen_subprogram_die): Remove unused variable `fp_loc'.

	* dwarfout.c: Explicitly declare `next_pubname_number' as int.
	Protect `ordering_attribute' prototype with USE_ORDERING_ATTRIBUTE
	macro.  Protect `src_coords_attribute' prototype with
	DWARF_DECL_COORDINATES macro.  Hide `output_entry_point_die'
	prototype as in the rest of the file.  Likewise for
	`output_pointer_type_die' and `output_reference_type_die'.  Remove
	prototype for `type_of_for_scope'.
	(output_unsigned_leb128): Reconcile format vs. args in fprintf.
	(type_attribute): Add explicit braces to avoid ambiguous `else'.

	* final.c: Include <stdlib.h> and <string.h>/<strings.h>.
	(shorten_branches): Protect declaration of tmp_length with
	SHORTEN_WITH_ADJUST_INSN_LENGTH and ADJUST_INSN_LENGTH macros.
	(profile_function): Protect declaration of `sval' and `cxt'
	variables with appropriate macros.
	(final_scan_insn): Likewise for `note' variable.  Add explicit
	braces to avoid empty body in an if-statement.
	(output_asm_insn): Move variable `i' inside macro conditional
	where it is used.  Add parentheses around assignment used as truth
	value.
	(asm_fprintf): Likewise, likewise.

	* fix-header.c (main): Remove unused variable `done'.  Protect
	declaration of `i' with FIXPROTO_IGNORE_LIST.

	* pexecute.c: Include <unistd.h>.  Prototype `my_strerror'.

	* print-rtl.c (print_inline_rtx): Explicitly declare the parameter
	`ind'.

	* profile.c: Include <string.h>/<strings.h>.
	(instrument_arcs): Remove unused variables `note', `inverted',
	`zero' and `neg_one'.
	(branch_prob): Avoid empty body in an if-statement.

	* regclass.c: Include <stdlib.h>.
	(reg_alternate_class): Explicitly declare parameter `regno'.

	* regmove.c (regmove_optimize): Remove unused variable `p'.  Add
	parentheses around assignment used as truth value.
	(find_matches): Remove unused variables `output_operand' and
	`matching_operand'.
	(fixup_match_1): Remove statement with no effect: "if (0) ;".

	* scan.c (sstring_append): Explicitly declare `count' as int.
	(scan_string): Explicitly declare parameter `init' as int.

	* sched.c: Include <stdlib.h>.
	(BLOCKAGE_RANGE): Add parentheses around arithmetic in operand of |.
	(rank_for_schedule): Add parentheses around assignment used as
	truth value.
	(schedule_block): Likewise.
	(regno_use_in): Likewise.
	(schedule_insns): Remove unused variable `i'.

	* toplev.c: Include <stdlib.h> and <string.h>/<strings.h>.
	(v_message_with_decl): Remove unused variable `n'.
	(botch): Explicitly declare parameter `s' as char *.
	(main): Add parentheses around assignment used as truth value.

	* tree.c (make_node): Protect the variable `kind' with the
	GATHER_STATISTICS macro.
	(real_value_from_int_cst): Move variable `e' inside conditional
	macro area where it is used.
	(tree_last): Add parentheses around assignment used as truth value.
	(build1): Protect the variable `kind' with the GATHER_STATISTICS
	macro.
	(print_obstack_statistics): Reconcile format vs. args in fprintf.
	Protect variables `i', `total_nodes', and `total_bytes' with the
	GATHER_STATISTICS macro.

Tue Jan 27 23:01:55 1998  Mike Stump  <mrs@wrs.com>

	* m32r.md, mips.md, mn10200.md, mn10300.md, pyr.md: Add
	some comments regarding use of dead_or_set_p.

Tue Jan 27 22:14:48 1998  Todd Vierling  <tv@pobox.com>

	* fixincludes: Tweak fix for struct exception in math.h

Tue Jan 27 17:21:09 1998  Gavin Koch  (gavin@cygnus.com)

	* mips/mips.c (mips_expand_prologue,mips_expand_epilogue):
	Change mode of registers used to add/sub from
	hard_frame_pointer_rtx from word_mode to Pmode.

Tue Jan 27 11:02:04 1998  Nick Clifton  <nickc@cygnus.com>

	* v850.h (ASM_OUTPUT_ALIGNED_BSS): Use
	asm_output_aligned_bss() instead of asm_output_bss().

	* toplev.c (rest_of_compilation): Replace references to
	stack_reg_dump_file and dbr_sched_dump_file with references to
	rtl_dump_file.

Tue Jan 27 10:22:13 1998  Kamil Iskra  <iskra@student.uci.agh.edu.pl>

	* tlink.c (scan_linker_output): Call fclose() for opened files.

Tue Jan 27 05:05:26 1998  Richard Henderson  <rth@cygnus.com>

	* alpha.c (output_epilog [!VMS]): Don't tag global functions if
	compiling with -fpic -- we want to be able to override symbols
	properly.
	(alpha_expand_block_move): Fix thinko in last change.

	* alpha.h (ASM_OUTPUT_MI_THUNK): New define.
	* config/alpha/win-nt.h (ASM_OUTPUT_MI_THUNK): New define.
	* config/alpha/vms.h (ASM_OUTPUT_MI_THUNK): New undef.

Tue Jan 27 03:21:23 1998  Richard Henderson  <rth@cygnus.com>

	* alpha.md (abssf, absdf): Revert last change.

Tue Jan 27 00:26:50 1998  John Carr  <jfc@mit.edu>

	* dwarf2out.c (dwarf2out_frame_init): Test value of DWARF2_UNWIND_INFO.
	* mips/sni-svr4.h: Define DWARF2_UNWIND_INFO as 0.

Tue Jan 27 00:07:02 1998  Jeffrey A Law  (law@cygnus.com)

	* emit-rtl.c (gen_lowpart_common): Handle more case where converting
	a CONST_INT into SFmode.

Tue Jan 20 16:01:03 1998  Anthony Green  <green@cygnus.com>

	* flags.h: New flag (optimize_size).
	* toplev.c (main): Parse -Os option and set optimize_space
	accordingly.
	* gcc.c (default_compilers), cp/lang-specs.h, f/lang-specs.h: Define
	__OPTIMIZE_SIZE__ when compiling with -Os.
	* config/dsp16xx/dsp16xx.h, config/i386/i386.h,
	config/i386/dgux.h, config/i960/i960.h, config/pdp11/pdp11.h,
	config/v850/v850.h (OPTIMIZATION_OPTIONS): New SIZE argument
	to macro.
	* config/i386/i386.c (optimization_options): Accept new SIZE argument.

Mon Jan 26 23:57:39 1998  Manfred Hollstein  <manfred@s-direktnet.de>

	* libgcc2.c (__clear_insn_cache): On sysV68 enable the memctl
	stuff only if MCT_TEXT is #define'd.

Mon Jan 26 23:52:51 1998  Markus F.X.J. Oberhumer  <k3040e4@c210.edvz.uni-linz.ac.at>

	* configure.in (i*86-pc-msdosdjgpp): Treat like msdos & go32
	configurations.

Fri Jan 23 09:39:36 1998  Nick Clifton  <nickc@cygnus.com>

	* toplev.c: Add -dM command line option to dump RTL after the
	machine dependent reorganization pass, if there is one.
	Reorganize RTL dump code, so that only one file handle is
	needed.

Mon Jan 26 12:09:42 1998  Benjamin Kosnik  <bkoz@rhino.cygnus.com>

	* except.c (check_exception_handler_labels): Disable warning when
	flag_syntax_only.

Mon Jan 26 18:17:32 1998  Jim Wilson  <wilson@cygnus.com>

	* sparc.c (pic_setup_code): Don't set LABEL_PRESERVE_P.

Mon Jan 26 18:11:30 1998  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* c-decl.c (grokdeclarator): Get parameter tags from
	last_function_parm_tags.
	* dwarfout.c (output_formal_types): Set TREE_ASM_WRITTEN before
	traversing the parameter types.
	(output_type): No early exit for FUNCTION_TYPE / METHOD_TYPE context.

Mon Jan 26 01:44:12 1998  Jeffrey A Law  (law@cygnus.com)

	* h8300.c (print_operand): Handle CONST_DOUBLE for 'e', 'f', and
	the default case.
	(get_shift_alg): Fix typo.

Sun Jan 25 22:22:04 1998  Richard Henderson  <rth@cygnus.com>

	* alpha.c (alpha_expand_block_move): Copy ADDRESSOF to reg.

Sun Jan 25 22:14:28 1998  Richard Henderson  <rth@cygnus.com>

	* toplev.c (get_run_time): Make sure each case gets its variables.

Sun Jan 25 22:10:21 1998  Richard Henderson  <rth@cygnus.com>

	* configure.in (build_xm_file): Add auto-config.h if host=build.
	(host_xm_file_list): Don't add $(srcdir) to auto-config.h.
	(build_xm_file_list): Likewise.
	* configure: Rebuild.

Sun Jan 25 22:00:25 1998  Alasdair Baird  <alasdair@wildcat.demon.co.uk>

	* recog.c (validate_replace_rtx_1): Only perform substitutions
	of arguments to commutative and comparison operators once.

Sun Jan 25 12:30:18 1998  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* sparc.c (output_cbranch): Add default case in
	enumeration switch.

	* reorg.c (insn_sets_resource_p): Correct typo in prototype.
	(emit_delay_sequence): Eliminate unused parameter, all callers
	changed.
	(fill_simple_delay_slots): Likewise.
	(fill_slots_from_thread): Likewise.
	(fill_eager_delay_slots): Likewise.
	(mark_referenced_resources): Add default case in enumeration switch.
	(mark_set_resources): Likewise.
	(rare_destination): Likewise.
	(mostly_true_jump): Likewise.
	(find_dead_or_set_registers): Likewise.
	(redirect_with_delay_slots_safe_p): Remove unused variable `slots'.
	(update_reg_unused_notes): Remove unused variable `p'.
	(mark_target_live_regs): Remove unused variables `next' and
	`jump_count'.
	(fill_simple_delay_slots): Remove unused variable `j'.
	(fill_slots_from_thread): Add parentheses around assignment used
	as truth value.
	(dbr_schedule): Likewise.

	* objc/Make-lang.in (objc.stage1): Depend on stage1-start.
	(objc.stage2, objc.stage3, objc.stage4): Likewise.

Sun Jan 25 12:13:47 1998  Michael Tiemann  <michael@tiemann.org>

	* cse.c (simplify_ternary_operation): Don't try to simplify
	IF_THEN_ELSE expressions (created by combine) that don't use
	relational operators.

Fri Jan 23 22:48:24 1998  Jeffrey A Law  (law@cygnus.com)

	* cse.c (simplify_ternary_operation): Handle more IF_THEN_ELSE
	simplifications.

	* crtstuff.c (init_dummy): Keep the epilogue in the init
	section for non-ELF systems.

Fri Jan 23 23:28:59 1998  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* sh.md (movqi_i+1): New peephole.

Fri Jan 23 15:39:42 1998  Jim Wilson  <wilson@cygnus.com>

	* Makefile.in: Remove remaining bytecode stuff.
	* emit-rtl.c, expr.c: Likewise.

Fri Jan 23 12:41:10 1998  Nick Clifton  (nickc@cygnus.com)

	* toplev.c (lang_options): Add unknown-pragma options.

Thu Jan 22 23:43:38 1998  Per Bothner  <bothner@cygnus.com>

	* dwarfout.c (byte_size_attribute): Simplify and fix - don't need
	special (and incomplete) handling for Chill arrays.

Fri Jan 23 00:27:23 1998  John Carr  <jfc@mit.edu>

	* toplev.c (get_run_time): Call sysconf(_SC_CLK_TCK), when available,
	to get clock rate.

Fri Jan 23 00:19:36 1998  Gavin Koch  (gavin@cygnus.com)

	* mips.md (muldi3_internal2): Reverse test for TARGET_MIPS16.

1998-01-22  scott snyder  <snyder@d0sgif.fnal.gov>

	* mips.c (function_prologue): Use HARD_FRAME_POINTER_REGNUM in
	.frame directive instead of FRAME_POINTER_REGNUM.

Fri Jan 23 00:08:55 1998  Robin Kirkham  <rjk@mlb.dmt.csiro.au>

	* m68k.h (TARGET_SWITCHES): -mcpu32 now clears MASK_68881.
	(MACHINE_STATE_m68010_up): Replaced __mc68332__ with __mcpu32__.
	* m68k/m68k-none.h(CPP_FPU_SPEC): Update relative to TARGET_SWITCHES.
	(CPP_SPEC, ASM_SPEC, CC1_SPEC): Likewise.
	(CPP_SPEC): -m68332 defines both __mc68332 and __mcpu32__.
	* m68k/t-m68kbare (MULTILIB_OPTIONS): Add mcpu32.
	(MULTILIB_MATCHES): -m68332 now uses mcpu32 libraries, not m68000.
	(MULTILIB_EXCEPTIONS): Don't build 68881 libraries for m68000,
	mcpu32 or m5200.
	* longlong.h: Replace __mc68332__ with __mcpu32__.

Thu Jan 22 19:55:40 1998  Jeff Law  (law@cygnus.com)

	* version.c: Bump for snapshot.

Thu Jan 22 14:47:31 1998  Jim Wilson  <wilson@cygnus.com>

	* reload.c (push_reload): In WORD_REGISTER_OPERATIONS code, add test
	to require the SUBREG mode to be smaller than the SUBREG_REG mode.
	* reload1.c (eliminate_regs): Likewise.

Thu Jan 22 14:49:14 1998  Jeffrey A Law  (law@cygnus.com)

	* regmove.c (find_matches): Initialize matches->earlyclobber too.

Thu Jan 22 01:40:52 1998  Richard Henderson  <rth@cygnus.com>

	* alpha.md (abssf2, absdf2): Disable in IEEE mode.
	(negsf2, negdf2): Use proper subtract in IEEE mode.

Tue Jan 20 09:29:09 1998  Jeffrey A Law  (law@cygnus.com)

	* Makefile.in: Remove more bytecode stuff.
	* expr.c, stmt.c, config/msdos/top.sed: Likewise.
	* vax/xm-vms.h, winnt/config-nt.sed: Likewise.
	* f/install.texi, objc/Make-lang.in: Likewise.

	* Makefile.in: Remove all bytecode support.
	(OBJS): Make sure last entry is a real object file, not EXTRA_OBJS.
	* emit-rtl.c: Remove all bytecode support.
	* expr.c, expr.h function.c, integrate.c: Likewise.
	* output.h, regclass.c, rtl.h, stmt.c, toplev.c: Likewise.
	* tree.h, varasm.c: Likewise.
	* config/m68k/m68k.h: Likewise.
	* bi-*, bc-*, bytecode*: Delete bytecode related files.
	* modemap.def: Likewise.

Tue Jan 20 09:02:31 1998  Gavin Koch  (gavin@cygnus.com)

	* mips/mips.md (divsi3,divdi3,modsi3,moddi3,udivsi3,udivdi3,
	umodsi3,umoddi3): Handle mips16 div/mod by a constant.

Mon Jan 19 21:57:00 1998  Richard Henderson  <rth@cygnus.com>

	* i386.md (push): Prohibit symbolic constants if flag_pic.
	(movsi+1): Likewise for move to non-register.

Mon Jan 19 11:15:38 1998  Jim Wilson  <wilson@cygnus.com>

	* alpha.c (mode_mask_operand): Accept 0xffffffff on 32 bit host.
	(print_operand): Handle 0xffffffff on 32 bit host.

	* configure.in (thread_file): Rename uses before main loop to
	target_thread_file.  Initialize to empty in main loop.  Set thread_file
	to target_thread_file after main loop if not set.
	* configure: Rebuild.

	* genattrtab.c (find_and_mark_used_attributes): Handle CONST_INT.
	(add_values_to_cover): Revert last change (which had no ChangeLog
	entry).
	(simplify_with_current_value_aux): Handle CONST_INT.

Mon Jan 19 10:14:55 1998  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* unprotoize.c: Define UNPROTOIZE first, to actually take effect.

Mon Jan 19 10:11:52 1998  Richard Henderson  <rth@cygnus.com>

	* configure.in: Add cpp stringify test.
	* acconfig.h (HAVE_CPP_STRINGIFY): New tag.
	* gengenrtl.c: Use it.
	* configure, config.in: Rebuild.

Mon Jan 19 09:43:15 1998  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* Makefile.in (genrtl.c genrtl.h): Add dummy command for GNU make.

Mon Jan 19 09:38:18 1998  Richard Henderson  <rth@cygnus.com>

	* configure.in: Find declaration for sbrk.
	* acconfig.h (NEED_DECLARATION_SBRK): New tag.
	* config.in, configure: Rebuild.
	* mips-tfile.c: Properly protect declaration of sbrk and free.
	* toplev.c: Properly protect declaration of sbrk.

Sun Jan 18 20:18:01 1998  Richard Henderson  <rth@cygnus.com>

	* alpha.c (alpha_handle_trap_shadows): Ignore CLOBBERs.

Sun Jan 18 01:54:27 1998  Jeffrey A Law  (law@cygnus.com)

	* alpha/xm-winnt.h (HAS_INIT_SECTION): Undefine.

Sun Jan 18 00:57:35 1998  Mike Stump  <mrs@wrs.com>

	* configure.in (i960-wrs-vxworks): Default to latest vxworks release.

Sat Jan 17 23:41:36 1998  David S. Miller  <davem@tanya.rutgers.edu>

	* combine.c (force_to_mode, nonzero_bits): Correctly optimize
	constant offset computations from objects with known alignment in
	the presence of STACK_BIAS.

	* varasm.c (immed_double_const): Add casts to HOST_WIDE_INT where
	necessary.
	(const_hash): Hash val is unsigned long.
	(SYMHASH): Likewise.

	* tree.c (TYPE_HASH): Type of hash val is unsigned long.

	* print-tree.c (print_node_brief): HOST_PTR_PRINTF format wants a
	char pointer, not HOST_WIDE_INT.
	(print_node): Likewise.  Also hash is unsigned long not
	HOST_WIDE_INT.

	* cse.c (canon_hash): Hash is unsigned long not HOST_WIDE_INT.

	* explow.c (optimize_save_area_alloca): New function for targets
	where SETJMP_VIA_SAVE_AREA is true.
	(allocate_dynamic_stack_space): On SETJMP_VIA_SAVE_AREA targets,
	compute the amount of stack space needed should we find later that
	setjmp is never called by this function, stuff rtl for this inside
	a REG_NOTE of the final SET of stack_pointer_rtx.
	* toplev.c (rest_of_compilation): If SETJMP_VIA_SAVE_AREA and
	current_function_calls_alloca, call optimize_save_area_alloca.

Sat Jan 17 23:22:59 1998  John Wehle  (john@feith.com)

	* i386.md: Remove redundant integer push patterns.
	Don't bother checking for TARGET_PUSH_MEMORY when
	pushing constants or registers.

Sat Jan 17 22:35:39 1998  Mumit Khan  <khan@xraylith.wisc.edu>
			  J.J VanderHeijden  <J.J.vanderHeijden@student.utwente.nl>

	* pexecute.c (pexecute): New function for mingw32. Supports pipes.
	(pwait): New function for mingw32.

	* gcc.c (execute): Mingw32 pexecute() supports pipes, but cygwin32
	pipe support is broken for now.

1998-01-17  Lee Iverson  <leei@Canada.AI.SRI.COM>

	* emit_rtl.c (init_emit_once): Ensure that potential aliasing
	between frame_pointer_rtx, hard_frame_pointer_rtx, and
	arg_pointer_rtx is respected in initialization.
	(init_emit_once): Use gen_rtx_raw_REG() to create
	return_address_pointer_rtx.

	* reorg.c: #include "expr.h" for rtx prototypes.
	* Makefile.in (reorg.o): Depend on expr.h

Sat Jan 17 21:28:08 1998  Pieter Nagel  <pnagel@epiuse.co.za>

	* Makefile.in (FLAGS_TO_PASS): Pass down gcc_include_dir and
	local_prefix to sub-make invocations.

Sat Jan 17 21:24:16 1998  David T. McWherter  <dtm@waterw.com>

	* objc-parse.c: Recognize protocol qualifiers in class definitions.

Sat Jan 17 21:16:19 1998  Jeffrey A Law  (law@cygnus.com)

	* rtl.h: Fix typos.

	* acconfig.h (NEED_DECLARATION_ATOL): New declaration to check for.
	* configure.in: Check for atol.
	* rtl.c (atol): Only provide the declaration if NEED_DECLARATION_ATOL.

	* rtl.c (read_rtx): Initialize list_rtx to NULL, not NULL_RTX.

	* loop.c (find_and_verify_loops): When attempting to move insns from
	inside the loop outside the loop, create a BARRIER if no suitable
	one was found.

	* jump.c (jump_optimize): Remove Dec 17, 1997 chance in
	favor of an equivalent change from gcc-2.8.

	* i386/x-sco5 (CC): Remove trailing whitespace.

Sat Jan 17 21:09:46 1998  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* gengenrtl.c (type_from_format): De-ANSIfy function signature.
	(accessor_from_format): Likewise.
	(xmalloc): New function for use when linking with alloca.o.

Mon Jan  5 02:53:01 1998  Bruno Haible  <bruno@linuix.mathematik.uni-karlsruhe.de>

	* frame.c (find_fde): Correct FDE's upper bound.

Fri Jan 16 16:23:52 1998  Richard Henderson  <rth@cygnus.com>

	* gengenrtl.c (DEF_RTL_EXPR): Provide a K&R compliant version.

Fri Jan 16 10:16:10 1998  Jeffrey A Law  (law@cygnus.com)

	* calls.c (expand_call): Move #ifdef code out of macro argument
	lists.
	(emit_library_call, emit_library_call_value): Likewise.

Fri Jan 16 00:46:40 1998  Jeffrey A Law  (law@cygnus.com)

	* rtl.def (INLINE_HEADER): Fix bug exposed by gen_rtx_FOO changes.

Thu Jan 15 01:02:30 1998  Jeffrey A Law  (law@cygnus.com)

	* version.c: Bump for snapshot.

Wed Jan 14 22:49:17 1998  Richard Henderson  <rth@cygnus.com>

	* alias.c: Change all uses of gen_rtx(FOO...) to gen_rtx_FOO;
	change gen_rtx(expr...) to gen_rtx_fmt_foo(expr...).
	* caller-save.c, calls.c, combine.c, cse.c: Likewise.
	* dwarf2out.c, except.c, explow.c, expmed.c, expr.c: Likewise.
	* final.c, flow.c, function.c, genpeep.c, haifa-sched.c: Likewise.
	* halfpic.c, integrate.c, jump.c, local-alloc.c, loop.c: Likewise.
	* profile.c, recog.c, reg-stack.c, regclass.c, regmove.c: Likewise.
	* reload.c, reload1.c, reorg.c, sched.c, stmt.c, stupid.c: Likewise.
	* unroll.c, varasm.c: Likewise.
	* config/alpha/alpha.c, config/alpha/alpha.md: Likewise.

Wed Jan 14 19:36:08 1998  Gavin Koch  (gavin@cygnus.com)

	* mips.h: Fix some type-o's from a previous change.

Wed Jan 14 01:26:05 1998  Jeffrey A Law  (law@cygnus.com)

	* loop.c (check_dbra_loop): Make sure initial value is a
	CONST_INT before trying to normalize it.

Tue Jan 13 23:27:54 1998  Robert Lipe  (robertl@dgii.com)

	* sco5.h (ASM_OUTPUT_SECTION_NAME): Refresh from ../svr4.h.

Tue Jan 13 22:47:02 1998  Herman ten Brugge  <herman@htbrug.net.HCC.nl>

	* cppexp.c: Include gansidecl.h

Tue Jan 13 22:43:35 1998  Ian Lance Taylor  <ian@cygnus.com>

	* svr4.h (LINK_SPEC): Never specify -h.
	* ptx4.h (LINK_SPEC): Likewise.
	* rs6000/sysv4.h (LINK_SPEC): Likewise.
	* sparc/sol2.h (LINK_SPEC): Likewise.

Tue Jan 13 22:39:40 1998  Richard Henderson  (rth@cygnus.com)

	* c-typeck.c (comptypes): Exit early on NULL input.

	* haifa-sched.c (schedule_insns): Correctly remove inter-block
	dependencies after reload.

Tue Jan 13 22:22:31 1998  Franz Sirl  <franz.sirl-kernel@lauterbach.com>

	* rs6000/linux.h (CPP_PREDEFINES): Add -D__ELF__.

Tue Jan 13 22:14:57 1998  Klaus Kaempf  <kkaempf@progis.de>

	* alpha/vms.h (DIR_SEPARATOR): Define.

Tue Jan 13 22:13:04 1998  Bruno Haible  <bruno@linuix.mathematik.uni-karlsruhe.de>

	* Makefile.in (stamp-proto): Remove.
	(protoize.o, unprotoize.o): Straightforward compile.
	* unprotoize.c: Define UNPROTOIZE here, not in the Makefile.

Tue Jan 13 21:59:39 1998  Mumit Khan  <khan@xraylith.wisc.edu>

	* i386/cygwin32.h (STRIP_NAME_ENCODING): Define for Win32 to strip
	off the trailing @[NUM] added by ENCODE_SECTION_INFO.

Tue Jan 13 21:55:06 1998  Jeffrey A Law  (law@cygnus.com)

	* arm/netbsd.h (DWARF2_UNWIND_INFO): Define as zero for now.
	* i386/netbsd.h, m68k/netbsd.h, ns32k/netbsd.h: Likewise.
	* sparc/netbsd.h, vax/netbsd.h: Likewise.

Tue Jan 13 21:37:07 1998  Shigeya Suzuki  <shigeya@foretune.co.jp>

	* i386/bsd386.h (DWARF2_UNWIND_INFO): Define as zero for now.

Tue Jan 13 17:50:55 1998  Jim Wilson  <wilson@cygnus.com>

	* configure.in (target_cpu_default, target_cpu_default2): Use double
	quotes around them when testing their value.
	* configure: Rebuilt.

Tue Jan 13 09:07:44 1998  John Carr  <jfc@mit.edu>

	* gengenrtl.c (gencode): Emit new function obstack_alloc_rtx
	to allocate rtx.
	(gendef): Call obstack_alloc_rtx.

Tue Jan 13 01:16:36 1998  Robert Lipe  (robertl@dgii.com)

	* configure.in (i[3456]86-UnixWare7-sysv5): Treat much like SVR4
	for now.

Thu Dec 18 18:40:17 1997  Mumit Khan  <khan@xraylith.wisc.edu>

	* i386/mingw32.h (INCOMING_RETURN_ADDR_RTX): Delete. Use the value
	of DWARF2_UNWIND_INFO, if any, from i386/cygwin32.h instead.
	(STANDARD_INCLUDE_DIR): Change to /usr/local/i386-mingw32/include.

Tue Jan 13 00:44:02 1998  Jim Wilson  <wilson@cygnus.com>

	* mips.md (return_internal): Change mode from SImode to VOIDmode.

Sat Jan 10 22:11:39 1998  J. Kean Johnston  <jkj@sco.com>

	* i386/sco5.h (STARTFILE_SPEC, ENDFILE_SPEC): Correctly handle
	"-static".

Sat Jan 10 22:04:15 1998  Stan Cox  <scox@equinox.cygnus.com>

	* i386.md (movsicc_1, movhicc_1): For alternate 3 set the opcode
	suffix from operand 3.

Sat Jan 10 21:50:16 1998  J"orn Rennecke  <amylaar@cygnus.co.uk>
			  Jeffrey A Law  (law@cygnus.com)

	* regmove.c: New implementation of regmove pass.
	* local-alloc.c (optimize_reg_copy_1, optimize_reg_copy_2): Remove
	decls, make them have external linkage.  Return a value from
	optimize_reg_copy_1.
	* reload.h (count_occurrences): Add decl.
	* reload1.c (count_occurrences): Delete decl, make it have external
	linkage.
	* rtl.h (optimize_reg_copy_1, optimize_reg_copy_2): Declare.

Sat Jan 10 20:30:12 1998  Jeffrey A Law  (law@cygnus.com)

	* regclass.c (record_address_regs): Don't use REG_OK_FOR_BASE_P
	if it is not defined.

Thu Jan  8 21:06:54 1998  Richard Henderson  <rth@cygnus.com>

	* Makefile.in (OBJ, GEN, RTL_H): Add genrtl.[oh] bits.
	* emit-rtl.c (gen_rtx): Move special code to ...
	(gen_rtx_CONST_INT): New function.
	(gen_rtx_REG): New function.
	(*): Update all calls to gen_rtx.
	* genemit.c (gen_exp): Emit calls to gen_rtx_FOO for constant FOO.
	* rtl.h: Include genrtl.h; prototype CONST_INT & REG generators.
	(GEN_INT): Call gen_rtx_CONST_INT.
	* gengenrtl.c: New file.

Mon Jan  5 13:00:18 1998  John F. Carr  <jfc@mit.edu>

	* alias.c (*_dependence): Call base_alias_check before canon_rtx.
	(base_alias_check): If no base found for address call canon_rtx and
	try again.

Mon Jan  5 11:39:49 1998  Jeffrey A Law  (law@cygnus.com)

	* mips.c (mips_expand_prologue): Handle large frame with no outgoing
	arguments for mips16.
	(mips_expand_epilogue): Pass "orig_tsize" to save_restore_insns.
	Don't lose if tsize is zero after handling large stack for mips16.
	* mips.md (return): For trivial return, return address is in $31.

Sun Jan  4 20:24:00 1998  Nigel Stephens  <nigel@algor.co.uk>

	*  mips/mips16.S: Various changes to make it work with -msingle-float
	and -EL.

Sun Jan  4 14:25:18 1998  Gavin Koch  <gavin@cygnus.com>
			  Ian Lance Taylor  <ian@cygnus.com>
			  Jeff Law  <law@cygnus.com>

	* mips.c, mips.h, mips.md: First cut at merging in mips16
	support.  Major modifications throughout all three files.

Sun Jan  4 01:01:50 1998  scott snyder  <snyder@d0sgif.fnal.gov>

	* configure.in: Make gthr-default.h a forwarding header instead of
	a symlink.

Sat Jan  3 12:08:06 1998  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* gcov-io.h: Include sys/types.h to ensure we get size_t.

	* pa.h (ASM_OUTPUT_MI_THUNK): Add missing % in fprintf.

Fri Jan  2 23:40:09 1998  Jim Wilson  (wilson@cygnus.com)
			  Jeffrey A Law  (law@cygnus.com)

	* crtstuff.c (__frame_dummy): New function for irix6.
	(__do_global_ctors): Call __frame_dummy for irix6.
	* iris6.h (LINK_SPEC): Hide __frame_dummy too.

Fri Jan  2 04:57:57 1998  Weiwen Liu  <liu@hepmail.physics.yale.edu>

	* alpha.c (vms_valid_decl_attribute_p): Move within #if OPEN_VMS.

Fri Jan  2 04:34:14 1998  Richard Henderson  <rth@cygnus.com>

	* c-decl.c (init_decl_processing): Provide proper fallback symbol
	for __builtin_memset.
	* expr.c (expand_builtin) [MEMSET]: Arg 3 type code is INTEGER_TYPE
	not INTEGER_CST.  Assert arg 3 is a constant.

	* alpha.c (mode_width_operand): Accept 64-bit modes.
	(mode_mask_operand): Likewise.
	(print_operand): Likewise for 'M' and 'U' codes.
	(alpha_expand_unaligned_load): New function.
	(alpha_expand_unaligned_store): Likewise.
	(alpha_expand_unaligned_load_words): Likewise.
	(alpha_expand_unaligned_store_words): Likewise.
	(alpha_expand_block_move): Likewise.
	(alpha_expand_block_clear): Likewise.
	* alpha.h (MOVE_RATIO): New define.
	* alpha.md (extxl, ext*h, ins*l, mskxl): Name them.
	(insql, insxh, mskxh, extv, extzv, insv, movstrqi, clrstrqi): New.

	* alpha.h (ASM_OUTPUT_LOOP_ALIGN, ASM_OUTPUT_ALIGN_CODE): Set to 3.
	(CONSTANT_ALIGNMENT, DATA_ALIGNMENT): Disable.

Thu Jan  1 15:40:15 1998  Richard Henderson  <rth@cygnus.com>

	* configure.in: Put parenthesis around TARGET_CPU_DEFAULT's value.
	* configure: Update.

Thu Jan  1 10:49:12 1998  Jeffrey A Law  (law@cygnus.com)

	* emit-rtl.c (operand_subword): Correctly handle extracting a word
	from a CONST_DOUBLE for 16bit targets with !WORDS_BIG_ENDIAN.

	* mn10200.md (tstxx, cmpxx): Use "nonimmediate_operand" as predicate
	for first argument.


Copyright (C) 1998 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.
