Thu May 10 22:48:31 1990  Richard Kenner  (kenner at vlsi1.ultra.nyu.edu)

	* rtl.def (DEFINE_DELAY): Change description to describe annulling.

	* genattr.c (main): Write out definitions for annulling, if present.

	* genattrab.c (expand_delays): Build internal attributes for
	which insns can be annulled in a delay slot.
	(gen_delay): Validate number of elements in DEFINE_DELAY list.
	(write_eligible_delay): Write out routines for validating annulled
	insns as well as those in normal delay slot.
	(main): Call write_eligible_delays to output annulling information,
	if it exists for this machine.

	* out-m68k.c (not_sp_operand): New function.
	* m68k.md (andsi3): Don't allow sp as ourput to avoid reload
	inefficiency.

	* calls.c (struct arg_data): Delete field STORED; add fields
	PASS_ON_STACK and SAVE_AREA.
	(prepare_call_address): Static chain value can't have QUEUED.
	(expand_call): Rework to support additional calling sequence options.

	Major changes include:
	Call FUNCTION_ARG_PASS_BY_REFERENCE to determine whether an 
	object should be passed by invisible reference.
	Handle arguments passed both on stack and in a register; this can be
	used to allow arguments that are hard to compute directly into
	registers to be passed.
	Support option (ACCUMULATE_OUTGOING_ARGS) where the largest amount
	of stack for outgoing arguments is computer and pushed during the
	function prologue.  Stack space usage is tracked and any location
	that would need to be reused will be saved and restored.
	If preallocating arg block, compute address where each arg will be
	placed and pass it as target to expand_expr.

	Other changes:
	Use virtual regs to see if structure value address isn't stable.
	If inlined, return TARGET if TARGET and TEMP are equivalent.
	UNNAMED_ARGS_IN_REGISTERS is redundant with the NAMED parameter to
	FUNCTION_ARG and has been deleted.
	Use virtual_outgoing_stack_rtx instead of FIRST_PARM_CALLER_OFFSET.
	Use locate_and_pad_parm to compute any needed padding for argument.
	If REG_PARM_STACK_SPACE is defined, allocate backing stack locations
	for args passed in registers; these are not included in the length
	of stack space required unless OUTGOING_REG_PARM_STACK_SPACE is also
	defined.
	When precomputing register parameters, can stop computation when we
	obtain any rtx, not necessarily a register.
	No longer need code to protect data written below bottom of stack;
	this is taken care of by preexpanding calls in argument.
	target_for_arg no longer needed; its function is performed by
	store_one_arg.
	Always copy function return result to our target since they cannot
	possibly be the same.
	(target_for_arg): No longer used.
	(store_one_arg): Save and restore in-use argument list location.
	Support args passed both in register and on stack.
	No need for explicit code for preallocated area; now pass location
	as target to expand_expr; only copy if result in different place.
	Put sequence point after expanding one value.

	* cse.c (struct write_data): Add bit to indicate stack pointer changed.
	(canon_hash): Allow recording of stack pointer.
	(cse_insn): Indicate stack pointer invalidated by subroutine calls.
	Pass stack push and pop operations to note_mem_written.
	Process stack pointer assignment as normal operation.
	Finish change of April 7th that excludes ap and fp from being marked
	as clobbered by calls.  Also exclude sp; if it is clobbered by a
	call, an explicit CLOBBER will be written.
	(note_mem_written): Look for adjustment of stack pointer.
	(invalidate_from_clobbers): Invalidate stack pointer, if required.

	* emit-rtl.c (gen_inline_header_rtx): Add field for outgoing args size.
	(copy_rtx_if_shared): Check for any virtual register instead of frame
	or argument pointer.
	(init_emit): Start normal pseudos after virtual pseudos.
	Copy the unique virtual regs into regno_reg_rtx.
	(init_emit_once): Incoming and outgoing static chain can be the same;
	inlining of nested functions won't need the distinction.
	Create unique copies of virtual registers.

	* explow.c (memory_address): Don't worry about refs to fp or ap;
	force_reg knows how to handle them correctly.
	(fix_lexical_addr): Moved to function.c
	(adjust_stack, anti_adjust_stack): Do nothing for adjustment of zero.
	(allocate_dynamic_stack_space): New function copied from
	expand_builtin.  Handle STACK_POINTER_OFFSET via
	virtual_stack_dynamic_rtx.  When STACK_POINTER_OFFSET is defined,
	perform alignment by always reserving a multiple of STACK_BOUNDARY
	stack bits.  This avoids concern about whether sp itself or the top of
	stack needs to be aligned; if we start with an aligned stack, we keep
	it aligned.
	(round_push): Use ADD and AND rather than DIV and MULT.

	* expr.c (init_expr): Initialize some more vars.
	(push_block): Use virtual_outgoing_args_rtx so don't need
	STACK_POINTER_OFFSET here.
	Merge extra and size more efficiently; no need to call force_operand
	since memory_address is called.
	(emit_push_insn): Pass type for FUNCTION_ARG_PADDING.
	Use REG_PARM_STACK_SPACE instead of FIRST_PARM_CALLER_OFFSET.
	To see if must copy address, check if it is a virtual register that
	will be mapped to sp; only need check if not accumulating space
	space for outgoing parms.
	Ignore EXTRA if argument block has already been allocated.
	(emit_library_call): Major rework to support calling sequences similar
	to expand_call in calls.c, but only support a very small subset of
	the conventions; abort if something outside our subset occurs.
	Abort if incorrect mode is passed; we can't convert here since we don't
	know the signedness.
	(store_field): Check for virtual registers instead of hard registers
	when seeing if stable.
	(safe_from_p): Location in outgoing stack area is known to be safe.
	(expand_builtin, BUILT_IN_ALLOCA): Use allocate_dynamic_stack_space.

	* expr.h: Define current_function_outgoing_args_size and
	locate_and_pad_parm; delete definition of get_structure_value_addr.
	(ARGS_SIZE_RTX): Always return a valid operand.
	(ARGS_SIZE_TREE): New macro.
	(FUNCTION_ARG_PADDING): Accept MODE and TYPE like other
	FUNCTION_ARG_... macros.
	(FUNCTION_ARG_BOUNDARY): Provide default for new macro.
	(MUST_PASS_IN_STACK): New macro.
	(allocate_dynamic_stack_space): New function.
	* tm-3b1.h, tm-3b1g.h, tm-apollo68.h, tm-crds.h, tm-mot3300.h:
	Change definition of FUNCTION_ARG_PADDING to use TYPE instead of SIZE.

	* function.c (current_function_outgoing_args_size): New var.
	(arg_pointer_save_area, virtuals_instantiated): Likewise.
	(invalid_stack_slot): No longer used.
	(push_function_context, pop_function_context): Save and restore
	outgoing args size and arg pointer save area.
	No longer save or restore invalid_stack_slot.
	(pop_function_context): Set up variables whose value is constant
	throughout rtl generation.
	(get_frame_size): No longer adjust by STARTING_FRAME_OFFSET.
	(assign_stack_local): Use virtual_stack_vars_rtx instead of fp
	until virtuals have been instantiated, then use fp.
	Remove reference to obsolete invalid_stack_slot.
	Can no longer be called with size == 0.
	(assign_outer_stack_loc): Use virtual_stack_vars_rtx instead of fp.
	Remove references to obsolete invalid_stack_slot.
	Push to obstack of containing function when allocating rtx.
	(put_var_into_stack): Only switch obstacks around making of
	queue entry.
	Replace call to parm_stack_loc with reference to info in proper
	function.
	(fixup_stack_1): Handle any virtual register instead of handling
	just fp.
	(instantiate_virtual_regs, instantiate_virtual_regs_1): New functions.
	(use_variable, use_variable_after): Check for virtual register
	instead of checking against ap and fp.
	(parm_stack_loc): Function deleted.
	(assign_parms): No longer need internal_arg_pointer.
	Accept SECOND_TIME argument that suppresses rtl generation and
	assignments to DECL_RTL.  Used by integrate.c to recompute vars.
	Don't use FIRST_PARM_OFFSET here; use virtual_incoming_args_rtx.
	Replace test for nonstable incoming arg pointer.
	If structure value address is treated as the first argument, add
	it into the list of arguments; this means we can have a RESULT_DECL
	in with the PARM_DECL's.
	DECL_OFFSET is no longer needed by integrate.c.
	Handle args passed by invisible reference.
	Support new macro, SETUP_INCOMING_VARARGS, to save all registers used
	for args including and beyond those for the current arg.  Used for
	non-ANSI varargs.
	Pass locate_and_pad_parm data it needs to handle reg->stack boundary
	if register parameters have assigned stack space.
	If we received the function's incoming structure pointer as a
	normal argument, update DECL_RTL of DECL_RESULT.
	Round total argument size if required; similarly, always use at
	least REG_PARM_STACK_SPACE bytes if defined.
	(locate_and_pad_parm): Do not need PARM.
	Major rework to do much of the job of aligning and padding stack
	location.  Now a void function wich is passed pointers to struct 
	args_size vars that are set to the argument position, size, and
	initial offset.
	Accept flag denoting if a parm was passed in a register and also
	the current function declaration.
	If register parameters are assigned stack locations and there is a
	minimum required size for the area assigned to register parameters,
	pad the stack position when a parameter not assigned to a register
	is encountered.
	Remove redundant code in MAX_PARM_BOUNDARY case.
	(lookup_static_chain): Use virtual_stack_vars_rtx instead of fp.
	(fix_lexical_addr): Move from explow.c.
	If referencing variable that lives in the incoming argument area
	of its parent and a separate ap is required, allocate a save area in
	the parent for it and use it here.  If no separate ap is require,
	compute offset between ap and fp.
	(trampoline_address): No need to push obstacks here.
	(init_function_start): Initialize new vars; delete obsolete vars.
	(expand_function_start): Don't need to handle case where incoming
	structure return address is passed as hidden parameter here; now done
	completely in assign_parms.
	(expand_function_end): Save ap if a save area was made for it.
	Set REG_FUNCTION_VALUE_P when copying address of returned
	structure.
	Be consistent in use of FUNCTION_... macros vs. hard_function_value.

	* function.h (outgoing_args_size, arg_pointer_save_area): New fields.
	(invalid_stack_slot): Obsolete, deleted.

	* integrate.c: Major rework and simplification.
	Split up vars into two classes.  Those used for expand_inline_function
	and children are now part of struct inline_remap.  Most of the others
	are for save_for_inline and its children.
	(function_cannot_inline_p): The only type of arguments that will
	cause us to reject inlining are variable-sized arguments; also
	reject functions that return variable-sized objects.
	For now, don't inline a nested function.  We'll support this shortly.
	Use current_function_returns_pcc_struct instead of duplicating test.
	(save_for_inline): No need to set TREE_VOLATILE for parms.
	Save outgoing args size in header.
	Use unique copy of virtual reg rtx's.
	Handle any required fixups for INSN_LIST forward-references.
	Don't bother resetting dead static vars when we are done.
	Need not save current_function_pretend_args_size.
	(copy_for_inline): First copy all insns, then all REG_NOTES to avoid
	problems with forward references.
	(struct inline_remap): Move all previously-static vars used by
	expand_inline_function and children into this structure.  This avoids
	potential problems due to recursive calls to expand_inline_function.
	(expand_inline_function and children): Allocate a struct inline_remap
	and pass to all children.
	(expand_inline_function): Rework parameter handling by looking at
	DECL_RTL and using it to determine what types of mappings need to be
	done.  Support objects passed by invisible reference.  Put any
	constant memory addresses into const_equiv_map.  parm_map is no longer
	used.
	Likewise for the return value: consult DECL_RTL (DECL_RESULT)).
	Don't allocate space for called function's frame until referenced.
	No longer need special handling for insn following CALL.
	Ignore USE whose argument has REG_FUNCTION_VALUE_P true.
	Ignore setting function register if we don't have a mapping for it
	(e.g., we are ignoring the result of the call).
	Look at new SET_SRC for constant equivalences.  Some new ones may
	have resulted from constant folding.
	Pass both new and old rtx to try_constants.
	Discard NOTE_INSN_DELETED notes.
	Copy insns first, then REG_NOTES, to avoid problems with forward refs.
	(copy_parm_decls): Compute new address of parameter using the
	constant equivalence map, which will contain the remapping of
	the frame and argument pointer.
	(copy_decl_tree): Likewise.
	(copy_rtx_and_substitute): Handle references to frame and argument
	pointers by allocating a space equal to the size of the frame and
	incoming arguments, respectively, and setting a pseudo to point to
	the start of each area.  Set up an equivalence in CONST_EQUIV_MAP
	between fp or ap and the actual address.  Return the pseudo.
	Don't need to deal with possibility of (SUBREG (CONST_INT)) since
	we are only replacing register with other registers here.
	No longer need to special-case PLUS and MEM;  subst_constants will do
	this work.
	Update detection of sets of ap and fp.
	(try_constants, subst_constants): Accept old and new rtx.  They will
	be isomorphic, with only register numbers changed.  Use old rtx to
	look up register in CONST_EQUIV_MAP and new rtx for substitution.
	Correctly handle SUBREG of CONST_INT and CONST_DOUBLE.
	Fix typos in handling of PLUS.
	(access_parm_map, copy_address): Delete functions.
	(try_fold_cc0): Handle both compare and test.
	(fold_out_cnst_cc0): Rework to simplify and remove dubious cases.
	(output_inline_function): Call assign_parms to perform any needed
	setups.
	Need not restore pretend arg size (will be computed by assign_parms).
	Restore outgoing argument size.

	* output.h (current_function_outgoing_args_size): New var.

	* rtl.h (OUTGOING_ARGS_SIZE): New field in INLINE_HEADER.
	(PRETEND_ARGS_SIZE): No longer needed.
	(virtual_..., VIRTUAL_...): Define virtual register numbers and rtx.

	* rtlanal.c (rtx_equal_p): Update comment on use of
	REG_FUNCTION_VALUE_P.

	* stmt.c (expand_goto): Just restore fp; non-local goto handler
	will restore ap if needed.
	(expand_return): Don't use STARTING_FRAME_OFFSET here.
	(expand_end_bindings): Adjust fp in nonlocal-goto handler.  If needed,
	reload ap from its save area in the frame; allocate save area if none.
	(expand_decl): Use new function allocate_dynamic_stack_space.

	* toplev.c (rest_of_compilation): Instantiate virtual registers.
	Clear rtx_equal_function_value_matters immediately after possibly
	saving current routine for inlining.

	* stupid.c (stupid_life_analysis): Don't try to allocate virtual
	registers (which don't exist any more).

Thu May 10 13:59:11 1990  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* reload1.c (modes_equiv_for_class_p): Don't compare HARD_REGNO_NREGS.

	* combine.c (subst): Simplify
	(sign_extend:M (subreg:N (ashiftrt:M (sign_extend:M (any:N ...))))).

	* fixincludes: Verify that a link leads back to /usr/include
	by checking name of dir it arrives in.  If so, use rest of dirname
	as target for new link.

	* Makefile.in (tmpgnulib): Put dummy entry in loop with LIBFUNCS_EXTRA
	so loop is never null.  Then ignore that entry when it comes up.

	* gcc.c (default_compilers): Add explicit suffix to arg of -dumpbase.

Tue May  8 13:54:37 1990  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* tm-ultrix.h: New file.

Mon May  7 18:47:47 1990  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* i386.md (test... recognizers): Output symbolic constant first.

Sun May  6 22:51:06 1990  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* function.c (fixup_memory_subreg): Make a sequence if -fforce-addr.

	* fixincludes: When going to directory of link name, don't lose  
	if name has no directory.
	Move the code to fix netinet/ip.h; was in the middle of something.

	* Makefile.in (tmpgnulib): Test LIBFUNCS_EXTRA for nonempty.

Sun May  6 08:29:27 1990  Richard Kenner  (kenner at vlsi1.ultra.nyu.edu)

	* Makefile.in (LIBFUNCS): Remove extraneous "\".

	* Makefile.in (stamp-gnulib2): Move "-" to proper line.

	* gnulib2.c (clear_cache): Ignore routine unless INSN_CACHE_SIZE
	is defined (avoids cpp-detected divide-by-zero).

	* expr.c (safe_from_p): Don't blow up when passed a null tree.

	* varasm.c (get_pool_size): New function to return constant pool size.

Fri May  4 16:11:54 1990  Richard Kenner  (kenner at vlsi1.ultra.nyu.edu)

	* expr.c (safe_from_p): If EXP has some rtx, just check it.
	Handle TREE_LIST, RTL_EXPR, and WITH_CLEANUP_EXPR.
	Note that CALL clobbers memory and hard registers.
	Look at enclosed object for SUBREG, but SUBREG of a hard reg is unsafe.

	* expr.c (store_constructor): Now that safe_from_p has been applied
	to the target, need not avoid hard register targets.
	Abort if called with neither ARRAY_TYPE or RECORD_TYPE.

	* reload.c (find_equiv_reg): Handle goal of (plus (sp) (const)).

	* Makefile.in (STAGESTUFF): Include hard-params.

Fri May  4 15:33:22 1990  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* gcc.c (add_prefix): New arg WARN.  Record in prefix_list.
	(main): Calls changed.  Pass nonzero for -B prefixes.
	Later, call unused_prefix_warning.
	(unused_prefix_warning): Warn about prefixes never used.

Thu May  3 16:56:43 1990  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* print-tree.c (print_node): Align the `align' line with the others.

	* expmed.c (store_bit_field): Maximum size for loading mem struct
	into reg comes from the mode of the value to be stored.
	Alignment is no restriction if it matches BIGGEST_ALIGNMENT.
	Always do the real work in SImode if couldn't use MEM.
	(extract_bit_field): Likewise.

	* combine.c (subst): Handle (sign_extend:M (subreg (sign_extract:M)))
	on big-endian machine like corresponding zero_extend case.

	* combine.c (try_combine): Use rtl_equal_p instead of == when
	testing for sources and destinations that match.

	* pyr.md (bitw recognizer): Set CC_NO_OVERFLOW.

Thu May  3 13:03:02 1990  Richard Kenner  (kenner at vlsi1.ultra.nyu.edu)

	* expr.c (expand_expr, case COND_EXPR): Can always use original
	target if specified.
	In "X ? A + B : A" case, use safe_from_p to see if target conflicts
	with B.

	* cse.c (cse_insn): Don't rewrite (set REG0 REG1) if REG1 is a hard
	register even if is REG0 cheaper.

Thu May  3 12:04:19 1990  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* reload1.c (reload): Handle multiple size groups for one class.

	* stdarg.h: Typo in conditional.

Wed May  2 16:34:25 1990  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* tm-sun3.h (CC1_SPEC): Ignore -target.
	(WORD_SWITCH_TAKES_ARG): Define it.
	* tm-sparc.h (CC1_SPEC): Ignore -target and -dalign.
	(WORD_SWITCH_TAKES_ARG): Define it.

Wed May  2 09:38:33 1990  Richard Kenner  (kenner at vlsi1.ultra.nyu.edu)

	* cse.c (cse_insn): Always replace registers with oldest equivalent,
	including the case when the destination is present in the source.

Tue May  1 15:55:52 1990  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* gnulib2.c (__adddi3, __subdi3): New, simpler algorithm.

Tue May  1 14:48:03 1990  Richard Kenner  (kenner at vlsi1.ultra.nyu.edu)

	* Makefile.in: Insert "else true;" in *_ALLOCA macros.

	* stor-layout.c (mode_for_size): No longer static.
	Accept LIMIT parameter to limit mode to MAX_FIXED_MODE_SIZE.
	(layout_decl, layout_type): Pass appropriate limit parameter to
	mode_for_size.

Tue May  1 13:09:43 1990  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* stmt.c (assign_parms): Don't make entry_parm and stack_parm valid.
	Leave them explicit stack slots.
	* explow.c (validize_mem): Copy it, don't alter it.

	* out-m68k.c (standard_68881_constant_p): Handle HOST_WORDS_BIG_ENDIAN.

	* integrate.c (save_for_inline): Copy reg notes after all insns.

	* combine.c (subst): When checking reg_last_set, verify nonzero.

	* gcc.c (default_compilers): Use %b, not %i, after -dumpbase.

	* stor-layout.c (make_unsigned_type): Change like make_signed_type.

Tue May  1 07:36:21 1990  Richard Kenner  (kenner at vlsi1.ultra.nyu.edu)

	* tm-m68k.h (FUNCTION_PROLOGUE, FUNCTION_EPILOGUE): Allocate space
	for local variables even if no frame pointer; adjust size to account
	for place where old frame pointer would have been placed.
	(INITAL_FRAME_POINTER_OFFSET): Add frame size instead of subtracting
	it and perform adjustment described above.

	* expr.c (validate_subtarget): Deleted.
	(expand_expr): Replace calls to validate_subtarget with safe_from_p.

Mon Apr 30 01:39:14 1990  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* Makefile.in (install-headers): Simplify loop by cd'ing to srcdir.

	* stor-layout.c (layout_type): Get alignment of all scalar types
	from the mode.
	(make_signed_type): Get rid of ptr_size_node, function_size_node.
	* tm-*.h (POINTER_BOUNDARY): Deleted.

	* c-typeck.c (build_unary_op): For ADDR_EXPR of COMPONENT_REF,
	mark the PLUS_EXPR constant if appropriate.
	(parser_build_binary_op): Record C_SET_EXP_ORIGINAL_CODE here.
	(build_binary_op): Not here.

	* fold-const.c (size_int): Make arg unsigned.

	* varasm.c (output_addressed_constants): Fixed typo.

	* cccp.c (macarg1): `\' not special outside strings.

	* c-typeck.c (build_unary_op): In increment ops,
	typo checking for ptr to void/function.
	Check original type for this and for amount of increment.

Sat Apr 28 16:43:08 1990  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* c-typeck.c (build_indirect_ref): Error if target is incomplete type.

Fri Apr 27 13:56:22 1990  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* reload1.c (order_regs_for_reload): Count multi-word pseudos right.

Thu Apr 26 17:52:17 1990  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* cccp.c (handle_directive): Don't pass directive through if no_output.

	* c-parse.y (yylex): Large hex constants are signed if -traditional.

Tue Apr 24 13:57:22 1990  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* i860.md, m88k.md: Add missing = in some output constraints.

	* tm-ns32k.h (POINTER_BOUNDARY): Now 32.

	* out-*.c (output_move_double): Use split_double.
	* final.c (split_double): New function, handles byte-order differences.

	* stmt.c (expand_decl): Check size for integer, not "constant".
	* stor-layout.c (layout_decl, layout_type): Likewise.
	* c-decl.c (finish_decl): Likewise.
	* c-typeck.c (digest_init): Likewise.
	* varasm.c (assemble_variable, output_constructor): Likewise.
	(decode_addr_const): Distinguish getting rtl by code alone.
	(output_addressed_constants): No need to abort.
	In ADDR_EXPR case, check TREE_CODE_CLASS.

	* c-tree.h (C_DECLARED_LABEL_FLAG): New flag.
	* c-parse.y (label declarations): Set it.
	* c-decl.c (pop_label_level, lookup_label): Use it.

	* expr.c (string_constant): Accept variable offsets.
	(expand_expr): Check for explicit integers, not constants, in sizes.
	(safe_from_p): No need to check TREE_CONSTANT.

	* Makefile.in (prefix): Now replaces /usr/local instead of adding on.

Mon Apr 23 02:01:11 1990  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* cplus-tree.h (DECL_FRIENDLIST): Use DECL_INITIAL.

	* expr.c (expand_assignment): Use expr_size to compute size.

Sun Apr 22 21:53:55 1990  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* expr.c (expand_assignment, expand_expr): Check for COMPONENT_REF
	before testing DECL_BIT_FIELD.

	* stor-layout.c (convert_units): Deleted.  All calls eliminated.

	* TREE_CONSTANT renamed from TREE_LITERAL.
	* TYPE_READONLY split off from TREE_READONLY.
	* TREE_SIDE_EFFECTS renamed from TREE_VOLATILE.
	* TYPE_VOLATILE split off from TREE_VOLATILE/TREE_THIS_VOLATILE.

Sun Apr 22 15:26:50 1990  Richard Kenner  (kenner at vlsi1.ultra.nyu.edu)

	* loop.c (strength_reduce): Avoid problems in biv elimination by not
	being forced to use giv's that have complex new_reg values while the
	underlying giv is marked maybe_dead; clear maybe_dead in this case.

	* loop.c: Make verification of loops take linear, not quadratic, time.
	(verify_loop, can_jump_in_range_p): Deleted.
	(prescan_loop): New function, contents are from old verify_loop.
	(scan_loop): Call prescan_loop.
	(find_and_verify_loops, mark_loop_jump): New functions.
	(loop_optimize): Allocate new tables and call find_and_verify_loops
	once instead of calling verify_loop for each loop.
	Use data from find_and_verify_loops instead of scanning all insns.

	* expr.c (safe_from_p): New function.
	(validate_subtarget): Use safe_from_p.
	(expand_expr, case CONSTRUCTOR): Likewise.

	* expr.c (store_expr): Handle cases where EXP is a compound
	or conditional expression specially to avoid unnecessary temporaries.

Sun Apr 22 00:15:58 1990  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* tree.h (struct tree_type): Delete size_unit.
	(struct tree_decl): Delete size_unit and voffset_unit.
	Reduce lang_flags to save 1 word.

	* function.c (init_function_start): Don't use DECL_RESULT_TYPE.
	* integrate.c (expand_inline_function): Likewise.
	* c-decl.c (start_function, duplicate_decls): Likewise.
	* tree.h (struct tree_decl): Delete voffset.
	(DECL_RESULT_TYPE): Deleted.

	* objc-actions.c (encode_field_decl, objc_copy_list):
	Switch to DECL_FRAME_SIZE.
	* cplus-class.c (finish_struct): Likewise.
	* cplus-decl2.c (grokbitfield): Switch to DECL_BIT_FIELD.
	* c-parse.y, cplus-parse.y, objc-parse.y: Likewise.

	* tree.h (TYPE_NO_FORCE_BLK): New flag in types.
	* stor-layout.c (layout_type): Use it.
	* tree.h (DECL_TOO_LATE): New flag.
	* stmt.c (expand_end_bindings, expand_goto_internal): Use it.
	* tree.h (TREE_PACKED): Deleted.

	* cplus-typeck.c (unary_complex_lvalue): Confusing use of
	DECL_SIZE_UNIT; not clear what to do.
	* cplus-tree.c (layout_vbasetypes): Likewise.
	* cplus-class.c (modify_vtable_entry): Likewise.

	* cplus-parse.y (YYDEBUG): Force it on.
	(print_parse_statistics, init_parse): No-op if not YYDEBUG.

	* fold-const.c (fold): REAL_INFINITY affects reals, not ints.

	* protoize.c (edit_fn_declaration): Make arg volatile to stop warning.

Sat Apr 21 03:04:32 1990  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* expmed.c (store_bit_fields): Adjust for elimination of BImode.

	* c-parse.y (simple_if, stmt): Store stmt_count in proper place,
	which is slot 1 of the if.
	(simple_if, lineno_stmt, stmt): Output the note at beginning of
	stmt, not in lineno_stmt.  Use emit_line_note.
	(simple_if): Set if_stmt_*, then use lineno_stmt directly.
	(lineno_stmt): Before most uses, call skip_white_space.
	(finput): Move to top of file.

	* cplus-class.c (build_instantiated_decl): Fix typo.

	* cplus-tree.h (C_TYPE_FIELDS_READONLY): Use lang_flag_1.
	(TYPE_HAS_CONSTRUCTOR, TYPE_HAS_DESTRUCTOR, TYPE_NEEDS_CONSTRUCTOR):
	(TYPE_NEEDS_DESTRUCTOR): Advance each to next lang_flag.
	* tree.h (TREE_LANG_FLAG_5, TREE_LANG_FLAG_6): Define them.

	* config.gcc: Delete ./Makefile.in iff not in the source dir.

	* Makefile.in (for-bootstrap): New target.

	* dbxout.c (dbxout_finish_symbol, dbxout_type, dbxout_prepare_symbol):
	Add temporary conditionals on WINNING_GDB.

	* print-tree.c (print_node): Print the TYPE_SYMTAB_ADDRESS.

	* Makefile.in (protoize.o, unprotoize.o, SYSCALLS.c.X):
	Include from or look in dir $(srcdir).

Fri Apr 20 16:30:11 1990  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* varasm.c (output_constructor): Backward test for bit-field.

	* Makefile.in (stamp-*): Delete .c or .h from these names.

Fri Apr 20 15:56:21 1990  Richard Kenner  (kenner at vlsi1.ultra.nyu.edu)

	* cplus-typeck.c (compparms, comp_target_parms,	build_modify_expr_1):
	(build_modify_expr): Clean parens in complicated if.
	* cplus-decl.c (finish_decl, grokdeclarator): Likewise.

Fri Apr 20 14:42:36 1990  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* tm-3b1.h (ASM_SPEC, PRINT_OPERAND_ADDRESS): Support 68020, 68881.
	Useful even though this isn't one.
	(ASM_OUTPUT_OPCODE): Convert fbne to fbneq.  Don't change ftst.
	(REGISTER_NAMES): Define it.  Fpreg names not same as hp.

	* stor-layout.c (mode_for_size): Don't check MAX_FIXED_MODE_SIZE.
	(layout_type): Check it here when appropriate.

	* loop.c (strength_reduce): Clean parens in complicated if.

	* fold-const.c (mul_double, const_binop): Add parens around shifts.

Thu Apr 19 03:03:39 1990  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* machmode.def: Delete unused modes.

	* stor-layout.c (mode_for_size): Accepts mode class as arg.
	Calls changed.
	(layout_type): Can now use mode_for_size for floating types.

	* stor-layout.c (layout_type): Get mode of function type from size.
	* c-decl.c, cplus-decl.c (grokdeclarator): Don't worry about
	mode of a function type.
	* calls.c (prepare_call_address): No values contain static chains.

	* tree.h (struct tree_decl, struct tree_common): Rename the flag bits.
	* cplus-tree.h: References here changed.

	* tree.h (DECL_BIT_FIELD): New macro, with new flag.
	* print-tree.c: Print it.
	* stor-layout.c (layout_decl): Use on input instead of TREE_PACKED.
	Clear it if field happens to be aligned.
	* expr.c, tree.c, varasm.c, symout.c, objc-actions.c, c-typeck.c:
	Use this to distinguish bit-fields.
	* c-decl.c, cplus-class.c (finish_struct): Set this for bit-fields.

	* c-typeck.c (build_binary_op): Make NON_LVALUE_EXPR, not NOP_EXPR.

	* out-sparc.c (find_addr_reg): Avoid using frame pointer. 

	* config.gcc: Delete all formfeeds from Makefile.

	* stor-layout.c (layout_decl): Delete `bitsize'.
	(layout_record): Test size for CONST_INT, not TREE_LITERAL.
	(layout_type): Simplify array case.

	* fold-const.c (size_binop): Division not special case.

Wed Apr 18 16:05:23 1990  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* c-typeck.c (datatype): Function deleted.
	(build_binary_op_nodefault, pointer_int_sum, pointer_diff):
	Don't use it.
	* cplus-typeck.c (build_binary_op_nodefault, pointer_int_sum):
	(pointer_diff): Likewise.
	(convert_for_assignment): Likewise.  Took some work.
	(datatype): Function deleted.

	* c-typeck.c (common_type): Renamed from commontype.
	(function_types_compatible_p): New function.
	(compparms): Deleted.
	(self_promoting_args_p): Renamed from compparms1.
	* cplus-typeck.c (common_type, self_promoting_args_p): Likewise.
	* c-typeck.c (build_function_call): Eliminate local value_type.

	* c-typeck.c (parser_build_binary_op): Detect +/- within boolean.

	* c-typeck.c (convert_arguments): Renamed from actualparameterlist.
	Push results on front, and reverse at end.
	* cplus-typeck.c: Likewise.  All calls changed.

	* tree.h (STMT_BIND_SIZE): Deleted.
	(struct tree_bind_stmt): Deleted that slot.
	* tree.c (build_let_stmt): Don't set it.

	* print-tree.c (print_node): Call print_lang_identifier.
	* c-decl.c, cplus-ptree.c (print_lang_identifier): New function.

	* gnulib2.c (__clear_cache): New function.

Tue Apr 17 16:57:17 1990  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* cplus-tree.c (build_member_type): Use TYPE_HASH, not TREE_UID.
	(TYPE_HASH): Use the address.  Delete the duplicate definition.

	* c-typeck.c (build_unary_op): Bug in pedantic warning about ++.

	* tree.h (TYPE_SEP, TYPE_SEP_UNIT): Deleted.
	* stor-layout.c (layout_type): Don't set them.
	(mode_for_size): New name for agg_mode; code cleaned up.
	* c-tree.h (C_TYPE_FIELDS_READONLY): Use TREE_LANG_FLAG_1.

	* fold-const.c (size_int, size_binop): New names for build_int
	and genop, moved here.  All callers changed.
	(const_binop): New name for combine, and now static.
	* stmt.c (expand_end_case, group_case_nodes, node_has_low_bound):
	(node_has_high_bound): Don't call `combine' directly.

	* tree.h (DECL_VOFFSET, DECL_VOFFSET_UNIT): Deleted.
	* tree.c (staticp): Don't use DECL_VOFFSET.
	* stor-layout.c (layout_*): Don't use it or set it.
	(layout_record): Simplify: Keep all sizes in units of 1.

	* tree.c (debug_tree, print_node, print_node_brief, indent_to):
	New functions to print a tree.
	* c-decl.c (print_lang_decl, print_lang_type): Define as no-op.
	* cplus-ptree.c (print_lang_type): Complete rewrite.
	Most other functions deleted.
	* tree.c (print_node): Call print_lang_* unconditionally.

	* tree.c (TYPE_HASH): Now use the address.

Mon Apr 16 16:27:28 1990  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* final.c: Check LEAF_REGISTERS, not LEAF_REGS.

	* real.h (*_FLOAT_FORMAT): Change enums to macros.
	(REAL_INFINITY): Define it if IEEE format.

	* c-decl.c (c_decode_options): Handle -Wconversion here.
	* toplev.c (main): Not here.

	* tm-*.h (INITIAL_FRAME_POINTER_OFFSET): Count get_frame_size.

Mon Apr 16 15:05:49 1990  Richard Kenner  (kenner at vlsi1.ultra.nyu.edu)

	* loop.c (eliminate_biv): Build COMPARE with VOIDmode, not mode
	of operands.

Mon Apr 16 14:55:58 1990  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* jump.c: Include real.h.

Sun Apr 15 20:30:24 1990  Richard Kenner  (kenner at vlsi1.ultra.nyu.edu)

	* c-typeck.c (pedantic_lvalue_warning): New function.
	(build_component_ref): Handle COMPOUND_VALUE and COND_EXPR by moving
	reference inside it and calling pedantic_lvalue_warning.
	(build_unary_op): Incrementing a cast-expression is warning, not
	error; call new pedantic_lvalue_warning.
	(unary_complex_lvalue): Use of compound or conditional expression as
	lvalue is warning, not error.
	(build_modify_expr): Likewise.
	* cplus-typeck.c: Likewise.

Sun Apr 15 12:27:11 1990  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* cse.c (fold_rtx, fold_cc0): Check TARGET_FLOAT_FORMAT,
	not FLOAT_NOT_IEEE.
	* jump.c (jump_back_p): Likewise.  FLOAT_NOT_IEEE is now gone.

	* cccp.c (collect_expansion): Handle warn_stringify.
	(main): Set it for -Wtraditional.

	* function.c (init_function_start):
	Set current_function_returns_pointer here.
	(expand_function_start): Not here.

	* expr.c (emit_library_call): Precompute reg and partial of all parms,
	to do it in proper order.

	* final.c (final_scan_insn): Typo in deleting obvious no-ops.

	* expr.c (emit_push_insn): Change #if to ordinary if.

Sat Apr 14 13:20:40 1990  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* expr.c (do_jump): In COMPONENT_REF, check TYPE is nonzero.

	* tm-i386.h (ASM_OUTPUT_ADDR_DIFF_ELT): Delete spurious `abort ()'.

	* emit-rtl.c (reverse_comparison): New function.
	(get_last_insn_anywhere): New function.
	* i386.md (ble, blt): New define_expands.

	* Makefile.in (LANGUAGES): New parameter chooses languages to build.
	(native): Use that.
	(c, c++, objc): Targets for use in LANGUAGES.

	* Makefile.in (install): Split up.
	(install-cross, install-headers, install-gnulib, install-proto):
	(install-man, $(libsubdir)): New targets.

	* Makefile.in (native): New target, split from start.encap.
	(tmpgnulib): Split out from gnulib.portable.
	(gnulib.convert): Makes tmpgnulib, then converts.
	(LIBCONVERT): New parameter.
	(GCC_FOR_TARGET): New parameter.
	(hard-params.o, hard-params, stamp-gnulib2): Use that.

	* cse.c (fold_cc0): Compare equivalence classes of non-constants.
	Waiting for papers from Steven McCanne.

Fri Apr 13 14:12:46 1990  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* stor-layout.c (layout_type): If record is BLKmode because not
	aligned, set TREE_PACKED.  Don't force BLKmode due to field
	with TREE_PACKED. 

	* cse.c (fold_rtx): Use dconst1, not atof.
	* varasm.c (output_constant): Likewise.

	* c-parse.y (yylex): Handle SIGFPE in atof.

	* tm-tti68k.h: New file.

	* toplev.c, flags.h (flag_pretend_float): New flag.

	* regclass.c (reg_class_record): Handle `E' constraint, for float
	constants but only if can examine their bits.
	* reload.c (find_reloads): Likewise.
	* recog.c (constrain_operands): Likewise.
	* out-m68k.c (output_move_double): Abort on float constant
	if can't examine the bits.
	(standard_68881_constant_p): Fail if can't examine the bits.
	(standard_sun_fpa_constant_p): Likewise.

	* m68k.md (DFmode move recognizers): Use `E', not `F'.
	* tm-m68k.h (PREFERRED_RELOAD_CLASS): Handle float constants.

	* tm-next.h (ASM_OUTPUT_FLOAT, ASM_OUTPUT_FLOAT_OPERAND):
	(ASM_OUTPUT_DOUBLE, ASM_OUTPUT_DOUBLE_OPERAND): Use REAL_VALUE_ISINF.
	* tm-sun3.h, tm-sparc.h: Likewise.

	* xm-vax.h (HOST_FLOAT_FORMAT): Define it.
	* tm-vax.h (TARGET_FLOAT_FORMAT): Define it.

	* real.h (enum float_format): Define codes for formats.
	(HOST_FLOAT_FORMAT, TARGET_FLOAT_FORMAT): New macros, defaulted here.
	(REAL_IS_NOT_DOUBLE, REAL_VALUE_TYPE): Override if formats differ.
	(REAL_VALUE_ISINF): New macro.
	* xm-vax.h (isinf): Define as macro.

	* Makefile.in (LIBFUNCS_EXTRA): New variable.
	(gnulib.portable): Compile those files.

	* Makefile.in (AUX_OUTPUT2): New variable.
	(OBJS): Use it.
	(aux-output2.o): New target.

	* Makefile.in (RANLIB, RANLIB_TEST): New variables.

	* Makefile.in (AR_FLAGS, OLDAR_FLAGS): New variables.
	(gnulib.portable, stamp-gnulib2): Use them.

	* i386.md: Add patterns for `bt' insns.

Fri Apr 13 12:54:14 1990  Richard Kenner  (kenner at vlsi1.ultra.nyu.edu)

	* c-decl.c (builtin_function): Now returns decl that was made.

	* config.gcc: Support both -host= and +host=.

Thu Apr 12 22:39:10 1990  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* Changes from Data General.

	* syms.h: New file.
	* sdbout.c: Include that if not USG.

	* tree.h (enum built_in_function): Added BUILT_IN_STRCPY and
	BUILT_IN_STRCMP.
	* c-decl.c (init_decl_processing): Create additional pointer and
	function types.  Declare strcpy, strcmp, memcpy, memcmp built-in.
	* expr.c (expand_builtin): Support strcpy, strcmp, memcpy, memcmp.
	If special handler breaks out of switch, do library call.
	By default, print error message and do library call.
	(get_pointer_alignment, string_constant): New functions.

	* dbranch.c: Put entire contents in conditional on HAVE_DELAYED_BRANCH.
	(init_flags, enote): Clear and set memr.
	(enote): Don't move a store across a fetch.
	(insn_eligible_p): Check enote before volatility and dependencies.
	Check for volatility if memw or memr.
	(loads_from_mem_p): New function.

	* Makefile.in (dbranch.o): New target.
	(OBJS): Add dbranch.o.

Thu Apr 12 22:39:10 1990  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* calls.c (expand_call): Count args in order written, with argpos.

Thu Apr 12 22:01:16 1990  Richard Kenner  (kenner at vlsi1.ultra.nyu.edu)

	* expmed.c (synth_mult): Ensure OPS is always valid in returned alg.

	* local-alloc.c (block_alloc): If we have an operand that is an
	address, look inside it for registers to combine with.

	* reload.c (combine_reloads): If the output reload is for an
	earlyclobber operand, can't combine it.
	Try to use a register that dies in an insn for a single output reload
	if the insn has only one output.

Thu Apr 12 21:27:18 1990  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* c-decl.c (duplicate_decls): Preserve DECL_INITIAL from old
	function def to new one.

Thu Apr 12 07:55:14 1990  Richard Kenner  (kenner at vlsi1.ultra.nyu.edu)

	* expr.c (expand_assignment): Order of source and destination to
	bcopy/memcpy was reversed.

Wed Apr 11 17:29:18 1990  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* tm-i386.h (ABC_REGS): New register class.
	(REG_CLASS_CONTENTS, REG_CLASS_NAMES, enum reg_class): Changed.
	* i386.md (divsi3, etc.): Exclude register d from constraints.

	* c-parse.y (save_filename, save_lineno): New nonterminals
	to record text location at start of statement.
	(lineno_stmt): New nonterminal, outputs line note before statement.
	(lineno_decl): Likewise for decl, to avoid conflicts.
	(stmt): Don't emit line notes at start of statement.
	(simple_if): Collect file and line using save_filename, save_lineno.

	* Changes from Data General.

	* cccp.c (main, do_include): Implement -H to print header names.

	* c-parse.y (component_decl_list): Parse even if final `;' missing.

Wed Apr 11 16:49:16 1990  Richard Kenner  (kenner at vlsi1.ultra.nyu.edu)

	* gcc.c: Fix miscellaneous typos.

Wed Apr 11 12:59:57 1990  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* config.gcc: Typos in setting pass1done, testing it,
	and calling sed for usage msg.

	* cccp.c (macroexpand): Count Newline Space as part of whitespace
	sequence when stringifying.

	* expmed.c (expand_mult): Handle synth_mult returning no operations.

Tue Apr 10 21:08:06 1990  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* cccp.c (do_line): No error if string follows number without space.

Tue Apr 10 20:52:02 1990  Richard Kenner  (kenner at vlsi1.ultra.nyu.edu)

	* recog.c (apply_change_group): Return a zero if rejected changes.

	* loop.c (update_giv_derive): If a giv is only set conditionally, it
	may only derive other givs in its own basic block.

Tue Apr 10 13:09:40 1990  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* tm-ctix.h:  New file.  Waiting for papers from Ronald Cole.
	csusac!unify!dbrus.rjc@ucdavis.ucdavis.edu.

	* cse.c (rtx_cost): Use new macro RTX_COSTS.
	(COSTS_N_INSNS): New macro for use in RTX_COSTS.

	* config.gcc: Fix typos in conditionals and case.  Also usage message.
	Missing backslashes in `echo | tee'.
	Unset various vars after pass 1.

	* c-typeck.c (build_c_cast): Complain if function type specified.

	* expmed.c (synth_mult): Accept max_cost as arg and cut off there.
	Pass it along recursively, making it smaller.
	Eliminate quadratic loop, thus postponing powers of 2.
	Costs are now signed.  Initialize best_alg->cost from max_cost
	and change to -1 only before returning.
	(expand_mult): Pass cost of multiply as max cost.
	Use synth_mult only if optimizing.
	In alg_compound case, sign was backward.
	Use TEM as target for force_operand there, to get better output.

Tue Apr 10 07:09:51 1990  Richard Kenner  (kenner at vlsi1.ultra.nyu.edu)

	* expr.c (expand_expr, case COND_EXPR): Add missing argument to
	operand_equal_p.
	Check for (X ? unop A : A) in addition to (X ? A + B : A).

	* Makefile.in (protoize, unprotoize): Compile with GCC, not just link.

	* fold-const.c (fold): Fix typo in converting conditional to COND.

	* expr.c (expand_expr): Treat (A ? 1 : 0) as A when A is a comparison.
	(do_jump): Special-case (A ? 1 : 0) and (A ? 0 : 1).

	* expr.c (store_expr): Fix typo in checking mode of target.

Mon Apr  9 18:33:55 1990  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* integrate.c (expand_inline_function): Clear out parm_copies.

Mon Apr  9 18:00:40 1990  Richard Kenner  (kenner at vlsi1.ultra.nyu.edu)

	* tree.def: SAVE_EXPR now has three operands.
	* tree.h: Add new field SAVE_EXPR_CONTEXT; SAVE_EXPR_RTL remains last.
	* tree.c (save_expr): Set context to current function.
	(decl_function_context): Context is in SAVE_EXPR_CONTEXT if SAVE_EXPR.
	* calls.c (expand_call): Call make_tree to build an RTL_EXPR instead
	of explicitly making SAVE_EXPR.
	* cplus-typeck.c (c_expand_return): Use make_tree instead of SAVE_EXPR.
	* c-parse.y, objc-parse.y: Don't call mark_addressable here.
	* expr.c (expand_expr, ..._DECL cases): If non-local, make addressable.
	(expand_expr, case SAVE_EXPR): If defined in containing function, put
	put into stack.
	* function.c (put_var_into_stack): Use SAVE_EXPR_RTL for SAVE_EXPR.
	* print-tree.c (dump): SAVE_EXPR_RTL is now third operand.
	* stmt.c (expand_asm_operands): Call save_expr instead of making
	tree node directly.

Mon Apr  9 00:08:15 1990  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* Makefile.in (install): Turn off x bit on SYSCALLS.c.X.

	* i860.md (cmpeqsf, etc.): Change opcode name to pfeq.ss, etc.

	* tm-m68k.h (PRINT_OPERAND_PRINT_FLOAT): Delete spurious backslash.

	* c-decl.c (store_parm_decls): Don't do storedecls in prototype case.
	That was discarding the enumerators already pushdecl'd.

	* gcc.c (exec_prefix, startfile_prefix): Record prefix search paths.
	(find_a_file): New function to search a path.
	(find_exec_file): Deleted; find_a_file used instead.
	(find_file): Just call find_a_file.
	(add_prefix): Add name to a prefix path.
	(process_command): Call that.

	* gcc.c (spec_list): Generalize asm_spec, etc., to arbitrary names.
	(set_spec): New function.  Set the old specific vars and spec list.
	(do_spec_1): Handle `%(' and `%[' for general specs.

	* ns32k.md (ashlhi3): Use %0, not %1.

	* cplus-tree.h (TREE_ANON_UNION_ELEM, DECL_ANON_UNION_ELEM):
	regdecl_attr is now in decl, not common.
	(TREE_PARMLIST): Use external_attr.
	(TREE_VIA_PUBLIC): Use static_attr.

Sun Apr  8 23:43:59 1990  Richard Kenner  (kenner at vlsi1.ultra.nyu.edu)

	* fold-const (fold): Two conversions in a row are needed if from a
	pointer type to an integer type of a different precision.

	* flow.c (mark_used_regs): When replacing addition with register
	in auto-increment creation, mark that insn must be re-recognized.

Sun Apr  8 13:56:17 1990  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* tm-m68k.h (ASM_OUTPUT_FLOAT): Defn depends on CROSS_COMPILER.
	(PRINT_OPERAND): Depends on CROSS_COMPILER and HOST_WORDS_BIG_ENDIAN.
	(PRINT_OPERAND_EXTRACT_FLOAT, PRINT_OPERAND_PRINT_FLOAT):
	These new subroutines contain the code that depends.

	* xm-m68k.h, xm-mips.h, xm-pyr.h, xm-tahoe.h (HOST_WORDS_BIG_ENDIAN):
	New macro, defined in these files.

	* config.gcc: Define macro CROSS_COMPILE if making cross-compiler.
	* Makefile.in (INTERNAL_CFLAGS): Include CROSS.

	* config.gcc: Decode -host argument.  Set $host and $target.
	Rename vars for files to link to, to tm_file, xm_file, etc.
	Let $host override xm_file value.
	Mention $host in messages and config.status if diff from $target.
	Check for errors in args at beginning of processing.

	* expmed.c (expand_shift): Make no insns if count is 0.

	* cse.c (rtx_cost): Increase default cost of mult and div.

	* expmed.c (synth_mult): New function.  Finds best way to multiply
	by given constant, and the cost.
	(expand_mult): Use that.
	(init_expmed): Init new vars add_cost, shift_cost, mult_cost,
	and negate_cost.  mult_is_cheap has been deleted.

	* expmed.c (store_bit_field): Don't use insv if unit for copying
	mem to reg won't hold the entire field.

Sun Apr  8 12:54:07 1990  Richard Kenner  (kenner at vlsi1.ultra.nyu.edu)

	* expr.c (expand_expr, case COND_EXPR): Add OK_DEFER_POP to path with
	only OK_DEFER_POP.

Sun Apr  8 12:50:54 1990  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* i386.md (insv): Use SImode for operand 0.

Sat Apr  7 15:24:56 1990  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* emit-rtl.c (gen_lowpart, gen_highpart): When checking mode class,
	check for not MODE_FLOAT.
	* cse.c (fold_rtx): Likewise when avoiding x-x -> 0 for IEEE float.
	* jump.c (jump_back_p): Likewise.
	* optabs.c (emit_cmp_insn): Likewise, comparing result of libcall.
	* expr.c (move_block_to_reg, emit_push_insn): Likewise,
	when putting floats in memory.

	* machmode.def (PSImode, PDImode): Class is now MODE_PARTIAL_INT.
	* expr.c (convert_to_mode): Don't treat them as ints.

	* fixincludes: When making directory links, assume any relative path
	is within /usr/include.

Sat Apr  7 14:56:27 1990  Richard Kenner  (kenner at vlsi1.ultra.nyu.edu)

	* function.c (assign_stack_local, assign_outer_stack_local):
	Don't use division for rounding to avoid problems with negative
	dividends; use logical operations instead.
	No need to ever align stricter than BIGGEST_ALIGNMENT.

Sat Apr  7 14:38:36 1990  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* expr.c (expand_expr, case CONSTRUCTOR:): Finish Jan 12 change
	in store_expr by calling store_constructor if target is a temp.

	* cse.c (cse_insn): For regs invalidated by calls, go back to
	checking for fp and ap explicitly, not fixed_regs.

Sat Apr  7 14:06:43 1990  Richard Kenner  (kenner at vlsi1.ultra.nyu.edu)

	* recog.h: Define num_validated_changes and cancel_changes.
	* recog.c (validate_change, apply_change_group, cancel_changes):
	Support changes both within an insn and within a MEM.

Sat Apr  7 00:45:49 1990  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* sparc.md (addcc and subcc patterns): Set CC_NO_OVERFLOW.

Fri Apr  6 15:20:51 1990  Richard Kenner  (kenner at vlsi1.ultra.nyu.edu)

	* cccp.c (lookup_import): Return -1 for not found to agree with
	the open system call.  Use -2 for duplicate.
	(do_include): -2 now means duplicate; previously, -1 meant not found
	from open and duplicate from lookup_import.

Fri Apr  6 00:06:08 1990  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* c-decl.c (poplevel): Use DECL_INITIAL to detect undef label.

	* sparc.md (peephole for returning sum): Use more restrictive preds.

	* reload1.c (choose_reload_regs): When testing reload reg
	for HARD_REGNO_MODE_OK, use SImode instead of VOIDmode.

Thu Apr  5 14:00:41 1990  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* cccp.c (main, include_defaults): Use STANDARD_INCLUDE_DIR
	instead of /usr/include.
	* Makefile.in (cccp.o): Specify STANDARD_INCLUDE_DIR.

	* varasm.c (assemble_variable): No sdb output for initialized global.
	* toplev.c (compile_file): Output it here, at end of run.

	* stdarg.h (va_start): Round initial pointer value down
	to double boundary.  This is to eliminate big-endian adjustment.

	* fixincludes: Delete netinet/ip.h and sundev/vuid_event.h
	if no changes are needed.

	* c-typeck.c (build_c_cast): Reject array types for result.
	* cplus-typeck.c (build_c_cast): Likewise.

	* tm-*.h (ASM_OUTPUT_SKIP): Print size as unsigned.
	(ASM_OUTPUT_COMMON, ASM_OUTPUT_LOCAL): Likewise.

	* fold-const.c (fold): Simplify double truncation, double extension,
	or extension followed by truncation.

	* fixincludes: Don't ignore errors when making dirs.
	But check whether dir already exists.

	* cse.c (fold_rtx): Don't simplify real*0, because of nans.

	* real.h (dconst0, dconst1, dconstm1): Declare them.
	* tree.c (real_zerop, real_onep): New functions.
	* fold-const.c (fold): Check for trivial +, -, * with reals.
	Also use dconst0 instead of computing with REAL_VALUE_ATOF.

Tue Apr  3 22:52:26 1990  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* m68k.md (32-bit bit fields): Special patterns added.
	(push byte and adjust stack by 2): New peephole.
	These from Bruce Robertson.

	* c-decl.c (grokdeclarator): Complain if fn defn has `typedef' etc.

Tue Apr  3 21:39:54 1990  Richard Kenner  (kenner at vlsi1.ultra.nyu.edu)

	* expr.c (preexpand_calls): Reinsert check to not expand calls
	already preexpanded.

Mon Apr  2 07:05:34 1990  Richard Kenner  (kenner at vlsi1.ultra.nyu.edu)

	* c-typeck.c (digest_init): Don't blow up on null list.

	* Makefile.in (cc1obj): Link OBJC_OBJS instead of C_OBJS.
	* objc-actions.c: Correct compilation errors.
	* objc-parse.y: Likewise.

Mon Apr  2 03:33:14 1990  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* objc-actions.h: Define the objc tree codes.
	Declare doing_objc_thang.

Fri Mar 30 17:28:30 1990  Richard Kenner  (kenner at vlsi1.ultra.nyu.edu)

	* sdbout.c (PUT_SDB_EPILOGUE_END): Write out assembler name for
	function (i.e., usually include leading "_").

	* sdbout.c (PUT_SDB_...): Use new macro SDB_DELIM; it defaults to ";".

Fri Mar 30 15:25:20 1990  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* jump.c (prev_active_insn, next_active_insn): New functions.
	These skip USEs and CLOBBERs.
	(jump_optimize): Use them instead of ..._real_insn
	for the simple optimizations.

	* integrate.c (expand_inline_function): Always index const_equiv_map
	with regno from current function.  And set up the map only after
	creating all the pseudos we will need for the parms.
	This requires intermediate tables parm_equivs and parm_copies.
	Make const_equiv_map big enough to handle all the pseudos we
	expect to make.  Record actual size, and don't look in it
	for regnos too large.
	(subst_constants, const_equiv): Don't access const_equiv_map
	if regno is too large.

	* function.c (trampoline_address): Push and pop obstacks around
	call to assign_outer_stack_local.

	* function.c (push_function_context, pop_function_context):
	Save and restore max_parm_reg and parm_reg_stack_loc.
	* function.h (struct function): Make slots.

	* c-decl.c (c_build_type_variant): New function.
	(grokdeclarator): Call that, for ARRAY_TYPE only, in fields and vars.
	* c-decl.c, c-typeck.c: All calls to build_type_variant use that now.

	* emit-rtl.c (reinstate_emit_status): Unused function deleted.

Thu Mar 29 15:35:47 1990  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* tree.c (rtl_in_current_obstack): New function.
	* toplev.c (rest_of_compilation): Call that.
	This makes it true that rtl is allocated in current_obstack
	during optimization.

	* reload1.c (eliminate_frame_pointer): Scan equivalent addresses
	of pseudo-regs, and eliminate frame-pointer there too.
	(reload): Don't do this here.

	* c-decl.c (build_enumerator): Return pair of decl and value.
	(finish_enum): Go through the list replacing decls with names.

	* function.c (fixup_var_refs): Eliminate all but first arg.
	Use current sequence_stack, insn chain and rtl_expr_chain.
	(put_var_into_stack): Don't pass those args.
	If var is nonlocal, don't do it now; put it on fixup_var_refs_queue.
	(pop_function_context): Do fixup_var_refs on vars queued up.

	* tree.c (function_maybepermanent_obstack): Make a separate
	saveable obstack for each nested function level.
	(init_tree): Init this variable.
	(save_tree_status, restore_tree_status): Save and restore it.
	Create and free a new obstack for the purpose.
	(temporary_allocation, resume_temporary_allocation): Use this var.
	(preserve_data, preserve_initializer): Use this var.
	(make_node): Use this var for PARM_DECL nodes.

	* tree.c (push_obstacks): New name for push_obstack.
	Additional arg specifies saveable_obstack.  All calls changed.
	(pop_obstacks): New name for pop_obstack.  All calls changed.

	* config.gcc: Add `3300'.
	(genix): Fix typo in name of makevar file.
	* tm-mot3300.h, xm-mot3300.h: New files.
	* math-3300.h: New file.

	* output.h: Fix typo in SDB_DEBUGGING_INFO.

	* tm-sun386i.h (LINK_SPEC): Moved here, and -static handled.
	* xm-sun386i.h: Moved from here.
	* tm-alliant.h (LINK_SPEC): Moved here, from xm-alliant.h.

	* tm-convex.h, tm-i860.h, tm-spur.h, tm-vax.h, tm-tahoe.h, tm-pyr.h:
	Delete FIX_FRAME_POINTER_ADDRESS.

	* tm-sparc.h, tm-m88k.h: Turn off FIX_FRAME_POINTER_ADDRESS.
	INITIAL_FRAME_POINTER_OFFSET could be written later.

	* tm-m68k.h, tm-ns32k.h, tm-alliant.h, tm-i386.h, tm-mips.h:
	Define INITIAL_FRAME_POINTER_OFFSET.

	* toplev.c (compile_file): Remove .m and .cc suffixes, like .c.

	* final.c (end_final): For basic block profiling, don't output
	source file name.  Instead, append ".d", and remove ".c".
	* gnulib2.c (__bb_init_func): New name for __bb_init_function.
	Conditionalize on mc68000, not m68k.
	Fix other typos.

Wed Mar 28 16:07:15 1990  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* c-decl.c, cplus-decl.c (duplicate_decls): Preserve DECL_FRAME_SIZE
	from definition past subsequent declarations.

	* c-decl.c (xref_tag): If global_binding_level, make nodes permanent.

	* expmed.c (init_expmed): Set up mult_is_very_cheap.
	(expand_mult): Never use shifts if mult_is_very_cheap.

	* expr.c (store_expr): When copying through new temporary,
	allocate temporary first and use as target.

	* tm-m68k.h (HARD_REGNO_MODE_OK): Abort on VOIDmode.

	* reload1.c (fix_frame_pointer_address): New function.
	(alter_frame_pointer_addresses): New arg INSN.  Calls changed.
	Use that function instead of macro FIX_FRAME_POINTER_ADDRESS
	which is now obsolete.
	(eliminate_frame_pointer): Use macro INITIAL_FRAME_POINTER_OFFSET
	to initialize depth.  Abort if that macro is missing.

	* expmed.c (store_bit_field): If loading MEM into a reg, use the
	mode of the MEM if that is not BLKmode.
	(extract_bit_field): Likewise.

	* tm-mips.h (STRUCTURE_SIZE_BOUNDARY): Changed from 16 to 8.

	* calls.c (expand_call): Handle STACK_BOUNDARY when using push insns.

	* function.c (assign_parms): Note how PUSH_ROUNDING affects stack
	parm size.

Tue Mar 27 19:40:11 1990  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* c-decl.c (poplevel): Output inline nested functions if needed.
	* cplus-decl.c: Likewise.

	* i386.md (insv): New pattern added for the moment.

Tue Mar 27 17:47:35 1990  Richard Kenner  (kenner at vlsi1.ultra.nyu.edu)

	* function.c (lookup_outer_static_chain): Deleted, no longer used.
	(trampoline_address): RTL for trampoline, rather than its address, is
	stored in trampoline list.
	Just add entry to list; don't fill in the trampoline here.
	(expand_function_end): Fill in any required trampolines here.
	(expand_function_start): Move tail recursion entry to after
	creation of display list; size computations come next.

Tue Mar 27 14:09:31 1990  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* m68k.md (movsi, movhi, movstricthi, movqi, movstrictqi):
	Avoid both clr and st on volatile mem, but only on 68000.
	(SImode store 0 recognizer): Likewise.

	* stor-layout.c (agg_mode): Don't consider PSImode, etc.

Mon Mar 26 21:12:16 1990  Richard Kenner  (kenner at vlsi1.ultra.nyu.edu)

	* local-alloc.c (combine_regs): Only set suggested bit for first
	register if multi-word quantity.
	(find_free_reg): Look at suggested regs for first in set, then use
	all available for subsequent regs.

Mon Mar 26 15:01:02 1990  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* c-decl.c (start_enum): Don't lay out the type.
	(finish_enum): Always lay it out, and always set the precision.
	Change the type of the enumerators if int is too narrow.

	* tm-m68k.h (NOTICE_UPDATE_CC): addq and subq do update cc's
	even if destination is an address register.

	* c-parse.y, objc-parse.y (check_newline): Call HANDLE_PRAGMA if def.
	* out-next.c: New file.
	(handle_pragma): New function.
	* tm-next.h (HANDLE_PRAGMA): Define it.

	* Makefile.in (GNULIB2): New variable.
	(gnulib2): Use it.
	(gnulib2.portable): New name for old rule.
	(install-headers): Split out part of install rule.
	(INSTALL_HEADERS): New variable.

	* make-next: New file.

	* function.c (assign_parms): Get type from proper place.
	internal_arg_pointer is now an arg.  Compute arg_pointer_copied
	from that.  Fix typos.
	(expand_function_start): Compute internal_arg_pointer here.
	Fix typos handling incoming struct value address.

	* cccp.c (do_include): Ignore null strings found in stackp.

	* cccp.c (discard_comments): Handle backslash-newline.

Mon Mar 26 07:18:58 1990  Richard Kenner  (kenner at vlsi1.ultra.nyu.edu)

	* function.h (temp_slot, temp_slot_level): Now saved by function.c.
	* function.c (struct temp_slot): Move from stmt.c.
	(push_function_context, pop_function_context): Save/restore temp slots.
	(assign_parms): Pass type to locate_and_pad_parms.
	(locate_and_pad_parms): Accept TYPE.
	Don't need STACK_OFFSET.
	(expand_function_start): Pass type to locate_and_pad_parms.
	(init_function_start): Initialize temp_slot info.
	* stmt.c (temp_slot, init_stmt_for_function, save_stmt_status,
	restore_stmt_status): Delete temp_slot stuff from here.

Sun Mar 25 20:21:58 1990  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* expr.c (emit_move_insn): Turn memory address checking back on,
	but allow push_operand for x.

	* ns32k.md (movstrsi): If UTEK_ASM, output $0 operand in movsd.
	(movsi): Handle UTEK_ASM like GNX_V3.
	* out-ns32k.c (print_operand_address): Add UTEK_ASM conditionals.
	* tm-merlin.h: New file.

	* tm-ns32k.h (FUNCTION_PROLOGUE, FUNCTION_EPILOGUE):
	Use save and restore insns if no frame pointer.

	* cccp.c (handle_directive): Discard backslash-newline within <...>.

Sat Mar 24 13:23:52 1990  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* gcc.c (default_compilers): Add entry for .m files, for Objective C.
	Always pass some -lang... option to cpp.

	* cccp.c (do_include): Support #import as well as #include.
	(lookup_import, add_import, import_hash): New functions.
	(main): Handle options -lang-c++ and -lang-objc and -lang-c.
	Set variables cplusplus and objc.
	(enum node_type, directive_table): Add #import.
	(handle_directive): Treat #import as undefined unless objc is nonzero.
	(initialize_builtins): If objc, define __OBJC__.

	* Makefile.in (lang-objc, cc1obj): New targets.
	(objc-parse.o, objc-parse.c, objc-actions.o): New targets.
	(C_OBJS): Add c-lang.o.

	* objc.gperf: New file.
	* objc-parse.y, objc-actions.c, objc-actions.h: New files.

	* c-lang.c: New file.
	* c-decl.c (c_decode_option): New name for lang_decode_option.
	Used from c-lang.c and objc-actions.c.

	* toplev.c (compile_file): Call lang_init and lang_finish.
	* c-lang.c, objc-actions.c, cplus-decl.c: Define those functions.

	* c-typeck.c (comptypes): Call maybe_objc_comptypes for record types.
	* c-lang.c, objc-actions.c (maybe_objc_comptypes): New functions.

	* c-decl.c (implicitly_declare, finish_decl, finish_struct):
	Call maybe_objc_check_decl before rest_of_decl_compilation.
	* c-lang.c, objc-actions.c (maybe_objc_check_decl): New functions.

	* function.c (assign_stack_local): Align each slot only as needed.
	Normally don't round size up, just align first.
	New argument ALIGN specifies alignment, or 0 for that of MODE.
	All callers changed.
	(assign_outer_stack_local): Likewise.
	* final.c (final_start_function): Round frame size to STACK_BOUNDARY.

	* function.c (assign_stack_temp, preserve_temp_slots):
	(free_temp_slots): Moved from stmt.c.

	* stmt.c (expand_decl): Use convert_units to avoid overflow.

Fri Mar 23 00:52:34 1990  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* c-decl.c (grokdeclarator): Warn if array element is incomplete.

	* varasm.c (assemble_variable): Use convert_units to compute
	size in bytes.
	(output_constructor): Likewise, for non-bit fields.

	* c-typeck.c (check_format, my_strchr): New functions.
	(build_function_call): Call check_format.
	* c-decl.c (lang_decode_options): Handle -Wformat.
	* c-tree.h (warn_format): New flag.

	* xm-hp9k320.h (USE_C_ALLOCA): Define if not compiling with GCC.

Thu Mar 22 23:35:33 1990  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* c-decl.c (get_parm_info): Void parm is special only if no name.

	* loop.c (may_not_optimize): Static var replaces local `may_not_move'.
	(strength_reduce): Don't accept those regs as givs.

Thu Mar 22 06:45:16 1990  Richard Kenner  (kenner at vlsi1.ultra.nyu.edu)

	* integrate.c (expand_inline_function): Compute delta to frame
	from the address at which it was allocated.

Wed Mar 21 17:36:40 1990  Richard Kenner  (kenner at vlsi1.ultra.nyu.edu)

	* recog.c: Increase number of changes saved for validate_change.
	(validate_change): If INSN == 0 and in group, add to group; if not,
	always OK.
	(apply_change_group): If INSN == 0, change is always OK.

	* cse.c (cse_basic_block): If extending block, don't call
 	cse_end_of_basic_block with null insn if we got to end of function.

Wed Mar 21 14:08:35 1990  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* calls.c (expand_call): Don't reuse pending_stack_adjust for argblock
	if inhibit_defer_pop.

	* expr.c (push_block): New argument EXTRA.  All callers changed.
	(emit_push_insn): Use that for the padding when using push_block.

	* tm-sparc.h (FUNCTION_ARG, FUNCTION_INCOMING_ARG):
	Only word-aligned BLKmodes can go in registers.
	(FUNCTION_ARG_PARTIAL_NREGS): Likewise.
	* tm-spur.h (FUNCTION_ARG, FUNCTION_INCOMING_ARG): Likewise.
	* expr.c (expand_call): If encounter a stack parm before offset
	gets up to zero, make it zero.
	* function.c (assign_parms): Likewise.

	* ns32k.md (stack adjust insn): Don't use cmpd or cmpqd on Sequent.
	* tm-sequent.h (SEQUENT_ADJUST_STACK): Define this.

	* make-hp9k320g (AR): Define it.
	* Makefile.in (gnulib): Use OLDAR.
	(OLDAR): New variable.

	* make-iris: New file.

	* xm-iris.h: Undef alloca before defining it.

	* Makefile.in (stage1, ...): Always copy gnulib, never link.

	* cccp.c (main): Use -d...M... as option for macro dump.
	* gcc.c (default_compilers): Pass -d* to cpp.

Tue Mar 20 01:41:49 1990  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* c-parse.y (datadef): Error message fix.
	* cplus-parse.y: Likewise.

Mon Mar 19 15:26:27 1990  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* integrate.c (expand_inline_function): Save static chain value.
	(copy_rtx_and_substitute): Substitute it where called function
	copies its static chain.
	* emit-rtl.c (init_emit_once): Make static_chain_incoming_rtx
	distinct.

	* function.c (current_function_contains_functions): New variable.
	(init_function_start): Initialize it.
	(pop_function_context): Set it to 1.
	* integrate.c (function_cannot_inline_p):
	Don't inline fn with nested fns.

	* integrate.c (copy_rtx_and_substitute): Don't replace fp
	as destination of assignment.

	* assert.h (__assert) [not __GNUC__]: Rename arg to avoid stringify.

	* function.c (expand_function_start): If struct_value_incoming_rtx
	is 0, get the address from first parm reg or first stack slot.
	(assign_parms): In that case, skip the space it occupies.

	* calls.c (expand_call): If STRUCT_VALUE is 0, pass address as parm
	even if that means using a register.

Mon Mar 19 07:43:46 1990  Richard Kenner  (kenner at vlsi1.ultra.nyu.edu)

	* integrate.c (function_cannot_inline_p): Check for non-ANSI varargs
	as well as ANSI varargs.
	Allow inlining of functions with large frames now that we can share
	them between inlined functions.
	(expand_inline_function): Save static vars in case we were called
	recursively.
	Make sure we don't free temporary stack slot used for argument.

	* tree.def: Add new code types '<', '1', and '2' for comparison,
	unary arith, and binary arith, resp.  Change some 'e' types to those.
	* expr.c (init_comparisons): Delete fn.
	(expand_expr): Handle X ? A binop B : A with copy and conditional op.
	In X ? A : B, if A and B both simply, do with only one jump.
	Remove existing test for things like x = y | (a == b).
	(preexpand_calls): Handle new code types for expressions.
	* optabs.c (init_optabs): No longer call init_comparisons.
	* fold-const.c (operand_equal_p): No longer static.
	Ignore NON_LVALUE_EXPR.
	Only require constants if new operand ONLY_CONST is non-zero.
	(fold): Treat tree code types '<', '1', and '2' as 'e'.
	Handle cases where an arithmetic operation is applied to a compound,
	conditional, or comparison operation by distributing the arithmetic
	operation inside the compound, conditional, or comparison operation.
	Update calls to operand_equal_p.
	Convert A ? B : B to (A, B).
	* expmed.c (make_tree): No longer static.
	* tree.h: Define new macro TREE_CODE_CLASS.
	Define extern make_tree.
	* print-tree.c (prtypeinfo): New new macro TREE_CODE_CLASS.
	(dump): Use new macro and treat types '<', '1', and '2' as 'e'.
	* cplus-lex.c (init_lex): Likewise.
	* tree.c (make_node, copy_node): Ditto.

Mon Mar 19 00:05:50 1990  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* gcc.c (main): Trap SIGPIPE.

Sat Mar 17 13:09:46 1990  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* jump.c (jump_optimize): Also delete no-op insns to store bit fields.

	* sparc.md (patterns for addcc, subcc, andcc, andncc, orcc, orncc):
	(and xorcc, xorncc): Use arith32_operand as predicate.

Fri Mar 16 15:19:21 1990  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* tm-vms.h (NO_DOLLAR_IN_LABEL): Define this.

	* function.c (assign_parms): Use INIT_CUMULATIVE_INCOMING_ARGS
	if that is defined.

	* c-decl.c (duplicate_decls): `static' always prevails, for functions.
	* cplus-decl.c (duplicate_decls): Likewise.

	* sparc.md (patterns for andncc, orncc, xorncc):
	Delete `%' from constraint.
	(patterns for addcc, andcc, orcc, xorcc): Use symmetrical predicates.
	(peephole for returning sum): Likewise.

Thu Mar 15 22:02:02 1990  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* expmed.c (expand_mult_add): Handle either x or mult having VOIDmode.
	Always pass both args to type_for_mode.

	* expmed.c (extract_bit_field, store_bit_field):
	When changing mode of a reg to SImode, also do big-endian correction.
	Consistently use BYTES_BIG_ENDIAN to decide how bits are numbered.
	Fix stray ref to CODE_FOR_extzv in case for extv.

	* c-typeck.c (build_unary_op): Allow function type args to `!',
	since they convert to pointers.
	* cplus-typeck.c (build_unary_op): Likewise.

Thu Mar 15 06:30:21 1990  Richard Kenner  (kenner at vlsi1.ultra.nyu.edu)

	* expr.c (convert_to_mode): Don't copy constant to register.
	Use GET_MODE_CLASS instead of integer_mode_p.
	(integer_mode_p): Delete obsolete fn (only use above).

	* loop.c (product_cheap_p): Don't crash if no insns need to multiply;
	that case is cheap.

Thu Mar 15 02:11:34 1990  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* regclass.c (init_reg_sets_1): Set n_non_fixed_regs.
	* loop.c (scan_loop, strength_reduce): Set threshold from num of regs.

Wed Mar 14 19:31:18 1990  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* integrate.c (function_cannot_inline_p): Allow BLKmode parms.
	Allow address of aggregate parm.
	(expand_inline_function): Create and maintain const_equiv_map
	and const_age_map.  Increment const_age at basic blocks.
	Don't substitute constant values for parm regs;
	instead, call try_constants for each insn copied.
	When structure_value_addr in't 0, check aggregate_value_p too.
	Round size of parm_map up.
	Don't init inline_fp_rtx unless it is used.
	Don't use emit_move_insn when copying a SET insn.
	(copy_rtx_and_substitute): Handle inline_target being used when 0.
	Don't build a SUBREG of a CONST_INT.
	For PLUS of constant, do plus_constant whether mem address or not.
	Set up inline_fp_rtx if we need it.
	Clear RTX_UNCHANGING_P in all MEMs.
	(try_constants, subst_constants): New functions.
	(access_parm_map): No big-endian offset for BLKmode parms.
	Do change_address if mode doesn't match.
	(const_equiv): New function.
	(try_fold_cc0): Use that function.
	In "small win" case, extract CODE_LABEL out of LABEL_REF for emit_jump.
	(output_inline_function): Set return_label to 0.

	* recog.c (cancel_changes, num_validated_changes): New functions.

Tue Mar 13 17:30:08 1990  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* recog.c (constrain_operands): Define `V' constraint.

Tue Mar 13 17:10:40 1990  Richard Kenner  (kenner at vlsi1.ultra.nyu.edu)

	* cplus-lex.c (operator_name_string, init_lex): Cast enums to ints
	to avoid errors from some C compilers.

	* cplus-init.c (expand_aggr_vbase_init): Make declarations consistent.

Sun Mar 11 18:37:43 1990  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* ns32k.md (movsi): Flush spurious arg to abort.

	* Makefile.in (gnulib.portable, stamp-gnulib2): Ignore error in ranlib.

Sat Mar 10 19:38:36 1990  Richard Kenner  (kenner at vlsi1.ultra.nyu.edu)

	* function.h: Add new fields temp_slots and temp_slot_level.
	* stmt.c (struct temp_slot): New structure.
	(init_stmt_for_function): Initialize temp slot info.
	(save_stmt_status, restore_stmt_status): Save and restore temp slots.
	(expand_asm_operands): Remove redundant assignment to LAST_EXPR_TYPE.
	Free any temporaries made.
	(assign_stack_temp, preserve_temp_slots, free_temp_slots): New fns.
	(expand_expr_stmt): If last expression had a value (i.e., in ({..})
	grouping), maybe preserve temporaries.
	(expand_return, tail_recursion_args): Free any temporaries allocated.
	(expand_start_bindings): Push temporary stack level.
	(expand_end_bindings): Pop temporary stack level.
	(expand_decl): Use kept temporary slots for automatic variables.
	Free temporary slots after computing size.
	(expand_decl_init, expand_cleanups, expand_end_case): Free any
	allocated temporaries.
	* calls.c (expand_call): Use assign_stack_temp instead of
	get_structure_value_addr.
	Make a new temporary level while expanding a call and free
	temporaries as soon as we know they aren't going to be reused.
	(store_one_arg): Free any temporary slots made for arg being stored.
	* function.c (get_structure_value_addr): Delete fn.
	(init_function_start): No longer initialize structure value addr.
	* integrate.c (expand_inline_function): Use temporary slot for
	inlined function's frame.
	Free temporaries needed while evaluating arguments.
	* expr.c (expand_assignment, do_jumps): Free temps no longer needed.
	(store_expr): Don't check for structure value addr.
	(save_noncopied_parts, expand_expr): Call assign_stack_temp
	instead of assign_stack_local.
	(preexpand_calls): No longer special-case fns returning structures.
	* c-typeck.c (c_expand_asm_operands): Free any temporaries made.
	* cplus-typeck.c (c_expand_asm_operands): Ditto.
	* cplus-decl2.c (finish_file): Ditto.
	* cplus-init.c (expand_aggr_init_1): Ditto.
	* cplus-type2.c (make_merged_ref): Preserve result and free
	other temporaries.
	* cplus-parse.y (stmt): Free any temporaries in EXCEPT clause.

Sat Mar 10 16:07:27 1990  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* loop.c (other_reg_use_p): New name for only_reg_use_p.
	Return 0 if IN == EXPR.
	(check_eliminate_biv): Re-invert the test using other_reg_use_p.

Fri Mar  9 18:34:11 1990  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* optabs.c (init_optabs): Handle PSImode insns.

Fri Mar  9 18:24:11 1990  Richard Kenner  (kenner at vlsi1.ultra.nyu.edu)

	* local-alloc.c (local_alloc): Clear qty_phys_sugg and _has_sugg
	when doing loop, not just when doing bzero.
	Add new vars qty_phys_copy_sugg and _has_copy_sugg.
	(block_alloc): Rework detection of possible tied registers to use
	extracted insn operands rather than trying to parse operands from
	RTL description.
	Don't tie registers if output has earlyclobber.
	For REG_NO_CONFLICT, check commutativity of expression in REG_EQUAL,
	rather than of operation of attached insn.
	If insn is a simple copy, pass that info to combine_regs.
	(combine_regs): For multi-word items, mark all registers actually
	used as preferred.
	If the insn is a simple copy, record hard reg suggestions in
	qty_phys_copy_sugg instead of qty_phys_sugg.
	(find_free_reg): Correctly check for all registers used.
	If qty_phys_has_copy_sugg is non-zero, use that register set.  If
	none of them couldn't be allocated, try the other suggest set if
	it exists.

Thu Mar  8 02:17:50 1990  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* jump.c (jump_optimize): Detect tablejumps that always go to
	the same place, and change to unconditional jumps.

	* fold-const.c (fold): Simplify comparison of integer value with self.

	* rtl.h (FUNCTION_FLAGS...): Additional flag bits for saving
	current_function_returns_pointer, and several others.
	(FUNCTION_PRETEND_ARGS_SIZE): New component in inline header.
	* integrate.c (save_for_inline): Record these flags.
	(output_inline_function): Get them out again.
	Also restore current_function_args_size and ..._pretend_...

	* ns32k.md (movsi, movdi): Handle floating point registers.

	* dbxout.c (dbxout_prepare_symbol): New function, output N_SOL stab.
	(dbxout_symbol, dbxout_parms, dbxout_reg_parms): Call it.
	* final.c (output_source_file): New function.

	* reload.c (find_reloads_toplev): Do BYTES_BIG_ENDIAN offset
	only within a word.

	* stdarg.h: Use _VA_LIST_ as macro to indicate already loaded.

	* fixincludes: Supply missing semicolon in netinet/ip.h.

	* tm-alliant.h (FUNCTION_PROLOGUE): Use `linkl' on 68020.

	* regclass.c (init_reg_sets): For subunion, keep largest candidate.

Wed Mar  7 00:37:22 1990  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* emit-rtl.c (in_sequence_p): New function.

	* expr.c (expand_builtin): For BUILT_IN_SAVEREGS, insert after
	the initial NOTE insn.

	* dbxout.c (dbxout_finish_symbol): New argument is a decl or 0.
	Output line number in desc field.
	All callers changed to pass the argument.

	* tree.h (TREE_PUBLIC): Move back to tree_common.

	* dbxout.c (dbxout_init): Output working dir in a N_SO symbol.

	* expr.c (emit_library_call): Handle PUSH_ROUNDING.

	* explow.c (break_out_memory_refs): Use same mode as the MEM has.

	* out-mips.c (output_load_immediate): Let the assembler do the work.

Tue Mar  6 22:20:49 1990  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* cccp.c (macroexpand): Fix bug in scanning strings for stringify.

	* stmt.c (expand_goto_internal): Adjust stack after cleanups.
	(expand_end_bindings, fixup_cleanups): Likewise.

	* tm-alliant.h (STATIC_CHAIN_REGNUM): Use 10.

Tue Mar  6 15:23:11 1990  Jim Kingdon  (kingdon at pogo.ai.mit.edu)

	* config.gcc: Accept srcdir & vint with either '-' or '+'.

	* c-parse.y (hash, is_reserved_word): Use __inline so it can
	be compiled with `gcc -traditional'.

Tue Mar  6 14:52:12 1990  Richard Kenner  (kenner at vlsi1.ultra.nyu.edu)

	* c-parse.y (compstmt): Don't return null tree for empty group.  This
	will cause the compiler to dump core on a ({}) construct.
	* cplus-parse.y (compstmt): Ditto.

Tue Mar  6 14:33:42 1990  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* tree.h (TREE_STATIC): Move back to common.

Tue Mar  6 06:04:30 1990  Richard Kenner  (kenner at vlsi1.ultra.nyu.edu)

	* function.h (expr_stmts_for_value): New field.
	* stmt.c (init_stmt_for_function): Initialize vars for expression
	statements.
	(save_stmt_status, restore_stmt_status): Save and restore value of
	expr_stmts_for_value.

	* cse.c (record_jump_equiv): Ensure previous insn is an INSN before
	testing it (it might be a NOTE).

Tue Mar  6 00:26:20 1990  Richard Stallman  (rms at geech)

	* tm-ns32k.h (NOTICE_UPDATE_CC): Use abort in case
	that shouldn't happen.

Mon Mar  5 23:11:57 1990  Richard Stallman  (rms at geech)

	* Makefile.in (cplus-tab.h): Say expect 12 reduce/reduce conflicts.

	* genoutput.c (output_prologue): Include insn-attr.h.

	* pyr.md (addsi3, mulsi3, umulsi3, andsi3, iorsi3, xorsi3):
	Make input arg predicates symmetrical.
	(adddi3, anddi3, iordi3, xordi3): Likewise.
	(addsi3): Use immediate subtract if suitable.

Sat Mar  3 21:08:25 1990  Richard Kenner  (kenner at vlsi1.ultra.nyu.edu)

	* expr.c (move_block_to_reg, emit_push_insn): Don't treat double 0.0
	as two words of zero.
	Handle DImode constants as two integers.
	Support CONST_INT (currently only called with const0_rtx).

	* expr.c (convert_move): Can only use slt if STORE_FLAG_VALUE == -1.

Sat Mar  3 15:03:00 1990  Richard Stallman  (rms at geech)

	* function.c (setjmp_protect_args, setjmp_args_warning): New functions.
	* toplev.c (rest_of_compilation): Call setjmp_args_warning.
	* c-decl.c (finish_function): Call setjmp_protect_args.

	* flow.c (regno_clobbered_at_setjmp): Argument registers
	are in effect set at start of function.

	* tm-sparc.h (ASM_OUTPUT_DOUBLE): Replace missing line.

	* print-tree.c (prtypeinfo): Don't check DECL-only
	flags for other nodes.

	* toplev.c: Eliminate `#ifdef 0'.

	* dbxout.c (print_int_cst_octal): New function.
	(dbxout_type): Use that for long long types.

	* Makefile.in (start.encap, rest.encap): Split all.internal.

	* tahoe.md: Adjust formatting.

	* tahoe.md (ashlsi3, lshlsi3): Don't clobber a const_int.
	Instead, use %s to convert shift count to multiplier.
	* tm-tahoe.h (PRINT_OPERAND): Handle %s.

	* tm-tahoe.h (CONST_COSTS): Specify cost of MULT.

Fri Mar  2 01:00:11 1990  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* cse.c (rtx_cost): By default, multiply and divide are expensive.

	* expmed.c (expand_mult_add): Use type_for_mode.
	Allow ADD to have a different mode.
	* c-typeck.c (type_for_mode): New function.
	(get_floating_type): Function deleted.
	* cplus-typeck.c: Likewise.

	* jump.c (jump_optimize): Simplify `if (x) goto foo; else goto foo;'.

Thu Mar  1 17:41:22 1990  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* out-mips.c (tree_code_name): Declaration deleted.

	* stmt.c (expand_expr_stmt): No "no side effects" warning for (void)0.

	* assert.h (__assert): Don't call abort; use 0 as value.
	* gnulib2.c (__eprintf): Call abort here.

	* c-decl.c (pushdecl): Don't warn if shadowing error_mark_node.

	* optabs.c: Use GET_MODE_WIDER_MODE instead of INC_MODE.

	* machmode.def: Set up next-wider-mode for floating modes.

Wed Feb 28 18:58:22 1990  Richard Kenner  (kenner at vlsi1.ultra.nyu.edu)

	* stmt.c (expand_goto_internal): Add missing stack adjust.
	(expand_fixup): Don't do stack adjust if fixup isn't for current pos.

	* stmt.c (expand_start_stmt_expr, expand_end_stmt_expr): No need to
	save result from start_sequence in RTL_EXPR.

	* stmt.c (expand_end_loop): Correctly see if NOTE_INSN_LOOP_CONT
	was written.

	* stmt.c (expand_decl): Omit move to OLDADDR if it would be noop.

	* expr.c (expand_expr): Don't use variable TYPE in subblocks that
	hides TYPE at function level.

	* expr.c (force_operand): Always generate PLUS for constant.
	Use negate_rtx to negate constant.

	* expr.c (expand_expr): Ensure that type is not wider than
	HOST_BITS_PER_INT when assuming that constant is entirely in
	TREE_INT_CST_LOW.
	Simplify EXPAND_SUM code for PLUS_EXPR and MINUS_EXPR.
	Call preexpand_calls at binop instead of all places that branch to it.

	* expmed.c (expand_shift): Skip widening try for rotates; avoid
	passing UNSIGNEDP == -1 to expand_binop.

	* expr.c (expand_builtin): Use a sequence instead of reorder_insns.

	* tree.c (save_expr): Ignore NON_LVALUE_EXPRs.
	Mark as TREE_VOLATILE so won't be inadvertently deleted.
	(build): Special-case LENGTH == 1 also.

Wed Feb 28 12:57:16 1990  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* expr.c (convert_move): Handle conversions to and from PSImode.

	* stor-layout.c (layout_type): For integer types, don't consider
	PSImode, etc.

	* expmed.c (init_expmed): Typo: test was backwards.

	* Makefile (install): When installing $${eachfile}, use basename.

Tue Feb 27 14:48:46 1990  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* tree.h (struct tree_common): Delete certain attributes.
	external, public, static, nonlocal, regdecl, inline.
	(struct tree_decl): Insert them here.

	* combine.c (try_combine): Avoid generating nested SUBREGs for
	operands when handling case where I2 or I1 is a SUBREG assignment.
	Never combine with an insn that sets a register to itself if it has
	a REG_EQUAL note.
	(subst): Correct errors in changing (minus (x) (c)) to (plus (x) (-c)).
	Recompute CODE before second switch.
	Case NOT: in second switch failed to set undobuf.storage.
	(gen_lowpart_for_combine): Don't allow multi-word modes; do allow
	null conversions.

Tue Feb 27 07:13:17 1990  Richard Kenner  (kenner at vlsi1.ultra.nyu.edu)

	* combine.c (try_combine): Don't combine when doing so would
	replace destination that is being modified, as opposed to replaced.

	* function.c (fixup_var_refs_1): Rework to correctly support
	bit-field insns that don't allow memory operands.
	Correctly detect insns that simply copy a variable to or from a
	register.
	(optimize_bit_field): Use a sequence rather than reorder_insns.
	* Makefile.in (function.o): Update dependancies.

	* recog.h: Delete obsolete insn_machine_info.

	* function.c (assign_parms): Use move_block_from_regs to place
	first part of parameter partially in registers into memory.

Mon Feb 26 19:02:56 1990  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* fixincludes: Find only .h files when looking for headers.

	* function.c (expand_function_start): Save arg ptr reg
	if there are nonlocally-referenced parms.

Fri Feb 23 13:21:27 1990  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* c-parse.y (readescape): For x, avoid overflow when shifting in if.

Thu Feb 22 19:14:17 1990  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* fixincludes: Delete directories before creating them.
	When making internal symbolic directory links, chase
	chain of existing links to the end.

	* dbxout.c (dbxout_type): Always use main variant (until
	there is code to report the distinctions usefully).

Wed Feb 21 13:20:33 1990  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* math-68881.h (hypot): New function.

	* optabs.c (expand_binop): Swap operands if that makes modes match.

	* expr.c (expand_expr): For ARRAY_EXPR, when converting to
	multiplication and addition, use type of index for product.

	* gcc.c (LIB_SPEC): Link with -lg if -g specified.
	* tm-isi68.h, tm-next.h, tm-sparc.h, tm-sun3.h, tm-sun386i.h: Likewise.
	* tm-mips.h (LIB_SPEC): Override to avoid using -lg.

	* toplev.c (main): Warn for -g if not supported.

	* c-decl.c (grokdeclarator): Do pedantic checks for const functions
	where function decls and variant function types are made.

Mon Feb 19 20:06:48 1990  Richard Kenner  (kenner at vlsi1.ultra.nyu.edu)

	* optabs.c: Restore Feb 13 change.

	* varasm.c (readonly_data_section): New fn.
	(assemble_variable, get_or_assign_label, output_constant_pool):
	Use new fn instead of text_section.
	* final.c (end_final): Write profiling table to read-only section.
	(get_attr_length, shorten_branches): Address vectores take no space
	if not in text section.
	Vectors are in operand 0 for ADDR_VEC but 1 for ADDR_DIFF_VEC.
	(final_scan_insn): Merge cases for ADDR_VEC and ADDR_DIFF_VEC.
	Put vector tables in read-only section.

Sun Feb 18 13:58:04 1990  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* gnulib2.c (__shtab): New vector.
	* Makefile.in (LIB2FUNCS): Add that member.

	* *tahoe*: New versions of these files.

	* optabs.c: File was deleted.  Copied last backup.
	Feb 13 change lost.

	* tm-sparc.h (ASM_OUTPUT_DOUBLE, ASM_OUTPUT_FLOAT): Handle nans.
	Don't output more digits than the numbers have.
	* tm-sun3.h (ASM_OUTPUT_DOUBLE, ASM_OUTPUT_FLOAT): Likewise.
	(ASM_OUTPUT_DOUBLE_OPERAND): Don't output excess digits.

	* m68k.md (movqi): Don't use clrb or st if dest is volatile.

	* expmed.c (expand_mult): Don't use sum of shifts if mult is cheaper.
	(init_expmed): Set mult_is_cheap based on rtx_cost.
	* toplev.c (compile_file): Call init_expmed.
	* cse.c (rtx_cost): Not static.

	* tm-mips.h (ASM_GENERATE_INTERNAL_LABEL, ASM_OUTPUT_INTERNAL_LABEL):
	Start name with $.

	* tm-alliant.h, tm-convex.h, tm-hp9k3bsd.h, tm-news.h, tm-seq386.h:
	* tm-sequent.h, tm-spur.h, tm-sun2.h, tm-tahoe.h, tm-vax.h:
	(LIB_SPEC): Put in -lc with appropriate alternatives.

	* toplev.c (rest_of_compilation):
	Clear rtx_equal_function_value_matters just before final.

	* cccp.c (rescan): If don't find paren after macro, back up over space.

Sat Feb 17 20:58:21 1990  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* tm-hp9k320.h (CPP_SPEC): Remove _INCLUDE__STDC__.

Wed Feb 14 09:06:26 1990  Richard Kenner  (kenner at vlsi1.ultra.nyu.edu)

	* loop.c (struct movable): Add SET_DEST and SET_EQUAL fields.
	(single_set): New fn.
	(scan_loop, force_movables, move_movables, consec_set_invariant_p):
	Use new fn to look for insns that contain a single set.
	Use new fields in struct movable.
	(scan_loop, strength_reduce): Pass number of registers to
	strength_reduce.
	(libcall_benefit): New fn.
	(scan_loop, strength_reduce, consec_sets_giv): Use it.
	(skip_consec_insns): Correctly count insns to be skipped when
	NOTEs are present.
	(combine_movables): In some cases, combine regs that load CONST_INTs
	even if the modes of the destination differ.  This requires starting
	the inner loop from the start of the movable list.
	Use find_reg_note to search for notes.
	Don't choose a use of an equivalence instead of the insn that sets
	the register directly (hence setting up the equivalence).
	Set DONE for the matched movable to ensure it isn't duplicated.
	(replace_call_address): No longer used.
	(move_movables): When moving a LIBCALL block where the address of
	the fn is in a register, emit an insn to move the actual address
	in case the original move was CSE'ed out of the block.
	Emit AND insn via expand_binop instead of explicit RTL.
	Search for matching from start of list, not from movable being matched.
	If mode of combined movables differ, use SUBREG to replace narrower.
	(replace_regs): Don't replace register if it is the destination.
	(count_nonfixed_reads): Mem ref is fixed if addres is loop invariant.
	(can_jump_into_range_p): Speed up common cases.
	(count_loop_regs_set): Do same thing for parts of PARALLEL as when
	they occur standalone.
	(struct induction): Delete fields forces, forces2, and consec.
	Store dest and src reg rtx instead of register number.
	Add new fields always, cant_derive, combined_with, maybe_dead, and
	derive_adjustment.
	(struct iv_class): Add new fields initial_test, init_set, incremented.
	(all strength reduction routines): Use single_set and use new 
	struct induction fields; forces is no longer used.
	(record_biv): New fn.
	(strength_reduce): Use it.
	(record_initial, valid_initial_value_p): New fns.
	(strength_reduce): Scan for bivs in loop order.
	Refine handling of maybe_never.
	A reg isn't a biv if it is never incremented.
	Use note_stores and record_initial to correctly note all changes
	to a biv's register prior to the start of the loop.
	We may know biv's initial value if it was tested NE before the loop.
	Use new valid_initial_value_p.
	Ensure giv's insn is the last in a LIBCALL block or if consec.
	Don't set maybe_never on jump back to top of loop.
	Don't delete any insns setting givs; flow will eliminate them as
	dead.  Ditto for biv updates when biv can be eliminated.
	If giv's last use is in a computation of another giv, mark that it
	might be dead.
	Make two passes over givs.  In first pass, handle non-matched
	givs.  In second pass, handle the matched givs.
	(only_reg_use_p): Now static.
	(delete_insn_forces): Fn deleted; no longer used.
	(update_giv_derive): New fn.
	(strength_reduce): Call it for every insn and label.
	(record_giv): If giv never used, ignore it.
	(basic_induction_var): Always set *MULT_VAL to something.
	A set of a biv from an invariant MEM is allowed.
	(simplify_giv_expr, expr_cost): New fns.
	(general_induction_var): Rewrite to use them.  More types of
	expressions are now recognized as givs.
	Use results produced by update_giv_derive to ensure that giv derivation
	works correctly when spanning biv update.
	(consec_sets_giv): Can allocate temporary induction struct on stack.
	Skip insns that set irrelevant items between two updates to giv.
	(gen_iv_mult, emit_iv_init_code): Replace with emit_iv_add_mult.
	(update_reg_last_use): New fn.
	(emit_iv_add_mult): Call it for all operands.
	(express_from, combine_givs_p, combine_givs): New fns.
	(strength_reduce): Call them to combine givs.
	(product_cheap_p): Rewrite to handle more cases.
	Free any memory allocated.
	(get_condition): New fn.
	(strength_reduce, check_dbra_loop): Use it.
	(check_dbra_loop): Use emit_move_insn instead of writing explicit SET.
	Use emit_cmp_insn/emit_jump_insn to write out replacement test.
	(check_eliminate_biv): Use single_set.
	Refine test for insns that use biv only to calculate giv.
	Return non-zero if can eliminate biv; don't set eliminable.
	(can_eliminate_biv_p): Remove some duplicate code and allow
	all constants in some cases where only CONST_INT was allowed.
	Don't replace biv with giv that might be dead.
	(eliminate_biv): Compute whether to put an invariant before insn
	in which the biv is being eliminated or at the start of loop.
	Allow more types of constants.
	Don't replace biv with giv that might be dead.
	Use validate_change when substituting into insn.
	(strength_reduce): Change calls to check_eliminate_biv and
	eliminate_biv.  Call the former again after maybe_dead has possibly
	been set on some givs.

Tue Feb 13 19:58:46 1990  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* tree.c (function_obstack): New variable.
	(init_allocation): Init it to temporary_obstack. 
	(save_tree_status): Save it, make new obstack for it.
	(restore_tree_status): Free new obstack, restore old.
	(temporary_allocation, resume_temporary_allocation): Use that one.
	* function.h (struct function): Slot for saved function_obstack.
	* tree.c (push_obstack, pop_obstack): New functions.
	These implement a stack for obstack selection.
	* function.c (put_var_into_stack): If var is nonlocal,
	switch to obstacks of the function it is in.

Tue Feb 13 17:52:15 1990  Richard Kenner  (kenner at vlsi1.ultra.nyu.edu)

	* optabs.c (emit_no_conflict_block): During reload, don't do
	any encapsulation or add notes.
	Allow single insn or no insns in sequence.

Tue Feb 13 12:51:45 1990  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* stor-layout.c (build_int): Increase limits of cache size.

	* sdbout.c (sdbout_symbol): Force output of symbol's type.

Tue Feb 13 08:28:37 1990  Richard Kenner  (kenner at vlsi1.ultra.nyu.edu)

	* toplev.c (rest_of_compilation): Don't skip compilation of function
	if TREE_INLINE but no saved insns (e.g., if not -O).

	* rtlanal.c (replace_rtx): New function.
	* rtl.h: Define it.

Tue Feb 13 00:02:17 1990  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* c-decl.c (finish_struct): Lay out any existing array types
	of newly completed struct.
	(layout_array_type): New subroutine.

Mon Feb 12 11:33:31 1990  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* function.c (assign_parms): If not -O, keep all parms in memory.

	* expr.c (clear_pending_stack_adjust): Ignore TREE_INLINE if not -O.

	* out-i386.c (output_fix_trunc): New function.
	(fp_pop_int): Re-enabled.  Handle more modes, individually.
	(print_operand): Handle %D.
	* i386.md (fix_truncdfdi2, fixuns_truncdfdi2): New patterns.
	These changes from James Van Artsdalen.

	* gnulib2.c (__builtin_vec_delete): Use __builtin_delete, not free.

	* sdbout.c (sdbout_field_types): Do look through pointer types.

Sat Feb 10 19:31:16 1990  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* sdbout.c (plain_type_1): Don't output tag until known.
	(sdbout_one_type): Don't record tag in KNOWN_TYPE_TAG until end.
	Reenable output of member types before original structure.

	* expr.c (expand_expr): Convert post-inc to pre-inc if result ignored.

Sat Feb 10 14:35:03 1990  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* ns32k.md (movsf): Convert double constant to float.

Fri Feb  9 00:02:43 1990  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* c-decl.c (duplicate_decls): Don't lose alignment of OLDDECL.

	* cccp.c (handle_directive): Keep comments by copying them explicitly.

	* cccp.c (rescan): When scanning for open-paren after macro name,
	discard comments if appropriate.

Fri Feb  9 18:26:34 1990  Richard Kenner  (kenner at vlsi1.ultra.nyu.edu)

	* cse.c (cse_insn): Suppress infinite loop when associating
	operations in cases where a reg, R, is equal to "R OP const1" and
	we are looking at "R OP const2" for some associative operator OP.

Thu Feb  8 14:19:41 1990  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* c-decl.c (build_enumerator): Pedantic warning if value not an int.
	Access default value after checking for constant specified,
	as it should no longer be possible to have NON_LVALUE_EXPR
	in the default.

	* c-typeck.c (default_conversion): Don't truncate wide enums.

	* tm-hp9k320.h (CPP_SPEC): Define _INCLUDE__STDC__ if not traditional.
	* tm-hp9k310.h (CPP_SPEC): Likewise.

Wed Feb  7 12:59:07 1990  Richard Kenner  (kenner at vlsi1.ultra.nyu.edu)

	* emit-rtl.c (emit_insns_before): New fn.
	(init_emit_once): Add uses of new macros to support static chain
	passed in memory.
	* calls.c (prepare_call_address): Rework to set static chain for
	languages that have EPmode function addresses and for nested
	functions in C.
	Emit USE insn for static_chain_rtx into list of USE insns to be
	placed later.
	(emit_call_1): USE_INSNS is now a list of insns, not a SEQUENCE.
	(expand_call): Remove gratuitous forcing of FUNEXP to Pmode (it
	might have been EPmode).
	Make USE_INSNS a list, rather than a SEQUENCE.
	Use prepare_call_address to emit load into static chain.
	* expr.c (emit_library_call): Update call to prepare_call_address.
	* function.c (expand_function_start): Use incoming static chain rtx
	instead of outgoing form (was correct in one place, wrong in one).
	* stmt.c (expand_goto): Set static_chain rtx after stack pointer
	in case it uses the stack pointer.
	Only write one USE for stack_pointer_rtx.

Tue Feb  6 17:26:14 1990  Richard Kenner  (kenner at vlsi1.ultra.nyu.edu)

	* jump.c (jump_optimize): Suppress optimization of `if (...) x = 1;
	else {...}  if (x) ...', when a label is present between the
	assignment to X and the unconditional jump.

Mon Feb  5 23:22:30 1990  Richard Kenner  (kenner at vlsi1.ultra.nyu.edu)

	* combine.c (try_combine): If I2 or I1 is a PARALLEL, ignore only
	CLOBBER parts when combining.  Previously used to ignore USE parts
	also but the latter can indicate that the insn needs some setup that
	isn't shown in its rtl.

Mon Feb  5 13:32:32 1990  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* vax.md (addhi3, addqi3): Fix typo checking for dec insn.

	* cccp.c (struct file_buf): New field `nominal_fname' is name spec'd
	in #line command; `fname' is name of actual input file.
	Many functions now use or set this field as well or instead.

	* c-decl.c (grokdeclarator): Fix missing paren.

Sun Feb  4 12:37:00 1990  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* tm-3b1g.h: New file.
	* config.gcc (3b1g, 3b1-gas): New alternative.

	* loop.c (move_movables): Skip USE insns when checking for
	the insn that loads the address of a library function.

	* combine.c (combine_instructions): Compute total_distrib_*.

	* final.c (final): Do basic block profiling at end of function.
	(final, final_scan_insn): Run CC_STATUS_INIT after block profiling.
	(final_scan_insn): Detect cond jumps that use PARALLEL.

Sun Feb  4 00:04:22 1990  Richard Kenner  (rms at sugar-bombs.ai.mit.edu)

	* function.c (assign_stack_local): Use plus_constant to avoid
	PLUS when offset is zero.
	(assign_outer_stack_local): Ditto.

Sun Feb  4 00:04:22 1990  Ron Guilmette  (rms at sugar-bombs.ai.mit.edu)

	* explow.c (fix_lexical_addr): Fix typo.

	* tree.c (build_type_variant): Special handling for protoize.

	* protoize.c: New file.

	* toplev.c (flag_gen_aux_info): Define it.
	(f_options): Recognize the flag.
	(compile_file): Open and close the aux_info file.

	* flags.h (flag_gen_aux_info): Declare it.

	* c-typeck.c (comptypes): Handle equivalent variant types for protoize.

	* c-decl.c (implicitly_declare): Call gen_aux_info_record.
	(start_decl, store_parm_decls): Likewise.
	(pushdecl): For protoize, distinguish different names for same type.
	(grokdeclarator): For protoize, don't always get main variant.
	(finish_function): Take the main variant here.

	* c-aux-info.c, SYSCALLS.c: New files.

	* Makefile.in (proto, protoize, unprotoize): New targets.
	(protoize.o, unprotoize.o, SYSCALLS.c.X, test-protoize): More new.
	(c-aux-info.o): Also new.
	(STAGESTUFF): Add protoize, unprotoize.
	(install): Install protoize, unprotoize and SYSCALLS.c.X.

Sat Feb  3 17:09:58 1990  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* c-typeck.c (digest_init): Allow conversion of array exp to pointer.
	Constructors with types are simply expressions, so don't treat as
	initializers.		    

	* Makefile.in (uninstall): New target.

	* Makefile.in (include/README): Target deleted.
	(include): Deleted.
	(INSTALL): Create include dir here.

	* Makefile.in (all.internal): Enable compiling cc1plus.
	(lang-cplus): New target.
	(*.o): Add some missing dependencies.
	(STAGESTUFF): Add cc1plus.

Fri Feb  2 18:21:22 1990  Richard Kenner  (kenner at vlsi1.ultra.nyu.edu)

	* tree.c (decl_function_context): Don't abort when passed ERROR_MARK.

Fri Feb  2 17:04:37 1990  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* integrate.c (copy_for_inline): Use real width of rtunion in bcopy.
	* emit-rtl.c (copy_rtx_if_shared): Likewise.

	* assert.h (assert) [__STDC__]: Use comma operator to avoid warning.

	* c-decl.c (grokdeclarator): Traditionally change return type float
	to double.

	* cse.c (predecide_loop_entry): Give up unless simple jump enters loop.

Thu Feb  1 19:32:28 1990  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* c-parse.y (yylex, skip_white_space): CR is not whitespace.

Thu Feb  1 17:18:33 1990  Richard Kenner  (kenner at sugar-bombs.ai.mit.edu)

	* tm-m68k.h (PREFERRED_RELOAD_CLASS): Never return DATA_REGS for
	ADDR_REGS, even for QImode.

	* cse.c (cse_insn): If source equivalent is not in table, but
	source is, put equivalent in same class as source.  But do not
	do this if the destination has a STRICT_LOW_PART.
	(cse_main): Call init_recog instead of init_recog_no_volatile.

Thu Feb  1 17:18:33 1990  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* Makefile.in (cplus-tab.c, cplus-tab.h): Renamed from cplus-parse.*. 
	(TAGS, realclean): Renamed these files.
	(cplus-decl2.o, cplus-type2.o, cplus-search.o): New targets.
	(cplus-except.o, cplus-expr.o): New targets.
	(new-method.o): Target deleted.
	(CPLUS_OBJS): Add and delete object files.
	(CPLUS_TREE_H): Change header names.
	(INTERNAL_CFLAGS): Set the MERGED flag.

	* calls.c (expand_call): Flush junk in assign of CONTEXT.

	* expr.c (expand_expr): LOOP_STMT is just an infinite loop.
	Handle EXIT_STMT.
	* tree.def (EXIT_STMT): Change meaning: exit if expression is true.
	* stmt.c (warn_if_unused_value): Do nothing for EXIT_STMT.

Thu Feb  1 14:10:57 1990  Richard Kenner  (kenner at vlsi1.ultra.nyu.edu)

	* optabs.c (emit_no_conflict_block): Accept optional expression
	to be placed in REG_EQUAL note on last insn emitted.
 	Just emit insns if TARGET is not a register.
	(expand_binop, expand_unop): Change calls.

Thu Feb  1 01:03:17 1990  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* tree.def (NON_LVALUE_EXPR): New tree code.
	* fold-const.c (non_lvalue): No longer static.
	Make NON_LVALUE_EXPR.  Do nothing if arg certainly not lvalue.
	* c-typeck.c (build_c_cast): Call non_lvalue.
	(default_conversion, build_function_call, actualparameterlist):
	(build_binary_op_nodefault, truthvalue_conversion, build_modify_expr):
	(convert_for_assignment, digest_init): Strip NON_LVALUE_EXPR from args.
	(build_unary_op, build_modify_expr): No longer need to check for
	NOP_EXPR that indicates not an lvalue.
	(build_compound_expr, build_c_cast): Don't strip NON_LVALUE_EXPR
	* expr.c (expand_expr, do_jump): Handle NON_LVALUE_EXPR.
	* c-decl.c (build_enumerator, grokdeclarator): Strip them.
	* c-parse.y (case label): Strip them.

	* limits.h (INT_MIN): Define so it has type `int', not unsigned.
	(CHAR_MIN, SCHAR_MIN, SHRT_MIN): Put arens around value.

	* reload1.c (inc_for_reload): Forget reg_last_reload_reg
	for the reg being inc'd.

Wed Jan 31 17:37:53 1990  Michael Tiemann  (rms at sugar-bombs.ai.mit.edu)

	* cplus-*: New files.

	* tree.def (TARGET_EXPR): New name for NEW_EXPR.
	* tree.c (simple_cst_equal): Change NEW_EXPR to TARGET_EXPR.

	* stmt.c (estimate_case_costs): Check all nodes against ASCII range.

	* stmt.c (warn_if_unused_value): Delete obsolete node types.

	* recog.c (validate_change): Fix one-off bug testing recog_memoized.

	* local-alloc.c (local_alloc): Initialize qty_phys_reg.

	* fold-const.c (non_lvalue): Propagate TREE_LITERAL, TREE_VOLATILE.

	* expr.c (expand_expr): Delete DELETE_EXPR.
	Call lang_expand_expr for any unknown tree code.
	Handle IF_STMT, LOOP_STMT, LET_STMT for real.

	* dbxout.c (dbxout_type): Output args for method type.
	Treat OFFSET_TYPE as int if not using GDB extensions.

Wed Jan 31 17:32:35 1990  Richard Kenner  (kenner at vlsi1.ultra.nyu.edu)

	* stmt.c (node_has_high_bound, node_has_low_bound):
	Use integer_one_node, not new node.

	* expr.c (do_jump): In comparisons against zero, used unsigned, rather
	than signed, extensions, as that is more likely to be the faster one.

Wed Jan 31 14:09:40 1990  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* toplev.c (rest_of_compilation): Ignore TREE_INLINE if not -O.

	* out-mips.c (mips_prologue): Handle big stack frames > 2**16.

	* tree.h (struct tree_type): Rename `max' field to `maxval'.
	(TYPE_MAX_VALUE, TYPE_OFFSET_BASETYPE, TYPE_METHOD_BASETYPE):
	Use new name.

	* reload1.c (reload): Reject fixed regs when spilling large groups.

	* c-decl.c (start_function):
	Optionally warn if non-proto defn without previous prototype.

	* Makefile.in: New rule to make .../include subdir.
	New rule to run fixincludes into it.
	Rule `install' depends on them.

	* assert.h (assert) [no NDEBUG]: Split into versions with/out __STDC__
	(_assert) [__STDC__]: Pass expression and file separately to _eprintf.
	(_assert) [not __STDC__]: Likewise, but implemented differently.
	* gnulib2.c (__eprintf): Handle 3 args plus format string.

	* tm-i386.h (STACK_BOUNDARY): Define it.

Tue Jan 30 16:24:14 1990  Richard Kenner  (kenner at vlsi1.ultra.nyu.edu)

	* Makefile.in (install): Fix typo in name of varargs file.

	* combine.c (try_combine): Don't allow combine to violate machine's
	alignment restriction.

Sun Jan 28 03:53:28 1990  Michael Tiemann  (tiemann at rio)

	* stmt.c (warn_if_unused_value): Don't warn for LOOP_STMT, IF_STMT,
	or LET_STMT.

	* toplev.c (compile_file): Code to mention symbol that was not
	written to asm file is now #if 0'd out.  What good is it telling the
	debugger about a symbol it cannot see?

	* dbxout.c (dbxout_type): Change METHOD_TYPE print character from
	'@' to '#'.  Also, don't try to output CONST_DECLs.  GDB doesn't
	understand them, and they don't have DECL_OFFSETs.

	* sparc.md (floatsidf2): Changed constraint from "rfm" to "rm" for
	second operand.

	* toplev.c (lang_expand_expr): New variable is pointer-to-function
	which expands language-specific tree codes.  Its default is
	`fancy_abort'.

Sat Jan 27 10:18:44 1990  Michael Tiemann  (tiemann at rio)

	* gcc.c (main): Initialize COMPILERS before calling
	`validate_all_switches'.

	* tree.c (decl_{type,function}_context): Handle LET_STMT.

	* stmt.c (expand_decl_cleanup): New function.

	* stmt.c (expand_decl): No longer takes CLEANUP parameter.
	All callers changed.

	* tree.c (build_{loop,if,goto,compound}, etc): Turn these tree
	constructors back on.

	* tree.def: Delete DELETE_EXPR, PUSH_EXPR, POP_EXPR.

	* c-typeck.c (max): New macro.

	* c-decl.c (maybe_build_cleanup): New function.

	* tree.c ({value,purpose}_member): New functions.  Returns first
	element of LIST that matches respective components with ELEM.

	* varasm.c (first_global_object_name): Variable defined.

Sat Jan 27 23:31:02 1990  Richard Kenner  (kenner at vlsi1.ultra.nyu.edu)

	* reload1.c (reload): Reject fixed regs when completing group of 2.

Fri Jan 26 17:28:33 1990  Richard Kenner  (kenner at vlsi1.ultra.nyu.edu)

	* expr.c (do_jump): Don't use CONST0_RTX when value to be tested is
	CONST_INT.

Fri Jan 26 13:39:01 1990  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* gcc.c (main): Warn about bad switches at beginning, not at end.

Thu Jan 25 22:03:37 1990  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* loop.c (general_induction_var): Reject widening multiply.

	* cccp.c (grow_outbuf): Always return 0.

Thu Jan 25 07:04:31 1990  Richard Kenner  (kenner at vlsi1.ultra.nyu.edu)

	* combine.c (subst): Correctly reference length in
	(zero_extract (zero_extend ... )) combinations.

	* c-decl.c: Define warn_traditional.
	(build_enumerator): Remove NOP_EXPRs from default value also.

	* fold-const.c (fold): Strip NOP_EXPRs when looking for constants.

Thu Jan 25 01:57:34 1990  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* Makefile.in (install): Clear execute bit for nonexecutable files.

	* i860.md (andsi3): Truncate xop2 constant to 16 bits.

Wed Jan 24 22:32:47 1990  Richard Kenner  (kenner at vlsi1.ultra.nyu.edu)

	* genemit.c (main): Include output.h in insn-emit.c.
	* genpeep.c (main): Similar.
	* genrecog.c (main): Ditto.
	* Makefile.in (insn-emit.h, insn-peep.h, insn-recog.h): Add dependancy.

Wed Jan 24 20:13:08 1990  Richard Stallman  (rms at albert.ai.mit.edu)

	* cccp.c (do_define): Report error for duplicate macro args.

Mon Jan 22 07:52:28 1990  Richard Kenner  (kenner at vlsi1.ultra.nyu.edu)

	* reload1.c (alter_reg): Rework change of January 7th to allow
	for no previous insn and clear equivalence information of correct
	pseudo.

Mon Jan 22 01:22:00 1990  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* fold-const.c (fold): Don't simplify non-lvalue to an lvalue.
	(non_lvalue): New fn; makes a NOP_EXPR with readonly flag.
	* c-typeck.c (build_unary_op, build_modify_expr): Reject such.

Sun Jan 21 20:53:49 1990  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* c-typeck.c (lvalue_p): Don't call language_lvalue_valid.
	Don't bother with looking for NEW_EXPR or REFERENCE_TYPE.
	(language_lvalue_valid): Deleted.

Sat Jan 20 19:50:15 1990  Michael Tiemann  (mtiemann at apple-gunkies.ai.mit.edu)

	* expr.c (expand_expr): Implemented language-independent expansion
	for NEW_EXPR.

Thu Jan 18 14:29:10 1990  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

 	* cccp.c (rescan): Set beg_of_line when string ends at newline.
	(skip_quoted_string): Don't swallow newline that ends a string.
	(handle_directive): No need to back up here.
	Pass LIMIT as second arg to skip_quoted_string.

Thu Jan 18 12:50:09 1990  Richard Kenner  (kenner at vlsi1.ultra.nyu.edu)

	* emit-rtl.c (gen_lowpart): Verify CONST_DOUBLE is integer mode.
	(gen_highpart): Add support for CONST_INT and CONST_DOUBLE.

	* recog.c (general_operand): Don't allow nested SUBREGs.
	(nonmemory_operand, memory_operand, register_operand): Ditto.

	* emit-rtl.c (gen_reg_rtx): Don't allow creation of pseudos
	during or after reload.

Thu Jan 18 11:41:14 1990  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* c-typeck.c (actualparameterlist): -Wconversion warns if
	representation or width is changed.

Thu Jan 18 01:09:47 1990  Michael Tiemann  (mtiemann at apple-gunkies.ai.mit.edu)

	* dbxout.c (various places): Don't assume that DECL_NAME of a
	PARM_DECL is non-zero.  It might be empty for anonymous parms.

Thu Jan 18 00:06:58 1990  Richard Kenner  (kenner at vlsi1.ultra.nyu.edu)

	* local-alloc.c (local_alloc): qty_phys_sugg is now an array of
	HARD_REG_SETs.  Initialize new variable qty_phys_has_sugg.
	(block_alloc): Don't test for nonlocal gotos here.
	Test qty_phys_has_sugg instead of qty_phys_sugg to see if
	quantity needs early allocation.
	(qty_compare, qty_compare_1): No longer consider whether a quantity
	has a hard register suggestion as part of its priority.
	(combine_regs): We now record multiple hard register suggestions
	in qty_phys_sugg.
	(find_free_reg): Test here for nonlocal gotos.
	Support new meaning of qty_phys_sugg by restricting to those
	registers if just_try_suggested.
	Check for no registers available prior to looping over registers.

	* global-alloc.c (prune_preferences): New fn.
	(global_alloc): No longer keep a single vector of which registers
	someone prefers; instead keep this record one per allocation number.
	Record registers not saved over calls as already used for register
	allocation purposes, so we can feel free to allocate them with no
	cost.
	Call new fn to prune preferences and build list of registers
	preferred by earlier allocnos.
	find_reg no longer gets preference information as argument.
	(find_reg): Don't take preferred registers as argument; get the
	info from global variables.
	(set_preference): Remove regs_someone_prefers.
	(dump_conflicts): Print register preferences in dump file.
	
Wed Jan 17 16:00:59 1990  Michael Tiemann  (mtiemann at apple-gunkies.ai.mit.edu)

	* tree.c (decl_function_context): New function, returns the
	innermost DECL_CONTEXT of FNDECL when that context is a
	FUNCTION_DECL.
	* tree.c (decl_type_context): New function, returns the
	innermost DECL_CONTEXT of FNDECL when that context is a
	TYPE_DECL.
	* All callers changed to use `decl_function_context' when handling
	nested functions.
	* All C++ callers changed to use `decl_type_context' when handling
	member functions.

	* expr.c (fixed_type_p): New function says whether the compiler
	guarantees that it knows the true type of an object.
	* expr.c (expand_expr): Call that function for INIT_EXPR and
	MODIFY_EXPR.  Also, for MODIFY_EXPR, check both RHS and LHS.

	* tree.h (DECL_ARG_TYPE): Use INITIAL, not ARGUMENTS slot in
	`tree_decl.  Now reserving ARGUMENTS slot for VAR_DECL and
	 PARM_DECL for language-specific features.

	* tree.c (build_decl): Don't set DECL_PRINT_NAME by default.

	* assert.h: Assume that undefined __GNUC__ implies `assert' must
	rely on printf.

Wed Jan 17 15:31:40 1990  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

 	* cccp.c (rescan): If traditional, end preproc number after expt sign.

Wed Jan 17 15:18:25 1990  Michael Tiemann  (mtiemann at apple-gunkies.ai.mit.edu)

	* stmt.c: Extended struct nesting to hold exception handling
	contours.  New functions:

	   expand_start_try, expand_end_try, in_try_block
	   expand_start_except, expand_end_except, in_except_block
	   expand_start_catch, expand_end_catch, expand_catch_default
	   expand_raise, expand_escape_except, in_exception_handler

Wed Jan 17 13:48:01 1990  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* cccp.c (main): Typo, had `includes' for `include'.
	Always increment p.

	* reload1.c (alter_reg): Delete spurious `break'.

	* local-alloc.c (block_alloc): Delete ref to undef var first_time.

Wed Jan 17 13:35:47 1990  Michael Tiemann  (tiemann at apple-gunkies.ai.mit.edu)

	* toplev.c: Unmerge all changes of Bryan Boreham--no papers (yet).

Wed Jan 17 12:33:52 1990  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* stor-layout.c (layout_type): Struct requires BLKmode if any field
	crosses a word boundary.

Wed Jan 17 12:04:18 1990  Michael Tiemann  (tiemann at apple-gunkies.ai.mit.edu)

	* stor-layout.c (layout_type): Unterminate comment terminated.

	* tree.c (lvalue_p,lvalue_or_else): Remove these functions from this
	file.
	* c-typeck.c (lvalue_p,lvalue_or_else): Put them in this file.

Wed Jan 17 00:46:24 1990  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* c-decl.c (pushdecl): Delete garbage accidentally added before.

	* tree.c (set_identifier_size): SIZE is size in bytes.
	* tree.c (get_identifier): If `set_identifier_size' has not been
	called, abort.
	* c-decl.c (init_decl_processing): Don't call `set_identifier_size'
	from here.
	* c-parse.y (init_lex): Call `set_identifier_size' from here.

	* varasm.c (force_const_mem): Save DESC's label on the
	saveable_obstack.  (Note, saveable is misspelled.)

	* listing: New file.

Tue Jan 16 20:43:55 1990  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* c-typeck.c (convert_sequence): Put in #if 0.

Tue Jan 16 17:25:43 1990  Michael Tiemann  (tiemann at apple-gunkies.ai.mit.edu)

	* toplev.c: Merged Bryan Boreham's undumping code.

	* print-tree.c (dump): Handle TREE_VEC.

	* varasm.c (output_constant_pool):  When done, set FIRST_POOL,
	LAST_POOL to zero.

	* varasm.c (first_global_object_name): New variable.  Records the
	name of the first global declaration (variable or function) whichi
	is written to the assembly file.

	* tree.h (tree_code_name): Add declaration.

Tue Jan 16 17:06:29 1990  Richard Kenner  (kenner at vlsi1.ultra.nyu.edu)

	* local-alloc.c (block_alloc): Make an initial pass to try to
	allocate registers that have suggested hard registers.
	(find_free_reg): Add new argument to only try suggested hard register.

Tue Jan 16 15:54:06 1990  Michael Tiemann  (tiemann at apple-gunkies.ai.mit.edu)

	* tree.h (tree_vec): Added.

	* tree.def (IDENTIFIER_NODE): Default length is 2.
	* tree.def (TREE_VEC): Define it.
	* tree.def ({NEW_,DELETE_,REFERENCE_}EXPR): fixed comments.

	* tree.c (preserve_initializer): New function.  Like
	`preserve_data', but saves nodes on momentary_obstack as well.
	* tree.c (make_tree_vec): New function.  Allocates a TREE_VEC node.
	* tree.c (copy_node): Support added for TREE_VEC.
	* tree.c (build_parse_node): New function.  Builds tree node on
	TEMP_DECL_OBSTACK.
	
Tue Jan 16 15:23:16 1990  Richard Kenner  (kenner at vlsi1.ultra.nyu.edu)

	* expr.h: Eliminate definitions of andcb_optab and expand_bit_and.
	* expmed.c (expand_bit_and): Eliminate function.
	(store_fixed_bit_field, extract_fixed_bit_field, expand_divmod):
	Replace expand_bit_and with call to expand_binop.
	* expr.c (expand_expr): Handle TRUTH_AND_EXPR and BIT_AND_EXPR
	as normal binary operations.
	(do_store_flag): Replace expand_bit_and with expand_binop.
	* optabs.c (expand_binop, init_optabs): Eliminate andcb_optab.

	* expmed.c (expand_shift): Don't use extzv for rotate.
	If all three tries at a shift operation failed, delete the
	insns made during the last try.
	Handle failure of extzv operation.
	Call protect_from_queue before convert_to_mode for op1.

Tue Jan 16 10:38:28 1990  Michael Tiemann  (tiemann at apple-gunkies.ai.mit.edu)

	* tree.c: Added temp_decl_obstack for building declarators without
	needing to use permanent_obstack at top level.
	* tree.c (init_tree): Init temp_decl_obstack.
	* tree.c (permanent_allocation): Free nodes allocated on
	temp_decl_obstack.
	* tree.c (build_decl_list,decl_tree_cons): New functions.  Like
	`build_tree_list' and `tree_cons', but for building on
	temp_decl_obstack.
	* tree.c (build1): New function.  Builds tree node for unary tree
	node kinds; doesn't use varargs.
	* tree.c (simple_cst_equal): Interface changed to return 1 if
	arguments are equal, 0 if not, and -1 if arguments were not
	understood by the function.
	* tree.c (build_{method,offset}_type): TYPE_*_BASETYPE is the
	TYPE_MAIN_VARIANT of BASETYPE.

Mon Jan 15 01:50:51 1990  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* cexp.y (exp): Accept unary +.

	* Makefile.in (hard-params): Compile with GCC.
	(hard-params.o): Likewise, and depend on the GCC executables.

	* tm-sparc.h (CONST_COSTS): Give 1, not 0, for immed consts.

Sun Jan 14 14:38:10 1990  Michael Tiemann  (tiemann at apple-gunkies.ai.mit.edu)

	* stmt.c (estimate_case_costs): New function.  Case code no longer
	assumes that all case values are equally likely for all types.  In
	particular, when the type of argument for the switch statement does
	not look like it is not ASCII text, we assume that it might be, and
	assign a weight to its value based on frequency distribution of
	characters in ASCII text.
	* stmt.c (balanace_case_nodes): If case values look like ASCII text,
	then use the cost table.  Otherwise, do not.  Using the cost table
	means that the otherwise almost-balanced binary tree may be skewed
	in hopes of picking up common values more quickly than just
	log(n).  This is done at the direct expense of the less common
	values, which will be reached at more than log(n).
	* stmt.c (emit_case_nodes): If using COST_TABLE and the most likely
	case value is on one side of the tree or another, hand-pick boundary
	tests so that condition codes can be reused (if possible).
	* stmt.c (expand_end_cast): If optimizing, and the type of
	ORIG_INDEX is not an enumeral type, then call `estimate_case_costs.'

Sun Jan 14 12:18:49 1990  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* fold-const.c (lshift_double, rshift_double, lrotate_double):
	(rrotate_double): Don't shift more than width of operand.

Fri Jan 12 12:17:06 1990  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* recog.c (next_insns_test_no_inequality): Return 1 at end of rtl.

	* expr.c (store_expr): No special handling for constructor
	unless value is going in struct value block.

	* stor-layout.c (layout_type): Use common nodes for sizes of ptrs, fns.
	(make_signed_type, make_unsigned_type): Create those nodes.
	(layout_record): Just ignore VAR_DECL if not static.

Thu Jan 11 14:09:47 1990  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* c-decl.c (lang_decode_option): Decode -Wtraditional.
	* c-decl.c (implicitly_declare): Warn if extern decl previously seen.
	* c-typeck.c (c_expand_start_case): Warn if switch exp is long.

	* c-typeck.c (actualparameterlist): Optionally warn on truncation.
	* toplev.c (main): Handle -Wconversion.

	* cccp.c (skip_if_group): Skip strings even if -traditional.
	(handle_directive): Likewise, when handling copy_command.

Thu Jan 11 14:15:50 1990  Richard Kenner  (kenner at vlsi1.ultra.nyu.edu)

	* cse.c (cse_insn): Only check for REG_EQUAL notes and make
	REG_EQUAL notes instead of REG_EQUIV notes.
	* explow.c (force_reg): Make REG_EQUAL note instead of REG_EQUIV
	note.  Check for and reuse old note if present.
	* local-alloc.c (block_alloc): Convert REG_EQUAL to REG_EQUIV for
	constant when register is only set once.
	* loop.c (combine_movables, move_movables): Check for REG_EQUAL notes
	instead of REG_EQUIV notes.
	* optabs.c (expand_binop): Correct typo in writing REG_EQUAL note.
	(emit_no_conflict_block): Suppress REG_NO_CONFLICT notes for
	non-registers.

Thu Jan 11 14:09:47 1990  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* i860.md (movsf): Ensure F to f is reloaded via r.

	* expr.c (expand_increment): Don't call stabilize.

Wed Jan 10 15:03:08 1990  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* c-decl.c (duplicate_decls): If old fn decl follows new ellipsis decl,
	warn only if pedantic.

	* loop.c (loop_skip_over): Do nothing if don't find expected compare.

Tue Jan  9 21:31:46 1990  Richard Kenner  (kenner at vlsi1.ultra.nyu.edu)

	* jump.c (jump_optimize): Don't delete USE and CLOBBER insns.
	The later call to find_equiv_reg can malfunction if CLOBBERs are
	deleted.

Mon Jan  8 17:48:20 1990  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* gcc.c (link_command_spec): Always check gnulib both first and last.

Mon Jan  8 17:07:25 1990  Richard Kenner  (kenner at vlsi1.ultra.nyu.edu)

	* optabs.c (expand_unop): Perform multi-word logical negation one
	word at a time.
	(expand_binop, expand_unop): Insert REG_EQUAL note on last insn of
	multi-insn sequence.
	Use TARGET_PIECE instead of TARGET in multi-word logical operations.
	(emit_no_conflict_block): New fn.
	(expand_binop, expand_unop): Call it.
	(gen_add2_insn, gen_sub2_insn): Abort if operands do not match those
	of the predicates for the appropriate generators.

	* expr.h: Fix typo and define emit_no_conflict_block.

Mon Jan  8 15:33:19 1990  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* rtl.h (REG_UNSET): Fix the code.
	* rtl.c (reg_note_name): Add REG_UNSET.

	* c-decl.c (struct binding_level): parm_flag now 2 for def, 1 for decl.
	(declare_parm_level): New parm distinguishes them.  All calls changed.
	(pushdecl): Don't warn about shadowing with parm name in fn decl.

Mon Jan  8 15:15:07 1990  Richard Kenner  (kenner at vlsi1.ultra.nyu.edu)

	* cse.c (cse_basic_block): Allow NOTEs between LOOP_BEG and jump to
	end test.
	(predecide_loop_entry): Accept JUMP_INSN rather than LOOP_BEG NOTE.

	* reload1.c (gen_input_reload): When adding constant to register,
	move the constant into the output, then add the register, rather than
	the other way around.

Mon Jan  8 12:20:26 1990  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* c-parse.y (components): Don't allow to be empty.
	(component_decl): Special cases if empty, to call shadow_tag.
	Recognize the semicolon here.
	(component_decl_list): No semicolon here.

	* c-decl.c (shadow_tag): Print warning if nameless structure defined.

Sun Jan  7 19:09:33 1990  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* varasm.c (output_constant): Use size of machine mode
	to choose how to output the constant.

	* varasm.c (immed_real_const_1): Detect 1 as well as 0.

	* reload1.c (reload): When deleting reg_equiv_init insn,
	also delete the prev insn if it is no longer needed.

	* real.h (REAL_VALUE_FROM_CONST_DOUBLE, CONST_DOUBLE_FROM_REAL_VALUE):
	New macros.

	* reload.c (find_reloads_address_1): Preserve original X value
	in case we replace it with new memory reference.

	* optabs.c (expand_binop): Handle case of no previous insns.

	* jump.c (jump_back_p): Check for floating point if not IEEE.

	* global-alloc.c (dump_global_regs): Break the line occasionally.

	* flow.c (mark_used_regs): Recognize post-decrement properly.
	It looks like (plus REG -CONST), not (minus REG CONST).
	Also, patch out old insn as a note in the usual way.

	* calls.c (emit_call_1): Arg to RETURN_POPS_ARGS is FUNTYPE itself.

	* expr.c (STACK_PUSH_CODE): New macro, which config.h can override.
	(gen_push_operand): Use it.
	(emit_push_insn): Reverse padding if pushing is post-increment.
	(expand_expr): For MINUS, sign-extend negated value.

	* emit-rtl.c (init_emit_once): Initialize new variables
	fconst1_rtx, dconst1_rtx, dconst0, dconst1, dconstm1.

	* cse.c (fold_rtx): For COMPARE and MINUS, test for floating zero arg.
	Also handle equal floating args if FLOAT_NOT_IEEE.
	For NEG, eliminate silly temp var.
	For MULT and DIV, handle more cases with floating point.
	Change division by floating constant into multiplication.

	* config.gcc: Add i386-mach.
	* xm-i386.h: Use built-in alloca if compiling with GCC.

	* Makefile.in (c-parse.tab.o): Delete -o switch.
	(cexp.o): Put in explicit command.

	* combine.c (record_dead_and_set_regs): Ignore stack pushes.

Sat Jan  6 15:33:32 1990  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* out-mips.c (function_arg, function_arg_advance):
	Define typedef for CUMULATIVE_ARGS, and use it here.

	* c-parse.y (yylex): Put 0 at end of wide string.

	* tm-mips.h (CC1_SPEC): Don't distort meaning of -O.

Fri Jan  5 12:12:31 1990  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* optabs.c, expr.h: All use of umul_optab deleted.
	* gnulib.c (__umulsi3): Deleted.

	* gcc.c (link_command_spec): If LIBS_COMPILED_WITH_GCC, gnulib is last.

	* Makefile.in (INTERNAL_CFLAGS): New parameter.
	(ALL_CFLAGS): New variable, replaces CFLAGS when compiling.
	(HOST_CFLAGS): Define from ALL_CFLAGS.

	* Makefile.in (insn-*.o, cccp.o, others): Use CPPFLAGS.

	* Makefile.in (gnulib): Add null command.

Fri Jan  5 08:11:20 1990  Richard Kenner  (kenner at vlsi1.ultra.nyu.edu)

	* combine.c (subst): When applying De`Morgan's law, compute NOT
	of constant.

	* integrate.c (save_constants, restore_constants): Clean up fns
	by passing in a pointer to an rtx so that insns can be modified
	in place.
	(save_for_inline): Change call to save_constants.
	Apply save_constants to REG_NOTES.
	(expand_inline_function): Use emit_move_insn instead of generating
	an explicit SET.
	Apply copy_rtx_and_substitute to REG_NOTES.
	(output_inline_function): Change call to restore_constants.
	Apply restore_constants to REG_NOTES.

Thu Jan  4 23:58:59 1990  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* Makefile (c-parse.tab.o): Add explicit compilation cmd.

Thu Jan  4 22:48:01 1990  Richard Kenner  (kenner at vlsi1.ultra.nyu.edu)

	* cse.c (insert_regs, insert, use_related_value): Don't assume REG is
	first in class.
	(HASH): Handle register with HASHREG macro for speed.
	(insert): No longer need equivalence_only.
	Use COST macro.
	(use_related_value): No longer need to check for valid address.
	(find_best_addr): New function.
	(fold_rtx): Remove copyflag argument and replace with insn.
	Check for common cases before making recursive call.
	Call validate_change to ensure change is valid, but always return
	simplified expression.
	Replace operand with folded operand, or constant operand, whichever
	is cheaper and is valid.
	Call find_best_addr for MEMs.
	(fold_cc0): Add insn operand to pass to calls to fold_rtx.
	(cse_insn): Rework to enumerate all possible equivalences and replace
	source with cheapest valid.
	Simplify associative operations with constants where an operand is
	equivalent to the same operation with another constant.
	Use validate_change for all changes.

Thu Jan  4 17:58:28 1990  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* stmt.c (expand_end_loop): Put NOTE_INSN_LOOP_CONT at top by default.

	* c-typeck.c (actualparameterlist):
	Convert parmnum to origin-1 to print.

	* Makefile.in (USER_H): Add float.h.

Wed Jan  3 00:27:53 1990  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* gnulib.c (__extendsfdf2): Delete unused var.

	* reload1.c (alter_reg): Undo big-endian conversion from
	assign_stack_local.

	* calls.c (store_one_arg): Round size up for move_block_to_reg.
	(expand_call): Round up when emitting USE insns.
	* function.c (assign_parms): Round size up for move_block_from_reg.

	* Makefile (install): Use nested foreach-loop to expand va*.h.

Tue Jan  2 16:01:47 1990  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* mips.md (call_value): Ignore calls to __builtin_saveregs.

	* tm-mips.h (STARTING_FRAME_OFFSET): Change from -8 to 0.
	(FUNCTION_PROLOGUE, FUNCTION_EPILOGUE): Use new fns in out-mips.c.
	* out-mips.c (prologue_looks, mips_prologue, mips_epilogue): New.

	* gnulib2.c: Everything except arithmetic support moved from gnulib.c.
	* Makefile.in (LIB2FUNCS, LIBFUNCS): Likewise.

Sun Dec 31 20:10:52 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* tree.h (struct tree_common): Declare `code' as char, not int.

Thu Dec 28 13:49:43 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* Makefile.in (includes): Set variable LIB.  Run from `./'.

Wed Dec 27 18:54:25 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* reload1.c (eliminate_frame_pointer): Special case for reg = reg2+fp.

	* loop.c (can_eliminate_biv_p, eliminate_biv): If add_val non zero,
	it must be a constant or register.

Wed Dec 27 18:11:23 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* i860.md (load DF constant to reg): Typo: extra percent sign.
	(floatsidf2): Two words of a double were backwards.

Mon Dec 25 16:32:50 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* emit-rtl.c (emit_note_before): New function.
	* stmt.c (expand_end_loop): Output NOTE_INSN_LOOP_CONT if none.
	** Above change turned off.

Mon Dec 25 00:02:31 1989  Torbj|rn Granlund  (tege at zevs.sics.se)

	* tm-pyr.h (CONST_COSTS): Define more optimal costs.

	* tm-pyr.h (FIXUNS_TRUNC_LIKE_FIX_TRUNC): Should not be defined.
	  The cvtdw instruction causes a trap for floating point values
	  that are out-of-range for a signed int.

	* tm-pyr.h (CONST_DOUBLE_OK_FOR_LETTER_P): Don't accept any
	  special constraint chars, since we don't use any.

	* tm-pyr.h (CONSTANT_ALIGNMENT): Correct comment.

	* out-pyr.c (weird_memory_memory): Flush decl of unused variables.

	* out-pyr.c (has_direct_base): Don't accept 0 as a base, if there
	  is a register displacement.  This is a workaround of a bug in
	  /bin/as.  (/bin/as changes things like "cmpw 8(reg),0(reg)" into
	  "cmpw 8(reg),(reg)", which is invalid assembler.)

Sun Dec 24 12:01:05 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* c-decl.c (finish_struct): Ok to define nameless union in parms.
	* c-typeck.c (compparms): Allow union vs its member's type,
	but only if same size & union is nameless.
	(comptypes): In that case, for a parm, prefer the member's type.
	(actualparameterlist): Nameless union parm casts all its memb types.

	* integrate.c (copy_decl_tree, copy_parm_decls): Set TREE_INLINE.
	* c-decl.c (pushdecl): No shadow-warning if TREE_INLINE is set.

	* dbxout.c (current_sym_code): Declare as enum; avoid warnings.

Sat Dec 23 10:54:22 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* combine.c (subst): Under NOT, move it inside AND and IOR.
	Under XOR, move NOT out.

	* toplev.c (set_target_switch): Handle multiple entries for one name.

	* ns32k.md (adjust stack): Distinguish processor subtype at run-time.
	(extract byte from register): Likewise.
	* tm-ns32k.h (TARGET_32532, TARGET_32332): New target options.
	* tm-encore.h, tm-sequent.h (TARGET_DEFAULT): Default them.

Fri Dec 22 20:33:15 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* Makefile.in (all): Move above where make-MACHINE is inserted.
	(all.internal): Definition of `all' indirects through this.
	(GNULIB): Variable allows rule for gnulib to be redirected.
	(gnulib.portable): Name for the standard rule for gnulib.

	* tm-mips.h (ASM_OUTPUT_SOURCE_FILENAME): New macro.
	(REG_CLASS_SUBUNION, REG_CLASS_SUBCLASSES, REG_CLASS_SUPERCLASSES):
	Obsolete macros deleted.

Thu Dec 21 16:20:00 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* fold-const.c (fold): Bug taking assignments out of conversions:
	Use language-independent method.

	* reload1.c (alter_reg):
	Always do big-endian correction on slot address.

	* i386.md (float push recognizers): Don't pop fpreg if not dead.

Wed Dec 20 10:54:54 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* assert.h: Cast value to void.

Tue Dec 19 09:42:13 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* gcc.c (link_command_spec): Put %l first.

Tue Dec 19 08:59:43 1989  Richard Kenner  (rms at sugar-bombs.ai.mit.edu)

	* genattrtab.c (get_attr_value): Initialize has_asm_insn field when
	making a new attr_value.

Sun Dec 17 12:06:37 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* c-typeck.c (digest_init, process_init_constructor, store_init_value):
	Give error for each invalid element seen in an initializer.
	New arguments say whether context wants error messages.
	* c-parse.y (cast_expr): Pass new args.
	* Unfortunately, this doesn't do the job, since the whole initializer
	is parsed before any is digested.

	* c-decl.c (duplicate_decls): Source loc of definition is
	more important than that of declaration.

	* cccp.c (include_defaults): On unos, also search /include.

	* m68k.md (movsi, movhi, store-0 recognizer): Conditional for CRDS.
	(mulhi3, mulhisi3, umulhi3, umulhisi3): Add % and CRDS conditional.
	(zero-extend recognizers): Put % before period in clr insns.
	(divide and modulus recognizers): Likewise for and, ext, swap and div.
	(dbra recognizers): Likewise for sub and clr insns.
	(tablejump recognizer): Conditional for CRDS.
	* tm-crds.h, xm-crds.h: New files.

	* gcc.c (read_specs): Don't include trailing newline in data
	read from specs file.
	(skip_whitespace): Empty line is a delimiter in specs data.

	* cccp.c (grow_outbuf): Change value back to int.

	* cse.c (cse_end_of_basic_block): Fix unterminated comment.

	* cccp.c (main): Add `.C' as known suffix for deps output.

	* expr.c (do_jump): Cast vector length to int in case will subtract.

	* tm-att386.h (ASM_OUTPUT_LOCAL): Revert last change: put it data seg.

	* reload.c (decompose): Make a separate case for SUBREG.

	* Makefile.in (HOST_RTLANAL): Define like HOST_RTL.
	(genattrtab): Use that to get at rtlanal.o.
	($(HOST_PREFIX_1)rtlanal.o): New rule for cross-compilation.
	(STAGESTUFF): Typo in stamp-attrtab.c.

	* tm-hp9k320.h (CPP_PREDEFINES): Add __hp9000s300, _HPUX_SOURCE.

	* stupid.c (reg_order): Make it int, in case reg # is large.
	(stupid_reg_compare, stupid_life_analysis): Implement this.

	* gnulib2.c (__floatdidf): Define WORD_SIZE.

	* flow.c (find_basic_blocks): Don't clobber stack if no basic
	blocks.

Sat Dec 16 12:38:07 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* loop.c (can_eliminate_biv_p, eliminate_biv): Check in case
	neither side of a compare is the biv by itself.
	(check_eliminate_biv): Test of only_reg_use_p was backwards.
	(general_induction_var): If V is 0 and G is not,
	combine additive terms with plus_constant, provided
	either one of them is an integer.
	Check both operands of a sum for being givs in their own right.
	(strength_reduce): When eliminating a biv, don't mung insns that use
	it via a giv that will be handled later.
	(loop_skip_over): Duplicate an endtest that takes several insns.

	* loop.c (strength_reduce): When writing insn to init a biv, 
	update life range of reg used to init it.

	* combine.c (try_combine): Do combine (y = x, x = y).

	* loop.c (strength_reduce): When finding initial value of a biv,
	notice assignments to subregs of it, etc.

	* m68k.md (all shift patterns): Require register_operand for ops 0, 1.

	* reload1.c (alter_reg):
	Don't set spill_stack_slot_width if from_reg is -1.

	* cse.c (cse_main): Delete local redef of flag_cse_follow_jumps.

	* reload1.c (new_spill_reg): Fatal error if fixed reg is spilled.
	(order_regs_for_reload): Make sure all the regs are in spill_regs.

	* mips.md (movsf): Fix wrong opcode moving genreg to fpreg.

	* toplev.c: Undef FFS after including param.h.

	* final.c (final_scan_insn): Delete label reinsert_compare.

	* expmed.c (store_bit_field): Move var value1 inside HAVE_insv.
	(extract_bit_field): Similar for bitsize_rtx, bitpos_rtx.

	* c-typeck.c (pointer_diff): Delete unused var.
	* expr.c (emit_push_insn): Likewise.
	* gcc.c (execute): Likewise.
	* genrecog.c (try_merge_2): 
	* loop.c (skip_consec_insns, scan_loop): 
	* recog.c (asm_noperands, memory_operand):
	* function.c (expand_function_end):
	* stmt.c (emit_jump_if_reachable):
	* toplev.c (error_for_asm):
	* varasm.c (assemble_string):

	* integrate.c (fp_addr_p): Var deleted.

	* regclass.c (regclass_init): Now returns void.
	* emit-rtl.c (emit_insns): Likewise.
	* stmt.c (emit_nop): Likewise.
	* out-sparc.c (output_eager_then_insn): Likewise.

	* reload1.c (reload_reg_reaches_end_p, reload_reg_free_before_p):
	(reload_reg_free_p): Abort if switch drops through.

	* cccp.c: Supply a return type for every function (usually void).
	(grow_outbuf): Now returns void.
	(line_for_error): Abort if the loop terminates.
	* gcc.c: Supply a return type for every function (usually void).

	* jump.c (jump_optimize): Leave block-beg, block-end notes
	in old context when swapping two ranges of insns.
	(squeeze_block_notes): New function.

	* calls.c (expand_call): Compute valreg from pointer type
	in case of pcc struct return.

	* gnulib2.c (__builtin_saveregs): Use __ names for machine types.

	* fold-const.c (fold):
	Move constant out of assignment, within conversion.

Fri Dec 15 00:42:31 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* varasm.c (assemble_variable): Use new macro DATA_ALIGNMENT if def.
	(get_or_assign_label): Use this instead of CONSTANT_ALIGNMENT.

	* integrate.c (save_constant, restore_constant): Handle naked
	constant-pool SYMBOL_REF.
	(copy_for_inline, copy_rtx_and_substitute): Ditto.

	* integrate.c (expand_inline_function):
	Put caller's line number after inline stuff.
	Put callee's line number before parm manipulation.

	* tree.c (make_node): Have a DECL_SOURCE_FILE in every decl.

	* m68k.md (fpa float and float-trunc): Accept general_operand.

	* calls.c (expand_call): Do INIT_CUMULATIVE_ARGS just once.

	* calls.c (expand_call): If struct ret addr is passed as parm,
	count it in structure_value_addr_parm.

	* If local-alloc assumes a reg does not conflict,
	don't use it as dummy reload.
	* local-alloc.c (wipe_dead_reg): Add REG_UNSET note.
	* reload.c (find_dummy_reload): Check for that note.

	* jump.c (jump_optimize): Realize that more things can follow
	the NOTE_INSN_FUNCTION_END note.  Change in two places,
	for optimized and one for unoptimized.

Thu Dec 14 23:40:23 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* Makefile.in (install, libsubdir): Change $(machine) to $(target).

Tue Dec  5 07:35:57 1989  Richard Kenner  (kenner at vlsi1.ultra.nyu.edu)

	* rtl.h: Declare emit_jump_insn_before and emit_jump_insn_after.

	* reload.c (reg_class_subset_p): Delete duplicate copy.
	local-alloc.c (reg_class_subset_p): Move from here.
	regclass.c (reg_class_subset_p): Move to here.

	* combine.c (try_combine): Fix placement and content of LAST_CALL_CUID
	test to elminate memory faults.

	* final.c (asm_insn_count): New fn.
	(get_length_attr, shorten_branches): Rework length
	computation of insns with INSN_CODE == -1.  Call above fn to more
	accurately obtain length of ASM insn.

	* genattrtab.c (check_attr_value): Allow CONST_INT to specify
	numeric values for attributes.  Also, prevent memory faults
	on errors when ATTR is null.
	(make_canonical): Convert CONST_INT to appropriate CONST_STRING.
	(write_attr_case): Correctly check for ASM insns.
	(make_numeric_value): Generalize to all positive integers.

	* jump.c (jump_optimize): Set JUMP_LABEL on jump added
	in "{ ... x = 1;} if (x)" optimization and add to jump_chain.

	* local-alloc.c (no_conflict_p): Tighten up code to prevent
	memory faults.

	* reload.c (find_reloads): Fix typo in EXTRA_CONSTRAINT call.

Tue Nov 28 11:20:47 1989  Richard Stallman  (rms at apple-gunkies.ai.mit.edu)

	* expr.c (save_noncopied_parts):  Rename stack_loc as target.
	Make the stack slot address correct.

Mon Nov 27 15:39:40 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* math-convex.h: New file.

	* c-decl.c (grokdeclarator): Don't test size of error_mark_node
	as type of a field.

Sun Nov 26 12:36:01 1989  Richard Stallman  (rms at apple-gunkies.ai.mit.edu)

	* tm-mips.h (CONST_OK_FOR_LETTER_P): Delete extra paren.

Fri Nov 24 12:36:29 1989  Chris Smith  (csmith at mozart)

	* tm-convex.h (OVERRIDE_OPTIONS): remove target=host default.
	* out-convex.c (override_options): remove.

	* tm-convex.h (*_TYPE_SIZE): define type sizes as the usual values. 
	* convex.md (movstrictsi): new, for field insertion in DImode regs.

	* tm-convex.h (LEGITIMATE_CONSTANT_P): allow all CONST_DOUBLES.
	(PREFERRED_RELOAD_CLASS): reload nonimmediates from memory (NO_REGS).
	* convex.md (movdi, movdf): use 'G' to handle nonimmediates.
	(anddi3, iordi3, xordi3): allow immediates if high word is identity.

	* convex.md (tstdi): Finally figure out how to allocate a temp reg
	in a way that won't get optimized away; remove hardwired use of s1.

	* convex.md (cmpqi): don't sign extend to SImode because operands
	might be unsigned.  Must compare bytes in registers instead.

	* convex.md (movtf): new.

	* convex.md (ash*, lsh*): rewrite to use shift vs. shiftrt. 
	Better code because no need to sign or zero extend when going left.
	(shift, mask & test peephole): test next_insn_tests_no_inequality.
	(similar with lshiftrt): New peephole.

	* tm-convex.h: add g++ defines FASCIST_ASSEMBLER, VTABLE_USES_MASK.

Sun Nov 26 11:39:13 1989  Richard Stallman  (rms at apple-gunkies.ai.mit.edu)

	* reload.c (decompose): Handle SUBREGs.

Wed Nov 22 11:26:00 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* pyr.md (mode conversion peepholes): Set CC_NO_OVERFLOW.
	* out-pyr.c (consecutive_operands): Don't expect wrap from reg15 to 16.

	* make-pyr: Find the alloca which comes with the system.

	* tm-mips.h (CONST_OK_FOR_LETTER_P): Define `K'.
	(SMALL_INT): Range is 16 bits, not 17.
	(SMALL_INT_UNSIGNED): New macro.
	* mips.md (andsi3, iorsi3, xorsi3): Use `K', not `I'.

	* mips.md (negsi2): Accept general_operand as input.

	* stor-layout.c (build_int): Defend against negative arguments.

	* varasm.c (MAX_HASH_TABLE): Change to a prime.

Tue Nov 21 10:58:28 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* mips.md (one_cmpl*): Accept general_operand as input.

Mon Nov 20 11:18:58 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* optabs.c (emit_cmp_insn): New arg, COMPARISON.
	(emit_float_lib_cmp): New subroutine, handles soft-float comoare
	of floating point values.  Chooses ibrary fn from COMPARISON.
	* expr.c, expmed.c, stmt.c, optabs.c: All calls changed.
	* gnulib.c (__eqdf2, __nedf2, __gtdf2, etc.): New functions.
	(__eqsf2, __nesf2, __gtsf2, etc.): New functions.

	* cse.c (fold_rtx): Simulate negative shift counts.

Sun Nov 19 14:36:18 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* out-pyr.c (notice_update_cc): Set CC_NO_OVERFLOW in many cases.

	* cse.c (fold_rtx, fold_cc0): Handle float trap. 

Sat Nov 18 00:17:47 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* varasm.c (output_constant): Handle float trap in fprintf.
	* toplev.c (float_signal): Don't print message.
	* fold-const.c (combine): Print it here.

	* sparc.md (extend patterns): Handle CONST_INT as operand.
	* out-sparc.c (output_block_move, output_mul_by_constant): 
	(output_eager_then_insn): Delete unused vars.

	* varasm.c (decode_rtx_const): Add a cast in SYMBOL_REF case.

	* tm-i386.h (TRAMPOLINE_TEMPLATE, TRAMPOLINE_SIZE)
	(INITIALIZE_TRAMPOLINE): New macros.
	* i386.md (indirect_jump): New pattern.

	* out-i386.c (singlemove_string): Fix paren error.

Fri Nov 17 12:19:56 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* expr.c (expand_increment): For pre-increment, copy the rtx to return.

	* c-parse.y (compstmt): There may be implicit decls, so check
	and maybe keep the level.

	* tm-mips.h (FUNCTION_PROLOGUE, FUNCTION_EPILOGUE):
	Use call_used_regs, not a private copy.

Thu Nov 16 00:28:29 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* reload1.c: Keep track of paradoxical subregs of each pseudo,
	and make extra stack space for their sake.
	(reload): Record max size paradoxical subreg for each pseudo.
	(scan_paradoxical_subreg): New subroutine for that.
	(reload): Make stack slots big enough for that size.

	* tm-i860.h (ASM_DECLARE_FUNCTION_NAME): Define it,
	so we can output a no-op before each function.

	* tm-pyr.h (INIT_CUMULATIVE_ARGS): Simplify.
	Pass function type to aggregate_value_p.

	* fold-const.c (fold):
	For foo++ > const, don't change if foo++ could overflow.

	* loop.c (eliminate_biv):
	Fix typo; check both coeffs when comparing givs.

Wed Nov 15 00:12:59 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* sdbout.c (sdbout_end_function, sdbout_end_block, sdbout_begin_block):
	Don't allow line numbers < 1.

	* integrate.c (copy_for_inline): `break' was missing for case 'u':.

	* sdbout.c (plain_type_1): Output .dim X,Y...; for multi-dim array.
	(sdbout_array_dim): New recursive subroutine.
	(PUT_SDB_DIM): Macro eliminated.
	(PUT_SDB_START_DIM, PUT_SDB_NEXT_DIM, PUT_SDB_LAST_DIM): New macros.
	* tm-3b1.h: Override PUT_SDB_START_DIM.

	* jump.c (delete_insn): Extra test for PREV != 0.

Tue Nov 14 17:31:08 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* tm-m68k.h (WORDS_BIG_ENDIAN): Define it.
	* out-m68k.c (output_move_double): Adapt CONST_DOUBLE case to that.

	* varasm.c (decode_rtx_const): For SYMBOL_REF, use addr of string.

	* tm-pyr.h (INIT_CUMULATIVE_ARGS):
	If -fpcc-struct-return, always do the scalar thing.

	* tm-sun3.h (LINK_SPEC): Specify -L to control choice of -lm.

	* function.c (expand_function_end): Use FUNCTION_OUTGOING_VALUE.

Sat Nov 11 00:18:54 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* calls.c (prepare_call_address): If NO_RECURSIVE_FUNCTION_CSE,
	don't do function cse on calls to same function.
	(emit_call_1): Don't call memory_address for SYMBOL_REF.

	* tm-att386.h (ASM_OUTPUT_COMMON): Use ROUNDED, not SIZE.
	(ASM_OUTPUT_LOCAL): Likewise.  Also, generate .lcomm
	rather than a .data area symbol.
	* tm-sun386.h: Likewise.

	* tm-bsd386.h (ASM_OUTPUT_COMMON): Use ROUNDED, not SIZE.
	(ASM_OUTPUT_LOCAL): Likewise.

	* cexp.y (parse_escape): Delete unused var `count' from case 'x'.

Fri Nov 10 15:04:15 1989  Richard Stallman  (rms at rice-chex)

	* caller-save.c (emit_mult_restore, emit_mult_save):
	Improve arithmetic for address to save at.

Thu Nov  9 00:14:19 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* tm-pyr.h (ASM_OUTPUT_REG_PUSH, ASM_OUTPUT_REG_POP):
	Don't use obsolete pushw and popw insns.
	(ASM_OUTPUT_ALIGN): Ensure arg in range 2 to 5.
	* pyr.md (tstdi): Pattern deleted.
	(SImode test recognizer): Output ucmpw if jump is unsigned.

	* out-sparc.c (operands_satisfy_eager_branch_peephole): 
	Check for moves between FP and non-FP regs; they take two insns.
	* sparc.md (eager branch peepholes): Likewise.
	(Ordinary delayed branch peepholes): Similar check.
	* out-sparc.c (single_insn_extra_test): New subroutine.

	* final.c (final_scan_insn):
	Rearrange to avoid calling BLOCK_PROFILER for a jump table.

	* reload1.c (choose_reload_regs): Split up a hairy if.

Wed Nov  8 00:48:50 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* calls.c (expand_call): Handle UNNAMED_ARGS_IN_REGISTERS.

	* toplev.c (main): Handle -gsdb to make sdb output when that and dbx
	are both supported.

	* combine.c (subst): In (sign_extend:M (subreg:N (and:M .. <const>) 0))
	insist that constant be positive in mode N.
	Also test mode N in similar zero_extend case.

	* c-typeck.c (build_modify_expr): When assigning to COND_EXPR
	put cast to void around precomputed rhs.

	* calls.c (emit_call_1): Make funexp a valid address.

Tue Nov  7 18:57:17 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* expr.c (emit_move_insn): If args in memory, make addresses valid. 

	* rtl.h: Undefine FFS in case it was defined by the system.

	* c-parse.y (combine_strings): Ignore warn_write_strings
	if -traditional or -fwritable-strings.

	* Makefile.in (gnulib2): Fix syntax in shell conditionals.

	* stmt.c (expand_return): Handle COND_EXPR specially.

Mon Nov  6 14:43:55 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* optabs.c (expand_float): Check sign of FROM; may be faster than TO.

	* fold-const.c (fold): If REAL_INFINITY, allow division by zero.
	* tm-sun3.h (REAL_INFINITY): Define it.

	* tm-i860.h, tm-m88k.h, tm-pyr.h, tm-spur.h (INIT_CUMULATIVE_ARGS):
	Test aggregate_value_p, not just BLKmode.

	* gnulib2.c (__builtin_saveregs): Moved from gnulib.c.
	Code added for mips.

	* pyr.md (conditional branch recognizers): Don't simplify if not -O.

	* out-pyr.c (extend_and_branch): Handle two constant operands.

	* integrate.c (function_cannot_inline_p): Don't inline if alloca used.

Sun Nov  5 02:59:23 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* Always make a LET_STMT and notes for the top level of a function
	if it has any subblocks.
	* c-decl.c (struct binding_level): New field keep_if_subblocks.
	(poplevel): Obey the new field.
	(keep_next_if_subblocks): New variable.
	(pushlevel): Use that variable.
	(store_parm_decls): Set that variable.
	(compstmt): Pass nonzero to expand_end_bindings
	for the new kept binding levels.
	(kept_level_p): New function.

	* xm-mips.h: Define USE_C_ALLOCA if compiling with CC.

	* tm-alliant.h (CHECK_FLOAT_VALUE): Define this.

	* calls.c (expand_call): Make valreg 0 if passing structure address.

Sat Nov  4 23:27:02 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* caller-save.c (emit_mult_save, emit_mult_restore):
	Test regs for suitability as address before using as temps.

	* cccp.c (make_definition, do_define): Better error checks for name.

Fri Nov  3 01:05:04 1989  Torbj|rn Granlund  (tege at echnaton)

	* pyr.md (tstdi): New pattern.  Use 64-bit shift with count zero.

	* tm-pyr.h: -mretd pops args with the retd insn.

	* pyr.md (peep-holes for loop optimizations): Use the R output
	  format in PRINT_OPERAND, don't use output_branch.
	* out-pyr.c: No need for functions output_branch, output_inv_branch.

	* tm-pyr.h (ASM_OUTPUT_ALIGN): Don't truncate alignment to two.

Wed Nov  1 00:38:27 1989  Torbj|rn Granlund  (tege at echnaton.sics.se)

	* out-pyr.c (output_inv_branch): When reversing test operands, ne
	  remains ne, and eq eq eq.

	* pyr.md: Cleanup output code for compare patterns.

	* pyr.md (return): Adjust frame pointer if
	  current_function_pretend_args_size != 0.

	* pyr.md (extendsidi2): Use general_operand for the input operand.

	* pyr.md, out-pyr.c: Output shift insns with output_shift.

	* tm-pyr.h, out-pyr.c: Make NOTICE_UPDATE_CC understand how
	  condition codes are really set.  Define flag CC_VALID_FOR_UNSIGNED
	  with to make it possible not to reset cc after each compare or
	  test.
	* pyr.md: Don't use CC_STATUS_INIT for most patterns.

	* out-pyr.c (already_sign_extended): Cleanup, correct, optimize.

	* out-pyr.c: rename radr_diff to constant_diff.

	* out-pyr.c (movdi_possible): Don't combine moves from memory to
	  memory, because of possible address aliasing.  Don't combine moves
	  with register destination if the source operands are depending on
	  the destination of the first move, as in

	    movw (pr3),pr3
	    movw 4(pr3),pr4.

	* out-pyr.c (consecutive_operands): Handle SUBREG in addition to REG.

	* out-pyr.c (output_move_double): movl of immediate *sign* extends.

Tue Oct 31 22:51:39 1989  Torbj|rn Granlund  (tege at echnaton.sics.se)

	* pyr.md (cmpsi): Don't expand this.  It's just slower.

	* out-pyr.c (extend_and_branch): Handle only QImode and HImode.
	  Flush code specific for SImode.

	* out-pyr.c (extend_and_branch): To make zero extensions to HImode
	  of constants not crash:
	* out-pyr.c (ensure_extended): Call extend_const if it's a
	  CONST_INT.  Don't call extend_const from extend_and_branch.
	* pyr.md, out-pyr.md: Use global variable test_mode to determine the
	  mode of tests and compares.  Set in define_expands for tests and
	  compares.  Used in extend_and_branch.
	* out-pyr.c: Pass mode between extend_and_branch and ensure_extended.

	* out-pyr.c (extend_and_branch): Accept SUBREG whereever REG is
	  accepted.
	* out-pyr.c (weird_memory_memory): Accept SUBREG whereever REG is
	  accepted.

Thu Nov  2 16:23:57 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* gnulib2.c (lshrdi2, and other shifts): Take second arg as long long.

	* combine.c (subst):
	Simplify (zero_extract (subreg:SI (lshift:QI (mem:QI ...)) 0) ...)

	* expr.c (do_jump): Don't discard NOP_EXPR from around COMPONENT_REF.
	Put one on, if that allows extracting the component in natural mode.

	* final.c (get_attr_length): Omit the body if no length attribute.

	* Makefile.in (genattrtab): Use host-rtlanal.c as dep and to link.
	(insn-attrtab.o): Use $(INCLUDES).

	* cse.c: Include stdio.h.

	* c-decl.c (finish_enum): Local `value' was declared and set wrong.

	* Makefile.in (gen*.o): Find source files in $(srcdir).
	(LIBDEPS, HOST_LIBDEPS): Don't use USE_ALLOCA.

Wed Nov  1 00:05:59 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* stmt.c (init_function_start): Init max_parm_reg.

	* varasm.c (compare_constant_1): For ADDR_EXPR, compare symbol name.
	For PLUS_EXPR, etc., don't record code twice.
	(record_constant_1): Likewise.

	* expr.c (expand_assignment): Allow for overlap when storing into a
	structure value area supplied by the caller.

	* cse.c (remove): Handle an elt in the wrong bucket.

	* function.c (fixup_stack_1): Avoid using move insn for address arith.

	* out-sparc.c (output_mul_by_constant): Constant zero is legitimate.

	* caller-save.c (emit_mult_restore, emit_mult_save):
	Handle stack addresses which are invalid.

	* cse.c (use_related_value): Don't abort if offset is 0.

Tue Oct 31 15:12:54 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* config.gcc (pyramid): Set $machine to pyr.

	* calls.c (expand_call): Don't OK_DEFER_POP in is_const case.

Mon Oct 30 17:00:44 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* final.c (shorten_branches, init_insn_lengths):
	Define unconditionally; conditionalize the contents, perhaps.

Mon Oct 30 03:23:52 1989  Richard Kenner    (kenner at vlsi1.ultra.nyu.edu)

	* final.c (shorten_branches): New function.
	(init_insn_lengths, get_attr_length): New functions.
	* function.c (init_function_start): Call init_insn_lengths.
	* recog.c (constrain_operands): Call alter_subreg if nec.
	* toplev.c (rest_of_compilation): Call shorten_branches.
	(compile_file): Init and print shorten_branch_time.

Mon Oct 30 03:23:52 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* reload1.c (spill_regs): Make it short, not char.

Sun Oct 29 00:53:46 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* final.c (final_scan_insn): Delete no-op moves, even without -O.

	* c-parse.y (yylex): Prevent warning for numbers that underflow.

	* stmt.c (assign_parms): Convert stack addresses to valid addresses.
	(validize_mem): New subroutine.

	* c-decl.c (finish_enum): If -fshort-enums, round size up to match
	some ordinary C integer type.
	Compute precision properly when some values are negative.
	Make type double precision when necessary.

	* c-decl.c (lang_decode_option): Accept and ignore -fnotraditional.

	* gcc.c (default_compilers): Pass -ftraditional to cpp as -traditional.

	* DOLLARS_IN_IDENTIFIERS now has three values.  1 is now the default.
	It means enable $ only with -traditional.  2 means enable unless -ansi.
	* c-decl.c (lang_decode_option): Implement that.
	* cccp.c (main): Likewise.
	* tm-vms.h, tm-apollo68.h, tm-convex.h, tm-next.h:
	Define DOLLARS_IN_IDENTIFIERS as 2.
	* tm-pyr.h: Define it as 0.
	* cexp.y (initialize_random_junk): Test DOLLARS_IN_IDENTIFIERS
	for nonzeroness.

	* stmt.c (check_for_full_enumeration_handling): Accept enum type
	as argument (since was finding it incorrectly).
	Delete special case for constant index.
	(expand_end_case): Pass enum type; check for constant index.

Sun Oct 29 00:53:46 1989  Richard Kenner    (kenner at vlsi1.ultra.nyu.edu)

	* varasm.c (force_const_double_mem): Remove redundant code.
	(record_constant_rtx): Use normal obstack since temporary data.
	(force_const_mem): Don't output constant immediately.  Instead,
	save it for new fn to write.  Also, make hash table mapping
	internal label to desired constant.
	(output_constant_pool): New fn to write constant pool.
	(assemble_function): Call it.
	(init_const_rtx_hash_table): Initialize new hash table and pool
	chain and offset.
	(find_pool_constant): New fn to map internal label SYMBOL_REF to
	data about constant.
	(get_pool_constant, get_pool_mode, get_pool_offset): New fns
	using above fn to return data about constant pool labels.
	* rtl.h: Define last three new fns.

	* integrate.c (save_constants): New fn to convert constant pool
	references to recognizable representation of constant that was
	being used.
	(save_for_inline): Call it.
	(copy_for_inline, output_inline_function): Undo this for copy to
	be compiled.
	(restore_constants): New fn used in output_inline_function.
	(copy_rtx_and_substitute): Make new constant pool entries for
	constants in pool when fn was inlined.

	* cse.c (cse_end_of_basic_block): Optionally make a "basic block"
	that follows branches.  Now takes previous block as argument and
	computes which branch to follow/fall through next.
	(cse_main, cse_basic_block): Make compatible with above.

	* toplev.c: Add new flag, -fcse-follow-jumps.
	(rest_of_compilation): Pass dump file to cse_main.

	* flags.h: Add flag_cse_follow_jumps.

Sat Oct 28 01:24:14 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* optabs.c (emit_cmp_insn): Default MODE before computing CLASS.

Fri Oct 27 16:25:19 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* tm-next.h (__inline): define as macro for old 1.34 Next uses.

Thu Oct 26 01:05:09 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* mips.md (compare/branch peepholes): Combine using match_operator.
	* out-mips.c (relop, frelop, frelop_reversed): New functions.
	* tm-mips.h (PRINT_OPERAND): New codes `C' and `N' for comparisons.
	(ASM_OUTPUT_SOURCE_LINE): Output .loc--MIPS likes that.
	(EXTENDED_COFF, NO_UNDERSCORES, USE_COLLECT): Define, for collect.c.
	(COFF): Undefine, for collect.c.

	* getattrtab.c: Rename define_asm_insn to define_asm_attributes.
	* rtl.def: Likewise.

Wed Oct 25 00:52:12 1989  Richard Kenner    (kenner at vlsi1.ultra.nyu.edu)

	* rtl.def: Add new RTL codes for insn attributes.
	Change last operand of DEFINE_INSN and DEFINE_PEEPHOLE.

	* rtlanal.c (rtx_equal_p): Add support for "V", "n", and "s" types.

	* genoutput.c (output_epilogue): No longer output machine_info
	stuff.
	(process_template): New function.
	(gen_insn, gen_peephole): Call process_template.
	(fatal): Add more args.

	* final.c: Allow called configuration macros to use attribute data.

Wed Oct 25 00:52:12 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* rtlanal.c (rtx_equal_p): Handle operand types n, V, S.

	* optabs.c (floattab): Record unsigned-float insns.
	(can_float_p): New arg UNSIGNEDP.
	(expand_float): Use those insns if available.

Tue Oct 24 19:23:11 1989  Richard Kenner    (kenner at vlsi1.ultra.nyu.edu)

	* genattr.c, genattrtab.c: New files.
	* Makefile.in (insn-attr.h, insn-attrtab.c):
	New files made by those two.

	* Makefile.in (insn-*.[ch]): Name the temp file `tmp-foo.c', etc.,
	not `tmp-insn-foo.c'.

	* combine.c (subst): Generalize simplification of
	(zero_extend:M (subreg:N (zero_extract:M ...) 0)) and similar.

Tue Oct 24 19:23:11 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* combine.c (try_combine): Don't move a volatile asm.

Mon Oct 23 01:45:34 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* combine.c (try_combine): Don't install a subreg relating two modes
	that aren't tieable.

	* gnulib2.c (__fixdfdi): Declare __fixunsdfdi.

	* combine.c: Make uid_cuid an int *.
	(combine_instructions): Allocate as such.
	* loop.c: Make uid_luid an int *.
	(loop_optimize): Allocate as such.

Sun Oct 22 20:35:55 1989  Richard Kenner    (kenner at vlsi1.ultra.nyu.edu)

	* combine.c (try_combine): Call simplify_set_cc0_and for SIGN_EXTEND.
	(subst): Start by putting constant last in commutative operations
	and convert MINUS of a constant to PLUS.
	Put CONST around any PLUS with 2 constants.
	Simplify (minus <foo> (and <foo> (const_int -pow2))).
	Handle (zero_extend (and ...)) when the and is nontrivial.
	Convert (XOR (NOT x) (NOT y)) to (XOR x y).
	Simplify (abs (neg <foo>)).
	Simplify abs of something known positive.
	Handle (zero_extend (truncate...)) using gen_lowpart.
	Do it for sign_extend too.
	Simplify (ZERO_EXTRACT (AND x) ...).
	Simplify (ZERO_EXTRACT (ZERO_EXTEND z) ...), etc.
	Extend "Extracting a single bit from result of shift" to SIGN_EXTRACT.
	(ashiftrt (*shift <X> <c1>) <c1>) can be (sign_extend <X>)
	(lshiftrt (*shift <X> <c1>) <c1>) can be (zero_extend (subreg <X>))
	Do (lshift <X> (sign_extend <Y>)) on non-regs using gen_lowpart.
	Eliminate AND in (lshift (and <X> <C1>) <C2>).
	Use gen_lowpart in (lshift:m1 (zero_extend:m2 <X>) <C>).
	Use gen_lowpart in (and x const) => (zero_extend (subreg x 0)).
	(simplify_set_cc0_and): Ignore outermost SIGN_ or ZERO_EXTEND.
	Handle constant bit number.
	Try to get into SImode for bitfield jumps.

	* recog.c (apply_change_group, validate_change): New functions.

Sat Oct 21 00:51:49 1989  Richard Kenner    (kenner at vlsi1.ultra.nyu.edu)

	* cse.c (cse_end_of_basic_block): Optionally make a "basic block"
	that follows branches.  Now takes previous block as argument and
	computes which branch to follow/fall through next.
	(cse_main, cse_basic_block): Make compatible with above.

	* cse.c (new_basic_block): Don't assume sizeof (rtx) == sizeof (int).

	* cse.c (make_new_qty, canon_hash): Add  sanity checks.

	* cse.c (lookup_as_function): Don't assume VOIDmode == 0.

	* cse.c (exp_equiv_p): For commutative operations, check both orders.
	Detect unexpected operand-type letters.
	Mode is significant for all codes.

	* cse.c (fold_rtx): CONST_DOUBLE can also appear in DImode.  Verify
	that floating-point is used before folding it.
	Verify that the host's INT width is wide enough to do folding.

	* cse.c (cse_insn): Treat each component of PARALLEL exactly the same
	way as if it were standing alone.

	* combine.c (combine_instructions): If an insn explicitly references
	CC0, try to combine it with the previous insn.  Also, enable
	combining an insn with two different insns whose results it uses.

	* combine.c (try_combine): Ignore USE or CLOBBER parallel parts in
	I2 and I1 as they are not functional.

Sat Oct 21 00:51:49 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* out-pyr.c (extend_and_branch): Allow SUBREG like REG.
	* pyr.md (mem-reg and reg-mem HI, QI patterns):
	Don't match unless one arg is MEM.

Sat Oct 21 00:28:48 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* stor-layout.c (layout_decl): No more need to avoid >1 wd in one reg.

	* tree.c (build_index_type): Copy precision from sizetype.

	* reload.c (find_reloads_toplev): Don't truncate constant if bigger
	than host word size.

	* gnulib2 (__floatdidf, __fixunsdfdi): Use WORD_SIZE, not BITS_PER...
	(WORD_SIZE): # of bits in a `long' on the target.

	* genextract.c (gen_peephole): Use sizeof (rtx) copying operands.

	* fold-const.c (force_fit_type): Use POINTER_SIZE for pointers.

	* final.c (end_final, final_scan_insn): In sizes and aligns of
	profiling vars and tbls, use INT_TYPE_SIZE for size of an int,
	or give max alignment.

	* expr.c (do_jump): Comparing constant arg vs 0, take # sig bits
	from mode of data type.

	* gcc.c: Add CC1PLUS_SPEC like CC1_SPEC.
	(validate_all_switches, do_spec_1, process_command, read_specs):
	Handle it.  Use %2 to use it.
	(default_compilers): Pass %2 to cc1plus.

	* out-sparc.c (output_fp_move_double): Use ldd only when safe,
	on same conditions used for std.

	* Makefile.in (USE_ALLOCA): New var is $(ALLOCA) if compiling with
	cc, null otherwise.  Use this to refer to alloca.

	* Makefile.in (gnulib): Test vrbl HPUX_GAS to decide whether to run
	hpxt instead of ranlib.
	(stamp-gnulib2): Don't ranlib if HPUX_GAS.
	* make-hp9kgas: New file, sets HPUX_GAS.

Fri Oct 20 13:33:34 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* expmed.c (store_bit_field, extract_bit_field):
	Use mode whose size is UNITS_PER_WORD for struct in reg.
	(store_fixed_bit_field, extract_fixed_bit_field):
	Handle bigger constant masks.
	(mask_rtx, lshift_value): New subroutines.

	* c-parse.y (combine_strings): Use correct width of `int'.

	* varasm.c (make_decl_rtl): Warn for volatile explicit register vars.

Fri Oct 20 00:27:00 1989  Richard Kenner  (kenner at vlsi1.ultra.nyu.edu)

	* reload1.c (reload_as_needed): Set new variable reload_in_progress
	and clear it after reload complete.

	* reload1.c (choose_reload_regs):
	Don't count deleted reloads vs number of spill regs.

	* reload1.c (choose_reload_regs): Arg of HARD_REGNO_MODE_OK
	was the pseudo; should be the reload reg.

	* reload1.c (gen_input_reload): Don't generate a move with a PLUS
	as an operand.

	* reload.c (find_reloads): Ignore unconstrained operands
	when looking for conflict with an earlyclobber.

	* reload.c (subst_indexed_address):
	Replace and canonicalize more thoroughly.
	(form_sum): New subroutine.

	* out-i386.c (singlemove_string): Handle ordinary constants as input.

	* tm-decstatn.h (CPP_PREDEFINES): Add bsd4_2, ultrix, MIPSEL, 
	host_mips, R3000, LANGUAGE_C, SYSTYPE_BSD.
	* tm-mips.h (CPP_PREDEFINES): Add host_mips, R3000, MIPSEB, LANGUAGE_C.
	(CPP_SPEC): Remove those from here.
	Define __SYSTYPE_*__ always.  Define SYSTYPE_* only if not -ansi.
	No CPP_SPEC needed for decstation.
	Correct typos in option tests.

	* c-parse.y (unary_expr): Handle EXTENSION here, not in primary.

Thu Oct 19 18:16:40 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* tm-m68k.h, tm-alliant.h (PRINT_OPERAND):
	Don't print :l for address if :w was already printed.

	* Allow elided braces with unions.
	* c-typeck.c (digest_init): Treat unions more like records.
	(process_init_constructor): Handle union types.

	* c-parse.y (program): Pedantic warning for empty file.

Wed Oct 18 22:28:21 1989  Torbj|rn Granlund  (tege at echnaton.sics.se)

	* out-pyr.c (extend_const, extend_and_branch): Make sure all const
	  are CONST_INT.

	* out-pyr.c (movdi_possible): Handle combination of two immediate
	  moves correctly.  (Pyramid immediate move to a DImode operand
	  (movl) work by SIGN extension of the 32 bit immediate source.)
	* Handle CONST tagged addresses.

	* out-pyr.c (already_sign_extended): Skip harmless JUMP_INSN when
	  scanning after extension insn.
	* Check for right mode of extension.
	* Delete redundant register number test.

	* pyr.md (anonymous SImode test pattern): Predicate need to accept
	  any operand that can be generated for corresponding compare.  Used
	  to reject "foo(p) int *p {int a=0; return *p==a;}".

	* pyr.md (shift patterns): Condition bogus if no insn really output.

	* pyr.md: Flush obsolete comment about conversion.

	* tm-pyr.h (FUNCTION_PROLOGUE): Don't really set up a frame pointer
	  if it's never referenced.  Also, don't round up frame size to a
	  multiple of 32, since input args and alloca nevertheless breaks
	  such alignment attempts.
	* tm-pyr.h (FUNCTION_EPILOGUE): Goodbye.  Use (define_insn "return"
	  ..) in md instead.
	* pyr.md (return): Use "ret" or "retd" depending on the existense
	  of a freme pointer.
	* tm-pyr.h (EXIT_IGNORE_STACK): Ensure the stack pointer is
	  preserved even when the frame pointer is not really set up.

	* pyr.md: Reinsert move-and-test peep-hole optimization.

	* pyr.md: Flush silly peep-hole optimizations for loops.  They were
	  inverted optimizations.

	* tm-pyr.h (NOTICE_UPDATE_CC): Make it identify the most important
	  cases when set conditions codes can be used, without an explicit
	  test.

Wed Oct 18 13:01:24 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* gcc.c (default_compilers): Support -E on .h file.

	* tm-mips.h (FUNCTION_PROLOGUE): Get rid of __0__gcc macro.
	Store that value in frame_stack_difference.
	(FUNCTION_EPILOGUE): Get rid of __0__gcc macro.
	(FIX_FRAME_POINTER_ADDRESS): Use frame_stack_difference.
	* out-mips.c (frame_stack_difference): Define here.

	* gcc.c (default_compilers): Define __GNUG__ for g++.  

Tue Oct 17 01:17:07 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* tm-i860.h (HAVE_PRE_INCREMENT): Undefine this.

	* mips.md (movsf): New alternatives for r registers.
	* tm-mips.h (FUNCTION_PROLOGUE): Handle big stack frames.
	* out-mips.c (function_arg): Handle mode distinction for floating args.

	* pyr.md (mtstsw pattern): Accept general_operand.

	* Makefile.in (gcc): Force-move when installing new gcc.
	(realclean): Delete Makefile.

	* i860.md (movsf): New alternatives: allow loading r from F.
	Prefer f-reg as reload when moving m from F.
	* tm-i860.h (PRINT_OPERAND): Handle CONST_DOUBLE if SFmode.

Sun Oct 15 14:27:48 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* i860.md (movhi, movqi): Support moves to/from fp regs.

	* stmt.c (expand_goto): USE both stack ptr and static_chain_rtx
	just before jumping.

	* sparc.md (tablejump peepholes): Fix paren error that no-op'd them.

	* tm-sparc.h (*TRAMPOLINE*): Defined macros, but defns are wrong.
	* sparc.md (indirect_jump): New pattern; plus peepholes.

	* sparc.md (cse'd multiply): New pattern for mult. by -1.

	* out-i860.c (load_opcode, store_opcode): Handle DImode and fp reg.

	* toplev.c (compile_file): Always test TREE_USED and TREE_ADDRESSABLE
	in identifier as well as in decl.
	* c-decl.c (poplevel): Preserve TREE_ADDRESSABLE from local externs.
	* c-typeck.c (mark_addressable): Don't set bit in identifier here.

Fri Oct 13 00:12:46 1989  Richard Kenner  (rms at sugar-bombs.ai.mit.edu)

	* flow.c (life_analysis): No need to think abt CONSIDER on first pass.

	* flow.c (propagate_block): Remove duplicated code to update OLD.

	* flow.c (mark_set_1): Handle nested SUBREG, SIGN_EXTRACT,
	STRICT_LOW_PART, etc.  Also, always set subreg_p when setting
	a bit field, even if modes are same.

	* expr.c (expand_expr): Check for |= or &= of two bitfields of size 1.
	Convert to test followed by assignment.

	* rtl.def (INLINE_HEADER): Correct erroneous field types.

	* rtl.h: Add definitions for saving flags in INLINE_HEADER.

	* emit-rtl.c (gen_inline_header): Correct out-of-date arguments.
	Add support for saving flags.

	* integrate.c (save_for_inline): Save function flags.
	Update comments.
	(expand_inline_function, output_inline_function): Let machine-dependant
	code view (or possibly modify) inlined insn, if desired.

	* function.c (assign_stack_local): Don't set frame_pointer_needed or
	invalid_stack_slot if assigning zero-sized area.

	* stmt.c (fixup_var_refs_1): If the machine's SIGN_EXTRACT or
	ZERO_EXTRACT insns can't accept a memory operand, fix them up.

	* expr.c (do_jump): Look inside EQ_EXPR or NE_EXPR if one arg is 0.
	Be smart about PLUS_EXPR, MINUS_EXPR, ABS_EXPR, REFERENCE_EXPR,
	NEGATE_EXPR, rotation, CONVERT_EXPR.

	* jump.c (reverse_condition): Make non-static.
	(swap_condition): New routine.

	* final.c (alter_cond): Use new swap_condition.

	* expr.c (expand_expr): In cases where a jump will be generated, use
	original_target because the registers won't be able to be merged due
	to the jump.

	* expr.c (expand_expr): Put constant last for PLUS.

Fri Oct 13 00:12:46 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* recog.c (constrain_operands): Add case for `&'.

	* tm-vax.h (TRAMPOLINE_TEMPLATE): Add a .word 0 at beginning.
	(TRAMPOLINE_SIZE): Increase by 2.
	(INITIALIZE_TRAMPOLINE): Copy reg mask from pure code to trampoline.
	Jump into the pure code after the reg mask.

	* expmed.c (expand_divmod): Use divmod insn for quotient if no div.

	* expmed.c (extract_bit_field): With structure reg fetched from mem,
	don't put in subreg if mode already correct.
	(store_bit_field): Typo: had extzv, wanted insv.

	* recog.c (init_recog): Set volatile_ok to 1.
	(init_recog_no_volatile): Similar, but set volatile_ok to 0.
	(recog_memoized): Don't set volatile_ok.
	* reload1.c (reload): Call init_recog.
	* combine.c (combine_instructions): Call init_recog_no_volatile.
	* loop.c (loop_optimize): Likewise.
	* cse.c (cse_main): Likewise.
	* function.c (expand_function_start): Call init_recog_no_volatile
	for the sake of predicates called from optabs.c.

	* toplev.c (compile_file): Warn if fun declared static and used
	but never defined.

Thu Oct 12 01:48:30 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* cccp.c (macarg1): Count newlines even after backslash.

	* c-decl.c (pushdecl): Don't warn for explicit extern
	followed by static.  That case is useful for incomplete arrays.

	* c-decl.c (grokdeclarator): Delete some junk about Pmode vs EPmode.

	* tm-sparc.h (SELECT_RTX_SECTION): Test was backwards.

	* reload.c (reg_class_subset_p): New function.

Wed Oct 11 00:35:25 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* vax.md (indirect_jump): New pattern.

	* c-parse.y (primary): Turn off pedantic after `__extension__'.
	(hash, is_reserved_word, etc.): Recognize `__extension__'.

	* expr.c (emit_library_call, expand_call): Make a SEQUENCE for
	any needed USE insns and pass them to emit_call_1.
	(emit_call_1): Place the passed SEQUENCE immediately before the
	generated CALL_INSN even if gen_call made more than one insn.

	* tm-seq386.h (DBX_DEBUGGING_INFO): Override this.
	(HARD_REGNO_MODE_OK): Override this.

	* c-typeck.c (build_conditional_expr): Supply missing layout_decl arg.

	* dbxout.c (dbxout_symbol): Handle nested functions.

Wed Oct 11 00:35:25 1989  Richard Kenner  (kenner at vlsi1.ultra.nyu.edu)

	* jump.c: Update jump_chain when insns change.
	(jump_optimize): Leave room in jump_chain for some extra labels.
	Record length in max_jump_chain.  Check this when updating.
	When optimizing jump-to-return, delete from one chain and add to other.
	When cross-jumping turns cond jump to simple one, add to new chain.
	Zero jump_chain at end, so redirect_jump won't change it further.
	(redirect_jump): Delete from one chain, add to another.
	(do_cross_jump): Likewise.
	(delete_from_jump_chain): New subroutine.

	* cse.c: If `if (x != y) goto l;' fails to jump, assume x==y.
	(reg_invaliate): Add new argument for when value isn't
	changing, just its class.
	(invalidate): Update reg_invalidate call.
	(record_jump_equiv): New function.
	(cse_insn): Call it.

	* cse.c (cse_insn): Delete previous test based on
	prev_insn_explicit_cc0 just as based on prev_insn_cc0.

Tue Oct 10 00:14:35 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* reload.c (push_reload, combine_reloads): Let two reloads share
	if one's regclass is a subset of the other.

	* Makefile.in: What depends in expr.h, depends on insn-codes.h also.

Mon Oct  9 19:11:38 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* cccp.c (finclude): Close descriptor as soon as text is read.
	Eliminate `success'; return directly after successful processing.
	(do_include): Don't close descriptor here.

	* tm-i386.h (REG_CLASS_FROM_LETTER): Don't define `S' letter.
	It wasn't used; and now it means something else.

	* tm-ns32k.h (REG_CLASS_FROM_LETTER): Don't define `r' here.
	`r' is standard.

Mon Oct  9 01:09:25 1989  Richard Kenner  (kenner at vlsi1.ultra.nyu.edu)

	* flow.c (life_analysis): Ignore USEs and CLOBBERs when finding
	redundant register copies.
	* jump.c (jump_optimize): Do the same thing here.

	* jump.c (mark_jump_label): Loop NOTEs aren't relevant after loop
	optimization.

	* integrate.c (copy_for_inline): Correctly handle RTL type "u".
	* final.c (output_operand_lossage): Make non-static.

	* recog.c (constrain_operands): Treat N, O, P like I, J, K, L, M.
	For Q...U, use EXTRA_CONSTRAINTS if defined.
	* reload.c (find_reloads): Likewise.

	* rtl.c (copy_rtx, read_rtx, print_rtx): Handle operand type `V'.

	* rtlanal.c (note_stores): Use variable Y instead of equivalent
	slower expression.

	* rtlanal.c (dead_or_set_p): Hard regs don't always have same RTX.

	* rtlanal.c (may_trap_p): Don't use const0_rtx here.
	So we can use this file in programs that don't have const0.

Mon Oct  9 01:09:25 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* Support language-specific tree codes.
	* tree.c (standard_tree_code_type, standard_tree_code_length):
	Renamed tables.  tree_code_type and tree_code_length are now pointers.
	* tree.c (init_tree): Copy the tables to allocated memory.
	* tree.c (tree_code_name): Move here from print-tree.c
	and define like tree_code_type.

	* rtl.c (print_rtl): Handle 0 as operand.

	* emit-rtl.c (save_emit_status): Don't call init_emit here.
	* function.c (push_function_context): Do it here.

	* emit-rtl.c (reinstate_emit_status): New function.
	* function.c (trampoline_address): Use this around
	INITIALIZE_TRAMPOLINE.

	* function.c (trampoline_address): Use fp->tail_recursion_reentry
	when trampoline is in outer function.

	* Save and restore stack levels in nonlocal gotos.
	* function.c: New variable nonlocal_goto_stack_level.
	(init_function_start, push_function_context, pop_...): Init, push, pop.
	(delete_handlers): Delete insns to set or use this slot.
	* stmt.c (declare_nonlocal_label): Create this stack slot.
	(expand_goto): Restore stack ptr from it.
	(expand_end_bindings, expand_decl): When setting stack ptr,
	store new value here.
	* expr.c (expand_builtin): Likewise, for alloca.
	* calls.c (expand_call): Likewise.

	* varasm.c (make_function_rtl): Rename nested functions for assembler.
	* c-decl.c (start_function): Clear TREE_PUBLIC for nested function.

	* tm-i860.h (*TRAMPOLINE*): Define macros.

	* i860.md (movdi): accept F source in 2nd alternative.
	Accept G source in 3rd.
	(adddi3, subdi3): Typo in opcode of output.

	* i860.md (indirect_jump): Added pattern.

	* c-decl.c (lookup_label): Shadow label if it's wrongly inherited.
	Set DECL_CONTEXT here, since nondeclared labels must be local.

Sun Oct  8 01:38:27 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* function.c (expand_function_start): Copy static chain to pseudo
	reg if chain is used.

	* tm-mips.h (ASM_SPEC): Pass -nocpp to as.

	* c-decl.c (grokdeclarator): Ignore variant differences
	when preserving typedef types from being altered.

	* Allow inner label scopes for ({...}).
	* c-decl.c (push_label_level, pop_label_level): New functions.
	* c-parse.y (stmt exprs): Call them.

	* c-decl.c (lookup_label): Set DECL-SOURCE-LINE to locus of reference.
	(poplevel): Use locus of reference in err msg for undef label.
	(define_label): Use DECL_INITIAL as flag that label has been defined.

	* function.c (expand_end_function): Delete nonlocal goto handlers
	if no nonlocal gotos are actually received.
	(delete_handlers): New function.

	* flow.c (find_basic_blocks): Treat blocks as reachable
	if headed by labels with LABEL_PRESERVE_P.
	(insn_dead_p): Don't delete insns to set the frame pointer or arg ptr.

	* m68k.md (indirect_jump): New pattern.

Sat Oct  7 00:46:18 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* c-decl.c (lookup_label): If label is nonlocal and wasn't declared so,
	report error and return 0.
	(shadow_label): New function.
	* c-parse.y (goto stmt): Handle 0 returned by lookup_label.
	(label_decl, label_decls): Parse forward-declarations of labels.
	(pushlevel): Allow label declarations at start of compound stmt.

	* rtl.h (LABEL_PRESERVE_P): New flag in CODE_LABEL.
	* jump.c (jump_optimize): Increment LABEL_NUSES if that flag is set.

	* stmt.c (any_pending_stack_level): New function.
	(expand_end_bindings): If block has stack level or cleanups,
	and this function has any nonlocal labels, make a nonlocal goto handler
	for the block, and put it in effect during the block.
	Set LABEL_PRESERVE_P on the handler's label.
	(expand_goto): For a nonlocal label, restore its stack frame
	and jump to current handler.

	* function.c: New var nonlocal_labels lists labels ok for nonlocal.
	Initted in init_function_start, pushed and popped with fcn context.
	* stmt.c (declare_nonlocal_label): Put a LABEL_DECL on this list.

	* output.h: Declare current_function_has_nonlocal_label
	and sdb_begin_function_line.
	* final.c: Don't declare them.

	* function.c (current_function_has_nonlocal_label): New var.
	(init_function_start): Init it.
	(push_function_context, pop...): Save and restore it.
	* flags.h: Declare current_function_has_nonlocal_label.
	* stmt.c (expand_goto): Set it if nonlocal label.
	* local-alloc.c (combine_regs): Don't tie call-crossing reg
	to a non-call-crossing reg, if receive nonlocal gotos.
	(block_alloc): Don't allocate pseudos that cross calls,
	if receive nonlocal gotos.
	* global-alloc.c (global_alloc): Don't even make an allocno for
	a reg that crosses calls, if receive nonlocal gotos.

	* function.c (init_function_start): Init function_call_count.
	(push_function_context, pop_...): Save and restore it.
	* calls.c (expand_call): Increment function_call_count.
	* stmt.c (expand_{start,end}_bindings): Use this var
	to determine whether there are any function calls in a block.
	No need for a nonlocal goto handler if block has no calls.

	* c-decl.c (define_label): Set DECL_CONTEXT.
	Maybe push label on shadowed_labels.
	(pop_c_function_context): Clear out labels in named_labels
	and reinstall those in shadowed_labels.
	Restore shadowed_labels.
	(push_c_function_context): Push shadowed_labels.
	(start_function): Clear shadowed_labels.

	* function.c: New file, split from stmt.c.

	* xm-mips.h: Use __builtin_alloca.

Fri Oct  6 00:30:42 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* jump.c (jump_optimize): Optimization of
	`if (...) x = 1; else {...}  if (x) ...' got sense wrong sometimes.

	* Makefile.in (stamp-gnulib2): depend on gcc, cc1, cpp via
	gnulib2-indirect.

	* tm-vax.h (TRAMPOLINE_SIZE,INITIALIZE_TRAMPOLINE,TRAMPOLINE_TEMPLATE):
	Define macros.

	* m68k.md (addsi3): Change ! to ? in lea alternatives.
	Put them before the add-to-register alternative.

	* reload.c (find_dummy_reload): Use PREFERRED_RELOAD_CLASS here
	as in push_reload, so we make accurate predictions.

	* c-decl.c (pushdecl): Don't set DECL_CONTEXT for function declaration
	that isn't a definition.

	* explow.c (fix_lexical_addr): Handle address that's just a base reg.

	* expr.c (expand_expr, case VAR_DECL): No need for static chain
	if var is static.

	* reload.c (find_equiv_reg): Do let xregno be a pseudo reg,
	but don't call HARD_REGNO_NREGS in that case.

	* local-alloc.c (combine_regs): Set reg_qty[sreg] even if it was <0.

	* c-decl.c (start_function): Clear named_labels.

Thu Oct  5 00:30:39 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* reload.c (find_equiv_reg): Don't let xregno be a non-hard reg.
	Don't do OVERLAPPING_REGNO_P on a pseudo reg number. 

	* Handle addresses of nested functions.
	* New tm macros TRAMPOLINE_SIZE, INITIALIZE_TRAMPOLINE,
	ALLOCATE_TRAMPOLINE, TRAMPOLINE_TEMPLATE.
	* expr.c (expand_expr, case ADDR_EXPR): Handle addresses of nested fns.
	* stmt.c (trampoline_address): New function.
	* varasm.c (assemble_trampoline_template): New function.

	* i386.md (trunchiqi2, etc.): Output %1 with size of destination.
	* out-i386.c (PRINT_REG): Support 'b' as CODE.

	* combine.c (try_distrib): Make sure we don't move a reg use
	across a store into that reg.

	* reload1.c (order_regs_for_reload): Rate fixed regs at LARGE+2,
	and explicitly used regs at LARGE+1.

	* stor-layout.c (layout_record): Support BIGGEST_FIELD_ALIGNMENT.
	* tm-vax.h (BIGGEST_FIELD_ALIGNMENT): Define it.
	(BIGGEST_ALIGNMENT): Now always 32.

	* stor-layout.c (build_int): When memoizing, make permanent nodes.

Wed Oct  4 19:40:37 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* xm-i860.h: Missing file added.

	* integrate.c (function_cannot_inline_p): Don't inline if > 100 bytes
	of stack space, unless declared inline.

Tue Oct  3 00:16:08 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* stmt.c (assign_outer_stack_local): New function.
	(put_var_into_stack): Allocate stack slot in fn the variable is in.

	* stmt.c (put_var_into_stack): If variable-size object is nonlocal,
	put the pseudo with its address into the stack.

	* calls.c: New file, split out from expr.c.
	(expand_call): Pass static chain if fn wants it.

	* Make put_var_into_stack handle vars of containing function.
	* stmt.c (put_var_into_stack): Find the rtl chains for the
	function that the variable belongs to.
	(fixup_var_refs): New args FIRST_INSN, STACK and RTL_EXPS.

	* Make DECL_CONTEXT the function a var is in, and set it right away.
	* c-decl.c (store_parm_decls): Use DECL_RESULT, not DECL_CONTEXT,
	as the flag for duplicate names or missing names.
	* c-decl.c (start_function): Don't set current_function_decl
	till after calling pushdecl.
	* c-decl.c (pushdecl): Set DECL_CONTEXT to current_function_decl.
	(poplevel): Used to set it here, to the LET_STMT.  Don't.
	* stmt.c (init_function_start): Test for a FUNCTION_DECL in
	DECL_CONTEXT, not for a LET_STMT.

	* c-parse.y (primary <- identifier): Set TREE_NONLOCAL if appro.
	Also call mark_addressable.

	* stmt.c (expand_function_start): Store static chain into stack frame.
	Fetch static chains of containing functions into pseudos.
	(lookup_static_chain): Moved here; and really does something.
	* expr.c (expand_expr): Handle nonlocal variable.
	* explow.c (fix_lexical_addr): New function.

	* out-i386.c (fp_pop_int): Use %L0 in fistp insn.

	* global-alloc (find_reg): Fix typo marking new hard reg conflicts.

	* stmt.c (pushcase, pushcase_range, expand_end_case):
	When warning about insns at start of case, don't mind NOTEs.

	* local-alloc.c (combine_regs):
	Transfer all pseudos from SREG's old qty to its new qty.

	* Support nested functions:
	* stmt.c (push_function_context, pop_function_context): New functions.
	* tree.c (save_tree_status, restore_tree_status): New functions.
	* stor-layout.c (save_storage_status, restore_storage_status): Ditto.
	* expr.c (save_expr_status, restore_expr_status): Ditto.
	* emit-rtl.c (save_emit_status, restore_emit_status): Ditto.
	* c-decl.c (push_c_function_context, pop_c_function_context): Ditto.
	(start_function, finish_function): New arg NESTED.
	* c-parse.y (nested_function, notype_nested_function): New nonterms.
	(decl): New alternative to use them.

	* tree.h: Declare lineno.
	* c-decl.c (finish_function): Don't expect lineno as arg.
	* c-parse.y (fndecl, *nested_function): Don't pass it.

	* expr.c (init_expr, expand_call): Delete may_call_alloca.
	* tm-m88k.h, tm-sparc.h, tm-spur.h: Use current_function_calls_alloca.
	* tm-mips.h: It wasn't really used; delete its declaration.

Mon Oct  2 16:26:33 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* reload1.c (emit_reload_insns): Reject any OLDEQUIV that is
	in use in any other reload of this insn.

	* expr.c (expand_call): Don't put on notes for const functions
	if there aren't real insns to hold them.

Sun Oct  1 19:50:59 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* integrate.c (expand_inline_function): Handle PARALLEL in CALL_INSNs
	when setting follows_call.

	* mips.md (call_value): Change to a straightforward define_insn
	with just one action--no PARALLEL.

	* i860.md (pfeq, pfgt and pfle patterns): Add f0 as 3rd arg.

	* integrate.c (save_for_inline): Don't delete NOTE_INSN_FUNCTION_END.

	* c-parse.y (simple_if): Return $$ as value of stmt_count.
	(stmt (if statement)): Warn if $$ was not incremented in the body.
	(stmt (else statement)): Likewise.
	(stmt): All alternatives except null statement increment stmt_count.

Fri Sep 29 08:56:30 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* regclass.c (reg_class_record): If move between CLASS and GENERAL_REGS
	is costly, charge that cost to GENERAL_REGS and its subclasses.
	* tm-alliant.h, tm-m68k.h (REGISTER_MOVE_COST): New macro.

	* regclass.c (regclass): When a reg is a parm equiv to a stack slot,
	decrease its memcost, since the insn to load it would go away.

	* global-alloc.c (find_reg): Rewrite two-pass hard reg preference code.
	Uses regs_used_so_far to avoid allocating a reg not used elsewhere
	in the first pass.  Also updates regs_used_so_far.
	(global_alloc): Initialize regs_used_so_far.

	* tm-next.h (LINK_SPEC): Typo for -Z option.  Don't pass -M option
	to ld, since that is for cpp.

	* Support -MD and -MMD options.
	* gcc.c (default_compilers): Pass them to cpp in special way.
	Don't inhibit compilation for them, only for -M and -MM.
	* cccp.c (main): Handle them like -M and -MM except take arg
	which is file name to write deps in.

	* toplev.c: #if 0 around everything for GDB_DEBUG.
	* symout.c: File removed from distribution.
	* Makefile.in: Don't try to compile or link it.

	* tm-hp9k320.h (ASM_FILE_START): Output a `version' pseudo-op.
	[! HPUX_ASM] (ASM_SPEC): Don't use the -V option.  Recognize -mc68000.
	(CALL_USED_REGISTERS): Redefinition deleted.  HPUX 6.5 doesn't need it.
	* tm-hp9k310.h, tm-hp9k310g.h: New files.

Thu Sep 28 12:57:11 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* stmt.c (pushcase, pushcase_range): Warn if code was emitted inside
	case stmt before 1st label is seen.
	(expand_start_case): New arg is string to use in that warning.
	(struct nesting): New fields printname and seenlabel.
	* c-typeck.c (c_expand_start_case): Pass new arg to expand_start_case.

	* gcc.c: Can now read compilation specs, and asm_spec (etc), from file.
	(cpp_spec, asm_spec, etc.): New variables, initted to corresp. macros.
	(do_spec_1, validate_all_switches): Use the variables, not the macros.
	(link_command_spec): New name for old link_spec.
	(compilers, n_compilers): Now a pointer, with size of vector ptd to.
	(default_compilers): New name for old `compilers' vector.
	(read_specs): Given file name, read specs and add to `compilers'.
	Also set cpp_spec, asm_spec, etc.
	(skip_whitespace): New subroutine.
	(main): Initialize `compilers' from `default_compilers'.
	Find a specs file and call read_specs.
	Search thru `compilers' from back to front.
	* Makefile.in (install): Use gcc -dumpspecs to write a specs file.

	* Support multiple installed compilers; find them by
	target machine and version.
	(STANDARD_EXEC_PREFIX): Change to `.../gcc/'.
	(standard_exec_prefix_1): Change to `.../gcc/'.
	(process_command): Options -b and -V set spec_machine, spec_version.
	Option -dumpspecs writes specs file to define cpp_spec, asm_spec, etc.
	Option -dumpversion writes version number.
	(main): Set machine_suffix from spec_machine and spec_version.
	* Makefile.in (libsubdir): New variable, made from libdir.
	(gcc.o): Define DEFAULT_TARGET_MACHINE macro in compilation.
	Change value of STANDARD_EXEC_PREFIX as above.
	(cccp.o): Use libsubdir.
	(install): Install files under $(libsubdir), after making that dir.

	* reload.c (decompose): Handle case of pseudo with no hard reg.

Wed Sep 27 01:20:36 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* global-alloc.c: #if 0 handling of REG_NO_CONFLICT notes.

	* c-typeck.c (build_c_cast): Implement cast to union type.

	* Edit the makefile automatically when necessary.
	* config.gcc: Produce Makefile by editing Makefile.in with sed.
	* Makefile.in: New name for file `Makefile'.
	Comments on editing the file deleted.
	* config/make-*: Various files are inserted by sed into Makefile.

	* Provide a way for languages to control printing of function names.
	* toplev.c (error, fatal, announce_function, etc.):
	Use value of decl_printable_name to compute what name to print.
	* stmt.c (init_function_start): Likewise.
	* toplev.c (main): Init that variable.
	(decl_name): New function, used by default.

	* explow.c (round_push): Fix typo: return fast if ALIGN is 1.

	* flow.c (dump_flow_info): Delete excess arg to fprintf.
	* gcc.c (fatal): Delete excess arg to delete_temp_files.

	* expr.c (convert_move): Handle absence of integer truncate insns
	by copying value to a reg (and then using subreg).

	* final.c (final_start_function): Do leaf-function register renumbering
	if that is defined for this machine.
	(leaf_renumber_regs, only_leaf_regs_used, leaf_function_p): New fns.

	* varasm.c (in_text_section): New function.
	* tm-3b1.h (ASM_OUTPUT_SKIP): Use that.

	* stmt.c (case_index_expr_type): New function.

	* c-parse.y (maybe_attribute): Don't fail to return a value.

Tue Sep 26 02:40:23 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* Do auto-increments for hard regs.
	* flow.c (mark_used_regs): Do set reg_next_use for hard regs.
	When making an auto-increment for a hard reg, don't mess with
	reg_n_refs or reg_n_sets.
	(try_pre_increment_1): Likewise.

	* gcc.c (compilers): -undef inhibits predefined symbols.

	* combine.c (subst): In case EQ, prefer ZERO_EXTRACT, not SIGN_EXTRACT.
	* vax.md (jbs, jbc patterns): Write with ZERO_EXTRACT.
	* m88k.md: Likewise.

	* Merge C++ changes in stmt.c:
	* Set up an obstack, stmt_obstack.
	(ALLOC_NESTING): Allocate a `struct nesting' on that.  Callers changed.
	(POPSTACK): Use the obstack.
	(init_stmt): New fn: init the obstack.
	(any_pending_cleanup): New fn.
	(expand_start_bindings): Leave outer_cleanups 0 if nothing in it.
	(expand_end_bindings): Preserve some global vars around cleanups.
	After cleanups, if no stack level to restore, do pending pops.
	(fixup_cleanups): Do pending pops after the cleanups.
	(expand_start_case): Don't output a NOTE if already have one.
	(assign_parms): Speed up sizetree computations in common case.
	(init_function_start): Use lang_printable_name for current_function_name.
	(expand_function_end): Don't set REG_FUNCTION_VALUE_P
	for a pseudo reg used to copy into the real return.
	* toplev.c (compile_file): Call init_stmt.

	* c-typeck.c (commontype): If one arg is error_mark_node, return other.

Mon Sep 25 12:13:07 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* optabs.c (expand_binop): Handle boolean ops on >SImode with
	several one-word insns.  Put out REG_EQUAL and REG_NO_CONFLICT notes.
	* global-alloc.c (global_conflicts): For each insn, record
	in no_conflict_pairs all the REG_NO_CONFLICT notes of the insn.
	(record_one_conflict): Don't mark a conflict between such a pair.
	* local-alloc.c (block_alloc): Do combine_regs on the sequences
	made by expand_binop for multi-word boolean ops.
	(combine_regs): New arg ALREADY_DEAD is 1 if UREG died prior to INSN.
	(no_conflict_p): New subroutine.
	* combine.c (try_combine): Move REG_NO_CONFLICT notes like REG_INC.
	* flow.c (life_analysis): Don't delete no-op moves
	if they carry REG_EQUAL notes.  These insns are needed later.
	* reload.c (find_dummy_reload): Use actual operands (which may be
	subregs) for most purposes, including checking for overlap.
	(hard_reg_set_here_p): Handle a range of regnos, not just one.

	* loop.c (move_movables): Use special techniques to move regs
	used for zero-extension.  Don't combine matching regs; instead,
	just record them in pairs in regs_may_share.
	* global-alloc.c (global_alloc): Digest regs_may_share into a
	vector, reg_may_share.  Then assign matching regs the same allocno.
	(global_alloc): Initialize allocno_n_refs, allocno_live_length,
	allocno_calls_crossed.
	(allocno_compare): Use those new vectors; don't use allocno_reg.
	(find_reg): Use those new vectors.
	Assign hard reg to all the pseudos that share the allocno.

	* jump.c (jump_optimize): Two new cases simplify jumping to or
	falling into a test-and-branch after setting the register being tested.
	* jump.c (get_label_before, get_label_after): New functions.
	(do_cross_jump): Use get_label_before.

Sun Sep 24 00:21:24 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* gnulib2.c (__fixunsdfsi): Defined here, not in gnulib.c.
	* Makefile (LIBFUNCS, LIB2FUNCS): Corresponding change.

	* tm-i860.h (SDB_DEBUGGING_INFO): Define this, not SDB_...

	* gcc.c (link_spec): Don't specify -lg.
	* tm-alliant.h, tm-convex.h, tm-hp9k3bsd.h, tm-isi68.h, tm-news.h
	* tm-pyr.h, tm-seq386.h, tm-sequent.h, tm-sparc.h, tm-spur.h
	* tm-sun2.h, tm-sun3.h, tm-sun386i.h, tm-tahoe.h, tm-vax.h:
	Make LIB_SPEC link with -lg.
	* tm-harris.h, tm-vaxv.h, tm-vms.h: Turn off inherited LIB_SPEC.

	* recog.h (insn_*): Declare these tables `const'.
	(const): Define this as nothing, if not __STDC__.
	* expr.h (insn_gen_function): Declare `const'.
	(const): Define this as nothing, if not __STDC__.
	* genoutput.c (main): In insn-output.c, don't define `const' if
	already defined.

	* recog.c (offsettable_nonstrict_memref_p): New function.
	* stmt.c (fixup_var_refs_1): Use that, not offsettable_memref_p.
	* reload.c (find_reloads): Likewise.

	* integrate.c (save_for_inline): Set in_nonparm_insns when arrive
	at the first nonparm insn.
	(copy_for_inline): Set TREE_READONLY only if in_nonparm_insns.

	* Makefile (float.h): Make hard-params an ordinary dependency.

	* c-decl.c (poplevel): When popping a local extern decl,
	save the TREE_USED bit in the identifier.
	* toplev.c (compile_file): Check that, printing "not used" warnings.

	* c-parse.y (init_lex): Discard undesired reserved words from table.
	(yylex): No need to check for them at lookup time.

	* tree.c (make_node): Always put PARM_DECL in saveable_obstack.

	* toplev.c (floor_log2, exact_log2): Rewritten for speed.

	* tree.c (listify): New function.

	* c-typeck.c (convert_for_assignment): New args for function being
	called and argument number.  Used in error messages.
	(actualparameterlist): Pass those args usefully.
	(wrn_for_assignment): New function.

	* loop.c (general_induction_var): Handle give copied from a biv.

	* i386.md (div*i3, udiv*i3): New patterns.
	(divmodhi4, udivmodhi4): New patterns.

	* combine.c (subst):
	Simplify (sign_extend:M (subreg:N (lshiftrt:M REG CONST) 0))
	when REG was assigned from (zero_extend:M (any:N ...)).
	Make the similar (zero_extend:M ...) case share code.

	* expr.c (store_field): A frame-pointer-relative address is stable.

	* expr.c (expand_expr): Effectively pass on IGNORE for 2nd op of comma.

Sun Sep 24 00:21:24 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* Version 1.36 released.

	* genextract.c (main): Pass `insn' as arg to `fatal_insn_not_found'.

	* tahoe.md (casel patterns): Use %@ for operand of .align.
	* tm-tahoe.h (PRINT_OPERAND): %@ prints `1'.
	* tm-harris.h (PRINT_OPERAND): Redefine it; %@ prints `2'.

	* config.gcc (decstation): New entry.

	* tm-harris.h: New file, using tm-tahoe.h.

	* tm-decstatn.h, tm-mips-bsd.h, tm-mips-sysv.h: New files.

Sat Sep 23 00:28:14 1989  Alain Lichnewsky  (lich at glenlivet)

	* added -Zxxx flag in tm-mips.h. (-Z stands for systype)

	  used as -ZSYSV or -ZBSD43 on RISC_OS. I suppose
	  that at somepoint -ZPOSIX might be required for Ultrix. 

	* changed command issued to loader to set -systype and to get
          crt1 crtn instead of crt0.

        * changed predefines for cpp to agree with RISC-OS

	* tm-mips.h checks for machine type ( defined(ultrix) == DECSTATION)
	  so that user does not have to go in and change tm-mips.h anymore

	* cpp defines mips host_mips unix and SYSTYPE_SYSV
	  or SYSTYPE_BSD43. 

Fri Sep 22 00:31:29 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* pyr.md (andsi3): Flush spurious paren.

	* Makefile (hard-params): Don't use LIBS or LIBDEPS.

	* rtl.c (init_rtl):
	Use malloc to allocate the string for format of CONST_DOUBLE.
	Don't fail to store in rtx_format.

Thu Sep 21 00:33:13 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* print-tree.c (dump): Move decl of P in REAL_CST case.

	* fold-const.c (fold): For ABS_EXPR, handle REAL_IS_NOT_DOUBLE.

	* c-convert.c (convert_to_real): Use REAL_VALUE_ATOF to make 0.

	* mips.md (movdi): Handle constant with or without WORDS_BIG_ENDIAN.
	For alternative 2, output just 2 store insns, not 3.

	* dbxout.c (dbxout_symbol): Optionally go to .data for
	a static file-scope variable.
	* tm-vax.h: Define DBX_STATIC_STAB_DATA_SECTION to request this.

	* varasm.c (output_constant, force_const_mem):
	ASM_OUTPUT_DOUBLE_INT now takes rtx as argument.

	* gvarargs.h [__NeXT__]: Undefine macros defined by stdardg.h.
	Define _VARARGS_H.

	* stddef.h (size_t): Don't define it if _SIZE_T macro is defined.
	(NULL): Undef any previous defn.

	* cexp.y (NULL): Don't define if already defined.

	* emit-rtl.c (force_next_line_note): New function.
	* stmt.c (expand_function_start): Call that just before returning.

Wed Sep 20 01:22:16 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* c-parse.y (asm_clobbers):
	Allow string concatenation: call combine_strings.

Mon Sep 18 00:04:06 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* expr.c (expand_call): If calling const function, don't defer
	pops for this call.

	* c-parse.y (yylex): When float constant ends in `f',
	actually truncate to a single-float.

Sun Sep 17 01:36:43 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* gcc.c (SWITCH_TAKES_ARG): -A takes an arg.
	(link_spec): Inhibit start files when -A.

	* convex.md (call, call_value): Supply dummy arg to RETURN_POPS_ARGS.

	* gnulib2.c (__fixunsdfdi): After removing top half, A can be neg.
	(__cmpdi2, __ucmpdi2): Was misusing macros HIGH and LOW--
	use .s.high and .s.low to extract words from long_long.

	* Makefile (gnulib2): Run `./gcc'.

	* Makefile (float.h): Use `make', not `$(MAKE)'.
	(hard-params.o): Use `$(srcdir)' in deps as in commands.

	* out-tahoe.c (output_move_double): Handle constant operand 1.

Sat Sep 16 01:15:24 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* reload1.c (emit_reload_insns): Put death note for input reload reg
	even if reload was inherited.

	* out-i860.c (output_block_move): Typo loading size of block.

	* m68k.md (dbra patterns): Do CC_STATUS_INIT.

	* cse.c (fold_rtx): Check GET_MODE_CLASS before floating negate.

Fri Sep 15 00:39:44 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* combine.c (subst): Don't combine (subreg (mem))
	if subreg's mode is wider than mem's mode.

Thu Sep 14 04:33:51 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* Makefile (clean): Delete temp files used in making gnulib.

	* tm-next.h (LINK_SPEC): Pass -Z and -seglinkedit options.

Tue Sep 12 01:06:39 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* stor-layout.c (layout_type): Ignore MAX_FIXED_MODE_SIZE for ints.

	* mips.md (cmpsi + bleu peephole): Should output unsigned insn.

	* expmed.c (store_bit_field, extract_bit_field): If loading mem
	into reg for bit field insn, don't use a larger mode than insn wants.

	* Makefile (stamp-gnulib2): Depend on gcc, cc1, cpp to avoid
	wrong order of making when parallel.

	* Makefile (float.h): Do use $(MAKE) to run recursive make.

Mon Sep 11 00:49:11 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* cccp.c (main): Test for missing arg after -o, etc.

	* tm-next.h: Nearly completely new.

	* gcc.c (SWITCH_TAKES_ARG, WORD_SWITCH_TAKES_ARG): Move after config.h.

	* cccp.c: Cast some args to strcpy and strcat.

	* genoutput.c (error): Declare arg S.

	* tm-pyr.h, pyr.md, out-pyr.c, xm-pyr.h: New files.
	* config.gcc: New item for pyr.

	* gvarargs.h: If __pyr__, use va-pyr.h.

Sun Sep 10 00:48:43 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* reload1.c (inc_for_reload): Really return the first of the insns.

	* stor-layout.c (build_int): Memoize size nodes for sizes <= 32.

	* loop.c (check_dbra_loop): Don't reverse a biv that is used
	in between its update and the loop endtest insn.

Sat Sep  9 02:10:49 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* stor-layout.c (genop): Don't use `combine' for nonexplicit constants.
	Handle some identity elements, etc., directly.
	(layout_basetypes): Function deleted.
	(layout_record): Ignore any TYPE_DECLs in the fieldlist.
	Don't do PCC_BUTFIELD_TYPE_MATTERS hack on field with ERROR_MARK type.
	(layout_union): Delete error check for base types.
	Ignore any TYPE_DECLs in the fieldlist.
	(layout_type): Copy layout info directly into all variants of type.
	Delete unused local `x'.

	* mips.md (movdi): Handle constant source operand.
	(movsi): Some output code moved to output_load_immediate.
	* out-mips.c (output_load_immediate): New function.

	* config.gcc (iris): Use tm-iris.h and xm-iris.h.

	* integrate.c (copy_for_inline): Copy all nonconstant MEM addresses.

	* tm-3b1.h (ASM_OUTPUT_SPACE): New override defn, to output explicit
	bytes of 0 if in text segment.

Fri Sep  8 19:15:08 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* combine.c (try_combine): Don't do i3dest stuff if i3 isn't a SET.

Thu Sep  7 00:16:32 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* integrate.c (function_cannot_inline_p): Fn is "not even close"
	only if > 3 * max_insns.

	* toplev.c (fatal_insn_not_found): New fn.
	* genextract.c (main): Make insn_extract call that fn.

	* integrate.c (expand_inline_function): Don't abort about bad offset
	in a parm whose type is error_mark_node.
	Make another syntax level to hold parm destructors.

	* tm-mips.h (FUNCTION_PROLOGUE, FUNCTION_EPILOGUE):
	Increment push_loc after, not before, each reg save or restore.
	When storing reg 9 or 29, use offset tsize-4.
	Make tsize larger by 4 initially.
	(STARTING_FRAME_OFFSET): -8, not -4.

	* gcc.c (choose_temp_base): Make use of TMPDIR and P_tmpdir
	if they exist.

	* toplev.c, gcc.c, cccp.c, gen*.c (fancy_abort):
	New function which can be used to replace `abort'.

	* toplev.c (main): Save argv, argc in save_argv, save_argc.

	* jump.c (delete_insn): Always advance NEXT across deleted insns,
	in case not optimizing.  Fixes setting current_function_returns_null.

	* symout.c: Include stddef.h with <...>.

Wed Sep  6 00:39:35 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* gcc.c (find_exec_file): Was using `argbuf[0]' where wanted `prog'.

	* combine.c (combine_instructions): Dont call record_dead_and_set_regs
	if insn has become a NOTE.

	* reload.c (combine_reloads): Update reload_when_needed.

	* jump.c (delete_insn): If delete label on ADDR_VEC, delete table too.
	(jump_optimize): If ADDR_DIFF_VEC label has 1 ref, delete it and table.

	* gunlib2.c (__fixunsdfdi, __floatdfdi): Make the long long,
	and/or its two halves, unsigned.

	* reload1.c (reload): When setting double_reg_address_ok,
	require it to be offsettable.
	* out-sparc.c (output_fp_move_double): Now safe to use std
	for all reg+reg addresses.

	* vax.md: Add another simplified-casesi pattern for operand 0 constant.

	* cse.c (fold_rtx): Don't truncate VAL at end if WIDTH is 0.
	Don't alter WIDTH for that purpose based on the operands.

	* stmt.c (warn_if_unused_value): && or || is ok if 2nd op has effect.

	* c-parse.y (ALIGNOF unary_expr): Find a larger value if possible.

	* reload.c (combine_reloads): Don't combine an output address reload.
	(find_reloads): Call combine_reloads after setting reload_when_needed.
	(find_reloads_address): Update OPERAND if copy the operand.

	* cccp.c (macroexpand): Missing arg no error in 1-arg macro if -trad.

Tue Sep  5 14:12:23 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* reload.c (find_dummy_reload): Don't use the output reg if it is
	a fixed reg which can overlap with other regs.

	* cse.c (exp_equiv_p): Two vectors must have same length.

	* tree.def (WITH_CLEANUP_EXPR): Print-name string was wrong.

	* optabs.c (expand_fix): Undo previous change (unsigned conversion).
	It doesn't work.

	* gcc.c: Pass -i option to cpp.  It takes an arg.

	* cccp.c (cplusplus_include_defaults) [VMS]: Typo in array indices.

	* Makefile (gnulib): Create it in tmpgnulib, then rename at the end.

	* i860.md (movdi from constant pattern): Fix `st' opcode typos.

	* Makefile (hard-params*): Use CCLIBFLAGS, not CFLAGS.

Fri Sep  1 03:43:50 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* tm-i386gas.h (ASM_OUTPUT_ALIGN): .align arg isn't a log, in gas.
	(ASM_OUTPUT_ALIGN_CODE): Align labels, etc. to 4-byte boundary.

	* integrate.c (save_for_inline): Delete NOTE_INSN_DELETED notes.

	* Makefile (clean): Delete dbr and jump2 dumps.

	* Makefile (gnulib, gnulib2): Compile in main dir, not libtemp subdir.
	This avoids trouble with -I options, etc.

Thu Aug 31 15:07:19 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* reload1.c (emit_reload_insns):
	Be specific moving REG_DEAD notes to an output reload.
	Sometimes move them to output-operand-address reloads.

	* out-sparc.c (output_fp_move_double): Very cautious about std.
	Use it only for something visibly aligned, or for an array element.

	* cccp.c (main) [VMS]: Remove dirs and extension from PROGNAME.
	(pfatal_with_name) [VMS]: Return VMS system call error code as status.
	(cplusplus_include_defaults) [VMS]: Add GNU_GXX_INCLUDE.

	* xm-vms.h (FATAL_EXIT_CODE): Now (44 | 0x10000000).

	* expr.c (do_store_flag): Allow more values of STORE_FLAG_VALUE.

	* gnulib2.c (__fixunsdfdi): Explicitly cast doubles to `long int'
	to avoid infinite recursion.

Wed Aug 30 13:28:54 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* loop.c (skip_consec_insns): Skip NOTEs.

	* loop.c (general_induction_var): If G or V is a nonreplaceable giv,
	give up.  If G is allocated here, consider it replaceable.

	* stupid.c: Make uid_suid, reg_where_born and reg_where_dead
	vectors of ints, not short.

Tue Aug 29 00:21:13 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* tm-iris.h: Fix typo in formfeed char.

	* out-i860.c (singlemove_string): Add missing `.l' to `st', `ld'.

	* loop.c (general_induction_var): Don't set G from 2nd op. of MINUS,
	since that would negate the result.

Mon Aug 28 00:16:36 1989  Richard Stallman  (rms at apple-gunkies.ai.mit.edu)

	* dbxout.c (dbxout_symbol): When we need a pointer type, don't
	record it in TYPE_POINTER_TO, lest it not live as long as its target.

	* tm-hp9k320.h (CPP_PREDEFINES): Delete __hp9000s300 and _HPUX_SOURCE.

	* Makefile (gnulib): Deleted stamp-gnulib2 in wrong dir.
	(hard-params.o): Copy it into current dir before compiling.
	(STAGESTUFF): Include the stamp-*.[ch] files.

Sun Aug 27 13:59:39 1989  Richard Stallman  (rms at apple-gunkies.ai.mit.edu)

	* out-i860.c (output_size_for_block_move): Typo in CC_KNOW_HI_R31.

	* integrate.c (expand_inline_function): Ignore insns to set value reg
	if we don't want the value.

	* varasm.c (make_function_rtl, make_decl_rtl): Use DECL_ASSEMBLER_NAME.

	* Makefile (stamp-gnulib2): Don't explicitly delete old members,
	just replace them.

	* m68k.md, alliant.md (trunchiqi): Use movew if moving from memory
	or from a const_int.

	* integrate.c (expand_inline_function): Set first_parm_offset
	later on, after computing the args, in case those args
	contain inline function calls.

	* alliant.md (movqi): Like recent change in m68k.md.

Sat Aug 26 00:26:03 1989  Richard Stallman  (rms at apple-gunkies.ai.mit.edu)

	* tm-hp9k320.h (CPP_PREDEFINES): Take out m68k and mc68000.
	* tm-news.h (CPP_PREDEFINES): Add mc68000.

Fri Aug 25 15:37:35 1989  Richard Stallman  (rms at apple-gunkies.ai.mit.edu)

	* optabs.c (expand_fix): Can convert to unsigned int
	by subtracting 2**(N-1), converting to signed, and adding 2**(N-1).

	* reload.c (find_reloads_address): For out-of-range stack slot,
	reload the displacement into a reg.
	(find_reloads_toplev): For subreg of a reg with a reg_equiv_address,
	turn the whole thing into a memref.

Thu Aug 24 14:07:03 1989  Richard Stallman  (rms at apple-gunkies.ai.mit.edu)

	* c-decl.c (grokdeclarator): If function is declared `extern inline',
	set current_extern_inline.
	(start_function): In that case, set TREE_EXTERN in function decl.
	* toplev.c (rest_of_compilation): In that case, don't really compile.
	(compile_file): Don't output such functions at the end either.

	* c-typeck.c (build_function_call): Do set NAME if we have one.

	* Prevent any variability in results of qsort.
	* stupid.c (stupid_reg_compare): Compare by regno as last resort.
	* global-alloc.c (allocno_compare): Same idea.
	* local-alloc.c (qty_compare_1): Same idea.
	* reload1.c (hard_reg_use_compare, reload_reg_class_lower): Same idea.

	* cccp.c (macroexpand): If read one arg, but it's whitespace,
	consider that 0 args for checking number of args.
	Improve plurals in error messages.

	* expr.h (inhibit_defer_pop): New name for current_args_size,
	now declared here.
	(NO_DEFER_POP, OK_DEFER_POP): Moved here.
	* expr.c: Names related to current_args_size renamed.
	(clear_current_args_size): Deleted.
	* stmt.c (expand_function_start): Init inhibit_defer_pop here.

	* stmt.c (expand_start_stmt_expr): Do NO_DEFER_POP.
	(expand_end_stmt_expr): Do OK_DEFER_POP, and don't do deferred pops.

	* Makefile (c-parse.tab.c): Pass -o option to Bison.

Wed Aug 23 23:14:06 1989  Richard Stallman  (rms at apple-gunkies.ai.mit.edu)

	* expmed.c (store_bit_field, extract_bit_field):
	Use GET_MODE_WIDER_MODE to scan possible modes for bestmode.

	* Makefile (stamp-gnulib2): Discard error messages from `ar d'.

Tue Aug 22 00:31:51 1989  Richard Stallman  (rms at apple-gunkies.ai.mit.edu)

	* final.c (output_source_line): In COFF, don't output `.ln 0'.

	* Makefile (stamp-gnulib2): Depend on gnulib.  For parallel make.

	* stmt.c (uninitialized_vars_warning): Don't crash if DECL_RTL is 0.

	* i386.md (truncdfsf2): Pay attention whether stack top is dead.

Mon Aug 21 22:02:40 1989  Richard Stallman  (rms at apple-gunkies.ai.mit.edu)

	* reload1.c (choose_reload_regs): Don't use regno uninitialized,
	in the code that does find_equiv_reg.

Sun Aug 20 00:06:47 1989  Richard Stallman  (rms at apple-gunkies.ai.mit.edu)

	* m68k.md (movqi): Was outputting bad code for areg->mem and mem->areg.

	* explow.c (memory_address): Handle a hard reg in wrong reg class.

	* stmt.c (expand_function_end): Set REG_FUNCTION_VALUE_P in return
	reg when returning address of structure value block.

	* integrate.c (save_for_inline): Preserve integrated bit on insns.

Sat Aug 19 14:20:07 1989  Richard Stallman  (rms at apple-gunkies.ai.mit.edu)

	* combine.c (subst): Don't change (subreg:M (mem:N ...)) to 
	(mem:M ...) if address is mode-dependent.

	* config.gcc: Copy and alter Makefile for any srcdir except `.'.
	In that case, make a .gdbinit as well.

	* sparc.md (andcbsi3, iorcbsi3, xorcbsi3): These are not commutative.

	* vax.md (cmpv and cmpzv patterns): Use COMPARE, not MINUS.

Fri Aug 18 12:24:52 1989  Richard Stallman  (rms at hobbes.ai.mit.edu)

	* alliant.md (movqi): Change move to mov in assembler code.

	* integrate.c (expand_inline_function):
	Handle args passed in regs and copied to slots reached via arg ptr.

	* out-sparc.c (output_delayed_branch):
	Do alter_subreg on operands of delay insn.

	* reload1.c (choose_reload_regs): Look for a reg to share
	before one that we won't share.

	* expr.h: Define OPTAB_MUST_WIDEN.
	* optabs.c (expand_binop): Handle that case.
	* expmed.c (expand_shift): Use that when widening lshift to ashift.

	* optabs.c (emit_cmp_insn): Use CONST0_RTX, not individual vars.

	* gnulib2.c (lsh*di3, ash*di3): Return right away if count is zero.
	Otherwise tried to shift by 32.
	Also replace constant 32 by something symbolic.

	* final.c (output_source_line): Output line number in COFF
	even if wrong file.

Thu Aug 17 15:16:34 1989  Richard Stallman  (rms at hobbes.ai.mit.edu)

	* Makefile (version.o): Make this a target; specify source file.
	(obstack.o): Likewise.

	* config.gcc (i860): New alternative.

	* i860.md (movstrsi): Record the alignment as operand 3.
	Renumber following (internal) operands.
	* out-i860.c (output_block_move): Rewrite as in out-sparc.c.
	(output_size_for_block_move): Likewise.  And don't
	subtract alignment from the size.

Wed Aug 16 13:27:12 1989  Richard Stallman  (rms at hobbes.ai.mit.edu)

	* loop.c (combine_movables): Don't combine zero-extend
	registers that live outside the loop.

	* integrate.c (expand_inline_function): Use copy_to_mode_reg
	to set up this_struct_value_rtx, to handle sums right.

	* Makefile: Use $(srcdir) in bison output files used as deps.
	Supply some missing deps.
	(*.info, doc): *.info files go in srcdir.

Tue Aug 15 00:11:12 1989  Richard Stallman  (rms at hobbes.ai.mit.edu)

	* i860.md, tm-i860.h, out-i860.c: New files.

	* c-decl.c (duplicate_decls): Fix bug determining whether NEWDECL
	is a definition or just a decl.
	Combine code to preserve various things from old definition
	through a declaration.

	* config.gcc: Scan all args at beginning, setting variables.
	Arg of form -srcdir=... sets srcdir explicitly.
	srcdir now doesn't contain a slash, and is used with a slash.

	* Makefile (install): Copy header files and gcc.1 from srcdir.
	But copy float.h from current dir.  (Remove that from USER_H.)
	(various): Use new variable INCLUDES to get the -I options.
	Add -I. at the beginning of these.
	(gnulib, gnulib2): Likewise, use SUBDIR_INCLUDES.
	Also, get source file from srcdir.
	Also, depend on $(CONFIG_H).
	(alloca.o): Get alloca.c from srcdir.

	* reload1.c (emit_reload_insns): Bug in last change:
	don't fail to set this_reload_insn.

	* Makefile (Bison rules): Specify $(srcdir) for target and source.
	(Explicit C rules): Specify $(srcdir)/ for source in commands.
	Use sed to eliminate `./' in normal case.
	(insn-*.c): Use $(srcdir) to run move-if-change.

	* config.gcc: Check . and .. for the sources.
	If in .., use that when making links.
	Also, copy Makefile, alter srcdir in it, and add a VPATH.	

	* stmt.c (expand_end_case): When converting CONST_INT index
	to an INTEGER_CST, sign-extend if signed type.

Mon Aug 14 13:51:08 1989  Richard Stallman  (rms at hobbes.ai.mit.edu)

	* c-decl.c (duplicate_decls): Warn for qualifier mismatch
	only if pedantic; don't consider it a type mismatch.
	Merge the qualifiers of the two decls if the types match.

	* expmed.c (store_bit_field): For insv, memref displacement
	always counts in bytes, regardless of unit fetched.
	When checking predicate of op0, accept any mode.

	* optabs.c (expand_float): One call to can_float_p had args backwards.

	* loop.c (check_dbra_loop): Set the JUMP_LABEL of the new jump insn.
	Increment label's use count rather than storing 2.

	* Makefile: Instead of $<, which fails in certain makes,
	use $@ and then substitute in the name with sed.

	* out-sparc.c (output_scc_insn): Handle CC_REVERSED for ordered tests.
	Use orcc insns to store the result and set cc's for it.

	* sparc.md (scc combination patterns):
	Use operands[0] as basis for recorded cc value.

	* gnulib2.c (floatdidf, fixdfdi, fixunsdfdi): New functions.

	* gnulib.c (floatdidf, fixdfdi, fixunsdfdi): Deleted.
	(union longlong, union double_di): Deleted.
	(HIGH, LOW): Deleted.
	These were deleted because most did not handle full range of DI
	and they didn't use the right calling convention for DI.

Sun Aug 13 13:06:45 1989  Richard Stallman  (rms at hobbes.ai.mit.edu)

	* c-typeck.c (comptypes): Qualifiers must match.
	(Was already true for scalars.)
	Also, array elt qualifiers must match.

	* tm-apollo68.h (STRUCT_VALUE): Make it 0.
	(This was done before and lost.)
	* out-i386.c (function_epilogue): Use ret $4 to pop structure address.
	(This was done before and lost.)

	* out-i386.c (call_top_dead_p): Don't fail to check
	the rtx code of the insns themselves.
	(This was done before and lost.)

	* out-sparc.c (output_block_move): If align is 8, make it 4.

	* typeclass.h: New file.
	* expr.c: Include it.
	(expand_builtin): Use those codes in __builtin_classify_type.

	* Makefile (all, lang-c): Reinstall gnulib2.

	* Makefile (gnulib2): Don't give up if `ar d' fails.

	* expr.c (emit_library_call): New 2nd arg NO_QUEUE.
	All callers changed to pass it.
	* optabs.c (expand_binop, expand_unop): Don't call emit_queue.
	Instead, pass 1 for NO_QUEUE to emit_library_call.

Sat Aug 12 12:05:22 1989  Richard Stallman  (rms at hobbes.ai.mit.edu)

	* reload1.c (emit_reload_insns): Decision for where to put input
	reload insn is now common to ordinary case and auto-increment.
	Likewise, updating these positions afterward.

	* stmt.c (assign_parms): Treat last named arg as nameless.
	* expr.c (expand_call): Likewise.

	* explow.c (copy_to_mode_reg): Use force_operand for PLUS or MULT.
	(copy_addr_to_reg): Use copy_to_mode_reg.

	* expmed.c (store_bit_field): Handle case where insv rejects memrefs.

	* tm-convex.h (ASM_OUTPUT_ALIGN): Magic to handle the fact
	that this is not called when LOG is 0.

Fri Aug 11 16:39:51 1989  Richard Stallman  (rms at hobbes.ai.mit.edu)

	* emit-rtl.c (get_lowpart): For multi-word, in error check,
	test the unit size of the containing mode.

	* cccp.c (macroexpand, dump_all_macros): Return void.
	(macroexpand): Cast sprintf arg to char*.
	(error, warning, error_with_line): Declare first arg char*.

Thu Aug 10 21:42:13 1989  Richard Stallman  (rms at hobbes.ai.mit.edu)

	* expr.c (expand_call):
	Use force_operand to copy arithmetic to register.

	* dbxout.c (dbxout_symbol): Go back to N_FUN for const variable.

	* integrate.c (expand_inline_function): Use proper machine mode
	for a structure value in memory at address passed by caller.

Wed Aug  9 15:21:36 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* config.gcc: Delete unnecessary variable assignments in case stmt.
	(isi68-nfp): New alternative.

	* combine.c (try_combine): Don't substitute for a register
	which is being explicitly clobbered.

	* This change was requested for C++.
	* varasm.c (decode_reg_name, make_decl_rtl): Arg ASMSPEC now char *.
	* toplev.c (rest_of_decl_compilation): Likewise.
	* c-decl.c (finish_decl): Change call to rest_of_decl_compilation.

	* tree.h (struct tree_decl): Pack machine_mode into 8 bits.

	* explow.c (memory_address, copy_to_reg):
	Use force_operand to copy arithmetic to register.

	* tm-isi68-nfp.h: New file.
	* tm-isi68.h: Allow overriding TARGET_DEFAULT, and let that
	change CPP_SPEC and LINK_SPEC.
	(ASM_FILE_START): No `.globl fltused' if soft-float.

Tue Aug  8 21:50:52 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* varasm.c (const_hash): For constructor, mask TREE_TYPE to HASHBITS
	bits and take modulo, so we don't get negative numbers.

	* varasm.c (record_constant_1, compare_constant_1):
	Record and compare the width of an integer.

	* varasm.c (assemble_function, assemble_variable, get_or_assign_label):
	(force_const_mem): Don't call ASM_OUTPUT_ALIGN if boundary is 1.

	* c-decl.c (duplicate_decls): Consider const and volatile as part of
	type when checking for match and when installing new type into OLDDECL.

	* expr.c (do_store_flag): Make sure target fits operand predicate.
	Also, omit the AND insn when true-value is 1
	and the mode we get is wider than the one we want.

	* genrecog.c (main): Make insn-recog.c include real.h.

Mon Aug  7 16:58:56 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* genemit.c (main): Define `operands' as `emit_operands',
	not `recog_operands'.

	* reload1.c (emit_reload_insns): Don't copy back a dead output reg.

Sun Aug  6 13:56:53 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* sdbout.c (plain_type_1, sdbout_one_type): Use the main variant.
	(sdbout_type_fields): No need to check TREE_ASM_WRITTEN here,
	since sdbout_one_type does that.

	* expr.c (do_store_flag): Ensure the CLOBBER doesn't clobber an input.

	* fold-const.c (fold_convert): Attempt to avoid overflow
	when converting real to integer.  Use unsigned conversion for
	low part; always convert as positive and then change sign;
	subtract high part before converting low part.
	Also, check for real values out of range for chosen int type;
	warn and do not convert.

	* tm-hp9k320.h (CPP_SPEC) [not HPUX_ASM]: Don't define mc68000 here.
	(CPP_PREDEFINES): Remove mc68k, add m68k and mc68000.
	[HPUX_ASM]: Define CPP_SPEC here as in the other case,
	but add __HPUX_ASM__ to each alternative.

	* tm-m68k.h (FUNCTION_EPILOGUE): Call new hook FUNCTION_EXTRA_EPILOGUE.
	* tm-altos3068.h (FUNCTION_EXTRA_EPILOGUE): Define it.

	* Makefile: Use $< wherever appropriate.
	Also put definitions of customization vars before the comments
	saying how to override them.

Sat Aug  5 14:15:39 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* i386.md (sne): Typo in opcode name.

	* tree.h (struct tree_identifier): Delete redundant/unused error_locus.

Fri Aug  4 00:04:10 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* varasm.c (const_hash, compare_constant_1, record_constant_1):
	Compare types only for record constructors, not for array constructors.

	* dbxout.c (dbxout_parms): When outputing parm from home in local slot,
	with address from the RTL, don't do big-endian correction on it.

	* c-typeck.c (build_unary_op): Do default conversion for unary +.

	* cccp.c (rescan): Accept comments between macro and its args.

	* c-decl.c (lang_decode_option): -traditional implies writable strings.

	* cccp.c (trigraph_pcp): Make warning msg more accurate.

	* c-typeck.c (c_expand_asm_operands): Delete the default promotion
	which was inserted mysteriously since 1.35.

	* global-alloc.c (global_conflicts): Allocate regs_set only once.
	Make it twice as big since clobbers are stored twice.

	* sparc.md (block move patterns): Record and use alignment operand.
	* out-sparc.c (output_block_move): Get alignment from there.
	(output_size_for_block_move): Greatly simplified.

	* tm-i386v.h (PCC_BITFIELD_TYPE_MATTERS): Define it.

	* stor-layout.c (layout_record): Anonymous bitfields don't affect
	overall structure alignment, in PCC_BITFIELD_TYPE_MATTERS case.

	* loop.c (strength_reduce): Prevent hard reg from becoming biv or giv.

	* combine.c (subst): Simplify (eq (neg ...) (const_int 0)).

Thu Aug  3 13:08:05 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* cse.c (fold_rtx): For (op var const) special cases, also check 
	for constant as first argument.

	* c-decl.c (pushtag): For global_binding_level, make permanent nodes.

	* expr.c (do_store_flag): Put the CLOBBER before the comparison.

	* expr.c (emit_push_insn): Conditionalize recent changes
	on no FIRST_PARM_CALLER_OFFSET, so they don't happen on sparc.

	* out-sparc.c (gen_scc_insn):
	Don't be confused by CLOBBER emitted by do_store_flag.
	Skip past such insns looking for last_insn.
	Don't alter last_insn; instead, patch it to a NOTE and emit new insn.

	* varasm.c (const_hash, compare_constant_1, record_constant_1):
	For a CONSTRUCTOR, hash/compare/record type as well as elts.

	* cse.c (cse_insn): July 18 change was wrong.
	Now, invalidate at the beginning any regs explicitly clobbered
	so they will not be substituted for if they appear as inputs.
	* sparc.md (movstrsi): Copy addresses to temp regs, then use them.

	* loop.c (record_giv): When comparing life spans for setting
	->forces, use luids consistently, not uids.

	* sparc.md (ashlsi3, ashrsi3, lshrsi3): Truncate constants mod 32.

Wed Aug  2 17:50:30 1989  Richard Stallman  (rms at sugar-bombs)

	* mips.md (patterns to move a subreg): Deleted.

Sun Jul 30 19:23:13 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* gcc.c (process_command): Skip `-b' like `-B', in 2nd scan.

	* xm-sunos4.h: Deleted.
	* tm-sparc.h, tm-sun3.h: Define LINK_SPEC here instead.
	* tm-sun4os3.h: Undef it here.
	* tm-sun3os3.h, tm-sun3os3nf.h: New files to undef LINK_SPEC.
	* config.gcc: Use those new files where needed.

	* config.gcc: Delete sun3-fpa and sun3-os4-fpa.
	* tm-sun3-fpa.h: Deleted.

	* cccp.c (do_include): Mention even non-ex files for -M.

	* out-mips.c (addr_compensate): Handle HImode.
	* mips.md (Set HI from subreg of SI rule):
	Allow operand in memory.

	* mips.md (cmpqi, cmphi): Patterns deleted.
	(cmpsi, cmpsf, cmpdf): Change predicates to register_operand.

	* cexp.y (rule for ?:): Result is unsigned if either operand is.

	* expr.c (emit_push_insn): If PARTIAL > 0, load the partial regs
	at the end, in case the rest of the push does a function call.

	* reload1.c (alter_frame_pointer_addresses):
	After altering a PLUS, re-fetch CODE before scanning subexps.

	* stmt.c (assign_parms): Don't copy the arg pointer value
	if it is also the frame pointer.  If we do copy it,
	inhibit REG_EQUIV notes for parms copied into pseudo regs

	* integrate.c (copy_for_inline, copy_rtx_and_substitute):
	Set up filename and lineno fields of copy of ASM_OPERANDS.

Sat Jul 29 18:58:49 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* integrate.c (expand_inline_function): Handle struct-value-addr
	passed in memory just like that passed in reg:
	in either case, translate the pseudo-reg made in
	expand_function_start.
	(function_cannot_inline_p): Permit inlining in that case.
	But reject it if using pcc-style return convention.

	* stor-layout.c (layout_type): Consider STRICT_ALIGNMENT
	for ARRAY_TYPE just as for RECORD_TYPE.

Wed Jul 26 12:54:59 1989  Richard M. Stallman  (rms at mipos3)

	* cse.c (fold_rtx): If WIDTH is zero for binary operator,
	look at the modes of the original operands.

	* cse.c (cse_insn): Set prev_insn_explicit_cc0, for (set (cc0) INT).
	(predecide_loop_entry): Likewise.
	(fold_rtx): Look at it, for (if_then_else (cc0) ...).

	* expr.c (expand_builtin): Pass back return value from
	__builtin_saveregs.

	* stmt.c (assign_parms): Allow arg pointer reg not to be fixed.
	If it is not, copy it to a pseudo reg and use that later on.

Tue Jul 25 15:42:04 1989  Richard M. Stallman  (rms at mipos3)

	* expr.c (expand_builtin): New builtin __builtin_classify_type.
	* tree.h, c-decl.c: Additional support.

	* flow.c (mark_used_regs): Treat arg pointer like stack pointer.

	* expr.c (emit_library_call):
	Pass (tree)0 as TYPE arg to FUNCTION_ARG, etc.

Mon Jul 24 11:18:10 1989  Richard M. Stallman  (rms at mipos3)

	* loop.c (regs_match_p): Fix braino.

	* integrate.c (copy_for_inline, copy_rtx_and_substitute):
	Make ASM_OPERANDS constraint vector be shared like operand vector.

	* xm-iris.h: New file.

	* Makefile (stage4): New target.

	* gnulib2.c (badd, bsub, bmul, bdiv): If want long value from
	arithmetic, widen the operands first.
	(__div_internal aka bdiv): Rename to __bdiv.

	* sparc.md (seq combination patterns): Fully initialize cc_status.

	* expr.c (emit_push_insn): Like July 19 change, for BLKmode.

	* stmt.c (expand_function_end): Stack-restore for alloca
	is now done after the return_label.

	* loop.c (scan_loop): Set MAYBE_NEVER for conditional jump to loopbeg.

	* integrate.c (copy_rtx_and_substitute): Allow mapping of hard regs.
	(expand_inline_function): Always create parm_map.
	Handle structure value that way if nec. even if no parms.
	Otherwise, find the pseudo used in the function to hold the
	structure address, and map it to a new pseudo.

	* expr.c (expand_call):
	Use mark_addressable to make FNDECL addressable.
	* c-typeck.c (mark_addressable): No longer static.

	* cse.c (cse_insn): Modify last change: don't canon_reg
	for hard regs inside clobbers.

	* expr.c (expand_assignment): ALIGN arg to store_field comes from
	the structure, not from the value stored.

Fri Jul 21 16:23:45 1989  Richard M. Stallman  (rms at mipos3)

	* stmt.c (warn_if_unused_value): Don't warn for a cast
	around a MODIFY_EXPR.

	* tm-hp9k320.h (PCC_STATIC_STRUCT_RETURN): Undefine it.
	(CPP_PREDEFINES): Add some.

	* combine.c (simplify_and_const_int):
	Simplify (and (ashiftrt (zero_extend FOO) N) M).

	* optabs.c (expand_binop): When widening,
	for some operations we need not actually extend.

Thu Jul 20 16:16:35 1989  Richard M. Stallman  (rms at mipos3)

	* Makefile (insn-emit.o): Depend on insn-codes.h.

	* stmt.c (check_for_full_enumeration_handling): 
	Handle all cases for TYPE_NAME of enum type.

Wed Jul 19 17:00:39 1989  Richard M. Stallman  (rms at mipos3)

	* fold-const.c (fold_convert): Don't fail to force_fit_type.

	* expr.c (emit_push_insn): When pushing only part of scalar on stack,
	adjust stack offset not to count the words not pushed.

	* stmt.c (expand_function_end): Always put return structure address
	in return register.

	* c-typeck.c (process_init_constructor): Assume 0 for nameless field.

	* recog.c (general_operand, memory_operand):
	Check validity of mem address using the mode of the MEM.

	* fixincludes: When calling egrep, use redirect, not -s.

Tue Jul 18 11:18:55 1989  Richard M. Stallman  (rms at mipos3)

	* Makefile (bootstrap*): Pass value of libdir down.

	* cse.c (cse_insn): Do canon_reg on any CLOBBERs and USEs.

	* cse.c (cse_insn): Don't use no_labels_between_p to check
	for jump to following label; find following label and compare.

	* combine.c (try_combine): Don't substitute into subreg(x)=y
	if modes of x and y are not tieable.

	* out-i386.c (call_top_dead_p): Don't fail to check
	the rtx code of the insns themselves.

	* i386.md (tstsf, tstdf): Don't discard TOS if not dead.

	* stupid.c: Don't use regs with PRESERVE_DEATH_INFO_REGNO_P
	for pseudos which live across jumps or labels.
	(stupid_life_analysis): Update last_jump_suid, last_label_suid.
	(stupid_mark_refs): Use those to set reg_crosses_blocks.
	(stupid_find_reg): Check that data, passed from stupid_life_analysis.

	* toplev.c (main): Avoid using caddr_t.

	* mips.md (inverted bgeu peephole): Typo in opcode.

Mon Jul 17 12:29:45 1989  Richard M. Stallman  (rms at mipos3)

	* i386.md (mulb patterns): Turned off due to assembler bug.

	* rtl.c (read_name): Use 0, not NULL, for character.

	* alliant.md (movqi): Typos in mov opcodes.

	* tm-sparc.h, tm-spur.h (CONST_DOUBLE_OK_FOR_LETTER_P):
	Use CONST_DOUBLE_LOW, etc. 

	* stmt.c (expand_function_end): Check value of EXIT_IGNORE_STACK,
	not just whether defined.

	* i386.md (seq, etc.): New patterns.
	* expr.c (do_store_flags): If result is wrong mode, 
	ensure rest of bits are cleared.
	Before storing low part of TARGET, emit a CLOBBER for it.

	* i386.md (load address): Use an immediate add if possible.

	* i386.md (ashlsi3): Don't generate leal; shift is faster.

	* Now struct_value_rtx is 0 to treat it as a parm.
	* expr.c (expand_call): Implement that.
	* integrate.c (expand_inline_function): Don't freak out.
	* tm-apollo68.h (STRUCT_VALUE): Make it 0.

	* On 386, called function must pop the structure value address.
	* tm-i386.h (STRUCT_VALUE): Don't change this.
	Address is now pushed but not counted as a parm.
	* out-i386.c (function_epilogue): Use ret $4 to pop that address.
	* output.h: Declare the current_function_... variables.
	* final.c: Include output.h.

	* varasm.c (make_decl_rtl): Insert missing `else', validating reg decl.

Fri Jul 14 14:12:17 1989  Richard M. Stallman  (rms at mipos3)

	* out-sparc.c, out-spur.c (output_move_double):
	Fixed typo, addreg0 => addreg1.

	* c-decl.c (lang_decode_option): Handle -fshort-enums.
	(finish_enum): In that case, give enum minimum number of bytes.
	* toplev.c (main): Default flag_short_enums.
	* toplev.c, flags.h (flag_short_enums, flag_signed_char): 
	Define those flags here, not in c-decl.c and c-tree.h.

	* i386.md (mulqi3, umulqi3): New patterns.

	* c-convert.c (convert_to_integer): Tighter restrictions on
	distributing truncation through max, min, and multiplication.
	If operands were extended from unsigned, make the operation
	unsigned.

	* cccp.c (main): Fix bug where #include <...>, when -I- was used,
	failed to search standard dirs and/or searched some dirs
	intended only for #include "...".

	* tm-mips.h (FUNCTION_PROLOGUE,FUNCTION_EPILOGUE):
	Increment push_loc after store or load, not before.

Thu Jul 13 11:24:30 1989  Richard M. Stallman  (rms at mipos3)

	* emit-rtl.c (add_insn_after): Don't update last_insn
	if insn is in a sequence.  Instead, update end of sequence.

	* stmt.c (fixup_var_refs): Update end of stacked sequence.

	* stmt.c (expand_function_start): Set result rtl before assign_parms.

	* optabs.c (emit_unop_insn): Set PREV_INSN after preliminaries.

	* stmt.c (warn_if_unused_value): Do CONVERT_EXPR like NOP_EXPR.

	* stmt.c (expand_function_start): Make sure parm_birth_insn
	is a NOTE.

	* Makefile (clean): Delete tmp-insn-*.

Wed Jul 12 14:24:12 1989  Richard M. Stallman  (rms at mipos3)

	* i386.md (mulqi3): Restrict operand 2 to `q' reg.

	* reload1.c (choose_reload_regs): Check HARD_REGNO_MODE_OK
	for regs to be inherited.
	Also check HARD_REGNO_MODE_OK at end for modes of both
	reload_in and reload_out as well as reload_mode.

	* Makefile (maketest): Update for config subdir.

Tue Jul 11 16:29:57 1989  Richard M. Stallman  (rms at mipos3)

	* integrate.c (copy_decl_tree): Copy TREE_USED of each LET_STMT.

	* make-cc1.com: Changes by Angel Li.
	Define variables CC, CFLAGS, LDFLAGS, LIBS.
	Use LIBR library, not LIB.  Specify a /INC in CFLAGS.
	Use MCR to run the gen* files.  Add some comments.
	* make-cccp.com: Similar.
	* config-gcc.com: New file.

	* stmt.c (assign_parms): Compute parm alignment from passed type.

	* c-typeck.c (actualparameterlist): Instead of truncating
	and then promoting for PROMOTE_PROTOTYPES, go straight to int.

	* c-parse.y (setspecs): Save old current_declspecs on a stack.
	(decl, component_decl): Restore from that stack.

Wed Jul  5 15:01:00 1989  Richard Stallman  (tiemann at yahi)

	* tm-aix386.h, xm-aix386.h: New files.

	* loop.c (check_dbra_loop): Handle either test or compare
	for insn two before loop end; detect and reject anything else.

	* expr.c (expand_call, expand_builtin): If alloca is done,
	set current_function_calls_alloca.
	* stmt.c (expand_function_end): If so, generate code to save and
	restore the stack pointer, if not EXIT_IGNORE_STACK.

	* ns32k.md (movsi): Fixes for moving from fp or sp.

	* tm-mips.h (ASM_OUTPUT_ASCII): Start new .ascii every 256 chars.

Tue Jul  4 11:01:00 1989  Richard Stallman  (tiemann at yahi)

	* reload1.c (choose_reload_targets): Don't depend on
	reload_spill_index when cancelling invalid inheritance.
	Also, abort if trying to preserve death info
	on a spill reg used in operand addressing.

	* fold-const.c (fold): Don't fold "foo"[n] here.
	* expr.c (expand_expr): Do it here.
	Handle wide strings correctly.

	* i386.md (movsf,movdf): Disallow mem-mem moves.
	Enable mem-to-reg moves.

	* c-decl.c (finish_{struct,enum}): Warn if inside parm decls.
	(in_parm_level_p, declare_parm_level): Record when inside.
	* c-parse.y (parmlist, parmlist_or_identifiers): Call
	declare_parm_level.

	* c-decl.c (parmlist_tags_warning): Revise warning message text.

	* tm-hp9k320.h (ASM_SPEC): Pass -V switch to assembler.

	* tm-sun386.h (ASM_START_FILE): Truncate filename to 14 chars.

	* c-typeck.c (decl_constant_value): Use only literal values.

Sat Jul  1 17:29:54 1989  Richard Stallman  (tiemann at yahi)

	* integrate.c (copy_rtx_and_substitute): Don't make nested SUBREGs.

	* stmt.c (expand_function_start): Set new global
	current_function_returns_pointer.

	* stmt.c (get_frame_size): Return the size, not the offset.
	* integrate.c (expand_inline_function): When setting FP_DELTA,
	compensate for this change.
	* tm-alliant.h,tm-mips.h,tm-sparc.h,tm-tahoe.h
	(FUNCTION_PROLOGUE,FUNCTION_EPILOGUE): Compensate.

	* out-mips.c (function_arg): Return 0 for BLKmode.

	* tm-mips.h (FUNCTION_INCOMING_ARG): Delete; no register windows.
	* out-mips.c (function_inarg): Delete; no longer used.

	* mips.md (addsi3): Use register_operand for operands 0,1.
	(load address): New pattern, following movsi.
	(fix_trunc*): Use trunc insn, not cvt.
	(cmpfs + bgt peephole): Operands were backwards in template.

	* gcc.c (main): Record in explicit_link_files which input files go
	straight to linker.  If linker is not run, complain about them.
	(execute): Increment execution_count, to show we were called.

	* gcc.c (validate_all_switches): Check ASM_SPEC, CC1_SPEC, etc.,
	so we find all switches that could be valid.

	* varasm.c (output_constructor): Position fields according to
	DECL_OFFSET; don't try to compute alignment here.

	* tm-sparc.h (PCC_BITFIELD_TYPE_MATTERS): Define this.

	* reload1.c (emit_reload_insns): Fix stupid error in last change.

	* c-decl.c (duplicate_decls): If redeclaring builtin, give error is
	type mismatched; otherwise warn only if -W.

	* jump.c (jump_back_p): Verify that PREV is not null.

Mon Jun 26 13:50:28 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* reload1.c (choose_reload_regs): If number of reloads needing
	spill regs exceeds n_spills, don't inherit any reloads.

	* sdbout.c (sdbout_record_type_name): Dumb error in last change.

	* reload1.c (emit_reload_insns): Extend last change: don't use
	equiv reg if reg is in use at same stage of insn, either.

Sun Jun 25 00:00:56 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* reload1.c (emit_reload_insns): Don't use an equivalent register
	to reload from, if that register was used for reloading
	earlier in this insn.

	* sdbout.c (sdbout_record_type_name): Handle a TYPE_DECL as the
	type name.  Get rid of TYPE_TAG_NAME as separate macro.

	* optabs.c (emit_cmp_insn): Args to memcmp are addresses, not blocks.

	* reload1.c (choose_reload_regs): Typo, clearing reload_override_in.

	* tm-i386.h: Add register classes SIREG and DIREG.
	(enum reg_class, REG_CLASS_NAMES): Define class names.
	(REGNO_REG_CLASS, REG_CLASS_CONTENTS): Define their contents.
	(REG_CLASS_FROM_LETTER): Define letters `S' and `D'.

Sat Jun 24 00:17:16 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* c-decl.c (keep_next_level): New function.
	(struct binding): New slot `keep' says make a LET_STMT for this level.
	(pushlevel, poplevel): Implement that.
	* c-parse.y (stmt exprs): Call keep_next_level.

	* sdbout.c (plain_type_1): Handle REFERENCE_TYPE, METHOD_TYPE.
	Correct for size less than 0.
	(plain_type): Correct for size less than 0.

	* global-alloc.c (mark_reg_set): For CLOBBERs, call mark_reg_clobber.

	* reload1.c (order_regs_for_reload): Among regs explicitly used,
	prefer those used less often.

	* reload1.c (choose_reload_regs): If we find alternate place
	to reload from, verify it after all reloads assigned.
	New variable reload_override_in used for this.

	* combine.c (record_dead_and_set_regs): Look inside SIGN_EXTEND and
	STRICT_LOW_PART for place being set.
	(subst): When using reg_last_set to find what a register contains,
	verify the entire register was set.

	* toplev.c (rest_of_decl_compilation): Report invalid register name.

Fri Jun 23 13:19:41 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* tm-hp9k3bsd.h: New file.
	* config.gcc: New target hp9k320-bsd.

	* gcc.c (record_temp_file): Don't add a name twice to one queue.

	* stmt.c (expand_expr_stmt): Call warn_if_unused_value.
	(warn_if_unused_value): Code extracted from expand_expr_stmt.
	Recurse to handle COMPOUND_EXPR.  Don't warn about COND_EXPR.

	* tm-encore.h (DBX_REGISTER_NUMBER): Override tm-ns32k.h;
	return operand unchanged.

	* reload1.c (emit_reload_insns): Don't use recog_memoized
	on an asm.

	* jump.c (delete_insn): Update last_insn.
	* emit-rtl.c (set_last_insn): New function.

	* reload1.c (reload): Put a note at end of insn chain.

	* gcc.c: Put cpp output of .S file into a .s file.

Thu Jun 22 22:14:35 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* optabs.c (expand_binop, expand_unop): Emit queue before library call.
	It is done within emit_library_call, and cse screws up if there is a
	queued insn in the middle of a cse-able sequence.

Wed Jun 21 11:57:22 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* tm-mips.h (CPP_PREDEFINES): Define -Dunix.

	* reload.c (combine_reloads): Combined reload needed for entire insn.

	* c-parse.y (yylex): Braino checking for out-of-range escape seq.

	* stor-layout.c (layout_union): Handle PCC_BITFIELD_TYPE_MATTERS.
	(layout_struct): Don't let a bitfield cross the storage unit
	of its type, if PCC_BITFIELD_TYPE_MATTERS.

Tue Jun 20 00:03:48 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* varasm.c (get_or_assign_label): Let CONSTANT_ALIGNMENT specify
	alignment of the constant.
	CONSTANT_ALIGNMENT is a new optional macro.

	* varasm.c (force_const_mem, get_or_assign_label):
	Make buffer bigger.

	* toplev.c (print_target_switch_defaults): New fn called for -version.

	* toplev.c (compile_file): Detect error closing output file.

	* stor-layout.c (fixup_unsigned_type): Don't shift by 32.

	* stmt.c (emit_case_nodes): Pass UNSIGNEDP along to emit_cmp_insn.

	* stmt.c (expand_end_case): If index is narrow and cannot be
	directly compared, widen it just once.

	* c-parse.y (yylex): Support multi-character constants.
	Thorough rewrite of char constant parsing.

	* c-decl.c (pushdecl): Replace local extern function decl with
	previous global decl if latter is inline, or builtin, or has
	more arg type info.

	* hard-params.c (xmalloc): Define it, for alloca.c.

	* tm-hp9k320.h (STANDARD_STARTFILE_PREFIX): Override -D in Makefile.

	* expmed.c (store_fixed_bit_field): Avoid shift by 32.

	* stmt.c (expand_function_start): Emit a NOTE_INSN_FUNCTION_BEG.
	* final.c (final_scan_insn): For SDB output, do the
	sdbout_begin_function at that note.

	* reload1.c (choose_reload_regs): If a reload reg inherits
	from a previous reload, verify safety after all reloads are assigned.

	* c-decl.c (build_enumerator): Remove no-op casts.

	* reload.c (find_reloads): If an earlyclobber operand matches
	an input operand it is constrained to match, that's not a problem.
	If an earlyclobber operand loses due to earlyclobber, its matching
	input operand also loses.

	* reload1.c (choose_reload_regs): Don't use result of find_equiv_reg
	if that reg is used for reloading in an earlier part of the insn.

	* cse.c (fold_rtx): If WIDTH is 0, don't try sign-extending ARG0, ARG1.

	* Makefile (hard-params*): Use $(OLDCC).

	* c-typeck.c (c_alignof): No warning for -pedantic.

	* c-parse.y (readescape): Don't have both error and warning
	on one hex escape.

	* c-parse.y (yylex): Treat vertical tab as white space.
	(skip_white_space): Likewise.

	* c-parse.y (datadef): If pedantic, warn for stray semicolon.

	* expr.c (expand_increment): Pass accurate unsignedp arg
	to expand_binary_op.

Mon Jun 19 13:36:20 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* config.gcc (news, news-gas): Use xm-m68k.h.

	* final.c (output_asm_label, output_addr_const): Make buf bigger.

	* cexp.y (main): Handle EOF on input.
	(lookup, warning): Provide as a dummy.
	(is_idchar, is_idstart): Declare as unsigned char.

	* cexp.y (parse_escape): Use TARGET_NEWLINE, etc., as values.
	Support hex escapes.  Warn if octal or hex escape doesn't fit in char.

	* cexp.y (yylex): Sign-extend char constants if appropriate.

	* genemit.c: Make insn-emit.c include insn-flags.h.

	* gcc.c: Move record_temp_file past page which declares vflag.

	* integrate.c (expand_inline_function): If copying an insn with
	a REG_EQUIV note, make a similar note.

	* Allow reload regs to be reused for parts of an insn.
	* reload.c (find_reloads): Classify each reload for which part
	of the insn it is needed in.
	(find_reloads_address, etc.): Pass down the overall operand
	that this is part of, to record it on address reloads.
	(push_reload): Record that for each reload.
	* reload1.c (reload): Compute maximum needs of any part of the insn.
	(choose_reload_regs): Part of old choose_reload_targets.
	Hairier criteria for inheriting reloads and for which ones are
	available for the next insn to inherit.
	(emit_reload_insns): The rest of old choose_reload_targets.
	Emit reload insns in proper order according to where they are needed.
	* Record `reload_reg_in_use' separately for each part of the insn.
	(mark_reload_reg_in_use): New function.
	(reload_reg_free_p, reload_reg_free_before_p): New functions.
	(reload_reg_reaches_end_p): New function.

	* expr.c (expand_expr): Emit queue in X+=(Y?Z:A) optimization.

	* rtlanal.c (rtx_equal_p): Check vectors have same length.

Sun Jun 18 12:16:14 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* stmt.c (expand_expr_stmt): Maybe warn if top-level operator
	makes an unused result.

	* gcc.c (delete_temp_files, delete_failure_queue):
	If -v, report failures in unlink.

	* Makefile (includes): New target to run fixincludes.
	(install): Swap arms of if-statement.

Sat Jun 17 12:41:53 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* stor-layout.c (layout_union): Arg to error_with_decl was missing.

	* ns32k.md (movsf): Use CONST_DOUBLE_LOW to extract from CONST_DOUBLE.

	* loop.c (consec_sets_giv): Change type of force, force2.

	* combine.c (dump*): Declare arg as FILE*.

	* Makefile (clean): Delete hard-params.

	* flow.c (life_analysis): Use a special obstack for the temporary
	regsets.

	* m68k.md (clr pattern): On 68000, use moveq to clear data reg.

	* gvarargs.h: File varargs.h renamed.
	The old name conflicted with <varargs.h>, now that -I. is used.
	* tree.c, expr.c, emit-rtl.c: Change #include commands.
	* Makefile (install): Install gvarargs.h under name varargs.h.
	* gcc.c: Include gvarargs.h, not system's varargs.h.

	* Makefile: Use -I$(srcdir) before -I$(srcdir)/config.
	* config/tm.h: Deleted; didn't work if config was a symlink.

	* cse.c (cse_insn): Record location of inner_dest
	so it can be replaced properly if a new MEM rtx is made.

Fri Jun 16 14:17:20 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* make-cc1.com: Compile and link rtlanal.c.

	* c-typeck.c (build_array_ref): Call fold on the array ref.
	* fold-const.c (fold): Simplify array ref of string constant.

	* stmt.c (expand_asm_operands): Fix error message.

	* Makefile (gnulib2): Remove old members before compiling new.
	Fix stupid errors.
	* gnulib2.c (__cmpdi2, __ucmpdi2): Typos in names of interface unions.

	* genconfig.c (main): Don't write MAX_CLOBBERS_PER_INSN; obsolete.
	Add 3 to MAX_RECOG_OPERANDS.

	* cse.c (fold_cc0): Extra arg specifies machine mode.
	Callers changed.
	(cse_insn): Record original mode of each src for this purpose.

Thu Jun 15 12:35:18 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* gnulib2.c (_cmpdi2, _ucmpdi2): Moved here from gnulib.c.
	Use long long for argument type.

	* rtlanal.c (may_trap_p): Moved here from loop.c.
	Return 1 for division by explicit zero.

	* reload1.c (eliminate_frame_pointer, alter_frame_pointer_addresses):
	Rerecognize insns which are changed by this.

	* i386.md (call_value): Don't return prematurely.

	* alliant.md (movqi): Handle moving Aregs to mem and vice versa.
	(bftst -> btst): Restrict to bitpos less than 8
	so operand may be non-offsettable.
	(nop): New pattern.
	(return): Was disabled; now deleted.
	* tm-alliant.h (PRINT_OPERAND_PUNCT_VALID_P): Define it.
	* out-alliant.c (output_btst): Same change as in out-m68k.c

	* alliant.md, out-alliant.c: Offsetable -> offsettable.

	* c-parse.y (rule for stmt_exprs): Make the LET_STMT volatile. 

	* c-decl.c (duplicate_decls): Don't save inline function data
	from previous definition if a new *definition* is seen.

	* integrate.c (access_parm_map): Handle subregs and constants.

	* stmt.c (expand_return): Don't crash if DECL_RTL (DECL_RESULT()) is 0.

	* tm-tahoe.h (LONGJMP_RESTORE_FROM_STACK): Define it.

	* tm-mips.h (CONSTANT_P): Deleted; duplicates rtl.h.

Fri Jun  9 01:39:30 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* Makefile (float.h): Avoid using $(MAKE).

	* Don't cram two things into STMT_BODY of a LET_STMT.
	* tree.h (struct bind_stmt): New field, subblocks.
	(STMT_SUBBLOCKS): New macro to access it.
	* print-tree.c (walk): Print new field.
	* tree.c (build_let_stmt): Store the old BODY arg into subblocks field.
	* c-parse.y (stmt expr rule): Put rtl expr alone into body field.
	* dbxout.c (dbxout_block): Recurse on subblocks, not body.
	* sdbout.c, symout.c: Likewise.
	* integrate.c (copy_decl_tree): Likewise.
	* stmt.c (setjmp_protect, uninitialized_vars_warning): Likewise.
	* expr.c (expand_expr): For LET_STMT, simply use its body.

	* machmode.def: Add sixth arg to each entry.
	* tree.h, rtl.h, rtl.c: Add arg to DEF_MACHMODE.
	* rtl.h (GET_WIDER_MODE): New macro; table in rtl.c.
	* expr.c (expand_expr): Use that for widening multiply.

	* stmt.c (fixup_var_refs_1): When converting MEM to QImode for
	bit field, adjust the address if possible to make bitpos
	less than 8.
	* m68k.md (bftst -> btst): Restrict to bitpos less than 8
	so operand may be non-offsettable.

	* cccp.c (do_line): Accept and pass on 3rd arg for enter or leave file.

	* out-m68k.c (output_btst): Handle COUNT bigger than size of unit.

	* cccp.c (CHECK_DEPTH): Macro to detect instack overflow.
	(finclude, macroexpand, expand_to_temp_buffer): Use that.

	* cccp.c (rescan): Don't check for disabled macro if traditional.
	(macroexpand): Don't disable macro if traditional.

	* sdbout.c (sdbout_one_type): Take out last change; assembler barfs.

	* c-parse.y (maybe_attribute): Eliminate #-syntaxes.
	Make ATTRIBUTE the name for __attribute.

	* c-parse.gperf: Add __attribute{,__} and __signed{,__}.
	* c-parse.y: Install results of that change.

	* Fix bug in sizeof ({...}).
	* c-decl.c (poplevel): Set TREE_USED.  Return the LET_STMT.
	* c-parse.y (stmt-expr rule): Put the RTL_EXPR in the LET_STMT,
	clear its TREE_USED, and use it as the result.
	* expr.c (expand_expr): Allow LET_STMT as an expr.
	Set its TREE_USED and expand the TREE_VALUE of its body.
	* dbxout.c (dbxout_block): Ignore LET_STMT if TREE_USED not set.
	* sdbout.c, symout.c: Likewise.

Thu Jun  8 00:06:36 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* c-parse.y (yylex): Extend ERANGE-inhibitor for 0.0
	to 0.0e0 as well.

	* flow.c (life_analysis): Prevent allocation of regs live at setjmp
	on certain machines.  Controlled by LONGJMP_RESTORE_FROM_STACK.
	Sets reg_live_length to -1.
	* local-alloc.c (block_alloc): Be prepared for that.
	* tm-vax.h (LONGJMP_RESTORE_FROM_STACK): Define it.

	* gnulib2.c (all interfaces): Declare args and values as long long,
	and split them using unions.

	* loop.c (check_dbra_loop): Don't reverse loop if there are two
	refs to varying addresses.  Consider foo[i] = foo[i-1].
	(count_nonfixed_refs): Subroutine to count them.

	* cexp.y: Distinguish signed and unsigned.
	An integer value is now represented by a struct.
	All rules for arithmetic changed.
	(yylex): Adapt to change in yylval data type.

	* limits.h (LONG_MIN): Make sure it's a signed long.

	* sdbout.c (sdbout_one_type): Output types of fields first,
	if they are structs.  Don't go through pointers.
	(sdbout_field_types): Subroutine for that

Wed Jun  7 13:00:44 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* fixincludes: Switch to /usr/include before doing vuid_event.h.
	Use $2 as output directory for sed.

	* tm-i386.h (FUNCTION_PROFILER): Put counter address in %edx.
	* tm-i386v.h (LIB_SPEC): Use -L/usr/lib/libp if profiling.

	* expr.c (expand_increment): Typo testing for BImode component.

	* convex changes from csmith:
	* tm-convex.h: use EXTRA_SECTIONS to do .bss.
	out-convex.c: set_section, align_section are now unused.
	* convex.md: add pattern to pick an A-reg destination for sums
	whose source involves a dedicated A reg (frame or arg pointer)
	* convex.md: immediate and, or, xor instructions store a 32-bit
	result.  Fix instructions that assumed it was 64.

	* mips.md (probe): New pattern to create stack space.

	* Makefile (float.h): Ignore errors from hard-params.
	Specify ./ to run it.

Tue Jun  6 15:45:27 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* out-tahoe.c: Rename `offsetable' to `offsettable'.

	* tahoe.md (nop): New pattern.

	* i386.md (umul...): Constrain operand 1 as `0', not `a'.
	`a' sometimes wanted two a-regs for operands 0 and 1.

	* cccp.c: Forward-declare some structs.

	* c-decl.c: Rearrange fcn fwd decls and struct decls.

	* expr.c: Move some fcn fwd decls after structs their args use.
	* genpeep.c, genextract.c: Likewise.

	* loop.c: Forward-declare some structs.

	* stmt.c: Move decls of structs before those of static functions.

	* loop.c (strength_reduce): Delete extra arg to check_eliminate_biv.

	* integrate.c (expand_inline_function): Supply missing arg
	to convert_to_mode.

	* gcc.c (handle_braces): Supply missing arg to do_spec_1.

	* explow.c (lookup_static_chain): Accept a context arg.

	* expmed.c (store_split_bit_field): Pass ALIGN arg
	to extract_fixed_bit_field.

	* expr.c (expand_assignment): Convert TYPE_ALIGN to bytes.
	(store_constructor, expand_expr): Likewise.

	* tm-m68k.h: NO_ADDSUB_Q conditionals turn off all addq, subq insns.
	(Fully supported only with MOTOROLA and HPUX_ASM flags.)

	* jump.c (do_cross_jump): Don't die if LABEL is 0.

	* tm-mips.h (PRINT_OPERAND_PUNCT_VALID_P): New macro.
	* tm-iris.h: New file.  Unsplit lines accidentally split.

Mon Jun  5 15:39:30 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* integrate.c (output_inline_function): Call init_function_start,
	not expand_function_start.
	* emit-rtl.c (restore_reg_data): No need to init reg_rtx_no.

	* stmt.c (init_function_start): Set current_function_returns_struct.

	* rtlanal.c (reg_set_between_p): New fn analogous to reg_used_between_p
	* loop.c (strength_reduce): Reject biv initial value which is altered
	subsequently before actual loop start.

	* rtlanal.c: New file split out from rtl.c.
	Has things not used in the gen files.

	* loop.c (strength_reduce): Reject biv initial value in a hard reg
	clobbered by an intervening function call.

	* tree.c (get_identifier): New flag needed to enable id-clash warnings.
	(start_identifier_warnings): Set that flag.
	* c-decl.c (init_decl_processing): Call that, after making built-ins.

Sat Jun  3 14:41:34 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* final.c (final_scan_insn): No basic block profiling at jump tables.

	* stmt.c (expand_decl): Probe the stack to make pages exist.
	* expr.c (expand_builtin): Likewise, for alloca.

	* move-if-change: Specify /bin/sh.

	* tm-ns32k.h (INDIRECTABLE_2_ADDRESS_P): Don't accept PLUS
	with constant operands but not inside CONST.

	* integrate.c (output_inline_function, save_for_inline):
	Save stack_slot_list, and restore it for actual output.
	* emit-rtl.c (gen_inline_header_rtx): New arg for this.

	* emit-rtl.c (restore_reg_data): Initialize reg_rtx_no.
	(restore_reg_data_1): Handle reg_rtx_no jumping past
	reg_pointer_flag_length.

	* reload1.c (alter_reg): Do nothing if regno_reg_rtx has 0.

	* integrate.c (copy_rtx_and_substitute): Typos for stack parm
	addresses in PLUS case.

	* genoutput.c (gen_insn, gen_peephole): Make output_n fns static.
	(output_prologue): Use new macro DEFAULT_MACHINE_INFO if defined.

	* tree.h (enum machine_mode): Define MAX_MACHINE_MODE as in rtl.h.

Fri Jun  2 15:40:47 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* cccp.c (do_include): A file included via a system header file
	counts as a system header file for -M.

	* gnulib2.c: Support boolean ops and shifts.

	* loop.c (emit_iv_inc): Use emit_iv_init_code.

	* rtl.h (CONST0_RTX): Don't try to cast abort.

    	* tm-news.h (PRINT_OPERAND_ADDRESS): Fix typo `reg_name'.
	Delete two garbage lines.

	* loop.c (eliminate_biv): Use emit_iv_init_code to compute comparison
	value.  If value is constant, recognize the insn, and if that fails,
	put the value in a register.  

Thu Jun  1 16:56:39 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* print-tree.c (dump): Don't die if rtx components are null.

	* expmed.c (expand_mult_add): New fn to do A * X + B.
	(make_tree): New subroutine.
	* loop.c (emit_iv_init_code): Use that.  Much simpler now.

Tue May 30 17:20:40 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* fold-const.c (fold): Use TREE_SET_CODE to store in tree codes.

	* tree.h (struct tree_common): Make `code' an unsigned int.
	(TREE_CODE, TREE_SET_CODE): Put in casts.

	* optabs.c (emit_cmp_insn): Supply all the args in recursive calls.

	* toplev.c (report_error_function): Fix typo; METHOD_TYPE missing.

	* fixincludes: Add code to make internal non-directory links.

Mon May 29 21:36:28 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* gcc.c (find_exec_file): Try both with and without machine_suffix.
	(find_file): Use machine_suffix here too.

Sat May 27 00:02:26 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* reload.c (decompose): OFFSET wasn't initialized.

	* cse.c (cse_main): Assign monotonic cuids.
	(make_regs_eqv, CHEAPER): Use cuids, not uids.
	(cse_end_of_basic_block): Return a cuid, not a uid.

	* expr.c (expand_builtin): For BUILTIN_SAVEREGS, range of regs
	moved included one extra previous insn.

	* emit-rtl.c (emit_line_note): Don't check -g here.
	(emit_note): For line number when no -g, increment cur_insn_uid anyway.
	* stmt.c (expand_start_case): Always output a NOTE_INSN_DELETED.

	* loop.c (loop_optimize): Don't count line-number NOTEs for luids.
	Prevents -g from affecting optimization decisions.

Fri May 26 17:31:15 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* local-alloc.c (block_alloc): Don't count notes in insn_number.
	Prevents -g from affecting order of allocation.

Thu May 25 14:12:19 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* local-alloc.c (block_alloc): Clear full length of regs_live_at.

	* ns32k.md (cmpsi): Make this the first cmp pattern.

	* jump.c (do_cross_jump): Skip NOTEs while checking for existing label.

	* cse.c (cse_insn): When no-oping a jump, decrement use count of label.
	(cse_basic_block): If label use count is 0, go past it.

	* integrate.c (access_parm_map): New fn, broken out of
	copy_rtx_and_substitute, handles case of mem ref to stack arg.
	(copy_rtx_and_substitute): Call it.
	Also use it for address of a stack arg.

	* gen*.c (fatal): Declare 1st arg as string.

Wed May 24 00:13:36 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* optabs.c (init_optabs): Handle movdi and movdf insns.

	* final.c (end_final): Realign locn ctr after outputting string.

	* tm-sparc.h (LINK_SPEC): Link bb_link.o before standard lib.

	* tm-sun386i.h (LINK_SPEC): Accept and ignore -sun386.

	* gcc.c (find_exec_file): Use machine_suffix.
	(process_command): Set that for -b option.

	* integrate.c (function_cannot_inline_p): No size limit
	for functions declared inline.

	* loop.c (skip_consec_insns): New fn, skip several insns or libcalls.
	(force_movables): New fn, part of scan_loop broken out.
	(ignore_some_movables): New fn, ignore a movable whose insn
	is within another movable's libcall.
	(scan_loop): Call those three.
	Don't handle m->consec for zero-extend movables, since always 0.

Tue May 23 12:58:24 1989  Joe Weening  (weening at gang-of-four.stanford.edu)

	* config/alliant.md:
	Removed operand classes 'x', 'y', 'G', 'H'.
	Added "%." to many opcodes to simplify comparison with m68k.md.
	Changed TARGET_68881 to TARGET_CE.
	Changed floating-point insns to better describe the Alliant CE.
	Most args to floating-point insns are now nonimmediate_operand.
	Removed special insns for pushing doublewords onto stack.
	Added non-CE versions of movsf and movdf to avoid using FP
	registers in this case.
	(float*i*f2): Don't allow immediate ops.
	(sne): Fix typo, fsne => fsneq.
	(call, call_value): Changed to always pop args from stack
	upon return; this gives better code than before and conforms
	to Alliant calling standard.
	Incorporated some recent changes to m68k.md.

	* config/out-alliant.c:
	(regno_reg_class): Removed FPA reg classes.
	(output_move_const_double): Function not needed, removed.

	* config/tm-alliant.h:
	Removed FPA registers and reg classes.
	Target flags: changed TARGET_68881 to TARGET_CE, removed
	TARGET_RTD, TARGET_REGPARM, TARGET_FPA.
	Removed TARGET_CE test in several places since we need to
	use FP regs even for non-CE programs.
	(TARGET_VERSION, CPP_SPEC): Define for Alliant.
	(CONDITIONAL_REGISTER_USAGE): Removed, not needed.
	(FRAME_POINTER_REQUIRED): Defined.
	(RETURN_POPS_ARGS): Defined.
	(FUNCTION_VALUE, LIBCALL_VALUE, FUNCTION_VALUE_REGNO_P):
	Use fp0 to return floating-point values.
	(FUNCTION_ARG): Remove TARGET_REGPARM code.
	(FUNCTION_ARG_PARTIAL_NREGS): Always 0.
	(FUNCTION_PROFILER): Define for Alliant.
	(FUNCTION_EPILOGUE): Remove use of rtd instruction.
	Renamed CC_IN_68881 to CC_IN_FP.
	(NOTICE_UPDATE_CC): Incorporate changes that were made
	in tm-m68k.h.

	* config/xm-alliant.h (LINK_SPEC): Pass -X to linker.

Tue May 23 12:58:24 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* sdbout.c: Don't include c-tree.h.

	* tree.c (build_index_type): Use sizetype for min and max values.
	Convert maxval rather than clobbering it.

	* tm-hp9k320.h: Finish unterminated comment.

	* sdbout.c (sdbout_parms): Use gen_fake_label for anonymous parm.

Sun May 21 12:58:06 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* stmt.c (aggregate_value_p): New fn says whether expression is a type
	that functions cannot return as a scalar.
	(assign_parms, expand_function_start): Use that.
	* expr.c (expand_call): Likewise.

	* gcc.c (delete_failure_queue): New subroutine.
	(delete_temp_files): No longer delete the failure queue.
	(main): Delete failure queue after each failing compilation.

Sat May 20 13:16:23 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* varasm.c (force_const_mem): New optional macro SELECT_RTX_SECTION.

	* mips.md: Change %u0 to %:.
	(movsi): Add constraint alternative accepting address arg.

	* fold-const.c (mul_double): Special case for 2nd arg 2, 4, 8.
	(combine): Special case shortcuts for plus, minus, mult, div.

	* stmt.c (expand_function_start): Simplify hairy statement for 3B1.
	* expr.c (expand_call): Likewise.

	* math-68881.h: New file.

	* m68k.md (movqi): Handle moving aregs to mem and vice versa.

	* dbxout.c (dbxout_type): Don't test use_gdb_dbx_extensions
	in cases that occur in C.

	* stmt.c (expand_function_{start,end}): Make DECL_RESULT's rtl 0
	when function returns no value.

	* tree.c (build_decl): Initialize DECL_PRINT_NAME, DECL_ASSEMBLER_NAME.

	* c-decl.c (store_parm_decls): Call init_function_start.

Thu May 18 00:41:37 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* stmt.c (expand_null_return_1): New arg USE_GOTO says jump to
	return_label even if could otherwise use a return insn.
	Make a return_label if we need one and don't have one already.
	If have parm cleanups, always jump to cleanup_label.
	(expand_null_return): Pass 1 for USE_GOTO if cleanups pending.
	(expand_return): Set LAST_INSN if have local cleanups or parm cleanups.
	Use that if jumping to tail-recursion label.
	Optimization for returning a comparison is safe for local cleanups
	but don't do it if there are parm cleanups.
	Calling expand_null_return_1, pass 1 for USE_GOTO if local cleanups.
	(this_contour_has_cleanups_p): New function.

	* stmt.c (init_function_start): New function, beginning of
	expand_function_start broken out.
	Use DECL_PRINT_NAME to get function's name.
	(expand_function_start): Now two args, function and PARMS_HAVE_CLEANUPS
	Compute RETURN_LABEL sooner; make one if parm cleanups.
	If parms have cleanups, put scalar return value in pseudo-reg.
	Don't mark that pseudo with REG_FUNCTION_VALUE_P.
	(expand_function_end): Simplify decisions about output of return_label
	and return insn.
	If DECL_RESULT is pseudo-reg, copy it to real return reg.

	* stmt.c (expand_function_end): Handle ordinary struct values
	like pcc, but only if unoptimized.
	(expand_function_start): Make a return_label for ordinary struct value.

	* stor-layout.c (layout_type): Handle METHOD_TYPE like FUNCTION_TYPE.
	(layout_decl): Allow TYPE_DECL.

	* stor-layout.c (layout_basetypes): Code for basetypes broken
	out of layout_record.  Sets the type size tentatively.
	(layout_record): Start with that tentative size.
	Also, don't do anything with CONST_DECL members.

	* stor-layout.c (layout_union): Simpler error report for static memb.

	* reload1.c (eliminate_frame_pointer): Reduce PUSH_ROUNDING
	conditional to apply only to push instructions.

	* expr.c (expand_call): Fix stupid errors handling MAX_PARM_BOUNDARY.
	* stmt.c (assign_parms): Likewise.

	* toplev.c (announce_function, report_error_function):
	(error_with_decl, warning_with_decl): Use DECL_PRINT_NAME.

	* toplev.c (compile_file): Subtract integration_time from parse_time.

	* toplev.c (compile_file): Don't output read-only static variables
	at end of compilation if address was not used.

	* toplev.c (rest_of_compilation): Handle flag_syntax_only.

	* toplev.c (main): Handle -g0 and -G0 options.
	For -g and -G, set use_gdb_dbx_extensions.

	* toplev.c (main): Set `progname'.
	(pfatal_with_name, fatal_io_error, {error,warning}_with_file_and_line):
	(sorry): Print value of `progname', not "cc1".

	* tree.def: Delete FRIEND_DECL.  Add PUSH_EXPR and POP_EXPR.

	* tree.c (simple_cst_equal): Handle INDIRECT_REF.

	* tree.c (lvalue_p): Handle METHOD_TYPE.  Handle NEW_EXPR.

	* tree.c (copy_list): New function.

	* tree.h (struct tree_decl): New fields print_name and assembler_name.
	(DECL_PRINT_NAME, DECL_ASSEMBLER_NAME): New accessors.

	* c-decl.c (LONG_DOUBLE_TYPE_SIZE): New compilation parameter.

Wed May 17 22:07:17 1989  Randall Smith  (randy at apple-gunkies.ai.mit.edu)

	* dbranch.c (emit_delay_sequence): Reset insn code to -1 when
	turning insn into a sequence so that it won't think that it matches
	something in the md file.

	* dbranch.c (insn_eligible_p): Call refers_to_regno_p with a
	non-zero range.

	* dbranch.c (pnote): Modified to make sure instruction clobbered
	register is a set, rather than, say, a clobber.

Wed May 17 14:01:20 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* sdbout.c (sdbout_parms): Handle parm with no name.

	* loop.c (combine_movables): Test for overlap of zero-extend regs
	was screwed up.

	* c-typeck.c (c_sizeof{,_nowarn}): Convert from bytes to chars,
	since c defines sizeof (char) as 1.
	(pointer_int_sum, pointer_diff): Use c_sizeof{,_nowarn}. 

Tue May 16 16:27:32 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* reload1.c (choose_reload_targets): Don't reuse regs
	mentioned in reload_reg_rtx.

	* tm-tahoe.h, tahoe.md, out-tahoe.c, xm-tahoe.h: New files.

Mon May 15 16:25:12 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* fixincludes: Exit with explicit status 0 at end.
	cd to /usr/include before cd to subtree root in case of relative link.
	Create dir $LIB earlier.
	When checking for a link, treat .. like an absolute target.

	* symout.c (symout_block_symbols): Give every local decl a typespec.
	* cexp.y (parse_number):
	* flow.c (life_analysis, dump_flow_info):

	* loop.c (consec_sets_invariant_p): Logic error accepted consec sets
	of which only one was invariant.

	* expr.c (expand_expr): Use no subtargets inside loops.
	* stmt.c (inside_loop): New function.

Sun May 14 00:11:07 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* tree.h: Declare long long types.

	* c-parse.y (combine_strings): Make string contents saveable.

	* tree.c (savealloc): New function.

	* m68k.md (movdi): % missing in fmove%.d.

	* c-parse.y (yylex): Detect overflow past 64-bits.
	Detect specially numbers not fitting in signed long long.

Sat May 13 13:16:05 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* reload1.c (alter_frame_pointer_addresses): Preserve volatility.

	* varasm.c (output_constructor): Die if BITS_PER_UNIT is too big
	for this function to work.

	* genpeep.c (match_rtx): For match_operator, match the operands, too.

	* varasm.c (output_constant): Use ASM_OUTPUT_DOUBLE_INT for DImode.

	* stor-layout.c (make_signed_type, make_unsigned_type):
	(fixup_unsigned_type): Use HOST_BITS_PER_INT.

	* stor-layout.c (layout_type): Use TFmode if appro.

	* optabs.c (emit_cmp_insn): Use mode sizes to check cmpstrqi, cmpstrhi.

	* c-typeck.c (get_floating_type): Compare MODE against modes of types.
	(signed_type, unsigned_type, signed_or_unsigned_type, type_for_size):
	Handle long long types.
	(digest_init): Don't assume width of `char' is BITS_PER_UNIT.

	* c-parse.y (yylex): For truncating chars, use width of `char' type.
	Allow `ll' in int constants and make long long.
	Also make long long if constant won't fit in an int.

	* c-decl.c (SHORT_TYPE_SIZE): Round up when dividing.

Fri May 12 22:36:21 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* real.h: Allow multiple inclusion.

	* tm-sun386i.h (DBX_REGISTER_NUMBER): Bizarre renumbering.

Thu May 11 00:36:21 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* fixincludes: Fix non-ansi declaration of sprintf in X11/Xmu.h

	* c-parse.y (stmt from expr): Do default conversion if useful
	for sake of ({...}).

	* sparc.md (andcc recognizer): Operand missing in subreg.

Wed May 10 17:20:38 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* rtl.c (read_name): Error if name is missing.
	(dump_and_abort): Don't print char args if -1.

	* i386.md (umulqihi3): Operand numbers were missing.

	* reload1.c (choose_reload_targets): Allow spill reg in find_equiv_reg
	if it's free and correct class. 

	* cse.c (canon_hash): Handle empty strings.

	* cccp.c (macroexpand): Newline newline treated like real white space
	when stringifying.

	* Rename *offsetable* to *offsettable*.

Tue May  9 22:54:58 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* c-decl.c (finish_type): Layout any variants of the type.

Tue May  9 12:30:28 1989  Randall Smith  (randy at apple-gunkies.ai.mit.edu)

	* final.c (final_scan_insn, final): Added an argument to
	final_scan_insn to disallow peephole processing (to turn it off
	during delayed branch scheduling).

	* final.c (final_scan_insn): Made insn not matching any MD rtl a
	criteria for delayed branch case.  Moved delayed branch case to just
	before real insn recognition to reduce the number of insns on which
	recog_memoized is called.

Mon May  8 15:02:42 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* fixincludes (LIB): Allow overriding.

	* cccp.c: Don't search /usr/include/CC by default.

Mon May  8 13:09:21 1989  Randall Smith  (randy at apple-gunkies.ai.mit.edu)

	* print-tree.c (dump): Fixed typo; IDENTIFIER ==> IDENTIFIER_NODE.

Sun May  7 12:44:53 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* print-tree.c (dump): TYPE_NAME may be IDENTIFIER or TYPE_DECL.

Sat May  6 00:13:47 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* tree.def: Define EXACT_DIV_EXPR, for when remainder known as 0.
	* fold-const.c (combine, fold, div_and_round_double): Handle new code.
	* expr.c (expand_expr): Likewise.
	* c-typeck.c (pointer_diff): Use EXACT_DIV_EXPR.

	* integrate.c (expand_inline_function): Use size of passed type
	for allocating stack slot with that type.

	* c-parse.y (maybe_attribute, attribute*): New syntax for Apollos.
	These tokens currently not generated.

Fri May  5 18:43:01 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* toplev.c [USG]: Undefine FLOAT for sake of sys/param.h on hpux.

	* optabs.c (expand_binop): If backtracking, don't delete insns made
	for -fforce-mem.

Thu May  4 01:57:23 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* reload.c (find_reloads): Don't compare an earlyclobber operand
	with itself.

	* reload.c (immune_p): Constants and stack slots don't overlap.

	* Put no-ops in front of loops and labels,
	to prevent confusion in the debugger.
	* c-parse.y (loops and labels): Call emit_nop.
	* stmt.c (emit_nop): New function--sometimes emit a no-op.
	* *.md (nop): New insn.

	* expr.c (expand_call): Typo in arg to FIRST_PARM_CALLER_OFFSET.

Wed May  3 01:34:58 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* loop.c (scan_loop): Scanning around end of loop
	should not set maybe_never.

	* Rename SELECT_VARIABLE_SECTION to SELECT_SECTION.
	* varasm.c (get_or_assign_label): Use SELECT_SECTION if defined.
	* varasm.c: Use EXTRA_SECTION_FUNCTIONS if defined (new macro).

	* mips.md: Change %u to %u0 to avoid error check.

	* tm-mips.h (TARGET_VERSNUM): Inc. to 1 08.
	(TARGET_VERSION): Change strings.
	(AL_DEBUG): Don't define it.
	(HARD_REGNO_MODE_OK): Add some casts to int.
	(STACK_ARGS_ADJUST): Name was misspelled.
	(PRINT_OPERAND_ADDRESS): Just abort for MEM, POST_INC, etc.
	(EXTRA_SECTIONS, SELECT_VARIABLE_SECTION, SELECTORS_EXTRA_SECTIONS,
	SELECT_VARIABLE_CONST_SECTION): New macros.
	(ASM_FILE_END): Change function name.
	* out-mips.c (function_arg_advance): Delete debugging printfs.
	(function_inarg, function_arg): Likewise.
	(compare_collect, compare_restore): Add some.

	* reload1.c (reload): Fix handling of caller_save_needed.

	* stmt.c (expand_function_start): Clear caller_save_needed.

	* stmt.c (emit_case_nodes): Some compiler has trouble with calling
	a function pointer.
	* gnulib.c: likewise.

Tue May  2 15:32:25 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* loop.c (combine_movables): For zero extend,
	do each from-mode separately.

Mon May  1 00:18:47 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* tm-apollo68.h: New file.

	* c-parse.y (is_reserved_word, hash): Add keywords `__asm__', etc.
	* c-parse.gperf: Corresponding changes.

	* c-parse.y (check_newline): Set main_input_filename before
	considering optional arguments.

	* final.c (final_scan_function): Return next insn to process.
	Usually that's the following insn; occasionally, previous compare.

	* c-decl.c (DOUBLE_TYPE_SIZE): Wrong value.

	* reload.c (decompose): Failed to return value.

	* Support local specified-register variables.
	* varasm.c (decode_reg_name): New function, cvt asmspec to regnum.
	(make_decl_rtl): Call that.
	* toplev.c (rest_of_decl_compilation): Handle local specified-register
	declarations.

	* i386.md (tstqi, trunc*qi): Constrain to `q' regs.

	* loop.c (scan_loop, move_movables): ->global for zero-extend register
	now means register is used outside range from where it is set
	to the following label.  Non-global zero-extend regs
	may be entirely cleared.

	* loop.c (combine_movables): Loop that combines matching movables
	broken out from scan_loop.
	Now also combine non-global zero-extend registers with each other
	if their lifespans don't overlap.

	* c-typeck.c (build_unary_op, ADDR_EXPR of a COMPONENT_REF):
	Always convert to desired result type.

Sun Apr 30 12:58:58 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* c-decl.c (init_decl_processing): New macros parameterize int types.
	CHAR_TYPE_SIZE, SHORT_TYPE_SIZE, LONG_TYPE_SIZE, LONG_LONG_TYPE_SIZE,
	FLOAT_TYPE_SIZE, DOUBLE_TYPE_SIZE.

	* fixincludes: Use sed instead of ex.  No problem with split lines.

	* print-tree.c (dump): Print type's name, if any.

	* c-parse.y: Use __inline, not plain inline.

	* toplev.c: New option -fdelayed-branch.
	(compile_file): Open and close dbranch dump file.
	Collect and print dbranch time.
	(rest_of_compilation): Optionally do dbranch scheduling, 
	only if HAVE_DELAYED_BRANCH.
	(main): Handle -dd.

	* rtl.c (copy_rtx): Handle null pointers as code `e'.

	* final.c (dbr_sequence_length): New function.
	(final_scan_insn): Most of `final' broken out.
	Add support for SEQUENCE insns.
	last_ignored_compare and new_block now top-level static.

	* c-parse.y (MAX_WORD_LENGTH): Long enough for __volatile.

Sat Apr 29 13:03:20 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* c-parse.y (asm statements): Output line numbers.

	* loop.c (emit_iv_init_code, emit_iv_inc, eliminate_biv): Copy
	additive term rtx's to prevent sharing between insns.

	* c-parse.y (check_newline): Increment input_file_stack_tick.
	* toplev.c (report_error_function): Describe input stack only if
	changed.

	* c-decl.c (finish_struct): Reject zero width for named field.

	* tm-sun3.h (CC1_SPEC): Prevent error on `-sun3'.
	* tm-sparc.h (CC1_SPEC): Prevent error on `-sun4'.

	* Makefile (cleanconfig): cleanlinks renamed; also delete gnulib.
	(gnulib): Delete stamp-gnulib2 since gnulib2 should be redone after.

Fri Apr 28 00:38:32 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* config.gcc (genix): Correct xm file name.

	* tm-genix.h: Undefine ASM_SPEC inherited from tm-encore.h.

	* Makefile: Make float.h using hard-params.
	(clean): Delete float.h.

	* hard-params.c: New program.

	* varasm.c (assemble_variable): Use SELECT_VARIABLE_SECTION if defined.
	(in_section): Use EXTRA_SECTIONS if defined.

	* toplev.c (compile_file): Call ASM_FILE_END if defined.

	* gcc.c (SWITCH_TAKES_ARG, WORD_SWITCH_TAKES_ARG): Let config override.

	* loop.c (emit_iv_init_code): Force A to a reg if it isn't.

Thu Apr 27 12:51:14 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* tm-mips.h (ASM_START_FILES): Don't call print_options.
	Don't call the funny abort-functions.
	* out-mips.c: Delete funny debugging functions and aborts.
	(print_options): #if 0.
	(compare_restore): Test for COMPARE, not MINUS.
	(mips_section_get, mips_output_external, mips_asm_final): New fns.

	* input.h: New file with *input_filename, lineno and input_file_stack.
	Included in toplev.c and c-parse.y.
	* c-decl.c (finish_function): LINENO is now arg.
	* c-parse.y: Calls changed.

	* c-parse.y (check_newline): Handle `1' or `2' from cpp
	by pushing or popping input_file_stack.
	* toplev.c (compile_file): Push main input file on input_file_stack.
	(report_error_function): If in include file, print the chain
	of include-locations.

	* cccp.c (output_line_command): New arg says whether entering or
	leaving a file.  Output `1' or `2' on #-line if so.  Callers changed.

	* gnulib2.c: Little-endian fixes from csmith@convex.com.

	* fixincludes: Wrong quoting in `echo' command.

	* tm-mips.h (REG_P): Duplicate defn deleted.
	(PRINT_OPERAND): `\' was missing.

Wed Apr 26 02:44:59 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* cccp.c (handle_directive): Preprocess even #pragma, but copy 
	to output file afterward.
	(do_pragma): Use standard calling convention.
	(install_builtins, special_symbol): Define __INCLUDE_LEVEL__.

	* cccp.c (do_include): Don't forget to close file.

	* final.c (output_asm_insn): Use PRINT_OPERAND_PUNCT_VALID_P
	to validate punctuation after percent.
	* tm-m68k.h, tm-alliant.h, tm-ns32k.h, tm-vax.h, tm-i386.h:
	Define PRINT_OPERAND_PUNCT_VALID_P.

	* Version 1.35 released.

	* c-decl.c (grokdeclarator): Use INT_CST_LT only on int constants.

Tue Apr 25 15:47:11 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* reload.c (find_reloads_address_1): Always return a value.

	* flow.c (mark_set_1): Look inside zero_extract, sign_extract.

	* expr.c (emit_library_call) [STACK_ARGS_ADJUST]:
	Fix typo for `struct args_size'.

Mon Apr 24 00:12:18 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* flow.c (mark_set_1): Look inside strict_low_part.

	* c-typeck.c (decl_constant_value): Don't use var's init if volatile.

	* print-tree.c (dump): Don't call walk on rtx's.

	* integrate.c (expand_inline_function): Convert expanded arg from
	passed mode to nominal mode.

Sun Apr 23 13:14:47 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* fixincludes: fix _IO macros if split across two lines.
	Fix typo: EOF was indented.

	* gnulib2.c: New file with DImode library routines.
	* Makefile (gnulib2): Put them into gnulib.
	Must be explicitly requested.

Fri Apr 21 13:45:45 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* cccp.c (main): Don't turn on trigraphs for -Wtrigraphs or -Wall;
	use -trigraphs for that.

	* cccp.c (main): Use -trigraphs to enable trigraphs.
	* gcc.c: Pass -trigraphs to cpp; don't pass -T.

	* Makefile: Variable srcdir relates location of sources
	to current directory.  Default is `.'.

	* integrate.c (expand_inline_function): When copying expanded arg,
	use mode it's passed in, not arg's nominal mode.

	* dbxout.c (dbxout_block): Print generated name with assemble_name.

Thu Apr 20 12:36:09 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* stdarg.h: check __sparc__ instead of sparc.

Tue Apr 18 18:58:03 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* tm-next.h (STARTFILE_SPEC): Define it.

Mon Apr 17 19:56:05 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* dbxout.c (dbxout_block): Use ASM_GENERATE_INTERNAL_LABEL to format
	the labels LBB... and LBE...

Sun Apr 16 23:57:47 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* mips.md: Change MINUS to COMPARE where appropriate.

Sat Apr 15 16:11:49 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* c-decl.c (finish_struct, redeclaration_error_message):
	Rename variables named OLD and NEW.

	* sparc.md (cse'd mult pattern): Handle memory operands.
	Optimize small integer operands.

	* stmt.c (expand_decl): On sparc, ensure dynamic arrays of doubles
	are properly aligned, despite unaligned STACK_POINTER_OFFSET.

Fri Apr 14 10:59:56 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* expr.c (expand_call): Bugs treating struct value address as param:
	do so only if it's supposed to be pushed;
	decode value of FUNCTION_ARG properly.

	* tm-altos3068.h (CPP_SPEC): Some braces were dropped.

	* gcc.c (pexecute): Print message when exec fails.
	(perror_exec): New fn.
	(perror_with_name,pfatal_with_name): Change message syntax.

	* tm-hp9k320.h (ASM_IDENTIFY_GCC): Define as no-op.

Wed Apr 12 00:20:31 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* cse.c (cse_insn): Can record constant value being stored in
	a bit field, if we can tell that truncation won't change it.

	* m68k.md (bfset, bfclr, bfchg insns): Do CC_STATUS_INIT
	since the cc's are set from the old contents.

	* gcc.c (compilers): Running `as', put -o option before input file.

	* gcc.c: Delete output file only if that file's compilation fails.
	* gcc.c (record_temp_file): Changed args: always_delete, fail_delete.
	(store_arg): Likewise.  Callers changed.
	(clear_failure_queue): Called after each compilation.

Tue Apr 11 01:18:53 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* combine.c (subst): (SET (ZERO_EXTRACT) (OR (ZERO_EXTRACT) const))
	optimization was sometimes invalid.

	* tm-m68k.h (NOTICE_UPDATE_CC): A doubleword move that requires 2 insns
	does not set the cc's usefully.

	* Makefile (cleanlinks): Just do `clean', not `realclean'.
	(realclean): Delete config links also.

	* expr.c (expand_call): Handle case where return value is in memory
	but TARGET is a register.

	* c-typeck.c (build_binary_op_nodefault): New arg ERROR_CODE
	is passed to binary_op_error instead of CODE.
	All callers changed.
	(binary_op_error): CODE = NOP_EXPR is new special case.
	(truthvalue_conversion): Call build_binary_op_nodefault directly
	and specify NOP_EXPR for the error code.

	* c-decl.c (xref_tag): If pedantic, warn on fwd ref to enum.

Mon Apr 10 19:44:48 1989  Chris Smith  (csmith at mozart)

	* tm-convex.h (PCC_BITFIELD_TYPE_MATTERS): It doesn't,
	but set it anyway.  It makes for better code on this
	word machine.

	* convex.md (one_compl*): add not:QI and not:HI, which
	do get used after all.

	* tm-convex.h (A_REG_P, S_REG_P): define new macros
	convex.md: use them

	* convex.md (addsi3): tidy up constraints.

	* tm-convex.h (REG_OK_FOR_INDEX_P): stack pointer is not ok.

	* convex.md: add a pattern to push REG+CONST so we can
	prefer an A reg.

	* tm-convex.h (tstqi): should sign extend, not zero extend.

	* expr.c (convert_move): Extending narrow to DI via SI,
	operand of extendsidi2 was wrong.

	* emit-rtl.c (gen_lowpart): Handle CONST_DOUBLE.

Mon Apr 10 05:19:39 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* recog.c (nonmemory_operand): Test constant operands
	as general_operand does.

	* tm-m68k.h (PRINT_OPERAND): Limit effect of code `d'
	to constant addresses.

	* loop.c (can_eliminate_biv_p, eliminate_biv): Don't rely on givs with
	nonconstant coefficients, since the coeffs could be zero.

	* loop.c (can_eliminate_biv_p): Check each giv for ! ignore
	before assuming it can be used.
	(check_eliminate_biv): New fn, a piece of strength_reduce broken out.

	* cccp.c (error_from_errno): New fn, like error and perror_with_name.
	(do_include): Call that if open fails.
	(finclude): Print I/O error msg before closing desc.

	* c-decl.c (shadow_tag): If more than one tag or structure,
	or anything other than a tag, warning.

	* c-parse.y (components): Just warn if memb decl has no member,
	and only if pedantic.

	* loop.c (strength_reduce): Print uids, not luids, for dump.
	(record_giv): giv_count field counts only DEST_REG givs.
	(check_dbra_loop): src_two_before_end was set wrong.

	* loop.c (record_giv): New arg LOOP_END; all callers changed.
	Don't mark giv replaceable if used past LOOP_END.
	(find_mem_givs): New arg LOOP_END; all callers changed.

	* out-i386.c (FP_CALL): Make this a `return' stmt.

Fri Apr  7 11:56:58 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* expr.c (expand_expr, case ..._DECL): Preserve mode thru
	calling change_address.

	* expr.c (emit_library_call): Typo: ARGNUM => COUNT.

	* expr.c (preexpand_calls, expand_call): Take note of RETURN_IN_MEMORY.
	* stmt.c (assign_parms): Likewise.
	* integrate.c (function_cannot_inline_p): Likewise.

	* STACK_ARGS_ADJUST: Arg is now a `struct arg_data' and it should
	be updated in place.
	* tm-mips.h: Define it.
	* expr.c (expand_call): Adapt to this.  Assume padding comes after args
	so turn off the feature of changing the args' offsets.
	(emit_library_call): Adapt to this.

	* tm-mips.h (PRINT_OPERAND): Use CONST_DOUBLE_{LOW,HIGH}.
	Truncate SFmode constants to single precision.

	* c-typeck.c (mark_addressable): Fix test for local vs global reg var.

	* config.gcc: Change `:-' to `-' in var refs.
	Shell on convex doesn't handle `:-'.

Thu Apr  6 00:09:01 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* integrate.c (expand_inline_function): Compare actual's mode
	against formal's DECL_ARG_TYPE's mode, not TREE_TYPE's mode.

	* c-decl.c (implicitly_declare): Make the decl permanent if
	in global binding level.  (Can happen for certain invalid input.)

	* c-typeck.c (build_modify_expr): Block path that made a MODIFY_EXPR
	containing an ERROR_MARK.

	* config/tm.h: New file.

	* loop.c (only_reg_use_p): Fix bugs in recursion, add some fast
	special cases.  Comment on return value was backwards.
	(strength_reduce): Negate the value of only_reg_use_p.

	* genoutput.c (output_prologue): Output `#include hard-reg-set.h'.
	* Makefile: insn-output.o depends on that.

	* toplev.c (main): Typo recognizing -Wswitch.

	* config.gcc (mips): New alternative.
	* tm-mips.h, out-mips.c, mips.md, va-mips.h: New files.
	* varargs.h: Include va-mips.h if on mips.

Wed Apr  5 16:58:04 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* c-decl.c (duplicate_decls): Rename OLD, NEW to OLDDECL, NEWDECL.

	* stmt.c (expand_function_start): Ref subr instead of
	current_function_decl; should make no difference.

	* stmt.c (assign_parms): Do extra padding for some parms,
	controlled by MAX_PARM_BOUNDARY.
	* expr.c (expand_call): Same thing for caller side.
	Note this is implemented only for machines that lack push insns.
	Also, in both cases, it doesn't handle variable-size args.

Tue Apr  4 12:22:06 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* gcc.c (find_file): Try STANDARD_EXEC_PREFIX for startfiles too.

	* varasm.c (make_decl_rtl): Delete never-executed clause.

	* spur.md (movqi, loadhi, extend*, zero_extendhisi):
	Make subregs with C code, not RTL patterns, so we can
	avoid generating subreg of subreg.

	* optabs.c (emit_cmp_insn): Not all clauses always succeed,
	so stop using `else' structure.

	* stmt.c (expand_return): Avoid moving void to void, in cleanups case.

Mon Apr  3 18:04:33 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* m68k.md (cmphi): Don't allow a-reg vs a-reg, since that sign-extends.
	If there is one a-reg, make sure it is not last.

Sun Apr  2 13:02:26 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* stor-layout.c (agg_mode): Use highest mode that has desired size.
	Allow all integer modes, but reject sizes > MAX_FIXED_MODE_SIZE.
	(That defaults to the size of DImode.)

	* machmode.def: Add PSI, PDI and XF, CXF modes.

Sat Apr  1 00:50:11 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* ns32k.md (ashd, lshd): Delete patterns that logand the count with 31.
	The shift count is not truncated on this machine.

	* combine.c (subst): Simplify nested or's, nested xor's.
	(try_distrib): XOR doesn't distribute through anything.

	* rtl.c (rtx_equal_p): Don't die on null pointers.

	* loop.c (eliminate_biv): Use COMPARE, not MINUS, in generated compare.

	* loop.c (invariant_p): Mem refs in constant pool are invariant.

	* c-decl.c (redeclaration_error_message): If -traditional, allow
	redeclarations of typedef provided they agree.

	* c-decl.c (start_decl): Do expand_decl on the decl that pushdecl
	returns.  If there was a prev. decl with a different type,
	we have changed its type and cleared its old rtl, so it need new rtl.

Sat Apr  1 00:50:11 1989  Matthew Self  (rms at sugar-bombs.ai.mit.edu)

	* expr.c (convert_move): Modified to use mode classes
	instead of refering to specific machine modes.

	* expr.c (do_jump): Converted to use CONST0_RTX macro.
	do_jmp no longer refers to any machine modes directly except
	for VOIDmode!

	* expr.c (compare, compare1): Modified to use CONST0_RTX
	macro.  No longer refers to any machine modes directly
	except VOIDmode and BLKmode!

	* machmode.def: Documented assumptions made about the order
	of machine modes during mode widening.

	* optabs.c (expand_binop, expand_twoval_binop, expand_unop,
	emit_cmp_insn): Added mode widening which is independent of
	specific machine modes.  It assumes that we may widen to any
	higher numbered mode of the same mode class.
	  NOTE: the checks for VOIDmode ops which were present in
	QI and HI to SI widening are now present in all widening.
	I assume this is correct.  Also, widening is now possible
	from QI to HI.  This may or may not be a good thing....

	* rtl.h (CONST0_RTX): Added definition of new macro
	CONST0_RTX (mode).

	* rtl.h (GET_NOTE_INSN_NAME, GET_REG_NOTE_NAME): New macros.
	* rtl.c (note_insn_name, reg_note_name): New tables.
	* rtl.def (NOTE): Change last field from `i' to `n'.
	* rtl.c (print_rtx): Print mode of INSN_LIST or EXPR_LIST as reg-note.
	Print operand code `n' as name of kind of note.
	(read_rtx): treat `n' like `i'.

	* loop.c (struct induction): Add `mode' field.
	(strength_reduce, record_giv): Set the `mode' field in V.
	(can_eliminate_biv_p, eliminate_biv): Use that field.

	* loop.c (struct iv_class): `init_insn' records what inits the biv.
	Replaces `init_val_set' flag.
	(strength_reduce): Update and test `init_insn' instead.
	Use of a biv between its init and the start of the loop
	does not preclude its elimination from the loop.
	Setting a giv is ok for eliminating a biv, even if giv is "ignore",
	since that just means giv will be combined with another.
	Handle some DEST_ADDR givs for that purpose.
	Test for giv-setting before check can_eliminate_biv_p.
	New error check for replaceable giv whose value needed after loop.
	(only_reg_use_p): New fn.

	* expr.c (expand_expr): PLUS, MINUS with EXPAND_SUM:
	Associate even harder.

	* loop.c (strength_reduce): Treat all constant biv init vals like ints.

	* loop.c (strength_reduce): Clear all_reduced when v->ignore is set;
	the code to check this later didn't always do the job.

	* loop.c (verify_loop): Set loop_continue.
	(scan_loop): mention its value.
	* rtl.h: Define NOTE_INSN_LOOP_CONT.
	* stmt.c (expand_loop_continue_here): Output one.

Fri Mar 31 10:08:29 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* c-typeck.c (pointer_int_sum, pointer_diff): Treat const void * like
	void *.

	* rtl.c (rtx_addr_varies_p): Don't die on null exp.
	* cse.c (refers_to_mem_p, refers_to_p): Likewise.

	* gcc.c (validate_switches, validate_all_switches): New fns.
	Mark a switch as valid if any compiler spec or the linker spec
	matches it, even for languages not being used.

Thu Mar 30 00:22:14 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* loop.c (loop_optimize, move_movables): when moving a `clr' insn used
	in zero-extension, sometimes change it to an `and' so that the
	significant low bits are not clobbered.

	* cccp.c: Implement __BASE_FILE__ and #once.
	(savestring): New fn.
	(struct file_name_list): new name for struct directory_stack.
	(enum node_type): Add T_ONCE, T_BASE_FILE.
	(directive_table): Add #pragma once.
	(initialize_builtins): Add __BASE_FILE__.
	(special_symbol): Handle __BASE_FILE__, together with __FILE__.
	(do_include): Ignore the file if it's on the #pragma once list.
	(do_once): New fn; add current file to #pragma once list.

	* cccp.c (do_include): Don't add non-ex files to list of deps.

	* config.gcc: Use {...:-...}, not {...=...}.

	* c-parse.y: Add precedence for IF/ELSE, and for parens;
	avoids some conflicts.

	* tm-newsgas.h: Include tm-news.h and define USE_GAS.

	* tm-news.h: New name for tm-news800.h.
	If not USE_GAS, define SONY_ASM.
	Don't define USE_GAS by default.
	(CPP_PREDEFINES): Various alternatives depending on processor type.
	(ASM_FORMAT_PRIVATE_NAME): Override this.
	(ASM_IDENTIFY_GCC): Override; output nothing.
	(FUNCTION_PROLOGUE, FUNCTION_EPILOGUE): Round fsize up to % 4.
	Max for halfword link insn is 32k, not 64k.
	(FUNCTION_EPILOGUE): Don't output move.l if no regs to restore.
	(PRINT_OPERAND_ADDRESS): Change handling of tableref pc-rel addresses.
	* m68k.md (movhi): Add SONY_ASM conditional.

	* cse.c (cse_insn): If replacing a dest address, preserve MEM_IN_STRUCT

	* gcc.c (error, fatal): alternate varargs defns if HAVE_VPRINTF.

Wed Mar 29 09:54:13 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* gcc.c (process_command): Check WORD_SWITCH_TAKES_ARG, so that
	-Tdata can be handled right.

	* stmt.c (check_for_full_enumeration_handling): new fn, for warn_switch
	(expand_end_case): Call it, if orig index was enum.
	* toplev.c (main): Handle -Wswitch.
	* c-parse.y (SWITCH stmt): Pass orig switch expr to expand_end_case.

	* tm-*.h, out-*.c: Uniformly use reg_names, not reg_name, and don't
	define any duplicates.
	* final.c: Delete reg_name.

	* c-parse.y (is_reserved_word): Add keywords __asm and __inline;
	also __const and __volatile.
	(yylex): Keywords that start with `__' are recognized regardless of
	-traditional or -ansi.

	* c-parse.y (check_newline): Always recognize #ident.
	Macro IDENT_DIRECTIVE is no more.
	If ASM_OUTPUT_IDENT is undefined, don't output anything for #ident.
	* tm-3b1.h: Don't define IDENT_DIRECTIVE or ASM_OUTPUT_IDENT.
	* tm-encore.h, tm-i386gas.h, tm-i368v.h, tm-sun386i.h, tm-vaxv.h:
	Don't define IDENT_DIRECTIVE; define ASM_OUTPUT_IDENT to output in
	default way.

	* expr.h (RETURN_IN_MEMORY): New macro, default defn here.
	* expr.c (expand_call): Use it to control where to return value.
	* stmt.c (expand_function_start): Likewise.

	* out-sparc.c (find_addr_reg): Abort if none found.
	Eliminate confusion; do only one change between tests for PLUSness.
	(output_move_double): Arg to find_addr_reg is address, not mem ref.
	* out-m68k.c, out-spur.c, out-i386.c, out-alliant.c: Likewise.

	* jump.c (find_cross_jump): Don't let either E1 or E2 be included
	in the range of matching insns preceding the other (E2 or E1).

	* c-parse.y (check_newline): No error for `#pragma\n'.

	* Makefile (gcc.o): Control STANDARD_STARTFILE_PREFIX here.

	* stmt.c (walk_fixup_memory_subreg): handle null.

	* tm-sparc.h (FUNCTION_BLOCK_PROFILER): Change LPBnn to LPYnn,
	to avoid conflict with final.c.

Tue Mar 28 15:23:17 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* cccp.c (do_include): If fail, print system error message.
	(perror_with_name): Use more standard error format.  Inc. `errors'.

	* dbxout.c (dbxout_function): Output any temporary types
	that were made by dbxout itself.

	* stmt.c: always use an epilogue if pcc-struct-return.
	(expand_function_start): Compute return_label after testing that.
	(expand_function_end): Output a return insn after pcc-struct-return
	processing, if there is a return insn.
	(expand_null_return): Don't output a return insn, in that case.
	Simplify the conditions--depends entirely on HAVE_return.

	* tm-m68k.h (FUNCTION_BLOCK_PROFILER): Use jsr, not call.

	* reload.c (find_reloads): Certain mem addresses will be offsetable
	after reloading; in particular, those where reg_equiv_address applies.

	* loop.c (check_dbra_loop): Change MINUS to COMPARE.

	* c-typeck.c (convert_for_assignment): Return THE standard error_mark.

Thu Mar 23 09:39:02 1989  Richard M. Stallman  (rms at watson)

	* c-parse.y (components): Error if empty.

	* dbxout.c (dbxout_symbol): Output const variables as N_STSYM.

	* varasm.c (force_const_mem): Use ASM_OUTPUT_DOUBLE_INT if defnd.

	* c-decl.c (grokdeclarator): Warn about `long long long'.

	* reload1.c (reload): When changing REG to MEM, clear REG_USERVAR_P.
	* final.c (alter_subreg): Preserve volatile bit of MEM.

	* m68k.md (cmpsi, cmphi): Permit cmpm.

	* gcc.c (find_file): Use standard_startfile_prefix_2.
	Now search /usr/local/lib/, /lib/ and /usr/lib/.

	* tm-m68k.h (PRINT_OPERAND): Support code `d'.
	* m68k.md (cmpsi, cmphi, cmpqi): Use it for all mem addresses.

	* final.c (output_asm_insn): Don't allow %LETTER without an
	operand number.
	* tm-m68k.h, m68k.md, tm-hp9k320.h, tm-news*.h: Use %@ instead of %s.
	* tm-alliant.h, alliant.md: Likewise.
	* i386.md, out-i386.h: Put `0' after each %L, %W, %B, %S, %Q, %R.

	* stmt.c (expand_end_stmt_expr): Pop pending stack args.

	* varasm.c (assemble_variable): For 0-size common variable,
	allocate at least 1 byte.

	* tm-encore.h (ASM_OUTPUT_DOUBLE, PRINT_OPERAND): Use 0f, not 0l,
	for doubles.

Mon Mar 13 10:24:56 1989  Richard M. Stallman  (rms at ccvi)

	* out-i386.h (function_prologue, function_epilogue):
	Use call_used_regs, not a copy, so -f options work.
	Save regs in the opposite order.
	Save regs even starting from 0 if they happen to be call-saved.

	* Bug fixes from Rob McMahon.

	* loop.c (strength_reduce): When inserting insn to set
	nonreplaceable giv, put it after all the consecutive insns
	that compute it.

	* reload.c (find_reloads): When forcing const to mem,
	use the insn's operand mode, not the const's mode.

	* reload1.c (choose_reload_targets): Use wider of inmode and outmode
	when determining have_groups.

	* reload1.c (choose_reload_targets): typo checked wrong insn with
	constraint_accepts_reg_p.

	* reload1.c (choose_reload_targets): Enable #if-0'd code for
	forgetting old reloads in case of output reload from a non-spill-reg.

Sun Mar 12 00:04:49 1989  Richard M. Stallman  (rms at ccvi)

	* c-parse.y (yyerror): Add forward-decl here.
	* c-tree.h: Delete decl here.

	* New macro USE_C_ALLOCA.
	* cse.c (cse_main): Do alloca (0) to clear out C alloca.
	* flow.c (life_analysis):
	* local-alloc.c (local_alloc):
	* reload1.c (reload_as_needed): likewise.

	* loop.c (emit_iv_init_code, eliminate_biv):
	Always put constant in a PLUS last.

	* gcc.c (make_switch): Unused function deleted.

	*gcc.c (switches): Each switch has a `used' field.
	(process_command): Init it to 0 when making `switches'.
	(do_spec_1, handle_braces, give_switch): Set to 1 when switch is used.
	(main): If it remains 0 at the end, print error message.

	* expr.c (convert_move, convert_to_mode): Don't truncate a MEM in
	place if it is volatile.

	* loop.c (strength_reduce): When reducing a giv, if the biv is
	incremented between the giv's creation and its use, increment
	the reduced giv var *after* its use.

	* c-decl.c (duplicate_decls): Warn about proto vs nonproto
	only if no other errors apply.

	* jump.c (invert_exp): Don't crash if arg is null.

	* alliant.md (float*i*f2): Don't allow immediate ops.
	(sne): Fix typo, fsne => fsneq.

	* expr.c (store_one_arg, expand_call): When size doesn't matter,
	pass const0_rtx, not (rtx) 0.

	* expr.c (do_jump): Args to invert_exp were missing.

	* gcc.c (store_arg): Now 2 separate args for delete-on-success
	and delete-on-failure.  All calls changed.
	(do_spec_1): DELETE_THIS_FILE is meaningful for output files.

	* config/xm-alliant.h (LINK_SPEC): Pass -X to linker.

Sat Mar 11 10:30:41 1989  Richard M. Stallman  (rms at ccvi)

	* tm-*.h, xm-*.h, *.md: Moved to subdir `config'.
	* output-*.c: Moved to `config/out-*.c'.
	* Makefile (.c.o): Define rule to use -Iconfig when compiling.
	(various): Delete the commands from some compilation rules.
	Put -Iconfig in other compilation commands.
	Also some reordering of variable defs and comments for cleanliness.
	(realclean): Change a shell comment to a Make comment.

	* fold-const.c (fold): Simplify and extend TRUTH_... operators
	knowing that args must be ints and values will be 0 or 1.

	* gcc.hlp: New file (for VMS).

	* reload1.c (reload): Don't let two 2-groups overlap.

	* reload.c (push_reloads): When a plain reg matches a reload
	for an increment, don't change the reload_in to a plain reg.
	Leave the increment there.

	* integrate.c (expand_inline_function): Don't try to inline
	unless the parm machine modes really match what's expected.

	* stmt.c (emit_case_nodes): default_label is an rtx, not tree.

	* tm-next.h (DOLLARS_IN_IDENTIFIERS): Define it as 1.

	* output-sparc.c (output_move_double): Don't trust random structs
	to be double-word aligned.

	* gcc.c: Pass -Wcomments to cpp.

	* rtl.def (ASM_OPERANDS): New operands, source file and line.
	* rtl.h (ASM_OPERANDS_*): New macros for components of ASM_OPERANDS.
	* stmt.c (expand_asm_operands): Use new fields, not REG_ASM_* notes.
	* toplev.c (error_for_asm): likewise.
	* rtl.h (enum reg_note): Delete REG_ASM_FILE, REG_ASM_LINE.

	* combine.c (try_combine): Check explicitly for volatility in I2, I1.

Fri Mar 10 19:30:10 1989  Richard M. Stallman  (rms at ccvi)

	* c-parse.y (GOTO stmt): Set TREE_USED for the label.
	* c-decl.c (poplevel): Warn about unused label.

	* c-decl.c (warn_pointer_arith, warn_strict_prototypes): New vars.
	(lang_decode_options): Options to set them.
	* c-typeck.c (pointer_int_sum, c_sizeof): Maybe warn if bad target.
	* c-decl.c (grokparms): Maybe warn if nonprototype fn decl.

	* flags.h, toplev.c (warn_shadow): New flag.
	* toplev.c (main): Decode it.
	* c-decl.c (pushdecl): Maybe warn about any shadowing.
	Existing parm-shadowing warning now disabled if shadowing decl
	is also a parm.

	* flags.h, toplev.c (warn_id_clash, id_clash_len): New flags.
	* toplev.c (main): Decode -Wid-clash-LEN.
	* tree.c (get_identifier): Implement warning if two idents match.

	* toplev.c (compile_file): Warn about statics defined and unused.

	* rtl.h (CONST0_RTX): New macro.

	* recog.c (offsetable_address_p): New 1st arg says whether to demand
	a strictly valid address.
	(offsetable_memref_p): Pass nonzero.
	* stmt.c (optimize_bit_field): Pass zero.

	* cccp.c (main): Allow -Wcomment like -Wcomments.
	* c-decl.c (lang_decode_options): Likewise.

Sun Mar  5 15:02:59 1989  Randall Smith  (randy at apple-gunkies.ai.mit.edu)

	* m68k.md [tstdf, cmp[sd]f, truncdfsf2, floatsi[sd]f2, add[sd]f3,
	sub[sd]f3, mul[sd]f3, div[sd]f3, neg[sd]f2, abs[sd]f2]: Made sure
	that the test function's in the match_operands of the define_expand
	and define_insn's matched, and made that test function
	"register_operand" when both define_insn's really needed registers
	in that spot.

Sat Mar  4 00:25:37 1989  Richard M. Stallman  (rms at c2v)

	* expr.c (emit_push_insn): Don't ever bypass the big-endian
	padding at the end.

	* cccp.c (deps_output): Break line if would otherwise exceed 75 chars.
	Make a name for that value 75.

	* combine.c (subst): Handle general case of (subreg (sign_extend X)).

	* tm-sun386i.h (CPP_PREDEFINES): Define `sun'.

	* fixincludes: change `find' calls to find dirs thru symlinks.

	* flow.c (mark_set_1): (set (subreg (reg N))...)
	does make reg N significant for this basic block.

Fri Mar  3 13:55:25 1989  Richard M. Stallman  (rms at c2v)

	* c-decl.c (parmlist_tags_warning): Print an explanation
	for the first such warning.

	* i386.md (extendsfdf): Let op 1 match op0 if that is an fp reg.

	* expr.c (expand_call): Fix stupid errors copying pcc struct value.

	* varasm.c (output_constructor): Discard NOP_EXPRs from build_c_cast.

Thu Feb 23 05:55:57 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* Version 1.34 released.

	* c-typeck.c (build_c_cast): If EXPR is an error mark, return that.

	* fold-const.c (div_and_round_double): Abort if divisor is 0.
	(combine): Likewise, for real constants.
	(real_zerop): New subroutine.
	(fold): Don't try to fold division if divisor is 0.
	Don't try to fold reals if can't do arithmetic on them.
	Don't try to compare reals for TRUTH_..._EXPR if can't do arith.
	Use real_zerop to test reals for zeroness.
	For TRUTH_ANDIF_EXPR and TRUTH_ORIF_EXPR, can simplify based on
	first operand alone.

	* c-typeck.c (store_init_value): Fix error msg text.

	* tm-sparc.h (FUNCTION_PROFILER): Use `mcount'.
	* tm-sun4os3.h (FUNCTION_PROFILER): Override it; use `.mcount'.

Wed Feb 22 04:33:22 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* tm-hp9k320.h (CPP_SPEC, CPP_PREDEFINES): Make handling of
	-Dmc68000 depend on TARGET_DEFAULT.

	* tm-sparc.h (FUNCTION_PROFILER): Missing newline in fprintf.

	* integrate.c (expand_inline_function): Don't map struct-value-address
	in memory if fn does not use it.

	* c-parse.y (check_newline): At skipline, detect eof.

	* stmt.c (uninitialized_vars_warning): Change text of warning.

Tue Feb 21 03:58:50 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* output-sparc.c (output_mul_insn): Handle case of both args
	in reg 8, or both in reg 9.

	* tm-sparc.h (ASM_SPEC): Define, to handle -pipe.

	* tm-sparc.h (FUNCTION_PROFILER): Add omitted fprintf args.
	(BLOCK_PROFILER): Likewise.  Use tempvar.

	* m68k.md (QImode btst): Allow nonoffsetable mem refs.

Mon Feb 20 00:32:42 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* flow.c (mark_used_regs): Don't record about global reg vars.

	* config.gcc (convex-*): tm file names are tm-convex1.h, tm-convex2.h.

	* tm-vax.h, tm-ns32k.h, tm-alliant.h: Define PCC_STATIC_STRUCT_RETURN.

	* gcc.c (compilers): Pass `-a' to cc1.
	* tm-sun3.h, tm-sparc.h (LIB_SPEC): Define, to handle `-a'.

	* expr.c (emit_push_insn): Copy stack addresses to be passed to bcopy;
	old method of preadjustment is broken by changes in emit_library_call.

	* c-decl.c (finish_decl): New temp `temporary'; don't get confused
	about whether allocation was temporary.

Sun Feb 19 17:03:35 1989  Chris Smith  (csmith at mozart)

	* tm-convex.h: define PCC_STATIC_STRUCT_RETURN

	* convex.md:
	remove pshea patterns, movsi does it better.
	add ashift:DI abs:DF abs:SF
	(tstdi): use a clobbered register instead of a bogus DImode zero.
	(trunchiqi2): delete noninstruction cvth.b
	(udivsi3, udivhi3, udivqi3): deleted, expand_divmod does it now.
	(call, call_value): delete stupid call/ret -> jump optimization.
	(call, call_value): flush call_ap_check, use reg_mentioned_p instead.

	* convex.md: (movxx): swap constraint alternatives so that the
	leftmost alternative is (set =g r).  This makes (set mem const)
	get combinable input reloads of const instead of uncombinable
	output reloads to mem.  They still do not combine, but wtf,
	I'll inch up on it.

	* output-convex.c: (const_double_{high,low}_int): new routines
	to pick apart const_doubles for assembler.

Sun Feb 19 01:40:17 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* sparc.md (shift memory right 24 bits): Another `a1' typo.

	* config.gcc (convex-*): Delete troublesome whitespace.

	* c-decl.c (grokparms): Delete redundant `parm != 0' tests.

	* stmt.c (fixup_memory_subreg): Slight simplification.

	* tm-sparc.h (FUNCTION_PROFILER): Fill delay slot.
	(FUNCTION_BLOCK_PROFILER): Use sethi.
	(BLOCK_PROFILER): Use %g2, not %g0.  Use sethi.

Sat Feb 18 02:11:25 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* expr.c (expand_expr): Ignore const array's initial value
	if it's an error_mark.
	* c-decl.c (finish_decl): Set DECL_INITIAL to an error_mark
	if the decl is a permanent node.

	* cccp.c (rescan): If traditional, if macro ends inside string,
	keep scanning for the end of the string.
	(handle_directive): A line of just `#' becomes blank.
	(collect_expansion): \ in strings traditionally doesn't hide macro arg.

	* m68k.md, alliant.md (addsi3): New alternative a=r+a, in addition
	to old a=a+r, needed since reload-insns are not commuted.

Fri Feb 17 03:15:23 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* tm-m68k.h (PCC_STATIC_STRUCT_RETURN): Define it.
	* toplev.c, flags.h: New var flag_pcc_struct_return.
	* stmt.c (expand_function_start): Obey new flag and new variable.
	* expr.c (expand_call): Obey new flag and new variable.
	* varasm.c (assemble_static_space): New function.

	* stmt.c (expand_return): If we need cleanups, compute retval first
	into pseudo reg, then do the cleanups, then copy it to return reg.

Thu Feb 16 02:59:52 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* regclass.c (init_reg_sets_1): Win if STATIC_CHAIN_REGNUM undefined.

	* expr.c (expand_call): Handle conflict between two precomputed
	args that are both function calls returning structures.

	* loop.c (move_movables): Bkwds test of m->partial, for a matching reg.

	* expr.c (emit_library_call, expand_call): Handle STACK_ARGS_ADJUST.

Wed Feb 15 01:59:15 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* toplev.c (flag_caller_saves): New var, for -fcaller-saves.
	DEFAULT_CALLER_SAVES controls initial value.
	* global-alloc.c (find_reg): Do caller saves only if flag set.
	* local-alloc.c (find_free_reg): Do caller saves only if flag set.
	* tm-alliant.h, tm-convex.h: Define DEFAULT_CALLER_SAVES.

Wed Feb 15 01:59:15 1989  Chris Smith  (rms at sugar-bombs.ai.mit.edu)

	* caller-save.c: New file.
	* regs.h (CALLER_SAVE_PROFITABLE): New macro.
	(reg_n_calls_crossed): new int-vector replaces reg_crosses_calls.
	* flow.c (allocate_for_life_analysis, propagate_block, dump_flow_info):
	Use reg_n_calls_crossed.
	* stupid.c (stupid_mark_refs, stupid_life_analysis): Likewise.
	* global-alloc.c (find_reg): Sometimes allocate call-clobbered regs
	for call-crossing pseudos.
	New arg ACCEPT_CALL_CLOBBERED; callers changed.
	* local-alloc.c (find_free_reg): Similar changes.
	(qty_n_calls_crossed): New int-vector replaces qty_crosses_calls.
	(alloc_qty, local_alloc, combine_regs, find_free_reg): change that var.
	* regclass.c (call_fixed_regs, call_fixed_reg_set): new vars.
	(init_reg_sets_1): Initialize them.
	* reload1.c (reload): Call caller-saves processing if needed.

Wed Feb 15 01:59:15 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* expr.c (expand_expr): INTEGER_CST for DImode: don't handle
	endianness here.  So CONST_DOUBLE_LOW is always the low word.
	* varasm.c (force_const_mem): Handle it here. 

	* expr.c (convert_move): widening followed by extendsidi2 had braino.

	* integrate.c: Don't include ctype.h; not needed and kills Sun cpp.

	* m68k.md (cmpsf, cmpdf and their recognizers):
	Replace MINUS with COMPARE.
	Also, use VOIDmode for COMPAREs, not SF or DF.

	* optabs.c (sign_expand_binop): Handle ops such as division where
	an unsigned char could be widened and handled with signed int insns.
	* expmed.c (expand_divmod): Use that.

	* c-typeck.c (digest_init): Allow for type variants in validating
	initialization from a string constant.

	* c-typeck.c (decl_constant_value): Disable opt. if pedantic or
	outside functions, so that validity of program is never affected.

	* fold-const.c (fold): Signedness-test for ABS_EXPR was backwards.

Tue Feb 14 01:30:47 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* cccp.c (main): Don't omit normal output, if we want deps on
	a separate stream.

	* c-decl.c (grokdeclarator): Don't record any arg types for functions
	if -traditional.

	* print-tree.c (prtypeinfo): Mention permanent attribute.

	* tm-next.h: New file.

	* c-typeck.c (decl_constant_value): The DECL_INITIAL may be ERROR_MARK.

	* c-decl.c (duplicate_decls): For fns, new static decl overrides
	old non-static one.

	* emit-rtl.c (gen_lowpar, gen_highpart): Use change_address, so we
	preserve volatility, etc.

	* stmt.c (expand_expr_stmt): Use emit_filename, emit_lineno
	as file and line for any warning.
	* emit-rtl.c (emit_line_note): Set those vars.

	* c-decl.c (store_parm_decls): If -Wimplicit, warn of arg with no decl.

	* recog.c (offsetable_address_p): Use strict_memory_address_p,	
	since called from reload.c.

Mon Feb 13 03:11:50 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* sparc.md (compare-to-reg patterns): Some still had MINUS.

	* toplev.c (main): Warn if `-a' on system that can't handle it.

	* stmt.c (expand_asm_operands): Delete unused local `val'.
	(pushcase_range): Likewise for `value'.
	(fixup_var_refs): Likewise for `insn'.
	* emit-rtl.c (start_sequence): Likewise for `save'.
	* loop.c (scan_loop): Likewise for `before_start'.
	* expr.c (expand_expr): Delete label `binop1'.

	* reload1.c (constraint_accepts_reg_p): Handle SUBREGs of REGs.

Sun Feb 12 05:37:46 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* gnulib.c (__bb_init_func): New function

	* tm-m68k.h (BLOCK_PROFILER, FUNCTION_BLOCK_PROFILER): Defined.

Sat Feb 11 00:05:55 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* tm-sparc.h (FUNCTION_PROFILER): Make it really work.
	(BLOCK_PROFILER, FUNCTION_BLOCK_PROFILER): New macros.

	* final.c (final): Use BLOCK_PROFILER at start of each basic block.
	(final_start_function): Use FUNCTION_BLOCK_PROFILER if -a.
	(end_final): New fn to output the block-profiling tables.
	* toplev.c (profile_block_flag): Set if -a.
	(compile_file): Call end_final.

	* combine.c (try_combine): Avoid combining in most cases if I3
	has an inc or dec and I1 or I2 uses the same register.

	* tree.c (size_in_bytes, int_size_in_bytes): Use type's main variant.

	* c-typeck.c (actualparameterlist): Error if parm type is incomplete.

	* expr.c (expand_call): Ignore args that have incomplete type.

Fri Feb 10 02:26:02 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* c-parse.y (case stmts): strip dummy NOP_EXPRs.

	* reload1.c (reload_as_needed): Clear reg_{has,is}_output_reload here,
	(choose_reload_targets): not here.

Thu Feb  9 01:35:55 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* output-sparc.c (output_mul_by_constant): Forget cc status.

	* stmt.c (assign_parms): Don't put volatile parms in regs.

	* vax.md (jlbs/jlbc recognizers): Move them before jbc/jbs recognizers.

	* cse.c (fold_rtx): Handle (EQ (COMPARE ...) (CONST_INT 0)).

	* c-typeck.c (default_conversion, digest_init): For static const
	nonvolatile scalar variable, use its initial value if known.

	* expr.c (expand_expr: case COMPONENT_REF): If containing structure
	comes out volatile, leave the component MEM volatile too.

	* hard-reg-set.h: Fix multi-word case macros to swallow semicolon.

	* c-typeck.c (default_conversion): In array=>ptr, volatility
	of target type comes from TREE_THIS_VOLATILE, not TREE_VOLATILE.

	* reload1.c (forget_old_reload_1, choose_reload_targets):
	New array reg_is_output_reload is converse of reg_has_output_reload.
	forget_old_reload_1 needs both.

Wed Feb  8 01:26:24 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* reload1.c (forget_old_reloads_1): New fn, guts of forget_old_reloads.
	Do process a spill reg if it isn't used for reloading in this insn.
	(forget_old_reloads): Deleted, replaced with note_stores.
	(reload_as_needed): Undo Feb 1 change.
	Call forget_old_reloads_1 on pseudos autoincremented and not reloaded.

	* c-typeck.c (convert_for_assignment): Handle variant types.

	* c-decl.c (lang_decode_option): -Wall implies -Wunused.

Tue Feb  7 01:32:28 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* combine.c (try_combine): Don't try adding outputs to an asm_operands.

	* cse.c (CHEAPER): Don't ever let a hard reg get ahead of a pseudo.

	* stmt.c (fixup_gotos): Don't crash on undef label if THISBLOCK is 0.

	* c-decl.c (parmlist_tags_warning): New fn.
	* c-parse.y (parmlist, parmlist_or_identifiers): Call it,
	to warn about any tags defined inside the parmlist.
	* c-decl.c (grokparms): Don't warn about ptr to incomplete type.
	The new warning is better.

Mon Feb  6 01:11:36 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* expr.c (store_constructor): Incorrect ALIGN arg in store_field calls.

	* c-parse.y (%union): Delete unused alternative.

	* c-decl.c (grokparms): Use main variant to test for ptr to incomplete.

	* c-decl.c (finish_enum): Delete superfluous init for `pair'.

	* cse.c (fold_rtx): Optimize X+0, X-0 in floating point.
	Fix typo in PLUS case; omitted value to compare GET_MODE_CLASS against.
	(equiv_constant): Allow CONST_DOUBLE.

	* cse.c: Optimize past if-statements that are known to fail.
	(cse_insn): If condjump becomes uncond to end of this block,
	set cse_skip_to_next_block.
	(cse_basic_block): If that happens, ignore rest of block, and maybe
	treat next block as part of this one (if tables have room).
	Resume insn that starts next basic block to be scanned.
	(cse_main): Make room for at least 500 qtys.
	(cse_end_of_basic_block): Subroutine broken out of cse_main.

	* c-parse.y (hash, is_reserved_word): Rewrite: new hash technique.

	* c-decl.c (duplicate_decls): Be smart about proto vs nonproto mismatch
	involving a function definition.

Sun Feb  5 17:31:12 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* alliant.md (movdi): Typo in `fmoved'.
	(ftruncsf2): Handle moving into fp reg.

	* jump.c (jump_optimize): Typo in testing PRESERVE_DEATH_INFO_REGNO_P.

	* reload1.c (choose_reload_targets): Move all death notes to the
	output reload insn.

	* m68k.md (fix_truncsfsi2,fix_truncdfsi2): Use accurate rtl pattern.

	* loop.c (delete_insn_forces): Use presence of REG_RETVAL to check
	for value-of-library-call insn.

Sat Feb  4 18:17:56 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* integrate.c (expand_inline_function): Make addresses of stack
	slots valid somehow.

	* tm-3b1.h (DIVSI3_LIBCALL, etc.): Define these macros; avoid gnulib.

	* expmed.c (store_bit_field): Avoid (subreg (mem)) when converting
	VALUE1 to SImode.

	* jump.c (jump_optimize): Do delete USE and CLOBBER insns.
	This is needed for proper jump optimization.

	* rtl.def (COMPARE): New code.
	* *.md (compare and related patterns): Use COMPARE, not MINUS:VOID.
	* loop.c (eliminate_biv, can_eliminate_biv_p): Likewise.
	* cse.c (fold_rtx, fold_cc0, cse_insn):
	* output-m88k.c (output_{f,}compare, output_store):
	* output-sparc.c (strict_single_insn_op_p, single_insn_src_p, safe_insn_src_p):
	* combine.c (subst):
	* jump.c (jump_back_p):

Fri Feb  3 18:34:27 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* output-i386.c (notice_update_cc): If arith insn sets the cc's,
	discard all remnants of previous cc value and flags.

	* sparc.md (ashiftrt mem by 24): Fix typo `a1'.

Thu Feb  2 14:55:44 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* output-sparc.c (output_mul_insn): Clear the CC status.

Wed Feb  1 20:01:54 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* Version 1.33 released.

	* reload1.c (reload_as_needed): On entering new basic block,
	if it didn't need reload regs, forget all inherited contents of those.

	* tm-alliant.h (NOTICE_UPDATE_CC): Floating moves don't set the cc's.
	Also delete the clauses and tests for FPA regs. 

Tue Jan 31 21:51:05 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* config.gcc: Handle convex-c1, convex-c2.
	* tm-convex1.h, tm-convex2.h: New files that include tm-convex.h.
	* tm-convex.h: Define switches -mnoc1, -mnoc2.

	* config.gcc: rename `nofp' to `nfp', to match the file names.

Mon Jan 30 22:12:15 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* output-sparc.c (output_delay_insn): Extract the operands,
	call alter_subreg, constrain_operands and NOTICE_UPDATE_CC.
	So callers other than output_eager_then_insn don't lose.
	(output_eager_then_insn): No need to do that stuff.

	* symout.c (symout_block_symbols): Handle (MEM (REG)) for
	variable-sized arrays.

	* tm-encore.h (ASM_SPEC): Always pass -j; avoid jump-range lossage.

Sun Jan 29 17:06:26 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* alliant.md: Fix refs to CONST_DOUBLEs to use CONST_DOUBLE_{HIGH,LOW}.

	* combine.c (subst): (minus (zero_extend ...) (const_int ...)) opt.
	now limited to within the context of (set (cc0) ...).

Sat Jan 28 14:26:08 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* cse.c (fold_cc0): Missing `&' extracting CONST_DOUBLEs.
	(fold_rtx): Don't put CONST_DOUBLEs together into a (CONST (PLUS...)).

	* output-convex.c (gen_cmp): Recognize CONST_DOUBLE as a constant.

	* tree.c (build_real_from_int_cst): Typo in REAL_ARITHMETIC case.

	* Makefile (bootstrap2): Don't use bootstrap3 as subroutine.

	* varasm.c (force_const_mem): Put the CONST_DOUBLE on the chain
	if its MEM is stored in it; so it can be cleared at end of function.

	* stmt.c (emit_case_nodes): Put a compare before each cond-jump.
	Two cond-jumps after one cond is invalid and makes cse produce garbage.

Fri Jan 27 01:05:01 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* tm-sun2.h (CPP_SPEC): Define __HAVE_68881__ only if -m68881.

	* c-decl.c (start_decl): Don't expand_decl if DECL already has rtl.
	(grokparms): If just declaring fcn, incomplete parm type is just
	a warning, and don't discard the specified type.

	* expmed.c (expand_divmod): Be smarter about not clobbering args
	with intermediate results; one mem can clobber another, and a reg
	can clobber a mem.

	* tm-i386.h (FUNCTION_PROFILER): Use LPREFIX.  May actually work now.
	* tm-i386gas.h: Include tm-bsd386.h, not tm-att386.h.
	This means changing asm syntax.
	#undef DBX_NO_XREFS and DBX_CONTIN_LENGTH.

	* sparc.md (eager branch peepholes): Don't forget 2nd arg to
	safe_insn_src_p.
	Don't print warnings.
	* output-sparc.c: (strict_single_insn_op_p): Return 0 for floating
	REG or MEM, since copying that may take 2 insns.
	(operands_satisfy_eager_branch_peephole): require delay insn to
	be strict_single_insn_op_p as well as safe_insn_src_p.
	(operand_clobbered_before_used_after): Don't print warnings.

	* varasm.c (decode_rtx_const): Clear entire structure incl. gaps.
	Avoids spurious hash mismatches.
	(force_const_mem): If CONST_DOUBLE, store its CONST_DOUBLE_MEM field.
	Also look in that field rather than hashing, to save time.

	* c-typeck.c (build_c_cast): If value is literal, mark NOP_EXPR as so.
	(store_init_value): Change error msg.

	* c-decl.c (duplicate_decls): Classify prototype vs nonprototype
	mismatches better.

	* tm-3b1.h: Fix comment.

Wed Jan 25 12:46:50 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* Makefile (cleanlinks): Use -f.

Tue Jan 24 17:54:16 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* cse.c (canon_hash): Fix paren error in last change.

	* varasm.c (immed_real_const_1): Missing arg to bcmp.

Mon Jan 23 02:43:45 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* stor-layout.c (layout_type): BLKmode elts force array to be BLKmode.

	* genpeep.c, genoutput.c, genemit.c: Put `#include "real.h"' in output.

	* stmt.c (expand_expr_stmt): No "no effect" warning for error-mark.

	* varargs.h: Rename implicit arg name to __builtin_va_alist
	which triggers code in assign_parms.  Does this really matter?

	* sparc.md (sne): New define_expand.
	(seq recognizers): Handle sne as well.
	* output-sparc.c ({strict_,}single_insn_src_p):
	Some NEG and MINUS insns are actually 2 asm insns.
	(safe_insn_src_p): No floating arith is safe; they can trap.
	(eq_or_neq): New fn, for seq/sne recognizers.

	* c-decl.c (grokdeclarator, size of array type):
	Strip from SIZE any NOP_EXPRs that don't change anything.

	* reload.c, recog.c: Include real.h so constraint macros can examine
	CONST_DOUBLEs.

Sun Jan 22 04:12:54 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* c-decl.c (init_decl_processing): Define __builtin_saveregs.
	* tree.h: likewise.
	* expr.c (expand_builtin): Handle it.

	* tm-sparc.h: Define TARGET_EAGER and -meager.
	* sparc.md (eager branch peepholes): Reenable, but test TARGET_EAGER.
	Change fb insns to use %F.  Delete `,a' from some of them.
	* jump.c (jump_optimize): Don't delete USE and CLOBBER insns.

	* xm-vms.h (const): Define it as empty.

	* make-cccp.com: Move the rename of cexp_tab.c.
	Compile cccp.c with no macro definitions.

	* cccp.c (main): VMS conditional for setting max_include_len.

Sat Jan 21 12:53:00 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* varargs.h (va_start): On sparc, call __builtin_saveregs.
	Delete the old conditional that used va-sparc.h.
	Rename macros and locals to start with two underscores.
	* va-sparc.h: File deleted.

	* c-decl.c (store_parm_decls): Initialize OTHERS.

	* stmt.c (assign_parms): Obey layout_decl.

Fri Jan 20 02:19:32 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* cse.c (fold_rtx): For SYMBOL_REF and LABEL_REF, mask address
	to 16 bits.

	* tree.h (NUM_TREE_CODES): NUM_TREE_CODE renamed.

Thu Jan 19 13:53:24 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* c-typeck.c (mark_addressable): For global reg var, report error.
	Now returns an int; value of 0 means caller should fail.
	All calls (in this file) changed.

	* stor-layout.c (layout_decl): Don't let an more than 1 word
	of any aggregate go in any 1 register.  (Needed for machines whose
	integer regs are 64 bits).

	* tm-convex.h, xm-convex.h, convex.md, output-convex.c: new files.

	* expr.c (convert_move): Use extendqidi2, etc. for converting
	small ints to double ints.  Use zero_extendsidi2 rather than
	clearing the high half.

Wed Jan 18 01:20:52 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* varasm.c (make_decl_rtl): If global `register' decl is invalid,
	make ordinary non-register rtl.

	* output-sparc.c (operand_clobbered_before_used_after): new fn.
	(reg_clobbered_p, safe_insn_src_p): New fns.
	(single_insn_src_p): Treat constants all as ok, even though not
	always literally so.  Also accept some SIGN_EXTENDs and ZERO_EXTENDs.
	(strict_single_insn_src_p): New fn, like above but is strict
	about constants and constant memory addresses.
	(relop): New fn.
	(output_move_double): Don't make a MEM, and don't use %m.
	(output_delayed_branch): New name for output_delay_insn.
	Now handle non-small constant operands.
	Avoid duplicate loads of g1 for constant addresses.
	Use recog_operand directly for output of the delay insn.
	(output_delay_insn): Now a completely new fn.
	(output_eager_then_insn, next_real_insn_no_labels): New fns.
	(operands_satisfy_eager_branch_peephole): New fn.

	* sparc.md: New peepholes for testing a recently used operand.
	New peepholes for delayed branches, incl. conditional ones.
	** Some of them commented out because they seem not to work.
	(andcc recognizer): Fix typo, missing %.
	(bgt): Change bgt to bg in output.
	(reversed jumps): Replace with one pattern using match_operand.
	It uses %F to output the condition.
	(movsi): For round-valued immed const, use just a sethi.
	For other immed, use explicit sethi and or.
	(movhi, movqi): use `move' for reg source or small int source.
	For other immed, use explicit sethi and or.
	(movsi, etc.):	Handle all constant addresses like SYMBOL_REFs.
	(movsf): Delete never-used duplicate code for constant addresses.
	(addsi3, subsi3, cse'd multiply): Use sethi and or, rather than set.
	(andsi3, iorsi3, xorsi3): Likewise.
	(jump): Make an annulled branch.

	* tm-sparc.h (PROMOTE_PROTOTYPES): Define this.
	(GO_IF_LEGITIMATE_ADDRESS): Now accept all constant addresses;
	also cleaned up.
	(NOTICE_UPDATE_CC): Don't change the G1 status when storing in memory.
	Assume all PARALLEL insns are peepholes.
	(PRINT_OPERAND): New codes C and N for outputting conditions,
	either forward or reversed.  Also F for reversed floating.

	* jump.c (delete_for_peephole): New function to delete range of insns.
	* genpeep.c (gen_peephole): Output code to use this.

	* Makefile (install): Fix typo, had $${name} for $${file}.

Tue Jan 17 00:00:12 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* i386.md (ashlsi3): Use addl or leal for special cases.

	* c-decl.c (grokdeclarator): Make a non-global VAR_DECL public
	if it is external.

	* masm386.c: Clean up formatting.

	* cse.c (fold_rtx): Typo simplifying x|0 or x^0
	when the 0 comes second.

	* expmed.c (store_fixed_bit_field): For halfwords, verify that
	the field fits in an *aligned* halfword.
	(extract_fixed_bit_field): likewise.

	* expmed.c (store_split_bit_field): New arg align, passed in from
	store_fixed_bit_field and passed back to it.
	(extract_split_bit_field): likewise.

	* expr.c: Reinsert changes from Jan 2, mysteriously deleted Jan 3.
	Also changes from Dec 23, Dec 28 and Dec 29.

	* tm-i386.h: Likewise for changes from Dec 30.

	* c-typeck.c (build_component_ref): If field's type is error-mark,
	return an error-mark.

Mon Jan 16 14:16:54 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* genpeep.c (main): Output code to exit early if insn is followed
	by a barrier.
	(gen_peephole): Reject barriers just like labels.

	* stmt.c (do_jump_if_equal): New arg UNSIGNEDP, for emit_cmp_insn.
	Caller changed.  Now static.

	* final.c (final): Set INSN_DELETED_P in insns when output.

	* final.c (final): Re-set BODY if peephole does anything.

	* c-decl.c (grokparms): Ignore anything but PARM_DECLs in the list.
	(store_parm_decls): If we had a prototype, separate out anything other
	than a PARM_DECL declared in it, and pushdecl those at the end,
	after DECL_ARGUMENTS is set.

	* stmt.c (expand_end_case): Do stack adjusts after computing index.

	* expr.c (store_one_arg): Handle padding for case of BLKmode
	for which space was preallocated.

	* integrate.c (copy_rtx_and_substitute): When copying asm insn,
	preserve sharing of the input-operand vectors.
	(expand_inline_function): Clear {orig,copy}_asm_operands_vector
	to make that mechanism work.
	(save_for_inline, copy_for_inline): Likewise.

	* stmt.c (expand_asm_operands): Reject `+' in constraints.
	Every output constraint requires `='; inputs reject it.

	* stmt.c (expand_function_end): Arg to fixup_gotos was missing.

Sun Jan 15 00:28:23 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* cccp.c, gcc.c (main): Handle SIGPIPE.
	(pipe_closed): New fn; report suitable fatal error.

	* loop.c (loop_optimize): Initialize moved_once.

	* gcc.c (do_spec): Don't call `execute' if value != 0.
	Delete redundant second call to do_spec_1.

	* toplev.c (compile_file): Make declared-but-not-defined warnings
	only if -Wunused.

	* stmt.c (emit_case_nodes): Fix typo setting gen_ble_pat.

	* tm-sparc.h ({U,}MODSI3_LIBCALL): Name was wrong.

	* gcc.c (env_exec_prefix refs): Don't try to open via it if it's null.

	* output-sparc.c (output_store, output_load_{fixed,floating}):
	Fixed confusions between the mem ref and its address.

	* cse.c (canon_hash): global_regs has entries only for hard regs.
	* flow.c (insn_dead_p, mark_set_p, mark_used_regs): Likewise.

	* cse.c (fold_rtx): More simplifications for MULT, IOR, AND, XOR
	DIV and shifts with one arg 0 or 1.

Sat Jan 14 11:41:11 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* c-typeck.c (build_array_ref): If pedantic, check for regdecl arrays.

	* fixincludes: Make all subdirs in advance, so no need for `dirname'.

	* genpeep.c (gen_peephole): Delete code to increment LABEL_NUSES;
	instead, clear JUMP_LABEL for any jumps being deleted.
	No need to test INSN1 for being a label, since not called then.
	[If any of the matched insns is a JUMP_INSN, set want_jump,
	and in that case make the matched peephole a JUMP_INSN itself.]
	That's in an #if 0 now; it's good in jump, but not in final.

	* jump.c (jump_optimize): Don't do peepholes here.
	* final.c (final): Do them here.

	* jump.c (jump_optimize): In optimizing `if (foo) bar; else break;',
	don't try to invert anything but a standard-looking conditional jump.

	* jump.c (jump_optimize): Do peepholes on ALL BUT the first pass.

	* gcc.c (env_exec_prefix): New var used like user_exec_prefix
	but set from envvar GCC_EXEC_PREFIX.

Fri Jan 13 13:21:59 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* genpeep.c (gen_peephole): Test INSN1 for a label at the very start,
	then test following insns at the end of the loop.

	* sparc.md (call recognizers): do CC_STATUS_INIT, for %g1.

Thu Jan 12 02:13:49 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* varasm.c (make_decl_rtl): Recognize more error cases for reg vars:
	BLKmode, or initializer given.
	Distinguisn missing asm from invalid name.

	* expr.c (expand_call): Never return 0; return const0_rtx instead.
	This makes expand_expr more uniform.

	* c-decl.c (grokparms): For ptr to incomplete type, just warn;
	don't change the parm's type.

	* stmt.c (expand_return): Set RETVAL_RHS so as to recognize
	tail-recursive fcn returning void.
	Unconditionally test value of expand_expr for being a REG.

	* reload.c (find_reloads): Don't process insns that have
	no constraint alternatives.  No more need for have_constraints.

	* recog.c (constrain_operands): New local var nalternatives.
	Don't bother checking the insn if nalternatives is 0.

Wed Jan 11 01:27:48 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* Implement global register decls.

	* varasm.c (make_decl_rtl): Handle global register vars.
	(make_function_rtl): Set function_defined: after 1st function dfn.
	(assemble_variable): Ignore global register vars.

	* c-decl.c (grokdeclarator): Don't reject global register decls.
	(builtin_function): Use make_decl_rtl, not make_function_rtl,
	to avoid setting function_defined.

	* regclass.c (init_reg_class{,_1}): Init and process global_regs.
	They are fixed, and call-clobbered.

	* flow.c (insn_dead_p): Storing one of global_regs is never dead.
	(mark_used_regs, mark_set_1): A global reg is never dead.

	* cse.c (canon_hash): Consider global regs volatile.


	* expr.c (do_jump): Know how to invert jumps which are sequences.

	* dbxout.c, symout.c, final.c: On USG, use our own stab.h.

	* tm-i386gas.h: New file for GAS on sysV (with DBX debugging info).

	* m68k.md (bfchg and bfins patterns): Make # alternatives uniform.
	* alliant.md: Likewise; also in movdf patterns.

	* genoutput.c (output_epilogue): Spurious `break' disabled
	error check for mismatched # of alternatives.
	(output_epilogue, scan_operands): Errors in input are not fatal.

	* flow.c (regno_uninitialized): Avoid crash if no basic blocks.

	* sparc.md (move insns): Delete special patterns that handled
	symbolic constant addresses.  The main move patterns now do this.
	* output-sparc.c (output_store, output_load_{fixed,floating}):
	Subroutines to do the work for this; has the code from those
	special patterns.  Also fixed bugs in testing against cc_status.mdep.

	* output-sparc.c (output_delay_insn): Clear the CC status.
	This is necessary for %g1 in the case of a call insn.

	* tm-i386.h (REG_CLASS_CONTENTS): INDEX_REGS is now all but ESP.
	(REGNO_REG_CLASS): Corresponding change.
	(REG_CLASS_FROM_LETTER): Eliminate `x' letter since not used.

	* optabs.c (emit_cmp_insn): New arg ALIGN, used for BLKmode.
	All callers changed.
	Pass alignment (as rtx) as 4th arg to cmpstr gen functions.
	Use cmpstrhi if available.
	* expr.c (compare): Only this call passes a nonzero ALIGN.

	* expr.c (emit_push_insn, emit_block_move): Pass alignment (as rtx)
	as 4th arg to movstr gen functions.

Tue Jan 10 23:43:05 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* stor-layout.c (layout_type): Use BLKmode, if a struct isn't
	aligned well enough for a scalar mode.

	* expr.c (expand_expr): For static CONSTRUCTOR, ensure memory
	address is made valid.

	* genpeep.c (match_rtx): For MATCH_OPERATOR, set max_opno, n_operands.

Mon Jan  9 17:07:56 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* varasm.c (output_constant): Split strings every 2000 chars.

	* stmt.c (expand_end_case): Test bkwds, handling constant switch arg.

Fri Jan  6 09:11:20 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* output-sparc.c (output_delay_insn): Add parens to first if test.
	(output_move_double): Turn addr for `sethi' into MEM for %m.

	* c-typeck.c (convert_for_assignment): move test for ERROR_MARK.

	* c-parse.y (unary_expr): Allow cast_expr as arg of unary op.

	* stmt.c (expand_decl): Don't abort if FUNCTION_DECL lacks rtl;
	assemble_variable is called after this.

	* c-parse.y (primary -> identifier): Separate case for undeclared
	identifier outside of functions; avoids confusing error msgs.

Thu Jan  5 01:24:47 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* Makefile (install): Ignore errors in all `if' commands.
	Create $(libdir) if nec.

	* Makefile (insn-*.[ch]): Put in empty commands.  May help Ultrix Make.

	* stmt.c (emit_case_nodes): New arg UNSIGNEDP says do unsigned jumps.
	Arg INDEX is an rtx, not a tree.
	(expand_end_case): Pass that arg.
	(node_has_{low,high}_bound): check for overflow, avoid confusion.

Wed Jan  4 02:24:21 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* sparc.md (movdi, movdf): Use `&' constraint when loading reg from;
	otherwise can lose on (set (reg X) (mem (plus (reg X) (reg X+1)))).

	* expr.c (emit_push_insn): For memory scalar partially going in regs,
	copy each word to reg before pushing.  Avoids memory-to-memory move.
	Make the displaced address valid.
	Also delete unfinished STACK_OFFSET variable.

	* c-parse.y (check_newline): Read just one #-directive and return.
	This prevents lossage when toplev.c calls it to get the main input file
	name, and it gets a following #ident as well.

	* c-decl.c (lang_decode_option): Set warn_cast_qual for -Wcast-qual.
	* c-typeck.c (build_c_cast): Issue some warnings if set.

	* tm-3b1.h (ASM_OUTPUT_CASE_LABEL): Missing `;'.

Tue Jan  3 18:07:31 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* expr.c (emit_library_call): Do force_operand on each operand
	if it isn't a REG, MEM or constant.
	Do this, or mode conversions, earlier, before loading any hard regs.

	* m68k.md (addsi3) [SGS]: Put a zero displacement in the `lea'.

	* c-typeck.c (default_conversion): Don't lose `const' or `volatile'
	when converting array type to pointer.

Mon Jan  2 01:18:01 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* expmed.c (store_bit_field, store_fixed_bit_field): New arg,
	alignment in bytes the structure is known to have.
	(store_fixed_bit_field): Handle working in halfwords,
	in case the pointer isn't known to have fullword alignment.
	* expmed.c (extract_bit_field, extract_fixed_bit_field): likewise.
	(extract_bit_field): fix unsignedp arg to extract_fixed_bit_field.
	* expr.c (store_field): New arg, passed to {store,extract}_bit_field
	(expand_assignment, store_constructor): Pass that arg.
	(expand_expr): Pass new arg to extract_bit_field.

	* m68k.md (casesi_2 recognizer): Offset always 6 for 3b1.

	* c-typeck.c (convert_for_assignment): Strip from rhs no-op NOP_EXPRs
	put on by build_c_cast (to make the result not an lvalue).
	(build_modify_expr, build_compound_expr): likewise.
	(build_conditional_expr): likewise.
	(actualparameterlist, build_function_call): likewise.
	(default_conversion, truthvalue_conversion): likewise.

	* loop.c (move_movables): If reg has moved out of one loop,
	divide `savings' by 2.

Sun Jan  1 03:00:07 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* c-typeck.c (truthvalue_conversion): Distribute the conversion
	into the arms of a COND_EXPR.

	* cse.c (fold_rtx): Don't fold a MINUS with VOIDmode
	into a symbolic constant--it's incorrect.

	* cse.c (cse_insn): If SRC is a subreg with known value, simplify it.

	* integrate.c (copy_rtx_and_substitute): Allow a ref to a part of
	MEM parm whose actual parm is a reg, provided it refs
	the low part of the MEM.
	(function_cannot_inline_p): Don't inline functions which have
	aggregate parameters and take their addresses.  This could produce
	refs to non-low-parts, which copy_rtx_and_substitute can't handle.

	* c-typeck.c (build_modify_expr): If lhs is COND_EXPR,
	make a COMPOUND_EXPR to ensure the rhs is computed before the branch.

	* Implement -pipe.
	* gcc.c (do_spec_1): `|' is now a special delimiter
	which goes in the argbuf.
	When a newline is preceded by a `|', delete it if no -pipe.
	Otherwise, don't execute yet, and keep scanning.
	(do_spec): At end, if we have stuff with no newline, execute it.
	(handle_braces): Implement %{|foo:...}.
	(execute): If argbuf contains some `|'s, run several processes
	and pipe them together.
	(pexecute): new subroutine to make one of the processes.
	(find_exec_file): new fn to search for program to execute.
	(record_temp_file): new arg FAIL_ONLY.
	(store_arg): 2nd arg == 3 means delete file on failure.
	This is used for output files.
	(delete_temp_files): delete certain files only if fail.

	* cccp.c (include_defaults): /usr/include before /usr/local/include.

	* recog.c (asm_noperands): 1-off in loop checking CLOBBERS
	when no output operands and PARALLEL.

	* expmed.c (negate_rtx): Sign-extend the high bits rather than clear.

	* cse.c (fold_rtx): fold negation of real values.
	(fold_cc0): fold comparisons on real values.

	* Makefile (install): Use $(INSTALL) for gcc.1 and files in USER_H.

	* Handle floating-point problems for cross-compilation.

	* real.h (CONST_DOUBLE_LOW, etc.): new macros to access CONST_DOUBLE.
	* varasm.c (immed_double_const, decode_rtx_const): Use these.
	({force,clear}_const_double_mem): Likewise.
	* output-*.c (output_move_double): Use these.
	* output-m68k.c (standard_{68881,sun_fpa}_constant_p): Likewise.
	* tm-*.h (PRINT_OPERAND): Use these.
	* output-i386.c (print_operand): Use these.
	* final.c (output_addr_const): Likewise.
	* emit-rtl.c (gen_rtx): Delete special code for CONST_DOUBLE.

	* real.h (union real_extract): Portable type for storing real as ints.
	* varasm.c (immed_double_const, decode_rtx_const): Use these.

	* varasm.c (immed_real_const_1, decode_rtx_const):
	Don't assume REAL_VALUE_TYPE is 2 ints long.
	* emit-rtl.c (init_emit_once): Likewise.

	* real.h (REAL_VALUE_TYPE): Define as `double' if not defined.
	(REAL_IS_NOT_DOUBLE): Define this if default REAL_VALUE_TYPE not used.
	(REAL_VALUES_EQUAL, REAL_VALUES_LESS): Define, if not already defined.
	(REAL_VALUE_LDEXP, REAL_VALUE_ATOF): Likewise.
	* tree.h (struct tree_real_cst): Use REAL_VALUE_TYPE for the value.

	* rtl.c (init_rtl): Increase length of CONST_DOUBLE if REAL_VALUE_TYPE
	needs more space.  Change the rtx_format element to match.
	* varasm.c (immed_real_const_1): 1st arg now has REAL_VALUE_TYPE.
	(force_const_mem): Assume a CONST_DOUBLE contains REAL_VALUE_TYPE.
	* emit-rtl.c (init_emit_once): Likewise.
	And use REAL_VALUE_ATOF to get a floating zero.
	* optabs.c (expand_float): Use REAL_VALUE_TYPE, REAL_VALUE_LDEXP.
	* c-parse.y (yylex): Likewise, and use REAL_VALUE_ATOF.
	* fold-const.c (split_tree): Don't accept REAL_CSTs.
	(combine, fold_convert, fold): Use REAL_ARITHMETIC if defined;
	else don't fold reals if they are not doubles.
	* tree.c (build_real_from_int_cst): Likewise.
	* print-tree.c (dump) [REAL_IS_NOT_DOUBLE]: output float value
	in hex, since we don't know how to do it right.

Sat Dec 31 14:15:13 1988  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* optabs.c (init_optabs): Handle new macros {U,}MULSI3_LIBCALL,
	DIVSI3_LIBCALL, MODSI3_LIBCALL.
	* tm-sparc.h: Define {,U}{MUL,DIV,MOD}SI3 to call Sun's library direct.

	* tm-sun3-nfp.h, tm-sun3-fpa.h: New files.

Fri Dec 30 00:14:36 1988  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* cccp.c (main): Certain envvars specify a file to write deps info to.

	* toplev.c (compile_file): Warn about undefined fns declared static.

	* m68k.md (casesi_2 recognizer) [SGS] RTX_INTEGRATED_P test backwards.
	* tm-3b1.h (ASM_OUTPUT_CASE_LABEL): Likewise.  Also missing `\'.

	* reload1.c (count_occurrences): New function.
	(choose_reload_targets): Don't delete a reload if the same reg
	is used elsewhere in the current insn.
	(delete_output_reload): code split out from choose_reload_targets.

	* c-typeck.c (build_c_cast): Always put on some operator,
	so the cast is never an lvalue for strict ANSI.

	* c-typeck.c (initializer_constant_valid_p): Don't depend on
	distinction between NOP_EXPR and CONVERT_EXPR.

	* c-convert.c: Fns reordered; new comments.

	* fold-const.c (fold): If simplifying a NOP_EXPR within a BIT_AND_EXPR,
	return a NOP_EXPR.
	New var TYPE holds type of expr.

	* c-parse.y (expr_no_commas): Split off cast_expr and unary_expr,
	to reject `sizeof (int) foo'.

	* toplev.c (main): Treat plain `-' as input filename.

	* final.c (final): If an insn's output routine returns 0,
	it means to output the deleted compare insn immediately preceding.

	* m68k.md (branch insns): Use 0 as 3rd arg for OUTPUT_JUMP
	rather than explicitly clearing the overflow flag.

	* tm-i386.h (OUTPUT_JUMP): Really use NO_OV; don't abort.
	* i386.md (branch insns): Put real data (sometimes 0) in 3rd arg
	of OUTPUT_JUMP.  0 means preceding test may not be deleted.
	(lea pattern): Clear the cc's.
	* output-i386.c (notice_update_cc): various arith insns set the cc's.

Thu Dec 29 13:22:01 1988  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* stmt.c (expand_decl_init): Do nothing for static decls.

	* reload.c (find_reloads_address{,_1}): Return 1 iff entire arg
	was reloaded as a whole, else 0.
	(find_reload): If find_reloads_address returns 1, don't let that MEM
	satisfy a `>' or `<' constraint.

	* m68k.md (cmpmb): Delete special pattern, make cmpqi handle it.
	The special pattern couldn't handle reloading the incremented register.

	* integrate.c (copy_rtx_and_substitute): Test BYTES_BIG_ENDIAN,
	not BITS...

	* combine.c (subst): Consider big-endian correction
	when simplifying (subreg (mem ...) ...).

	* reload.c (find_reloads): Don't crash if matching operands in `asm'
	are both read or both write.

	* expr.c (emit_push_insn): Address for movstr must be XINNER, not X.

	* toplev.c (main): Typo parsing `-fno...'.

Wed Dec 28 13:07:21 1988  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* toplev.c (rest_of_compilation): `volatile' fns need jump_optimize
	for warnings, as if -Wreturn-type.
	* c-typeck.c (c_expand_return): Warn about `return' in a `volatile' fn.
	* c-decl.c (finish_function): Warn if `volatile' fn can drop thru end.

	* cse.c (canon_reg): Handle nulls as subexpressions.
	(fold_rtx, canon_hash, mention_regs, exp_equiv_p): Likewise.
	* loop.c (invariant_p, replace_regs, replace_call_address, may_trap_p,
	{basic,general}_induction_var): Likewise.

	* expr.c (expand_call): Handle `const' functions:
	Local IS_CONST is 1 if function is const.
	Attach REG_RETVAL and REG_LIBCALL notes around the call.
	Copy fn address to register outside of those notes.
	Likewise precompute all parms outside them.

	* expr.c (expand_call): If fn is volatile, emit barrier after the call.

	* c-decl.c (grokdeclarator): Allow function declared const or volatile.

Sat Dec 24 18:40:12 1988  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* integrate.c (function_cannot_inline_p): If STRUCT_VALUE_INCOMING
	or STRUCT_VALUE	is defined, can't inline functions returning BLKmode.

Fri Dec 23 13:26:26 1988  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* expr.c (store_constructor): Compute array's size
	with int_size_in_bytes.

	* varasm.c (assemble_variable): If shared data, go to data section
	before outputting an uninitialized symbol.

	* tm-sequent.h (ASM_OUTPUT_ALIGN_CODE): Missing backslash.
	(SHARED_SECTION_ASM_OP): Macro defined.
	* tm-seq386.h (SHARED_SECTION_ASM_OP): Macro defined.

	* c-typeck.c (c_expand_asm_operands): Warn if output op is `const'.

	* Fix problem where a stmt expr in an initialization
	refers to the variable it is initializing.
	* stmt.c (expand_decl_init): New fn split out from `expand_decl'.
	* c-decl.c (finish_decl): Call that.
	Don't call expand_decl if already done.
	(start_decl): Call expand_decl if type is complete already.

	* Makefile (install): Typo in ranlib command.

Thu Dec 22 15:57:12 1988  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* tree.h (tree_identifier): New field.
	(IDENTIFIER_ERROR_LOCUS): Accessor for it.
	* c-parse.y (primary => IDENTIFIER):
	Undeclared variable gets one err msg per function it appears in.

	* ns32k.md (andsi3): Delete extra brace.

	* alliant.md, xm-alliant.h, tm-alliant.h, output-alliant.c: New files.

	* combine.c (SUBST, SUBST_INT): Store new field `is_int'.
	(copy_substitutions): Don't copy an int as an rtx.

	* Makefile (INSTALL): Install gcc.1 properly.

	* tm-ns32k.h (FUNCTION_PROLOGUE, ASM_OUTPUT_ALIGN_CODE):
	Add missing backslashes.

See file ChangeLog.0.
