
Wed Dec 21 02:46:34 1988  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* Version 1.32 released.

	* toplev.c (main): Vax pcc enforces goto-less programming
	with fatal error.

	* stmt.c (fixup_memory_subreg): New arg INSN says where to emit insns.
	(walk_fixup_memory_subreg): Likewise.  All callers changed.

Tue Dec 20 01:26:56 1988  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* c-decl.c (start_function): Don't clear TREE_PERMANENT in fn decl.
	Make the result decl a permanent node.
	(finish_function): Don't clear DECL_RESULT in an inline function.
	(duplicate_decls): Don't lose DECL_RESULT or DECL_SAVED_INSNS
	or old decl, when defn is followed by redeclaration.
	Likewise DECL_ARGUMENTS and DECL_RESULT_TYPE.

	* stmt.c (expand_function_end): End any sequences left unterminated.

	* cse.c (predecide_loop_entry): If "loop" has no label, do nothing.

	* recog.c (asm_noperands): Now return -1 if not that kind of insn.
	All callers changed.
	* combine.c (check_asm_operands): Calling changes not quite trivial.
	* final.c (final): Likewise.
	* reload.c (find_reloads): Likewise.
	* recog.c (asm_noperands): Other changes:
	Loop computing # of SETs in a PARALLEL was off by 1.
	Validate all elts of any PARALLEL, to block invalid combinations.

	* ns32k.md (andsi3, andhi3): Make new CONST_INTs; don't clobber old.

	* integrate.c (copy_rtx_and_substitute): When looking in `parm_map',
	if our mode mismatches parm's mode, use change_address to extract part.
	On BYTES_BIG_ENDIAN machines, adjust the offset.

Mon Dec 19 23:50:14 1988  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* cexp.y ('/' and '%' ops): If divide by 0, print error, don't die.

Sun Dec 18 14:03:02 1988  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* toplev.c (main): Avoid shadowing I in inner block.

	* flow.c (propagate_block): The insn at the end of a libcall
	may be dead, but the libcall might still be needed if the
	hard return reg is used later.  Detect this case.
	(libcall_dead_p): New fn used to check that the libcall is dead.

	* output-m68k.c, tm-m68k.h (standard_sun_fpa_constant_p): Fn renamed.

Sat Dec 17 13:23:51 1988  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* stmt.c (expand_end_bindings): error_with_file_and_line => ..._decl.

	* combine.o (try_combine): Accept combination making a valid
	asm with operands.
	(check_asm_operands): Recognize asm with operands that are valid.

	* loop.c (strength_reduce): Don't accept a reg as a giv
	if the reg was made by loop-optimize.

	* stmt.c (balance_case_nodes): A list of 3 always splits in middle.

Fri Dec 16 17:22:07 1988  Tiemann  (rms at sugar-bombs.ai.mit.edu)

	* sparc.md (fetch from constant address): Split into two patterns,
	one fixed point and one floating.
	(store at constant address): Handle remembered hi-half differently.
	Other bug fixes.
	(fix_truncsfsi2): Use f1, not f0, as temp.
	(fix_truncdfsi2): Don't clear CC_F1_IS_0.

	* output-sparc.c (singlemove_string): Changed handling of case
	where op1 is not memory and op0 has varying address.
	(output_fp_move_double): Avoid reloading high half address
	in the ldd and std cases with constant address.
	(make_f0_contain_0): Handle f0 and f1 individually.

	* tm-sparc.h (GO_IF_LEGITIMATE_ADDRESS): CONST is now illegitimate.

	* rtl.c (note_stores): Pass entire SET rtx, not flag, as 2nd arg to FN.
	* local-alloc.c (reg_is_set): New type for 2nd arg.

	* Makefile: Comment out cc1plus, since not ready for release.

Thu Dec 15 16:39:47 1988  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* local-alloc.c (reg_is_set): If a hard reg is clobbered, make it free
	before and after the insn.
	* stupid.c (stupid_mark_refs): Likewise.
	* global-alloc.c (global_conflicts): Likewise.
	Use note_stores to call mark_reg_{store,clobber}.
	(mark_reg_store): Changed calling conventions
	All work done on set/clobbered regs is now done here.
	Ignore CLOBBERs.
	(mark_reg_clobber): Similar fn, but ignore SETs and handle CLOBBERs.
	(regs_set, n_regs_set): New static vars for comm. among the above.

	* stmt.c (expand_asm_operands): call protect_from_queue on operands.
	This requires preexpanding the outputs into a vector of rtx's.

	* Makefile (install): cd to $(libdir) before ranlib.

	* c-typeck.c (c_expand_asm_operands): emit_queue at the end.

	* reload.c (find_reloads): Count # alternatives properly for
	an asm insn, and check that all operands correspond.

	* loop.c (verify_loop): Reject loops containg setjmps.
	* cse.c (cse_main): Don't cse across a call to setjmp.

	* expr.c (expand_expr): Permit any non0 DECL_RTL for a VAR_DECL.

	* stmt.c (balance_case_nodes): Count ranges double when balancing.

Wed Dec 14 13:50:45 1988  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* final.c (output_addr_const): Output just `-', not `+-'.

	* make-cc1.com: Update filenames changed to `c-'.
	* make-cccp.com: Pass needed -D options when compiling cccp.c.
	Use /nomap when linking.

	* loop.c (strength_reduce): Paraphrase setting NEW_REG, for Iris cc.

	* output-m68k.c (output_move_const_single): %'s must be doubled twice.

	* loop.c (record_giv): A giv can be replaceable if its uses are
	all in the same basic block as its sole setting.
	(last_use_this_basic_block): Subroutine to test that.

Tue Dec 13 13:41:57 1988  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* expr.c (do_store_flag): Allow for COMPARISON to be a const_int.

	* c-decl.c (pushdecl): Warn if type mismatch with another external decl
	in a global scope.

	* fixincludes: Fix typo in msg of deleting unchanged file.

	* Makefile (insn-*): Use two-step rules with a separate time-stamp file
	to avoid rerunning gen* unless md has changed again.

Mon Dec 12 13:32:05 1988  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* i386.md (tstsf, tstdf, cmpsf, cmpdf): Use fnstsw, not fstsw.  Faster.

	* tm-vax.h (ASM_OUTPUT_REG_POP): Use correct asm syntax for pop insn.

	* combine.c (subst): Handle (subreg (mem)) by making a changed mem.
	This avoids producing any (subreg (mem))s except in the special
	case they are supposed to be made here.
	Also set undo_storage in a couple of cases that forgot to.

	* reload.c (push_reload): When handling (SUBREG (MEM)) for IN,
	if there is an OUT, make that a separate reload.
	Return its number in `output_reloadnum'
	(find_reloads): When pushing matching-reloads, note that the
	two operands can have different reload-numbers.

	* tm-3b1.h (ASM_OUTPUT_CASE_END): Test flag on TABLE, not its pattern.
	(ASM_OUTPUT_CASE_LABEL): If /i flag set, don't output the dummy entry
	since the fetcher-insn will not be off by 2 in this case.
	* m68k.md (casesi_2 recognizer): For 3b1 syntax, compensate for that.

Sun Dec 11 12:51:49 1988  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* genrecog.c (try_merge_2): No longer put all explicit decompositions
	before all predicates.  Patterns are now tested in the order written.
	* vax.md: Move the push-or-move-address patterns to the end.
	* m68k.md: Move load-address pattern to end.
	Rearrange the special-case movsi patterns.
	* ns32k.md: Move special load-reg-17 pattern before movsi.
	* i386.md: Move the QI and DI push patterns to logical places.
	This should not actually change anything.

	* stmt.c: Add Andy Hitchins's binary-tree case statement code.
	(struct case_stmt): case_list field is now a case_node chain.
	Replace has_default field with default_label field.
	(pushcase, pushcase_range): Build case_list in its new type,
	and keep it sorted.
	(expand_end_case): Use case_list in its new type.
	Count a range of > 1 as two cases, when choosing strategy.
	(group_case_nodes, balance_case_nodes): New fns, rearrange case_list.
	(node_has_{low,high}_bound, node_is_bounded): New fns test
	relationships of values of various case_list tree nodes.
	(emit_jump_if_reachable): New fn.
	(emit_case_nodes): Emit compares and jumps based on tree of case_list.

	* cccp.c (finclude): Handle nonordinary files (stat doesn't give size).

	* tm-3b1.h (PRINT_OPERAND_ADDRESS): Handle case of breg and no ireg.

Sat Dec 10 16:30:32 1988  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* sparc.md (movstrsi): Separate define_expand and define_insn;
	clobber some pseudos to get temp regs to use in the output.
	* output-sparc.c (output_block_move): Use those temp regs,
	guaranteed to be free.

	* sparc.md (andcc patterns for bitfields from memory):
	Test immed. arg for being in range.
	(load DFmode constant): Use %m for output in one case.
	* output-sparc.c (singlemove_string, output_move_double): Likewise.

	* output-sparc.c (singlemove_string): New case for mem-to-mem move.

Fri Dec  9 11:42:15 1988  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* stupid.c (stupid_mark_refs): for CLOBBER of a pseudo,
	it is born just before this insn and dies just after.

	* tm-vax.h (NOTICE_UPDATE_CC): For aob, sob insns, forget the cc's.

	* basic-block.h (REG_BLOCK_UNKNOWN, REG_BLOCK_GLOBAL): Move defn here.
	* local-alloc.c: Use them.

	* c-decl.c (store_parm_decls): Additional explanatory message
	for some prototype mismatches.

	* gnulib.c (SItype): New macro used instead of `int'
	for SImode operands and values.  Definition is `long int'.

Thu Dec  8 18:45:48 1988  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* reload.c (operands_match_p): Move the label `slow' so that
	it doesn't cause a REG and a SUBREG to be compared wrong.

	* toplev.c (compile_file): Output a label `gcc_compiled.' for GDB.
	If new macro ASM_IDENTIFY_GCC is defined, run that instead.
	* tm-3b1.h (ASM_IDENTIFY_GCC): Define this as no-op.

Wed Dec  7 12:20:42 1988  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* i386.md (adddf3): Typo: paren was in a constraint.

	* c-decl.c (grokparms): Avoid duplicate msgs for incomplete type ptrs.

	* gnulib.c: Rename all fns to start with `__'.
	* optabs.c, expr.c: Rename all references.

	* gnulib.c (__cmpdi2, __ucmpdi2): New fns.
	* optabs.c (emit_cmp_insn): Use them.

	* Makefile (stage*): Ignore errors on the main `mv' (for cc1plus).
	Run ranlib if we have to copy gnulib.

	* expmed.c (expand_divmod): Split `label' into several local vars.

	* jump.c (jump_back_p): Do nothing unless cc's were set from integers.

Tue Dec  6 12:00:21 1988  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* c-parse.y (extend_token_buffer): Use xrealloc, not realloc.

	* integrate.c (output_inline_function): fix args of expand_function_end
	(expand_inline_function): Add missing arg to expand_end_bindings.

	* cse.c (cse_insn): Add missing MODE arg to canon_hash.

	* reload1.c (reload_as_needed): Del. extra arg of choose_reload_targets
	(reload): Add missing MODE arg to immediate_operand.

	* expmed.c (expand_mult): Delete extra arg to expand_unop.

	* c-typeck.c (default_conversion):
	Add missing NOCONVERT arg to build_unary_op.

	* c-decl.c (duplicate_decls, finish_struct): Add missing arg
	KNOWN_ALIGMENT to layout_decl.
	* stor-layout.c (layout_record): Likewise.
	* varasm.c (assemble_variable): Likewise.

	* dbxout.c (dbxout_init): Add missing LOCAL arg to dbxout_symbol.

	* expr.c (clear_storage): Remove excess arg to emit_move_insn.

	* loop.c (consec_sets_invariant_p): Add parens in hairy if-condition.

	* fold-const.c (fold): Typo, missing `case'.

	* cccp.c (main): Typo handling `-I-' option.

	* tm-i386.h (NO_FUNCTION_CSE): Define this; cse is said to slow
	things down with less than 7 calls.

	* stmt.c (fixup_var_refs_insn): When scanning the reg-notes,
	don't touch other insns they point at.

	* expr.c (do_jump): Use invert_exp, not reverse_condition,
	to invert sense of a jump.
	* jump.c reverse_condition now static, invert_exp now global.

Mon Dec  5 10:51:39 1988  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* tm-sun386.h (ASM_FILE_START): In the .file arg, exclude directories.

	* stmt.c (expand_expr_stmt): If -W, warn if stmt has no side effect.

	* cccp.c (monthnames): Capitalize each name.

	* rtl.def: New code MATCH_OPERATOR.
	* genconfig.c (walk_insn_part): Handle it.
	* genextract.c (walk_rtx): Handle it.
	* genpeep.c (match_rtx): Handle it.
	* genrecog.c (add_to_sequence): Handle it.
	* genemit.c (max_operand_1, gen_exp, gen_expand): Handle it.
	* genoutput.c (scan_operands): Handle it.
	(insn_n_alternatives): New array in the output.
	(struct data): New slots n_alternatives and op_n_alternatives.
	(scan_operands, gen_insn, gen_peephole):
	Record op_n_alternatives for each operand.
	(output_epilogue): Verify that all operands have same # of alternatives
	Also output insn_n_alternatives.

	* reload.c (find_reloads): use insn_n_alternatives to control
	the loop over all alternatives.
	An empty constraint or empty alternative in a constraint
	is always satisfied.
	* recog.c (constrain_operands): Likewise.

	* c-decl.c (lang_decode_option): For each -f option, recognize a form
	with `no-' and a form without, as contraries.

	* toplev.c (main): Decode -f options using a table
	so that each option automatically has a `no-' variant.

	* combine.c (try_combine): Give up if I1 or I2 follows a compare insn.

Sun Dec  4 12:00:36 1988  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* varasm.c (data_section): If flag_shared, use SHARED_SECTION_ASM_OP
	if that is defined.

	* cccp.c (include_default): Add /usr/local/include.

	* Makefile (install): Install the makefile.

	* varasm.c (assemble_external): New fn to declare an external.
	(assemble_variable): Output nothing for externals.
	* c-parse.y (primary => identifier): Call assemble_variable on 1st use.

	* toplev.c (main): Print version info on stderr, not stdout.
	* tm-*.h (TARGET_VERSION): Likewise.

	* tm-isi68.h, tm-news800.h: Rename __HAVE_FPU__ to __HAVE_68881__.

	* sparc.md (seq, etc): Entire page rewritten by Tiemann
	to avoid incorrect use of PARALLEL.
	* output-sparc.c (gen_scc_insn): Corresponding changes.

Sat Dec  3 00:03:19 1988  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* gcc.c (do_spec_1): %P is an ANSIfied form of %p:
	put __ at beg and end of each predefined macro name.

	* tm-sun3.h (CPP_SPEC): Don't define -Dmc68010, etc., if -ansi.
	* tm-sun2.h (CPP_SPEC): Likewise.

	* c-decl.c (shadow_tag): Don't complain if declare a new tag
	at top level, or if redeclare a tag.

	* c-decl.c (grokparms): Warn if parm points to incomplete type.
	(We already err if its own type is incomplete.)

	* stmt.c (fixup_var_refs_insns): Fix any (SUBREG (MEM)) in REG_NOTES.
	(walk_fixup_memory_subreg): New subroutine used for this.

	* integrate.c (copy_rtx_and_substitute): Handle MEM refs to the middle
	of a stack-parm--at least in the case of reading the parm.

	* rtl.c (rtx_equal_p): REG_FUNCTION_VALUE_P is significant
	only until end of reload pass.
	* toplev.c (rest_of_compilation):
	Control that by setting new var rtx_equal_function_value_matters.

	* c-decl.c (init_decl_processing): Don't declare the builtins
	that aren't really implemented.

	* output-sparc.c (output_move_double): "in structure" implies
	8-byte alignment only for DFmode, not for DImode.

	* final.c (output_operand_lossage): Cleaner text for error msg.
	No longer need to write text into .s file, now that linenum is correct.

	* c-decl.c (pushdecl): -traditional stops warning
	about "declared extern, later static".

	* c-typeck.c (build_indirect_ref): Don't handle flag_volatile here.
	* expr.c (expand_expr): Handle it here, in INDIRECT_REF case.
	This prevents -fvolatile from causing additional warnings.

	* output-sparc.c (output_load_address): Allow REG+REG for operands[3].

	* m68k.md (movsi): If we output the label LIn,
	set the RTL_INTEGRATED flag in the switch table's pattern.
	* tm-3b1.h (ASM_OUTPUT_CASE_END): Define LD%n only if LI%n was output.

	* i386.md (push-and-add pattern): Comment it out.
	It's said to result in slower code.

	* i386.md (tstqi, tsthi, tstsi): Output real `test' insn if op is reg.

	* i386.md (push for DI): Allow `oiF' for 2nd operand.

Fri Dec  2 13:57:35 1988  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* i386.md (movdi): Allow F constraint for 2nd operand.

	* i386.md (push for QI): define pattern to push a QImode
	which really uses pushw and therefore really pushes a halfword.
	* tm-i386.h (PUSH_ROUNDING): Round up to multiple of 2.

	* gcc.c (do_spec_1): Handle %e, which means report an error.
	Use it to prohibit -pg with -fomit-frame-pointer.

	* tree.h (DECL_RESULT_TYPE): New field in FUNCTION_DECL holds the type
	of the widened returned value (not nec. the declared return type).
	* c-decl.c (start_function): Set DECL_RESULT_TYPE.
	* integrate.c (expan_inline_function): Use that, not DECL_RESULT.

Thu Dec  1 16:44:10 1988  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* cse.c (fold_rtx): When reordering constant args, insist on
	manifest constants; regs with known contents won't do.

	* i386.md (mulsi3): Don't use rtx_equal_p to compare regs.

	* expr.c (move_by_pieces_1): Don't call change_address
	if address is autoinc, since that may not be memory_address_p.
	Subroutine-macro add_offset deleted.

	* optabs.c (bcc_gen_fctn, setcc_gen_fctn): Moved to this file.
	(init_optabs): Init those tables here.
	* expr.c (init_conditions): Not here.

	* stmt.c (assign_stack_local): Make a list of all stack slots.
	* emit-rtl.c (unshare_all_rtl): Unshare all the stack slots.

	* final.c (final): Handle BARRIER with ASM_OUTPUT_ALIGN_CODE.
	* tm-ns32k.h (ASM_OUTPUT_ALIGN_CODE): Align to 4-byte bdry.
??	* tm-sequent.h (ASM_OUTPUT_ALIGN_CODE): Override: just 2-byte bdry.

	* tm-m68k.h (PRINT_OPERAND): use new macros to print floats.
	(ASM_OUTPUT_FLOAT_OPERAND): New macro.
	(ASM_OUTPUT_DOUBLE_OPERAND): New macro.
	* tm-sun3.h: Override those macros, to check for infinities.

Wed Nov 30 06:35:47 1988  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* tm-ns32k.h (FUNCTION_{PRO,EPI}LOGUE): if no frame pointer,
	do explicit push or pop insns.

	* tm-genix.h (PRINT_OPERAND): Fix typo `file'.
	Extedn decl for paren_base_reg_printed.
	(MAIN_FUNCTION_PROLOGUE): Deleted.
	(ASM_OUTPUT_EXTERNAL): Defined.

	* c-parse.y (yyerror): Better error msg for unprintable char in token.
	(primary => identifier): Set TREE_USED if implicit decl made.

	* Makefile (cleanlinks): New target.
	(INSTALL): New variable, has program used for installing files in sys.

	* output-ns32k.c (print_operand_address): If addr is sum of 2 consts,
	output ADDR first, then OFFSET.

	* ns32k.md (addsi3): Allow adding const+reg with result in another reg.

	* tm-seq386.h (FUNCTION_PROFILER): Provide overriding definition.

	* tm-hp9k320.h: Alternate ASM_SPEC if using GAS.
	Define STANDARD_STARTFILE_PREFIX if using GAS.
	(FUNCTION_PROLOGUE): on 68020 for big stack frame use link.l.

	* gcc.c (STANDARD_STARTFILE_PREFIX): New cust. macro replaces `/lib/'.

	* va-sparc.h, va-spur.h: Prefix non-interface identifiers with `__'.

	* optabs.c (init_optabs): Don't set up libcalls for ftrunc_optab
	because (1) they aren't supported and (2) they are never used.

	* gnulib.c (__builtin_saveregs): If not sparc, define the symbol anyway
	to avoid a warning in ranlib.

Mon Nov 28 01:46:12 1988  Michael Tiemann  (mdt at choctaw)

	* c-parse.y (yylex): Typo, `=' for `==' making wide strings.

	* sparc.md (various places): make sure that all patterns which store
	can store using const0_rtx (i.e., make all operands to `st' %rx).

	* output-sparc.c (various places): changed dispatches on SYMBOL_REF
	to dispatches on CONSTANT_ADDRESS_P since we now recognize any CONST
	(and not just SYMBOL_REFs).  Don't recognize special case CONST for
	output_block_move.  Compiler doesn't have enough information to use
	it.

	* stmt.c (expand_fixup): If the control stack is nested within the
	nesting stack, then no fixup is needed.  Otherwise, compiler must
	check for possible fixups between the current nesting stack and the
	nesting stack that immediately contains the control stack.

	* stmt.c (expand_function_start): functions which are nested use
	DECL_CONTEXT.  For these functions, test that their DECL_CONTEXT is
	a LET_STMT node.

	* tree.h: declare `build_offset_type'.

Sun Nov 27 10:34:53 1988  Richard Stallman  (mdt at yahi)

	* output-sparc.c (output_move_double):
	Don't try to use ldd/std if OP1 is a constant.
	* sparc.md (movdi): Allow immediate args moved into general regs.

	* c-decl.c (grokparms): Reject incomplete parm types even if just
	declarating, not defining.  Change types to error_mark_node
	in both the PARM_DECL and the list of types.

	* dbxout.c (dbxout_type): It's not a bug if a RECORD_TYPE
	has a typedef as its TYPE_NAME.  That happens in C++.

	* Make each `asm' with operands record its source file/line
	with reg-notes.  It doesn't work to emit a special note before the insn
	because the insn can be moved by loop_optimize.
	* stmt.c (expand_asm_operands): New args FILENAME, LINE.
	Record them in the insn, in reg notes.
	* c-typeck.c (c_expand_asm_operands): New args, passed along.
	* c-parse.y: Pass those args.
	(maybe_type_qual): Line #s for asm stmts emitted like all others.
	* rtl.h (REG_ASM_FILE, REG_ASM_LINE): New kinds of reg notes.
	* toplev.c (error_for_asm): Get the info from those notes.

	* reload.c (find_reloads): Don't clear BADOP for a reg letter
	if the alternative ultimately doesn't allow any regs.

	* reload.c (find_reloads): If an `asm' insn gets an error,
	change it to a USE to avoid duplicate error msgs or later trouble.

	* reload.c (find_reloads_address): Reloading a constant address,
	specify Pmode as the mode for push_reloads, in case of CONST_INT.

	* expr.c (emit_push_insn): Fix calc. of space needed when PARTIAL > 0.
	Both scalar case and BLKmode case needed fixing.

	* sparc.md (load/store constant address):
	Moving DF from mem to cpu regs, don't go via %f0.
	Don't use std/ltd if alignment is wrong or uncertain.

Sun Nov 27 10:34:53 1988  Michael Tiemann  (mdt at yahi)

	* reload.c (push_reload): Allow VOIDmode for INMODE, OUTMODE;
	default the mode from the operand values.

	* sparc.md: remove patterns which generate annulled branch insns.
	They are correct, but those insns confuse GDB.

	* tm-sparc.h (GO_IF_LEGITIMATE_ADDRESS):
	Treat any constant address like a SYMBOL_REF.
	* sparc.md: Check for CONSTANT_ADDRESS_P rather than SYMBOL_REF.

	* sparc.md: Peepholes now accept SYMBOL_REF addresses.
	The output routine can now split them properly even as delay insns.

	* print-tree.c (dump): added entry for METHOD_TYPE and
	METHOD_CALL_EXPR.  Also added entry for WITH_CLEANUP_EXPR.  Suggest
	that we make first_rtl of WITH_CLEANUP_EXPR 2 instead of 1.

Sun Nov 27 00:15:33 1988  Michael Tiemann  (mdt at yahi)

	* print-tree.c (dump): added entry for OP_IDENTIFIER.

	* tree.c (build_op_identifier): new function.  Needed because
	`build_nt' expects an "e" node, but OP_IDENTIFIER is an "x" node.

	* store_layout.c (layout_record): use DECL_FIELD_CONTEXT instead of
	DECL_CONTEXT.

	* tree.h (DECL_FIELD_CONTEXT): new macro.  Points to the type that a
	FIELD_DECL is a member of.  For C, this is just DECL_CONTEXT.

	* tree.c (build_method_type): typo used "==" to assign basetype to
	TYPE_METHOD_BASETYPE with predictably poor results.

Sat Nov 26 22:55:32 1988  Michael Tiemann  (mdt at yahi)

	* output-sparc.c (output_sized_memop): new function to output a load
	or store insn based on the size of the operand loaded or stored.
	(make_f0_contain_0): use info from condition codes to decide whether
	the register %f0 needs to have 0 loaded from memory or not in order
	to contain zero.
	(gen_scc_insn): new function used by define_expands for
	set-on-condition-code insns.
	(output_delay_insn): now knows how to handle load and store
	scheduling when the load or store operation takes two insns instead
	of one.  The rewrite is now understands is this:

	  sethi %hi(address),%g1	-> sethi %hi(address),%g1
	  ld/st [%g1+%lo(address)],%reg	-> b target
	  b	target			-> ld/st [%g1+%lo(address)],%reg
	  nop				-> ;; gone

	* jump.c (reverse_condition): make this function publicly visible,
	now needed in expr.c.

	* output-sparc.c (reg_or_0_operand): new function, returns nonzero
	if operand is const0_rtx or a register of specified mode.
	(hardreg): deleted.

	* expr.c, stmt.c: fixed random syntax errors.

	* tree.c (build_method_type): now corresponds to defn in tree.def
	  expr.c (expand_call): removed code to get FUNCTION_TYPE from
	  METHOD_TYPE.  This should probably be looked at harder.

	* tree.def (METHOD_TYPE): Changed definition so that TREE_TYPE (m)
	(where m is a METHOD_TYPE) is the type of the return value of the
	method, not the FUNCTION_TYPE from which the METHOD_TYPE is derived.
	
	* Makefile: Changed target of BINDIR from /usr/local to
	/usr/local/bin.

Sat Nov 26 16:29:22 1988  Michael Tiemann  (mdt at chickasaw)

	* tm-sparc.h (GO_IF_LEGITIMATE_ADDRESS): Allow any SYMBOL_REF.
	(NOTICE_UPDATE_CC): Remember high half of %g1 as a "condition code"
	to avoid reloading it if it does not change.
	(NOTICE_UPDATE_CC): Test SET_SRC, not SET_DEST, for a CALL rtx.
	(PRINT_OPERAND): New code-letter `m' says output operand as an address.

	* toplev.c (flag_syntax_only): New flag variable.
	* flags.h: Likewise.

	* toplev.c (error_with_decl): Extra arg, passed to fprintf.
	(warning_with_decl): Likewise.

	* tree.c (build_offset_type): New function.

	* tree.h (TYPE_METHOD_BASETYPE): New name for TYPE_METHOD_CLASS.
	Uses in tree.c and... renamed.

	* combine.c (SUBST_INT): New macro, for replacing an int.
	(subst): Collapse nested SUBREGs even if SUBREG_WORDs are not 0.

	* expr.c (bcc_gen_fctn, setcc_gen_fctn): new tables,
	initialized in init_comparisons.
	Used in expand_expr, do_jump, do_store_flag
	instead of explicit construction of a jump.

	* expr.c (save_noncopied_parts): New function.

	* expr.c (expand_expr):
	  ARRAY_REF: Special case for array of constants.
	  WITH_CLEANUP_EXPR: Handle it.
	  INIT_EXPR: Case deleted.
	  MODIFY_EXPR: Use save_noncopied_parts.

	* expr.c (expand_call): blkmode_parms_forced can be >0
	even when no stack arg space otherwise needed.
	Don't use a hard reg as a target if there are cleanups.

	* stmt.c (struct block): New elt. outer_cleanups.
	(struct case): New elt. num_ranges.
	(struct fixup): Changed meaning of cleanup_list_list.
	Changes in expand_fixup, fixup_gotos.
	(expand_fixup): Detect some internal forward-jumps
	that need no fixups--for speed.
	(fixup_gotos): New arg THISBLOCK.
	(expand_expr_stmt): Handle flag_syntax_only.
	(use_variable): No longer static.
	(use_variable_after): new fn.
	(expand_end_bindings): handle cleanups like a stack level.
	(expand_decl): Handle a cleanup with no decl.
	(move_cleanups_up): Preserve relative order of cleanups.
	(expand_anon_union_decl): New fn.
	(pushcase): New fast clause if no ranges yet.
	(pushcase_range): Turned on.
	(expand_function_start): New temp var `fntype'.
	Set TREE_USED for a parm we are ignoring.
	(expand_function_end): Really use the `filename' arg.
	Use use_variable_after for SAVE_EXPR regs.

	* dbxout.c (dbxout_type): Handle OFFSET_TYPE.

	* gnulib.c (__builtin_new, etc.): Support for C++.

	* emit-rtl.c (next_insn, prev_insn): New fns.

Sat Nov 26 16:29:22 1988  Richard Stallman  (mdt at chickasaw)

	* tree.h (TREE_LANG_FLAG_[1234]): New attributes.
	(TYPE_METHOD_BASETYPE): New name for TYPE_METHOD_CLASS.
	(TYPE_OFFSET_BASETYPE): New macro.
	(NUM_TREE_CODE): New macro.
	(TYPE_NONCOPIED_PARTS): new field in a type-node.

	* varasm.c (make_decl_rtl): Split out from assemble_variable.
	(assemble_variable): No longer creates the rtl.
	No longer handles policy of whether to output tentative decl yet.
	(output_constant_def): Don't lose if wasn't temp allocation
	when this was called.
	(output_constant): Handle REFERENCE_EXPR.

	* Makefile (BISONFLAGS): new variable.
	(prefix): New variable, used in bindir and libdir.
	(C_OBJS, CPLUS_OBJS): New vars, split off from OBJS.
	(LIBFUNCS): C++ support functions added.
	(CPLUS_TREE_H): New variable.
	(cc1plus): New target.
	(lang_c, lang_cplus): Combines all targets for one language.
	(gplus.info): New target.
	(cplus-*.o): New targets.
	(realclean): Handle new C++ files and recent renamings.
	(install, TAGS): Likewise.

	* print-tree.c (prtypeinfo): Handle TREE_LANG_FLAG_[1-4].

	* tm-sparc.h (ASM_OUTPUT_DOUBLE): Special case for infinity.
	(ASM_OUTPUT_FLOAT): Likewise.

	* gcc.c: Don't define __GNU__.
	For .cc files, pass -+ to cpp, and don't handle -ansi.
	Use cc1plus as name of compiler for .cc files.

	* stor-layout.c (layout_type): abort if given a LANG_TYPE node.
	(layout_union): Complain if union has basetypes or static members.
	(layout_record): Handle anonymous union members.

	* tree.def (LANG_TYPE): New tree code for language-specific purposes.
	(WITH_CLEANUP_EXPR): New tree code for expressions whose values
	need to be cleaned up when they are deallocated.
	(OP_IDENTIFIER): New tree code for certain C++ purposes.

	* toplev.c (rest_of_decl_compilation): Call make_var_rtl
	before assemble_variable.

Wed Nov 23 02:15:45 1988  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* xm-sunos4.h: Rename included config files to xm-*.
	* xm-*.h: Likewise.

	* fixincludes: Avoid altering args to names other than CTRL
	that end in ...CTRL.
	If a file isn't actually changed, delete the copy.

Mon Nov 21 12:48:22 1988  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* loop.c (move_movables): Never move a reg w/ # > old_max_reg.
	(strength_reduce): For nonreplaceable giv, put insn to load it
	after the insn that used to compute it, in case the latter
	is the last of a libcall sequence.

	* stmt.c (expand_function_end): If returning BLKmode, also copy
	address where value is returned to the place that GDB will
	expect to see it after the return.

	* c-parse.y (readescape): Warn about hex constant out of range
	for a target integer.
	(yylex): Warn about escape out of range for non-wide char or string.
	Use a buffer of ints to read a wide string.

Sat Nov 19 02:18:02 1988  Richard Stallman  (rms at apple-gunkies.ai.mit.edu)

	* Version 1.31 released.

	* sparc.md: Change `K' to `I' in all constraints.

	* loop.c (gen_iv_mult): Handle TARGET==0.

	* c-decl.c (duplicate_decls): Undo last change.

	* c-decl.c (pushdecl): Instead of that change,
	save old-decl's file/line before calling duplicate_decls,
	and pass them later to warning_with_file_and_line.
	* toplev.c (warning_with_file_and_line): New fn.

Fri Nov 18 13:07:06 1988  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* stmt.c (fixup_var_refs_1): (SUBREG (MEM)) was slipping through
	in case where a SET was writing in the variable being fixed.

	* recog.c (register_operand, nonmemory_operand, memory_operand):
	Changes to handle new var reload_completed: 1 means that
	(SUBREG (MEM)) now counts as a mem-ref, since alter_subreg
	will make it one.
	* toplev.c (rest_of_compilation): Set and clear reload_completed.

	* sparc.md (call patterns): If TARGET_SUN_ASM, and address in reg,
	output a jmpl rather than a call.
	* tm-sun4os3.h: Like tm-sparc.h but turn on TARGET_SUN_ASM.

	* reload.c (push_reloads): Reinstate handling of reg_equiv_constant.

Thu Nov 17 09:48:14 1988  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* reload1.c (constraint_accepts_reg_p): Name changed from
	constraint_all_regs_p; new arg is reg we are concerned with,
	and condition tested takes some advantage of that reg.

	* gcc.c (main): Rename var `error' to `error_count' for name conflict.

	* emit-rtl.c (emit_note): Output line #s even if no debug info wanted.
	(emit_line_note): New fn, does what emit_note did.
	(emit_line_note_force): New name for emit_note_force.
	* stmt.c, c-parse.y: Call emit_line_note instead of emit_note.

	* c-parse.y (maybe_type_qual): Call emit_note instead of emit_line_note
	Now we can find the line # of every `asm' from the RTL.
	* toplev.c (error_for_asm): New fn, gets line # by searching for NOTE.
	* reload.c (find_reloads): Use error_for_asm.
	* reload1.c (choose_reload_targets): Likewise.
	* final.c (output_operand_lossage): Likewise.
	Variable this_is_asm_operands is now current insn if it's nonzero.

	* loop.c (move_movables): When a reg is moved, update regno_first_uid
	and regno_last_uid; say life span includes entire loop.
	* Decrement THRESHOLD per reg moved, not per insn moved.

Wed Nov 16 08:41:32 1988  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* gnulib.c (___builtin_saveregs): New fn, for sparc.

	* tm-sparc.h (GO_IF_LEGITIMATE_ADDRESS): Don't recognize
	SYMBOL_REFs, except for the constants pool.
	But do recognize REG+REG and SMALLINT+REG.
	* sparc.md: New patterns for fetching and storing memory
	whose address is symbolic and not "legitimate".

	* sparc.md (movsi): Add `f' to op1 constraint.
	New output clause for result in fp reg.
	(Floating point fetch patterns): Output sethi insns.
	(call_value, related patterns): value-register has `register_operand'.

	* output-sparc.c (hardreg): New function.
	(COMPATIBLE): Clause added for n_regs == 2.
	(single_insn_src_p): Return 0 for MEM whose address is absolute.

	* tm-genix.h (GO_IF_LEGITIMATE_ADDRESS subroutines):
	Redefine, to exclude any possibility of SB-referencing addresses.

	* loop.c (strength_reduce): Can't eliminate a biv if used before
	start of the loop.  Used before is same as used after, if contained
	in another loop.

	* recog.c (asm_noperands, decode_asm_operands):
	Handle case of no outputs, but some clobbers.
	* stmt.c (expand_asm_operands): Generate right stuff for that case.

	* tm-sun3.h (CPP_SPEC): Don't define __HAVE_68881__ if using fpa.

Tue Nov 15 00:10:26 1988  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* loop.c (gen_iv_mult): Arg OP0 may not be a constant.
	Pay attention to return value of expand_mult.
	(eliminate_biv): Call changed.

	* output-m88k.c, output-sparc.c (output_move_double):
	Fix typo `optype0' for `optype1'.

	* c-decl.c (duplicate_decls): Don't alter file, line of old decl.

	* c-parse.y (skip_white_space): Don't recognize comments; rely on cpp.

	* rtl.c (rtx_equal_p): Handle vectors.

	* loop.c (scan_loop): Change elts of n_times_set back to positive
	for candidates that weren't moved, before doing strength reduction.

	* ns32k.md (movdi, movdf): Use `&' constraint for first operand.

	* reload1.c (reload): Initialize spill_indirect_ok here.

	* config-sun4.h: Recognize `-static' switch.

	* global-alloc.c (set_preference): Avoid using nonsense hard reg #s
	that result from adding OFFSET.

	* sdbout.c (sdbout_end_function): Line # in .ef should be relative.

	* final.c (output_source_line): For SDB, don't output negative #s.

	* tm-encore.h (ASM_OUTPUT_LOCAL): Don't ignore SIZE arg.

Mon Nov 14 11:03:16 1988  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* reload.c: Don't declare refers_to_regno_p.

	* gcc.c (main): Warn if any input files are for the linker
	but the linker is not being run.

	* jump.c (sets_cc0_p): Dumb bug fetching elts of a PARALLEL.

	* local-alloc.c: qty_birth, qty_death elements are now -1, not 0,
	when the value is not known.

	* expmed.c (extract_bit_field): Bug computing xbitpos, xoffset
	when changing units from bytes to words.

	* loop.c: Rename `times_used' field in `struct movable' to `savings'.
	(scan_loop): When scanning the consecutive sets, for each libcall,
	increment `savings'--leave `consec'.
	When making movable for (SET (REG) 0) which is part of zero-extension,
	set `savings' to 1 initially, since only 1 insn will be moved.
	And don't let any other reg force that insn.
	Reduce initial THRESHOLDs.
	(move_movables): Don't add `consec' into `savings'
	since the initial `savings' was proportional to `consec'.
	Decrement THRESHOLD by 3 (not 2) for each move done.

	* reload1.c (choose_reload_targets): Strip subregs from OLD
	before writing the output-reload move-insn.

	* reload1.c (reload): counted_for_groups and counted_for_nongroups
	are now file-scope.  Update them both when spilling.
	(new_spill_reg): No need for counted_for_nongroups as arg.
	(choose_reload_targets): Don't use for a group
	any spill regs for which counted_for_nongroups is set.

	* dbxout.c (dbxout_symbol): Indirect-symbol case checked erroneously
	for PARM_DECL.

Sun Nov 13 08:13:49 1988  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* cse.c (fold_rtx): Don't alter MULT by -1 if arg mode != result mode.

	* loop.c (move_movables): If moving a CALL_INSN, make a new CALL_INSN.
	* emit-rtl.c (emit_call_insn_before): New fn.
	
	* config-sun4.h (LINK_SPEC): Avoid shared libraries if -g.

	* expr.c (store_one_arg): Stabilize ARG->stack so it doesn't use SP
	before computing the arg value.

	* combine.c (use_crosses_set_p): Moving a ref to stack ptr
	is always forbidden if machine has push insns, since might cross one.

	* vax.md (movqi): Avoid out-of-range immed ops in mcomb.

	* expmed.c (extract_bit_field): Don't say `extzv' in the
	clause for `extv'.

	* emit-rtl.c (copy_rtx_if_shared): Even if a MEM can be shared,
	unshare its address from everything outside that MEM.

	* expr.c (expand_builtin): Fix omitted arg to `convert_to_mode'.

	* expr.c (store_expr): In case where will not return TARGET
	and must do type conversion, don't fail to store into TARGET.

	* dbxout.c (FORCE_TEXT): New macro used before output `.stabs'
	to go to the text section on targets that require it.
	(DEBUG_SYMS_TEXT): Target macro which turns on that feature.

	* reload1.c (reload): Index in spill_regs was wrong
	when checking counted_for_groups.
	(choose_reload_targets): When calling find_equiv_reg looking for
	a reload reg, reject all spill regs, even those not in use now.

	* tm-sun386.h, tm-sun386i.h, config-sun386i.h: New files.

	* cccp.c (main): Don't die if no output file arg given.

	* fixincludes: Tell `find' to find only ordinary files.

	* config.gcc: If symlink fails, make a hard link.

Sat Nov 12 20:43:20 1988  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* Makefile (gnulib): Use cp to make the temporary .c files;
	less likely to fail than ln.

Sat Nov  5 12:46:39 1988  Randall Smith  (randy at sugar-bombs.ai.mit.edu)

	* tm-m68k.h (HARD_REGNO_MODE_OK): Disallowed d7:a0 as an allowable
	pair of registers to hold a double value.  This is correct for the
	fpa but incorrect for the 68881.  It was, however, simpler than
	defining a new regclass.

Tue Oct 25 12:03:49 1988  Randall Smith  (randy at gluteus.ai.mit.edu)

	* m68k.md: Added some thoughts (comments) on best method to allow
	68881 code with fpa code.

Thu Oct 13 14:19:17 1988  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* Version 1.30 released.

	* stupid.c (stupid_life_analysis): Init last_call_suid with
	largest possible value, not 0.

Wed Oct 12 04:40:18 1988  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* output-i386.c (output_asm_insn_double_reg_op): Compensate for
	assembler bug that interchanges fsub and fsubr.

	* reload1.c (order_regs_for_reload): Undo 29 Sept change.
	It breaks the 386.

	* varasm.c (decode_rtx_const): Don't example value->addr
	if what was stored in was value->d.

	* toplev.c (set_float_handler): New fn, specify where to jump
	on floating exception signal.
	* fold-const.c (combine): Use that to handle overflow in arithmetic.

	* c-decl.c (grokdeclarator): Don't clear CONSTP, VOLATILEP
	when making an array type.

	* dbxout.c (dbxout_symbol): Ignore VAR_DECLs in memory whose
	addresses we can't represent.

	* fold-const.c (fold): don't convert >= to > if both args are constant.
	When converting >= to >, don't fail to change CODE.

Tue Oct 11 04:13:40 1988  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* vax.md (movhi): Error in truncating mcomw, addh3 args to 16 bits.

	* final.c: Better error checking for %-specs in templates.
	(output_operand_lossage): new fn to report errors.
	(insn_noperands): new var: # operands in current fn.
	(this_insn_asm_operands): new var: 1 for `asm', 0 otherwise.
	(output_asm_insn): Check for operand # out of range.
	(output_asm_label, output_operand): Call new fn to report errors.

	* reload.c (push_reloads): An input reload for (REG N) can match one
	for (POST_INC (REG N)) or (PRE_INC (REG N)), since the value
	reloaded is the same in any case.

Mon Oct 10 06:19:05 1988  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* recog.c (next_insns_test_no_inequality): Like next_insn_tests...
	but check all insns that follow this one and can use it's cc's.
	* output-m68k.c (output_btst): Use that.

	* vax.md (movsf, movdf): Undo last change; movq/movl set the cc wrong.

	* expr.c (expand_call): Set current_function_calls_setjmp if appro.
	* stmt.c (setjmp_protect): New fn: move all vars into stack
	unless declared `register'.
	* c-decl.c (finish_function): Call it if -traditional and setjmp used.

	* cccp.c (main): Open output after the input.
	Handle `-o -'.

Sun Oct  9 00:28:06 1988  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* tm-sun3.h (CPP_SPEC): Define __HAVE_FPA__ if appropriate.

	* c-decl.c (pushdecl): After duplicate_decls, maybe warn about
	"declared extern and later static".

	* expmed.c (store_bit_field): In insv case, avoid turning
	VALUE into a subreg of a subreg.

	* loop.c (move_movables): When moving a libcall,
	un-cse the function address; put it into the call insn.

Sat Oct  8 01:48:03 1988  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* cse.c (equiv_constant): Subroutine to find the constant equivalent
	of a reg.  Now handles SUBREGs too.
	(fold_rtx, fold_cc0): Use that function.
	Don't handle SUBREGs like arithmetic.

	* reload1.c (choose_reload_targets): Don't call reg_overlap_mentioned_p
	if arg is 0.

Fri Oct  7 01:00:19 1988  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* assert.h: Typo declaring __eprintf.

	* config.gcc: New file for making the links.
	Fixed bugs for sun-[23]-os4.  Added sun-[234] for sunos 3.
	Added sequent-i386.

	* emit-rtl.c (gen_rtx): Return const0_rtx for 0 in DImode.
	* varasm.c (immed_double_const): Don't be confused by this.

	* expmed.c (negate_rtx): New 1st arg MODE.
	* expr.c (push_block): Calls changed.
	* m68k.md, ns32k.md, vax.md: Calls changed.

	* c-decl.c (duplicate_decls): Don't discard DECL_BLOCK_SYMTAB_ADDRESS.

	* tree.c (staticp): INDIRECT_REF with constant address is static.
	COMPONENT_REF may not be, if component offset isn't constant.

	* c-typeck.c (default_conversion): Converting array to ptr, if array
	isn't a VAR_DECL, go through build_unary_op so that COMPONENT_REFs
	will be simplified away.

	* ns32k.md (tbitd patterns): op 0 constraint: reject constants.
	* ns32k.md (extzv for SImode and HImode):
	Use adj_offsetable_operand; plus_constant was the wrong thing.

Thu Oct  6 00:10:41 1988  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* Version 1.29 released.

	* loop.c (scan_loop): Don't think a `return' insn enters the loop.

	* ns32k.md (ashrsi3, etc): New define_expands for right shift.

	* reload1.c (choose_reload_targets): Change in the `force_group'
	logic to avoid crashes.

Wed Oct  5 04:09:19 1988  Richard Stallman  (rms at corn-chex.ai.mit.edu)

	* expr.c (expand_expr, MINUS_EXPR): When negating integer op1,
	truncate it to its mode.

	* expmed.c (extract_bit_field): SUBREG error check was wrong;
	SImode SUBREGs are possible and ok in extzv, extv.

	* tm-ns32k.h (REGISTER_NAMES): Had two excess elements; deleted.

Mon Oct  3 01:15:51 1988  Richard Stallman  (rms at corn-chex.ai.mit.edu)

	* toplev.c (main, compile_file): If no files spec'd, use stdin, stdout.

	* flow.c (propagate_block): When checking for stack-adjust insns,
	exclude non-SET patterns.

	* jump.c (jump_optimize): When changing jump=>return to return,
	must rerecognize the insn.

	* toplev.c (compile_file): Allow `-' for main input or output filename.

Sun Oct  2 10:30:09 1988  Richard Stallman  (rms at apple-gunkies.ai.mit.edu)

	* final.c (final): NOTICE_UPDATE_CC has extra arg, INSN.
	* tm-*.h: Change definitions.

	* stmt.c (optimize_bit_field): Use gen_lowpart to make subregs.

	* stmt.c (assign_parms): Don't obey regdecls in inline function.
	Don't lose existing REG_NOTES when adding one.

	* stmt.c (expand_function_start): Make return rtx before
	marking parms live.
	(expand_function_end): Use use_variable to emit USEs for SAVE_EXPRs.

	* stmt.c (expand_return): Handle TRUTH_AND_EXPR like ANDIF; OR also.

	* stmt.c (expand_end_stmt_expr): Always set TREE_VOLATILE,
	sometimes TREE_THIS_VOLATILE.

	* jump.c (delete_insn): When finding PREV, skip deleted insns.

	* varasm.c (output_constant): WORDS_BIG_ENDIAN test was backwards.

	* emit-rtl.c (gen_lowpart): Allow MODE > 1 word if X is same size.

	* final.c (final): Don't delete no-op moves (jump did it if appro.).

	* final.c: Support prescan pass.
	(final_start_function): init_recog and CC_STATUS_INIT mvd to `final'.
	(final): New arg PRESCAN.  Do no output if prescanning.
	Don't alter conditionals if PRESCAN < 0 (prescan already done).
	If jump becomes no-op, change it to a NOTE.
	Remember to free the temp space for ASM_OPERANDS.

	* final.c (final): Altering store-flag must check STORE_FLAG_VALUE.
	Don't try to do it if that isn't defined.
	Don't try it if condition doesn't test CC0.
	(alter_cond): No need to check COND != 0.
	Handle CC_Z_IN_NOT_N and CC_Z_IN_N.
	(m68k.md): Delete code that handled CC_Z_IN_NOT_N.

	* conditions.h: New flag CC_Z_IN_N.
	* tm-*.h: Renumber all CC_... flags to make room.

	* combine.c (use_crosses_set_p): Loop start was 1 off.

	* local-alloc.c (reg_is_set): When a reg is CLOBBERed and dies in
	one insn, make it live immediately before and after that insn.

	* global-alloc.c: Hard reg preferences for global pseudos.
	Var allocno_preferred_reg deleted; new vars hard_reg_preferences
	and regs_someone_prefers.
	(global_alloc): Init those vars.  Pass hard_reg_preferences elt
	to find_reg.
	(set_preference): New function makes entries in those vars.
	(global_conflicts): new arg to mark_reg_store.  Call set_preference.
	(find_reg): Last arg now a preferred hard_reg_set.
	Scan that set first of all.
	(mark_reg_store): New arg is offset for renumbered regno.
	But the code to use it is turned off.

	* global_alloc (check_frame_pointer_required): Handle reg_equiv_address
	like reg_equiv_mem.  Don't try to allocate pseudos with equiv mems
	that don't use the frame pointer.
	* reload1.c (reload): Call changed.

	* jump.c (sets_cc0_p): Tests whether rtx sets cc0, and whether
	it does nothing but set cc0.
	(find_cross_jump, delete_jump): Use that fn for these tests.
	* loop.c (loop_skip_over): Likewise.
	* reload.c (push_reload): Likewise.

	* genoutput.c: Output `const' before the data arrays.
	Define it as nothing if not __STDC__.

Sat Oct  1 02:19:29 1988  Richard Stallman  (rms at apple-gunkies.ai.mit.edu)

	* expr.c (store_one_arg): 3rd arg to emit_block_move is in bytes.

	* cse.c (fold_rtx): Handling ZERO_EXTEND or SIGN_EXTEND of constant,
	if the arg width is too wide to handle, return safely.

	* combine.c (FAKE_EXTEND_SAFE_P): Don't allow extend to > 1 word.

	* rtl.c (refers_to_regno_p): Moved from reload.c.  Not static.
	(reg_overlap_mentioned_p): New function, calls the above.
	* output-*.c: Use that instead of reg_mentioned_p.
	* tm-*.h (NOTICE_UPDATE_CC): Likewise.
	* reload.c (push_reload, combine_reloads): Likewise.
	* reload1.c (choose_reload_targets): Use it to check earlyclobbers.

	* reload1.c (choose_reload_targets): Elimination of previous
	output-reload feeding our input now limited to pseudo-regs.

	* flow.c (life_analysis): Delete any insn copying reg to itself.
	(propagate_block): Move update of OLD after special life and death
	for CALL_INSNs.

	* vax.md (ashrsi3, ashrdi3, rotrsi3): define_expands to negate
	the shift count.
	* expmed.c (expand_shift): Eliminate negate-the-shift-count feature.

	* vax.md (and*i3): define_expands which use complement and bit-clear.
	* expmed.c (expand_bit_and): Eliminate feature to do that.
	This function could be eliminated.

	* expmed.c (store_bit_field): Handle nested subregs.
	Allow gen_insv to fail; if it does, delete what we did and then
	use store_fixed_bit_field.
	(store_fixed_bit_field): Use gen_lowpart to make SUBREGs.
	Do that for SUBREGs just as for REGs.
	Error check OFFSET must be 0 for REGs.
	(store_split_bit_field): Error check OP0 is a SUBREG when expected.
	(extract_bit_field): Allow gen_ext{,z}v to fail.
	Use gen_lowpart to make subregs.
	(expand_shift): If a try fails, delete any insns it made.

	* expmed.c (expand_mult): Use expand_unop to negate.
	When adding 2 powers of 2, do serial shifts, not parallel.
	Handle absval==1 like other powers of 2.

	* explow.c (force_reg): Don't lose any existing reg notes.

	* stmt.c (expand_start_stmt_expr): Eliminate return value.
	(expand_end_stmt_expr): No need for argument.
	* c-parse.y (primary): Change calls.

Fri Sep 30 01:50:22 1988  Richard Stallman  (rms at corn-chex.ai.mit.edu)

	* integrate.c (copy_rtx_and_substitute, copy_address):
	'u' case erroneously returned the translated single element.
	(copy_address): Special cases for frame-ptr and sums containing it.
	MEM and LABEL_REF cases passed wrong arg to copy_rtx_and_substitute.
	(copy_rtx_and_substitute): adjust mode of inline_target for context.

	* jump.c (true_regnum): For SUBREG of pseudo, use pseudo's # unchanged.

Thu Sep 29 02:50:46 1988  Richard Stallman  (rms at corn-chex.ai.mit.edu)

	* i386.md (movsi, mov{q,h}i): Use find_reg_note to look for REG_WAS_0.
	* vax.md (movsi, movhi): Likewise.

	* varasm.c (decode_rtx_const): Was setting un.addr.base wrong
	for a CONST.  Should be symbol name, not the SYMBOL_REF.

	* rtl.c (rtx_equal_p): When comparing registers, check
	REG_FUNCTION_VALUE_P.  If there are `u'-slots in the rtx, ignore them.

	* rtl.c (reg_mentioned_p): Some rtx types were mistakenly treated
	as uniquified (various constants).

	* rtl.c (read_rtx): Element type 'S' is string that may be omitted.
	* rtl.def (define_insn, define_peephole): Add a last element, type 'S'.
	* genoutput.c: Collect these optional last elements and output as
	array `insn_machine_info' of structs `INSN_MACHINE_INFO'.
	The last must be defined as a macro.
	* recog.h (insn_machine_info): Declare it if appropriate.

	* regclass.c (record_address_regs): In PLUS case, look inside SUBREGs.

	* reload1.c (reload): Use reg_equiv_address for REG_EQUIVs with
	invalid memory addresses.
	When changing pseudos to mem refs at end, do FIX_FRAME_POINTER_ADDRESS
	on their addresses.
	(alter_reg): Check that with reg_equiv_mem.
	(spill_hard_reg): If fp reg, spill regardless of basic_block_needs.

	* reload1.c (order_regs_for_reload): Don't put invalid regs into
	potential_reload_regs at all.  (They used to go at the end.)

	* reload.c (find_reloads): Store all earlyclobber operand in
	reload_earlyclobbers (# in n_earlyclobbers):
	* reload1.c (choose_reload_targets): Don't use value of find_equiv_reg
	if it matches an earlyclobber operand.

	* reload.c (find_reloads_address for REG):
	No need for explicitly excluding hard regs in these tests.
	(find_reloads, find_reloads_address_1 for REG): likewise.

	* reload.c (push_reload): Code testing reg_equiv_constant should
	be obsolete; add error check to verify this.

	* reload.c (hard_reg_set_here_p): Handle CLOBBERs, SUBREGs, overlap.
	(refers_to_regno_p): Handle CLOBBERS.  Handle overlap.
	New arg ENDREGNO specs end of range to check for;
	all callers changed (all in this file).

	* reload.c (find_reloads): SUBREG like REG in alternate recovery
	for earlyclobber conflict.
	The operands to unswap are those that are supposed to commute.
	When operands match, copy the regclass of earlier one for later one.

	* stmt.c (optimize_bit_field): Don't use gen_extend_insn;
	use convert_move, then reorder the insns.
	* optabs.c (gen_extend_insn): Deleted.

	* optabs.c (emit_cmp_insn): Don't emit queue before recursion.
	Don't convert size to SImode for cmpstrqi.

	* optabs.c (expand_binop): Keep any old REG_NOTES when adding them.
	Always delete_insns_since if returning failure.
	(expand_unop, emit_unop_insn): Keep any old REG_NOTES when adding them.
	* spur.md (movhi): likewise.

	* RTL_EXPR_SEQUENCE is now a chain of insns, not a SEQUENCE.
	* emit-rtl.c (emit_insns): New fn, emit a chain of insns.
	* expr.c (expand_expr): Use that.
	Also put const0_rtx in the RTL_EXPR_SEQUENCE (mark RTL_EXPR as output).
	* stmt.c (expand_end_stmt_expr): Use get_insns to get the chain.

	* stmt.c (expand_end_stmt_expr): Put the RTL_EXPR on rtl_expr_chain.
	(fixup_var_refs): Scan all waiting RTL_EXPRs not yet output.
	Also scan all stacked sequences on sequence_stack.

	* genemit.c (gen_expand): Generate calls to {start,end}_sequence.
	Use `emit' to handle a PARALLEL.
	(FAIL, DONE): Change to fit gen_expand changes.

	* emit-rtl.c (change_address): abort if arg isn't a MEM.

	* emit-rtl.c: Sequences work now by saving and restoring first_insn
	and last_insn.  So these variables are used even when in a sequence.
	emit_to_sequence has been deleted.
	(start_sequence, end_sequence): Save and restore first_insn, last_insn.
	(get_last_insn, add_insn): Sequences no longer need special treatment.
	(delete_insns_since, reorder_insns): likewise.
	(push_to_sequence): Set up to emit to a given existing insn chain.

	* emit-rtl.c (copy_rtx_if_shared): Don't copy INSNs.
	Insert missing return stmt in MEM case (for MEMs ok to share).
	(unshare_all_rtx): Now can copy the REG_NOTES simply.
	Copy the LOG_LINKS too.

	* emit-rtl.c (make_safe_from): Treat SUBREG as X like a REG.
	(delete_insns_since): Don't lose if FROM is the first insn.
	(emit): Declare void, since no useful value.
	Call simplejump_p properly.
	(restore_reg_data_1): When a reg is an address, do mark_reg_pointer.

	* dbxout.c (dbxout_types): Call dbxout_symbol to do the work.
	(dbxout_type_def): Deleted.
	(dbxout_symbol): Set TREE_ASM_WRITTEN when a TYPE_DECL is output.
	Don't output the same one twice. 

	* cse.c (fold_cc0): LABEL_REF is not zero.

	* cse.c (cse_insn): Don't insert src, dest if they are the same place.

	* cse.c (lookup_as_function): Return entire rtx, not just operand.
	(cse_insn): Caller changed.  Also, copy the result before inserting it.

	* cse.c (fold_rtx): Put constant arg last if commutative op.
	Handle idempotents and identities for mult, div, booleans, shifts.

	* cse.c (canon_hash): Parens were missing around shifts in "rotates".

	* c-convert.c (convert_to_integer): Truncate TRUTH_ANDIF_EXPR
	like TRUTH_AND_EXPR; OR also.

	* c-typeck.c (build_binary_op_nodefault): Do truthvalue_conversion
	for TRUTH_ANDIF, etc.
	(build_unary_op): More simplifications for TRUTH_NOT_EXPR;
	uses new fn `invert_truthvalue'.

	* recog.c (reg_fits_class_p): New name for reg_renumbered_fits_class_p
	since it no longer needs to renumber.  Also it now really assumes
	arg is a REG.  Callers changed.
	* reload.c: Callers changed.

	* recog.c (general_operand): (SUBREG (MEM...)) need not alter mode.
	(register_operand, nonmemory_operand): (SUBREG (MEM...)) is allowed.
	(memory_operand): (SUBREG (MEM...)) is *not* allowed.
	(mode_independent_operand): Operand names were backwards!
	(No change in effect of this function.)

	* print-tree.c (dump): Some expr nodes contain rtx's.  Print as rtx's.

Wed Sep 28 18:51:12 1988  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* reload1.c (choose_reload_targets): If a reload wanted a group,
	don't allow a single register for it.

Tue Sep 27 11:43:56 1988  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* final.c (output_addr_const): Handle DImode CONST_DOUBLEs.
	* tm-*.h (PRINT_OPERAND): Treat DImode CONST_DOUBLE like a CONST_INT.

	* vax.md (rotldi3): Insn deleted; it doesn't really exist.

	* toplev.c (report_error_function): Also mention the file name,
	for parallel makes.  New arg FILE; all callers changed.

Mon Sep 26 15:44:18 1988  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* expmed.c (expand_shift): When using extzv, convert OP1 to SImode.
	* c-typeck.c (build_binary_op_nodefault): Convert shift-count
	to int regardless of result type.

	* output-spur.c (output_move_double): Fix typo, optype0=>optype1.

	* expr.c (expand_call): Avoid null deref on result of FUNCTION_ARG.

	* tm-i386.h (FUNCTION_PROFILER): Use correct assembler syntax.

Sun Sep 25 12:13:56 1988  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* fixincludes: Handle some files in netdnet, netdna, vaxif, vaxuba.

	* reload.c (find_reloads): Make no optional reloads if not -O.

	* loop.c (strength_reduce): Can't eliminate a biv if it's used
	to compute a DEST_ADDR giv.  Only DEST_REG givs are safe.

	* loop.c (general_induction_var): Shift & divide ops are linear
	only in 1st operand; don't look for biv or giv in 2nd operand.

	* vax.md (fix_truncdfqi2): Use `%#'.

Sat Sep 24 00:25:48 1988  Richard Stallman  (rms at gluteus.ai.mit.edu)

	* loop.c (n_times_set, n_times_used): Now file-scope;
	no longer passed as args to several functions.

	* loop.c (basic_induction_var): Accept reg as source value
	only if it's invariant.
	(strength_reduce): Benefit calculation and threshold changed.
	Check reducibility of givs before trying to reduce them.
	Check eliminability of biv before considering the givs;
	let this affect the threshold.
	(record_giv): New subroutine adds a giv to the chain.

	* ns32k.md (incrementing sp): Use cmpd insns to increment by 4 or 8.

	* integrate.c (expand_inline_function): Rename return_label
	to local_return_label; avoid shadowing.

Fri Sep 23 13:57:52 1988  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* loop.c (loop_skip_over): Put the new label after the note that ends
	the loop.

	* loop.c: New function strength_reduce and subroutines.
	* toplev.c: New var flag_strength_reduce, set from -fstrength-reduce.

	* vax.md (sob insns): They were broken, with plus in one place
	and minus in another.  Use plus consistently.

	* rtl.h (REG_LIBCALL, REG_NONNEG): Two new kinds of reg-note.
	* optabs.c (expand_binop, expand_unop): Make REG_LIBCALL notes.
	* loop.c (scan_loop, move_movables): Move entire library calls.
	Use m->set_src to get the expression, in case it's from a REG_EQUAL.
	(consec_sets_invariant_p): Likewise.

	* loop.c (scan_loop): Start scan from loop_top, if entry is rearranged.
	Watch out for pseudo regs created by strength_reduce;
	they can't index regno_last_uid.
	(replace_regs): # regs mapped is now an arg.

	* loop.c (count_loop_regs_set): Don't increment n_times_set past 127.
	(consec_sets_invariant_p): Reject if N_SETS arg is 127.

	* toplev.c (rest_of_compilation): NREGS arg of loop_optimize deleted.

	* c-decl.c (store_parm_decls): Anything but an IDENTIFIER_NODE
	in SPECPARMS indicates a parmlist, not an identifier list.
	(get_parm_info): Use only PARM_DECLs when making the list of arg types.

	* combine.c (try_distrib): Boolean ops can't distribute through PLUS.
	MULT can distribute through PLUS and only PLUS.

Thu Sep 22 15:57:41 1988  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* jump.c (jump_optimize): uncond jump to a return becomes a return.

	* integrate.c (copy_parm_decls, copy_decl_tree): Set TREE_USED.
	Avoid inevitable "unused" warning for these decls.

	* c-typeck.c (comptypes): When comparing array types,
	ignore qualifiers of element type.

	* tm-*.h (ASM_OUTPUT_REG_PUSH, ASM_OUTPUT_REG_POP): Define new macros.
	* final.c (final_start_function): Use them to protect around
	the call to the profiling function.
	* stmt.c (expand_function_start): Set current_function_needs_context
	and current_function_returns_struct.

	* stmt.c (expand_null_return_1): If clear_pending_stack_adjust
	doesn't clear it, do the adjust now.
	* expr.c (clear_pending_stack_adjust): No-op if -finline-functions.

	* cccp.c (macarg1, skip_if_group): Backslash makes next char ordinary.

	* reload.c (find_reloads): Delete code to look for an equiv reg
	for a reg being input-reloaded.  This isn't safe.
	* reload1.c (choose_reload_targets): Do it here.

Wed Sep 21 00:36:22 1988  Richard Stallman  (rms at hobbes.ai.mit.edu)

	* tm-sun3.h (CPP_SPEC): Define it based on TARGET_DEFAULT.
	(STARTFILE_SPEC): Likewise.

	* reload1.c (choose_reload_targets): When redirecting prev insn
	into this insn's reload-reg, check this doesn't break the prev insn
	by giving it a reg it can't accept.  Use new fn constraint_all_regs_p.

	* tm-sparc.h (ASM_OUTPUT_LOCAL): Use .reserve, not .common.

	* tree.h (TREE_USED): New attribute macro.
	* c-parse.y (primary): Set TREE_USED in ..._DECL nodes.
	* toplev.c, flags.h: Define and set warn_unused.
	* stmt.c (expand_end_bindings): Warn if any var is unused.
	* print-tree.c (prtypeinfo): Print this attribute.

Tue Sep 20 15:29:01 1988  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* assert.h: `assert' must expand to an expression.
	Error message should show arg before expansion, not after.

	* c-decl.c (implicitly_declare): Make decl perm if !warn_implicit
	since start_function needs to look inside it in that case.

	* toplev.c (announce_function): If we don't print, don't record we did.

Mon Sep 19 15:21:11 1988  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* c-parse.y (structsp): If pedantic, warn if comma at end of enumlist.

	* reload.c (find_reloads): Check insn_code_number >= 0 when
	looking in insn_operand_strict_low.

	* tm-sun[23].h (CPP_SPEC): Rename __HAVE_FPU__ to __HAVE_68881__
	and put a space after that option.

Sun Sep 18 01:12:56 1988  Richard Stallman  (rms at hobbes.ai.mit.edu)

	* reload.c (find_reloads): Make optional reloads for explicit MEMs.

	* tm-m68k.h (MODES_TIEABLE_P): If no 68881, can tie fixed to floating.
	* m68k.md (movdi): Allow F's (can be DImode now).
	Don't allow f-regs (experiment).  Don't preference x-regs.
	(DImode push): Allow y-regs.
	(DFmode push): Allow y-regs, not x-regs.

	* reload1.c (modes_equiv_for_class_p): New function.
	(reload): Compare multiple modes for reg group with that function.
	Allows differing modes in some cases when not tieable.

	* c-parse.y (check_newline): Let ASM_OUTPUT_IDENT override .ident.
	* tm-3b1.h (ASM_OUTPUT_IDENT):  Define this as no-op.

	* emit-rtl.c (reorder_insns): Update sequence_{first,last}_insn if nec.
	(get_last_insn): If in a sequence, return last insn of sequence.
	(delete_insns_since): If in a sequence, set sequence_last_insn.

	* spur.md (CONST_DOUBLE load insn): Use & for most dests.
	(cond branches): pass additional args to output_compare.
	(movdf, movdi): Use & loading reg from mem.
	(trunc*): Enable these.
	(add): New pattern for adding large immediate operand.
	(shifts): A define_expand for each kind of shift,
	plus a recognizer which outputs repeated insns if necessary.
	(call*): Use r9 as temp, not r2.

	* output-spur.c (output_compare): New args NEG_{EXCHANGE_,}OPCODE.
	(singlemove_string): Handle reg as operand 1.
	(output_add_large_offset): Fake add insn with large immediate arg.
	(big_immediate_operand): Match such an arg.

	* tm-spur.h (FUNCTION_PROLOGUE): Align the stack pointer.
	Handle bigger frames.
	(TARGET_LONG_JUMP, TARGET_EXPAND_SHIFT): New target flags.

	* va-spur.h: Track position in regs and stack separately.

	* c-decl.c (duplicate_decls): Warn if prototype follows
	non-prototype definition.

Sat Sep 17 14:30:23 1988  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* expr.c (expand_builtin): Avoid crash if arg isn't integer type.

	* c-decl.c (duplicate_decls): Just warn if redeclaring a builtin,
	and leave it built in unless it is redefined.

	* vax.md (ashlsi3): Use addl3, moval or movad when useful.
	(addsi3): Avoid pushab, movab for constants < 64.
	Do use movab when > 64 when operands match.
	(mov*i): Use mcom* rather than mneg*.
	Use add*3 with two quick immediate args when useful.
	(movhi): Don't use movzbw or cvtbw; said to be slow.

	* rtl.h: New macros MEM_VOLATILE_P, MEM_IN_STRUCT_P,
	INSN_DELETED_P,	REG_USER_VAR_P, RTX_UNCHANGING_P, RTX_INTEGRATED_P,
	CONSTANT_POOL_ADDRESS_P.
	Most places changed to use them.

Fri Sep 16 11:50:15 1988  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* jump.c (jump_optimize): Was testing volatil on non-MEMs erroneously
	when looking for no-op move insns.

	* cccp.c (handle_directive): Ignore comments between # and directive.

	* integrate.c (copy_rtx_and_substitute): Stack-push memrefs need
	to be copied.

	* tm-bsd386.h (ASM_OUTPUT_DOUBLE): Undef previous def.

	* reload1.c (alter_reg): Don't reuse spill_stack_slot
	if it isn't big enough for this reg's mode.

	* expr.c (emit_move_insn): After force_const_mem, ensure
	mem address is valid.
	(move_block_to_reg, move_block_from_reg): Likewise.

	* expr.c (expand_call): Spurious TREE_VALUE on args[i].tree_value.

	* m68k.md (zero_extend*): Require register_operand for operand 0.

	* stdarg.h (va_start): Alternate defn for sparc.

Thu Sep 15 11:39:06 1988  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* c-parse.y (yylex): When atof gives ERANGE, check for "0.0", etc.

	* assert.h (__assert): Alternative definition for -traditional.

	* output-sparc.c (output_block_move): Initialize xoperands.

	* combine.c (try_combine): Never subst for a reg that is incremented.

	* m68k.md (cmpm pattern): Make the match_operands match memrefs
	and check that they are pushes in the extra condition.
	This makes reloading handle the pushes properly.

	* expr.c (MOVE_RATIO): Make it 15.  Allow overriding it.

Wed Sep 14 09:50:08 1988  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* c-decl.c (build_enumerator): Use saveable_tree_cons.

	* vax.md (movdf): Use movq when safe.

	* Version 1.28 released.

	* tm-sparc.h (FIRST_PARM_CALLER_OFFSET): Defined.

Tue Sep 13 00:11:37 1988  Richard Stallman  (rms at corn-chex.ai.mit.edu)

	* tree.c (saveable_tree_cons): New function.
	* c-decl.c (pushtag): Use it; lists of tags needed for inlining.
	(get_parm_info): Likewise.

	* print-tree.c (dump): Handle each kind of statement node individually.

	* integrate.c (copy_decl_tree): Don't pass DECL_RTL through
	copy_rtx_and_substitute if it's a memref with constant address.

	* sdbout.c (sdbout_symbol): Don't output garbage when DECL_RTL
	has a form we don't understand.

	* reload.c (find_reloads_address_1): Don't reload an autoincrement
	if it has a suitable hard reg already.

	* c-typeck.c (process_init_constructor): Error check after digest_init.

	* c-parse.y (is_reserved_word): Now static.

Mon Sep 12 19:19:28 1988  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* i386.md (all push insns): Use `<' for the constraint,
	since a push_operand won't fit an `m' constraint on this machine.

	* expr.c (expand_call): If fn name is `__builtin_alloca',
	it may be alloca.  This case arises if the user redeclares
	`__builtin_alloca'.

Sun Sep 11 01:47:01 1988  Richard Stallman  (rms at gluteus.ai.mit.edu)

	* Eliminate MAX_SETS_PER_INSN.
	* cse.c (cse_insn): Combine all the tables and dynamically allocate.
	(cse_main): Count the actual number of SETs; don't estimate.
	* genconfig.c: Don't calculate MAX_SETS_PER_INSN.
	* stmt.c (expand_asm_operands): No limit on # of output operands.

	* expr.c (expand_call):
	Store all non-reg parms first, then store all partially-in-reg
	parms, then all the (precomputed) wholly-in-reg parms.
	Special hair for BLKmode parms which must be passed entirely
	in memory; also for BLKmode parms initialized from function calls,
	for which it is best to allocate the space before computing value.
	Use macro FIRST_PARM_CALLER_OFFSET to handle machines where reg
	parms "take up space" on the stack below the stack pointer.
	(store_one_arg): Handle case of preallocated stack loc for BLKmode.
	Update current_args_size here, not in caller.

Sat Sep 10 19:58:03 1988  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* output-sparc.c (output_scc_insn): Changed asm templates.
	Use common code to emit the move insns and label at the end of fn.
	(output_mul_by_constant): Use %g1 as temporary reg.

	* sparc.md (indexed load pattern): Deleted.
	(fix_truncdfsi2): Don't ignore value of output_fp_move_double.
	(cse'd multiply): Operand 1 predicate is general_operand.
	(return peepholes): Conditionalize on ! TARGET_EPILOGUE.

	* tm-sparc.h (INIT_CUMULATIVE_ARGS,FUNCTION_ARG...):
	Use partial regs for args that start in regs but won't entirely fit.

	* tm-sparc.h (CONST_COSTS): 0 for args that can be immediate.
	(STRUCTURE_SIZE_BOUNDARY): Now 8.
	(STRUCT_VALUE_OFFSET): Defined as symbolic name for `64'.

	* expr.c (struct arg_data): New component `stack' says where in the
	stack to put a BLKmode arg (if it's nonzero).
	(store_one_arg): Handle case where it's nonzero.
	(target_for_arg): New fn, precompute stack locn for BLKmode arg.

Fri Sep  9 01:41:13 1988  Richard Stallman  (rms at corn-chex.ai.mit.edu)

	* cse.c (fold_rtx): Misnested ifs screwed SUBREG case.

	* reload.c (find_reloads_toplev): Special case for (SUBREG REG)
	where REG is equivalent to a CONST_INT.
	(find_reloads): Don't ignore the value returned by find_reloads_toplev.
	Treat a (SUBREG constant) like a (SUBREG MEM): set force_reload.

	* reload.c (push_reload): Abort if memory subreg is not
	paradoxical; the MEM mode should be narrower than the SUBREG.

	* stmt.c (fixup_var_ref_1): Fixup memory subregs in an insn
	copying VAR to or from a register.

	* m68k.md (movdi, movdf): the x-reg constraint accidentally allowed
	moving rm to rm with no &.

	* vax.md (call_value): Typo.

	* expr.c (emit_block_move, emit_push_insn): prefer movstrqi to movstrsi

	* m68k.md (FPA multiply): bad opcodes for 3-operand multiply insns.

Thu Sep  8 18:22:14 1988  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* c-parse.y: Use YYERROR instead of synonym YYFAIL.
	BISON VERSIONS PRIOR TO THIS DATE WON'T WORK!

	* c-typeck.c (digest_init): Use TYPE_MAIN_VARIANT of array elt type.

	* tm-sun[23].h (CPP_SPEC, ASM_SPEC): Let -m(c|)680[12]0 control
	options for CPP and assembler.

Wed Sep  7 13:44:59 1988  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* New handling of reloading of PRE_DEC, etc.
	Now reload_in is the PRE_DEC, etc, and reload_inc is always positive.
	* reload.c (push_reloads): Old code to set reload_inc deleted.
	(find_reloads_address_1): Call push_reload the new way.
	(find_inc_amount): Value always positive.
	* reload1.c (choose_reload_targets): Detect this case.
	(inc_for_reload): New fn; does the real work for this case.
	* m68k.md (call, call_value): Fn address must be offsetable.

	* combine.c (try_distrib): Reject strange cases such as if
	result of PREV1 or PREV2 is used in a memory address in INSN.

	* vax.md (movsf): Generate movl instead of movf.

	* expr.c (expand_call): If have regparms, store all BLKmode args
	before all the other args.
	(store_one_arg): New subroutine broken out.

	* output-sparc.c (output_block_move): Complete rewrite.

	* sparc.md (cse'd multiply insn): Typo in asm-output code.

Tue Sep  6 20:05:48 1988  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* c-parse.y (yylex, etc.) Install Schmidt's perfect hash table.

	* gcc.c: handle extension `.cc'.

Mon Sep  5 12:09:58 1988  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* Version 1.27 released.

	* tm-i386.h (PREFERRED_RELOAD_REG): When reloading a QImode,
	make sure the class doesn't include %esi or %edi.
	* i386.md (movqi): Eliminate only use of the class `x',
	for which PREFERRED_RELOAD_REG cannot work.
	(In next version, get rid of INDEX_CLASS).
	Also use `*' to cause preferencing of Q_REGS.
	* tm-m68k.h (PREFERRED_RELOAD_REG): When reloading a QImode,
	use DATA_REGS.

	* reload.c (push_reloads): Braino in last change when IN == 0.

	* flow.c (mark_used_regs, mark_set_1): Bug if HARD_REGNO_NREGS
	returns 0 for VOIDmode reg (inside a CLOBBER).

	* c-parse.y (asm_operand): Handle `("REGNAME")' as an operand.
	* recog.c (decode_asm_operands, asm_noperands): Ignore any CLOBBERs.
	* regclass.c (reg_names): Variable now global.
	* stmt.c (expand_asm_operands): Generate CLOBBERS when appropriate.

	* stmt.c (assign_parms): Ignore parms that aren't PARM_DECLs.

	* varasm.c (assemble_variable): Do ASM_OUTPUT_EXTERNAL for functions.

	* c-parse.y (yylex): floatflag is now an enum.
	Detect invalid use of decimal points (> 1, or in exponent)
	and multiple exponent letters.

	* expr.c (expand_call): If inlining fails, set TREE_ADDRESSABLE.

Sun Sep  4 00:36:30 1988  Richard Stallman  (rms at corn-chex.ai.mit.edu)

	* c-decl.c (grokdeclarator): A const array becomes an array of consts.
	* c-typeck.c (build_array_ref): Array ref is const if array elts are.

	* output-sparc.c (output_move_double): Change criteria for ldd, std.
	(output_fp_move_double): New alternatives avoid ldd, std for
	stack refs that aren't aligned.
	(output_block_move): Use %g1 as temp reg.

	* sparc.md (floating point load from constant mem address):
	Use %g1 as temp reg.  Use output_move_double in DF case, not ldd.
	(movsf): Asm insn typo in FPreg to FPreg case.
	(floatsi{s,d}f2): Constraint changed.
	Also new special case pattern in front of it.
	(fix_truncdfsi2): Use output_move_double, not ldd.
	(addsi3, subsi3): Use %g1 as temp reg.
	(cse-optimized multiply): Constraint now `g'; output generalized.
	(andsi3, orsi3, xorsi3): Use %g1 as temp reg.

	* reload.c (find_reloads): Force int constants into memory just
	like floating ones, if memory is allowed and no regs are.

	* expr.c (expand_call): Don't treat structure_value_addr like a parm
	if the first parm would be passed in a register.
	Also, write comments for all local vars.

	* tm-386v.h (START_SPEC): Use {g,m}crt1.o, not {g,m}crt0.o.
	(LIB_SPEC): Always use crtn.o.

Sat Sep  3 13:05:50 1988  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* explow.c (plus_constant): Don't put CONST around lone SYMBOL_REF.

	* combine.c (subst): Simplify zero- or sign-extend of a constant.

	* expr.c (expand_expr): for REAL_CST, etc., check for invalid
	memory addresses and copy into registers.

	* integrate.c (expand_inline_function): If incoming struct value addr
	is in memory, map it like a memory parameter.

	* tm-*.h (FIRST_PARM_OFFSET): Now takes fndecl as argument.
	* integrate.c (expand_inline_function): Calc., use and save
	this fns value of FIRST_PARM_OFFSET.
	(copy_rtx_and_substitute): Use that value.
	* stmt.c (assign_parms): Likewise.

	* tm-sparc.h (FIRST_PARM_OFFSET): Make it 64 if value is BLKmode.
	(STRUCT_VALUE{,_INCOMING}): Put the value in 64(fp).

	* tm-sparc.h (PRINT_OPERAND_ADDRESS): Print offsets in decimal.
	Avoid excess `+' before a negative offset.

	* stmt.c (expand_function_start): Create the return value rtl
	before making the tail-recursion loop point.

	* combine.c (gen_lowpart_for_combine): Generate a paradoxical subreg
	rather than a wider memref.

	* reload.c (push_reload): Extend last change to case where OUT != 0.

Fri Sep  2 11:43:20 1988  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* stmt.c (fixup_var_refs): Adjust last_parm_insn when deleting insns.

	* expr.c (emit_push_insn): calling memcpy, bump TEMP 2 pointers worth.

Thu Sep  1 16:39:57 1988  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* reload1.c (choose_reload_targets): Test for canceled reload
	before looking inside reload_out.

	* jump.c (jump_optimize): Bug in last change.

	* m68k.md (return): Pattern disabled; confuses Aug 29 stmt.c change.
	* ns32k.md, i386.md: likewise.

	* emit-rtl.c (emit_note_force): New, like emit_note but always do it.
	* stmt.c (expand_function_end): Use emit_note_force.

Wed Aug 31 11:34:08 1988  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* reload1.c (alter_reg): New arg FROM_REG is hard reg that the pseudo
	was spilled from.  Works with spill_stack_slot.  Callers changed.
	Now all pseudos spilled from one hard reg get the same slot.
	(reload): Initialize new variable spill_stack_slot.

	* cse.c (cse_insn): Don't insert floating point mems if -ffloat-store.

	* reload.c (find_equiv_reg): Allow no equivs for volatile memrefs.
	Also none for floating mem refs if -ffloat-store.

	* output-sparc.c (output_mul_by_constant): make `p' and `log' unsigned.

Tue Aug 30 13:47:12 1988  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* jump.c (jump_optimize): Ignore other NOTEs while looking for
	a NOTE_INSN_FUNCTION_END.

	* integrate.c (save_for_inline): Flush extra call to max_reg_num.
	Don't copy NOTEs that are NOTE_INSN_FUNCTION_END.
	(copy_for_inline): Don't copy NOTEs that are NOTE_INSN_FUNCTION_END.

	* stmt.c (optimize_bit_field): If bit field is SRC, strip subregs
	from the DEST.

	* expmed.c (expand_mult): Special case for -1 as one operand.

Mon Aug 29 12:14:51 1988  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* stmt.c (expand_goto_internal, expand_fixup): New arg LAST_INSN.
	(expand_return): Pass that arg in tail-recursive case.
	(other callers): Pass 0 for that arg.
	(expand_null_return): Handle HAVE_return nonzero w/ FUNCTION_EPILOGUE.
	(expand_null_return_1): New fn, has guts of old expand_null_return.
	(expand_return): Call expand_null_return_1 to pass LAST_INSN arg.
	(expand_return): Handle HAVE_return nonzero w/ FUNCTION_EPILOGUE.
	(expand_function_{start,end}): Likewise.
	(expand_cleanups): Fix typo in recursive-list case.
	(move_cleanups_up): New fn.

	* expr.c (expand_call): Execute cleanups_of_this_call on exiting.
	Notice calls to __builtin_new (but don't do anything about them yet).

	* reload.c (push_reload): If reloading a (SUBREG (MEM ...) ...),
	really reload just the MEM in the MEM's own mode.

	* sparc.md: Define patterns for insns that set the ccs.
	Define set-flag insns.
	New patterns for indexed load, and for optimizing signed bit fields.
	(mulsi3, umulsi3): Give "r" constraint to operand 0.
	Peephole optimizers recognize some cases where delay insns are safe.
	Changed patterns for call and return insns as well.

	* output-sparc.c (single_insn_src_p): New fn.
	(output_delay_insn): New fn.

	* tm-sparc.h (TARGET_EPILOGUE): New target flag.
	(NOTICE_UPDATE_CC): New clause for funny PARALLEL with a REG in it.

	* m68k.md (movqi): Use *'s to ensure preferencing d-regs.

	* c-parse.y (datadef): If traditional, no warning about no specs.

Sun Aug 28 14:34:33 1988  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* tm-i386.h: Define PROMOTE_PROTOTYPES.
	POINTER_BOUNDARY now 32.

	* regclass.c (reg_scan): Compute `max_parallel', max # of sets and
	clobbers in any insn in this function.
	* global-alloc.c (global_conflicts): Use that, not MAX_SETS_PER_INSN.

	* stmt.c (expand_asm_operands): MAX_SETS_PER_INSN limits # output ops.

	* emit-rtl.c (init_emit_once): Make elt 2 of {f,d}const0_rtx nonzero.

	* c-decl.c (lang_decode_option): Handle -Wwrite-string.
	* c-parse.y (combine_strings): If that flag, make array of const char.

	* expr.c (expand_expr): for INTEGER_CST, always use immed_double_const;
	never do output_constant_def (it didn't work).
	Also heed WORDS_BIG_ENDIAN.

	* varasm.c (output_constant): Handle integer CONST_DOUBLEs.
	(output_constant_def): Abort if arg is an INTEGER_CST.

	* emit-rtl.c (gen_rtx): Don't return {f,d}const0_rtx for DImode.

Sat Aug 27 12:37:23 1988  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* c-decl.c (pushdecl): Global extern decls set TREE_PUBLIC
	like local ones.

	* integrate.c (expand_inline_function): Handle parms that were
	passed in registers but whose homes are on the stack.

	* varasm.c (force_const_mem): Output ints according to spec'd mode.
	({record,compare}_constant_rtx,const_hash_rtx,decode_rtx_const):
	Take mode as argument; pass it along.

	* c-parse.y (read_escape): No warning for `\{' or `\['.

Fri Aug 26 12:23:07 1988  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* stmt.c (fixup_memory_subreg): Typo calculating big-endian adjust.

	* vax.md (call_value): Handle >255 args as in `call'.

Thu Aug 25 16:00:51 1988  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* jump.c (delete_jump): Don't delete the cc-setter if it has autoinc.

Wed Aug 24 16:33:37 1988  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* expr.c (expand_expr): For sun with a COND_EXPR, use SUBTARGET
	if validate_subtarget says ok.

	* tree.c (build_index_type): make_index_type moved here and renamed.

	* combine.c (move_deaths_2): New function.
	(try_distrib): Use that, not move_deaths.

	* tm-sparc.h (SHIFT_COUNT_TRUNCATED, STORE_FLAG_VALUE): Define them.

	* tm-sparc.h: FUNCTION_{PRO,EPI}LOGUE: Save room for ins and
	locals to spill to the frame if any ins *or* locals are live.

	* tm-sparc.h (NOTICE_UPDATE_CC): Delete the clause that always
	cleared the cc's for unrecognized insns.

	* reload1.c (reload_as_needed): Don't try to use a spill-reg
	in a basic block that wasn't spilled: ignore optional reloads.

Tue Aug 23 09:45:05 1988  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* output-sparc.c (output_scc_insn): New function.

	* expr.c (expand_builtin, alloca): Round result of alloca
	up to a multiple of STACK_BYTES.

	* toplev.c (compile_file): Default main_input_filename is cc1 input.

	* tm-i386.h (FUNCTION_BOUNDARY): 32 avoids extra prefetch.

	* i386.md (movdi, movdf): Add `&' where needed in constraints.

Mon Aug 22 11:57:51 1988  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* symout.c (symout_finish): Allocate typevector after the symout_types.

Sun Aug 21 16:10:54 1988  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* tm-3b1.h (ASM_FORMAT_PRIVATE_NAME): Use a `_' as well as `%'.

	* expr.c (expand_expr): Typo setting MODE for MAX_EXPR.

	* Makefile (stage*): If ln fails, copy gnulib to stage*.
	(realclean): Do `clean' and then some.
	(install): new var USER_H specifies headers to copy.

	* c-typeck.c (build_binary_op_nodefault): LT_EXPR, etc.
	on ptr vs int failed to set result_type.
	(build_conditional_expr): Don't replace nonzero int
	with null_pointer_node.

	* combine.c (remove_links, try_distrib): New fns.
	(subst): New simplifications for ZERO_EXTEND, SIGN_EXTEND.
	(combine_instructions): Call try_distrib.
	(FAKE_EXTEND_SAFE_P): Allow SUBREGs.

	* m68k.md (non-FPA pattern for floatsisf2): Typo, had DF for SF.

Sat Aug 20 12:04:37 1988  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* integrate.c (copy_address): Variant of copy_rtx_and_substitute.
	(copy_rtx_and_substitute): Use copy_address for MEM address that
	doesn't satisfy memory_address_p.

	* reload.c (find_reloads): If force_reload set, don't set WIN
	for a MEM even if `m', `o' or `g' in constraint.

	* i386.md (expendqihi2): Typo in asm template.

	* toplev.c (rest_of_compilation): Call clear_const_double_mem.
	* varasm.c (init_const_rtx_hash_table): Don't call it here.
	(immed_real_const): Don't record the rtx in the REAL_CST node.
	(force_const_double_mem, clear_const_double_mem): Use cc0_rtx, not 0,
	as flag for a CONST_DOUBLE not on the chain.

	* cccp.c (handle_directive): If traditional, do scan strings
	but accept unterminated ones.
	(collect_expansion): -traditional: Don't recognize comments in strings.
	Stringify arguments that appear within strings.
	(skip_quoted_string): -traditional: Always exit at newline.
	(macroexpand): -traditional: Don't put `"'s around stringified arg.
	(macarg): Set stringified_length accordingly.

	* c-decl.c (duplicate_decls): Avoid error redeclaring fcn after
	implicit decl if -traditional.

	* toplev.c (announce_function, report_error_function):
	Change communication logic between these fcns.

	* c-decl.c (lang_decode_options): Handle -Wall here.
	* toplev.c (main): not here.

	* tm-bsd386.h: Don't include tm-i386.h--be like tm-att386.h

Fri Aug 19 11:08:36 1988  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* config-sun4.h: If sparc, include config-sparc.h.
	Never include alloca.h.

	* tm-m68k.h (TARGET_SWITCHES): Define `-mc68020', `-mc68000'.

	* c-decl.c (init_decl_processing): If traditional, use signed sizetype.

	* gcc.c (main): Use stderr for printing version.

Thu Aug 18 14:42:36 1988  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* Version 1.26 released.

	* m68k.md (movsi): Constraint change for fpa regs.

	* reload1.c (choose_reload_targets): Clear reg_reloaded_contents
	for all regs of a multi-reg group.

	* reload.c (find_equiv_reg): HARD_REGNO_NREGS wants mode, not size.
	Check properly for overlap against multiword reload regs.

Tue Aug 16 14:54:18 1988  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* varasm.c, expr.c (immed_double_const): immed_real_const_2 renamed.

	* tm-i386.h (SFVALUE): Should be `double'.
	* tm-i386v.h (SFVALUE): Don't override it.

	* tm-i386.h (ASM_OUTPUT_ASCII): Don't define it.
	* tm-att386.h: Definition moved here.

	* tm-bsd386.h: New file, for Sequent.
	* tm-seq386.h: New file, for Sequent.
	* config-i386.h: New file, for Sequent.

	* expr.c (push_block): Take account of STACK_POINTER_OFFSET.
	(expand_call): Therefore need not do so here.

	* optabs.c (expand_fix): Typo if going via DImode.

	* reload1.c (choose_reload_targets): Don't * reload_reg_rtx if 0.

Mon Aug 15 01:11:49 1988  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* integrate.c (copy_for_inline): Don't try copying 0-length vector.
	(copy_rtx_and_substitute): Likewise.

	* m68k.md (andsi3): use clrw instead of andw #0.

	* print-tree.c (walk): Don't omit permanent nodes reach from temps.

	* m68k.md (zero_extend...): Reinstall the old zero-extend insns
	without names, so they can help the combiner.

	* expr.c (expand_expr): Don't use hard regs as subtargets.
	* combine.c (FAKE_EXTEND_SAFE_P): Always consider MEMs safe.
	* reload.c (find_reloads): For (SUBREG (MEM ...)) set force_reload.

	* c-parse.y (redescape): Don't warn for `\('.

	* reload.c (find_reloads_address): #if was backwards.

Sun Aug 14 16:52:22 1988  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* c-typeck.c (shorten_compare): Change switch to chain of ifs.

	* tm-ns32k.h (PRINT_OPERAND): CONST_DOUBLE contains a double
	even if it's SFmode.
	(FUNCTION_PROLOGUE): If MAIN_FUNCTION_PROLOGUE defined, run it.

	* cccp.c (file_buf): Rename field `free' to `free_ptr'.

	* Makefile (ALLOCA, MALLOC, LIBDEPS): New variables for easier
	customization.  Executables depend on LIBDEPS instead of OBSTACK1.
	(cccp): Deps and libs now work like the others.

	* output-i386.c (notice_update_cc): Rewritten for clarity.

	* tm-i386.h (OUTPUT_JUMP): If CC_IN_OVERFLOW, abort.

	* recog.c (push_operand): Test for stack_pointer_rtx.

	* integrate.c (copy_rtx_and_substitute): Don't submit push-operands
	to `memory_address'--it would lose on machines where pushing is
	a special insn, not an addressing mode.

	* output-i386.c	(top_dead_p): No more redundancy--that didn't work.
	Now one method if optimized, one for call_insns if noopt, one for
	other insns if noopt.
	(call_top_dead_p): fp_top_dead_p renamed
	and only the call-insn clause remains.

	* i386.md (cmpsf, cmpdf): Output was backwards.
	(", tstsf, tstdf): Set CC_IN_80387.
	(incb pattern): Restrict allowable registers.
	(movsf, movdf): Call top_dead_p only when absolutely necessary.
	(call_value): Use top_dead_p, not subroutine.

Sat Aug 13 15:19:23 1988  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* stupid.c (stupid_life_analysis): If only 1 reg class,
	call stupid_find_reg only once.

	* stmt.c (expand_function_start):
	Clear current_function_pretend_args_size.

	* expr.c (store_constructor): If target is hard reg, go via a pseudo.

	* varasm.c (real_constant_chain): Now static in this file.
	(force_const_double_mem): Put R on chain if not already on.
	(clear_const_double_mem): Set XEXP (,2) to 0;
	also clear real_constant_chain and the chain links.
	* emit-rtl.c (init_emit_once): Put 0 in XEXP (,2) of {d,f}const0_rtx.
	* cse.c (canon_hash): For CONST_DOUBLE, ignore elts other than 0,1.

Fri Aug 12 11:48:38 1988  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* reload1.c (order_regs_for_reload): Handle REG_ALLOC_ORDER more spots.

	* global-alloc.c (find_reg): error handling REG_ALLOC_ORDER;
	also error skipping regs known to be hopeless.
	* local-alloc.c (find_free_reg): error skipping hopeless regs.
	* stupid.c (stupid_find_reg): likewise.

	* local-alloc.c (qty_compare_1): typo, had q1 for q2.

	* expr.c (expand_expr): Don't use supplied target when optimizing
	arithmetic using a comparison or conditional; that target could be
	needed for the result of the comparison.

	* reload1.c (reload): Don't set reg_equiv_constant for hard regs.

	* stupid.c (stupid_life_analysis): Ignore reg R if regno_reg_rtx[R]==0.

	* symout.c (symout_finish): Use perm. links in permanent_fwd_refs.

	* i386.md (movhi, movqi): Check no_labels_between_p.

Thu Aug 11 10:44:46 1988  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* c-parse.y (yylex): Out-of-range float is just a warning.

	* tm-gnx-v3.h: New file for Genix.
	* ns32k.md (movsi, call, call_value): GNX_V3 conditionals.
	* tm-ns32k.h (PRINT_OPERAND_ADDRESS): Changes for Genix.

	* ns32k.md (insv patterns): Operand 0 is read-write.

	* i386.md (tstsf, tstdf): Don't push the arg if already in st(0).

	* varasm.c (output_constant_def): If EXP is permanent, the rtl is too.

	* tm-*.h (ASM_OUTPUT_{LOCAL,COMMON}): New 4th arg, rounded size
	vs unrounded size.
	* varasm.c (assemble_variable): Pass new arg.
	* symout.c (symout_init): Likewise.

	* cccp.c (rescan): Don't let char const cross lines.
	(skip_quoted_string, macarg1, discard_comments): Likewise.

	* expr.c (expand_expr, VAR_DECL case): handle flag_force_addr.

	* tm-i386v.h (TAREGT_DEFAULT): Assume 80387.
	* config-i386v.h (alloca): Use __builtin_alloca under GNU C.

Wed Aug 10 11:23:06 1988  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* reload.c (find_reloads): Alternative loses
	if it has no regs for a reg operand.

	* tm-sun3.h (STARTFILE_SPEC): Define, for fpa's sake.
	* tm-m68k.h: New hard regs, reg classes, reg class letters,
	target flag and switch, operand syntax and CC handling for fpa.
	* m68k.md: Add fpa insn patterns.
	* output-m68k.c (standard_SunFPA_constant_p): New fn.
	(output_move_const_{single,double}): Handle fpa regs.
	(singlemove_string): Handle fpa regs.

	* stmt.c (fixup_memory_subreg): Result had wrong mode.

	* ns32k.md (insv patterns): Adjust bit-number along with address.

	* sparc.md (negdf2, absdf2): Order of the words was backwards.

	* reload1.c (new_spill_reg): End confusion about meaning of 1st arg.
	Arg counted_for_nongroups had wrong type.

	* tm-m68k.h (FUNCTION_{PRO,EPI}LOGUE): Round frame size to word bdry.

Tue Aug  9 07:53:59 1988  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* tm-i386.h (ASM_OUTPUT_ASCII): Don't lose the sign bit.

	* tm-i386v.h (STARTFILE_SPEC, LIB_SPEC): Use crt1.o, crtn.o.

	* stmt.c (fixup_var_refs_1): fixup all memory subregs.

	* reload1.c (choose_reload_targets): Don't strip paradoxical
	subregs from values to be reloaded.

	* cccp.c: Comment out text after #endif.

	* c-parse.y (init): Allow empty braces as init; warn if pedantic.

	* c-decl.c: Move C-specific options from toplev.c.
	* c-tree.h: Move their externs from flags.h.
	* c-decl.c (lang_decode_option): New fn called by `main'.
	* toplev.c (sorry, really_sorry): New error reporting fns.
	* c-decl.c (language_string): New var, name of this language.

	* c-parse.y: Don't include flags.h.
	* dbxout.c: Do include it.

	* dbxout.c (dbxout_type): Handle function fields and static fields
	and basetypes.  Handle METHOD_TYPE and REFERENCE_TYPE.
	Abort on unexpected tree code.
	(dbxout_args): New fn to output prototype arg types.
	(everywhere): Use IDENTIFIER_LENGTH instead of strlen.
	(dbxout_type_name): Cleanup; avoid strlen.

	* local-alloc.c (reg_is_set): Don't call {post_,}mark_life for pseudos.

	* tree.h (TYPE_BASECLASSES): New field in type nodes.

	* ns32k.md (insv patterns): Was adjusting the address wrong.

	* c-decl.c (grokdeclarator): Just a warning for inline varargs fn.

Mon Aug  8 08:16:46 1988  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* varasm.c (immed_real_const_2): Guts of creating a CONST_DOUBLE.
	* expr.c (expand_expr): Use that for 64-bit int constants.

	* loop.c (invariant_p): Don't check x->unchanging; it's not safe.

	* c-typeck.c (build_indirect_ref): Handle flag_volatile here
	so that it propagates to component_refs.
	* expr.c (expand_expr): No need to handle it here.

	* integrate.c (save_for_inline, expand_inline_function):
	Set up insn_map to record mapping of old uids to copied insns.
	(copy_for_inline, copy_rtx_and_substitute): Map 'u' refs via insn_map.

	* emit-rtl (emit_label, emit_barrier): Return what was emitted.

	* sdbout.c (sdbout_filename): Split off from sdbout_init.
	* tm-encore.h, tm-3b1.h, tm-vaxv.h, tm-att386.h (ASM_FILE_START):
	Call sdbout_filename.

	* toplev.c: Better messages for invalid options.

	* tm-m68k.h (PRINT_OPERAND_ADDRESS): Handle labelref+basereg.

	* tm-3b1.h (PUT_SDB_DIM): Override sdbout's definition.
	(ASM_FORMAT_PRIVATE_NAME): Override tm-hp...s definition.
	(PUT_SDB_PLAIN_DEF): Prepend `~' to specified name.
	(SDB_GENERATE_FAKE): Prepend `~'.

	* gcc.c: Include config.h before obstack.h.

Sun Aug  7 11:17:56 1988  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* stor-layout.c (layout_decl): Do nothing with CONST_DECL.
	Treat FRIEND_DECLs like variables.
	(layout_record): Handle VAR_DECLs and FUNCTION_DECLs in the fieldlist.
	Handle basetypes (almost like fields).
	(layout_type): Handle REFERENCE_TYPE and METHOD_TYPE.

	* tree.c (temp_tree_cons): New fn.
	(array_type_nelts, simple_cst_equal): New fns.
	(lvalue_p): CALL_EXPR is an lvalue if it returns REFERENCE_TYPE.
	() Manage TYPE_REFERENCE_TO.
	(TYPE_HASH_SIZE): Bigger.
	(type_list_equal): Compare the TREE_PURPOSE fields.
	(build_reference_type, build_method_type): New fns.

	* stmt.c (block_stack): Add field `cleanups' to each element.
	(expand_{start,end}_bindings, expand_decl): Update that field.
	(stack_block_stack): Now includes blocks that have cleanups.
	(goto_fixup_chain): Add field `cleanup_list_list'.
	(expand_goto_internal): Execute cleanups for blocks being exited.
	(expand_fixup): Make a fixup if any block has cleanups.
	(fixup_gotos): New args CLEANUPS and DONT_JUMP_IN.
	Execute cleanups for blocks being exited, or add to cleanup_list_list.
	(expand_end_bindings): New arg DONT_JUMP_IN.  Execute any cleanups.
	(expand_decl): New arg CLEANUP.
	(expand_cleanups, fixup_cleanups): New functions.
	* c-decl.c: Calls to expand_decl pass new arg.
	* c-parse.y: Calls to expand_end_bindings pass new arg.

	* stmt.c (expand_return): Handle INIT_EXPR, or bare RESULT_DECL.

	* stmt.c (case_stack): Add field `has_default' to each element.
	(pushcase,expand_end_case): Maintain and use that field.

	* stmt.c (pushcase): Handle RANGE_EXPR cases.
	(pushcase_range): Create RANGE_EXPR cases.

	* final.c (final): Always pass 3 args to ASM_OUTPUT_CASE_END.
	* tm-3b1.h: Delete offending spaces.

Fri Aug  5 16:17:16 1988  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* integrate.c (copy_rtx_and_substitute): Don't make fp+reg+const
	without an intermediate temporary reg.

	* print-tree.c (dump): Don't print an identifier's chain.

	* toplev.c (compile_file): Treat `.i' suffix like `.co'.

	* gcc.c: New config macro CC1_SPEC: extra switches for cc1.
	Make a new spec for `.i' files.

	* c-decl.c (pushdecl, finish_decl): Delete duplicate tests.

	* varargs.h: Maybe include va-sparc.h or va-spur.h.
	* va-sparc.h: New file.
	* va-spur.h: renamed file.

	* tree.h ({TYPE,DECL}_LANG_SPECIFIC): Types and decls can point to
	language-specific structures containing other info.
	* print-tree.c (dump): Hooks for printing the language-specific
	data in types and decls.

Thu Aug  4 08:54:30 1988  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* tree.def: Add some tree codes for C++.

	* Rename files: parse.[yh] -> c-parse.[yh], decl.c -> c-decl.c,
	typecheck.c -> c-typeck.c.
	Part of tree.c split out to c-convert.c.

	* expr.c (push_block): No longer static.
	(expand_expr): Handle REFERENCE_EXPR and INIT_EXPR.
	(expand_call): Turn a METHOD_TYPE to a FUNCTION_TYPE.
	This is probably not all that is required.

	* parse.y (yylex): Use p->rid to check for `signed' and `inline'.

	* tm-sparc.h (ASM_OUTPUT_SOURCE_LINE): typo.

	* sparc.md: Add a pattern for andcc.
	(cmpsf): Clobber reg 32 in DFmode.
	(branches): There are no unsigned floating branches; abort.
	(bgt): Correct name of floating variant.
	(mov?i): Load small constants via mov.
	(movdf for constants): Use mov, not add, to move regs.
	(movsf, floatsi*, fix*): Simplify reg-to-reg-via-mem move generation.
	(trunc*): Use mov, not or, to move regs.
	(negsi2, one_cmplsi2): Avoid "neg" and "not" assembler syntax.
	(call...): Generate "call" insns; handle #-reg-parms value.
	* Define some peepholes for return insns.

	* tm-sparc.h (TARGET_SUN_ASM): New target flag.
	(TARGET_DEFAULT): Now 1.
	(FRAME_POINTER_REQUIRED): Now 1.
	(STARTING_FRAME_OFFSET): Now -16.
	(LEGITIMATE_CONSTANT_P): Only CONST_DOUBLEs fail.
	(FUNCTION_{PROLOGUE,EPILOGUE}): Rewritten.

	* output-sparc.c (small_int): Test for int that mov can load.
	(singlemove_string): Use mov, not add.
	(output_move_double): Changes for overlap and for use of ldd, std.
	(output_fp_move_double): Use ldd, std when safe.
	(make_f0_contain_0): Simplify.

	* integrate.c (expand_inline_function): Some special CALL_INSN
	handling no longer needed due to REG_FUNCTION_VALUE_P.

	* m68k.md (movqi): Constraints allow moving areg to areg.

Wed Aug  3 08:29:31 1988  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* Version 1.25 released.

	* integrate.c (expand_inline_function): Don't let MEM be inline_target.

Tue Aug  2 09:13:37 1988  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* integrate.c (INTEGRATE_THRESHOLD): New macro, default dfn here.
	(function_cannot_inline_p): Use it.

	* rtl.h (REG_FUNCTION_VALUE_P): New macro.
	* stmt.c (expand_function_start): Set that flag in the return reg.
	* integrate.c (expand_inline_function, copy_rtx_and_substitute):
	Test that flag to test for the return value.
	* expmed.c (expand_fixed_bit_field, expand_mult, expand_divmod): ditto.
	FUNCTION_VALUE_OUTGOING_REGNO_P no longer needed.

Mon Aug  1 02:46:08 1988  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* integrate.c (copy_rtx_and_substitute): If NO_FUNCTION_CSE,
	don't break out constant fcn addresses here.

	* expmed.c (expand_fixed_bit_field): Tests of FUNCTION_VALUE_REGNO_P
	were backwards.

Sun Jul 31 13:10:07 1988  Richard Stallman  (rms at frosted-flakes.ai.mit.edu)

	* recog.c (indirect_operand): New function.

	* output-i386.c (print_operand): define %*. eliminate %s.
	(fp_top_dead_p): In nonopt case, skip stack-adjusts while looking
	for the insn that uses the function value.

	* varasm.c (text_section, data_section): New functions.
	Replaced explicit printfs elsewhere with calls to them.
	* final.c (final_start_function): Use these fns.
	* sdbout.c (sdbout_one_type): Use text_section.
	* tm-att386.h (ASM_OUTPUT_LOCAL): Use data_section.

	* expr.c (prepare_call_address): Don't pass const via reg if no -O.

	* tm-sparc.h (FUNCTION_{PROLOGUE,EPILOGUE}) Round the size of saved
	registers.  Fix bug counting saved registers.

	* tm-sparc.h (ASM_OUTPUT_SOURCE_LINE): Define this macro.

	* tm-sparc.h (DEFAULT_SIGNED_CHAR): Now 1.

	* expr.c (expand_builtin, alloca case): Adding stack offset needs
	special code if TARGET is a MEM.

	* dbxout.c (dbxout_init): Define Ltext: after the reference to it.

	* tm-3b1.h (ASM_OUTPUT_CASE_LABEL): `short 0' triggers assembler bug;
	`short L%nn-L%nn' supposedly works.

Sat Jul 30 00:25:52 1988  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* sparc.md (floatsidf2): Minor change in output.
	(fix_trunc{sf,df}si2): Similar.

	* output-sparc.c (output_fp_move_double): Minor change in output.

	* stmt.c (assign_parms): Don't count stack space for struct value
	address if the function does not have one.

	* sdbout.c: Output .dim's and total size for arrays.
	Detect bit-fields properly.
	Changed handling of structure tags.

	* reload1.c (new_spill_reg): counted_for_nongroups is a new arg;
	store 1 in it if this reg is needed for max_nongroups.

	* reload1.c (choose_reload_targets): Allow inheritance of DFmode
	if it needs only one register.

	* reload1.c (choose_reload_targets): Delete the death-note from the
	store-insn of an inherited reload if PRESERVE_DEATH_INFO_REGNO_P.

	* reload.c (push_reload): Crash if PREFERRED_RELOAD_CLASS is NO_REGS.
	(find_reloads): Smarter handling of forcing CONST_DOUBLE into mem.
	Check PREFERRED_RELOAD_CLASS & do this if it says NO_REGS.

	* reload.c (subst_indexed_address): Handle case with 2 regs
	and no constant term.

	* local-alloc.c: New variable qty_n_refs, set from reg_n_refs
	and tested in qty_compare{,_1}.
	(combine_regs): Update qty_n_refs.
	Update qty_preferred_or_nothing more intelligently.

	* regclass.c (regclass, reg_class_record, record_address_regs):
	Count the number of refs to each reg along with the costs,
	and use it when computing the preferred_or_nothing flag.
	(Can't use reg_n_refs since that is weighted by loop depth).

	* global-alloc.c (global_alloc): Enable test of OVERLAPPING_REGNO_P
	for setting no_global_alloc_regs.

	* expr.c (prepare_call_address): Use force_reg, so it gets a REG_EQUIV.

	* optabs.c (can_{fix,float}_p): Return enum insn_code, not a function.
	(init_{fix,float}_tab): Store enum insn_code's in fixtab and floattab.
	(expand_{fix,float}): Change calls to can_{fix,float}_p.
	Also, use emit_unop_insn to make the actual insns.

Fri Jul 29 02:42:40 1988  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* cccp.c (initialize_char_syntax): If dollars_in_identifiers is 0,
	set entries for `$' to 0.
	Set entries to 1 rather than incrementing them.

Tue Jul 26 11:14:22 1988  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* varasm.c (assemble_variable): Make SDB output only if top-level.

	* local-alloc.c (reg_is_set): Arg to mark_life is regno, not qty.

	* output-ns32k.c (print_operand_address): New flag SEQUENT_BASE_REGS
	* tm-sequent.h: Define that flag.

	* Makefile: add some missing deps.

	* tm-encore.h (ASM_FILE_START): Changed to do nothing.

	* sdbout.c (sdbout_init): Fix two dumb errors.

	* sdbout.c (sdbout_end_epilogue): No longer takes arg.
	Examine current_function_decl here, not in caller.
	* final.c: Call changed.

Mon Jul 25 01:32:54 1988  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* stor-layout.c (layout_record): Handle PCC_BITFIELD_TYPE_MATTERS.

	* tm-3b1.h (__PTR_TO_INT, __INT_TO_PTR): Define these, to alter
	parts of obstack.h.

Sun Jul 24 17:56:53 1988  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* Padding for an arg may now go below or above it; new macro
	FUNCTION_ARG_PADDING can now choose which, or can inhibit padding.
	This makes for compatibility with PCC.
	* expr.h: Default definition of that macro.
	* expr.c (emit_push_insn): Put the padding above or below.
	(expand_call): Don't count the padding if none wanted.
	* stmt.c (assign_parms): Adjust parm stack addr if padded below.
	Don't count the padding if none wanted.
	* tm-3b1.h: Define FUNCTION_ARG_PADDING: no padding for > 4 bytes.

	* final.c (alter_subreg): Now returns the altered value
	(but may still modify the original structure).
	Handles (SUBREG:DI (CONST_DOUBLE:DF...)) by returning the CONST_DOUBLE.

	* m68k.md (DImode push): now allows `F'.
	* ns32k.md (movdi): now allows `F'.

	* tm-m68k.h (FIX_FRAME_POINTER_ADDRESS):
	Handle indexed references to frame pointer.
	* tm-i386.h, tm-m88k.h, tm-sparc.h: Likewise.

	* cse.c (predecide_loop_entry): Must search for the loop top label.

Sat Jul 23 08:53:01 1988  Richard Stallman  (rms at frosted-flakes.ai.mit.edu)

	* parse.y (yylex): typo in wide strings.

	* tm-vaxv.h, config-vaxv.h: New files for sysV on vax.

	* config-sun4.h: If sparc and not compiling with GCC, include alloca.h.

Fri Jul 22 02:38:02 1988  Richard Stallman  (rms at frosted-flakes.ai.mit.edu)

	* tree.c (build_real_from_int_cst): CHECK_FLOAT_VALUE at proper place.

	* tm-hp9k320.h ({TEXT,DATA}_SECTION_ASM_OP): Should not include a tab.
	* final.c (final_start_function): Don't output a tab before those.

	* sdbout.c (PUT_SDB_EPILOGUE_END): New macro.
	* sdbout.c (sdbout_end_epilogue): New function to output the C_EFCN.
	Like former sdbout_mark_end_function.  Uses that macro.
	* final.c (final_end_function): Call that function.
	* tm-3b1.h: Override PUT_SDB_EPILOGUE_END like the other PUT_SDB...

	* tm-3b1.h (PRINT_OPERAND_ADDRESS, ASM_OUTPUT_INTERNAL_LABEL,
	ASM_OUTPUT_CASE_{LABEL,END}): Put a % in names of internal labels.
	(ASM_GENERATE_INTERNAL_LABEL, ASM_OUTPUT_ADDR_{VEC,DIFF}_ELT):
	New macros, for same reason.
	(FUNCTION_PROFILER): New macro, for % and also to put addr in a0.

	* final.c (output_source_line): For fcn's first line, use lineno 1.
	* sdbout.c (sdbout_end_function): Clear sdb_begin_function_line
	so can recognize first line of next function.

	* sdbout.c (sdbout_init): Output the .file pseudo here.
	* tm-3b1.h, tm-att386.h (ASM_FILE_START): Don't do it here.

	* sdbout.c (PUT_SDB_VAL): Output leading tab, like the other macros.
	* tm-3b1.h (PUT_SDB_VAL): Likewise.

	* regclass.c (regclass): Cast enums to int, not char.
	* varasm.c (record_constant): Likewise.  Avoids 3b1 PCC bug.

	* decl.c (pushdecl): Better choice of error message for extern/static.

	* emit-rtl.c: Do look for STRUCT_VALUE_INCOMING_REGNUM.

Thu Jul 21 02:13:03 1988  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* cse.c (canon_hash): CONST_INT case failed to add to prev. value
	of HASH; was inconsistent with cse_insn mem address hashing.

	* m68k.md (divide insns): Alternate 3B1 syntax for `swap' insn.

Wed Jul 20 18:27:10 1988  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* m68k.md: In shift-by-24 patterns, rejects autoincrement memrefs
	since they are mode-dependent.

Tue Jul 19 13:01:38 1988  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* parse.y (check_newline): Handle #ident by writing .ident to output.
	* cccp.c: Don't handle #ident; delete IDENT_DIRECTIVE conditionals.

	* stmt.c (expand_end_case): In compares, put constant arg second.

	* jump.c (jump_optimize): Delete conditional jump if followed by
	an unconditional jump to the same place.

Mon Jul 18 17:49:13 1988  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* emit-rtl.c (init_emit_once): Now STRUCT_VALUE_INCOMING is an
	expression for an rtx.  It can make a MEM.  Likewise STRUCT_VALUE
	for outgoing structure value addresses.

	* stmt.c (assign_parms): If incoming struct addr on stack, leave room.
	* expr.c (expand_call): If outgoing addr on stack, push it like an arg.

	* PROMOTE_PROTOTYPES means if proto says `char', pass `int'.
	* decl.c (get_parm_info): Alter DECL_ARG_TYPE to do this.
	* typecheck.c (actualparameterlist): Convert value for this.
	* tm-m68k.h: Define PROMOTE_PROTOTYPES.

Sun Jul 17 14:25:47 1988  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* jump.c (jump_optimize): peephole can delete insns following INSN.
	Set NEXT after peephole.

	* decl.c (finish_decl): Always restart perm alloc if global.

	* stmt.c (assign_parms): When a float is passed as double, store the
	float in low-numbered word.  Avoids trouble with parm_map in integrate.

	* vax.md: New pattern for decrement and compare against -1.

Sat Jul 16 14:18:00 1988  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* decl.c (pushdecl): Ignore previous decl if it's really an error_mark.

	* stmt.c (expand_start_case): Make sure case_stmt.start is a NOTE.

	* combine.c (subst): In the simplification for
	(set (zero_extract ...) (and/or/xor (zero_extract ...) const)),
	require same memory location in both extracts.

	* *386*: New files.

	* cse.c (fold_rtx): Save time in memory address if it didn't change.
	Don't replace cheaper expression with coslier one.
	(cse_insn): Reenable generation of REG_WAS_0.  It wasn't obsolete.

	* cccp.c: `ident' has 5 letters.

	* final.c (output_source_line): SDB can't handle multiple source
	files, so ignore line-NOTEs for other files.

	* hard-reg-set.h: New var reg_class_size (# regs in the class).
	* regclass.c (init_reg_class): Set it up.

	* reload.c (find_reloads): If an earlyclobber is in a class of size 1
	as an output, reload it as input instead of as output.

	* reload1.c (choose_reload_targets): Improve elimimation of spilled
	pseudos made dead by reloading: if pseudo is limited to one block
	and that block contains just stores, delete all the stores.

	* reload1.c (choose_reload_targets): reg_has_output_reload is now
	static and survives through reload pass.
	(forget_old_reloads): Don't cancel data on spilled regs of output
	reloads of the insn just made.

	* sdbout.c (sdbout_one_type): Go to .text before defining a type.
	(sdbout_block): Test against do_block was backwards.

	* stmt.c (expand_end_function): New args to make a NOTE for last line.
	* decl.c (finish_function): Pass the args.

	* rtl.c (no_labels_between): New function.
	* vax.md (movsi): Call it.

	* print-tree.c (dump): Don't follow chain of a decl.

	* rtl.c (volatile_refs_p): Moved from flow.c.

Fri Jul 15 13:36:20 1988  Richard Stallman  (rms at frosted-flakes.ai.mit.edu)

	* sdbout.c (PUT_SDB...): Allow config to override any of them.
	* sdbout.c (PUT_SDB_{BLOCK,FUNCTION}_{START,END}): New macros.
	* tm-3b1.h: Override all of them.
	* sdbout.c (SDB_GENERATE_FAKE): New macro to create dummy tag name.
	(gen_fake_label): Use SDB_GENERATE_FAKE.
	* tm-3b1.h: Override its defn.

	* sdbout.c (sdbout_mark_function_end): Unused; deleted.

	* tm-3b1.h: Define SDB_DEBUGGING_INFO.

Thu Jul 14 01:55:15 1988  Richard Stallman  (rms at frosted-flakes.ai.mit.edu)

	* config-sunv4.h: New file for Sunos version 4.

	* tm-sun3.h (CPP_SPEC): Define mc68010 or mc68020, depending.

Tue Jul 12 15:31:30 1988  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* stmt.c (expand_fixup, expand_goto_internal): New functions to
	emit a jump that can restore the stack level, even without tree node.
	(expand_null_return, expand_exit_loop, etc.): Use expand_goto_internal.
	(expand_end_function): Do fixup_gotos after emitting return_label.

	* cse.c (predecide_loop_entry): Avoid using JUMP_LABEL.
	* flow.c (find_basic_blocks): Avoid using JUMP_LABEL.

	* flow.c (insn_dead_p): Delete special case for stack-adjust insns.
	(life_analysis): Mark those insns with INSN_VOLATILE here.
	(mark_used_regs): a SET of a hard reg, in a volatile insn,
	always makes its source live.

Mon Jul 11 10:46:26 1988  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* ns32k.md (floatqidf2): Commented out since assemblers warn about it.

Sun Jul 10 11:49:23 1988  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* decl.c (xref_tag): Default the TYPE_MODE of enum xrefs
	to avoid making MEM and REG with VOIDmode.

	* vax.md (call): If > 255 args, pop them explicitly.

Sat Jul  9 10:53:47 1988  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* symout.c (symout_types): Fix up forward refs to previously
	undefined structure types.
	(filter_undefined_types): New function.
	(symout_finish, symout_function_end): Output any never-defined structs.
	* toplev.c (rest_of_compilation): call symout_function_end.

	* parse.y: Don't declare errno if it's a macro.

	* tm-hp9k320 (FUNCTION_PROFILER): Pass ptr in a0, not d0.

	* typecheck.c (truthvalue_conversion): Flush unnec recursive call.
	(build_cond_expr): Bug testing zeroness of IFEXP with TREE_LITERAL.

	* cse.c (fold_cc0): Constants not CONST_INT are certainly nonzero.
	* fold-const.c (fold): ADDR_EXPR is not equal to zero.

	* cccp.c (macroexpand): Disable the macro even if traditional.
	(rescan): Error if use a disabled macro.

	* combine.c (try_combine): Don't substitute a different reg into
	an auto-increment.  Handle multiple REG_INC notes in I1 or I2.

	* decl.c (implicitly_declare): Don't reuse old implicit decl.

	* varasm.c (assemble_variable): Avoid syntax err if no DBX and no SDB.
	* final.c (output_source_line): likewise.

	* fold-const.c (fold): PLUS/MINUS_EXPR: in case of cancellation,
	convert result to original type.

	* regclass.c (reg_class_record): Changed arguments include address
	of entire vector of constraints.

Fri Jul  8 07:59:00 1988  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* reload1.c (reload): Find groups of more than 2 registers.

Thu Jul  7 08:33:07 1988  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* expr.c (emit_push_insn): Typo adjusting arg for bcopy
	if not STACK_GROWS_DOWNWARD.

	* gnulib.c (_cmpsf2): Value is int, not SFVALUE.

Wed Jul  6 11:53:46 1988  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* tm-encore.h, tm-3b1.h: Replace ASM_FILE_START; output a .file.

	* *m88*: New files for Motorola 88000.  They don't really work.

Tue Jul  5 14:40:03 1988  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* local-alloc.c (combine_regs): Don't tie a reg to itself.

	* finxincludes: Make a variable LIB for the target dir.

	* m68k.md (movhi, addhi3, addsi3): Micro-optimize choice of asm insns.

	* expr.c (expand_expr): Use new macros NO_DEFER_POP, OK_DEFER_POP
	in several places, to keep stack predictable.

Mon Jul  4 09:50:18 1988  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* integrate.c (function_cannot_inline_p): Increase threshold size.

	* flags.h (use_gdb_dbx_extensions): New variable.
	* toplev.c:

	* sdbout.c (PUT_SDB_TAG): Delete duplicate defn.

	* expr.c (expand_expr): For FIX_TRUNC_EXPR to unsigned short/char,
	REALLY go via signed int.

	* loop.c (may_trap_p): Was detecting floating arithmetic incorrectly.

	* tm-news800.h (CPP_PREDEFINES): Add sony and sony_news.

	* parse.y (check_newline): Avoid infinite loop at eof.

Sat Jul  2 10:35:17 1988  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* Version 1.24 released.

	* stmt.c (expand_asm_operands): Produce proper no-outputs insn.
	* recog.c (asm_noperands): Detect no-outputs insns.
	(decode_asm_operands): Likewise.
	* reload.c (find_reloads): Likewise (add case ASM_OPERANDS:).

	* local-alloc.c (block_alloc): Tests of qty_compare were backwards.

	* flow.c (life_analysis): Turn off code that finds regs live at
	function start and marks them not local to any basic block.

	* cse.c (insert_regs): Fix typo (UNITS_PER_WORD).

	* cccp.c: Define max.

	* expr.c (expand_expr): Put each SAVE_EXPR's reg on save_expr_regs,
	if not optimizing.
	* stmt.c (expand_function_end): Mark each of those regs live
	at the end and also retroactively at the beginning of the function.

	* output-vax.c (print_operand_address): New function from old macro.
	* tm-vax.h (PRINT_OPERAND_ADDRESS): Call that function.

	* config-vms.h: If not under GNU C, define X_OK, etc.

	* expr.c (move_by_pieces_1): Use * to call GENFUN.
	(expand_expr): Compare DECL_FUNCTION_CODE against an enum const.
	(preexpand_calls): Likewise.
	* genrecog.c (write_tree): Likewise.
	* final.c (final): Use * to call the output function.
	* reload.c (push_reload): Rename `noshare' to `dont_share'.

	* genoutput.c (output_epilogue): Put more newlines in insn_outfun.
	* genemit (gen_exp): Put in more newlines.

Fri Jul  1 00:23:57 1988  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* global-alloc.c (allocno_compare): Avoid comparisons of floats
	since that is sensitive to roundoff errors.

Thu Jun 30 09:25:40 1988  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* sdbout.c (PUT_SDB_{DEF,TAG}): Use ASM_OUTPUT_LABELREF.
	(PUT_SDB_PLAIN_DEF): New name for old defn of PUT_SDB_DEF
	(sdbout_one_type): Use PUT_SDB_PLAIN_DEF for `.eos'.

	* tree.c (allocation_temporary_p): New fcn.
	(all_types_permanent): New variable.
	(make_node): If that's set, make each ...TYPE node permanent.
	* decl.c (grokdeclarator): If traditional, make decl data permanent.
	(finish_decl): Make the rtl permanent too.
	* stor-layout.c (layout_type): If type is permanent,
	make its layout data permanent too.

	* cccp.c: Choose C++ or C at run time via var `cplusplus'.
	Separate cplusplus_include_default from include_default.
	Get GNU-specific include directory names from macros
	GCC_INCLUDE_DIR and GPLUSPLUS_INCLUDE_DIR.
	(main): Initialize based on CPLUSPLUS; `-+' sets it.
	* Makefile: Set *_INCLUDE_DIR based on $(libdir).

Tue Jun 28 09:25:49 1988  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* tree.c (copy_node): Round LENGTH up to multiple of sizeof (int).

	* expr.c (emit_push_insn): Avoid using PUSH_ROUNDING if not defined.

	* sparc.md (floatsisf2): Insert missing brace.
	(mulsi3): Replace reg_o0_rtx, reg_o1_rtx.

	* tm-sparc.h: Define DBX_DEBUGGING_INFO.

	* parse.y (yylex): If traditional, no error for out-of-range float.

	* Makefile: Comment saying how to compile on an Apollo.

	* tm-sparc.h (ASM_FILE_START): Switch to new calling convention.

	* decl.c (init_decl_processing): Create type nodes for 64-bit ints.
	(grokdeclarator): use them for `long long'.  Warn only if pedantic.

	* optabs.c (init_optabs): Add missing DImode insn names.

	* expr.c (emit_block_move, emit_push_insn): Use movstrqi if appro.

	* expr.c (convert_move): use extendsidi if appropriate.

	* cccp.c (initialize_builtins): Don't install __STDC__ if traditional.
	(main): Call initialize_builtins after option processing.

	* integrate.c (output_inline_function): Set current_function_decl.

	* cse.c (fold_rtx): Typo in avoiding 32-bit shifts.

	* cccp.c: Add forward-decl.

Mon Jun 27 18:06:42 1988  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* hard-reg-set.h (reg_alloc_order): New variable
	based on REG_ALLOC_ORDER, a new machine-description macro.
	* regclass.c (reg_alloc_order): Define it.
	* local-alloc.c (find_free_reg): Handle reg_alloc_order.
	* global-alloc.c (find_reg): Likewise.
	* stupid.c (stupid_find_reg): Likewise.

Sun Jun 26 10:47:47 1988  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* Version 1.23 released.

	* tm-3b1.h: Define IDENT_DIRECTIVE.

	* tm-encore.h: Define SDB_DEBUGGING_INFO.
	Define SCCS_DIRECTIVE and IDENT_DIRECTIVE.

	* output-ns32k.c: Decl of paren_base_reg_printed must be outside fcns.

	* tm-encore.h (ASM_OUTPUT_DOUBLE): Do 0f, not 0l.
	(CPP_PREDEFINES): No -Dns32032.

	* sdbout.c: Include syms.h, not storclass.h.
	(unnamed_struct_member): Decl was missing.
	(PUT_SDB_INT_VAL, PUT_SDB_VAL): Fix typos.
	(sdbout_types, sdbout_one_type, sdbout_parms): Fix typos.

	* Makefile: Add file sdbout.o.
	Changed comments pertaining to sysV.
	Make a separate target `doc' to make the info files.

	* m68k.md (bit-field insns): Use nonimmediate_operand for the thing
	to extract from.
	* vax.md (QImode bit-field insns): Likewise.

	* recog.c (nonimmediate_operand): Accept any nonconst general operand.

Sat Jun 25 07:54:42 1988  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* cse.c (lookup_as_function): arg to exp_equiv_p was missing.

Fri Jun 24 09:14:47 1988  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* recog.c (memory_operand): Allow (subreg (mem...)).

Thu Jun 23 07:34:07 1988  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* decl.c (finish_enum): Compute minimum value like maximum.
	If minimum is negative, install it in the type and make it signed.

	* stor-layout.c (layout_record): STRUCTURE_SIZE_BOUNDARY is minimum.
	(layout_type): A RECORD_TYPE or UNION_TYPE must be BLKmode if
	any member is BLKmode.  This is to prevent putting it in a register.
	(layout_decl): If decl's type is BLKmode, the decl *must* be BLKmode.

	* local-alloc.c (find_free_reg): Never allocate the frame pointer reg.

	* tm-sequent.h (PRINT_OPERAND): Bug in SFmode CONST_DOUBLE.
	* tm-encore.h: Likewise.

	* flow.c (flow_analysis): Bug in n_basic_blocks error check.

	* stmt.c (expand_asm_operands): Emit no insn if an arg is erroneous.

Tue Jun 21 08:34:24 1988  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* reload.c (find_reloads_address): Write back *loc even if
	subst_reg_equivs makes no change, in case subst_index_address did.

	* flow.c: Define macros for -1 and -2 as values of reg_basic_block.
	(mark_used_regs): Add an `else'; no change in behavior.
	(mark_label_ref): Abort if LABEL_REF doesn't contain a CODE_LABEL.
	(find_basic_blocks): Extra error check.

	* output-ns32k.c (print_operand_address): Changes in handling of
	register-indirect, and of indexing by sb register.

Mon Jun 20 04:55:38 1988  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* cccp.c (collect_definition): Compute needed space more accurately.
	Abort if use more space than was allocated.
	(rescan) [USE_C_ALLOCA]: Do alloca (0) after handle_directive.

	* genflags.c (gen_insn): Put parens around defns of HAVE_... macros.

Sun Jun 19 02:52:53 1988  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* expr.c (emit_push_insn): Consider PARM_BOUNDARY when compensating
	for size of a pushed arg to bcopy.

Sat Jun 18 07:20:54 1988  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* New files sparc.md, tm-sparc.h, config-sparc.h, output-sparc.c.

	* final.c (final): After an ADDR_{,DIFF_}VEC, do ASM_OUTPUT_CASE_END.
	* tm-3b1.h: Define ASM_OUTPUT_CASE_END.
	(PRINT_OPERAND_ADDRESS): Ref the case tables via an intermediate symbol
	`LDnnn' whose def. is output by ASM_OUTPUT_CASE_END.
	(ASM_OUTPUT_CASE_LABEL): Add missing newline.

	* reload.c (find_equiv_reg): Reject a MEM containing an autoincrement.

Fri Jun 17 06:58:37 1988  Richard Stallman  (rms at frosted-flakes.ai.mit.edu)

	* genpeep.c (main): Write `extern' in the decl for `peep_operand'.

	* flow.c (propagate_block): When a dead insn has a REG_RETVAL note,
	call mark_set_regs anyway, so that `significant' is updated.

	* jump.c (follow_jumps): New arg IGNORE_LOOPS.  If 0, don't follow
	the insn at the beginning of a loop that enters the loop; this avoids
	interference with loop optimizer.
	(jump_optimize, tension_vector_labels): Pass that arg.

	* loop.c (loop_optimize): Mention invalid multiple-entry loops in log.

	* m68k.md (extv, extzv): Fix # of alternatives mismatch in constraints.

Thu Jun 16 03:06:48 1988  Richard Stallman  (rms at corn-chex.ai.mit.edu)

	* genrecog.c (change_state): Was mishandling printing XVECEXP indices 
	greater than 9.

	* combine.c (subst, simplify_and_const_int): Avoid making SUBREG
	of a non-REG.

	* expr.c (expand_expr): For FIX_TRUNC_EXPR to unsigned short/char,
	go via signed int.

	* optabs.c (expand_fix): Copy hard_libcall_value reg only once.

	* reload1.c (order_regs_for_reload): Init all elements
	of  potential_reload_regs to -1.

	* Prevent generation of (set (reg) (plus ... (label_ref ...))).
	* explow.c (memory_address_noforce): Like `memory_address' but
	never force it into a register.
	* expr.c (do_tablejump): Use that.
	* m68k.md (casesi): Use that.

	* rtl.h (struct rtx_def, GET_CODE, PUT_CODE): If SHORT_ENUM_BUG,
	define the `code' field as a short.

Wed Jun 15 01:25:57 1988  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* gcc.c (CPP_SPEC): New spec set by config.h gives flags to cpp.
	* tm-*.h for m68k: Define CPP_SPEC to define __HAVE_FPU__ on
	appropriate conditions.

	* combine.c (subst): Simplify (not (minus x 1)) and (neg (minus x y)).

Mon Jun 13 02:22:43 1988  Richard Stallman  (rms at corn-chex.ai.mit.edu)

	* typecheck.c (build_array_ref): Avoid duplicate errmsg if index
	is an error-mark.

Sun Jun 12 23:04:39 1988  Richard Stallman  (rms at corn-chex.ai.mit.edu)

	* cccp.c (handle_directive): If -traditional, quotes aren't special.
	(rescan): Assume newline ends a string constant.

	* cccp.c, cexp.y: Make all fcns non-static; add some forward decls.

	* various: add static forward-decls for various functions.

Fri Jun 10 00:25:18 1988  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* reload1.c (choose_reload_targets): When writing back an incremented
	value (handling reload_inc), write back to the real place, not to
	OLDEQUIV (a register that holds the same value).

	* tm-m68k.h (LEGITIMIZE_ADDRESS): Don't give force_operand a target.
	This can cause the use of multiple insns with same output reg,
	which can confuse cse.

	* loop.c (consec_sets_invariant_p):
	If invariant_p ever returns 2, we return 2.
	New arg is # of consecutive sets to look for,
	since this info is no longer in n_times_set at move_movables.
	(scan_loop): If consec_sets_invariant_p returns 2, set m->cond.
	(move_movables): check consecutive insns if m->consec && m->cond.

	* tm*.h: ASM_DECLARE_FUNCTION_NAME now takes 3rd arg,
	the FUNCTION_DECL node.
	* varasm.c (assemble_function): Pass this arg.

	* expr.c (expand_call, expand_builtin [alloca]):
	If STACK_POINTER_OFFSET is defined, add it to stack pointer contents
	before using it as address of actual data on the stack.
	* stmt.c (expand_decl): Likewise.

	* stmt.c (assign_parms): If 1st parm named `__builtin_va_alist'
	came in regs, pretend it came on stack.
	Handle pretending a BLKmode var came on the stack.
	If REG_PARM_STACK_SLOT, count stack space for each parm
	even if the parm came in a register; and use that stack space
	if the parm needs to be addressable or is BLKmode.
	Rearrange to simplify conditionals.

Thu Jun  9 01:21:29 1988  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* local-alloc.c:
	`qty_...' vectors' elements for hard-reg-numbers now aren't used.
	`reg_qty' elements for hard-reg numbers now aren't used,
	and the element for a pseudo is never a hard-reg number.
	(local_alloc): No need to reset those elements.
	No need to reset elements out of range of prev block's NEXT_QTY.
	(reg_is_born, reg_is_set, wipe_dead_reg):
	Divide labor in same way for hard regs and pseudos;
	simplify using fact that locality-to-basic-block has been precomputed
	and recorded in reg_qty; avoid refs to reg_qty[HARDREG].
	(reg_is_born, wipe_dead_regs): Block-number arg no longer needed.

	* local-alloc.c (combine_regs): Remove old code for tying hard regs
	to pseudos; great simplification results.
	Use find_regno_note, not regno_dead_p.

Wed Jun  8 00:18:04 1988  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* reload.c (subst_reg_equivs): Set a flag if anything is changed.
	(find_reloads_address): Check that flag to avoid extra work.
	Also check early for safe reg+const address and avoid work.

	* reload.c (find_reloads): Use loops instead of bcopy.
	Check early for insn with no real constraints, and return.
	Also check for move from hard reg to hard reg and return.

	* cse.c (canon_reg): Rewrite for speed; use a switch.
	(cse_insn): Don't call find_reg_note if REG_NOTES is 0.

	* cse.c (cse_insn): Store modified SET_SRC even if there's a REG_EQUIV.
	Inhibition was needed when the SET_SRC was the only place to find the
	equivalent value; now it is in the REG_EQUIV note.

	* stmt.c (expand_asm_operands): If NINPUTS is 0, make vec of no elts.
	* regclass.c (reg_scan_mark_refs): Don't lose if XVEC (x,i) is 0.

Tue Jun  7 03:51:28 1988  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* stmt.c (assign_stack_local): If big-endian and MODE is narrow,
	the bytes actually used are the least significant.

	* parse.y (skip_white_space): Accept char as arg; let caller read it.
	(yylex): Change call.
	(check_newline): Return 1st nonwhite char after skipping lines.
	(skip_white_space): Change call.
	* toplev.c (compile_file): Change call.

	* gcc.c: Pass -traditional to cc1.

	* cse.c (cse_insn): Return very early for (set (reg) (call...)).
	Mainly to save time.
	(cse-insn) Old code to add REG_WAS_0 note wasted time but did nothing.

	* expr.c (clear_pending_stack_adjust): Really do clear it,
	if current fcn doesn't want to be inline.

	* cse.c (cse_insn): Speedup: instead of safe_hash, use canon_hash
	or HASHREG.

Mon Jun  6 21:47:23 1988  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* jump.c (rtx_renumbered_equal_p): Reject ADDR_VEC fast.

	* cse.c (cse_insn): Ignore a REG_EQUIV or REG_EQUAL note if the
	equivalent value is the same as the SET_SRC of the insn.

	* flow.c (life_analysis): Don't call volatile_refs_p for a CALL_INSN;
	just assume value is 1.
	(propagate_block): Don't call mark_{used,set}_regs for a stack-pop
	since if it isn't dead it has no effect on any useful life data.
	(mark_set_1): Return quickly if setting stack-ptr, and almost as
	quickly if setting any hard reg.
	(mark_used_regs): Likewise for refs.
	Also don't scan the vector of an ADDR_VEC or ADDR_DIFF_VEC.
	(volatile_refs_p): Likewise.

	* varasm.c (output_constant): Discard NOP_EXPR and CONVERT_EXPR
	in integer case (they were for casting a pointer).

	* parse.y (compstmt_or_error): Parse a compstmt after ignoring error.
	Use this for fctn body so that an error after store_parm_decls
	won't recover to xdecls and call store_parm_decls again.
	Typical cause was missing semi at end of last parmdecl.

	* parse.y: Add missing semicolons in actions.
	(yylex): Don't use yylloc.

Sun Jun  5 16:14:40 1988  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* typecheck.c (build_array_ref): Check arg types here, to make
	error message more accurate (not about "addition").

Thu Jun  2 02:41:40 1988  Richard Stallman  (rms at rice-krispies.ai.mit.edu)

	* cccp.c (collect_expansion): `#' isn't special if -traditional.

	* dbxout.c (dbxout_parms): Don't output a regparm symbol
	unless the parm got a hard reg assigned.

	* tm-encore.h (ASM_OUTPUT_DOUBLE): Use 0f... not 0d...

	* tm-vax.h (CHECK_FLOAT_VALUE): Define this.

Wed Jun  1 17:13:00 1988  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* expr.c (expand_call): Have sequence points between args.

Tue May 31 00:27:06 1988  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* expmed.c (store_fixed_bit_field): Avoid shifting by 32.
	* cse.c (fold_rtx):
	* symout.c (subrange_p):  likewise.

	* local-alloc.c (block_alloc): If operands 1 and 2 commute,
	try tying output to operand 2 if operand 1 won't do.

	* toplev.c (compile_file): Pass main_input_file to symout_init.

	* tree.c (build_real, build_real_from_int_cst):
	Call CHECK_FLOAT_VALUE if it's defined, to report out-of-range values.

	* tree.c (build_real, build_real_from_int_cst): New 1st arg TYPE.
	* parse.y (yylex): Pass this arg; requires parsing suffixes first.
	* fold-const.c (fold, combine, fold_convert): Pass this arg.
	Handling of float binops in `combine' simplified.

	* tm-encore.h (CPP_PREDEFINES): Remove -Dencore since CC lacks it.

	* final.c (output_source_line): Let ASM_OUTPUT_SOURCE_LINE
	be used for SDB also.

Mon May 30 00:21:15 1988  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* cse.c (insert): Was inserting in wrong place in list.
	(exp_equiv_p): Was failing to check validity when x == y.

	* tree.c (build_pointer_type): Handle saveable_obstack
	like current_obstack.

	* decl.c (finish_decl): Error in test for zero-size array warning.

	* reload.c (find_equiv_reg): New arg MODE specifies mode in which
	an equivalent value is needed.  Equivalence must be good in that mode.
	In addition, notice overlap with multiword register modes.
	Simplify, knowing that registers have already been renumbered.
	It was invalidating memory-goals too easily; setting a reg
	only invalidates memory-goal if its address varies.
	* reload.c, reload1.c, jump.c: Calls pass the new argument.

	* cccp.c: For correct ANSI, must reject `$' in identifiers.
	(dollars_in_ident): Variable says whether to allow them.
	(rescan): Handle `$' as randomchar if that's 0.
	(main): dollars_in_ident is set to 0 by -$, to 1 by -traditional.
	(rescan, do_define): Delete former pedantic warnings for `$'.
	(initialize_char_syntax, initialize_builtins): Inits split to two
	functions; former is called after options are scanned
	so `$' is in is_idchar conditionally.
	* gcc.c: For -ansi, pass -$ to cccp.
	* toplev.c, flags.h: Define dollars_in_ident.
	* parse.y (yylex): Treat $ as punctuation unless dollars_in_ident.
	Delete old pedantic warning about $.
	* tm-vms.h: Define DOLLARS_IN_IDENTIFIERS as 1.

	* cccp.c (rescan): Preprocessing numbers can have signs, after `e'.

	* integrate.c (expand_inline_function): Abort, don't return failure,
	if max_regno is too low.  I believe this can't happen.

	* typecheck.c (build_binary_op_nodefault):
	For ordered comparisons, no pedantic warning about void *.
	For MAX, MIN, ditto, and also don't allow pointer vs 0.

	* typecheck.c (build_unary_op): Don't allow pointer for +.

	* typecheck.c (convert_for_assignment): 
	Add missing warning for	case of unrelated pointer types.
	Change criteria for new ANSI C draft.

	* optabs.c (expand_binop): Don't set unused target_is_not_an_operand.

	* fold-const.c (fold_convert): Don't set unused inprec, outprec.

	* emit-rtl.c, parse.y: Delete unused var.

	* stor-layout.c (add_vc_sizes): Unused function deleted.
	* loop.c (constant_high_bytes): #if 0 this unused function.

	* gcc.c (fatal): Add missing arg to delete_temp_files.

	* cccp.c (dump_defn_1): Add missing arg to skip_quoted_string.

	* reload.c (find_reloads): If constraints don't fit in an `asm',
	print error instead of aborting.

	* regclass.c (reg_class_record): Ignore `&' in constraint.

Sun May 29 00:20:23 1988  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* Makefile: Run ranlib only if /usr/bin/ranlib exists.
	Add comment saying what to do on system V.

	* tree.c (suspend_momentary): Switch to the saveable_obstack
	for the sake of inline functions.

	* flags.h (enum debugger): New enum for write_symbols.
	* toplev.c, varasm.c, final.c: Use the enum constants where appro.
	Add calls to sdbout paralleling the calls to dbxout;
	put each in the appropriate conditional {SDB,DBX}_DEBUGGING_INFO.

	* toplev.c (main): Delete -noreg option; it's now the default.
	Make -O an alias for -opt.  Rename -g to -gg.  -g is alias for -G.
	Accept and ignore -Wtrigraphs.
	* gcc.c: Simplify the specs.

	* toplev.c (compile_file), tm-*.h:
	ASM_FILE_START is now a statement, not just a string to be output.
	Output it *after* determining the real source file name.

	* fold-const.c (fold): Simplify x >= CST to x > CST-1 (CST positive).
	To simplify this, canonicalize relationals to put constat last.

	* decl.c (duplicate_decls): Make a 2nd errmsg to show previous decl.

	* cccp.c (file_size_and_mode): Delete temporary VMS bootstrap patch.

	* tm-att386.h: New file.

	* decl.c (pushdecl): Warn if a local `extern' decl precedes
	a file-scope `static' decl.

	* expr.c (expand_call): No warning for failure to inline.

	* expmed.c (extract_bit_field): copy operand 1 of extv or extzv
	into register if memory isn't allowed.

Sat May 28 02:10:56 1988  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* gnulib.c, Makefile: Delete va_end.

	* final.c, symout.c: Check DBX_DEBUGGING_INFO, not NO_DBX_FORMAT.

	* genemit.c (gen_expand): Notice a CALL inside a PARALLEL.

	* regclass.c (init_reg_sets_1): Part of init_reg_set is put in this
	new fn which is called after options are scanned.
	Now CONDITIONAL_REGISTER_USAGE can depend on the options.
	(fix_register): Just alter the data that init_reg_sets_1 will look at.

	* reload1.c (reload): Don't complain if two different but tieable
	modes require groups of the same regclass (assuming same size group).

	* cccp.c: Add 3rd arg to all `open' calls.

	* parse.y (check_newline): Typo prevented ignoring whitespace.

	* cccp.c (perror_with_name): fprintf had harmful extra arg.

	* cccp.c (main, trigraph_pcp): -Wtrigraphs means warn if any trigraphs.

	* emit-rtl.c (gen_sequence): If LEN is 1, avoid looking at PATTERN
	of something that doesn't have one.

	* reload1.c (alter_frame_pointer_addresses): frame pointer can
	occur by itself, not just inside a PLUS.
	(reload): Call eliminate_frame_pointer before reload_as_needed.
	Otherwise the latter can make reload insns that copy the frame ptr
	to a data reg, but 68k can't copy sp+const to a data reg.

	* decl.c (implicitly_declare): Always save the implicit decl
	permanently.  Reuse an old one if it exists.
	* tree.c (resume_temporary_allocation): Used after `end_temporary...'
	to go back to temporary allocation.

	* stor-layout (layout_{type,decl}): Call variable_size.
	(variable_size): Turn a size into a SAVE_EXPR and either compute
	it right away or put it on a list to be computed later.
	(get_pending_sizes): Return that list and clear it out.
	* stmt.c (expand_start_function): Tell `variable_size' to compute
	sizes right away, and compute those saved on the list.
	(expand_end_function): Tell it to put them on a list.

Fri May 27 00:02:34 1988  Richard Stallman  (rms at frosted-flakes.ai.mit.edu)

	* dbxout.c (dbxout_symbol): For local static var, use 'V', not 'v'.

	* gcc.c (main): Don't handle SIGHUP or SIGTERM if shell ignored it.

	* Makefile, gcc.c: Propagate Make var `libdir' to gcc search path.

	* expr.c (expand_expr): a PARM_DECL with no rtl can occur in size of
	`a' in `foo (a,i) int i; struct {int x[i];} a;', so report an error.

	* flow.c (insn_dead_p): insn that makes stack bigger is never dead.
	* combine.c (try_combine): Don't splice out stores into stack ptr.

	* reload.c (find_equiv_reg): Test given regno for OVERLAPPING_REGNO_P.

	* varasm.c (assemble_variable): Use saveable_obstack for allocation.

Thu May 26 01:17:00 1988  Richard Stallman  (rms at frosted-flakes.ai.mit.edu)

	* integrate.c (save_for_inline): Clear unused slots in parmdecl_map.
	(There may be some non-parm regs below max_parm_regno.)
	* integrate.c (copy_for_inline): Don't crash if parmdecl_map elt is 0.

	* Don't fail to output a static inline function that was referenced
	via a local extern decl before its definition.
	* expr.c (expand_call): If need to mark a fcn decl addressable,
	mark the identifier addressable also.
	* typecheck.c (mark_addressable): If marking fcn addressable,
	mark the identifier as well.
	* decl.c (start_function): If identifier was marked addressable,
	propagate it to the function.

	* parse.y (yylex): Check for ERANGE after atof is called.
	(Sun doesn't report ERANGE.)

	* loop.c (may_trap_p): Any floating arithmetic may trap.

Wed May 25 00:03:34 1988  Richard Stallman  (rms at frosted-flakes.ai.mit.edu)

	* parse.y: Delete `noalias'.
	(asm_operand): Don't allow this to be empty.
	(asm_operands): Do allow this to be empty.

	* reload.c (operands_match_p): Don't let REG and SUBREG match
	if the reg isn't a hard reg.
	No longer nec. to check reg_renumber, now that reload
	substitutes the hard regno.

	* reload1.c (reload): Counting existing spilled groups,
	check HARD_REGNO_MODE_OK so we don't get fooled by an odd-even pair.
	Spill entire need for new groups before spilling any solitary regs.
	Reg already counted against max_nongroups can't become part of a group.
	(new_spill_reg): Do bookkeeping associated with a new spill-reg.
	(n_spills): This var is now static, no longer passed as arg
	within the file.

	(reload_reg_class_lower): Handle all group-reloads before solitaries.
	(choose_reload_targets): therefore #if 0 the special code for
	finding solitary registers that aren't suitable for groups.
	But fix two bugs in it: braino deciding whether a reload
	is looking for 1 register (not a group).  Use CLASS_MAX_NREGS.
	Also braino deciding whether a spill reg can be in a group.
	Did not fix bug that it fails to test HARD_REGNO_MODE_OK,
	so it might split up an even-odd pair.

	* vax.md: Special patterns for 8 and 16-bit fields, to make
	move-insns (like the ones for the 68k).

	* tree.c (convert_to_integer): Pass truncation down thru COND_EXPR
	as through a binary operator.

	* typecheck.c (build_cond_expr): If unpromoted operand types match,
	don't promote them--let containing expression promote (just once).

Tue May 24 14:46:26 1988  Richard Stallman  (rms at frosted-flakes.ai.mit.edu)

	* combine.c (subst): Simplify (subreg (sign_extend X) 0).

	* tm-hp9k320.h: Delete NO_DBX_FORMAT.
	* Most tm...h files: Define DBX_DEBUGGING_INFO.
	* dbxout.c: Change conditional to DBX_DEBUGGING_INFO.

	* integrate.c (expand_inline_function): If inline fcn was declared to
	return QI, but actually computes an SI, use SImode for INLINE_TARGET
	but actually return a QI.

	* varasm.c (force_const_mem): Failed to determine alignment bdry
	from machine mode.

	* jump.c (jump_optimize): Don't delete (move X Y) if X or Y is a
	PRESERVE_DEATH_INFO_REGNO_P register.

	* final.c (output_addr_const): In PLUS, output constant term last.

	* final.c (final): Before outputting an insn, do FINAL_PRESCAN_INSN.

	* final.c (next_block_index): No longer static.
	(final): Add SDB_DEBUGGING_INFO cases for outputing NOTEs
	for beginning and end of a block.
	(output_source_line): Add SDB_DEBUGGING_INFO case for line number.
	* varasm.c (assemble_function): Add code for SDB symbol output.

	* gnulib.c: Allow config to override INTIFY.
	New macro SFVALUE for data type to return a single-float in.

	* combine.c (remove_death): No longer `static'.

	* reload1. (choose_reload_targets): PRESERVE_DEATH_INFO_REGNO_P
	selects hard regs for which death info should be updated for final.

	* reload1.c (reload_as_needed): Let INSN_CLOBBERS_REGNO_P
	prevent inheritance of certain reloads.

	* reload.c (find_equiv_reg): Let OVERLAPPING_REGNO_P reject
	an equiv reg.  Needed for funny float regs on 80387.

	* cccp.c (do_ident): Define #ident as a no-op if IDENT_DIRECTIVE.
	Warn if pedantic.
	(do_sccs): Warn if pedantic.

	* emit-rtl.c (restore_reg_data): Set cur_insn_uid--prevent duplicates.

Sun May 22 12:25:06 1988  Richard Stallman  (rms at frosted-flakes.ai.mit.edu)

	* Version 1.22 released.

	* reload1.c (reload): Spilling isn't finished till max_nongroups is 0.

	* tm-encore.h (PRINT_OPERAND): No `$' before a CONST.

Sat May 21 13:08:54 1988  Richard Stallman  (rms at frosted-flakes.ai.mit.edu)

	* fold-const.c (combine): Typo in MIN_EXPR, MAX_EXPR.

	* reload1.c (reload): Was counting insn_groups as total size of groups,
	not number of groups.
	A new spilled group counts against group-needs of superclasses.

	* parse.y (parmlist{,_or_identifiers}_1): In error case,
	return a tree list just as in the other cases.

Fri May 20 02:14:51 1988  Richard Stallman  (rms at frosted-flakes.ai.mit.edu)

	* config-vax.h, config-m68k.h: If __GNUC__, use builtin-alloca.

	* genpeep.c (match_rtx): Generated code was testing the wrong rtx
	when testing an int or string at a nonzero index in the rtx.

	* reload.c (find_reloads): Typo checking `modified' for conflict
	with an earlyclobber.

	* reload.c (find_equiv_reg): Reject stack ptr as return value.

	* expr.c (expand_builtin): Alloca must do pending stack adjust.

Thu May 19 13:01:01 1988  Richard Stallman  (rms at frosted-flakes.ai.mit.edu)

	* flow.c (propagate_block): Skipping back across libcall didn't happen
	due to failing to set PREV.

	* expr.c (emit_library_call): Code to increment and decrement
	current_args_size broke since emit_call_1 was changed to restore it.

	* combine.c (try_combine): When i1 or i2 auto-incs a reg, don't combine
	if i3 uses that reg.

	* config-hp9k3.h: #define bcopy, bcmp, bzero here.
	* conf-hp9k320.h: Delete file.

	* integrate.c: Don't include strings.h--no need.

	* stmt.c (expand_asm_operands): Don't make zero-length vectors.

	* loop.c (scan_loop): After a fcn call, maybe-trap insns can't move.
	The fcn call might exit and that would prevent the trap.

	* reload1.c (reload): Set reload_first_uid to next uid to be used.
	* reload.c (find_equiv_reg): Use reload_first_uid to ignore insns
	that are due to reloading--only if reload_reg_p is not 0 or 1.

Wed May 18 22:11:20 1988  Richard Stallman  (rms at frosted-flakes.ai.mit.edu)

	* typecheck.c (build_unary_op): Don't complain about array
	as argument to `!'.

	* decl.c (pushdecl): If locally declaring an extern function,
	check the identifier's global value in case it's an inline function.

Mon May 16 03:06:08 1988  Richard Stallman  (rms at frosted-flakes.ai.mit.edu)

	* output-ns32k.c (output_shift_insn): New fn, maybe turn shift to adds.
	(reg_or_mem_operand): Predicate for a non-immediate general_operand.
	* tm-ns32k.h (CONST_OK_FOR_LETTER_P): Define letter K.
	* ns32k.md: Use output_shift_insn for various addr insns that shift.
	Don't allow nonexplicit constants in lprd, multiply or truncate insns.
	Use reg_or_mem_operand for constraint in op1 of divide insns;
	a constant there causes regclass to screw up.
	Split alternative constraints on the bit-field insns to avoid
	out-of-range operands in exts, inss.  Some cases of extraction
	can be done faster via memory.

	* flow.c (mark_set_1): When adding a REG_DEAD note, inc reg_n_deaths.

	* dbxout.c (dbxout_type_def): Do nothing for {integer,char}_type_node.

Sun May 15 00:56:44 1988  Richard Stallman  (rms at frosted-flakes.ai.mit.edu)

	* tm-sequent.h, tm-ns32k.h, tm-encore.h (PRINT_OPERAND):
	Was treating SF's as SI's.

	* expr.c (emit_move_insn): Check all CONST_DOUBLEs for
	LEGITIMATE_CONSTANT_P and put them in memory if not.

	* local-alloc.c (combine_regs): Allow a reg to be tied to a qty
	if the reg's class is contained in the qty's class
	(as well as if the reg's class contains the qty's class as before).
	Rename qty_reg_class to qty_min_class and make it the smallest
	class of any reg tied to the qty.
	(reg_class_subset_p, reg_meets_class_p, update_qty_class):
	New subroutines to implement this.
	(local_alloc): Init reg_qty to -1 for pseudos not in cur. basic block.
	(reg_is_born): Abort if pseudo not in basic block has -2 in reg_qty.

	* jump.c (rtx_renumbered_equal_p): Insist that modes of REGs match.

Sat May 14 01:05:35 1988  Richard Stallman  (rms at lucky-charms.ai.mit.edu)

	* stmt.c (expand_return): Empty frame frame_offset isn't nec. 0.

	* expr.c (emit_call_1): Use stack_size_rtx everywhere appropriate.

	* decl.c (init_decl_processing): Set sizetype to `unsigned long'
	if `int' is less than a word.

	* stddef.h (size_t, ptrdiff_t): Both are now long.

Fri May 13 01:06:00 1988  Richard Stallman  (rms at lucky-charms.ai.mit.edu)

	* emit-rtl.c (gen_lowpart): Handle non-lowpart subreg as arg.

	* recog.c (register_operand): VOIDmode means allow any mode.
	(immediate_operand, nonmemory_operand): Likewise.

	* emit-rtl.c (classify_insn): Update for changed CALL_INSN format.
	(emit): New function to emit an rtl pattern as the right kind of insn.
	* jump.c (simplejump_p): No longer static.

	* genemit.c (gen_expand): For match_operand at top level, call `emit'.
	Use `emit_call_insn' when appropriate.
	(gen_exp): Handle rtx's that contain strings.

	* final.c, symout.c: If not NO_DBX_FORMAT, include stab.h to get the
	N_... symbols.  Use their default definitions only if they're undef.

	* expr.c (expand_call) [no PUSH_ROUNDING]: Always set argblock
	if there are any stack-passed arguments.

	* typecheck.c (build_unary_op): Mark all increment-exprs volatile.

	* recog.c (reg_renumbered_fits_class_p): Delete private copy of
	reg_class_contents.

	* reload1.c (forget_old_reloads): Handle PARALLEL case by recursion.
	Explicit store into a spilled reg invalidates old reloaded contents;
	this can occur when we drop through into a basic block whose need was 0
	(and so whose local pseudos were not spilled).

	* gcc.c (main): If -v, print gcc's own version; also no error msg
	if no input files.

	* loop.c (may_trap_p): Mem ref to nonconstant address may trap.
	(scan_loop): Check may_trap_p only when insn is in other respects ok.

	* cexp.y: #include config.h (for decl of alloca on some machines).

Thu May 12 17:24:19 1988  Richard Stallman  (rms at frosted-flakes.ai.mit.edu)

	* regclass.c (regclass): When inserting an insn at start of block,
	update basic_block_head.

Wed May 11 00:47:09 1988  Richard Stallman  (rms at corn-chex.ai.mit.edu)

	* stmt.c (assign_parms): DECL_OFFSET should be offset as passed
	(not including big-endian width-change correction).

	* typecheck.c (shorten_compare): Set unsignedp[01] right in case
	where get_narrower makes no change.
	(build_binary_op_nodefault): Likewise for shortening shifts.

	* stmt.c (expand_end_case): Use type_for_size to get the type
	to convert the index to, since `int' is wrong if -mshort.

	* decl.c (grokdeclarator): Don't check PARM type for completeness.
	(grokparms): If fn definition, check all parm types for completeness.
	(store_parm_decls): Likewise.

Tue May 10 22:42:13 1988  Richard Stallman  (rms at corn-chex.ai.mit.edu)

	* typecheck.c (store_init): For invalid init, store error_mark_node.
	* varasm.c (assemble_variable): Ignore error_mark as an init.
	* stmt.c (expand_decl): If init is error_mark, init to 0 if possible.
	This avoids a spurious "uninitialized variable" warning.

Sun May  8 17:08:07 1988  Richard Stallman  (rms at lucky-charms.ai.mit.edu)

	* tm-hp9k320.h: Define STRUCTURE_SIZE_BOUNDARY.

	* decl.c (get_parm_info): Replaces get_parm_types.  Returns a tree_list
	containing parmdecls and tag list as well as type list.
	(grokparms): Accept that tree_list as argument.
	(grokdeclarator): Calling grokparms, say "not a definition" for the
	function declarators for arg or value types within a definition.

	* parse.y: Call get_parm_info.
	(parmlist_or_identifiers): If identifiers, make a tree_list
	like the one get_parm_info returns.

Fri May  6 16:44:19 1988  Richard Stallman  (rms at frosted-flakes.ai.mit.edu)

	* m68k.md (casesi): Delete template aside from match_operand's.

	* tm-encore.h: New file from Robert Brown.

	* ns32k.md: Use %c in some addr insns.
	(tst*): Use {d,f,}const0_rtx to make the constant 0; OS-independent.
	(call, call_value): Use %? before address in a bsr.

	* output-ns32k.c (print_operand_address): To output a local label,
	use `output_asm_label'.
	Make SEQUENT_ADDRESS_BUG conditionals happen at compile time.

	* tm-ns32k.h: Delete SEQUENT_HAS_FIXED_THEIR_BUG.
	(PRINT_OPERAND): Output nothing for `%?'.
	* tm-sequent.h: (PRINT_OPERAND): Output nothing for `%?'.

	* final.c (output_asm_label): No longer `static'.

Thu May  5 09:03:37 1988  Richard Stallman  (rms at frosted-flakes.ai.mit.edu)

	* explow.c (memory_address): Ignore flag_force_reg unless optimize.
	Also ignore it for addresses of stack slots (avoid invalid REG_EQUIVs).

	* typecheck.c (digest_init): If traditional, allow `char x[100]=0;'.

	* tree.c (get_unwidened): Don't alter a COMPONENT_REF if
	innerprec equals the precision of the existing type.
	It was changing pointers to integers.

	* m68k.md (movdi): Put all fpregs in separate constraint alternatives
	and handicap them so spill reg won't be an fp reg.

	* parse.y (yyerror): Use the arg as part of the error message.

	* decl.c (start_function): Give the RESULT_DECL type int rather
	than char or short.
	* typecheck.c (c_expand_return): Convert value from fn's return type
	to the RESULT_DECL's type.

	* Avoid generating dbx xrefs to enums, since dbx loses on them.
	Do this by outputting all types in order of definition.
	This is done only for top-level types; problem remains for local ones.

	* decl.c (finish_decl): Do rest_of_decl_compilation for TYPE_DECLs.
	* toplev.c (rest_of_decl_compilation): Do dbxout_symbol for them.

	* dbxout.c (dbxout_symbol): Check DECL_RTL only for fns and variables.
	For a TYPE_DECL, ignore it if the type was already output
	and its preferred name is the TYPE_DECL.  Else output type in full.

	* decl.c (pushdecl): Don't prefer typedef names to type tag names.

	* stor-layout.c (chain_type): Build chain in forward order.


	* tm-3b1.h (ASM_OUTPUT_CASE_LABEL): Error getting length of table.

	* tm-3b1.h: #define SGS_3B1 was missing.

	* typecheck.c (build_compound_expr): Ignore non-volatile subexprs.

	* fold-const.c (fold): Simplify (unsigned) foo >= 0, etc.

	* stor-layout.c (layout_type): Set TYPE_PRECISION of ptr types.

Wed May  4 08:06:25 1988  Richard Stallman  (rms at frosted-flakes.ai.mit.edu)

	* parse.y: Don't use the Bison @ construct, since it makes parser slow.

	* decl.c (finish_function): Delete FILENAME and LINE args.

	* typecheck.c (digest_init): No pedantic warning for array="string".

Tue May  3 09:09:30 1988  Richard Stallman  (rms at frosted-flakes.ai.mit.edu)

	* toplev.c (main): Ignore `-Wcomment'.
	* gcc.c: Pass -Wall to cpp (which treats it like -Wcomment).

	* tm-isi68.h: Greatly simplified; now works only with GAS.

	* tm-m68k.h (EMPTY_FIELD_BOUNDARY): now 16 (right on Sun, ISI and HP).
	* tm-sun3.h: No need to redefine it.

	* decl.c (finish_struct): Don't ever make DECL_ALIGN smaller.

	* decl.c: Rename min, max to MIN, MAX.

	* typecheck.c (convert_for_assignment): Avoid warning if assigning
	a `void *' from a `const void *'.

	* combine.c (FAKE_EXTEND_SAFE_P): Turn off for mem refs; avoid faults.

Mon May  2 07:28:27 1988  Richard Stallman  (rms at frosted-flakes.ai.mit.edu)

	* tm-vax.h: Support -mg switch to use g-float instead of d-float.
	New macros TARGET_G_SWITCH, ASM_DOUBLE_CHAR.
	Changes in TARGET_SWITCHES, ASM_OUTPUT_DOUBLE.
	Define code `#' for PRINT_OPERAND.
	* vax.md: use `#' in opcodes for doubleword float.

	* tm-vax.h: Define UDIVSI3_LIBCALL and UMODSI3_LIBCALL.

	* cccp.c (main, do_include): Implement -I- switch.

	* jump.c (jump_optimize): When hunting NOTE_INSN_FUNCTION_END,
	skip final RETURN (found on the vax).

	* toplev.c (main): -Wall is equiv to all -W switches combined.

	* stmt.c (expand_decl, expand_end_bindings,
	expand_{start,end}_function).  The -noreg treatment of `register' vars
	is extended to vars used as addresses of vars in memory (varying-size
	structures).
	(use_variable): Emit USE for regs used in specified rtx.

	* cse.c (fold_cc0): Stack-frame addresses are always nonzero.
	(fold_rtx): 0200 bit in prev_insn_cc0 means only zeroness is known.

	* parse.y (parmlist): poplevel needs 3 args.

Sun May  1 07:20:34 1988  Richard Stallman  (rms at frosted-flakes.ai.mit.edu)

	* decl.c (start_function): typo checking for incomplete return type.

	* emit-rtl.c (restore_reg_data): If a pseudo appears nowhere,
	don't leave its slot empty; create a pseudo for that slot.

	* Version 1.21 released.

	* expr.c (expand_call): Merge duplicate code for structure_value_addr.

	* emit-rtl.c (restore_reg_data): Delete error check; it's legit for
	a pseudo reg to appear nowhere in the rtl.

Sat Apr 30 07:35:31 1988  Richard Stallman  (rms at frosted-flakes.ai.mit.edu)

	* integrate.c (copy_rtx_and_substitute): Fix typo for arg_pointer_rtx.

	* decl.c (poplevel): Undo previous change with #if 0.

	* stmt.c: `struct nesting' now records the depth on the stack.
	Each expand_start... must update and record the depth;
	each expand_end... uses macro POPSTACK to pop.
	This way, if a level isn't explicitly popped, it won't cause
	circular structure.

	* dbxout.c (dbxout_type): Replace with main variant only if incomplete.

	* typecheck.c (build_unary_op): Test of `pedantic' was backwards.

	* expr.c (STACK_BYTES): Typo in definition.

	* typecheck.c (build_binary_op_nodefault): Rename code1 to code0,
	and likewise for code2, tt1, tt2.

	* expr.c (expand_call): Wrong arg order for warning_with_decl.

Fri Apr 29 08:41:06 1988  Richard Stallman  (rms at frosted-flakes.ai.mit.edu)

	* integrate.c (copy_decl_tree): New arg is depth in recursion.
	Always discard the outermost LET_STMT being copied; never discard any
	others.  This way the copied LET_STMTs correspond to the copied NOTEs.

	* varasm.c (decode_rtx_const): For SYMBOL_REF, use string address
	not address of the rtx.  Library fns have only one copy of the name
	but many copies of the SYMBOL_REF.

	* expr.c (emit_call_1): New arg OLD_ARGS_SIZE is used to reset
	current_args_size.
	(emit_library_call, expand_call): Pass new arg; don't restore it here.

	* flow.c (life_analysis): Don't mark sp live at end if fn is empty.

	* parse.y (parse_or_identifiers_1): Handle `error' in here, not in
	callers notype_declarator etc.  Also read the closeparen here.

Thu Apr 28 12:43:52 1988  Richard Stallman  (rms at frosted-flakes.ai.mit.edu)

	* expmed.c (expand_shift): In extzv strategy, handle the operand
	predicates for operands 0, 1 and 3.  (Not needed for 2.)
	* vax.md: extzv pattern for SImode op1 must recognize general_operand
	since the pattern named "extzv" allows them.

Wed Apr 27 00:52:44 1988  Richard Stallman  (rms at frosted-flakes.ai.mit.edu)

	* expr.c (emit_call_1): New arg NEXT_ARG_REG describes # regs
	used for passing args.
	(emit_library_call, expand_call): Provide that argument.

	* explow.c (round_push): New fn: round arg up to STACK_BOUNDARY.
	* expr.c (expand_builtin): Use round_push on size for __builtin_alloca.
	* stmt.c (expand_decl): Likewise for variable-size objects.
	* expr.c (expand_call): Likewise for args_size.var.
	Also use STACK_BOUNDARY to round a constant arg-block size.
	Pass emit_call_1 that rounded value.
	(emit_library_call): Round arg_size with STACK_BOUNDARY.
	* tm-spur.h: Define STACK_BOUNDARY instead of ROUND_CALL_BLOCK_SIZE.
	* tm-m68k.h: Define STACK_BOUNDARY as 16.

	* expr.c (emit_call_1): Don't change current_args_size.
	(emit_library_call, expand_call): Always restore current_args_size
	to ambient value, after calling emit_call_1.

	* tm-hp9k320.h: Don't define USG here.
	* config-hp9k3.h: New file.  USG defined here.

	* tm-3b1.h: #undef ASM_OUTPUT_ASCII (a defn came from tm-hp9k320.h).

	* decl.c (grokdeclarator primarily): Cast all RID_... to (int) before
	using them in arithmetic.  Placates CC on Sequent.

	* emit-rtl.c (emit_jump_insn): Return proper value, for a SEQUENCE.
	* emit-rtl.c (emit_call_insn): Handle SEQUENCE like emit_jump_insn.

Tue Apr 26 02:41:26 1988  Richard Stallman  (rms at lucky-charms.ai.mit.edu)

	* cccp.c (macroexpand): If traditional, don't disable called macro.
	(macarg1): Was failing to count backslash-newline inside a string
	in a macro arg as part of file's linenumber.

Mon Apr 25 18:46:53 1988  Richard Stallman  (rms at lucky-charms.ai.mit.edu)

	* jump.c (jump_optimize): Don't do April 20 optimization on first
	iteration; let other simpler opts be done before this is considered.

Sun Apr 24 02:45:28 1988  Richard Stallman  (rms at frosted-flakes.ai.mit.edu)

	* tree.c (staticp): a CONSTRUCTOR can be static.

	* varasm.c (output_constant_def): Always return memref, not address.

	* decl.c (complete_array_type): New fn, make an array type complete
	based on an initializer.
	(finish_decl): Use complete_array_type.
	* parse.y (expr_no_commas): When parsing a constructor,
	Use complete_array_type	on constructors for incomplete array types.

	* typecheck.c (digest_init, store_init_value,process_init_constructor):
	It's now TREE_STATIC, not TREE_ADDRESSABLE, that records that all elts
	in a CONSTRUCTOR are simple constants.
	(digest_init): A CONSTRUCTOR with non-null type is treated as ordinary
	expression, not as a braced initializer.
	Allow init of an array from an array-valued expr; warn if pedantic.
	* expr.c (expand_expr, CONSTRUCTOR case): Put in memory only if static.
	Was making an extraneous level of MEM; output_constant_def does it all.

	* typecheck.c (build_unary_op): Allow ADDR_EXPR of static CONSTRUCTOR.
	(default_conversion): Likewise.
	(initializer_constant_valid_p): Constructor is ok if static.

	* gcc.c: Change -fnostd... to -nostd...
	* cccp.c (main): Likewise.

	* Everywhere: Use REG_NOTE_KIND to get the kind of a reg note.

	* rtl.c (find_regno_note): New function.
	* flow.c (flow_deadp): Deleted; caller uses find_regno_note.
	* global-alloc.c (reg_dead_p): Deleted.
	(global_conflicts): Use find_regno_note instead of reg_dead_p.

	* final.c (final) Use find_reg_note to look for a REG_INC.
	* combine.c (insn_has_inc_p): deleted; callers use find_reg_note.
	(try_combine): Use find_reg_note whenever looking for a REG_INC.
	(regno_dead_p, remove_death): Check the REG_NOTE_KIND before assuming
	that the datum in it is a REG.
	* reload1.c (reload): Use find_reg_note to find a REG_EQUIV.

	* gcc.c: Don't delete .o files if not all compilations succeed.
	(record_temp_file): New arg SUCCESS_ONLY--delete file only if succeed.
	(delete_temp_files): New arg SUCCESS says compilation succeeded.
	(store_arg): Now 3 possibilities for arg TEMPNAMEP; 2 = del on success.
	(do_spec_1): For %d, set delete_this_arg to 2.

	* decl.c (poplevel): Warn about any still-incomplete type-tags.

Sat Apr 23 02:54:16 1988  Richard Stallman  (rms at rice-krispies.ai.mit.edu)

	* expr.c (expand_builtin): For alloca, round arg up to multiple
	of PARM_BOUNDARY.  Also to convert it to Pmode unless it already is.

	* stor-layout.c (layout_union): Bug in 14 April change:
	use caller-specified alignment as minimum, not as maximum.

	* parse.y (skip_white_space): Avoid infinite loop on unterm. comment.

Fri Apr 22 00:22:59 1988  Richard Stallman  (rms at frosted-flakes.ai.mit.edu)

	* cccp.c: Text following #else or #endif is just a warning.
	(rescan): Digit-case was dropping into the $-case; reorder.

	* cccp.c (rescan): Comment start when -traditional was output as
	`/*'; should be nothing.

	* jump.c (jump_optimize): Fix prev change:
	do nothing if range1end == range2end;
	don't lose any NOTEs when splicing.

	* flow.c (propagate-block): For CALL_INSN, clobber the call-used regs
	only after mark_set_regs is done; avoids confusion about lifespan
	of function value reg.

	* gcc.c: Pass -Wcomment to cpp.

	* cccp.c (main, rescan): If -Wcomment, warn if `/*' inside comment.

	* decl.c (duplicate_decls): Ignore `inline' decl following definition.

	* m68k.md (casesi): Split it up into subroutines, so insns emitted
	by the call to memory_address (on 68000) come in the right place.

	* combine.c (record_dead_and_set_regs): Notice storing in a SUBREG.

	* integrate.c (expand_inline_function): Insn to copy a subroutine's
	return-value was being output twice, once incorrectly.

	* reload.c (find_equiv_reg): A stack-push insn does not invalidate
	an equiv for a goal in memory.
	Any other write to memory does invalidate any goal in memory
	(PARALLEL case failed to check for this).

	* expmed.c (expand_shift): In the extzv clause, force shifted value
	out of memory if -fforce-mem.

	* print-tree.c (prtypeinfo): Some attributes were missing.
	(dump): In ..._TYPE nodes, ignore the TREE_CHAIN field.

	* cse.c (note_mem_written): Pushing on stack does not invalidate mem.

	* vax.md (extv/andl peephole opt): Made incorrect code if output was
	pushed on stack.  Added special case code.
	(extv, extzv for SImode operand): Require register_operand.

Thu Apr 21 00:24:52 1988  Richard Stallman  (rms at corn-chex.ai.mit.edu)

	* stmt.c (assign_parms): Round current_function_pretend_args_size up.

	* integrate.c: `pushlevel' arg was missing.

	* dbxout.c (dbxout_type): Undo rest of March 29 change:
	When a named type is first seen inside another type, output an xref
	and let the real definition come out later.
	It is strange that Sun dbx has sometimes appeared to demand
	one strategy and sometimes appeared to demand the other.

	* typecheck.c (convert_for_assignment): Allow conversion to or from
	`const void *', etc., unless pedantic.

	* decl.c (get_parm_types): For `foo (void){}', set last_function_parms
	to nil so store_parm_decls won't lose.

	* combine.c (subst): (plus (plus X N) -N) => X.

	* explow.c ({anti_,}adjust_stack): Don't make a copy of
	`stack_pointer_rtx'.

	* integrate.c (expand_inline_function): Typo testing for the
	USE that indicates a CALL_INSN's value is being returned.

	* expr.c (expand_builtin, alloca case): Copy arg to reg before
	adjusting stack, to avoid invalid insns on some machines.

Wed Apr 20 00:15:14 1988  Richard Stallman  (rms at rice-krispies.ai.mit.edu)

	* typecheck.c (build_binary_op_nodefault): When shortening,
	get_narrower may make no change because ARGn is already narrow.
	In this case, set UNSIGNEPn from ARGn's type.

	* typecheck.c: Rename ARG1,ARG2 to ARG0,ARG1, etc. in several fns.

	* tm-vax.h: Turn off continuation on DBX output.

	* typecheck.c (build_function_call): Don't change __builtin_ffs to an
	FFS_EXPR.  Note that __builtin_alloca has always made a CALL_EXPR.
	* expr.c (expand_builtin): New function expands all CALL_EXPRs that
	are really built-in functions.
	(preexpand_calls): Do nothing to a CALL_EXPR for a built-in function.

	* loop.c (count_loop_regs_set): Don't move a reg that is in a CLOBBER.

	* stupid.c (stupid_mark_refs): Was getting hard reg's mode from
	the wrong place.

	* rtl.c (note_stores): Typo in checking vector elt for SET vs CLOBBER.

	* stmt.c (expand_end_bindings): If restoring stack level, 
	first do pending stack adjust (so it won't be done erroneously after).
	(expand_goto): likewise.

	* rtl.h: LABEL_NUSES was an rtx.  It should be an int.
	* stmt.c (expand_label, expand_goto): Delete frobbing with LABEL_NUSES;
	the value stored there was the same as the CODE_LABEL rtx.

	* jump.c (jump_optimize): Detect  if (foo) ...; else { ... break;}
	and change to  if (! foo) { ... break;} else ...; so can drop out.
	(next_label): New fn returns the next label after given insn.

Tue Apr 19 21:30:05 1988  Richard Stallman  (rms at frosted-flakes.ai.mit.edu)

	* flow.c (insn_dead_p): Delete special handling for stack ptr.
	(mark_set_regs, mark_used_regs): Likewise.
	(life_analysis): Mark stack ptr live at end of fn if necessary.
	(propagate_block): Mark stack ptr live leading up to a CALL_INSN.

	* jump.c (jump_optimize): #if 0 around stack-adjust-deletion code.

	* cse.c (fold_rtx): Change const_arg from an array to 3 separate
	scalars for the first three operands.
	Handle SIGN_EXTEND and ZERO_EXTEND.

	* integrate.c (copy_rtx_and_substitute): If arg is 0, return 0.
	(expand_inline_function): Separate vars for old pattern and new insn.

	* expr.c (expand_call): Set TREE_ADDRESSABLE if call is not inlined.

Tue Apr 19 02:25:22 1988  Richard Stallman  (rms at frosted-flakes.ai.mit.edu)

	* Version 1.20 released.

	* tm-ns32k.h: Define new reg class GEN_OR_FLOAT_REGS
	so that GENERAL_REGS and FLOAT_REGS have a union.

	* tm-ns32k.h (GO_IF_LEGITIMATE_ADDRESS): Recognize a stack-push.
	* ns32k.md: Many constraints must now allow or reject pushes.
	Delete the special patterns for pushing.

Mon Apr 18 06:02:39 1988  Richard Stallman  (rms at rice-krispies.ai.mit.edu)

	* reload1.c (forget_old_reloads): For a multiword hard reg,
	forget old reloads for each word.

	* reload.c (find_reloads): Typo in calling push_replacement.

	* tm-ns32k.h (HARD_REGNO_MODE_OK): Failed to allow fp regs for SFmode.

Sun Apr 17 01:21:35 1988  Richard Stallman  (rms at frosted-flakes.ai.mit.edu)

	* tm-sequent.h (PRINT_OPERAND): Handle absolute integer memaddress.

	* ns32k.md: Add DImode push insns.  Add QImode and HImode push insns.
	Supply missing statement in movsf.

	* dbxout.c (dbxout_type): Don't contin before 1st field of struct.

	* dbxout.c (dbx_continue): Use DBX_CONTIN_CHAR instead of backslash.

	* loop.c (scan_loop): Ov vax, the "loop-entry jump" can be a return,
	in which case perhaps there is no label following it.
	Detect phoniness of loop before looking for that label.

	* decl.c (init_decl_processing): Builtin fn names start with `__'.

	* typecheck.c (shorten_compare): Warn about constant result only in
	cases like (char)x < 0x80, where old C compilers made it -0x80.

	* vax.md: All jbs/jbc/jlbs/jlbc patters with op0 in SImode
	must reject mode-dependent memory addresses.

	* recog.c (mode_independent_operand): Test for general operand
	that doesn't have a mode-dependent memory address.

	* varasm.c (assemble_function): ASM_DECLARE_FUNCTION_NAME, if def,
	is now responsible for outputting the function name as a label.

Sat Apr 16 05:02:55 1988  Richard Stallman  (rms at frosted-flakes.ai.mit.edu)

	* cccp.c (do_xifdef): Warn about punctuation or other junk in argument.
	Warn about no argument.  If pedantic, warn if arg starts with digit.
	If traditional, ignore all after first non-idchar and never warn.

Thu Apr 14 01:12:59 1988  Richard Stallman  (rms at frosted-flakes.ai.mit.edu)

	* integrate.c (expand_inline_function): Typo for addressable parms.

	* cse.c (insert_regs): Copying half a DImode into half of another
	does not make the two DImode regs equivalent.

	* recog.c (general_operand): Was failing to accept symbol_ref:SI
	when MODE arg was VOIDmode.

	* expr.c (preexpand_calls): For RTL_EXPR, do nothing.

	* decl.c (start_enum, build_enumerator): Remember default for next one
	as a tree node (so the high-half isn't lost in a negative one).

	* stor-layout.c (layout_{record,union}): Pay attn to initial value
	of TYPE_ALIGN in computing final alignment.
	(layout_union): Round size up to multiple of the alignment.

	* decl.c (finish_struct): Don't alter size after type is laid out.
	Instead, set TYPE_ALIGN before layout_type.

	* reload1.c (choose_reload_targets): Introduce reg_has_output_reload.
	If there are two separate reloads (one in and one out)
	for the same (hard or pseudo) reg, always set reg_last_reload_reg
	based on the output reload.

Wed Apr 13 21:26:16 1988  Richard Stallman  (rms at frosted-flakes.ai.mit.edu)

	* reload.c (find_reloads_address_1): Always barf if a "constant"
	register is autoincremented.

	* parse.y (structsp): suspend_momentary before start_enum;
	else some nodes made by start_enum might be momentary.

	* stmt.c (expand_start_case): New arg is nominal type for comparison
	(which is the promoted type of the index expression).
	(pushcase): Always convert VALUE to that nominal type
	before validating it.
	* parse.y (case stmt): Promote each case-value before pushcase.
	* typecheck.c (c_expand_start_case): Promote the index-expr
	to determine the nominal type, before get_narrower.

Wed Apr 13 12:43:08 1988  Chris Hanson  (cph at kleph)

	* tm-hp9k320.h: Define ASM_FORMAT_PRIVATE_NAME.  HPUX asm forbids
	`.' in identifiers, so use `___' (there is some danger in this choice).

Tue Apr 12 23:26:48 1988  Richard Stallman  (rms at frosted-flakes.ai.mit.edu)

	* local-alloc.c (block_alloc): Make 1 extra slot in regs_live_at.

	* stmt.c (optimize_bit_field): Function moved from reload1.c.
	When need to generate a SIGN_EXTEND or ZERO_EXTEND, make it a separate
	insn and use gen_extend_insn to make it.
	* optabs.c (gen_extend_insn): New fn, construct body of an insn
	to extend Y and store in X.

Mon Apr 11 19:20:57 1988  Richard Stallman  (rms at rice-krispies.ai.mit.edu)

	* decl.c (finish_decl): Error if static var has variable size.

	* parse.y (yylex): Warn if int const is out of range.

	* parse.y: New keyword __alignof.
	* typecheck.c (c_alignof): Given a type, return its alignment in bytes.

	* typecheck.c (c_sizeof{,_nowarn)): Don't return integer_one_node;
	use build_int to make sure we get something with type `sizetype'.

	* Support variable-sized structures (containing var-sized arrays).

	* stmt.c (assign_parms): Handle parms whose size varies.
	Use `memory_address' when constructing memrefs to args;
	no need to set `invalid_stack_slot'.
	Don't make a REG_EQUIV note for a scalar arg at variable offset.
	* stor-layout.c (genop, build_int): No longer `static'.

	* stor-layout.c (convert_units): Optimize ceil (ceil(x,2)*2, 4) etc.

	* stmt.c (expand_decl): Don't abort if var-sized object has init.
	Convert variable size from units of DECL_SIZE_UNIT to units of bytes.

	* expr.c (emit_push_insn): Arg ARGS_SO_FAR is now an rtx.
	Pay attention to ARGS_ADDR even if machine has push insns.
	(expand_call): Handle variable-sized arguments.
	If have any such, push entire arg-block in advance.
	Record each arg's offset during first loop and don't change args_size
	during the actual pushing loop; this way the actual pushing loop
	works regardless of arg-order if arg-block was pushed in advance.
	(push_block): Copy SIZE to reg unless it's a reg or constant.

	* expmed.c (expand_divmod): If converting CEIL_DIV to FLOOR_DIV,
	make new pseudo for incremented value, to help cse understand.

Sun Apr 10 00:07:45 1988  Richard Stallman  (rms at frosted-flakes.ai.mit.edu)

	* expr.c (emit_library_call): Two dumb bugs calling emit_call_1.

	* dbxout.c (dbxout_symbol): Handle case of (MEM (REG frameptr)).

	* cccp.c (skip_if_group): Ignore quote-chars if -traditional.
	(rescan): If -traditional, don't output a space for a comment.
	(handle_directive): If not -traditional, output a space for a comment.

Sat Apr  9 21:26:51 1988  Richard Stallman  (rms at frosted-flakes.ai.mit.edu)

	* decl.c (get_parm_types): `void' type is error, except as entire list.
	* parse.y (parmlist_1): `void,...' is error.

	* typecheck.c (pointer_int_sum, pointer_diff):
	Use an integer type with at least POINTER_SIZE bits.
	* expr.c (expand_expr, ARRAY_REF): Likewise.
	* tree.c (type_precision): Prec of a pointer is POINTER_SIZE.
	(convert_to_pointer): Directly convert any int w/ width==POINTER_SIZE.
	Other int types convert via an int of that width.
	(convert_to_integer): Pointers convert via an int of that width.

	* decl.c (init_decl_processing): Use INT_TYPE_SIZE, if def,
	to set width of `int' and `unsigned int'.
	(make_index_type): Give new type the width of a long int.

	* tm-m68k.h: Add new -mshort which controls TARGET_SHORT.
	* tm-m68k.h: Define INT_TYPE_SIZE depending on TARGET_SHORT.

Fri Apr  8 05:02:59 1988  Richard Stallman  (rms at frosted-flakes.ai.mit.edu)

	* typecheck.c (require_complete_type): Fix typo in detection of `void'.
	(build_function_call): Fix backward test to allow `void' values.

	* dbxout.c (dbxout_tags): Output each tag once even if type is defined.

	* m68k.md (movstrictqi): Reject addr-reg always, for both operands.

	* tm-vax.h (STRUCTURE_SIZE_BOUNDARY): Make this always 8, for BSD.
	* tm-ultrix.h: New file, overriding STRUCTURE_SIZE_BOUNDARY.
	[This change has been taken out; tm-ultrix.h is now equivalent to
	tm-vax.h.  I must have been confused when testing PCC.]

	* integrate.c (expand_inline_function): Don't let inline_target
	be nonzero in BLKmode.

	* decl.c (grokdeclarator): Const array parm becomes ptr-to-const.

Thu Apr  7 05:02:41 1988  Richard Stallman  (rms at frosted-flakes.ai.mit.edu)

	* genoutput.c (bcopy, bzero): Renamed to mybcopy, mybzero
	so variation in C library and config.h won't affect the results.
	* genrecog.c (bzero): likewise.
	* genextract.c (bcopy): Fn deleted; used only in a string constant. 

	* varasm.c (force_const_mem): Fix typo in arg decl.

	* toplev.c (compile_file): init_file with main_input_filename
	so dbx output doesn't lack N_SOL symbols.

	* cccp.c (rescan) [CPLUSPLUS]: Put out // comments as // comments.

Wed Apr  6 14:06:38 1988  Richard Stallman  (rms at frosted-flakes.ai.mit.edu)

	* expr.c: Delete SLOW_ZERO_EXTEND conditionals added March 3.
	Now that enums types can be unsigned, this isn't needed.

	* emit-rtl.c (emit_jump_insn): Handle SEQUENCEs.

	* genemit.c (gen_expand): Use emit_jump_insn, emit_label, emit_barrier
	when the insn rtl requires it.

	* m68k.md (subsi3): Prefer to avoid reverse-subtraction alternative.

	* stmt.c (expand_end_case): Let CASE_DROPS_THROUGH control what to
	emit after the table.
	* tm-vax.h: Define CASE_DROPS_THROUGH.

Tue Apr  5 15:47:10 1988  Richard Stallman  (rms at frosted-flakes.ai.mit.edu)

	* genemit.c (gen_exp): Handle vectors within exprs.

	* stmt.c (expand_end_case): Pass 5th arg (default_label) to gen_casesi.
	* m68k.md: Define casesi insn rather than tablejump insn.

	* cccp.c (skip_if_group): For validate_else, pass BP (end of cmd name).
	Don't call validate_else if do_else or do_endif will detect error.

	* Bug: inline fcns can refer to the return reg with a strict_low_part
	which confuses expand_inline_function.  Fix is to change return reg
	into inline_target *everywhere* except in or right after a call.
	* integrate.c (copy_rtx_and_substitute): Delete special case for SET.
	Replace return-value hard regs with INLINE_TARGET in all contexts.
	(expand_inline_function): special handling for insn after a CALL_INSN
	if it copies the function value out.
	Allow notes and stack adjust insns to intervene
	between the CALL_INSN and the value-copy.

	* expr.c (emit_call_1): New name for gen_call_1.

	* Bug: ({...}) insns were in wrong place for a subexpression
	after a sequence point, as in x ? y : ({...}).
	* tree.def: New tree-code RTL_EXPR holds a sequence.
	* expr.c (expand_expr): Handle RTL_EXPR by emitting the sequence.
	* stmt.c (expand_{start,end}_stmt_expr): Use emit_to_sequence
	to make a sequence from everything within the ({...}).
	(expand_{start,end,emit}_delayed_expr): Delete these functions.
	* parse.y (`for'-statements): Don't call them; nothing special needed.

	* parse.y (yylex): Handle syntax L"..." and L'...'
	(combine_strings): Handle wide strings being combined.
	* typecheck.c (digest_init): Reject wide string as init for char array.
	Allow it for an int array, but don't allow a narrow string.
	* decl.c (init_decl_processing): New var int_array_type_node.

	* parse.y: Define keyword `noalias'.
	* parse.h: Define RID_NOALIAS.

	* typecheck.c (compparms): Not all parmlists match an empty one;
	call `compparms1' to filter them.

	* decl.c (groktypename): Remove special case for `void' as parameter.
	(get_parm_types): Special case for list of one decl with type void.

	* decl.c (build_enumerator): Give enum constants the type `int'.
	Variable `current_enum_type' eliminated.
	(finish_enum): No need to repeat `fixup_unsigned_type'
	since the precision has not changed.
	* stor-layout.c (layout_type): Allow enum types to be unsigned.

	* emit-rtl.c (unshare_all_rtl): Unshare contents of all reg-notes.

	* parse.y (check_newline): filename is optional in #-lines.

Mon Apr  4 14:36:54 1988  Richard Stallman  (rms at frosted-flakes.ai.mit.edu)

	* typecheck.c (shorten_compare): When data type determines the value,
	eval the nonconstant arg anyway if it has side effects.
	(build_conditional_expr): When merging `foo *' with `void *',
	also allow `const void *'.  Result type has merged set of qualifiers.
	(qualify_type): Merge qualifiers of two types.

	* decl.c (get_parm_types): Store any tags defined in parmlist
	into `last_function_parm_types'.
	(store_parm_decls): Add those tags into the current binding level.

	* parse.y (parmlist, parmlist_or_identifier): Pass 0 to pushlevel;
	no binding levels in C should be transparent to tags.

	* 3b1 support:
	* tm-3b1.h: New file.

	* m68k.md: Add HPUX_ASM conditionals for shift-by-24-and-compare.
	In one of the dbra patterns, a HPUX_ASM conditional was backwards.
	(movhi) [SGS_3B1]: Define the LI... label as in MIT syntax.
	(addsi3) [SGS]: Syntax for base-displacement differs from MOTOROLA.
	(subsi3) [SGS]: likewise.
	(tablejump) [ASM_OUTPUT_CASE_LABEL]: Use 6, not 2, as displacement.
	This assumes ASM_OUTPUT_CASE_LABEL on 68k is used for a `swbeg'.

	* final.c (final): Use ASM_OUTPUT_CASE_LABEL (if defined) to output
	any CODE_LABEL followed by an ADDR_VEC or ADDR_DIFF_VEC.
	It has 4 args; 4th is the insn which is the ADDR_VEC or ADDR_DIFF_VEC.

	* tm-*.h for 68000 (PRINT_OPERAND_ADDRESS): For unscaled indexing in
	fetch from a branch table, use L and LI symbols as in the scaled case.

	* cccp.c: If SCCS_DIRECTIVE, define #sccs as no-op.

	* integrate.c (output_inline_function): Real start of function
	is FIRST_PARM_INSN, not FIRST_FUNCTION_INSN.

	* tree.c (build_string): String contents must be saveable (for
	inline fcn).

	* cse.c (cse_insn): Don't forget to set dest_hash_code when dest
	is a stack slot (and so its address is not being optimized).

	* emit-rtl.c (restore_reg_data_1): reg_rtx_no must be 1+ largest REGNO.

	* m68k.md (non-SImode bit-field insns): Change constraint to "o,d"
	so a nonoffsetable memref is handled by reloading its address
	but a register can still be handled.

	* toplev.c (main): Execute OVERRIDE_OPTIONS, if it's defined.

Sat Apr  2 00:55:21 1988  Richard Stallman  (rms at wheaties.ai.mit.edu)

	* expr.c (convert_move): Handle a SUBREG in direct truncation case.

	* cse.c (lookup_for_remove): Don't test machine mode of registers:
	Storing in (REG:SI 0) invalidates (REG:DF 0).

	* decl.c (pushlevel): New arg, nonzero means this level is for
	variables only, not for tags.  All calls changed.
	(lookup_tag): Even if THIS_LEVEL_ONLY, skip variables-only levels.
	(pushtag): Define it in the first non-variables-only level.

	* dbxout.c (dbxout_type): Undo Mar 29 change, in the DBX_NO_XREFS case.
	So now each struct or union will contain only nameless cross-refs
	to any others it uses.  The prior change is still in effect when
	DBX_NO_XREFS is not defined.

	* Implement variable array bounds for parameters.
	* decl.c (poplevel): Don't crash if DECL_NAME gives 0.
	* typecheck.c (comptypes): A variable array bound matches anything.
	* parse.y (parmlist): Call pushlevel, then pushdecl each parm as it
	is parsed; then poplevel after using get_parm_types to extract the
	results of the parmlist.
	* decl.c (get_parm_types): New function; reverse the current decls,
	put them in last_function_parms, and return a list of their types.
	(grokparms): Arg is now an idlist or a typelist.  Do nothing if latter.
	(push_parm_decl): New function, like {start,finish}_decl combined
	for a parm in a parmlist.

	* dbxout.c (dbxout_symbol): Ignore sym if its DECL_RTL is 0.

	* symout.c (symout_block_symbols): Ignore sym if type is error_mark.

Fri Apr  1 11:41:21 1988  Richard Stallman  (rms at wheaties.ai.mit.edu)

	* expr.c (prepare_call_address): New function; given two rtx's
	for function and context, copy the context to the right hard reg,
	put the function address in the right place and return an rtx for it.
	(gen_call_1): No longer do those things.  Delete args CONTEXT, PROTECT.
	(emit_library_call, expand_call): Call `prepare_call_address'.
	In between that and `gen_call_1', USE the parm registers.

	* tm-hp9k320.h (ASM_OUTPUT_*): Flush uses of output_arith_constant.

	* varasm.c (assemble_variable): Use ASM_FORMAT_PRIVATE_NAME
	to make the name for a local static variable.
	* tm-m68k.h, tm-vax.h, tm-ns32k.h, tm-spur.h:
	Define ASM_FORMAT_PRIVATE_NAME.  Use `.', not `$', to separate.

	* tm-m68k.h, tm-ns32k.h (FIX_FRAME_POINTER_ADDRESS):
	To refer to stack ptr, use stack_pointer_rtx, not a copy.

	* tree.c (build_real_from_string): Function deleted.
	* parse.y (yylex): Use build_real and atof.

	* parse.y: Allow string concatenation in arg of asm.

	* parse.y (yylex): Always allow `$' in ident, but warn if pedantic.
	* tm-vms.h: Delete DOLLARS_IN_IDENTIFIERS (no longer tested).

	* cccp.c (rescan, do_define, initialize_random_junk):
	Always allow `$', but warn if pedantic.
	(main): If -t, set `traditional'.
	(collect_expansion): If `traditional', no special handling for quotes
	and no whitespace added at end of macro definition.

	* expr.c (compare, compare1): Last arg to compare_constants
	must be a size in bits.

Thu Mar 31 00:31:52 1988  Richard Stallman  (rms at wheaties.ai.mit.edu)

	* expmed.c (expand_mult, expand_divmod, extract_fixed_bit_field):
	Reject function return register as target if may need to read it.
	(Reading the return register in an inline function doesn't work.)

	* decl.c (start_function): Delete extra arg to `error'.

	* emit-rtl.c (last_parm_insn): Delete this unused var.

	* make-cc1.com: New version from Kashtan.

	* integrate.c (expand_inline_function): Always set up an INLINE_TARGET
	for a function that returns a nonvoid nonBLK value.
	Since `pushlevel' and `poplevel' are called, must also call
	`expand_{start,end}_bindings' to make a pair of NOTEs.
	Let them handle USEs at end of scope of formal parameter copies.

	* integrate.c (expand_inline_function): In a new-style CALL_INSN,
	don't change the result reg into INLINE_TARGET.  Also,
	generate a move insn after the call only if INLINE_TARGET is non-0.

	* integrate.c (copy_decl_tree): Don't crash if DECL_RTL is 0.

	* integrate.c (copy_for_inline): Don't treat `return' rtx's specially.

	* stmt.c (expand_{start,end,emit}_delayed_expr):
	New fns to handle ({...})'s in expressions output not where parsed
	(such as third expression in a `for' statement).
	* parse.y: Call them to handle third expression in a `for'.

	* decl.c (duplicate_decls): Result is `inline' if either OLD or NEW is.

	* emit-rtl.c (emit_note): Return the note, or 0 if none.
	* stmt.c (expand_start_bindings): Use emit_note's value.

Wed Mar 30 12:48:22 1988  Richard Stallman  (rms at wheaties.ai.mit.edu)

	* obstack.c (_obstack_begin): If ALIGNMENT is 0, use default.
	Compute default for the alignment of a `double'.
	* obstack.h (obstack_{begin,init}): Pass 0 for the alignment.

	* flow.c (mark_used_regs): Discard multiple SUBREGs, STRICT_LOW_PARTs.

	** Call insns that return values are now represented as
	(set (reg ...) (call ...)), not just (call ...).

	* *.md: Define a "call_value" insn pattern.

	* tm-m68k.h, tm-vax.h, tm-ns32k.h: (NOTICE_UPDATE_CC):
	These insns invalidate the CC.

	* local-alloc.c (combine_regs): #if 0 special treatment of
	function value hard reg.
	(wipe_dead_reg): If hard reg, call reg_is_born so that the death
	will not be ignored.
	(reg_is_set): For reg that dies in this insn, mark it dead from now on
	and post_mark it live after this insn only.

	* combine.c (try_combine): Don't allow a call insn as I1 or I2.

	* loop.c (count_loop_regs_set): Move CALL_INSN into a separate
	clause.  When finding regs that are function addresses, handle
	both old and new format call insns.

	* flow.c (insn_dead_p): A SET that contains a CALL can't be dead.
	(volatile_refs_p): Any CALL constitutes a volatile ref.
	(mark_used_regs): If setting a reg from a volatile ref,
	treat it like setting a reg whose value will be used.

	* expr.c (gen_call_1): New arg VALREG if nonzero means generate
	a call_value insn which stores in VALREG.
	(expand_call): Use `hard_function_value' to make the VALREG arg
	unless expression has type `void'.

	* expr.c (emit_library_call): New 2nd arg OUTMODE is mode of result.
	(So can give gen_call_1 the proper value-register.)
	All callers (here and optabs.c) pass this arg.

	* cse.c (canon_hash): Consider all CALL rtx's volatile.

	** end of change in representation of call insns.

	* stmt.c (expand_asm_operands): Replace complex lvalues with
	SAVE_EXPRs here
	* typecheck.c (c_expand_asm_operands):  rather than here.

	* typecheck.c (pointer_diff): Fix typo preventing use of FLOOR_DIV_EXPR
	when dividing by power of 2.
	(build_c_cast): Flush unused locals.
	(store_init_value): likewise.
	(process_init_constructor): Delete unused 4th arg `for_static'.

	* toplev.c (fatal_io_error): Arg to fprintf was missing.

	* tm-m68k.h (LEGITIMIZE_ADDRESS): Flush extra arg to `emit_move_insn'.

	* decl.c: Delete some unused local vars.

	* stor-layout.c (layout_decl): `packed_size' now unsigned.

Tue Mar 29 14:47:07 1988  Richard Stallman  (rms at wheaties.ai.mit.edu)

	* Version 1.19 released.

	* loop.c (may_trap_p): Nonzero if X is a division that might trap.
	(scan_loop): If insn might trap, move only if loop always executes it.

	* dbxout.c (dbxout_type): Never output a cross-ref for
	a type whose definition is known.  Sun dbx won't accept them.

Mon Mar 28 12:34:46 1988  Richard Stallman  (rms at wheaties.ai.mit.edu)

	* tm-vms.h (TARGET_DEFAULT): Default is PCC alignment.
	The VMS compile driver controls the real default.

	* typecheck.c (c_expand_return): Don't ignore return value
	when its type is void.

	* final.c (final): Forget the condition codes after an `asm'.

	* typecheck.c (build_binary_op_nodefault): Warn about ptr < 0
	even if not pedantic, but not if traditional.

	* typecheck.c (convert_for_assignment): Don't warn about
	pointers volatile * vs nonvolatile * if -fvolatile specified.

	* decl.c (store_parm_decls): Among the old-style parm decls
	there can legitiately be other decls!  For example, if a parm
	is declared `enum {foo, bar} x;', there are decls for `foo' and `bar'.
	Don't let anything but a PARM_DECL match a parm name;
	pass all the other decls through into the lexical context.

	* jump.c (jump_optimize): When deleting stack adjusts before a
	jump-to-return, don't be fooled by intervening NOTEs.

	* tm-sequent.h (PRINT_OPERAND): Output (MEM (MEM (REG))) properly.
	* output-ns32k.c (print_operand_address): Output (MEM (REG))
	properly; output stack-pointer as `tos'.

	* flow.c (find_use_as_address): Reject uses within operand 0
	of a ZERO_EXTRACT or SIGN_EXTRACT reference.  It's hard to reload
	an autoincrement inside these because they can refer to multiple bytes.

	* reload.c (find_reloads): `o' in constraint means any memref
	(except auto-increment) is acceptable with reloading.
	Braino: Clear BADOP, not BAD.

	* reload.c (push_reloads): Use rtx_equal_p (via macro MATCHES)
	when considering reuse of an old reload.  Otherwise equal values
	may get reloaded into different registers, and two MEMs that
	originally matched may fail to match once reloaded.

	* m68k.md (sign_extract and zero_extract insns):
	If operand 0 is QI or HImode, don't allow register--only `o'
	(except in some bftst patterns where bitpos is < 8).
	And change `m' to `o' in all these patterns.

Sun Mar 27 15:32:54 1988  Richard Stallman  (rms at wheaties.ai.mit.edu)

	* expr.c (expand_expr, case CONSTRUCTOR):
	Not all aggregates are BLKmode; use the type's mode.

	* gcc.c: Pass -y* to ld.

	* cse.c (struct hash): New member `equivalence_only'.
	(insert): Initialize it.
	(cse_insn): Set it to 1 when src_eqv is inserted.
	When finding cheapest equivalent of something,
	skip elts that are marked with `equivalence_only'.

	* decl.c (duplicate_decls): Don't call `layout_type'
	if the type is `error_mark_node'.

	* decl.c (implicitly_declare): If decl will be file-scope,
	make sure it's a permanent node, and its associated data too.

Sat Mar 26 15:48:50 1988  Richard Stallman  (rms at wheaties.ai.mit.edu)

	* flow.c (insn_dead_p, mark_used_regs): Storing a reg via a
	ZERO_EXTRACT or SIGN_EXTRACT is dead if the reg isn't needed afterward.

	* stmt.c (expand_start_function): Set current_function_name
	to the name of this function.
	* tm-vms.h (MAYBE_VMS_FUNCTION_PROLOGUE): Use current_function_name.

	* expr.c (expand_increment): A SUBREG in op0 can also a be a copy.

	* ns32k.md: Correct range of args for `adjspb' insn.
	Use `adjspw' when appropriate.
	New pattern for `lprd' insn.
	Change some `const_int' predicates to GET_CODE tests.

	* expr.c (expand_call): Eval function before copying args to hard regs.

	* tree.c (make_node, copy_node): Don't get length of a REAL_CST
	from tree_code_length.

	* expmed.c (extract_fixed_bit_field): In memory-word case, abort
	if tm.h parms say word could fail to be well-aligned.
	* tm-ns32k.h: Define STRUCTURE_SIZE_BOUNDARY so they will be aligned.
	* tm-vax.h: Define STRUCTURE_SIZE_BOUNDARY since Unix CC seems to.

	* tm-vms.h (CPP_PREDEFINES): Predefine __GNU__ and __GNUC__.

Fri Mar 25 13:23:27 1988  Richard Stallman  (rms at wheaties.ai.mit.edu)

	* gcc.c (main): Handle SIGHUP, SIGTERM.

	* expmed.c (expand_bit_and): Don't clobber OP1 when trying andcb.

Thu Mar 24 21:59:09 1988  Richard Stallman  (rms at wheaties.ai.mit.edu)

	* stmt.c (assign_parms): Get size of BLKmode local from the type,
	not the mode.
	(expand_function_start): Init frame_offset before calling assign_parms.

Wed Mar 23 23:50:37 1988  Richard Stallman  (rms at wheaties.ai.mit.edu)

	* expr.c (emit_push_insn): When making a move insn,
	go via emit_move_insn; else fails to put constants into memory.

Tue Mar 22 15:45:10 1988  Richard Stallman  (rms at wheaties.ai.mit.edu)

	* expr.c (expand_increment): Flush special case for register_operand;
	actually call the predicate whatever it is.

	* genemit.c (gen_expand): Make `operands' a local variable,
	not a global static one, in the `gen_...' function.
	Avoids lossage when one `gen_...' fcn calls another indirectly.

	* genoutput.c (output_epilogue): Don't give printf a null string.

Mon Mar 21 15:41:42 1988  Richard Stallman  (rms at wheaties.ai.mit.edu)

	* expmed.c (store_bit_field) [HAVE_insv]:
	Force VALUE1, not VALUE, into a register.

	* expmed.c (store_fixed_bit_field): Width of mask for clearing
	the bit-field depends on mode of OP0.

	* ns32k.md (branch and store-flag insns):
	Test cc_prev_status, not cc_status.

	* expmed.c (extract_bit_field): Delete unused var `omode'.

	* dbxout.c (dbxout_type, dbxout_tag): Use the main variant
	of the specified type.

	* reload.c (find_reloads): When an alternative succeeds without reload,
	initialize goal_alternative_matches from this_alternative_matches.

Sun Mar 20 17:58:00 1988  Richard Stallman  (rms at wheaties.ai.mit.edu)

	* tm-sun*.h: Don't predefine `m68k'; Sun's compiler does not.

Fri Mar 18 13:48:29 1988  Richard Stallman  (rms at wheaties.ai.mit.edu)

	* reload.c (find_reloads): Set up goal_alternative_matches
	*after* the label `finish'.

	* stmt.c (assign_parms): GET_MODE_SIZE needs a mode, not an rtx.

	* recog.c (constrain_operands): Set global var `which_alternative'
	to indicate which of the alternatives this insn matches.

	* typecheck.c (commontype): long int vs unsigned int
	gives long unsigned, if long and int are the same width.

Thu Mar 17 15:39:45 1988  Richard Stallman  (rms at wheaties.ai.mit.edu)

	* emit-rtl.c, tree.c: include local version of varargs.h.

	* decl.c (start_function): Clear TREE_EXTERNAL and set TREE_STATIC
	here rather than in finish_function.  Affects the case of
	   `extern foo ();  static foo (a) {...}'

	* gcc.c: Handle -fnostdinc and -fnostdlib switches in specs.

	* cccp.c (main): Handle -fnostdinc: don't put default dirs
	on the chain to be searched.

	* cccp.c (error, warning, error_with_line): No longer print
	charpos within file; lineno is enough.

Wed Mar 16 16:56:36 1988  Richard Stallman  (rms at wheaties.ai.mit.edu)

	* expmed.c (expand_inc, expand_dec): Handy new subroutines
	to generate x+=y or x-=y, given x and y as rtl.
	* expmed.c (expand_divmod): Use them instead of gen_{add2,sub2}_insn.

	* expr.c (emit_move_insn): Return the move insn emitted.
	Eliminate the code here to move a DImode or DFmode by pieces.

	* emit-rtl.c (emit_insn): Return-value was wrong if emit_to_sequence;
	cannot use `last_insn' in that case.

	* regclass.c, stupid.c, local-alloc.c, global-alloc.c:
	Some vars of type HARD_REG_SET should be `register' only
	if HARD_REG_SET is a macro (ie a scalar).

	* expr.c (move_block_from_reg): New function, converse of
	move_block_from_reg.
	* stmt.c (assign_parms): If a BLKmode arrives in regs,
	copy to a stack slot using move_block_from_reg.

Tue Mar 15 17:33:22 1988  Richard Stallman  (rms at wheaties.ai.mit.edu)

	* regclass.c (regclass): Don't convert to two-operand insns
	unless optimizing.

	* varasm.c (decode_rtx_const, const_hash_rtx): Fix typos.

	* stmt.c (fixup_var_1): Don't alter insn moving VAR to or from
	a subreg of a register.

	* cse.c (fold_rtx): Don't fold if result is not LEGITIMATE_CONSTANT_P.
	Construct all results in new local variable NEW; then test that
	and decide whether to return it or the original rtx.

	* cse.c (cse_insn): When SRC_EQV is non-0 but set[0] has been
	cleared, don't insert SRC_EQV in hash table.

	* All insns emitted by a define_expand become part of the SEQUENCE:
	* SEQUENCE now contains a vector of insns, not of bodies.
	* insn-emit.c (add_insn): If `emit_to_sequence' nonzero, add the
	insn to a separate chain, `sequence_first_insn'.
	(gen_sequence): Take everything on that chain and make a SEQUENCE.
	(emit_insn): Handle SEQUENCE differently since elts are now insns.
	(emit_insn_{before,after}): Handle SEQUENCE.
	(classify_insn): #if 0.
	* genemit.c (gen_expand): emit all the insns, then call gen_sequence
	to make the return value.
	Define two macros DONE and FAIL for use in a DEFINE_EXPAND:
	Use DONE to inhibit emission of the pattern of the DEFINE_EXPAND.
	Use FAIL to make the gen_... function return 0.

Mon Mar 14 12:47:28 1988  Richard Stallman  (rms at wheaties.ai.mit.edu)

	* expr.c (expand_expr): Extend the don't-sign-extend-enums hack
	to COMPONENT_REF.  (See 3 March.)

	* tm-*.h (FUNCTION_ARG, etc.) New argument NAMED
	is nonzero for a named arg, zero for an anonymous extra arg.
	* expr.c (expand_call): Pass 1 for NAMED if appropriate.
	* expr.c (emit_library_call): Pass 1 for NAMED.
	* stmt.c (assign_parms): Pass 1 for NAMED.

	* cccp.c: Test __GNUC__, not __GNU__.

	* integrate.c (copy_and_substitute_rtx):
	Replacing a MEM parm with the parm value, convert mode if mismatch.
	Always use VOIDmode when generating SETs.
	Take heed of FIRST_PARM_OFFSET and distinguish arg-pointer
	from frame-pointer when they are different.
	(expand_inline_function): Handle (RETURN) insns, by creating a
	return_label which is output after the integrated code.

	* parse.y (yylex): Condition for ignoring `inline' was backwards.

	* flow.c (mark_used_regs): Ignore STRICT_LOW_PART, so that
	an insn that sets STRICT_LOW_PART (and its source values) may be dead.
	(propagate_block): Always pass 1 for strict_low_ok to insn_dead_p.

	* optabs.c (emit_unop_insn): Don't make a REG_RETVAL note.
	Change above deletes dead STRICT_LOW_PART stores without one.

	* optabs.c (expand_binop, expand_unop): If the library address
	is to be put in a pseudoreg, do it here, and make the REG_RETVAL
	note point after that.

	* expr.c (emit_library_call): Never defer stack-pops.
	Deletion of the library call by flow.c loses if they are deferred.

	* cse.c (cse_insn): Handling of 68k's zero-extend was broken:
	it made the actual source and the REG_EQUAL source equivalent.
	* If dest is a STRICT_LOW_PART, ignore the actual source and use
	the REG_EQUAL source in its place.  src_eqv's mode may be different
	from src's, so use proper mode in lookups or inserts for src_eqv.
	* Don't forget to set src_eqv_elt if src_eqv already has an elt.
	* On use_related_value for src_eqv, use src_eqv_elt.

	* toplev.c (main_input_filename): Name of file mentioned in first
	#-line in the input.
	(compile_file): Pass it to dbxout_init as 2nd arg.
	* dbxout.c (dbxout_init): Use 2nd arg to make the N_SO symbol.
	* parse.y (check_newline): Store main_input_filename.

	* expr.c (move_block_to_reg): New function, copies a MEM:BLK
	to consecutive registers.
	(use_regs): New function to emit a USE for each reg in a series.
	(expand_call): Use the two new functions when a precomputed BLKmode
	arg is passed entirely in regs.
	(emit_push_insn): Use move_block_to_reg when PARTIAL > 0.
	Also, don't subtract USED from SIZE twice.
	Use plus_constant to add ARGS_SO_FAR so can use indexing on stack ptr.

	* varasm.c (assemble_integer_zero): Use rtx 0, not tree 0,
	to go with prev change in ASM_OUTPUT_INT.

Sun Mar 13 01:16:17 1988  Richard Stallman  (rms at wheaties.ai.mit.edu)

	* varasm.c (const_hash, compare_constant_1, record_constant_1):
	Handle NOP_EXPR and CONVERT_EXPR in constant expressions.

	* optabs.c (expand_binop, expand_unop): When widening operands,
	those with VOIDmode (like CONST_INT) may be left alone.

Sat Mar 12 01:09:24 1988  Richard Stallman  (rms at wheaties.ai.mit.edu)

	* varasm.c (assemble_variable): When making a .comm or .lcomm,
	round size up to multiple of BIGGEST_ALIGNMENT.

	* obstack.c (_obstack_newchunk): Eliminate fencepost causing copying
	to access the word past the end of the existing object.

	* tm-vax.h, tm-ns32k.h: Define {INIT_,}CUMULATIVE_ARGS
	and upgrade FUNCTION_ARGS for new calling convention.

	* gcc.c: If -O, define __OPTIMIZE__.
	(do_spec_1): %c now scans SIGNED_CHAR_SPEC: define __CHAR_UNSIGNED__
	when appropriate whether or not it is the default.

Fri Mar 11 16:49:25 1988  Richard Stallman  (rms at wheaties.ai.mit.edu)

	* parse.y: Define YYDEBUG.

	* rtl.c (rtx_unstable_p): New function, same as old rtx_varies_p.
	* explow.c (stabilize): Use rtx_unstable_p.
	* rtl.c (rtx_varies_p): Ignore `unchanging' (undoing previous change
	in this function) because `unchanging' doesn't enable cse to compare
	the value with any particular constant value.
	* rtl.c (insn_store_addr_varies_p): Delete, since not used.

	* hard-reg-set.h (COPY_HARD_REG_SET, etc.) non-scalar case:
	Rename and rearrange temp variables to avoid name conflicts with args.

	* regclass.c (reg_class_record): Don't smash class to GENERAL_REGS
	and don't exit prematurely, when `r' or `g' is seen.  Must merge
	GENERAL_REGS with previously determined desired class.

	* expr.c (expand_call) [no PUSH_ROUNDING]: When pushing the arg
	block, try to reuse some of the pending_stack_adjust.

	* cse.c: qty_const can now hold values (PLUS frame_pointer integer).
	Effect is that storing into a structure doesn't invalidate
	mem refs to scalar stack variables via addresses in registers.
	(insert): Load such values into qty_const, like true constants.
	(fold_rtx): Ignore qty_const if it isn't really a constant.

	* expr.c (expand_expr) VAR_DECL: Copy DECL_RTL before calling
	change_address, so it isn't permanently clobbered.

	* stmt.c (fixup_var_refs_1): Make sure the stack slot address
	is valid by calling fixup_stack_1 each time it is substituted.

	* stmt.c (fixup_stack_1): Return the altered rtx.
	If it's a MEM in the stack, return a copy of it.

	* stmt.c (fixup_stack_slots): #if 0.
	* stmt.c (expand_finish_function): Don't call fixup_stack_slots
	because fixup_stack_1 is called elsewhere when necessary.

	* reload.c (find_reloads_address): New arg is location of the MEM
	whose address is being reloaded.  So we copy the MEM if it
	is one that can be shared.  New arg 0 means no need to copy the MEM.
	All callers pass the new arg.

	* stmt.c (assign_parms): Determine parm stack-size from
	the DECL_ARG_TYPE, not from the TREE_TYPE.
	Else loses when parm is declared `float' but passed as `double'.

	* emit-rtl.c (make_safe_from): Constants are already safe.
	Use proper machine mode for temp reg when needed.

Thu Mar 10 14:35:14 1988  Richard Stallman  (rms at wheaties.ai.mit.edu)

	* expr.c (emit_push_insn): Don't pass wrong type to plus_constant
	(case where there is no PUSH_ROUNDING).

	* expr.c (expand_call): Round partial[i] down to multiple of
	PARM_BOUNDARY before subtracting it from arg size on stack.
	Compute these sizes just once and keep them in vector `arg_size'.
	* expr.c (emit_push_insn): Handle `partial' uniformly, in accord
	with this new convention for how it affects the stack size.
	* stmt.c (assign_parms): Round NREGS down to PARM_BOUNDARY likewise.

	* obstack.h (obstack_free macro) [Not __GNUC__ but __STDC__]:
	Don't cast result of (obstack_free) to (int); just ignore it.

	* reload.c (find_reloads): Initialize operand_reloadnum.

	* optabs.c (emit_unop_insn): New argument CODE, used to make
	a REG_EQUAL note from operand OP0 if more than one insn results.
	Also a REG_RETVAL note.
	* expr.c (convert_move): Pass CODE arg to emit_unop_insn.
	* flow.c (propagate_block): Use insn_dead_p to decide whether
	to handle a REG_RETVAL note by skipping some insns.
	Always pass 1 for STRICT_LOW_OK for an insn that has a REG_RETVAL note.
	Handle case where REG_RETVAL points at an insn that's deleted.
	* flow.c (insn_dead_p): New operand STRICT_LOW_OK says an insn
	that sets STRICT_LOW_PART may be considered dead.

	* expr.c (expand_expr): Once again canonicalize X-C to X+(-C).
	Change on March 1 made it stop doing this.

Wed Mar  9 01:25:35 1988  Richard Stallman  (rms at wheaties.ai.mit.edu)

	* loop.c (move_movables): Don't always mark the moved reg
	as equivalent to a constant value: not if it is being cleared
	to zero-extend something or if it is used outside the loop.

	* expr.c (move_by_pieces_1): Finish last change.

	* stmt.c (assign_parms): Update stack_args_size properly.
	Figure FIRST_PARM_OFFSET when making the stack mem refs.

	* cse.c (insert): Build the related_value lists in the opposite order
	so that the oldest element in the chain is the one that follows
	the most basic element.

	* expr.c (expand_expr): COMPONENT_REF case: criterion for
	converting the the result is if MODE1 (its mode of arrival) isn't
	a mode we want.

	* toplev.c (rest_of_compilation): Fix typo setting TREE_ASM_WRITTEN.

Tue Mar  8 13:18:37 1988  Richard Stallman  (rms at wheaties.ai.mit.edu)

	* cse'ing of library calls.

	* expr.h: type `optab' is now a ptr to a struct.
	The old contents are now the `handlers' element.
	The `code' element gives the RTL code for the kind of expression
	this optab makes (PLUS for add_optab, etc.)
	Every var formerly declared `struct optab *' is now just `optab'.

	* optabs.c (init_optab, init_optabs): New function to init an optab
	and set its `code'.  Used in init_optabs.

	* optabs.c (expand_binop, expand_unop): Use the `code' field
	to add a REG_EQUAL note to the insn that copies a libcall's
	value into a pseudo.  Also a REG_RETVAL note pointing at the
	first insn for setting up args for the call.

	* cse.c (cse_insn): Process REG_EQUIV and REG_EQUAL datum almost like
	another set-src; put the actual src into the equivalence class of that.

	* flow.c (propagate_block): If a dead insn has a REG_RETVAL reg-note,
	either ignore or delete all the insns back to the insn the REG_ARG
	note points to.

	* local-alloc.c (block_alloc): Don't refrain from allocating a
	"constant" register if the constant value isn't ok for an immediate op.


	* dbxout.c (CONTIN): If DBX_CONTIN_LENGTH is <= 0, do nothing.

	* cccp.c: Extra default include dirs for C++.
	* cccp.c (main): For -M, strip dirs from object file name.

	* rtl.c (find_reg_note): New function.

	* expmed.c (store_fixed_bit_field): Don't AND with VALUE
	if VALUE's original mode had no more bits than we want.

	* expr.c (emit_library_call): Use varargs.

	* integrate.c (copy_and_substitute_rtx): Recognize arg_pointer_rtx
	and translate it just like frame_pointer_rtx.

Mon Mar  7 00:48:33 1988  Richard Stallman  (rms at wheaties.ai.mit.edu)

	* expmed.c (extract_fixed_bit_field):
	Shift counts were wrong for narrow MODE in signed case.
	Do the sign-extending shifts in the narrowest mode possible.
	Reduce big-endian case to little-endian case.
	Delete SLOW_ZERO_EXTEND conditional.

	* Implement constants in memory for RISC machines
	with limited abilities for immediate args and constant addresses.

	* genoutput.c (output_epilogue): Empty predicate-name
	is output as 0 in insn_operand_predicate.

	* expr.c (expand_expr): Change 4th arg to an `enum expand_modifier'
	Value EXPAND_SUM corresponds to old nonzero 4th arg.
	Value EXPAND_CONST_ADDRESS means ok to return an invalid MEM
	whose address is a constant.  Changes for this case in ADDR_EXPR,
	COMPONENT_REF and ..._DECL.

	* varasm.c (output_arith_constant): Function deleted.
	* tm-*.h: (ASM_OUTPUT_{INT,SHORT,CHAR}): 2nd arg is now an RTX
	and output it using `output_addr_const'.
	* varasm.c (output_constant): Change uses of those macros.

	* varasm.c (init_const_rtx_hash_table): Initialize constant pool
	for a new function.  Called from `expand_function_start'.
	* varasm.c (force_const_mem): Turn a constant rtx into a MEM rtx
	which refers to the constant pool.  Other new subroutines too.
	(force_const_double_mem): Use force_const_mem to make the MEM.
	(immed_real_const): No longer record the REAL_CST node in the rtx.

	* explow.c (force_reg): If arg is a constant and not legitimate,
	put it in the constant pool with force_const_mem.
	Mark the register as equivalent to the constant value.
	* expr.c (emit_move_insn): Likewise.
	* explow.c (break_out_mem_refs): Use force_reg to put into a reg.
	* explow.c (memory_address): Likewise.
	* expr.c (expand_expr): ADDR_EXPR case: likewise.

	* expr.c (expand_call): Do force_reg on each register-operand
	so it will go through a pseudo and can be cse'd.

	* recog.c (immediate_operand, nonmemory_operand, general_operand):
	For constant operands, use LEGITIMATE_CONSTANT_P to decide value.
	* tm-*.h: Define LEGITIMATE_CONSTANT_P.

	* reload1.c (reload): Invalid constants can't go in reg_equiv_constant.

Sun Mar  6 22:49:06 1988  Richard Stallman  (rms at wheaties.ai.mit.edu)

	* reload.c (push_reloads): If IN occurs within OUT,
	don't reuse an existing input-only reload.  Otherwise would lose on
	(set (mem (plus R C)) (plus R C1)) if R is available in a spill reg.

	* reload1.c (choose_reload_targets): Don't choose an inherited
	reload register that's in use for another reload.
	Without this, above change doesn't have an effect.

	* Implement the `unchanging' flag in MEM and REG rtx's.
	Also simplify code with a new subroutine `change_address'.

	* emit-rtl.c (change_address): Return new memory ref like an old
	one but with specified mode and address.
	* expmed.c (extract{,_split,_fixed}_bit_field): Use change_address.
	(store{,_split,_fixed}_bit_field): Likewise.
	* expr.c (store_expr, expand_expr): Likewise.

	* expr.c (move_by_pieces): Args now memrefs, not addresses.
	Eliminate the FROM_VOL and TO_VOL args since the memrefs indicate.
	Change the structure `struct move_by_pieces' similarly.
	(move_by_pieces_1): Same changes; use change_address.
	(emit_block_move, emit_push_insn): Calls to move_by_pieces changed.

	* integrate.c (copy_rtx_and_substitute): Use change_address;
	handle ->unchanging field.

	* rtl.c (rtx_varies_p): Regs or memrefs with ->unchanging don't vary.
	(copy_rtx): Perserve ->unchanging.
	(print_rtx): Print ->unchanging as /u.

	* stmt.c (expand_decl): Set ->unchanging on `const' decls.
	(fixup_memory_subreg): Use change_address.
	(assign_parms): Record in the rtl which parms are volatile or const.

	* varasm.c (assemble_variable): Set ->unchanging on `const' decls.
	(output_constant_def): Always set ->unchanging for constant refs.

	* cse.c (canon_hash): Don't treat a MEM as "in memory"
	if its ->unchanging bit is set.

	* loop.c (invariant_p): A REG or MEM with ->unchanging is invariant
	(for a MEM, the address must be invariant).

Sat Mar  5 13:22:11 1988  Richard Stallman  (rms at wheaties.ai.mit.edu)

	* genconfig.c (walk_insn_part): DO consider MATCH_DUPs
	when calculating MAX_RECOG_OPERANDS.
	(gen_expand): define_expand is now different from define_insn.
	Compute max # SETs or CLOBBERs for any one sub-insn in a define_expand,
	instead of summing them all.  And don't count the MATCH_DUPs at all.

	* genemit.c (max_operand_1): Record largest opno in a MATCH_DUP
	separately from largest in a MATCH_OPERAND.
	(gen_expand): An operand # with only MATCH_DUPs gets
	a local variable in the gen_ function we output.

	* integrate.c (save_for_inline): Delete vestige of NOTE_INSN_IS_DECL.

	* cse.c (invalidate): Handle subregs.
	(cse_ins, invalidate_from_clobbers): Do call `invalidate' for subregs.
	(insert_regs): When assigning one subreg from a like one,
	make the two regs equivalent.
	(cse_insn): Do call insert_regs when dest is a subreg.

	* expr.c (expand_call): Precompute all args going via hard regs
	since even arithmetic could require a library call.

Fri Mar  4 15:48:17 1988  Richard Stallman  (rms at wheaties.ai.mit.edu)

	* stor-layout.c (layout_parms): Function deleted.
	* stmt.c (expand_function_start): Don't call it.

	* stmt.c (assign_parms):
	stack_args_size counts size of args so far passed on stack.
	Use PARM_BOUNDARY when counting it; derive stack offsets from it.
	Set current_function_args_size from it.

	When an arg is split between regs and stack, make stack space
	for the rest of it, and count it.
	In a varargs function, push the last arg onto the stack.
	When an arg is passed in regs alone, don't remember a stack slot
	for it, and if it needs one, use assign_stack_local.

	Set DECL_OFFSET to the stack offset, or -1 if parm came in regs.

	* expr.c (expand_call): Anonymous args of a varargs function
	are always passed on the stack.

	* varasm.c (force_const_double_mem): Copy the MEM rtx
	if it may need to be smashed by reloading.

	* genemit.c (gen_expand): define_expand must have nonempty pattern
	even though, due to `return' statements in the code-to-run,
	that pattern may not be used to generate code.

Thu Mar  3 17:08:43 1988  Richard Stallman  (rms at wheaties.ai.mit.edu)

	* expr.c (expand_expr): If supposed to sign-extend an enum
	which is never negative, zero-extend instead (unless SLOW_ZERO_EXTEND).
	(store_expr): Likewise.

	* reload.c (find_reloads): 'm' for CONST_DOUBLE: clear BADOP, not BAD.
	After force_const_double_mem, do find_reloads_toplev on the MEM.
	(find_reloads_address): Handle constant addresses (on machines
	that don't allow them).

	* final.c (set_current_gdbfile): New fn, get the gdbfile structure
	for specified filename.
	(output_source_line): Use set_current_gdbfile for the file.
	* varasm.c (assemble_variable): Call set_current_gdbfile
	for the declaration's source file, so GDB won't ignore the file.

	* varasm.c (force_const_double_mem): Build a new REAL_CST node
	and get its data type from the machine mode of the CONST_DOUBLE.
	(immed_real_const): Don't save the REAL_CST tree node.
	* typecheck.c (get_floating_type): Return float type for given mode.

	* integrate.c (expand_inline_function): Ignore the (USE (REG...))
	(for the return-register) at the end of the inline function.
	After a CALL_INSN, imagine the (SET (REG ...) (REG ...)) for
	the return-register if the return-register isn't explicitly used.

Wed Mar  2 22:08:49 1988  Richard Stallman  (rms at wheaties.ai.mit.edu)

	* typecheck.c (build_array_ref): Do default_conversion on INDEX.

Tue Mar  1 15:49:34 1988  Richard Stallman  (rms at wheaties.ai.mit.edu)

	* expr.c (expand_call): Always get a SYMBOL_REF for a fixed function.
	If may be alloca, set may_call_alloca.
	(gen_call_1): Never put a SYMBOL_REF through `memory_address';
	but if function cse is wanted, just copy it to a register.
	If NO_FUNCTION_CSE is defined, never do function cse.

	* expr.c (init_expr): New function, does init_queue and inits
	other things.

	* stmt.c (expand_function_start): Call init_expr, not init_queue.

	* optabs.c (expand_binop): Don't clobber OP0 and OP1
	if may call delete_insns_since later.

	* expr.c (emit_library_call): PUSH_ARGS_REVERSE test was backwards.

	* cse.c (cse_insn): Do canon_reg on the size and position operands
	in a ZERO_EXTEND or SIGN_EXTEND that is a destination.

	* tm-*.h: Define SLOW_BYTE_ACCESS.
	* expmed.c ({store,extract}_fixed_bit_field):
	If SLOW_BYTE_ACCESS, get/set all bit fields from full words.

	* combine.c (subst): Simplify
	(zero_extend:SI (subreg:QI (zero_extract ...))).
	* combine.c (simplify_and_const_int): Simplify
	(and (zero_extract ...) (const_int ...)).

	* local-alloc.c (qty_compare{,_1}): Test of qty_phys_sugg was reversed.
	(combine_regs): If one pseudo gets two suggested hard regs
	(one at birth and one at death), prefer the one from birth
	unless we see at death that it's no good.

	* expr.c (expand_expr): Ignore sum_ok unless mode is Pmode.
	Don't use force_operand unless sum_ok is set.

Mon Feb 29 19:23:50 1988  Richard Stallman  (rms at wheaties.ai.mit.edu)

	* expr.c (emit_move_insn): When a CONST_DOUBLE needs moving
	by pieces, force it into memory, unless it is dconst0_rtx,
	in which case each piece is const0_rtx.
	(emit_push_insn): Likewise.  Also, write code for pushing a
	non-BLK mode which has no "mov" insn defined, but only
	in the case where there is no PUSH_ROUNDING.

	* expr.c (do_tablejump): Put constant term in address last.

	* toplev.c (xrealloc): On error, call fatal instead of abort.

	* optabs.c (emit_cmp_insn): If genning from tst_optab,
	make the operand fit its predicate.

	* optabs.c (expand_float): Don't adjust stack between cmp and jump.

	* optabs.c (expand_binop): Recursive calls can return 0; handle
	that event by deleting any preparatory insns.  Also don't smash
	TARGET when this happens.

	* reload.c (push_reload): If IN != *INLOC, set reload_nocombine.
	(combine_reloads): Don't combine an input reload with reload_nocombine.

	* jump.c (jump_optimize): Don't delete stack adjusts unless
	EXIT_IGNORE_STACK is nonzero.
	* expr.c (clear_pending_stack_adjust): Likewise.
	* tm-*.h: When EXIT_IGNORE_STACK is defined, give it `1' as defn.

	* expr.c (expand_call): Initialize args_size.
	Don't push a block if args_size is 0.
	(emit_library_call): Don't include register-args (or reg-parts
	of partial ones) in args_size.
	Don't push a block if args_size is 0.

	* expr.c (expand_expr): For DECLs in memory, check the address
	validity with memory_address_p, and preserve volatility info.

	* stmt.c (expand_function_end): fixup_gotos needs 2 args.

	* jump.c (mark_jump_label): If INSN is 0, don't set its JUMP_LABEL.
	Inside an ADDR_VEC or ADDR_DIFF_VEC, recurse with 0 for INSN.

	* varasm.c (force_const_double_mem): Must zero TREE_CST_RTL
	before output, or nothing will happen.

Sun Feb 28 01:08:53 1988  Richard Stallman  (rms at wheaties.ai.mit.edu)

	* optabs.c (emit_unop_insn): Generate and emit an insn
	given the insn-code and the two operands (one out, one in).
	Can move the operands into registers when needed for various
	reasons.
	* expr.c (convert_move): Use emit_unop_insn for outputting the
	conversion insns.

	* expr.c (emit_library_call): Use arg's nominal mode to choose
	a reg to pass it in, not actual mode (which can be VOIDmode).

	* insn-emit.c (emit_insn): If arg is empty SEQUENCE, do nothing.

	* genemit.c (gen_expand): Scan the rtl-pattern for predicates
	and machine modes of the operands.

	* m68k.d (dbra patterns): Add HPUX_ASM conditionals.

	* rtl.c (reg_mentioned_p): Use "equal", not "eq", when
	REG isn't a register.
	* reload.c (combine_reloads): Verify not reg_mentioned_p even if
	the input reload's value isn't a register.

	* reload.c (operands_match_p): If successful and 2nd arg
	has a pre-increment that matches a non-increment, return 2.

	* reload1.c (reload): At end, clobber a pseudoreg to a MEM
	even if it's an out-of-range address.  It doesn't affect the
	assembler code in this case, but it makes the dbx output correct.

	* recog.c (constrain_operands): When operands_match_p returns 2,
	in the constraint alternative that is ultimately successful,
	copy the output operand from the input that it matched
	so that the assembler insn that is output shows the pre-increment.

Sat Feb 27 15:16:47 1988  Richard Stallman  (rms at wheaties.ai.mit.edu)

	* combine.c (subst): When optimizing
        (set (zero_extract ...) (and (zero_extract ...) const))
        must arrange to have 1's, not 0's, shifted into low bits of const.

	* decl.c (grokdeclarator): When return-type defaults to int,
	don't warn, just set warn_about_return_type.
	(start_function): See that variable and warn, after starting function.

	* toplev.c (count_error): No longer print newline if not quiet.
	(report_error_function): If not quiet, print a newline if
	printing anything, and don't print the function name.

	* reload1.c (choose_reload_targets):
	Fix the loop that checks for consecutive available spill regs.
	Set `have_groups' nonzero if any reload wants a group.
	In that case, for non-group reloads, prefer a reg that can't be in
	group, or else one that has only one available neighbor.

	* reload1.c (reload): Find separately the max need for each class
	for single registers, groups of registers, and single registers
	not in any group.  (The last one counts non-group reloads
	in insns that have at least one group reload.)
	Then make sure enough of each kind are found.

	* expmed.c: Now needs flags.h and recog.h (therefore insn-config.h).

	* expmed.c (store_bit_field):
	Delete redundant protect_from_queue.
	Force VALUE out of memory if -fforce-mem.
	If insv's predicate for VALUE wants a register, put it there.

	* expmed.c (extract_bit_field):
	Force TARGET out of memory if -fforce-mem.
	If insv's predicate for TARGET wants a register, put it there.

Fri Feb 26 00:12:48 1988  Richard Stallman  (rms at wheaties.ai.mit.edu)

	* reload1.c (eliminate_frame_pointer): Don't check for pushes
	unless PUSH_ROUNDING is defined.

	* reload.c: Don't define REG_OK_FOR_{INDEX,BASE}_P
	(since the tm file is supposed to do it).

	* expr.c (emit_push_insn, expand_call):
	Don't use PUSH_ROUNDING if it's not defined.

	* expr.c (preexpand_calls): Do nothing for constants and decls.

	* expr.c (expand_call, emit_library_call): When PUSH_ROUNDING
	is not defined, use ROUND_CALL_BLOCK_SIZE to round the size
	of the block of arguments.

	* expr.c (expand_call): Don't count register-args in ARGS_SIZE.

	* rtl.h, emit-rtl.c: Create static_chain_incoming_rtx
	and struct_value_incoming_rtx.
	* stmt.c (expand_function_start): Use ..._incoming_rtx where needed.

	* expr.c (expand_call): Use new macros INIT_CUMULATIVE_ARGS,
	CUMULATIVE_ARGS and FUNCTION_ARG_ADVANCE to update data
	on args scanned so far.
	(emit_library_call): Likewise.
	* stmt.c (assign_parms): Likewise.
	* tm-spur.h, tm-m68k.h: Define these macros.

	* rtl.h (NUM_MACHINE_MODES): NUM_MACHINE_MODE renamed.
	* rtl.c, genrecog.c: Change places it is used.

	* cccp.c (output_line_command): line_cmd_buf should be chars, not ints.

Thu Feb 25 13:33:29 1988  Richard Stallman  (rms at wheaties.ai.mit.edu)

	* genemit.c (gen_expand): Don't lose if pattern is empty-vector.

	* genconfig.c (gen_insn): Don't lose if pattern is empty-vector.

	* expr.c (expand_expr): For COMPONENT_REF, don't convert to tmode
	unless the mode we get is unacceptable.

	* loop.c (scan_loop, move_movables): New field `partial' is 1 for
	zero-extending clr insn; don't make the reg invariant when it's moved.

	* optabs.c (expand_unop, expand_binop, emit_cmp_insn):
	mode-argument to predicates was missing.

	* optabs.c (expand_binop): If gen-function returns 0, this means
	the insn wasn't available.

	* reload.c (find_reloads): Don't make optional reloads for operands
	that match other operands.

	* reload.c (combine_reloads): Reject optional output reload.

	* reload.c (find_equiv_reg): Know that CALL_INSNs clobber memory.

	* typecheck.c (build_binary_op_nodefault):
	If doing a short shift, leave the shift-count as a fullword.

Tue Feb 23 14:43:46 1988  Richard Stallman  (rms at wheaties.ai.mit.edu)

	* combine.c (subst): Count, in n_occurrences, # times FROM is seen.
	(try_combine): Refuse to combine x=*y++ into z = x*x.

	* loop.c (invariant_p): Frame pointer and arg pointer are invariant.
	(move_movables): Don't forget to set ->done!
	When moving the matching movables, don't forget to set n_times_set.

	* expmed.c (expand_shift): Reorder strategies for logical shift;
	if widening, try all ashift strategies before extzv.

	* typecheck.c (build_binary_op_nodefault):
	Always return error_mark if either operand is one.

	* recog.c (nonmemory_operand): New predicate.

	* optabs.c (expand_unop, expand_binop, emit_cmp_insn):
	Don't treat `register_operand' as special.  Apply the predicate
	to the rtx; if the predicate fails, use a register instead.

Mon Feb 22 22:37:32 1988  Richard Stallman  (rms at wheaties.ai.mit.edu)

	* expr.c (expand_calls): Preexpand all calls in arguments
	that are passed in regs before copying any of them into the regs.

	* expr.c (emit_push_insn): Three more args.
	EXTRA for extra space to leave.
	ARGS_ADDR and ARGS_SO_FAR for using move-insns on machines
	that lack true push insns.

	* expr.c (emit_library_call, expand_call):
	Use the new arguments of `emit_push_insn'.

	* expr.c (PUSH_ARGS_REVERSED): defined if handle args last-to-firs.

Sun Feb 21 12:17:59 1988  Richard Stallman  (rms at wheaties.ai.mit.edu)

	* toplev.c (rest_of_compilation): Set TREE_ASM_WRITTEN
	when a function is really output as assembler code.
	Don't do inlining of a function that is already made inline;
	instead, output it as assembler code, because this must be
	the second call for that function.

	* decl.c (finish_compilation): Delete it.
	* toplev.c (compile_file): Output pending inline functions at the end
	in the same way tentative-defined variables are output.

	* emit-rtl.c (restore_reg_data): New fn: given chain of insns,
	restore emit-rtl's data on registers from the regs they use.

	* integrate.c (output_inline_function): Use restore_reg_data.
	(fill_regno_reg_rtx_as_needed): Now restore_reg_data_1 in emit-rtl.c.

	* tree.c (build_decl): Function moved from decl.c.
	No longer set attributes of function decls specially.

	* decl.c (implicitly_declare, builtin_function, grokdeclarator):
	Don't expect build_decl to set attributes of FUNCTION_DECL.

	* tree.c (preserve_data): New fn, make all data now on
	maybepermanent_obstack last permanently.

	* cse.c (cse_insn): Remove a STRICT_LOW_PART from the dest rtx
	before putting it in the hash table.

	* symout.c (symout_block): Fix the args to `symout_block_symbols'.

Sat Feb 20 00:07:52 1988  Richard Stallman  (rms at wheaties.ai.mit.edu)

    Start of changes for inline functions.
    Changes received from Tiemann, then slightly rearranged for simplicity.

	* integrate.c: New file (Tiemann's rtl2.c).
	* integrate.c (function_cannot_integrate_p):
	New fn, only checks whether current fn is safe and good to inline.
	Returns an error message string if not.

	* expr.c (current_args_size): Var made static.
	(store_expr): Fn no longer static.
	(stack_pointer_rtx): Use this var for all refs to the stack pointer.
	(struct_value_rtx, static_chain_rtx): Likewise

	* expr.c (expand_call): Detect calls to integrable functions
	and integrate them.
	**If fn is not named "alloca" then assume it is not `alloca'. **

	* emit-rtl.c (max_label_num): New fn, returns number for next label.
	(get_first_label_num): New fn, returns first label of current fn.
	(init_emit): Save first label number of this fn.

	* emit-rtl.c (gen_inline_header_rtx): New fn, make an INLINE_HEADER.

	* emit-rtl.c (emit_declaration): New fn to emit new kind of NOTE.

	* emit-rtl.c (init_emit_once): New fn.
	Move inits of unique rtl objects here, from init_emit.

	* decl.c (finish_compilation): New fn to compile separately
	any nonglobal inline functions that need to be addressable.

	* decl.c (grokdeclarator): Handle `inline' kwd among the declspecs.
	Set TREE_INLINE if it's safe.

	* decl.c (finish_function): If fn was inlined, don't clear
	the DECL_ARGUMENTS or DECL_RESULT or DECL_INITIAL.

	* gen*.c: Provide rtl_obstack, not current_obstack.

	* rtl.c (rtl_obstack): Variable: ptr to obstack to use for making rtl.
	* rtl.c (rtx_alloc, rtvec_alloc): Use that obstack.
	* rtl.c (copy_rtx): Copy the `integrated' flag.
	* rtl.c (print_rtx): Print that flag as `/i'.

	* rtl.def: New rtx code	INLINE_HEADER.

	* rtl.h (struct rtx_def): Add `integrated' field.
	* rtl.h: Define macros for fields in an inline_header rtx.

	* stmt.c (max_parm_reg_num, get_first_function_insn):
	New fns, return info on parm regs and the insns that init them.

	* stmt.c (expand_decl): Simplify with new local `type'.

	* stmt.c (stack_pointer_rtx): Replace all refs to stack pointer
	with this shared rtx.
	* stmt.c (struct_value_rtx): Likewise.

	* stmt.c (expand_start_function): Call init_pending_stack_adjust
	instead of clear_pending_stack_adjust.
	If not using a return-label, set `return_label' to 0.

	* stmt.c (expand_null_return, expand_end_function):
	Call clear_pending_stack_adjust unconditionally.

	* expr.c (clear_pending_stack_adjust): Move the conditionals here.
	For now, this fn is a no-op, since it's not safe in an inline fn
	and the stack adjusts are deleted by jump.c in if optimizing.

	* expr.c (init_pending_stack_adjust): New fn.

Fri Feb 19 14:30:13 1988  Richard Stallman  (rms at wheaties.ai.mit.edu)

	* toplev.c (main): Decode -finline-functions, -fkeep-inline-functions.

	* toplev.c (rest_of_compilation):
	At start, save the rtl if function should be inline.
	For inline function, if we don't yet know whether it should be
	compiled on its own, don't do so.

	* toplev.c (compile_file): Clear, and later print, `integration_time'.
	Call `init_emit_rtl' when starting.
	Call `finish_compilation' at the end.

	[Add an extra arg to the error and warning functions?]

	* tree.c ({push,pop,clear}_momentary):
	Change momentary_stack from a char ** to a struct momentary_level *.

	* tree.c (build_pointer_type): Put temporary type in `saveable_obstack'
	* tree.c (build_type_variant): Likewise.
	* tree.c (make_node): Likewise.  Also put decls and LET_STMTs there.
	* tree.c (type_hash_canon): Free a temporary type in `saveable_obstack'

	* tree.c (perm_tree_cons): Like `tree_cons' but on perm. obstack.

	* tree.c (init_tree, {{end_,}temporary,permanent}_allocation):
	Handle `maybepermanent_obstack' and `saveable_obstack' and
	`rtl_obstack'.

	* tree.h (TREE_INLINE): New attribute macro.
	* tree.h (DECL_SAVED_INSNS, DECL_FRAME_SIZE):
	New components in a FUNCTION_DECL.
	Delete the `unused` slot in a `struct tree_decl'.

	* typecheck.c (mark_addressable): Set TREE_ADDRESSABLE
	even in FUNCTION_DECLs.

	* typecheck.c (build_function_call):
	If function is a FUNCTION_DECL, avoid setting TREE_ADDRESSABLE
	when taking its address.

	* parse.h: Define RID_INLINE.
	* parse.y: Define keyword `inline'; set up ridpointers for it.
	(yylex): Don't recognize `inline' of -fno-asm or -ftraditional.

	* flags.h: New vars flag_inline_functions
	and flag_keep_inline_functions.

  End of changes for inline functions.
	
	* tree.c (convert): If EXPR's type is an error_mark, return error_mark.

	* Makefile (install): Don't strip the executables.

	* jump.c (delete_insn): Deleting a label's target
	can delete either NEXT and PREV!  So must search for a
	following nondeleted insn to return.

	* typecheck.c (build_function_call): Typo in validating
	data type of function.

	* genoutput.c (gen_expand): Must create a `struct data' even
	for a define_expand, so we can output the proper insn_gen_function
	and leave zeros in the other tables.

	* loop.c (scan_loop): Replace the code for handling zero-extends
	with unconditional code that checks for a pair of insns.

	* m68k.md: Do zero-extend using define_expand to generate
	a pair of insns, to set all to zero and then copy the low part.

Thu Feb 18 15:54:00 1988  Richard Stallman  (rms at wheaties.ai.mit.edu)

	* emit-rtl.c (emit_insn): If arg is a SEQUENCE, emit several insns.
	* emit-rtl.c (classify_insn): Given an RTX, return the rtx-code for
	an insn containing it: CODE_LABEL, INSN, JUMP_INSN or CALL_INSN.

	* rtl.def: New RTX types DEFINE_EXPAND and SEQUENCE.
	* gen*.c: Handle DEFINE_EXPAND.  Only genemit.c does real work.

	* make.com, make-cc1.com, make-cccp.com: New, VMS command files.

	* tm-vms.h: New file, used as tm.h to generate VMS code.

	* tm-vax.h (FUNCTION_PROLOGUE): Turn off no bits in the mask;
	let call_used_registers alone control this.
	Call MAYBE_VMS_FUNCTION_PROLOGUE, and define that as no-op.

	* tm-vax.h (TARGET_VAXC_ALIGNMENT): New target-flag bit.
	BIGGEST_ALIGNMENT, EMPTY_FIELD_BOUNDARY and POINTER_BOUNDARY use it.

	* varasm.c (assemble_function): Use ASM_DECLARE_FUNCTION_NAME
	if it is defined.

	* varasm.c (assemble_variable): On an external,
	use ASM_OUTPUT_EXTERNAL if defined.  Default is do nothing, as before.

	* toplev.c:
	Use FATAL_EXIT_CODE and SUCCESS_EXIT_CODE.
	Don't include time.h and resource.h on VMS.
	(main) Define __VERSION__ if not already defined.
	Conditionalize setrlimit on RLIMIT_STACK.	
	Test __GNUC__, not __GNU__.
	Don't do `ps v' on VMS.
	(gettime): Conditional code for VMS.

	* gcc.c: Define __GNUC__ as well as __GNU__.
	__GNU__ will be deleted in a future version.

	* symout.c (symout_finish) [VMS]: Don't refer to `getwd' on VMS.
	* symout.c (symout_init) [VMS]: Fatal error; GDB syms not supported.

	* parse.y (yylex): Handle DOLLARS_IN_IDENTIFIERS.

	* genoutput.c (gen_insn): Workaround for VMS printf %s bug.

	* gen*.c: Include config.h.  Whenever exiting, use
	SUCCESS_EXIT_CODE or FATAL_EXIT_CODE.

	* config-*.h: Define SUCCESS_EXIT_CODE and FATAL_EXIT_CODE.
	* config-vms.h: New file, mostly like config-vax.h.

Wed Feb 17 13:35:34 1988  Richard Stallman  (rms at wheaties.ai.mit.edu)

	* cccp.c: VMS support from Kashtan.
	Some #include files are conditional.
	Use file_size_and_mode instead of fstat.
	When reading file contents, the size we get from that
	is just an upper bound; don't assume it must match.
	Replacement definitions of read and write for VMS.
	Different default include directories.
	Conditionalize the setrlimit code on RLIMIT_STACK.
	Use SUCCESS_EXIT_CODE when exiting if no errors;
	both that and FATAL_EXIT_CODE are not #defined if already defined.

	Treat $ as an identifier-character if DOLLARS_IN_IDENTIFIERS.
	Rename the `delete' function as `delete_macro'
	to avoid VMS name conflict.

	* cexp.y: Treat $ as an identifier-character if DOLLARS_IN_IDENTIFIERS.

	* stmt.c (fixup_memory_offset): Do big-endian compensation
	only within a word, not for DImode vs SImode.

	* stmt.c (fixup_var_refs): Don't fix up the insn to load the var
	from its own stack slot; delete it instead.

	* tm-ns32k.h (MODES_TIEABLE_P): DImode is like DFmode.

	* tree.c (MAX_HASH_TABLE): 1009 (more prime) instead of 1008.

	* decl.c (duplicate_decls): If merged type is OLD's type,
	keep OLD's DECL_SIZE and DECL_SIZE_UNIT.

	* gen*.c (xmalloc, xrealloc): Call `fatal' if memory is full.

	* reload1.c (choose_reload_targets): If a mode doesn't fit the
	reload register, and the insn is an ASM_OPERANDS, ignore the reload.
	Otherwise, final would crash.

	* expmed.c (expand_shift): Two new strategies for lshr on short/char:
	widen and do ashr, or widen and do extzv.

	* vax.md (peepholes): Use dead_or_set_p to check for eliminable
	intermediate result, rather than requiring a match with final result.

	* local-alloc.c (block_alloc): Testing frame_pointer_needed is
	enough; no need to test FRAME_POINTER_REQUIRED, etc.
	* global-alloc.c (find_reg): Likewise.
	* reload1.c (reload): Likewise for flag_omit_frame_pointer

	* jump.c (delete_insn): If not `optimize', don't complain
	about finding an already-deleted insn in the chain.

Tue Feb 16 17:14:54 1988  Richard Stallman  (rms at wheaties.ai.mit.edu)

	* final.c: Don't define N_SOL and N_SLINE if already defined.

	* final.c (output_source_line):
	Typo calling ASM_OUTPUT_SOURCE_FILENAME.

	* flow.c (INSN_VOLATILE): fix a typo.

Fri Feb 12 16:48:16 1988  Richard Stallman  (rms at frosted-flakes.ai.mit.edu)

	* final.c (final): for `asm' without operands, output literally.

Thu Feb 11 12:44:41 1988  Richard Stallman  (rms at frosted-flakes.ai.mit.edu)

	* symout.c (symout_record_fields): Handle nameless fields.
	* symout.c (symout_record_field_names): Likewise.

	* typecheck.c (require_complete_type): `void' is a complete type.
	* typecheck.c (build_function_call): Don't complain if result is void.

	* tm-hp9k320.h: Change definition of ASM_SPEC to +X, not -X.

	* cccp.c (main): Expected object file name for foo.cc is foo.o.

Wed Feb 10 16:04:58 1988  Richard Stallman  (rms at frosted-flakes.ai.mit.edu)

	* reload1.c (reload): Initialize `regmask' to zero.
	Class number is in I, not in CLASS, when setting its elements.
	Don't let J+K be too large.

	* reload1.c (potential_reload_regs): Make it a `short'
	since that can't be unsigned.

	* cccp.c (warning): New function, called like `error'.
	* cccp.c (do_define): Make redefinition just a warning.

Tue Feb  9 13:28:00 1988  Richard Stallman  (rms at frosted-flakes.ai.mit.edu)

	* decl.c (grokdeclarator): Don't be fooled by ERROR_MARK as a declspec.

	* toplev.c (compile_file): Strip final .c or .co from .sym file name.

	* gcc.c: When running `as', specify the .sym file if -gg.

Mon Feb  8 11:26:26 1988  Richard Stallman  (rms at frosted-flakes.ai.mit.edu)

	* expmed.c (store_fixed_bit_field): Don't try gen_lowpart on VALUE
	if it's a subreg since it might lose; use convert_to_mode instead.

	* tm-hp9k320.h: Define TARGET_MEM_FUNCTIONS.
	* expr.c (emit_block_move, emit_push_insn, clear_storage):
	If TARGET_MEM_FUNCTIONS, generate calls to memcpy and memset
	instead of bcopy and bzero.
	* optabs.c (emit_cmp_insn): Likewise for memcmp vs bcmp.

	* stmt.c (expand_goto): New temp var to avoid RT/PC compiler bug.

Sun Feb  7 12:20:23 1988  Richard Stallman  (rms at frosted-flakes.ai.mit.edu)

	* flow.c (mark_used_regs, mark_set_regs):
	Handle hard regs in multiword modes: set the bits for each
	distinct register-number that makes up the multiword mode.
	Necessary because function arg registers can inevitably
	live across basic blocks.

	* cse.c (canon_hash): Function arg and value registers no longer
	considered volatile, because flow should now handle the code that
	can result from cse'ing them.

	* cse.c (make_regs_eqv): Abort if OLD is invalid.
	* cse.c (reg_invalidate): Abort if reg already invalid has eqvs.

Sat Feb  6 16:25:32 1988  Richard Stallman  (rms at frosted-flakes.ai.mit.edu)

	* gcc.c (main): Specific error msg if no input files.

Fri Feb  5 17:56:00 1988  Richard Stallman  (rms at frosted-flakes.ai.mit.edu)

	* stmt.c (expand_decl, put_var_into_stack, assign_parms):
	Set in_struct on a MEM if the variable is an aggregate or union.
	* varasm.c (assemble_variable): Set in_struct on aggregate vars.

Thu Feb  4 11:52:30 1988  Richard Stallman  (rms at frosted-flakes.ai.mit.edu)

	* m68k.md (movsf): Correct two fmove.x to fmove.s.

	* expmed.c (extract_fixed_bit_field):
	Must always generate an `and' to mask the bitfield
	unless its width is the same as the output machine mode.

	* version 1.18 released.

Wed Feb  3 08:41:20 1988  Richard Stallman  (rms at frosted-flakes.ai.mit.edu)

	* fold-const.c (fold): Convert EXPR's operands before returning them.

Tue Feb  2 15:35:18 1988  Richard Stallman  (rms at frosted-flakes.ai.mit.edu)

	* reload.c (find_reloads_address_1):

	* typecheck.c (default_conversion): Handle COMPOUND_EXPR arrays.

Mon Feb  1 18:53:05 1988  Richard Stallman  (rms at frosted-flakes.ai.mit.edu)

	* ns32k.md: operand 0 of all unsigned divide/modulus insns
	is now register_operand.

	* stdarg.h: Make va_list be char *, not char *[1].
	Latest draft doesn't say it must be an array type.

Sun Jan 31 11:14:07 1988  Richard Stallman  (rms at frosted-flakes.ai.mit.edu)

	* flow.c (find_basic_blocks): Add temp var to avoid Sequent
	compiler bug.

	* tm-ns32k.h (GO_IF_LEGITIMATE_ADDRESS): Don't allow pushes or pops
	since there are special insn patterns for them.
	Resubroutinize and add temp vars to make expressions smaller.
	* ns32k.md: Add a few more special stack insns; now there are enough.

	* tm-sequent.h: Definitions of DBX_NO_XREFS and DBX_CONTIN_LENGTH.

	* reload1.c (choose_reload_targets): Handling of reload_strict_low
	is needed for input reloads as well as output, since a strict_low_part
	operand is normally a read-write operand.

	* reload1.c (reload): The mode a reload needs is the wider of
	the input and output modes--just as it is in choose_reload_targets.

	* reload.c (find_dummy_reload): If IN and OUT have different widths
	and one of them exceeds a word, don't find any dummy reload.

	* toplev.c (compile_file): Allocate enough space for .jump2 filename.

Sat Jan 30 10:35:46 1988  Richard Stallman  (rms at frosted-flakes.ai.mit.edu)

	* output-ns32k.c (print_operand_address):
	Print addresses of the form C1+(N*REG+C2) which currently
	are accepted as legitimate memory addresses.

	* tm-sequent.h: Simple bugs in PRINT_OPERAND, TARGET_DEFAULT
	and SEQUENT_ADDRESS_BUG.

	* gen*.c: Must explicitly exit; returning from `main' fails
	to indicate nonzero status due to bug in Unix.

	* parse.y (check_line_number): Ignore entire line of unrecognized
	#-directive; no error if it is `pragma'.

Fri Jan 29 06:46:01 1988  Richard Stallman  (rms at frosted-flakes.ai.mit.edu)

	* genrecog.c, genextract.c, genoutput.c: Define bcopy and/or bzero.

	* cccp.c (do_define): Make defn->argnames long enough in no-args case.

	* reload1.c (reload): Make basic_block_needs 0 until after the
	frame pointer reg is spilled, so that ALL pseudos in it are spilled.

	* typecheck.c (truthvalue_conversion):
	Strip a NOP_EXPR only if it extends, not if it truncates.
	(build_unary_op): For TRUTH_NOT_EXPR, call invert_truthvalue
	to simplify.

	* Fixes for HPUX support from cph:
	* tm-hp9k320.h: Correct names of floating-point registers.
	Fix typos in ASM_OUTPUT_OPCODE; also convert `fmove' to `fmov'.
	* Makefile (comments for HPUX):
	cph says -Wd,-X isn't needed in CFLAGS, nor -lBSD in CLIB.
	Also that -g can't be used in CFLAGS with HP's pcc.
	* conf-hp9k320.h: New file, like config-m68k.h but with
	#defines for the bstring functions.
	* m68k.md: Add else-clauses to the HPUX_ASM conditionals on cmp insns.
	Reinsert mistakenly-deleted MOTOROLA conditionals around
	some OUTPUT_JUMPs.

Thu Jan 28 09:51:41 1988  Richard Stallman  (rms at frosted-flakes.ai.mit.edu)

	* jump.c (jump_back_p): If TARGET is unconditional, return 0.

Wed Jan 27 04:18:29 1988  Richard Stallman  (rms at frosted-flakes.ai.mit.edu)

	* combine.c (subst): Simplify (plus (plus x c1) c2).

	* expr.c (emit_push_insn): Don't use small-block push-insns for BLKmode
	when one of them would be affected by PUSH_ROUNDING.
	Instead, make all the space and then copy.
	* expr.c (expand_call): Don't apply PUSH_ROUNDING if BLKmode.

	* Allow `asm' with operands to be marked volatile.
	* cse.c (canon_hash): Don't record ASM_OPERANDS that has `volatil'.
	* loop.c (invariant_p): ASM_OPERANDS with `volatil' can't be invariant.
	* flow.c (volatile_refs_p): Note ASM_OPERANDS that are volatile.
	* stmt.c (expand_asm_operands): New arg VOL; mark ASM_OPERANDS as vol.
	* typecheck.c (c_expand_asm_operands): New arg VOL.
	* parse.y: allow a TYPE_QUAL after ASM.

	* Make cse handle `asm' with operands:
	* cse.c (canon_hash): Hash string operands by contents, not address.
	* cse.c (exp_equiv_p): Compare string operands with strcmp.
	* rtl.c (rtx_equal_p): Compare string operands with strcmp.

	* decl.c (init_decl_processing): Once sizetype is set,
	correct the type of the sizes of types already made.

	* cccp.c (do_defines): Don't reject #define foo{a}.

Tue Jan 26 04:53:16 1988  Richard Stallman  (rms at frosted-flakes.ai.mit.edu)

	* reload.c (find_reloads): Now that `asm' is limited to
	MAX_RECOG_OPERANDS, eliminate dynamic allocation of `constraints'
	and `constraints1', and go back to `recog_operand' instead of
	`operands'.

	* typecheck.c (c_expand_asm_operands): New fn to handle `asm' for C.
	Calls expand_asm_operands, and handles output operands that
	the other function cannot handle.

	* parse.y: Call that function.

	* stmt.c (expand_asm_operands): Error if too many operands.
	#include insn-config.h to get MAX_RECOG_OPERANDS.

	* expr.c (expand_assignment): Use store_field to handle
	structure fields and array elements.

	* output-m68k.c (output_move_double): PUSHOP and POPOP were swapped.
	Handle insns that push an sp-relative address onto sp;
	these can arise with -fomit-frame-pointer.
	BUG? Do unoffsetable mem refs using sp and fp lose?

	* m68k.md (movdi,movdf): Allow unoffsetable mem refs
	only if the other operand is a register.

	* m68k.md (zero_extendqisi2): SGS conditionals deleted.
	Supposedly the MOTOROLA syntax works for those addresses.

	* typecheck.c (default_conversion):
	If flag_traditional, preserve unsignedness when promoting ints,
	and promote float to double.

	* typecheck.c (build_binary_op_nodefault):
	Allow comparisons between pointers and ints.
	If not -traditional, warn about them.

Mon Jan 25 02:11:18 1988  Richard Stallman  (rms at frosted-flakes.ai.mit.edu)

	* expmed.c ({extract,store}_split_bit_field):
	Functions {extract,store}_split_reg_bit_field now work for memory
	also, and therefore are renamed.
	* ({extract,store}_fixed_bit_field): Call those fns when a field
	is split across two words.
	Also, preserve the `volatil' bit on memory refs.

	* output-m68k.c (output_move_double): Handle nonoffsetable mem refs.
	* m68k.md: Relax constraints on movdi, movdf.

	* decl.c (init_decl_processing): Define `int' and `char' first.
	Set `sizetype' explicitly.

	* stmt.c (fixup_var_refs_1): May not just return when a SET
	doesn't have VAR as its src or dest.

	* varasm.c: Don't include c-tree.h.

	* decl.c (build_struct): Split this function into three:
	`xref_tag', `start_struct' and `finish_struct'.
	`xref_tag' subsumes `xref_enum'.

	* parse.y (structsp): When parsing `struct foo {...}', define the tag
	as a cross-ref before parsing the components.  Use the three new fns.

	* regclass.c (regclass): Recognize new-format ASM_OPERANDS insns
	with `asm_noperands', and scan their operands as usual.

	* cse.c: In numerous functions such as canon_hash, rtx_cost, etc.
	that do tree-walk on rtx, handle vectors of subexpressions.

	* loop.c (invariant_p): Likewise.

	* jump.c (delete_insn): Two bugs:
	If insn already deleted, return the first following nondeleted.
	Deleting a jump's label can delete NEXT.  Make sure return value
	is always the first insn following INSN and not yet deleted.

Sun Jan 24 02:27:49 1988  Richard Stallman  (rms at frosted-flakes.ai.mit.edu)

	* rtl.def (ASM_OPERANDS): Change the rtl expression of an
	`asm' with operands so it looks like this for one output operand:
	(set OUTPUT (asm_operands:OUTPUTMODE INSNSTRING OUTPUTCONSTRAINT
					     0 INPUTS INPUTCONSTRAINTS)).
	and like this for multiple outputs:
	(PARALLEL [
	  (set OUTPUT0 (asm_operands:OUTPUTMODE INSNSTRING OUTPUTCONSTRAINT
					        0 INPUTS INPUTCONSTRAINTS)).
	  (set OUTPUT1 (asm_operands:OUTPUTMODE1 INSNSTRING OUTPUTCONSTRAINT1
					        1 INPUTS INPUTCONSTRAINTS))])

	* parse.y: Change parsing of `asm' to distinguish input and output
	operands.  Separate them with colon; separate the string with colon.

	* stmt.c (expand_asm_operands): Receive inputs and outputs separately.
	Generate the new rtl format.

	* recog.c (asm_noperands, decode_asm_operands): New fns
	for extracting the operands and constraints from these insns.

	* final.c (final): Recognize and output the new rtl format
	using those new functions.

	* reload.c (find_reloads): Recognize and get constraints
	from the new rtl format using those new functions.
	New variable `operand_modes' holds the machine modes of the
	operands, obtained one way for ASM_OPERANDS insns and another
	for other insns.

	* rtl.c (note_stores): Calling convention
	is changed: the first arg FUNCTION now receives as its 2nd arg
	1 if clobbering, 0 if setting.  Used to be the CLOBBER or SET rtx.

	* local-alloc.c (reg_is_set): This fn is called from note_stores;
	change its arguments.

	* tm-m68k.h (FIXUP_FRAME_POINTER_ADDRESSES):
	Use frame_pointer_rtx to recognize intended frame-pointer refs
	and not recognize pseudo-regs that were allocated to the frame
	pointer register.

	* emit-rtl.c: All refs to frame pointer use a single rtx, in
	frame_pointer_rtx.  Likewise arg_pointer_rtx for the arg pointer.
	If they are the same register, these are the same rtx.
	Initialize them in init_emit.
	* rtl.h: Declare these vars.

	* stmt.c (assign_parms, assign_stack_local): Use those rtx's.

Sat Jan 23 00:32:10 1988  Richard Stallman  (rms at frosted-flakes.ai.mit.edu)

	* reload.c (find_reloads): Don't combine_reloads if `&' constraint
	was used.

	* parse.y: Parse `asm' with operands.
	* stmt.c (expand_asm_params): New fn: generate an ASM_OPERANDS for
	`asm' with operands.
	* final.c (final): Output an ASM_OPERANDS insn-body.
	* regclass.c (regclass): Ignore ASM_OPERANDS, like ASM_INPUT.

	* reload.c (find_reloads): Handle reloading of ASM_OPERANDS.
	The number of operands can no longer be bounded.
	For example we can't always put the operands in recog_operands.

	New locals OPERANDS and OPERAND_LOCS point to alloca'd vectors of
	operands and their locations.  New locals CONSTRAINTS and CONSTRAINTS1
	hold alloca'd vectors of constraints.

	Unfortunately this isn't enough; every vector with length
	MAX_RECOG_OPERANDS needs to be dynamically allocated.
	Would this be too slow?  For now, a cheap "solution" is to delete
	any insn that has too many operands.

	* rtl.def: Delete VOLATILE, UNCHANGING and UNDESCRIBED.
	Add ASM_OPERANDS.

	* regclass.c (reg_class_record): Delete ref to UNCHANGING.
	* loop.c (invariant_p):
	* rtl.c (rtx_varies_p):

	* cccp.c: Define __VERSION__.

	* decl.c (shadow_tag): TYPE_NAME doesn't work to get the tag-name
	of a struct, so use new function lookup_tag_reverse.
	* decl.c (lookup_tag_reverse): Given a type, return its tag name.

	* symout.c (symout_source_file): Output one `struct source'.
	* symout.c (symout_lines): Output all of them, and the sourcevector.
	* gdbfiles.h: New file for communication between final.c and symout.c.

	* final.c (output_source_line): New arg WRITE_SYMBOLS says write
	new GDB-format linenumber info.  Assigns a filenum to each source
	file name and keeps track of the correspondence.

	* cccp.c (do_include): Output the -M info after searching the dirs;
	include the actual dir name.  Don't generate "./" for current dir.

Fri Jan 22 04:10:10 1988  Richard Stallman  (rms at frosted-flakes)

	* tm-news800.h: Delete override of INDIRECTABLE_1_ADDRESS.
	Output is faster if it doesn't use 32-bit displacements.

	* reload.c (combine_reloads): New function.
	If possible, find an input reload
	and an output reload that can be turned into one input-output reload.
	The old output-reload is marked as inoperative: reload_out
	and reload_in both zero.  This is called from find_reloads.

	* reload1.c (reload, choose_reload_targets): Ignore inoperative
	reloads.

	* Print warnings for variables that could be clobbered by `longjmp'.
	* expr.c (expand_call): Generate a NOTE_INSN_SETJMP whenever
	`setjmp' or `_setjmp' is called.
	* flow.c (propagate_block): When NOTE_INSN_SETJMP is seen,
	record the live regs in `regs_live_at_setjmp'.
	* stmt.c (uninitialized_vars_warning): Warn about vars that have regs
	that are set more than once and are marked in `regs_live_at_setjmp'.
	Works through function `regno_clobbered_by_longjmp'.
	* rtl.h: Define NOTE_INSN_SETJMP.

	* genrecog.c (try_merge_2): When enforce_modes, keep all the
	alternatives segregated by modes and keep the modes in numerical order.
	* genrecog.c (write_tree): Make conditions for switch-on-modes
	know what difference enforce_mode makes.

Thu Jan 21 00:12:35 1988  Richard Stallman  (rms at frosted-flakes)

	* tm-ns32k.h: Use Stein's definitions of PRINT_OPERAND{,_ADDRESS};
	move the Sequent definitions info tm-sequent.h.
	Handle %$ in both old and new PRINT_OPERAND.
	Define CPP_PREDEFINES.

	* ns32k.md: Merge some features from Jan Stein's port:
	strict_low_part insns, smart output of booleans with small
	constant args, acbd insns generalized for other increments.
	Use %$ wherever there is an explicit immediate.
	Fix shortcomings of adjsp insns: use adjspd in general,
	and use adjspb in all the cases that allow it.
	Don't bother explicitly clearing CC_REVERSED.
	For tstsf/tstdf, output the floating-zero constants
	using {f,d}const0_rtx.

	A problem still remains, which is that the Sequent and the
	other ns32k assembler syntax require different 

	* typecheck.c (unary_complex_value): Use correct datatype for
	compound-exprs.

	* gen*.c (main): Use obstack_init instead of obstack_begin.

	* vax.md: define_peephole for  andl3 x,y,z; extzv z,....,z

	* m68k.md (tstsi): Use cmpw instead of cmpl to test addr reg.

	* tm-m68k.h: Bugs for 68000 when frame size is over 64k.
	For FUNCTION_PROLOGUE, just subtract from sp instead of fp.
	For FUNCTION_EPILOGUE, must put the size into a0 and then
	all insns must be indexed by a0.  And do this even on 68020.

	* tm-isi68.h: Similar changes.
	* tm-news800.h, tm-hp9k320.h: Similar changes.

Wed Jan 20 04:38:21 1988  Richard Stallman  (rms at frosted-flakes)

	* cccp.c (error_with_line): New function.
	Use it to report the "unterminated whatever" errors.

	* typecheck.c (build_unary_op): Recursive call had missing arg.

	* m68k.md (movhi): If MOTOROLA, the insn that fetches from a
	case-dispatch table now defines the LI label as .+2.
	* tm-news800.el, tm-hp9k320.h (PRINT_OPERAND_ADDRESS):
	Don't subtract 2 when outputting the address in that insn.

Tue Jan 19 00:02:33 1988  Richard Stallman  (rms at frosted-flakes)

	* cse.c (cse_basic_block): Abort if more qtys were used than allocated.

Mon Jan 18 04:44:28 1988  Richard Stallman  (rms at frosted-flakes)

	* cccp.c (special_symbol): tm_mon is origin-0, not origin-1.

	* final.c (output_asm_insn): If %LETTER with no digits,
	pass null pointer as the operand.

	* output-m68k.c (singlemove_string): Get rid of %e.

	* stmt.c (fixup_memory_subreg): Convert (SUBREG (MEM a)) to (MEM a').
	* stmt.c (fixup_var_ref_1): Use that fn for operands of
	SIGN_EXTRACT and ZERO_EXTRACT, since (SUBREG:SI (REG:QI...))
	could have turned into (SUBREG:SI (MEM:QI...)), which is unsafe.

	* rtl.c (debug_rtx): Print an rtx on stderr, for debugging.

Sun Jan 17 04:37:20 1988  Richard Stallman  (rms at frosted-flakes)

	* gcc.c: options -M* treated like -M.

	* stmt.c (pushcase): Do nothing if the case index has error_mark type.

	* expr.c (expand_increment): Don't use queue for post-inc on memory
	if the add insn requires register args.  (Better code for RISCs.)

Sat Jan 16 02:10:22 1988  Richard Stallman  (rms at frosted-flakes)

	* ns32k.md: Change register_operand to general_operand.
	* ns32k.md (udivmoddisi4): Use match_dup where required.
	Comment it out because it can't accept two independent output args.

Fri Jan 15 00:02:35 1988  Richard Stallman  (rms at frosted-flakes)

	* toplev.c: Include sys/time.h only for BSD.  For USG, use time.h.
	This is correct for HPUX; don't know about others.

	* gcc.c (execute): Eliminate `union wait'.  Make `status' an int.
	* gcc.c (execute) [USG]: Use fork instead of vfork.

	* final.c (output_source_line): Use ASM_OUTPUT_SOURCE_{FILENAME,LINE}
	if they are defined.

	* tm-hp9k320.h: New name for tm-hpux.h.
	* tm-hp9k320.h (ASM_OUTPUT_LOCAL): Add 3rd arg to `lcomm' statements.
	* tm-hp9k320.h (ASM_OUTPUT_{DOUBLE,FLOAT}): Use `double' and `float'.
	* tm-hp9k320.h (CALL_USED_REGISTERS): Don't save any 68881 regs.
	* tm-hp9k320.h (CPP_PREDEFINES): different names defined.
	* tm-hp9k320.h (HPUX_ASM, NO_DBX_FORMAT, ASM_SPEC): define these.
	* tm-hp9k320.h (ASM_OUTPUT_OPCODE): Convert `ftst' to `ftest'.
	* tm-hp9k320.h: Define ASM_OUTPUT_SOURCE_{FILENAME,LINE}.

	* m68k.md: Rename `hpux' conditionals to `HPUX_ASM'.
	* m68k.md: Reverse `fcmp' args if HPUX_ASM.

	* cccp.c (print_deps): 2 means give all files, 1 means only user files.
	* cccp.c (do_include): Support that.
	* cccp.c (main): -MM sets 1, -M alone sets 2.
	* cccp.c (main): Give fatal error if I/O error in writing.

	* toplev.c (fatal_io_error): Report I/O error on given filename,
	and exit.

	* toplev.c (compile_file): Detect error writing asm_out_file.
	Always put asm file's name in asm_file_name for err msg.
	* symout.c (symout_finish): Detect error writing symfile.
	* symout.c (symout_init): Save filename in symfile_name for err msg.

	* gen*.c: Return 1 if ferror (stdout)--in case disk is full.

	* local-alloc.c (block_alloc): Don't crash if 1st rtx
	in a PARALLEL is not a SET.

	* tm-m68k.h, tm-news800.h (PRINT_OPERAND).  Eliminate code `%e'.
	* m68k.md: Change `%e' to `e' everywhere.
	* tm-hpux.h (ASM_OUTPUT_OPCODE): Output `move' as `mov'.

	* tm-m68k.h, tm-news800.h, tm-hpux.h (PRINT_OPERAND):
	New code `%!' is output as the name for the cc register.
	* m68k.md (insns that use andi to ccr): Use `%!' to avoid
	conditionals.

	* cse.c: Record in qty_const_insn the insn that stored the
	constant value of a qty.  When making a REG_WAS_0 note,
	store in it the insn that established the value 0.

	* vax.md (movsi): When checking a REG_WAS_0 note,
	verify that the insn it points to hasn't been deleted or made a NOTE.

Thu Jan 14 00:01:35 1988  Richard Stallman  (rms at frosted-flakes)

	* toplev.c: Eliminate error_with_line and warning_with_line.
	* parse.y, decl.c: Change remaining calls to those two.

	* tree.c (get_unwidened, get_narrower): To see if a COMPONENT_REF
	is unsigned, look at the FIELD_DECL, not at the COMPONENT_REF.

	* rtl.c (print_rtx): Print /v for the `volatil' bit.
	* expr.c (expand_assignment expand_expr): If handling a COMPONENT_REF,
	note whether it is volatile.

	* fold-const.c (fold): a call to split_tree missed an argument.

	* flow.c (volatile_refs_p): Scan an rtx for volatile mem refs.
	* flow.c (life_analysis): Record in INSN_VOLATILE which insns
	have any volatile mem refs.
	* flow.c (mark_used_regs): Always mark an insn with volatile mem refs.
	Always pass INSN as an arg.  New arg FINAL now says whether
	this is the last time scanning.
	* flow.c (propagate_block): Don't delete insns with volatile mem refs.

	* flow.c: Remove all refs to `obey_regdecls'.
	Calling this with -noreg just doesn't help -W.

Wed Jan 13 01:13:07 1988  Richard Stallman  (rms at frosted-flakes)

	* decl.c (finish_decl): Error if auto var's size isn't known.
	Change type to error_mark_node to avoid crash if the var
	is used in an expression, since it has no DECL_RTL.

	* output-m68k.c (output_move_const_single): % -> %% for sprintf.

	* parse.y (yylex): Store token_buffer properly after ellipsis.

	* decl.c (duplicate_decls): Don't call layout_decl
	for FUNCTION_DECL or TYPE_DECL.

	* toplev.c (warning_with_decl): New warning function with decl as arg.
	* (error_with_decl): similar.

	* decl.c: Replace most `yylinerror' calls with `error_with_decl'.

	* decl.c (build_struct): Reform code to detect erroneous bit-fields.
	All such errors are now detected here.
	Promote bit-fields to int if appropriate.
	If traditional, make all int bit-fields unsigned.
	Set DECL_ALIGN for members that are not bit-fields.

	* decl.c (grokfield): Don't set DECL_ALIGN here.

	* stor-layout.c (layout_decl): Don't promote the type of a bit-field.
	Use TREE_PACKED to distinguish a bit-field.
	Don't check the width because build_struct did that.

	* m68k.md (cmpm): Reject if either operand (address) is a constant.

Tue Jan 12 15:11:20 1988  Richard Stallman  (rms at frosted-flakes)

	* cse.c (canon_reg): Never replace ANY hard reg from reg_rtx
	because that could alter the machine mode.

	* tm-news800.h: Redefine INDIRECTABLE_1_ADDRESS only if MOTOROLA.

Mon Jan 11 13:15:45 1988  Richard Stallman  (rms at frosted-flakes)

	* jump.c (follow_jumps): If we find a cycle, make it a jump to self.

	* cse.c (predecide_loop_entry): Give up if chase more than 10 jumps.

Sun Jan 10 14:52:42 1988  Richard Stallman  (rms at frosted-flakes)

	* reload1.c (reload): basic_block_needs (new vector) gets 1
	for each basic block that needs a reload.
	* reload1.c (spill_hard_reg): Don't spill pseudos that are
	confined to a basic block which has no need for any reloads.
	* reload1.c (reload): Each cycle that any element of basic_block_needs
	changes from 0 to 1, must re-spill all previously spilled regs.

	* regclass.c (record_address_regs):
	Skip the charging of ICOST if it is 0.

	* flags.h, toplev.c: New flag -fvolatile.
	* typecheck.c (build_indirect_ref): If flag_volatile,
	every INDIRECT_REF is marked with TREE_THIS_VOLATILE.

	* fold-const.c (fold): Test in TRUTH_NOT_EXPR case was backward.
	Also result type is always `int'.

Sat Jan  9 04:16:11 1988  Richard Stallman  (rms at rice-krispies)

	* flags.h (flag_traditional): New flag.
	* toplev.c: recognize -ftraditional and -traditional.
	* parse.y (yylex): If flag_traditional, don't recognize
	`signed', `const' or `volatile'.

	* decl.c (pushdecl): If flag_traditional, any extern decl
	takes effect at top level.

	* tree.c (lvalue_or_else): New 2nd arg for use in error message.
	* typecheck.c: All callers pass 2nd arg.

	* global-alloc.c: allocno_preferred_reg can specify a preferred
	hard reg for each allocno.  If so, try it first (new call to find_reg).

	* global-alloc.c (find_reg): New arg PREFREG specifies reg to try
	first.

	* decl.c (build_struct): if :0 bit field at the end, round the
	structure size to multiple of EMPTY_FIELD_BOUNDARY.

	* cse.c (make_regs_eqv): Was testing for reg_next_eqv[lastr] == 0
	and should be == -1.

	* reload1.c (reload_as_needed): Fix invalid optimization deleting
	the previous store into a pseudo-reg that feeds an input-reload.
	It is not safe because a later insn may look in the pseudo's stack
	slot for the value.  Delete the store only if we can eliminate the
	pseudo entirely or if the current insn stores a new value there.
	Also verify that reload_in[j] is a REG.

	* reload1.c (reload_as_needed): When doing an input reload from a
	pseudo that was stored by the previous insn (not as a reload),
	redirect the previous insn into the reload register, if this lets
	us eliminate the pseudo entirely.

	* reload1.c (reload_as_needed): In both of the above cases, it's
	impossible to prevent a stack slot since one was already assigned,
	so don't alter reg_n_refs.  Instead, set reg_renumber to record
	that this pseudo did get a hard reg.

	* stmt.c: Set `volatil' in pseudo-regs for the user's variables.

	* jump.c (delete_insn): Do nothing if insn already deleted.

	* tm-sun{2,3}.h: #define STRUCTURE_SIZE_BOUNDARY 2
	for compatibility with Sun PCC.  Note that 4.3 vax PCC
	does not want this.

	* fold-const.c: Replace truncate_unsigned with force_fit_type
	which truncates unsigned types and sign-extends signed types.

	* expr.c (do_jump): emit_queue before outputting the jump insns
	that use the comparison.

	* stmt.c: Error message for any goto that jumps into a
	binding contour that restores a stack level.

	TREE_PACKED (label) means label was defined inside
	such a binding contour that is now exited.  Using such a label
	is an error.

	TREE_ADDRESSABLE (label) means label was used from a place
	outside all such binding contours.  If this is 1 when
	TREE_PACKED is set to 1, it is an error.

	Any other invalid goto must have a fixup.  fixup_gotos detects
	such invalid gotos.  fixup_gotos takes a second arg, which
	is the first insn of the contour now being exited.

	* GNU C version 1.17.

Local Variables:
mode: indented-text
left-margin: 8
fill-column: 76
version-control: never
End:
