Sun Jun 20 13:37:00 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* Version 2.4.5 released.

	* c-common.c (decl_attributes): If first_arg_num is 0, no error for it.

	* Makefile.in (extraclean): Delete *.gz, and other diff and tar files.

Sun Jun 20 18:09:50 1993  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* calls.c (expand_call): In last change, preserve the temp slot.

Sat Jun 19 19:55:43 PDT 1993  Ron Guilmette  (rfg@netcom.com)

	* dwarfout.c (type_main_variant): New function.
	Use it in place of TYPE_MAIN_VARIANT everywhere in dwarfout.c.

	* c-decl.c (grokdeclarator):  Avoid the use of macros for ..._TYPE
	nodes in cases where a parameter's type is error_mark_node.

Sat Jun 19 03:57:57 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* Version 2.4.4 released.

	* toplev.c (compile_file): For static decl never defined,
	use just warning, not pedwarn.

	* dbxout.c (dbxout_type): Reinstall #if 0 around code for
	outputting structure types, that confused GDB.

Fri Jun 18 20:06:35 1993  Pat Rankin  (rankin@eql.caltech.edu)

	* vms.h (MAYBE_VMS_FUNCTION_PROLOGUE): adjust stack pointer by 4 prior
	to calling C$MAIN_ARGS, otherwise POSIX edition of that routine dies.

Fri Jun 18 14:21:14 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* Makefile.in (clean): Delete objc-headers subdir.

	* config/m68k/m68k.h (TARGET_SWITCHES): For -m68020, -m68000 and
	-msoft-float, turn off 01400 bits.

	* Makefile.in (gcc.xtar.gz): Renamed from gcc.tar.z.
	(dist): Change the dependency.
	(mostlyclean): Delete tmp-gcc.xtar.gz.

	* c-iterate.c (save_exprs): New variable.
	(collect_iterators): Don't process a SAVE_EXPR twice.
	(iterator_expand): Clear save_exprs.

	* Makefile.in (gcc.info, cpp.info): Actually cd to srcdir.

	* configure (clipper-intergraph-clix*): Use install-headers-cpio.

Fri Jun 18 13:37:16 1993  Michael Meissner  (meissner@osf.org)

	* mips.c (output_block_move): Don't abort if one of the input
	registers is allocated as a scratch register, just use fewer
	scratch registers.

Fri Jun 18 00:25:16 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* config/i386/i386.c (call_insn_operand): Require constant address
	be a general_operand.
	(expander_call_insn_operand): New fn (what call_insn_operand was).
	* config/i386/i386.md (call_pop, call, call_value_pop, call_value)
	(untyped_call): Use expander_call_insn_operand.

Thu Jun 17 17:58:11 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* config/pa/pa.md (decrement_and_branch_until_zero):
	Pattern disabled.

Thu Jun 17 13:34:20 1993  Jim Wilson  (wilson@sphagnum.cygnus.com)

	* unroll.c (calculate_giv_inc): Add new variables increment_total
	and tries, and new label retry, to handle case where increment is
	two add instructions.

Thu Jun 17 12:13:53 1993  Minh Tran-Le  (mtranle@paris)

	* config/i386/aix386ng.h: Changes for non-GAS gcc.
	(ASM_FILE_START_1): Always output .noopt because /bin/as is buggy.
	Added #undef to {INIT,FINI,CTORS,DTORS}_SECTION_ASM_OP, ... when
	not using GAS.
	(CONST_SECTION_FUNCTION): Override svr3 default.
	(EXTRA_SECTION_FUNCTIONS): Override svr3 default.
	(OBJECT_FORMAT_COFF): Added define for collect2.
	(MY_ISCOFF): For collect2 to handle aix and svr3 object file.
	
	* config/i386/aix386.h (USE_GAS): New define.

Thu Jun 17 00:26:38 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* reg-stack.c (stack_result_p): New function.
	(stack_reg_life_analysis): Use that.

	* final.c (output_addr_const): Don't insert a leading space
	in the CONST_DOUBLE_HIGH != 0 case.

Thu Jun 17 00:09:19 1993  Jeff Law  (law@snake.cs.utah.edu)

	* pa.h (LEGITIMATE_CONSTANT_P): Reject function addresses for now.

Wed Jun 16 20:14:10 1993  Brendan Kehoe  (brendan@lisa.cygnus.com)

	* cp-typeck.c (build_unary_op): Make sure it's the global fn `main'
	before complaining about taking the address of it.

Wed Jun 16 16:24:31 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* config/i386/xm-sysv4.h (SMALL_ARG_MAX): Defined.

	* c-typeck.c (check_format): Don't crash if cur_type is an error_mark.
	Handle identifier_node as the TYPE_NAME.

Mon Jun 14 16:09:24 1993  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* calls.c (expand_call): If PCC_STATIC_STRUCT_RETURN and TARGET
	is zero, copy result from static location.

        * cse.c (invalidate_skipped_set): Promote "nonscalar" to "all".

Mon Jun 14 16:01:34 1993  Karl Berry  (karl@cs.umb.edu)

	* fixincludes (stdio.h math.h ctype.h sys/{limits.h,fcntl.h,dirent.h}):
	Fix STDC/POSIX and other things for Interactive	Unix 2.2 or later.

Mon Jun 14 04:41:38 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* reload.c (make_memloc): Don't reuse a memloc.

Sun Jun 13 16:01:37 1993  Jeff Law  (law@snake.cs.utah.edu)

	* pa.md (iorsi3): Explicitly set length to 1.
	(andsi3, lshrsi3, rotrsi3, rotlsi3): Likewise.
	(ashift and ashiftrt by const_int_operand): Likewise.
	((and (ashift)) optimizer): Likewise.

Sun Jun 13 20:23:04 1993  Stephen Moshier  (moshier@world.std.com)

	* real.c (ltoe, ultoe, eifrac, euifrac): Handle 64-bit longs.
	(SFMODE_NAN, DFMODE_NAN, XFMODE_NAN, TFMODE_NAN): New macros
	permit definitions of NaN patterns to be overridden in tm.h.

Sun Jun 13 12:55:22 1993  Brendan Kehoe  (brendan@lisa.cygnus.com)

	* cp-decl.c (start_function): Avoid a null-reference on CTYPE.

Sun Jun 13 08:22:30 1993  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* expr.c (expand_expr, case COND_EXPR): Fix typo; const1_rtx should
	be const0_rtx when ignoring expression.

Sun Jun 13 00:15:00 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* genopinit.c (optabs): For strlen_optab, don't look for `2' in name.

Sat Jun 12 20:23:04 1993  Stephen Moshier  (moshier@world.std.com)

	* real.c (ereal_from_float, ereal_from_double): New functions.
	* real.h (REAL_VALUE_FROM_TARGET_SINGLE): New macro.
	(REAL_VALUE_FROM_TARGET_DOUBLE): Likewise.
	* emit-rtl.c (gen_lowpart_common): Use those macros if REAL_ARITHMETIC.

Sat Jun 12 13:44:00 1993  Jim Wilson  (wilson@wookumz.gnu.ai.mit.edu)

	* sched.c (add_dependence): Reject CODE_LABELs when searching for
	last insn of a sched group.

Sat Jun 12 08:06:25 1993  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* m68k.md (movqi): Handle copying an address register to or
	from memory when the address uses the address register.

Sat Jun 12 00:17:06 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* cse.c (record_jump_cond): Look up op1 again after inserting op0.

Fri Jun 11 21:50:16 1993  John F Carr  (jfc@Athena.mit.edu)

	* rs6000.md (movsf, movdf): Handle a move from an integer register
	before reload.  This can happen if the user uses asm to put a floating
	point variable in an integer register.

Fri Jun 11 20:04:43 1993  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* rs6000.c (rs6000_gen_section_name): Only replace last period
	in filename with section name and correct calculation of
	string length.

	* recog.c (constrain_operands): Correctly ignore MATCH_OPERATOR
	operands.

	* reload1.c (eliminate_regs_in_insn): Don't use a later elimination
	than eliminate_regs would use.

	* c-decl.c (finish_decl): Don't modify DECL_INITIAL of a PARM_DECL.

Thu Jun 10 23:48:01 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* genextract.c (main): Use __volatile__, not volatile.

Thu Jun 10 16:21:08 1993  Michael Meissner  (meissner@osf.org)

	* i386/osfrose.h (SUBTARGET_SWITCHES): Add -m{,no-}ident.
	(ASM_SPEC): Pass -v to assembler if used.
	(OVERRIDE_OPTIONS): Don't allow -fpic if using the OSF/rose object
	format.
	(ASM_DECLARE_OBJECT_NAME, ASM_DECLARE_FUNCTION_NAME): If using ELF,
	 emit a .type pseudo op that says the label is either an object or
	 a function.
	 (ASM_DECLARE_FUNCTION_SIZE): Copy from svr4.h.
	 (SCCS_DIRECTIVE): Define.
	 (ASM_FILE_END): Unless -mno-ident, emit a .ident directive that
	 identifies GCC and whether several switches are used.

	 * i386/osfelf.h (ASM_SPEC): Pass -v to assembler if used.
	 (OBJECT_FORMAT_ROSE): Undefine.

Thu Jun 10 16:20:24 1993  Doug Evans  (dje@canuck.cygnus.com)

	* expmed.c (MAX_BITS_PER_WORD): Define earlier.
	(shift_cost, shiftadd_cost, shiftsub_cost): Use MAX_BITS_PER_WORD.

Thu Jun 10 12:56:18 1993  Jim Wilson  (wilson@wookumz.gnu.ai.mit.edu)

	* sched.c (sched_analyze_2): Don't ignore USE insns when creating
	dependencies.
	(sched_analyze): Likewise.

Wed Jun  9 12:58:51 1993  Michael Meissner  (meissner@osf.org)

	* configure (i386-*-osfelf): Add new configuration for OSF/1 using
	the ELF object file format.

	* i386/osfelf.h (new file): New config file for OSF/1 with ELF.
	Include osfrose.h and redefine things as needed.

	* i386/osfrose.h (SUBTARGET_SWITCHES): Add -melf, -mrose, and
	-mno-rose switches.
	(HANDLE_SYSV_PRAGMA): Define.
	(IDENTIFIER_PREFIX, IDENTIFIER_SUFFIX): Remove unused macros.
	(CPP_PREDEFINES): Add -Acpu(i386) -Amachine(i386) -Asystem(unix).
	(CPP_SPEC): Define __ROSE__ if compiling for OSF/rose and __ELF__
	if compiling for the ELF object format.
	(CC1_SPEC): Pass -mrose if no object format switch.
	(DWARF_DBX_REGISTER_NUMBER): Map registers according to the
	debugging format.

Wed Jun  9 13:21:03 1993  Brendan Kehoe  (brendan@lisa.cygnus.com)

	Mon Jun  7 18:01:31 1993  Mike Stump  (mrs@cygnus.com)

	* cp-search.c (is_subobject_of_p, lookup_field, lookup_fnfields):
	Because virtual bases don't necessarily share the same binfo, use
	the binfo hierarchy of TYPE_BINFO of any virtual bases, when
	performing hiding checks.  Fixes problem introduced on Thu Mar 25
	23:09:27 1993.  The symptom is the compiler reports non ambiguous
	members as being ambiguous.

	Wed Jun  2 11:53:24 1993  Mike Stump  (mrs@cygnus.com)

	* cp-search.c (lookup_fnfields_here): Use TYPE_MAIN_VARIANT on
	context types before comparing.  Fixes const member functions not
	being found in templates.

Tue Jun  8 19:44:23 1993  Brendan Kehoe  (brendan@lisa.cygnus.com)

	* cp-decl.c (finish_function): Move setting of the DECL_RESULT's
	context and calling setjmp_protect after poplevel, so we have a
	valid DECL_INITIAL for the fndecl (not an error_mark_node).

Tue Jun  8 13:14:27 1993  John Hassey  (hassey@dg-rtp.dg.com)

	* configure: Added gas support for m88k-* targets.

	* t-luna-gas t-dgux-gas t-m88k-gas: New files in config/m88k.

Tue Jun  8 14:51:44 1993  Jim Wilson  (wilson@wookumz.gnu.ai.mit.edu)

	* loop.c (move_movables): Delete REG_EQUAL notes that describe a
	non loop invariant value.

	* sparc.c (call_operand, call_operand_address): Accept any address
	not just REG rtx.

Tue Jun  8 18:47:39 1993  Torbjorn Granlund  (tege@nada.kth.se)

	* sparc.h: (RTX_COSTS): Make cost of MULT depend on TARGET_V8.

	* pa.h (CPP_SPEC): Fix typo: define __hp9000s700.

Tue Jun  8 06:16:30 1993  John Hassey  (hassey@dg-rtp.dg.com)

	* m88k.h (HARD_REGNO_REGS, HARD_RENO_MODE_OK, MODES_TIEABLE_P):
	Restrict use of 88110 extended registers to floating point.

Mon Jun  7 15:42:10 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* math-68881.h (atan2): For x <= 0, lump y == 0 with y > 0
	to get the right result in 0, -1 case.

Mon Jun  7 17:50:25 1993  Jeff Law  (law@snake.cs.utah.edu)

	* pa.h (RTX_COSTS): Cost of MULT also depends on 
	TARGET_DISABLE_FPREGS.

	* pa.h (ASM_OUTPUT_INT): Always emit special "plabel" relocation for
	function labels.

Sun Jun  6 16:31:59 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* gcc.c (translate_options): Don't assume option_map[j].arg_info != 0.

	* config/vax/vax.h (PRINT_OPERAND): Prefix constant by `$'.

Sun Jun  6 00:44:48 1993  Torbjorn Granlund  (tege@nada.kth.se)

	* m88k.md (fix_truncdfsi2): Destination is general register, source
	general or extended register.
	(fix_truncsfsi2): Likewise.

Sun Jun  6 00:20:25 1993  Kresten Krab Thorup  (krab@iesd.auc.dk)

	* objc-act.c (encode_type): Add cases for DImode, encoded
	as 'q' and 'Q' respectively.

Sat Jun  5 14:02:36 1993  James Van Artsdalen  (james@bigtex.cactus.org)

	* c-decl.c (pushdecl): Copy DECL_FRAME_SIZE for inline function decls.

	* stmt.c (check_for_full_enumeration_handling): Don't create a
	default label if all enumeration literals are covered by cases.

Sat Jun  5 04:49:19 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* function.c (uninitialized_vars_warning): Change warning text.
	(setjmp_args_warning): Likewise.

	* c-typeck.c (convert_for_assignment): Allow conversion to union type
	for pointer if the pointer could convert to the union member.

Fri Jun  4 18:09:47 1993  Jim Wilson  (wilson@sphagnum.cygnus.com)

	* integrate.c (expand_inline_function): Always copy a SUBREG as an
	argument into a REG.

Fri Jun  4 05:52:28 1993  Torbjorn Granlund  (tege@nada.kth.se)

	* pa.h (RTX_COSTS): Make cost of MULT depend on TARGET_SNAKE.

	* expmed.c (synth_mult): Move code to add or subtract at
	leftmost 1-bit to before factoring code to decrease the allowed cost
	quickly.  Restrict it to handle only odd numbers.
	(init_expmed): Limit mult_cost to make synth_mult run faster.

Fri Jun  4 23:18:35 1993  Kresten Krab Thorup  (krab@iesd.auc.dk)

	* objc/sendmsg.c (objc_msg_sendv): Pass a dummy va_list, not 0,
	to objc_error.

Fri Jun  4 16:12:43 1993  Jim Wilson  (wilson@wookumz.gnu.ai.mit.edu)

	* byteorder.h: Use new-style function definitions, so that this
	file is both valid C and C++.

Fri Jun  4 00:59:31 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* config/mips/svr4-5.h (CPP_PREDEFINES): 
	Add _MIPS_SZINT _MIPS_SZLONG _MIPS_SZPTR.

Thu Jun  3 23:48:39 1993  Jeff Law  (law@snake.cs.utah.edu)

	* pa.c (output_function_epilogue): If the last insn in the
	current function is a (volatile) call, then emit an extra
	nop after the call so that RP will point to a valid instruction.

Thu Jun  3 18:52:24 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* config/nextstep.h (INCLUDE_DEFAULTS): Use same order as cccp.c.
	Add CCC_INCLUDE_DIR with /ansi and /bsd concatenated.

	* varasm.c (immed_real_const_1): Check explicitly for NaNs.

Thu Jun  3 14:37:25 1993  Jim Wilson  (wilson@sphagnum.cygnus.com)

	* combine.c (num_sign_bit_copies): At end, return 1 is nonzero has
	the high bit set.

Wed Jun  2 17:27:31 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* loop.c (record_initial): Reject insns that store into subregs.

Tue Jun  1 12:46:48 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* Version 2.4.3 released.

	* just-fixinc: New file.

	* config/convex/convex.h [_IEEE_FLOAT_] (LINK_SPEC):
	Use ___gcc_cleanup, not __gcc_cleanup.

Tue Jun  1 07:41:26 1993  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* rs6000.md (ffs): Delete pattern containing nonexistant instruction.

	* alpha.md (extendsidi2): Correctly do operation when in FP
	registers and, since expensive, don't have FP regs as a preference.

Tue Jun  1 00:09:46 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* fixincludes (signal.h): Fix typo in last change.

	* configure: Add missing dash in patterns for mips-*-riscos...
	In riscos 5 patterns, use fixinc.mips.

	* fixinc.mips: New file.

	* config.sub: Handle 386bsd.

Mon May 31 23:47:00 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* config/vax/vax.md (untyped_call, blockage): New patterns,
	basically copied from m68k.md.

Mon May 31 21:46:08 1993  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* romp.c (output_epilog): Don't crash if TYPE_SIZE of an arg is
	not set.

Mon May 31 00:15:20 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* config/mips/x-sony (OLDCC): Fix typo.

	* config/mips/bsd-4.h, bsd-5.h, svr3-4.h, svr3-5.h, svr4-4.h, svr4-5.h:
	(STANDARD_INCLUDE_DIR): Renamed from SYSTEM_INCLUDE_DIR.
	* config/mips/bsd-5.h, svr3-5.h, svr4-5.h (LINK_SPEC):
	Delete excess close brace.

	* pa.md (decrement_and_branch_until_zero):
	Reverse all conditions in reload cases.

	* Version 2.4.2 released.

Sun May 30 21:14:42 1993  Jim Wilson  (wilson@sphagnum.cygnus.com)

	* integrate.c (expand_inline_function): Increment map->const_age
	before copying REG_NOTES.

	* sparc.c (sparc_builtin_saveregs): Don't set first_reg to zero
	for varargs.

Sun May 30 23:58:52 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* objc/Makefile (copy-headers): chmod the headers, not the dir.

	* Makefile.in (objc-headers): Don't dep on force.
	Touch objc-headers so copy is not repeated at install time.

	* final.c (shorten_branches): Conditionalize last change
	on SHORTEN_WITH_ADJUST_INSN_LENGTH.

	* pa.h (SHORTEN_WITH_ADJUST_INSN_LENGTH): Defined.

Sun May 30 13:53:30 1993  Jeff Law  (law@snake.cs.utah.edu)

	* final.c (shorten_branches): Call ADJUST_INSN_LENGTH during the
	shortening phase.

	* pa.c (output_cbranch): In forward/long branch case, only
	nullify if the delay slot was empty or if the delay slot
	was explicitly nullified.
	(output_bb): Likewise.
	
	* pa.h (ADJUST_INSN_LENGTH): Call pa_insn_adjust_length.

	* pa.h (INSN_SETS_ARE_DELAYED): Do not call get_attr_type with a 
	CLOBBER insn.
	(INSN_REFERENCES_ARE_DELAYED): Likewise.

	* pa.md (call insns and expanders): Do not explicitly clobber %r31.

	* pa.c (pa_insn_adjust_length): Rework.  Add code to handle
	millicode calls with unfilled delay slots and inline block moves.
	(compute_movstrsi_length): New function to compute the length of
	a movstrsi pattern.
	(output_cbranch): Long branches with unfilled delay slots can
	always nullify the following instruction if their delay slot
	was not filled.

Sun May 30 18:58:22 1993  Jim Wilson  (wilson@sphagnum.cygnus.com)

	* mips.c (function_arg_partial_nregs): For BLKmode values, fits in
	remaining register if total size <= MAX_ARGS_IN_REGISTERS, not <.

Sun May 30 17:45:06 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* emit-rtl.c (operand_subword): Shift by (HOST_BITS_PER_WIDE_INT / 2),
	not by 32.

	* reload1.c (reload): If only non-group need is unfilled, see if
	regs spilled for earlier classes can satisfy it.

	* config/mips/iris4loser.h (ASM_SPEC): Add unconditional -O0.

Sat May 29 15:19:57 1993  Jeff Law  (law@snake.cs.utah.edu)

	* pa.md (movdf for const_double): Handle loading
	a CONST_DOUBLE into general registers.
	(movsf for const_double): Likewise.

	* pa.c (singlemove_string): Handle SFmode CONST_DOUBLE 
	as a source operand.

Sat May 29 14:14:30 1993  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* emit-rtl.c (operand_subword): Correctly handle case when
	REAL_VALUE_TO_TARGET_DOUBLE is used on a 64-bit machine.

Sat May 29 12:15:43 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* fixincludes (signal.h): Don't mung #endif if nonwhite stuff precedes.

	* rtl.h: Undef PC.

Fri May 28 19:01:39 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* configure (i[34]86-*-isc*): If gas and not stabs, use isccoff.h.

	* final.c (shorten_branches): Do not call insn_current_length
	with an insn which has a non-varying length.  Use insn_lengths
	instead.

	* c-typeck.c (process_init_constructor): Never set current_index
	itself--always store into current_index_node.

	* dbxout.c (dbxout_type): Add missing `;' for array with no domain.

Fri May 28 16:47:54 1993  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

        * cse.c (fold_rtx): Correct check for associating shifts and
        ending up with a shift count too large; convert to the
        largest valid for ASHIFTRT and don't fold all others.

	* combine.c (make_compound_operation, case ASHIFTRT): Fix typo.
	Was using C1 where C2 is needed.

Fri May 28 17:50:38 1993  Jim Wilson  (wilson@sphagnum.cygnus.com)

	* integrate.c (expand_inline_function): When copy REG_NOTES, must
	also call subst_constants.

	* gcc.c (process_command): When GCC_EXEC_PREFIX is defined and
	tooldir is relative, add it to search path in addition to standard
	directory rather than instead of.

Fri May 28 00:50:53 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* config/arm/arm.h (GO_IF_LEGITIMATE_INDEX): Check explicitly for
	upper and lower bounds of valid INDEX.

	* genopinit.c (insn_name_ptr): Declare as variable.
	(optabs): Fix typo in floatuns case.

Thu May 27 12:13:55 1993  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* combine.c (simplify_and_const_int, case IOR, XOR, NOT): Don't
	create constant wider than mode of VAROP.

Thu May 27 20:41:18 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* configure (i[34]86-ibm-aix*): Set fixincludes.
	(i[34]86-*-sco*): Don't test --with-gas, just --with-stabs.

Wed May 26 16:05:05 1993  Michael Collison  (collison@osf.org)

	* jump.c (jump_optimize): Insert missing GET_MODE call.

Wed May 26 18:40:09 1993  Jim Wilson  (wilson@wookumz.gnu.ai.mit.edu)

	* i960.md (ashlsi3): Use shlo instead of shli.

Wed May 26 00:34:33 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* config/nextstep.h (INCLUDE_DEFAULTS): Undo previous change.

	* Makefile.in (gcc.xtar.z): Renamed from gcc.xtar.Z.  Use gzip.
	(dist): Depend on gcc.xtar.z.
	(mostlyclean): Delete temp-gcc.xtar.z.

	* Version 2.4.1 released.

	* c-lex.c (readescape): Don't complain for \% unless pedantic.

	* config/mips/mips.h (ASM_SPEC): If -noasmopt, pass -O0.
	* config/mips/iris3.h: Likewise.

	* config/mips/iris4loser.h: New file.
	* config/mips/iris4gl.h: New file.
	* configure (mips-sgi-iris4loser): New alternative.

Tue May 25 18:05:50 1993  Jim Wilson  (wilson@sphagnum.cygnus.com)

	* dbxout.c (dbxout_block) [DBX_BLOCKS_FUNCTION_RELATIVE]:
	Get function name from DECL_RTL not from DECL_ASSEMBLER_NAME.
	* config/sparc/sol2.h (ASM_OUTPUT_SOURCE_LINE): Likewise.

	* m68k/sun3.h (FUNCTION_VALUE, FUNCTION_VALUEX): Ifdef out.

	* c-typeck.c (convert_for_assignment): When allowing mixing of
	signed and unsigned pointers, compare unsigned types not type sizes.

Tue May 25 00:08:42 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* nextstep.h (INCLUDE_DEFAULTS): Delete /NextDeveloper/Headers/ansi
	and /NextDeveloper/Headers/bsd.

	* regclass.c (regclass): Fix paren error.

	* c-decl.c (finish_decl): If type is laid out, but decl is not,
	call layout_decl.

	* protoize.c (include_defaults): Update to match cccp.c.
	* Makefile.in (stamp-proto):
	Pass LOCAL_INCLUDE_DIR based on local_prefix.

	* stmt.c (expand_asm_operands): Detect constants as outputs.

Mon May 24 18:25:23 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* collect2.c (main): Use TARGET-gcc, not gcc-TARGET.

	* reload1.c (delete_output_reload): Don't delete output reload
	if cannot_omit_stores is set for that pseudo.
	(reload): Init and clear cannot_omit_stores.
	(eliminate_regs): Set cannot_omit_stores.

	* configure (i[34]86-*-sco3.2v4*): Test --with-stabs, not --with-gas.

Mon May 24 14:10:59 1993  Jim Wilson  (wilson@sphagnum.cygnus.com)

	* integrate.c (expand_inline_function): Set MEM_IN_STRUCT_P for
	return value if needed.

Mon May 24 13:10:07 1993  Brendan Kehoe  (brendan@lisa.cygnus.com)

	* cp-call.c (convert_harshness): Don't dereference a null parm.

	* cp-method.c (dump_init): Don't try to print out the first operand
	of a TARGET_EXPR if it's not there.

Mon May 24 10:13:26 1993  Mike Stump  (mrs@poseidon.cygnus.com)

	* expr.c (expand_expr): Finish Tue Aug 18 23:07:33 1992 change.  It
	didn't handle the target != 0 case, now it does.

Mon May 24 00:30:50 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* expr.c (expand_expr, TARGET_EXPR case):
	Handle case where DECL_RTL is nonzero.

	* configure (i[34]86-*-isc*): Use install-headers-cpio.

	* genopinit.c (optabs): Add backslashes to prevent SCCS confusion.
	* config/m68k/tower-as.h (CONSTRUCTOR_NAME_FORMAT): Likewise.

	* combine.c (subst): For subreg-of-constant, don't gen_lowpart
	if it's a big-endian machine and constant is multi-word.

	* gstddef.h (size_t) [__GNUG__]: Don't typedef it if it's
	already defined as a macro.

	* config/i386/x-aix (CLIB): Defined.
	* config/i386/aix386.h (STARTFILE_SPEC, LINK_SPEC): New overrides.
	* config/i386/xm-aix.h: Undef TRUE and FALSE before #include.
	* config/i386/aix386ng.h (STARTFILE_SPEC, LINK_SPEC): Don't use
	crtbegin.o, crtend.o, crtn.o, libp.a.  Use gcrt0.0, not gcrt1.o.
	(ENDFILE_SPEC): Use crtn.o.
	(CPP_PREDEFINES): Delete _AIX, AIX, and _I386.  Add ps2, unix.
	(CPP_SPEC): Add _AIX, _I386, _MBCS.  Handle -posix.
	(ASM_SPEC): Turned off.
	* config/i386/t-aix: New file.
	* configure (i[34]86-ibm-aix*): Use t-aix if using gas.

	* config/i386/sco4.h (ASM_OUTPUT_FLOAT, ASM_OUTPUT_DOUBLE):
	New override definitions.

	* toplev.c (compile_file): Undo previous changes (that were to call
	assemble_zeros whenever DBX_DEBUGGING_INFO is defined).

Sun May 23 16:31:38 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* config/nextstep.h (INCLUDE_DEFAULTS): Fix missing comma.

	* config/i386/x-aix (FIXINCLUDES): Defined.
	* fixinc.ps2: New file.

Sun May 23 14:51:06 1993  Kresten Krab Thorup  (krab@iesd.auc.dk)

	* objc/objc.h (objc_protocol): New field `class_pointer'.

	* objc/init.c (__objc_init_protocols): Call recursively
	on super protocols.  Make local var `proto_class' static.

Sun May 23 00:49:17 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* Makefile.in (BISONFLAGS): Remove -v since output file names are long.

	* reload1.c (choose_reload_regs): If inheriting a spill reg,
	and reload_out has a wider mode, just copy from that spill reg,
	don't use it for the reload.

	* reload.c (push_reload): Fix NULL arg in last change.

	* config/m88k/x-tekXD88 (AR_FLAGS): Defined.

Sat May 22 14:49:59 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* config/mips/mips.h (ASM_SPEC): If -noasmopt, don't pass -O2.
	* config/mips/iris3.h: Likewise.

	* config/nextstep.h (INCLUDE_DEFAULTS): Put /usr/include/bsd last.

	* config/alpha/alpha.h (ASM_OUTPUT_DOUBLE, ASM_OUTPUT_FLOAT): 
	Use hex if infinite, nan, or minus zero.

	* real.c (target_isnan): Use GET_REAL macro to get argument.
	(ereal_to_int): Fix potentially wrong-endian argument passed to eisnan.

Fri May 21 14:24:01 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* config/nextstep.h (INCLUDE_DEFAULTS): Add /usr/include/bsd.

	* cccp.c (default_include): Put TOOL_INCLUDE_DIR after
	LOCAL_INCLUDE_DIR in non-cross case.

	* real.c (emdnorm): Fix typo affecting roundoff behavior in XFmode.

	* config/m68k/amix.h (CPP_PREDEFINES): Add -D__svr4__.
	(ASM_GENERATE_INTERNAL_LABEL, ASM_OUTPUT_INTERNAL_LABEL):
	New override definitions.

	* collect2.c (main) [CROSS_COMPILE]: Use TARGET-TOOL for full_...

	* collect2.c (main): For -debug, if ..._file_name is a null pointer,
	say so instead of crashing.

	* m68k.md (cmpxf2 recognizer): Test SGS_CMP_ORDER, not HPUX_ASM.

	* c-common.c (constant_expression_warning)
	(overflow_warning, convert_and_check): Change pedwarn to warning.

	* reload.c (push_reload): When IN is a subreg of a multiword reg
	that uses a funny number of registers, and SUBREG_WORD is nonzero,
	and IN must match an output, reload both the reg and the subreg.

	* protoize.c (add_symbol, unexpand_if_needed, abspath): 
	Supply missing arg to savestring.

	* Makefile.in (info, dvi): New targets.

Fri May 21 10:28:41 1993  Brendan Kehoe  (brendan@lisa.cygnus.com)

	* cp-pt.c (subst): Don't use a method's arguments unless it has some.

Fri May 21 11:51:20 1993  Kresten Krab Thorup  (krab@iesd.auc.dk)

	* objc/sarray.h (sarray_get): Add #ifdef case for
	!defined(PRECOMPUTE_SELECTORS) and OBJC_SPARSE2.
	* objc/sarray.c (sarray_at_put): Likewise.
	
Fri May 21 00:51:10 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* configure (mips-*-ultrix*): Renamed from mips-dec-ultrix*.

Thu May 20 23:16:43 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* reload1.c (choose_reload_regs): Handle earlyclobbers
	when inheriting from reg_last_reload_reg.

Thu May 20 13:59:16 1993  Doug Evans  (dje@canuck.cygnus.com)

	* Makefile.in (install-dir): Fix syntax, make tooldir before assertdir.

Thu May 20 08:52:30 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* gstddef.h [_ANSI_H_]: Handle __need_size_t and __need_wchar_t.

	* fixincludes (Fixing CTRL): Reject CTRL or _CTRL following digit.

	* enquire.c (F_check): Check NO_LONG_DOUBLE_IO.

Wed May 19 23:18:55 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* config/i386/x-isc3 (X_CFLAGS): Delete -DPOSIX_JC.

	* real.c (e24toe, e53toe, e64toe): Fix sign in conversions
	of -infinity.  Do eclear before einfin.

Wed May 19 15:37:20 1993  Jim Wilson  (wilson@sphagnum.cygnus.com)

	* va-sparc.h (va_dcl): Restore accidentally deleted __builtin_va_alist
	declaration.

	* objc-act.c (handle_class_ref): Call assemble_constant_align
	before output_constant.
	* varasm.c (assemble_constant_align): New function.

Wed May 19 13:40:01 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* config/i860/x-sysv4 (X_CFLAGS): Deleted.

	* configure (i[34]86-*-isc*): If version is 3, use x-isc3.
	* config/i386/x-isc3: New file.

Mon May 19 21:47:49 1993  Jeff Law  (law@snake.cs.utah.edu)

	* Fix calling convention for indirect calls on the PA.
	* calls.c (expand_call): Declare and set current_call_is_indirect.
	(emit_library_call, emit_library_call_value): Likewise.
	* function.c (assign_parms): Likewise.
	* pa.h (TARGET_SHARED_LIBS): Define as 1.
	(FUNCTION_ARG): If this is a call through a function pointer, then
	the caller passes all arguments in general registers.

	* pa.h (FUNCTION_ARG_REGNO_P): Account for registers which may
	be unavailable on particular cpu models.  Fix indentation.

Wed May 19 13:13:42 1993  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

        * loop.c (scan_loop): Treat pseudo duplicated for exit tests just
        like we treat user vars in seeing if we can move a SET.

	* combine.c (set_nonzero_bits_and_sign_copies, nonzero_bits):
	If we have a positive constant that is negative in the mode
	it is being used in, treat it as negative.
	* rs6000.h, alpha.h (SHORT_IMMEDIATES_SIGN_EXTEND): Define.

	* emit-rtl.c (operand_subword): Reject cases when BITS_PER_WORD
	is greater than HOST_BITS_PER_INT unless OP is const0_rtx.

Tue May 18 16:31:06 1993  Torbjorn Granlund  (tege@nada.kth.se)

	* pa.h (INITIALIZE_TRAMPOLINE): Make 2:nd flush, end_addr,
	at the last real insn in the trampoline.

Tue May 18 13:35:43 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* Makefile.in (assertdir): use $(tooldir)/include for this.
	(install-dir): Always create assertdir and tooldir.

	* config/arm/arm.md (add/asl recognizer): Use space, not #, after asl.
	Shuffle operands differently.

	* objc-act.c (synth_module_prologue): Set TREE_PUBLIC in umsg_decl.

	* Makefile.in (infodir): New variable.
	(install-dir): Create that dir.
	(install-info): New rule.
	(install-normal): Depend on install-info.

	* fixincludes: Use $file. rather than $file.sed 
	when $file is or might be more than 10 characters long.

	* config/i386/isc.h (LIB_SPEC): Handle -posix before -shlib.

	* config/mips/x-sony: New file.
	* configure (mips-sony-bsd*): Use x-sony.

	* Makefile.in (local_prefix): Do not default from $(prefix).

Tue May 18 09:28:02 1993  Chris Smith (csmith@convex.com)

	* convex.c (replace_pushes, emit_ap_optimizations): Delete.

Mon May 17 18:07:53 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* fixinc.svr4 (ieeefp.h): Delete definitions of __mips and __m68k.

Mon May 17 17:00:00 1993  DJ Delorie (dj@ctron.com)

	* configure.bat: Fix sed for version.c to handle both with
	and without spaces correctly (MS-DOS).

Mon May 17 12:26:55 1993  Jim Wilson  (wilson@sphagnum.cygnus.com)

	* rtl.c (init_rtl): Correct number of 'w's in CONST_DOUBLE format.

Mon May 17 00:07:50 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* Version 2.4.0 released.

	* Makefile.in (extraclean): Remove junk from objc subdir.

	* fixinc.svr4 (ieeefp.h): Delete definitions of __i860 and __m88k.

	* mips/iris4.h (ASM_OUTPUT_ASCII): New overriding definition.

	* pa.h (INITIALIZE_TRAMPOLINE): Pass both the starting and ending
	addresses of the trampoline to the cacheflush pattern.
	* pa.md (cacheflush): Flush the cache entries associated with
	both the starting and ending addresses of the trampoline.

	* gvarargs.h, gstdarg.h [__svr4__ __i860__]:
	Define _VA_LIST only if not defined already.

Mon May 17 00:40:36 1993  James Van Artsdalen  (james at bigtex.cactus.org)

	* i386/sysv4.h (BIGGEST_FIELD_ALIGNMENT, PCC_BITFIELD_TYPE_MATTERS):
	Deleted.  Now handled by HANDLE_SYSV_PRAGMA.
	(HANDLE_SYSV_PRAGMA): Deleted: already defined by svr4.h.

Sun May 16 19:25:38 1993  Jim Wilson  (wilson@sphagnum.cygnus.com)

	* unroll.c (initial_reg_note_copy, final_reg_note_copy): New functions.
	(copy_loop_body): Use new function to copy REG_NOTES.

Sun May 16 13:03:58 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* Makefile.in (extraclean): Delete junk in subdirs of config.
	(distclean): Delete {c,cplus,objc}-parse.output.

	* reorg.c (find_end_label): Update insn after calling emit_jump_insn.

	* fixinc.svr4 (ieeefp.h): Delete `#define __sparc' also.

Sun May 15 01:37:19 PDT 1993  Ron Guilmette  (rfg@netcom.com)

	* fixinc.svr4 (ieeefp.h): Delete `#define __i386' line.

Sat May 15 10:11:01 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* math-68881.h: Add conditional against multiple inclusion.

	* gvarargs.h [__svr4__ __i860__] (_VA_LIST): Do define.
	* gstdarg.h: Likewise.

	* toplev.c (compile_file): If support dbx output,
	always output 0 at start of text section.

	* cp-tree.h (error_not_base_type): Fix typo in decl.

Sat May 15 09:08:23 1993  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* expr.c (expand_assignment): Fix error in last change.

	* rs6000.md (movqi, movhi, movsi): Make sure that address returned
	from force_const_mem is valid.

	* i860.h (INITIALIZE_TRAMPOLINE): Don't make improper SUBREGs
	and ensure that CXT and FNADDR are in registers.

	* convex.c (insert_ap_loads): Initialize AP_IS_LIVE to 0 at
	start of both loops, not just first one.

	* convex.h (REGNO_REG_CLASS): Don't call abort; it will cause
	a compilation error as written and isn't done elsewhere.

	* combine.c (set_nonzero_bits_and_sign_copies): Don't record
	data for a a pseudo that is undefined on entry to a function.
	When a pseudo is clobbered, show we don't know anything about it.

	* expr.c (expand_assignment): Always return a result that has
	the mode of TO.

	* rs6000.c (rs6000_makes_calls): If profiling, say we make calls.

Sat May 15 00:38:22 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* va-mips.h (va_arg) [__MIPSEB__]:
	After incrementing, subtract the rounded size, not the size proper.

	* config/i860/x-sysv4 (X_CFLAGS): Defined.
	(GCC_CFLAGS): Definition deleted.

	* final.c (output_addr_const): Don't printing leading zeros.

Sat May 15 06:18:43 1993  James Van Artsdalen  (james at bigtex.cactus.org)

	* reload1.c (reload): Don't start 2-group unless it could be finished.

Sat May 15 12:23:58 1993  Torbjorn Granlund  (tege@nada.kth.se)

	* alpha.c (output_prolog): Change (sp) to ($30).

	* pa.h (TRAMPOLINE_TEMPLATE): Change .long to .word; split into
	two lines.

Fri May 14 18:09:31 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* gcc.c (option_map): Renamed --version to --use-version.

Fri May 14 17:20:21 1993  Jim Wilson  (wilson@wookumz.gnu.ai.mit.edu)

	* xcoffout.c (N_DSLINE, N_BSLINE): Delete definitions.
	(stab_to_sclass): Use ifdefs to test for presence of N_MAIN,
	N_BSLINE, N_DSLINE, N_BINCL, N_EINCL, N_EXCL, N_M2C, N_SCOPE.

	* sched.c (split_hard_reg_notes): Handle 0th sub register, and
	multiple register kills.
	(update_flow_info): For multi-word hard regs, use
	split_hard_reg_notes to add all REG_DEAD notes, instead of just
	the additional ones due to splitting.

Fri May 14 16:12:28 1993  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* configure (hppa1.1-*-hpux*): Use CPIO for headers, just like
	other HPUX configs.
	(hppa1.1-*-hpux8.02*): Likewise.

Fri May 14 16:35:22 1993  Ian Lance Taylor  (ian@cygnus.com)

	* reorg.c (fill_slots_from_thread): If try_split split new_thread,
	update it to the new value.

Fri May 14 13:42:39 1993  Jeffrey A. Law  (law@snake.cs.utah.edu)

	* configure (hp700-hpux8.02): New target.
	* pa1-oldas.h: New target for 1.1 machines running HPUX 8.02.

Fri May 14 13:23:51 1993  Jim Wilson  (wilson@wookumz.gnu.ai.mit.edu)

	* integrate.c (expand_inline_function): Set map->integrating.
	(copy_rtx_and_substitute, case MEM): Don't copy RTX_UNCHANGING_P
	when doing function inlining.
	* integrate.h (struct inline_remap): Add integrating field.
	* unroll.c (unroll_loop): Clear map->integrating.
	* stmt.c (expand_decl): Don't set RTX_UNCHANGING_P.

Fri May 14 12:28:51 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* c-typeck.c (default_conversion):
	Don't replace iterator with its initial value.

	* config/i386/svr3gas.h: Added two pages at end, with macros
	copied from config/svr3.h and i386/sysv3.h.

	* config/m68k/tower-as.h (PRINT_OPERAND): Handle CODE == '/'.
	* hp320.h, mot3300.h, news.h, crds.h: Likewise.

Fri May 14 15:44:45 1993  Kresten Krab Thorup  (krab@xiv.iesd.auc.dk)

        * objc/init.c (__objc_init_protocols): Don't complain if a
	protocol object is attempted resolved twice.  

Fri May 14 00:51:38 1993  Jeffrey A. Law  (law@snake.cs.utah.edu)

	* pa.h (CPP_SPEC): Correct specs so that _PA_RISC1_1 is only
	defined when generating code for 1.1 machines regardless of the
	default target.

Thu May 13 21:47:55 1993  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* rs6000.md (fix_truncdfsi2, fixuns_truncdfsi2, trunc_call): Fix
	typo in mode of FIX and UNSIGNED_FIX rtl.

	* reorg.c (reorg_redirect_jump): New function.
	Call it in most places instead of redirect_jump.

Thu May 13 17:01:05 1993  Jim Wilson  (wilson@sphagnum.cygnus.com)

	* caller-save.c (restore_referenced_regs): New variable saveregs
	which is number of regs to save at a time, instead of numregs,
	which is total number of registers to save.

Thu May 13 08:28:22 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* Makefile.in (OBJC, OBJECTIVE-C): Don't depend on objc-runtime.

	* dbxout.c (dbxout_parms): Don't output a parm if it's a mem
	that has a constant address.

	* config/pa/x-pa (TAROUTOPTS): Overridden.
	* config/m68k/x-hp320,x-hp320g (TAROUTOPTS): Overridden.

	* Makefile.in (TAROUTOPTS): New variable.
	(install-headers-tar): Use TAROUTOPTS.

	* 3b1.h, 3b1g.h, altos3068.h, crds.h, hp2bsd.h, hp310.h:
	* isi-nfp.h, pbb.h, plexus.h, sun2.h, sun3n.h, tower.h:
	(LONG_DOUBLE_TYPE_SIZE): Redefine as 64.

	* objc/runtime.h: Include gstdarg.h before stdio.h.

	* Makefile.in (libobjc.a): Depend on EXTRA_PARTS.

Wed May 13 18:33:26 1993  Torbjorn Granlund  (tege@nada.kth.se)

	* arm.h: Declare output_arithmetic_with_immediate_multiply.

        * arm.md (combined mult/arithmetic recognizers): Switch on.
	Add special pattern for reload.

	* arm.md (restorehi): Use SImode for address.
	(storehi): Use SImode for address and address computation.
	(storeinthi): Likewise.

Wed May 12 22:47:35 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* config/m68k/sun3.h, sun2os4.h (ASM_OUTPUT_FLOAT_OPERAND):
	Output as hex, unless CODE is 'f'.
	* altos3068.h, next.h (ASM_OUTPUT_FLOAT_OPERAND): Likewise.

Wed May 12 14:18:36 1993  John Hassey  (hassey@dg-rtp.dg.com)

	* m88k.h (REG_OK_FOR_BASE_P REG_OK_FOR_INDEX_P): Don't
	use extended registers for base or index.

Wed May 12 14:48:00 1993  Jim Wilson  (wilson@wookumz.gnu.ai.mit.edu)

	* unroll.c (copy_loop_body): Delete May 10 change.

Tue May 11 20:20:41 1993  James Van Artsdalen  (james at bigtex.cactus.org)

	* tree.c (real_value_from_int_cst): Use temporary variable `e' to
	work around bugs in 386 PCC.

Tue May 11 16:50:54 1993  Michael Meissner  (meissner@osf.org)

	* mips/iris3.h, mips/mips.h, mips/news4.h, mips/nws3250v4.h,
	mips/ultrix.h (ASM_SPEC): Pass appropriate -g<n> switch to the
	assembler for -gstabs<n>, -gstabs+<n>, -ggdb<n>, and -gcoff<n>
	switches.

	* local-alloc.c (block_alloc): Don't dereference a NULL pointer.

Tue May 11 12:09:37 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* tree.c (build_array_type): Delete the code to set TYPE_MAIN_VARIANT.
	* c-decl.c (complete_array_type): Likewise.

Tue May 11 11:40:14 1993  Jeffrey A. Law  (law@snake.cs.utah.edu)

	* pa.c (emit_move_sequence): Handle secondary reloads for loads of
	FP registers from constant expressions.

	* pa.h (CONSTANT_ADDRESS_P): Accept symbolic addresses during
	and after reload.

Tue May 11 07:26:06 1993  Richard Kenner  (kenner@mole.gnu.ai.mit.edu)

	* reorg.c (mostly_true_jump): Jump is forward if TARGET_LABEL is
	zero; don't try to get INSN_CODE of zero.

Tue May 11 00:44:09 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* tree.c (build_array_type):
	Don't change TYPE_MAIN_VARIANT if incomplete (domain not known).

	* real.c (enan): Add forward decl.

Mon May 10 20:32:12 1993  Jim Wilson  (wilson@wookumz.gnu.ai.mit.edu)

	* unroll.c (copy_loop_body): Copy REG_NOTES during main loop
	instead of afterwards.

Mon May 10 17:36:31 1993  Richard Kenner  (kenner@vlxisi1.ultra.nyu.edu)

	* alpha.c (output_epilog): Fix minor error in instructions used
	to restore stack pointer.

Mon May 10 15:59:41 1993  Michael Meissner  (meissner@osf.org)

	* mips-tfile.c (parse_def): Do not execute a division by 0 when
	processing a doubly dimensioned array whose outer bound was 0 or
	not specified.

Mon May 10 12:14:07 1993  John Hassey  (hassey@dg-rtp.dg.com)

	* m88k.h (TRAMPOLINE_TEMPLATE): Fixed invalid bsr insn.

Mon May 10 11:55:18 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* protoize.c: Don't include string.h.
	(strcat, strcpy, strcmp, strncpy, strncmp): Decls deleted.
	(dupnstr): Don't use return value of strncpy.
	(dupstr): Function deleted; callers changed to use savestring.

	* tree.c (change_main_variant): New function.
	(build_array_type): Use that to set the TYPE_MAIN_VARIANT.
	* c-decl.c (complete_array_type): Call change_main_variant.

Mon May 10 11:53:02 1993  Steve Chamberlain  (sac@wookumz.gnu.ai.mit.edu)

	* sh.md (movstrsi): Take alignment into account.
	* sh.c (shift_value_ok): Can't shift by negative values.

Mon May 10 11:49:48 1993  Michael Meissner  (meissner@osf.org)

	* va-mips.h (va_arg): Use __alignof__ instead of __alignof.

	* cp-decl.c (finish function): Add missing ';'.

Mon May 10 00:54:16 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* objc/runtime.h: Include gstdarg.h, not stdarg.h.

	* libgcc2.c (__floatdisf): Use DFtype for intermediate values.

	* tree.c (real_value_from_int_cst):
	If I is unsigned, use REAL_VALUE_FROM_UNSIGNED_INT.

	* config/m68k/m68k.c (output_move_double): Use operand 0 to get SIZE.

	* reload.c (find_equiv_reg): Set goal_mem_addr_varies
	for all but true constant addresses.

Sun May  9 17:53:52 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* config/sparc/sparc.h (SIZE_TYPE): Deleted.

	* fixincludes: When finding SIZE_TYPE, cd to ${LIB} to run cc.
	(memory.h): Don't try to read it if it doesn't exist.

	* real.c (NAN): Define for support of Not-a-Number bit patterns.
	(make_nan): New function outputs a NaN in requested machine mode.
	(eisnan, eiisnan, enan, einan, eiisinf, eiinfin): New functions.
	(earith, etrunci, etruncui, ereal_negate, ereal_ldexp,
	real_value_truncate, esub, eadd, emul, ediv, eremain):
	Return NaN arg back to caller.
	(eroundi, eroundui, ereal_to_int): NaN to integer returns -1
	and a warning.
	(target_isnan): Check for NaN.
	(eneg): No-op if NaN.
	(eisneg, eisinf): False if NaN.
	(emovi, emovo): Handle NaN conversions.
	(esub, eadd): Infinity minus infinity = NaN and INVALID warning.
	(ediv): 0/0, inf/inf = NaN and INVALID warning.
	(emul): 0 * inf = NaN and INVALID warning.
	(e24toe, e53toe, e64toe): Generate e-type NaN for NaN input.
	(etoe24, etoe53, etoe64): Output NaN in appropriate machine mode.
	(ecmp): Unordered compare returns -2.
	(etoasc): NaN produces ASCII string "NaN".
	(asctoe): Unrecognizable input produces e-type NaN.
	(eremain): x REM y = NaN if y = 0 or x = infinity.

	* real.c (mtherr): Don't put newlines in error message string.

	* real.h (REAL_VALUES_LESS): True if return value of ereal_cmp is -1.

Sun May  9 17:34:06 1993  Brendan Kehoe  (brendan@lisa.cygnus.com)

	* cp-decl.c (finish_function): Don't do anything if we haven't got a
	current_function_decl.

	* cp-pt.c (tsubst): Don't assert if IN_DECL is null.
	(coerce_template_parms): Likewise.

	* cp-type2.c (process_init_constructor): Fix argument passing to
	initializer_constant_valid_p.

Sun May  9 10:47:05 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* c-decl.c (complete_array_type):
	Make maxindex -1 for empty constructor.

	* i860.c (call_insn_operand): New funcion.
	* i860.md (call, call_value): Copy fn address to safe reg if necessary.
	(call, call_value matchers): Use call_insn_operand as predicate.

	* config/mips/mips.c (call_insn_operand): New function.
	* config/mips/mips.md (call_internal1, call_value_internal1):
	Use call_insn_operand as predicate.
	(call, call_value): Copy fn address to safe reg if necessary.

	* config/m68k/m68k.md (mulhisi3, umulhisi3 matchers):
	Restrict range of constants allowed.

Sun May  9 13:31:35 1993 CET  Kresten Krab Thorup  (krab@iesd.auc.dk)

        * objc/hash.h, objc/objc.h, objc/sarray.h (gstddef.h): 
        Conditionally include gstddef.h or stddef.h by IN_GCC.

Sun May  9 00:51:33 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* reload.h: Fix unterminated comment.

	* objc-act.c (string_section): Delete comma before close-brace.

Sat May  8 23:49:50 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* config/i386/i386.c (call_insn_operand): New function.
	* i386.md (call matchers): Use call_insn_operand.
	(call expanders): If address uses a virtual reg or arg pointer reg,
	copy it.

Sat May  8 23:19:11 1993  Kaveh R. Ghazi  (ghazi@caip.rutgers.edu)

	* configure (m88k-tektronix-sysv3): New target.
	* config/m88k/tekXD88.h: New file.
	* config/m88k/tekXD88.ld: New file.
	* config/m88k/x-tekXD88: New file.

Sat May  8 10:40:54 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* config/i386/i386.md (call insn matchers):
	Use %a to print a mem's non-constant address;
	don't try to print the address by itself.

	* config/i386/next.h (ASM_GENERATE_INTERNAL_LABEL)
	(ASM_OUTPUT_INTERNAL_LABEL): Don't include a `.' in the label name.
	(LPREFIX): Likewise.

	* m68k.c (print_operand): For CONST_DOUBLE, treat VOIDmode like DImode.

	* expmed.c (init_expmed): Supply missing arg to rtx_cost.

	* config/convex/convex.h (LINK_LIBGCC_SPECIAL_1):
	Define this instead of LINK_LIBGCC_SPECIAL.

Sat May  8 14:43:27 1993  Torbjorn Granlund  (tege@nada.kth.se)

	* m68k.md (umulsidi3 expand + two matchers): Rewrite.
	Old patterns misused subreg and matched wrong immediate values.
	Use const_int_operand and constraint `n' for the immediate arg.
	(mulsidi3 patterns): Likewise.

Sat May  8 07:06:14 1993  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

        * i386/sco.h (VALUE_REGNO, HARD_REGNO_MODE_OK): Add missing #undef.
        * i386/sco.h, i386/sequent.h (HARD_REGNO_MODE_OK): Properly check
        for floating-point registers.  Register 16 is AP and not floating.

Fri May  7 19:43:49 1993  Brendan Kehoe  (brendan@lisa.cygnus.com)

	* cp-typeck.c (default_conversion): Disable change of Apr 13th for
	now, since it seems to behave incorrectly in some cases.

Fri May  7 17:38:22 1993  Michael Meissner  (meissner@osf.org)

	* configure (all MIPS options): If --with-gnu-as is used, don't
	build mips-tfile or mips-tdump.  If --with-gnu-ld is used, don't
	say we need collect2.
	(config.sub run): Explicitly invoke /bin/sh to run script, in case
	config.sub had it's execute bits turned off.

	* mips/t-mips-gas: New target file, used when the GNU assembler is
	used instead of the MIPS assembler.

Fri May  7 17:41:00 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* Makefile.in (float.h-nat): Use tmp-float.h as intermediate file.

Fri May  7 13:42:06 1993  Mike Stump  (mrs@poseidon.cygnus.com)

	* cp-search.c (mi_ventry): Change into a struct to make code more
	readable and to shut up compilers about valid ANSI C code.

Fri May  7 13:15:40 1993  Jeffrey A. Law  (law@snake.cs.utah.edu)

	* pa.h (reg_class): Add new NON_SHIFT_REGS class.
	(REG_CLASS_NAMES): Name new class "NON_SHIFT_REGS".
	(REG_CLASS_CONTENTS): Initialize NON_SHIFT_REGS.

	* loop.c (strength_reduce): Handle case where loop_end is the
	end of the current function.

Fri May  7 05:50:39 1993  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* reload.c (push_reload): Don't use IN as the reload reg in in-out
	reload if it is set elsewhere in the insn.

Fri May  7 04:48:25 1993  Chris Smith  (csmith@convex.com)

	* x-convex (CCLIBFLAGS): Build libgcc1 with -tm c1 so it can't
	cause executables to become c2-only.

	* xm-convex.h: Remove workarounds for OS 8.0 no longer needed.
	(bcopy, bzero): Define to use memcpy and memset, to get them inlined.

	* convex[123*].h (CC1_SPEC, CPP_SPEC, LIB_SPEC): Move to convex.h.

	* convex.h (TARGET_FLAGS): Add -mvolatile-[no]cache.
	(TARGET_FLAGS, LONG_TYPE_SIZE): add -mlong{32,64}.
	(target_cpu): Define, enumeration for targets to use instead of flags.
	(TARGET_C34, TARGET_C38): Add.  These don't schedule the same as C2.
	(OVERRIDE_OPTIONS): Call init routine in convex.c.
	(CPP_SPEC, ASM_SPEC, LINK_SPEC): If originally bootstrapped with 
	an ieee compiler, produce an ieee gcc.
	(LINK_LIBGCC_SPECIAL): Define, to avoid searching old libgcc.a
	versions during bootstrap.
	(STACK_BOUNDARY): Change from 32 to 64 -- odd-word aligned
	longwords are slow on c34.
	(FUNCTION_PROLOGUE): Make frame size a multiple of 8, not 4.
	(FUNCTION_EPILOGUE): Output a 0 to terminate c34 icache prefetch.
	(INITIAL_FRAME_POINTER_OFFSET): Make a multiple of 8.
	(REG_ALLOC_ORDER): Define.  Put S0 (the return register) last.
	(HARD_REGNO_MODE_OK): Rewrite to make clearer.
	(MODES_TIEABLE_P): Rewrite to make clearer.
	(PREFERRED_RELOAD_CLASS): Rewrite to make clearer.
	(S0_REGNUM, A0_REGNUM): Define.
	(*_REGNUM): Write in terms of [AS]0_REGNUM instead of absolute numbers.
	(enum reg_class, etc): Add SI_REGS == S_REGS + INDEX_REGS.
	(REGNO_REG_CLASS, REG_CLASS_FROM_LETTER, REGNO_OK_FOR_*_P): Use tables.
	(CONST_OK_FOR_LETTER_P): Change.  New def passes any const_int,
	rejects any const_double.
	(CONST_DOUBLE_OK_FOR_LETTER_P): Change.  New defs are 'G' == low
	word all zeros, 'H' == high word all signs.
	(EXTRA_CONSTRAINT): New. 'Q' == volatile memref.  Used to generate
	cache-bypass instructions when -mvolatile-nocache is set.
	(RETURN_POPS_ARGS): Change, always true.
	(FUNCTION_ARG_ADVANCE): Count args, not # words of args.
	(FUNCTION_ARG): Return arg count to the final VOIDmode FUNCTION_ARG
	hack that supplies "next arg register" to be stored in call insn.
	(TRAMPOLINE_TEMPLATE): Use instruction notation rather than constants.
	(INITIALIZE_TRAMPOLINE): Use gen_call_pop.
	(LEGITIMATE_CONSTANT_P): Rewrite to make clearer.
	(GO_IF_LEGITIMATE_ADDRESS): Do not use indirect addressing -- with
	insn scheduling, two loads can be faster and can't be slower.
	(SLOW_BYTE_ACCESS): Define unless C2.  Memory access to bytes is
	not actually slow, but faster processors don't forward partial
	word writes to word reads, and setting SLOW_BYTE_ACCESS
	makes the code consistently use word ops where possible.
	(CONST_COSTS): Const_DOUBLE cost is zero -- if it appears, it is
	immediate and therefore free.
	(RTX_COSTS): areg+const is free (via indexing).
	(RTX_COSTS): Provide target-dependent values for *,<<,>>
	(ADDRESS_COST): Zero.  Indirect addresses are no longer used.
	(ADJUST_COST): Define.
	(TARGET_FLOAT_FORMAT): Define as VAX_FLOAT_FORMAT.  Also
	accurately describes the semantics (not the bit pattern)
	of convex ieee mode.
	(REAL_VALUE_ATOF): Define, to prevent real.c from constructing
	vax dfloats.  Apparently it doesn't do gfloat.
	(CHECK_FLOAT_VALUE): Call convex.c.
	(ASM_FILE_START): Output appropriate .fpmode pseudo op.
	(ASM_IDENTIFY_GCC): Ouput a zero after gcc2_compiled to keep it
	from hiding the real name from profilers and adb.
	(ASM_OUTPUT_DOUBLE, _FLOAT): Use hex to avoid /bin/as conversion 
	errors.
	(ASM_DECLARE_FUNCTION_NAME): Define; call convex.c.
	(PRINT_OPERAND, _ADDRESS): Call convex.c.
	(EXIT_BODY): Define for libgcc2.  Call atexit handler if present.
	
	convex.md: Add scheduling info.
	(movxx): One of the operands must be a register.
	(movdf, movdi):	Add anonymous patterns that can load an arbitrary 
	const_double by doing two immediate loads.  This is not superior
	to loading it from memory, and can be worse, so LEGITIMATE_CONSTANT_P
	still rejects these constants, but the patterns are still useful
	so rtx folding can produce arbitrary results.
	(floatunsdidf, floatunsdisf): Add patterns that avoid double rounding.
	(floatunssidf, floatunssisf): Add patterns that mimic gcc's default
	method, to keep SI cvts from promoting to the above DI cvts.
	(fix_truncdfsi2): Use cvtd.l even if cvtd.w is available -- on c34
	cvtd.w is microcoded and slower.
	(addqi3, subqi3, mulqi3): can do immediate with word insn.
	(subsi3): use sub/neg to get reverse subtract (reduces reg shuffling).
	(udivsi3): give up on having sign_expand_binop do this; people keep
	breaking it.  Manually extend unsigned SI to signed DI, then divide.
	(xshfxx3): The options rank differently on different machines, so 
	spell them all out and enable the appropriate ones under TARGET_Cxx.
	(sqrtxx2): Put under flag_fast_math.
	(sinxx2, cosxx2): I don't know why these exist, but they do, so supply
	them.  The other microcoded intrinsics are in convex math.h.
	(txtxx): Remove, no longer necessary.
	(cmpdi): Add alternative to fake "eq.l #0,sk" with "neg.l sk,scratch".
	(cmpqi): Omit, seems to produce marginally better cse than the old way.
	(cmpsf): Avoid compare against 0.0 in ieee mode, since -0.0 is 
	possible and would confuse old ucode.
	(movstrsi): Add.
	(anon): Add patterns to pick up on dbra optimizations and implement the
	sub/test part.  (This optimizes out the compare against 0.)
	(call, call_value): Use _pop form instead, and let convex.c replace
	the pushes with fp stores.
	(end): Put local variable list back.

	convex.c (init_convex): New. Fill in tables used by convex.h.
	(psw_disable_float): New.  Turn off float exception enables to
	make the environment more ieee-like.
	(set_cmp): Change name to output_cmp.
	(gen_cmp): Change name to output_condjmp.  Add handling for
	`neg.x' as a fake `eq.x #0' and for optimized-out compares
	that read the carry of a preceding decrement.
	(simplify_for_convex): New.  Replace addr-(-const) with
	addr+const so /bin/as will like the notation.
	(expand_movstr): New.  Generate pipelined load/store sequence.
	(asm_declare_function_name): New. Output arg count for debuggers.
	(print_operand): Moved from convex.h.  Add %u and %v to fetch
	subwords of a CONST_DOUBLE, %z to use in replacing shift by mul.
	(print_operand_address): Moved from convex.h.
	(outfloat): New, call REAL_VALUE_TO_DECIMAL.
	(replace_arg_pushes): New.  Replace sp by fp if possible; this does
	not allow us to get rid of sp but stores are faster than pushes on
	new machines.
	(emit_ap_optimizations): New.  Do simple live analysis of arg pointer
	register and eliminate dead reloads.
	
	math-convex.h: removed.
	fixinc.convex: new file.

Thu May  6 22:54:43 1993  Torbjorn Granlund  (tege@hal.gnu.ai.mit.edu)

	* config/we32k/we32k.h (ASM_OUTPUT_ASCII): 
	Cast PTR to unsigned char *.
	* config/clipper/clix.h (ASM_OUTPUT_ASCII): Likewise.

Thu May  6 20:20:41 1993  Brendan Kehoe  (brendan@lisa.cygnus.com)

	* cp-decl.c (build_enumerator): Strip any no-op casts off the
	value before we try to do anything with it.

	* cp-call.c (convert_harshness): Take volatility, in addition to
	constness, into account when figuring out the penalty for the
	type under question.

	* cp-decl.c (grokdeclarator): Undo unneeded change of Apr 6 when we
	returned the type of the local typedef, instead of the typedef itself.

Thu May  6 19:21:34 1993  Doug Evans  (dje@canuck.cygnus.com)

	* reload1.c (eliminate_regs, case {PRE,POST}_{INC,DEC}): Account
	for PUSH_ROUNDING.

Thu May  6 18:17:19 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* config/i386/sequent.h (DBX_OUTPUT_LBRAC, DBX_OUTPUT_RBRAC):
	Override the usual definitions.

	* objc/hash.h, objc/objc.h, objc/runtime.h, objc/sarray.h:
	Use gstddef.h, with doublequotes.

Thu May  6 15:58:18 1993  Ian Lance Taylor  (ian@cygnus.com)

	* fixincludes: More fixes for IRIX 4.0.1.  Rather than replacing
	[^A-Z]CTRL, replace [^A-Z_]CTRL and [^A-Z]_CTRL.  Also patch
	"//" in elf_abi.h which the sed script breaks.

Thu May  6 13:58:39 1993  Jim Wilson  (wilson@wookumz.gnu.ai.mit.edu)

	* clix.h: Include "clipper/clipper.h" instead of "clipper.h".
	* config.sub (os): Add -clix*.
	* configure (clipper-intergraph-clix): Add clipper/ filename prefixes.

	* c-typeck.c (pointer_diff): Error if op1 is pointer to incomplete
	type.

	* fixinc.svr4 (sys/varargs.h): Replace.

Thu May  6 11:58:28 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* reload1.c (forget_old_reloads_1): Accept and ignore 2nd arg.
	(reload_as_needed): Pass that second arg.

	* c-parse.in: For Objc, expect just 20 conflicts.

	* objc-act.c (OBJC_GEN_METHOD_LABEL): Do use CAT_NAME.

	* config/i386/i386.md (extendsidi2): Use cdq or cltd, not cwtl.

        * configure (i[34]86-*-bsd): Don't use collect2.

	* c-typeck.c (convert_for_assignment): Don't use convert_and_check
	when handling arithmetic types here.

	* c-common.c (truthvalue_conversion): Turn off Apr 29 change.

Thu May  6 05:44:23 1993  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* reload.c (find_equiv_reg): Don't look inside a CONST_DOUBLE;
	use operand_subword instead.

	* varasm.c (record_constant): Properly make the header of
	a struct constant_descriptor.

	* function.c (walk_fixup_memory_subreg): Add new arg UNCRITICAL.
	(fixup_var_refs_insn): Call with UNCRITICAL of 1 when processing
	REG_NOTES.

	* integrate.c (expand_inline_function): Don't call convert_to_mode
	unless we need to; some converstions of VOIDmode objects can
	mess them up.

	* expmed.c (store_split_bit_field): Properly handle VALUE when
	it is a CONST_DOUBLE.

	* fold-const.c (decode_field_reference): Don't do anything for
	non-integral fields.

	* cse.c (simplify_binary_operation, simplify_relational_operation):
	Check for MODE_CC modes, not just CCmode.

Thu May  6 00:54:40 1993  Kresten Krab Thorup  (krab@iesd.auc.dk)

        * objc/class.c, objc/hash.c: Change calloc to __objc_xcalloc.
        * objc/objects.c (class_create_instance): bzero new instances

	* objc/sendmsg.c (__objc_send_initialize, class_add_method_list):
	Allow multiple +initialize methods per class.

Wed May  5 21:40:04 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* config/i386/sequent.h (LINK_LIBGCC_SPECIAL): #if 0.

	* toplev.c (main): Improve error message in previous change.

Wed May  5 19:36:15 1993  Jeffrey A. Law  (law@snake.cs.utah.edu)

	* combine.c (combinable_i3pat): Do not make REG_DEAD notes for
	the stack pointer, frame pointer, or arg pointer.

Wed May  5 17:57:30 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* config/i386/sequent.h (LINK_LIBGCC_SPECIAL): Defined.

Wed May  5 00:01:57 PDT 1993  Ron Guilmette  (segfault!rfg@netcom.com)

	* expr.h: Fix comment typos.  emit_block_move decl was hidden.

	* toplev.c (main): If C++ for Dwarf requested, warn and turn it off.

Wed May  5 21:48:24 1993  Kresten Krab Thorup  (krab@iesd.auc.dk)

	* objc-act.c (check_methods_accessible): Handle interface types. 

Wed May  5 14:37:42 1993  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* fold-const.c: (optimize_bit_field_compare): Add missing arg
	to const_binop.

	* reg-stack.c (record_asm_reg_life): Don't abort for asm that
	doesn't match its constraints.

	* combine.c (num_sign_bit_copies, case SUBREG): Properly compute
	the number of sign bit copies of SUBREGs of promoted objects.

	* optabs.c (add_equal_note, expand_binop, expand_unop): Make
	copy of operands for REG_EQUAL note to avoid sharing RTL if
	called later than RTL generation.
	(emit_libcall_block, expand_fix): Likewise.
	* expr.c (convert_move): Likewise, though probably not
	called after RTL generation.

Wed May  5 14:11:12 1993  Ian Lance Taylor  (ian@cygnus.com)

	* fixincludes: Only quote argument to _IO[A-Z]*, not first item in
	parentheses.  Added patches for IRIX 4.0.1 header files to undo
	some inappropriate changes.

Wed May  5 11:34:59 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* toplev.c (flag_defer_pop): Initialize to 0.
	(main): Set it to 1 if optimizing.

Wed May  5 06:38:47 1993  Tom Wood  (wood@hal.gnu.ai.mit.edu)

	* configure (i[34]86-next-*, m68k-next-*): collect2 isn't needed.

Tue May  4 14:21:11 1993  Kresten Krab Thorup  (krab@xiv.iesd.auc.dk)

        * objc/objc.h, objc/runtime.h: Remove inclusion of memory.h
        * objc/objc.h, objc/hash.h, objc/runtime.h: Remove inclusion of
        gstddef.h 

        * objc/Makefile (OBJC_H): Add typedstream.h 

        * objc/Object.h: Add includes objc/objc.h and objc/typedstreams.h 
        objc/Object.h: Removed `minimal' definitions.  Includes objc.h
        instead.  
        * objc/archive.c: Add include "typedstream.h"

        * objc/typedstream.h: New file.  Contents moved from
        objc/objc-api.h.

        * objc/objc.h (IvarList, Ivar, SymTab, Module, Method,
        Category, Super, objc_method_description, objc_protocol_list):
        Data definitions moved to objc/objc-api.h

        * objc/archive.c: Change malloc into __objc_xmalloc

        * objc/objc.h, objc/sendmsg.c: Remove any code for hash lookup
        * objc/cache.h: File removed

        * objc/objc-api.h (class_create_instance, object_copy,
        object_dispose): Definitions moved to objc/objects.c 

        * objc/objc.h: Remove declarations for library functions.
        * objc/Object.m (-conformsTo:): Bugfix: Also ask superclasses.

Tue May  4 23:46:37 1993  Brendan Kehoe  (brendan@lisa.cygnus.com)

	* cp-decl.c (start_decl): Give an error, not a sorry, when they try
	to declare a template on a VAR_DECL or a TYPE_DECL.

	* cp-type2.c (process_init_constructor): If we have a VAR_DECL
	that's static in the class, don't try to use it when we're working
	on an initializer-list; it has no business being there.

	* cp-cvt.c (convert_pointer_to): Only call get_base_distance et al.
	on RECORD_TYPEs, not on UNION_TYPEs.

	* cp-decl.c (grokdeclarator): Don't try to divine the name of the
	incomplete type for a field decl.

Tue May  4 19:55:29 1993  Jim Wilson  (wilson@wookumz.gnu.ai.mit.edu)

	* combine.c (distribute_notes, REG_DEAD case): Handle hard
	registers which partially overlap the destination of the insn.

Tue May  4 17:59:10 1993  Jeffrey A. Law  (law@snake.cs.utah.edu)

	* pa.md (casesi0): Remove incorrect fix from April 23.
	* pa.h (CASE_DROPS_THROUGH): Define.

Tue May  4 13:22:21 1993  John Hassey  (hassey@dg-rtp.dg.com)

	* t-dgux: Fixed name of link script.

Tue May  4 11:15:40 1993  Steve Chamberlain  (sac@wookumz.gnu.ai.mit.edu)

	* sh.md (arith patterns): Rework constraints.
	* sh.h (ASM_OUTPUT_CASE_LABEL): Ensure jump table is aligned.
	* sh.c (arith_reg_operand): New constraint. (dump_constants):
	Force out a constant table if necessary.

Mon May  3 20:41:00 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* tree.c (build_array_type): The main variant of an array type
	should always be an array whose element type is the main variant.

Mon May  3 19:27:04 1993  Jim Wilson  (wilson@wookumz.gnu.ai.mit.edu)

	* lite.h (CPP_PREDEFINES): Delete -Dsun and -Dunix.

	* combine.c (make_extraction): Move BYTES_BIG_ENDIAN !=
	BITS_BIG_ENDIAN offset correction after the offset calculation.
	* elxsi.h, mips.h (BITS_BIG_ENDIAN): Define to zero.

	* c-decl.c (grokdeclarator, ARRAY_REF case): Build array type, and
	then build the variant array type.

	* sparc.md (floatsitf2): Output fitoq not fitox.

	* i960.md (scc pattterns): Add missing mode to conditional operators.
	* i960.c (output_function_profiler): Add missing newlines in strings.

	* c-common.c (truthvalue_conversion): Don't optimize subtract of
	reals when target uses IEEE arithmetic.

	* c-parse.in: Delete cond.awk reference.
	* cond.awk: Delete file.

Mon May  3 16:58:55 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* c-typeck.c (digest_init): Check size properly for wide-string.

	* Makefile.in (TEXI2DVI): New variable.
	(cpp.dvi, gcc.dvi): Use it.

Mon May  3 16:29:38 1993  Brendan Kehoe  (brendan@lisa.cygnus.com)

	* cp-search.c (lookup_nested_field): Pass complain down as the value
	for lookup_field's `protect' argument.  This will help avoid
	incorrect visibility errors when we're parsing things.

Mon May  3 21:02:22 1993  H.J. Lu  (hlu@yardbird.eecs.wsu.edu)

	* config/i386/linux.h (FUNCTION_PROFILER, ASM_OUTPUT_ADDR_DIFF_ELT):
	Remove PIC stuff.  We wait for the ELF support in gas and binutils.
	(LINK_SPEC): Defined for -v.

Mon May  3 06:41:56 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* objc/Makefile (copy-headers): Put `-' on mkdir command.

Sun May  2 09:28:43 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* cccp.c (macroexpand): Treat `foo ( )' as 0 args if foo wants 0 args.

Sun May  2 07:37:45 1993  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* reload1.c (eliminate_regs, case SUBREG): Leave the SUBREG when
	the inner object is a pseudo on machines that extend byte
	loads (to be consistent with reload.c).
	* reload.c (push_reload): Allow non-paradoxical SUBREGs of MEM
	on machines that extend byte loads.	

Sun May  2 08:57:33 1993  Michael Meissner  (meissner@osf.org)

	* real.c (EDOM, ERANGE): Do not define since errno.h was
	previously included.

Sun May  2 08:28:15 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* cse.c (record_jump_cond): Use mode of op0 or op1, not MODE,
	when testing for narrowing or widening subregs.

Sat May  1 10:10:44 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* config/nextstep.h (WORD_SWITCH_TAKES_ARG): Fix typo.

	* cse.c (simplify_binary_operation): Reject CCmode in  A & (~A) -> 0.

	* cccp.c (macroexpand): If just whitespace between parens,
	treat it as one argument.

Sat May  1 11:02:22 1993  H.J. Lu  (hlu@yardbird.eecs.wsu.edu)

	* Makefile.in (libobjc.a): Depend on $(USE_COLLECT2)

	* objc/Makefile (xforward): Add `else true;' for Ultrix 4.2 make.

Sat May  1 06:49:51 1993  Tom Wood  (wood@next.com)

	* objc-act.c (build_ivar_reference): Warn when a class method
	refers to an instance variable.

Fri Apr 30 22:37:56 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* c-lex.c (yylex): Avoid invalid shift for erroneous empty char const.

	* combine.c (subst, case COMPARE): Use SELECT_CC_MODE even if HAVE_CC0.

Fri Apr 30 12:40:23 1993  John Hassey  (hassey@dg-rtp.dg.com)

	* configure, install.texi: Updated -local configuration option.

Fri Apr 30 15:20:10 1993  Jim Wilson  (wilson@wookumz.gnu.ai.mit.edu)

	* sparc.h (LONG_DOUBLE_TYPE_SIZE): Ifdef out.

Fri Apr 30 14:53:43 1993  Doug Evans  (dje@wookumz.gnu.ai.mit.edu)

	* config.sub: Fix syntax error.

Fri Apr 30 12:00:24 1993  Ian Lance Taylor  (ian@cygnus.com)

	* fixincludes: Fix #endif comments for Ultrix 4.2.

Fri Apr 30 10:45:53 1993  Steve Chamberlain  (sac@wookumz.gnu.ai.mit.edu)

	* sh.c, sh.h, sh.md, t-sh, xm-sh.h: New files for Hitachi SH.
	* configure (sh-hitachi-hms): New configuration.
	* config.sub: Accept sh, hms.

Thu Apr 29 22:20:20 1993  Jeff Law  (law@kahlua.cs.utah.edu)

	* cse.c (cse_insn): Reset the INSN_CODE for conditional
	or computed jumps which have been converted into simplejumps.

Thu Apr 29 14:30:25 PDT 1993  Ron Guilmette  (rfg@netcom.com)

	* c-common.c (truthvalue_conversion):  Specific error message when the
	"truthvalue" of a struct, union, or array type operand is needed.

Thu Apr 29 21:42:26 1993  Brendan Kehoe  (brendan@lisa.cygnus.com)

	Thu Apr 29 12:27:59 1993  Brendan Kehoe  (brendan@lisa.cygnus.com)

	* cp-decl.c (grokdeclarator): When complaining about a field having
	an incomplete type, tell them what type it was, and what template
	instantiation was involved, if we can.

	Wed Apr 28 11:50:28 1993  Brendan Kehoe  (brendan@lisa.cygnus.com)

	* cp-decl.c (grokfndecl): New argument `publicp', to say if we
	should set TREE_PUBLIC on the node for the caller.
	(grokfndecl): Pass the new arg down appropriately.

	* cp-pt.c (instantiate_template): If it's a static member fn, revert
	it into a FUNCTION_TYPE and chop off the this pointer.
	* cp-decl.c (revert_static_member_fn): Make non-static.
	* cp-tree.h (revert_static_member_fn): Add prototype.

	* cp-lex.c (reinit_parse_for_block): Bump the size of BUF for the
	pre-parsed line directive to 16, so we can hold the max # of digits
	in a signed int (10).

Thu Apr 29 19:26:21 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* config/mips/mips.h (ASM_OUTPUT_CONSTRUCTOR, ASM_OUTPUT_DESTRUCTOR):
	Definitions put into #if 0.

	* c-typeck.c (build_conditional_expr): Do default_conversion
	before testing for ERROR_MARK.

	* cse.c (simplify_binary_operation): Don't return const0_rtx
	or constm1_rtx for IOR, AND, XOR in CCmode.
	(simplify_relational_operation): Don't do anything if op0 has CCmode.

	* Makefile.in (install-normal): Move install-libgcc
	after $(INSTALL_HEADERS).

Thu Apr 29 17:09:59 1993  Ian Lance Taylor  (ian@cygnus.com)

	* gcc.c (is_directory): Renamed from is_linker_dir and added
	linker argument.  If not checking linker directory, check whether
	directory exists only if SMALL_ARG_MAX not defined.
	(putenv_from_prefixes): Don't add directories for which
	is_directory returns 0.
	* config/i386/xm-sco.h (SMALL_ARG_MAX): Define.

Thu Apr 29 15:30:09 1993  Jeffrey A. Law  (law@snake.cs.utah.edu)

	* pa.md (shadd for reload): Fix constraint to match the output
	pattern.

Thu Apr 29 15:05:05 1993  Torbjorn Granlund  (tege@hal.gnu.ai.mit.edu)

	* we32k.md (float_extend:DF recognizer): Add missing arg to
	output_asm_insn.
        (float_truncate:SF recognizer): Likewise.

Thu Apr 29 10:18:36 1993  Kresten Krab Thorup  (krab@wombat.gnu.ai.mit.edu)

	* objc/xforward.c: File renamed from objc/_forward.c.
	* objc/Makefile: Updated accordingly.

Thu Apr 29 12:10:49 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* real.c: Deleted casts to void.

	* real.c (emdnorm, eifrac, euifrac, mtherr): Replace
	unconditional `pedwarn' by `warning' conditional on `extra_warnings'.
	(toe24, todec): Use ERANGE to flag overflow on (non-IEEE)
	machines that do not have infinity.
	(etoasc): Check explicitly for overflow of leading decimal digit.
	(asctoeg): Test for, and immediately reject, out-of-bounds
	decimal exponent inputs.
	(at top level): Include errno.h; reference errno,
	warning, extra_warnings.

	* Makefile.in (tooldir): Use exec_prefix, not prefix.
	(gcc.o): Likewise for TOOLDIR_BASE_PREFIX.

	* config/convex/convex.c (output_call):
	Add missing arg to output_asm_insn.

	* gcc.c (default_compilers): Inhibit -D__OPTIMIZE__ if -O0.

	* config/m68k/m68k.md (movxf): Add pattern for soft-float moves.

	* config/m68k/m68k.c (output_move_double): Support XFmode moves.

Thu Apr 29 00:09:34 1993  Kresten Krab Thorup  (krab@wombat.gnu.ai.mit.edu)

	* objc/init.c (__objc_exec_class): Added check for selectors = 0

	Undid the following changes:

	* objc/_forward.c: File removed
	* objc/argframe.h, objc/af-sparc.h: New files
	* objc/Makefile (ARGFRAME_H): New macro
	* objc/Makefile (_forward, fflags): Targets removed
	* objc/msgsend.c (objc_msg_sendv): Changed to use argframe macros
	* objc/Object.[hm], objc/runtime.h, objc/objc-api.h,
	objc/msgsend.c: Changed type name arglist_t to af_frame.

Thu Apr 29 00:04:11 1993  Jeffrey A. Law  (law@snake.cs.utah.edu)

	* pa.h (CONDITIONAL_REGISTER_USAGE): %r19 is fixed
	if flag_pic is true.
	* pa.c (emit_move_sequence): After legitimizing a PIC
	address make sure to copy it from the temporary register
	into the final destination.

Wed Apr 28 18:15:57 1993  Jeffrey A. Law  (law@snake.cs.utah.edu)

	* pa.h (HARD_REGNO_MODE_OK): Allow 1.0 FP registers to hold modes
	which are smaller than 4 bytes.

Wed Apr 28 16:40:38 1993  Roland McGrath  (roland@churchy.gnu.ai.mit.edu)

	* Makefile.in (distdir): Copy subdirectories of config/ too, except RCS

Wed Apr 28 16:19:18 1993  Roland McGrath  (roland@churchy.gnu.ai.mit.edu)

	* Makefile.in (extraclean): Delete *.z as well.

Wed Apr 28 15:10:33 1993  Michael Meissner  (meissner@osf.org)

	* mips/mips.h (MIPS_VERSION): Set Meissner version # to 40.
	(OPTIMIZATION_OPTIONS): Set -mgpopt if -O other than -O0.
	(CC1_SPEC): Don't pass -mgpopt here.

	* mips/osfrose.h (CC1_SPEC): Don't pass -mgpopt here.

	* mips/osfrose.h, i386/osfrose.h (ASM_IDENTIFY_LANGUAGE): If the
	language is C, do not put anything out, to not confuse kernel
	debuggers and the like.

Wed Apr 28 07:31:20 1993  Kresten Krab Thorup  (krab@wombat.gnu.ai.mit.edu)

	* objc/argframe.h (__AF_ARG_ADDR): Removed .curr_off from
	definition. (__AF_ARG_ADVANCE): Removed __AF_CUM_OFF around CUM. 

	* objc/runtime.h (_objc_error): Declaration added.

Wed Apr 28 06:17:02 1993  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* c-lex.c, cp-lex.c (yylex): Don't use unsigned comparison
	to also check for < 0; do it explicitly.
	* combine.c (force_to_mode, simplify_comparison): Cast to
	unsiged HOST_WIDE_INT instead of unsigned int.
	* cse.c (simplify_binary_operation, case SMAX): Likewise.
	* expr.c (emit_block_move): Likewise.

	* convert.c (convert_to_integer): When we want to return zero, 
	be sure we honor any side-effects in our operand.

Tue Apr 27 22:25:29 1993  Kresten Krab Thorup  (krab@xiv.iesd.auc.dk)

	* objc/_forward.c: File removed
	* objc/argframe.h, objc/af-sparc.h: New files
	* objc/Makefile (ARGFRAME_H): New macro
	* objc/Makefile (_forward, fflags): Targets removed
	* objc/msgsend.c (objc_msg_sendv): Changed to use argframe macros
	* objc/Object.[hm], objc/runtime.h, objc/objc-api.h,
	* objc/msgsend.c: Changed type name arglist_t to af_frame.

Tue Apr 27 16:29:45 1993  Tom Wood  (wood@next.com)

	* nextstep.h (NeXT_OBJC, STANDARD_EXEC_PREFIX): Delete.
	* i386/next.h: Use gas.h instead of bsd.h.
	(ASM_GENERATE_INTERNAL_LABEL): Define.

Tue Apr 27 12:20:08 1993  Jeffrey A. Law  (law@schirf.cs.utah.edu)

	* reorg.c (dbr_schedule): Do not run the delay slot scheduling
	pass if the current function has no insns other than the prologue
	and epilogue.
  
	* pa.c (hppa_expand_epilogue): Emit a "blockage" insn
	to keep the stack and frame pointer adjustments at the
	end of the epilogue.
	* pa.md (blockage): New pattern.

Tue Apr 27 10:59:33 1993  Ian Lance Taylor  (ian@cygnus.com)

	* gcc.c (DEFAULT_WORD_SWITCH_TAKES_ARG): New macro.  Like old
	WORD_SWITCH_TAKES_ARG, but added idirafter, iprefix, iwithprefix.
	(WORD_SWITCH_TAKES_ARG): Use DEFAULT_WORD_SWITCH_TAKES_ARG.
	* config/i386/osfrose.h, config/m68k/sun2.h, config/m68k/sun3.h,
	config/mips/osfrose.h, config/sparc/sparc.h, config/svr4.h,
	config/nextstep.h (WORD_SWITCH_TAKES_ARG): Rewrote to use
	DEFAULT_WORD_SWITCH_TAKES_ARG.

Tue Apr 27 07:38:47 1993  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu

	* Makefile.in (stmp-int-hdrs): No longer depends on gsyslimits.h.
	Don't make include/syslimits.h here since we want to test the
	limits.h made by fixincludes, not by the later part of this rule.
	(stmp-fixinc): Depends on gsyslimits.h.
	Make include/syslimits.h here.

	* alpha.c (alpha_emit_set_const, output_{pro,epi}log): Generate
	insns to load constants into a register using a method that works
	on a 32-bit machine as well.

Tue Apr 27 09:26:04 1993 CET  Kresten Krab Thorup  (krab@xiv.iesd.auc.dk)

	* objc/Makefile (fflags): -x test changed to -s test 

        * objc/Makefile: CFLAGS changed to GCC_CFLAGS

        * objc/Object.h: No longer includes objc.h  Instead, a minimal set
        of definitions is provided here.

        * objc/Object.h, Object.m, cache.h, class.c, init.c, misc.c,
        objc-api.h, objc.h, objects.c, sendmasg.c: Usage of Class_t and
        MetaClass_t eliminated. Now using Class* and MetaClass* only.

        * objc/objc.h: Does no longer include stdio.h and stdarg.h.   Minimal
        set of definition, which is provided by Object.h is placed in
        preprocessor conditionals __object_INCLUDE_GNU.  Definitions of
        MetaClass_t and Class_t removed.  Class and MetaClass are no
        longer defines, but typedefs.

Tue Apr 27 01:40:50 1993  Brendan Kehoe  (brendan@lisa.cygnus.com)

	Mon Apr 26 20:45:07 1993  Mike Stump  (mrs@poseidon.cygnus.com)

	* cp-init.c (expand_recursive_init_1): Make sure we use the binfo's
	version of a binfo, rather than someone elses, as the second
	parameter to build_virtual_init must be the exact binfo we want so
	that it may get the right vtable.

	Mon Apr 26 12:58:23 1993  Brendan Kehoe  (brendan@lisa.cygnus.com)

	* cp-type2.c (my_friendly_abort): Rephrase to try to help encourage
	people to send bug reports in, and not just say, "Hey, the compiler
	told me to report an internal error. Bye!".

	* cp-decl.c (grokdeclarator): Forbid declaring an array of references.

	* cp-parse.y (unary_expr): Forbid doing sizeof on a function.

	* cp-typeck.c (build_unary_op): Pedwarn if they try to do pre/post
	increment/decrement on an enum.

	* cp-method.c (build_opfncall): Reorganize things to properly look
	for a postfix operator ++/--, without taking the fastest way out of
	the search, which could lose.

	* cp-search.c (compute_visibility): Check for a member fn
	manipulating its own members before checking the basetype_path.

	* cp-pt.c (lookup_template_class): Instead of dying in the case
	where D1 has a local value but no global or class value, return an
	error_mark_node.

	* cp-pt.c (lookup_template_class): Don't assert if IN_DECL is null,
	since we pass it down that way from the parser.
	(coerce_template_parms): Likewise.
	* cp-parse.y (template_type): Let template_type_seen_before_scope be
	an error_mark if necessary, so we can intelligently handle things
	later rather than give useless syntax errors.

	Sat Apr 24 17:12:17 1993  Mike Stump  (mrs@poseidon.cygnus.com)

	* cp-pt.c (tsubst): When we go back for a second pass, make sure we
	start over with the list of methods.  Fixes problem introduce on
	Sat Mar 20 12:29:37 1993.

Mon Apr 26 18:48:18 1993  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* fold-const.c (fold): Signedness matters for comparisons and
	right shifts.

	* xm-alpha.h (ONLY_INT_FIELD): Define again; this time say why.

	* tree.h (INTEGRAL_TYPE_P, FLOAT_TYPE_P): New macros.
	* fold-const.c: Use INTEGRAL_TYPE_P and FLOAT_TYPE_P.

	* protoize.c (other_variable_style_function): Properly test for
	the presence of the string "...".

	* c-decl.c (pushdecl): Don't make a copy of type of error_mark_node.

Mon Apr 26 18:15:03 1993  Jeffrey A. Law  (law@schirf.cs.utah.edu)

	* pa-hpux.h (LINK_LIBGCC_SPECIAL): Delete.
	(RELATIVE_PREFIX_NOT_LINKDIR): Delete.
	* pa-ghpux.h, pa-hpux7.h, pa-gux7.h: Likewise.

Mon Apr 26 16:57:03 1993  Michael Meissner  (meissner@osf.org)

	* mips-tdump.c (CODE_MASK): Define if running on an alpha instead
	of a MIPS.
	(MIPS_IS_STAB): Ditto.
	(MIPS_MARK_STAB): Ditto.
	(MIPS_UNMARK_STAB): Ditto.
	(tfile): New global, holds result of -t option, to skip global
	header.
	(malloc, calloc, realloc, free): Don't declare on alpha.
	(print_sym_hdr): Make sure all arguments are properly cast to int
	or long, depending on whether the format is %ld or %d.
	(read_tfile): Don't look at magic number, instead use -t option to
	determine whether to skip the global header or not.
	(main): Process -t option.

Mon Apr 26 17:47:10 1993  Kresten Krab Thorup  (krab@iesd.auc.dk)

        * Objective C portability cleanup 
	* objc/Object.c (-hash, -error): Cast changed to size_t
	* objc/archive.c, objc/misc.c, objc/sendmsg: Argument to strlen
	casted to char* everywhere. 
	* objc/class.c (__objc_resolve_class_links): Unused variable
	class1 removed. 
	* objc/class.c (class_pose_as): Unused variable node removed.
	* objc/hash.c, objc/init.c: extra parenthesis around assignment
	conditionals. 
	* objc/Makefile, objc/hash.h, objc/runtime, objc/sarray.h: IN_OBJC
	changed to IN_GCC.
	* objc/init.c: Unused local variable object_class removed. Cast of
	pointer to int changed to size_t.
	* objc/list.h (list_free): No longer declared inline.
	* objc/objc-api.h, objc-runtime.h: Now includes memory.h.
	* objc/objc.h: Added declarations for malloc and friends, IN_OBJC
	changed to IN_GCC.  Type of info member of objc_class changed to
	unsigned long. 
	* objc/objects.c, objc/api.h, objc/sarray.h: Changed usage of
	bcopy to memcpy.
	* objc/sendmsg (__objc_print_dtable_stats): Returntype changed to
	void. 

Mon Apr 26 07:55:03 1993  Doug Evans  (dje@canuck.cygnus.com)

	* sparc.h (ASM_OUTPUT_LONG_DOUBLE): New macro.
	* sysv4.h (ASM_OUTPUT_LONG_DOUBLE): Likewise.

Mon Apr 26 08:45:18 1993  Kresten Krab Thorup  (krab at xiv.iesd.auc.dk)

        * objc/hash.h, objc/init.c, objc/objc.h, objc/sarray.c,
        objc/sarray.h, objc/selector.c, objc/sendmsg.c: Change unsigned
        int to size_t when casting pointer type to integer.
        * objc/sarray.h (struct soffset): Changed to add up to sizeof 
        (size_t) in stead of sizeof (unsigned int).
        * objc/hash.h: Include stddef.h
        * objc/_forward.h: int changed to size_t.

        * objc/Object.m, objc/archive.c, objc-api.h: Take out archiving
        support for alpha.  

        * objc/Makefile: (IN_OBJC): new #define used to control inclusion
        of gstdarg or stdarg for the runtime.   objc/objc.h,
        objc/runtime.h, objc/sarray.h: Updated to use the above. 

Sun Apr 25 21:50:16 1993  Brendan Kehoe  (brendan@lisa.cygnus.com)

	* cp-lex.c (yylex): Re-incorporate changes to redo converting
	float values to desired type.

Sun Apr 25 18:11:24 1993  Ron Guilmette  (rfg@netcom.com)

	* rtl.h (NOTE_INSN_FUNCTION_BEG): Make non-zero.
	* rtl.c (note_insn_name): Re-order for above.

	* dwarfout.c (output_decl):  Check for DECL_INITIAL == NULL_TREE
	rather than DECL_EXTERNAL != 0 when trying to see if we have a
	mere function declaration rather than a function definition.
	(dwarfout_file_scope_decl):  Likewise.  Also, don't bother checking
	TREE_USED for file-scope functions, since it isn't 100% accurate
	until the end of compilation anyway.

Sun Apr 25 17:07:44 1993  Jim Wilson  (wilson@wookumz.gnu.ai.mit.edu)

	* sparc.c (mem_aligned_8): Delete ifdefed out code.  Add support
	for TARGET_UNALIGNED_DOUBLES.
	* sparc.h (TARGET_HOPE_ALIGN, TARGET_FORCE_ALIGN): Delete.
	(TARGET_UNALIGNED_DOUBLES): Define.
	(TARGET_SWITCHES): Delete hope-align, force-align.  Add
	unaligned-doubles and no-unaligned-doubles.
	(ROUND_REG): Delete.
	(FIRST_PARM_OFFSET, FUNCTION_ARG_ADVANCE, FUNCTION_ARG,
	FUNCTION_INCOMING_ARG, FUNCTION_ARG_PARTIAL_NREGS,
	FUNCTION_ARG_BOUNDARY): Delete force-align support.
	(LONG_DOUBLE_TYPE_SIZE): Define to 128.

	* sched.c (create_reg_dead_note): Rewrite so as to conserve
	registers killed not number of REG_DEAD notes.
	(schedule_block): Change comments about dead_notes variable.

	* sparc.h (REG_ALLOC_ORDER, REG_LEAF_ALLOC_ORDER): Make %f0/%f1
	the last float registers allocated.

	* sparc.c (output_load_address, output_size_for_block_move,
	output_block_move): Ifdef out.
	* sparc.md (movstrsi): Comment out.

	* sparc.c (output_function_epilogue): Emit 'nop' instead of
	'sub %sp,-0,%sp' when the frame is empty.
	* sparc.md (movdf): Add a define split.

	* expmed.c (extract_fixed_bit_field): Adjust BITPOS so that it
	fits inside MODE before adjusting OFFSET to get an aligned address.

Sun Apr 25 06:28:56 1993  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* varasm.c (make_decl_rtl): If a variable has an asm operand that
	refers to, e.g., fp, make a distinct RTL for it.

	* c-decl.c (init_decl_processing): Last arg to __builtin_apply
	is size_t, not int.

	* c-lex.c (yylex): Don't warn about floating point out of 
	range if target floating-point format is IEEE.

	* romp.h (SIZE_TYPE): Deleted.

Sat Apr 24 16:46:41 1993  Stephen L. Moshier  (moshier@world.std.com)

	* c-lex.c (forget_protocol_qualifiers): Cast enums to ints before
	comparing.

Sat Apr 24 13:08:56 1993  Jeffrey A. Law  (law@schirf.cs.utah.edu)

	* pa.h (INITIALIZE_TRAMPOLINE): Pass a register operand, not
	a memory operand to "cacheflush".
	* pa.md (cacheflush): Rework pattern and output template to avoid
	using REG+D addressing.

Sat Apr 24 11:15:02 1993  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* flow.c (mark_used_regs): Use proper type for {all,some}_needed.
	* cse.c (invalidate): Likewise for in_table.

	* tree.h (build_binary_op, build_indirect_ref, build_unary_op):
	Delete declarations; these are part of the front ends.

	* objc-act.c (HASHFUNCTION): Cast pointers to widest int type.

Sat Apr 24 02:48:37 1993  Brendan Kehoe  (brendan@lisa.cygnus.com)

	Cygnus<->FSF merge.

	Fri Apr 23 11:08:25 1993  Brendan Kehoe  (brendan@lisa.cygnus.com)

	* cp-call.c, cp-class.c, cp-decl.c, cp-except.c, cp-init.c,
	cp-parse.y, cp-pt.c, cp-search.c, cp-type2.c, cp-typeck.c,
	cp-xref.c: Fix many bugs in types of fn args & such.

	* cp-decl.c (grokdeclarator): When dealing with a class-local
	typedef, only call poplevel when the current_binding_level isn't
	what we marked as being the local_binding_level.

	* cp-decl.c (grokdeclarator): Call pushdecl_class_level, not
	pushtag, to put a class-local typedef into its proper scope.
	Also disable the warning about a typedef hiding the previous
	one, since the cp-class.c change now diagnoses that problem.
	* cp-class.c (delete_duplicate_fields_1): Also check for duplicated
	type names.

	* cp-lex.c (yyerror): Delete extern decl of input_redirected.

	* cp-parse.y (primary): If the global value for a scoped identifier
	ends up being an ADDR_EXPR, call assemble_extern on its argument,
	not on the ADDR_EXPR itself.  Fixes the IMPORT problem on the PA.

	* cp-typeck.c (build_modify_expr_1): Put in missing `else'.

	Wed Oct  7 16:00:29 1992  Chip Salzenberg  (chip@tct.com)

	Change propagated from the C front-end.
	* cp-decl.c (shadow_tag): Use pedwarn for useless keyword.

	Wed Oct  7 17:51:36 PDT 1992  Ron Guilmette (rfg at netcom.com)

	* cp-type2.c (digest_init):  Handle union initializers which are
	"raw" constructors.
	(process_init_constructor):  Renamed `erred' to `erroneous' (as in
	the C front end).
	(process_init_constructor):  Added code to handle union initializers.

	Fri Oct 23 16:29:45 1992  Chip Salzenberg  (chip@tct.com)

	Change propagated from the C front-end.
	* c-typeck.c (process_init_constructor): When initializing a union,
	handle the case of an empty init list.

	Tue Dec  1 21:35:36 1992  Niklas Hallqvist  (niklas at della.appli.se)

	* cp-call.c (convert_harshness): Add support for ellipsis matching
	when dealing with function pointers (or references) in argument
	lists.
	(rank_for_overload): Ditto.
	(compute_conversion_costs): Ditto.
	(*_HARSHNESS): Ditto
	* cp-class.h (struct candidate): Ditto.

	Mon Jan  4 11:46:19 1993  Chip Salzenberg  (chip@tct.com)

	Changes propagated from the C front-end.
	* cp-typeck.c (c_sizeof, c_sizeof_nowarn, c_size_in_bytes):
	Call force_fit_type with end result.

	Sat Jan 30 01:23:22 1993  Niklas Hallqvist  (niklas at della.appli.se)

        * cp-class.c (finish_struct): See to that static members whose
	type is the class they're declared in gets a correct mode.  This
	is a completion of the Jan 23rd change.

	Mon Feb  1 09:40:11 1993  Niklas Hallqvist  (niklas at della.appli.se)

	* cp-search.c (compute_visibility): Add support for  anonymous
	unions nested in classes.

	Tue Feb  2 16:06:10 1993  Chip Salzenberg  (chip@tct.com)

	Eliminate signed integer overflow in specbits:
	* cp-lex.h (RID_BIT_TYPE): New typedef for RID_... bits.
	(RIDBIT): New convenience macro for RID_... bits.
	* cp-decl.c (grokvardecl, grokdeclarator): Declare specbits
	to be RID_BIT_TYPE.  Use RIDBIT instead of "1<<RID_...".

	Mon Feb 15 10:45:12 1993  Niklas Hallqvist  (niklas@della.appli.se)

	* cp-method.c (build_typename_overload): Identifiers built by this
	function needs the IDENTIFIER_OPNAME_P slot set.

	Wed Apr 21 11:25:15 1993  Brendan Kehoe  (brendan@lisa.cygnus.com)

	* cp-decl.c (lookup_nested_type): When dealing with types that are
	local to a nested class's member fn, make sure to hand back a TYPE_DECL
	instead of a RECORD_TYPE.

	Tue Apr 20 20:17:42 1993  Mike Stump  (mrs@poseidon.cygnus.com)

	* cp-spew.c (yylex): Add `typespec (ID::*ID)[' and `typespec
	(ID::*ID)(' to list of things that parse as declarators.

	Mon Apr 19 15:05:21 1993  Mike Stump  (mrs@cygnus.com)

	* cp-search.c (report_ambiguous_mi_virtuals): If is never an error
	to have same named class members at declaration time, ambiguities
	are now caught at use sights.

	Fri Apr 16 13:59:28 1993  Brendan Kehoe  (brendan@lisa.cygnus.com)

	* cp-method.c (build_opfncall): If they didn't declare a postfix
	operator ++ or --, then fall back and use the prefix one.
	* cp-decl.c (grokfndecl): Forbid an operator ++/-- with its second
	argument as anything other than an int.

	* cp-lex.c (set_yydebug): Add extern decl of yydebug.

	Fix enums in nested classes.
	* cp-search.c (lookup_nested_field): New argument `complain', to
	control if we should emit an error about assignment to a member of
	an enclosing class or not.  Also, if ID ends up being an error_mark,
	set it to a NULL so we don't try to do nasty things later---better
	to assume we didn't find anything at all.
	* cp-tree.h (lookup_nested_field): Add new arg to prototype.
	* cp-decl.c (lookup_name): Pass if prefer_type is -2 into
	lookup_nested_field, since there are cases (e.g., nested enums) when
	we still need to look here.
	* cp-lex.c (do_identifier): Pass complain arg as 1 into
	lookup_nested_field.

	Thu Apr 15 11:23:18 1993  Mike Stump  (mrs@poseidon.cygnus.com)

	* cp-search.c (report_ambiguous_mi_virtuals): Pass pointers to
	arrays, not pointers to first elements in the array in call to
	rank_mi_virtuals.

	* cp-lex.c (do_identifier), cp-parse.y: move
	undeclared_variable_notice to where it is really used.

	* cp-lex.c (do_identifier): Improve error message.

	Tue Apr 13 17:04:12 1993  Mike Stump  (mrs@cygnus.com)

	* cp-typeck.c (default_conversion): OFFSET_REFs may not always have
	a TREE_CODE (TREE_TYPE (x)) of OFFSET_TYPE, but they always will
	have a TREE_CODE (x) of OFFSET_REF.

	Fri Apr  9 20:26:32 1993  Mike Stump  (mrs@rtl.cygnus.com)

	* cp-lex.c (real_yylex): Use MAP_CHARACTER translate incoming
	character set.  See c-lex.c ChangeLog entry for more details.

	Thu Apr  8 15:30:58 1993  Mike Stump  (mrs@rtl.cygnus.com)

	* cp-search.c (lookup_field): When looking something up, if
	want_type is set, and what we find is ambiguous make sure we set
	errstr to 0, even when rval is already NULL_TREE.

	Thu Apr  8 11:40:16 1993  Brendan Kehoe  (brendan@lisa.cygnus.com)

	* cp-tree.h (lookup_name_current_level): Add prototype.

	Tue Apr  6 13:36:00 1993  Brendan Kehoe  (brendan@lisa.cygnus.com)

	* cp-decl.c (grokdeclarator): When we see `typedef enum ...' inside
	a class, properly grok the tag instead of giving two bogus errors.
	(lookup_name_current_level): Don't make it static, and delete its
	prototype.

	* cp-lex.h (enum rid): Move RID_UNUSED1 to the end, so that RID_AUTO
	will be 30, not 31.  We're at the limit, the next time a new rid is
	added to this, we have to re-implement it to avoid integer overflows.

	Sat Apr  3 12:16:23 1993  Mike Stump  (mrs@cygnus.com)

	* cp-init.c (emit_base_init): init can be NULL_TREE when dealing
	with arrays, guard against it.

Fri Apr 23 19:33:58 1993  Tor Egge  (tegge@pvv.unit.no)
 
 	* reorg.c (relax_delay_slots): Make sure target_label is set.
 
Fri Apr 23 19:19:06 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* c-decl.c (shadow_tag_warned): Let warned have three values, so that
	a mere warning doesn't prevent a pedwarn.  Don't skip the error call
	at the end on accounted of warned.

	* c-decl.c (push_parm_decl): Turn off warning when parameter
	shadows typedef.

Fri Apr 23 16:41:54 1993  Jeffrey A. Law  (law@schirf.cs.utah.edu)

	* pa.md (casesi0): Indicate that the PC is set to the 
	out-of-range label if the index is not valid.

Fri Apr 23 14:00:48 1993  Peter Schauer (pes@regent.e-technik.tu-muenchen.de)

	* i386/svr3dbx.h, i386/svr3gas.h: Reflect new directory structure.
	* i386/t-svr3dbx: New file to install the required ld ifiles
	automatically.
	* configure (i[34]86-...): Use t-svr3dbx if configured --with-stabs.

Fri Apr 23 13:53:31 1993  Jim Wilson  (wilson@sphagnum.cygnus.com)

	* reload1.c (emit_reload_insns): Advance following_insn if it is a
	clobber, not if the next insn is a clobber.

Fri Apr 23 13:44:12 1993  Joey Pruett  (joey@tessi.com)

	* protoize.c (scan_for_missed_items): Add keywords: else, do, case.

Fri Apr 23 06:52:25 1993  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* fold-const.c (fold, case REALPART_EXPR, IMAGPART_EXPR): Avoid using
	build_{unary,binary}_op since the calling sequences depend on
	the front-end.
	* expr.c (expand_expr, case OFFSET_REF): Likewise.
	* convert.c (convert_to_integer, convert_to_complex): Likewise.

	* c-typeck.c (readonly_warning): Correctly check for assignments
	to iterators.

Thu Apr 22 07:44:40 1993  Tom Wood  (wood@next.com)

	* c-lang.c, objc-act.c (maybe_objc_comptypes): Undo the previous
	change and make the undecided return value from 2 to -1 to avoid
	confusion with the values used by comptypes.
	(objc_comptypes): Ditto.  When two record types are being
	compared, and none of the typed object cases applies, return -1 to
	indicate no decision.
	* c-typeck.c (comptypes): Only pass along a known return value
	from maybe_objc_comptype.
	(comp_target_types): If maybe_objc_comptypes computed a known
	answer, return it.  Don't recurse for Objective-C.

	* nextstep.h (ASM_FILE_START): Don't output a .file directive.
	That's used by the assembler for error reporting.

Wed Apr 21 17:45:50 1993  Ron Guilmette  (rfg at netcom.com)

	* dwarfout.c (location_or_const_value_attribute):  Fixed to use
	DECL_INCOMING_RTL for PARM_DECLs only when DECL_RTL isn't usable,
	and even then, only when it actually points to the right place.

	* integrate.c (integrate_parm_decls):  Copy the DECL_ARG_TYPE value
	from the PARM_DECL being cloned into the DECL_ARG_TYPE field of the
	clone.

	* dwarf.h (AT_lo_user, AT_hi_user):  Fix defined values to be correct
	according to final DWARF V1 spec.

Tue Apr 20 20:32:57 1993  Doug Evans  (dje@canuck.cygnus.com)

	* function.c (assign_parms): Use mode of type, not BLKmode.

Tue Apr 20 18:37:12 1993  Richard Kenner  (kenner at vlsi1.ultra.nyu.edu)

	* configure (rs6000-ibm-aix*): Put cases in proper order.

Mon Apr 19 15:27:16 1993  Doug Evans  (dje@canuck.cygnus.com)

	* calls.c (expand_call): New FUNCTION_ARG_CALLEE_COPIES macro.
	* function.c (assign_parms): Ditto.

Sat Apr 17 17:44:59 1993  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* expr.h (FUNCTION_ARG_PADDING): Add parens to make clearer.
	(MUST_PASS_IN_STACK): Don't allow machine to override (none
	currently do).
	Don't force in stack if wrong padding when padding isn't needed.

	* basic-block.h (reg_basic_block): Now int *, not short *.
	* flow.c (uid_block_number): Likewise.
	(flow_analysis): Allocate uid_block_number and reg_basic_block
	as array of ints.
	* combine.c (reg_last_set_label, reg_last_set_table_tick, label_tick):
	Use int, not short, for counting labels.
	(combine_instructions): Allocate these vars as arrays of ints.
	* jump.c (same_regs): Now arrays of ints.
	(thread_jumps): all_reset also array of ints, and allocate as ints.
	* reg-stack.c (block_number, BLOCK_NUM, reg_to_stack): Use ints,
	not shorts to count blocks.

Sat Apr 17 03:27:48 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* c-parse.in (unary_expr): Delete the alternate REALPART and IMAGPART
	rules with explicit parens.  Make the simple REALPART and IMAGPART
	rules contain cast_expr.

	* c-decl.c (finish_struct): Promote unsigned bitfield to signed int
	if the field isn't as wide as an int.

Fri Apr 16 21:42:49 1993  Brendan Kehoe  (brendan@lisa.cygnus.com)

	* calls.c (expand_call): Check warn_inline before complaining about
	not being able to inline a fn declared inline.
	* flags.h (warn_inline): Add extern decl.

Fri Apr 16 20:27:57 1993  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* alpha.md (blockage): Use unspec_volatile #1; #0 is IMB.

	* local-alloc.c (qty_n_refs): Make int, like reg_n_refs.
	(qty_first_reg, reg_next_in_qty): Make int, not short.
	(local_alloc): Allocate these as arrays of ints.
	(block_alloc, qty_compare_1): qty_order is now array of ints.

Fri Apr 16 20:27:16 1993  Tom Wood  (wood@next.com)

	* a29k.h (FUNCTION_VALUE_REGNO_P): True only for the first register
	in the group.

	* alpha.md, romp.md, rs6000.md (untyped_call, blockage): New patterns.

Fri Apr 16 17:53:21 1993  Ron Guilmette  (rfg at netcom.com)

	* reload1.c (last_spill_reg): Add missing "int".

Fri Apr 16 16:55:16 1993  Doug Evans  (dje@wookumz.gnu.ai.mit.edu)

	* Makefile.in (objc-headers): Ensure objc dir exists.

Fri Apr 16 16:40:49 1993  Michael Meissner  (meissner@osf.org)

	* mips/mips.h (MIPS_VERSION): Set Meissner revision number to 39.
	(SELECT_SECTION): Do not put items with relocation into .rdata.
	(INITIALIZE_TRAMPOLINE, TRANSFER_FROM_TRAMPOLINE): Allow these
	macros to be overidden.

	* mips/iris3.h (INITIALIZE_TRAMPOLINE, TRANSFER_FROM_TRAMPOLINE):
	Provide versions of these that does not rely on using mprotect.

	* mips/t-mips, mips/t-osfrose, mips/t-ultrix, i386/t-osfrose:
	Delete extra dependencies.

	* i386/osfrose.h (SELECT_SECTION): Do not put items with
	relocation into .text if -pic-lib.

Fri Apr 16 01:09:53 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* config/i386/xm-isc.h (REAL_VALUE_ATOF): Define only if
	not REAL_ARITHMETIC.

Thu Apr 15 07:25:00 1993  Tom Wood  (wood@next.com)

	* objc-act.c (IS_ID, IS_PROTOCOL_QUALIFIED_ID, IS_SUPER): New type
	checking macros.
	(objc_comptypes, build_message_expr, gen_declspecs): Use them.

	* objc-act.c (gen_declarator): Don't use strcpy's return value.

	* objc-act.c (build_message_expr): Allow any type that matches
	objc_class_type.

	* objc-act.c (get_class_reference): We already have a name.

	* objc-act.c (receiver_is_class_object): Use STRIP_NOPS.  Search
	cls_ref_chain.

Thu Apr 15 07:25:00 1993  Michael Meissner  (meissner@osf.org)

	* objc-act.c (build_objc_string): Use TREE_SET_CODE instead of
	assigning to TREE_CODE.
	(build_objc_string_object): Ditto.

Wed Apr 14 17:51:50 1993  Holger Teutsch  (holger@hotbso.rhein-main.de)

	* clipper.h (FRAME_POINTER_REQUIRED, FRAME_POINTER_OFFSET):
	Frame pointer is no longer required for leaf functions.
	(OPTIMIZATION_OPTIONS): Define.

	* clipper.c (clipper_frame_size): New function.
	(output_function_pro/epilogue): Support omitting frame pointer.

	* clipper.md (cmpsi): Use `cmpq' for small immediate values.
	(addsi3): Use `loada' for `reg1 = reg2  + immed'.

Wed Apr 14 15:23:24 1993  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* print-tree.c (print_node): Use (struct rtx_def *), not (rtx).

Wed Apr 14 13:46:36 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* config/i860/i860.md (floatsidf2): Add missing arg to REAL_VALUE_ATOF.

	* c-parse.in: Improve error message for sym undeclared at top level.

Wed Apr 14 12:06:08 1993  Tom Wood  (wood@next.com)

	* c-lang.c, objc-act.c (maybe_objc_comptypes): Return 0
	(incompatible) rather than 2 (similar enough) as the default.
	This was an inadvertent change in the Objective-C merge.

	* objc-act.c (get_class_reference): Call add_class_reference for
	the GNU runtimes.

Wed Apr 14 03:49:21 CDT 1993  Paul Burchard  (burchard@geom.umn.edu)

        * objc/Object.h, objc/Object.m, (-awake);
        objc/archive.c (__objc_finish_read_root_object):
        Corrected name of method -awake: to -awake for compatibility.

Wed Apr 14 10:58:29 1993  Kresten Krab Thorup  (krab@xiv)

        * objc/Object.m, objc/Object.h (+streamVersion:): New method.
        * objc/archive.c (objc_get_stream_class_version): New function.

Tue Apr 13 17:23:22 1993  Ron Guilmette  (rfg at netcom.com)

	* c-decl.c (pop_label_level, combine_parm_decls): Correct args
	in error calls.
	* c-typeck.c (error_init, pedwarn_init): Cast alloca result to char *.
	* calls.c (expand_call): Last arg of emit_stack_save is NULL_RTX.
	(store_one_arg): Fourth arg to emit_push_insn is NULL_RTX.
	* collect2.c (main, scan_prog_file): Don't call signal on signal
	names that aren't defined.
	* dbxout.c (dbxout_symbol): Last arg to eliminate_regs is NULL_RTX.
	* fold-const.c (size_int): NUMBER is unsigned so don't test
	for negative.
	(optimize_bit_field_compare, all_ones_mask_p): Add missing
	last arg to force_fit_type call.
	* gcc.c (putenv): Make result type void.
	(main): Don't call signal for undefined signal names.
	* genextract.c (main): Remove extra arg to printf call.
	* print-tree.c (print_node_brief, print_node): Properly cast
	arg when printing ints or rtx.
	* rtl.h, tree.h (xmalloc): Don't use prototype for now.
	* sched.c (sched_analyze_1): Extra arg in anti_dependence call.
	* toplev.c (main): Don't call signal for undefined signal names.
	* varasm.c (make_var_volatile): Return type is void.
	(assemble_string): First arg is not pointer to unsigned.
	* sparc.h (LEGITIMIZE_ADDRESS): Last arg to force_operand is NULL_RTX.
	* sparc.md (movXX): Third arg to emit_move_sequence is NULL_RTX.
	(movsi): Add missing return after abort.

Tue Apr 13 14:09:00 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* c-typeck.c (digest_init): Don't call default_conversion before
	convert_for_assignment.
	(parser_build_binary_op): Make NOP_EXPR, not NON_LVALUE_EXPR.

        * dbxout.c (dbxout_type): Re-enable debugging output for anonymous
        structures in C++.

Tue Apr 13 08:44:55 1993  Kresten Krab Thorup  (krab@iesd.auc.dk)

       * objc-act.c, toplev.c (-Wprotocol): added
       * objc-act.c (flag_warn_protocol): New variable
       (check_methods_accessible): New function
       (check_protocol): Use check_methods or check_methods_accessible
       depending on flag_warn_protocol to check protocol conformance.

       * objc-act.c (start_class): For class implementations Assign
       SUPER_CLASS_NAME from interface specification if not present.

Tue Apr 13 06:48:20 1993  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* alpha.md (sminsf, smindf, smaxsf, smaxdf): Should be minsf, etc.

	* genattrtab.c (clear_struct_flag): Add void return type defn.
	(count_subs_rtx): Add int return type and add definition.
	(simplify_test_exp): Delete debugging junk.
	(do_nothing): Delete.

	* tree.def (QUAL_UNION_TYPE): New tree code.
	* tree.h (DECL_QUALIFIER): New access macro for decl.initial.
	* calls.c, dbxout.c, dwarfout.c, expr.c, function.c, print-tree.c:
	Treat QUAL_UNION_TYPE like UNION_TYPE when seeing if aggregate. 
	* sdbout.c, stmt.c, varasm.c: Likewise.
	* expr.c (get_inner_reference): Don't blow up if a FIELD_DECL
	hasn't been filled in.
	(expand_expr, case COMPONENT_REF): Likewise.
	* stor-layout.c (layout_union): Handle QUAL_UNION_TYPE.
	(layout_type): Call layout_union for QUAL_UNION_TYPE and
	treat it like UNION_TYPE elsewhere.

Tue Apr 13 06:08:16 1993  Paul Eggert  (eggert@twinsun.com)

	* fold-const.c (div_and_round_double): Don't mix HOST_WIDE_INT * and
	unsigned HOST_WIDE_INT * parameters; some compilers complain.

Mon Apr 12 22:14:03 1993  Kresten Krab Thorup  (krab@iesd.auc.dk)

	* objc/list.h, objc/runtime.h: Removed declarations of library
	functions.  objc/list.h, objc/objc.h, objc/objc-api.h,
	objc/runtime.h, Object.m, Protocol.m:  Changed to double quote
	includes.  Removed includes of stddef.h, objc-archive.h and
	stdlib.h.  

	* objc/objc-archive.h: File deleted.  Contents embedded in objc-api.h
	* objc/objc-archive.c: File renamed to archive.c
	* objc/objc-class.c: File renamed to class.c
	* objc/objc-init.c: File renamed to init.c
	* objc/objc-misc.c: File renamed to misc.c
	* objc/objc-msg.c: File renamed to sendmsg.c
	* objc/objc-object.c: File renamed to objects.c
	* objc/objc-sel.c: File renamed to selector.c
	* objc/Makefile (OBJC_H, OBJC_O): Updated accordingly

Mon Apr 12 22:05:58 1993  Tom Wood  (wood@next.com)

	* Makefile.in (objc-act.o): Add dependencies.

Mon Apr 12 20:52:00 1993  Kresten Krab Thorup  (krab@spiff.gnu.ai.mit.edu)

	* objc-act.c (_OBJC_SELECTOR_REFERENCES_decl): Variable renamed to
	_OBJC_SELECTOR_TABLE_decl.  Name of selector table renamed from
	"_OBJC_SELECTOR_REFERENCES" to "_OBJC_SELECTOR_TABLE" to avoid
	conflict with NeXTSTEP linker.

	* Makefile.in (stmp-int-hdrs): Added dependency objc-headers.
	(objc-headers): New target.

	* objc/Makefile (_forward, fflags): Made targets error prone.
	(objc-msg.o, _forward): Use explicit path instead of $<.

Mon Apr 12 19:49:55 1993  Tom Wood  (wood@next.com)

	* objc-act.h (CLASS_PROTOCOL_LIST, PROTOCOL_LIST,
	PROTOCOL_FORWARD_DECL, TYPE_PROTOCOL_LIST): Rearrange use of type
	members to avoid use of noncopied_parts.
	* objc-act.c (get_static_reference, get_objcect_reference,
	start_protocol): Make a tree vector for new protocol types.
	(start_class): The tree vector for class types is longer.

	* m68k/next.h (ASM_OUTPUT_FLOAT_OPERAND): Use CODE.


Mon Apr 12 15:46:21 1993  Jim Wilson  (wilson@wookumz.gnu.ai.mit.edu)

	* Makefile.in (install-common): Delete $(bindir)/$(target)-gcc
	before trying to install it.

	* i960.h (CONSTANT_ALIGNMENT): Only increase alignment of string
	constants.

	* gcc.c (library_prefix): Delete variable.
	(process_command): Delete uses of library_prefix.
	(do_spec_1, D case): Delete use of library_prefix.

	* explow.c (emit_stack_save): At end, call validize_mem when
	inside sequence.

	* c-typeck.c (internal_build_compound_expr): When pedantic, don't
	simplify a COMPOUND_EXPR, so that it won't be mistaken for an
	lvalue or an integer constant expression.
	* fold-const.c (fold, COMPOUND_EXPR case): Likewise.

Mon Apr 12 15:24:05 1993  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* rs6000.c (print_operand): Sort all cases in alphabetical order.
	(print_operand, case 'G'): New case.
	(output_epilog): Know that "GNU Obj-C" is the language string
	for Objective-C.
	* rs6000.md (adddi3/subdi3): Allow immediate constants.

	* configure (rs6000-ibm-aix*): Make AIX 3.2 the default.

	* README.RS6000: Replaced file to discuss assembler for AIX 3.2 and
	problems with NLS support.

	* combine.c (record_value_for_reg): Properly set SUBST_LOW_CUID
	for last change; otherwise won't get best value.

Mon Apr 12 13:23:59 1993  Jeffrey A. Law (law@schirf.cs.utah.edu)

	* jump.c (jump_optimize, clause for `x=a; if (...) x=b;'):
	Do this regardless of BRANCH_COST if HAVE_conditional_move
	defined.

Mon Apr 12 17:15:43 1993  Kresten Krab Thorup  (krab at xiv)

        * objc/hash.h: Deleted #include "mutext.h"
        * objc/Object.m, objc/Object.h (-read:, -write:): added.
        * objc/Object.m, objc-api.h: Stripped anything added by
        kane@cc.purdue.edu which is not considered "minor changes".
        * objc/objc.h: now "#include"s objc-archive.h
        * objc/objc-msg.c (__objc_init_install_dtable,
        __objc_install_dtable_for_class): Call to
        __objc_resolve_class_links moved to the latter.
        * objc/objc-msg.c (__objc_responds_to): Function added
        * objc/objc-archive.c (objc_write_reference): added

Sat Apr 10 18:07:46 1993  Kresten Krab Thorup  (krab@iesd.auc.dk)

        * objc/Makefile: Cleaned up for inclusion in gcc distribution.
        Target copy-headers added.

Sun Apr 11 06:40:16 1993  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* toplev.c (strip_off_ending): Add .atr for Ada.

	* reorg.c (add_to_delay_list): Clear any cached block information
	for INSN.

	* stor-layout.c (layout_record): After copying the offsets of a
	field that is an anonymous union to the offsets of the fields
	of that union, zero the offset of the anonymous field in case
	it is used to access the inner fields.

	* combine.c (make_compound_operation, case xSHIFTRT):
	Clean up code so more readable and don't restrict to case
	where C2 >= C1.
	Pass correct (inner) code to recursive call.
	(make_compound_operation, case SUBREG): Pass the code of our
	operand to recursive call, not SUBREG, and make another recursive
	call after calling force_to_mode.

Sun Apr 11 11:16:48 1993  John F Carr  (jfc@Athena.mit.edu)

	* combine.c (can_combine_p):  Don't move an UNSPEC_VOLATILE.

Sun Apr 11 01:32:39 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* expmed.c (expand_divmod): When adjusting op0 for trunc_div or
	trunc_mod, using shifts (not branches), make a new pseudo for the
	result.  Don't use target for adjusted_op0.

Sat Apr 10 10:57:09 1993  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* xm-alpha.h (ONLY_INT_FIELDS): No longer needed.

	* alpha.c (alpha_sa_size): Need to save $26 if it is used or
	if any other register is saved, but not just because a stack
	space is needed.
	(output_prolog): Add code to probe the stack if we allocate more
	than 4096 bytes; required by chapter 7 (for threads).
	Know when to save $26.
	(output_epilog): Know when to restore $26.
	* alpha.md (add/sub): Correct predicates and constraints for
	sNaddX and addX insns; we can use sNsubX and subX to add small
	negative constants.
	Don't split addition to SP since we want to update it just once.
	(beq, bne): Use subtract, not compare for ints; it's more efficient.
	(define_split for comparisons): Always prefer add/sub if it will work.
	(probe_stack, allocate_stack): New patterns.

Fri Apr  9 20:03:38 1993  Jim Wilson  (wilson@wookumz.gnu.ai.mit.edu)

	* c-typeck.c (free_tree_list): New variable.
	(digest_init): Set free_tree_list.
	(process_init_constructor): Use add_double to do arithmetic with
	double integers instead of using fold/build to to arithmetic in
	type of array index.  Use free_tree_list when available instead of
	generating a new tree_list.

Fri Apr  9 19:05:31 1993  Tom Wood  (wood@next.com)

	* c-lex.h (RID_IN, RID_OUT, RID_INOUT, RID_BYCOPY, RID_ONEWAY,
	RID_ID): New Objective-C keywords.
	* c-parse.gperf: Incorporate the Objective-C keywords from
	objc-parse.gperf and add the new keywords.
	* objc.gperf: Deleted.
	* c-lex.c: Use -N when running gperf so the keyword table can be
	accessed.  Ran gperf and replaced that section.
	(forget_protocol_qualifiers, remember_protocol_qualifiers): New
	functions to modify the keyword table so that `in', `out', `inout',
	`bycopy', and `oneway' are keywords only in protocol declarations.
	(init_lex): Initialize the new keywords.  Forget the protocol
	qualifiers, and only make `id' a keyword when compiling an
	Objective-C module.
	(yylex): Treat @ as the start of an identifier (keyword), but
	recognize Objective-C string constants (@"...").
	* c-parse.in: Add support for Objective-C protocols, classes, and
	strings.
	(initlist): Don't include labeled array elements in the
	Objective-C grammer.  These look like messages and preclude the
	use of messages in initializers.
	(recognize_objc_keyword): Deleted.  The keywords are now in
	c-parse.gperf.
	* c-tree.h: Add declarations for functions in objc-act.c.
	(doing_objc_thang): Declare here.
	* c-decl.c (grokfield): Check for statically allocated objects.
	* c-lang.c (is_class_name, maybe_objc_method_name,
	build_objc_string): New functions.
	(maybe_objc_comptypes): Add REFLEXIVE parameter.
	* c-typeck.c (comptypes, convert_for_assignment): Check for
	Objective-C protocols (non-reflexive use of maybe_objc_comptypes).
	(comp_target_types): Rewrite so that maybe_objc_comptypes checks
	protocols when processing an Objective-C module.  For C modules,
	the code path is unchanged.
	(convert_for_assignment): Improve the error message for
	incompatible message arguments.
	* objc-act.h, objc-act.c: Add support for protocols, classes, and
	strings.  Update the runtime targets for the new GNU runtimes as
	well as existing NeXT runtimes.
	* toplev.c (lang_options): Add -fgnu-runtime and -fnext-runtime.

	* configure (i[34]86-next-*): New configuration.
	* config.sub: Default to bsd if vendor is next.
	* i386/next.h, i386/next.c, i386/x-next, i386/t-next,
	i386/xm-next: New files.
	* m68k/next.h, m68k/next.c: Move machine independent portions to
	nextstep.h and nextstep.c.  Update to NeXTSTEP 3.0 and 3.1.
	* nextstep.h, nextstep.c: New files.

	Dumped Kresten's latest objc-runtime into the objc directory.
	This needs work.

	* objc/core.c, objc/objc-proto.h, objc/object.h, objc/object.m,
	objc/record.h: Deleted.

	Thu Apr  1 11:02:49 1993  Kresten Krab Thorup  (krab at xiv)

	* objc/list.h (list_remove_head): added case for one element list. 
	* objc-init.c (__objc_exec_class): changed objc_get_class to
	objc_lookup_class.  (thanks to mccallum@cs.rochester.edu)

	Thu Mar 30 11:04:11 1993  Kresten Krab Thorup  (krab at xiv)

	* Protocol.m, objc/Protocol.h: added
	* objc.h (struct objc_protocol): added
	* objc-init.c (__objc_init_protocols): added
	(__objc_exec_class): added code for initializing protocols
	* objc-class.c (__objc_class_add_protocols): added

	Thu Mar 25 17:09:40 1993  Kresten Krab Thorup  (krab at xiv)

	* configure, Makefile.in: added
	* Makefile.in (install): added

	Wed Mar 24 14:32:14 1993  Kresten Krab Thorup  (krab at xiv)

	* objc/objc.h: Define objc_msg_lookup inline if optimization is
	turned on.  objc-actions.c changed accordingly.

	Tue Mar 23 18:02:04 1993  Kresten Krab Thorup  (krab at eos)

	* sarray.c, objc/sarray.h: Structure of `sarray' changed
	eliminating one indirection.  This affects most functions.

	Mon Mar 29 1993  Christopher J. Kane  (kane@rock-opera)

	* objc-object.c (_objc_object_alloc, _objc_object_dispose,
	_objc_object_copy): moved to objc-misc.c, init to 0.
	: deleted file.

	* Object.m (-perform:, -perform:with:, -perform:with:with:): check
	return value of objc_msg_looup before using it.
	(-name, -doesNotRecognize:, -error:): changed class_get_class_name
	to object_get_class_name.
	(+readFrom:): added check for class name length.

	* objc-api.m (class_create_instance, object_copy, object_dispose):
	moved from objc-object.c, inline'd

	Sun Mar 28 1993  Christopher J. Kane  (kane@prelude)

	* objc-api.h (several inline functions): rewritten to
	use new CLS_ISCLASS and CLS_ISMETA macros.
	(object_is_metaclass): added.

	* objc.h (_objc_alloc, _objc_dealloc, _objc_realloc,
	_objc_copy, objc_trace): removed (not used).
	(class_get_class_number, class_set_class_number): removed.
	(CLS_ISCLASS, CLS_ISMETA): check for nil parameter.

	Sat Mar 27 1993  Christopher J. Kane  (kane@toccata)

	* Object.m: method comments added.
	(-transmuteClassTo:): removed error message.
	(+error:): removed.
	(-error:): added +error: functionality.
	(+readFrom:): changed objc_get_class to objc_lookup_class.
	(+readFrom:): added class_set_version.

	* objc-api.h (object_get_class, object_get_super_class,
	object_get_meta_class, object_is_class,
	object_is_instance, _objc_error): added.

	* objc.h (_objc_error): moved to objc-api.h.

	Fri Mar 26 1993  Christopher J. Kane  (kane@toccata)

	* objc-api.h: function comments added.
	(class_set_class_number, class_get_class_number, METHOD_NULL,
	class_add_method_list, objc_msg_lookup_super): moved to
	objc.h.
	(objc_msg_sendv): removed.
	
	* Object.h, Object.m (-isMetaClass): added.
	(+free, +name, +respondsTo:, +respondsTo:): removed.
	(+class, +superClass, +metaClass): removed.

	* Object.m (-storeOn:): added variable class_encoding.
	(+readFrom:): replaced constant '#' with _C_CLASS.
	(-descriptionForMethod): changed descriptionForInstanceMethod: message
	to class_get_instance_method.
	(-class): now calls object_get_class.
	(-superClass): now calls object_get_super_class.
	(-metaClass): now calls object_get_meta_class.

	Wed Mar 24 1993  Christopher J. Kane  (kane@rock-opera)

	* objc-api.h (METHOD_NULL): new define.
	(method_get_argsize, method_get_imp, class_get_super_class,
	class_get_meta_class, class_get_instance_size): new
	functions.

	* Object.m (-isStructuredLike:, CLASS, IMP2): removed.
	(#include <objc/objc.h>): removed.
	(includes <stdio.h>, <stdarg.h>, <errno.h>): replaced w/ extern decls.
	(+poseAs:): implemented.
	(-transmuteClassTo:): now returns previous class.
	(-performv::): changed constant 96 to method_get_argsize.
	(-perform:, -perform:with:, -perform:with:with:): removed casts.
	(-storeOn:, +readFrom:): replaced "strlen("#")" with "1".
	(-isKindOfClassNamed:, -isMemberOfClassNamed:, -error:,
	+error:): check for NULL.
	(many methods): changed pointer indirections to function calls.
	(+instancesRespondTo:, -respondsTo:, -methodFor:
	+instanceMethodFor:): simplified.

	* Object.h, Object.m (-changeClass:): renamed to -transmuteClassTo:.
	(+initialize, -isClass, -isInstance): added.

	* Object.h: redundant #defines, typedefs removed; comments modified.
	(+readFrom:, -readFrom:, -storeOn:) added.
	(-perform:with:): duplicate declaration removed.

Fri Apr  9 17:42:11 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* config.sub: Accept i370, mvs.
	For i370-ibm*, assume mvs by default.
	Later, likewise, for i370-*.
	For -mvs*, assume ibm as default vendor.

	* c-lex.c (yylex): Use MAP_CHARACTER if it's defined.

	* cccp.c (no_precomp): Make it 1 by default.

Fri Apr  9 17:15:00  DJ Delorie (dj@ctron.com)

	* configure.bat: Updated to handle current Makefile
	and new config/i386/go32.h.

	* config/i386/go32.h: New file.

	* config/i386/xm-dos.h: Define MKTEMP_EACH_FILE and
	NO_PRECOMPILES.

Fri Apr  9 15:11:25 1993  Ian Lance Taylor  (ian@cygnus.com)

	* Makefile.in: Install as $(target)-gcc, not gcc-$(target).

	* fixincludes: Avoid inserting #ifndefs in limits.h if they are
	already there (solves HP/UX problem).

Thu Apr  8 21:36:11 1993  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* combine.c: Include hard-reg-set.h.
	(reg_nonzero_bits): Should be unsigned.
	(reg_last_set_{mode,nonzero_bits,sign_bit_copies}): New variables.
	(combine_instructions): Allocate and initialized them.
	(nonzero_bits, num_sign_bit_copies, case REG): Use new variables
	to get information on regs we've seen before.
	(record_value_for_reg): Set new variables for register being modified.
	(record_dead_and_set_regs): Invalidate regs clobbered by CALL_INSN.
	* Makefile.in (combine.o): Includes hard-reg-set.h.

	* expr.c (do_store_flag, case GT_EXPR, LE_EXPR): Don't
	confuse highest unsigned value with -1.

	* combine.c (force_to_mode, case xSHIFT): Don't narrow the
	mode unless we can be sure that the shift count is smaller
	than the size of the mode.

	* ns32k.h (enum reg_class, REG_CLASS_NAMES, REG_CLASS_CONTENTS):
	Add new register class GEN_AND_FLOAT_REGS.

Thu Apr  8 18:42:27 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* Makefile.in (c-parse.y, objc-parse.y): Use sed, not awk.

	* c-decl.c (finish_enum): Store layout results into variant types.

	* flow.c (mark_set_1): Clear reg_next_use at the proper place.

Thu Apr  8 10:50:00 1993  Ian Lance Taylor  (ian@cygnus.com)

	* Makefile.in (LIBGCC2_INCLUDES, LIBGCC2_DEPS): New variables,
	with empty values, to be overriden by t-* files.
	(LIBGCC2_CFLAGS): Use LIBGCC2_INCLUDES.
	(libgcc2.ready): Depend on LIBGCC2_DEPS.
	(stmp-int-hdrs): New target, all of old stmp-headers except
	float.h.
	(stmp-headers): Depend on stmp-int-hdrs, and just install float.h.

Thu Apr  8 06:58:27 1993  Michael Meissner  (meissner@osf.org)

	* c-tree.h (require_complete_type, lookup_name_current_level): Add
	prototypes.

	* tree.h (require_complete_type, lookup_name_current_level): Remove
	prototypes, these are defined in c-typeck.c and c-decl.c, and
	lookup_name_current_level is declared static in cp-decl.c.

Wed Apr  7 14:37:41 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* flow.c (mark_set_1): Clear reg_next_use for all kinds of regs.

Wed Apr  7 09:18:20 1993  Michael Meissner  (meissner@osf.org)

	* i386/osfrose.h (GO_IF_LEGITIMATE_ADDRESS): Allow -fpic again to
	mean System V.4 semantics.
	(CC1_SPEC): -fpic and -fPIC turn off OSF/rose shared library
	support.

Tue Apr  6 18:07:20 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* c-decl.c (start_function):
	Inhibit missing prototype warning for `main'.

Tue Apr  6 17:23:34 1993  Bill Cox  (bill@cygnus.com)

	* tree.h (require_complete_type, lookup_name_current_level): Add
	prototypes.

Tue Apr  6 15:09:42 1993  Jim Wilson  (wilson@wookumz.gnu.ai.mit.edu)

	* va-sparc.h (va_arg): Cast argument pointer to (char *).

	* unroll.c (loop_iterations): When computing comparison_value, use
	reg_set_p to identify instructions that modify it.

	* sparc.md (lshldi3, lshrdi3): Define.

	* Makefile.in (STAGESTUFF): Add insn-opinit.c, stamp-opinit, and
	genopinit.

	* cccp.c (do_include): For missing header file, if -M, don't
	output dependencies, and warning not error if no dependency is
	needed.

	* c-common.c (decl_attributes, format case): Error if num_arg does
	not point to a string type argument, or if first_arg_num not the
	anonymous argument.

	* function.c (init_function_start): Always set
	current_funtion_returns_pcc_struct if PCC_STATIC_STRUCT_RETURN defined.

	* sparc.md (movdi): End by returning the last template; otherwise
	we return junk for a template.

	* README.ALTOS: Comment as possibly obsolete.
	* README.ENCAP: Delete.
	* install.texi: Delete references to COFF encapsulation.

	* tree.h: Add more prototypes.

Tue Apr  6 12:01:17 1993  Michael Meissner  (meissner@osf.org)

	* mips.h (MIPS_VERSION): Bump Meissner version number to 38.
	(PUT_SDB_*): If -mgas, don't put # in front of directives.
	(MIPS_DEFAULT_GVALUE): If not define, define as 8, which is the
	default -G xx value to use.

	* mips.c (override_options): Set mips_section_threshold to
	MIPS_DEFAULT_GVLAUE if -G xx not used.

	* mips/osfrose.h (DWARF_DEBUGGING_INFO): Define.
	(MIPS_DEFAULT_GVALUE): If mips assembler, the value is 8,
	otherwise it is 0.

	* i386/osfrose.h (DWARF_DEBUGGING_INFO): Define.
	(PREFERRED_DEBUGGING_TYPE): Define as DBX_DEBUG.

Mon Apr  5 20:47:44 1993  Jeffrey A. Law  (law@schirf.cs.utah.edu)

	* Represent prologue and epilogue as RTL on the PA
	* pa.md (prologue, epilogue): New define_expands.
	(return_internal, call_profiler): New define_insns.
	* pa.h  (FIXED_REGISTERS): %r4 is no longer fixed.
	(CALL_USED_REGISTERS): %r4 is no longer CALL_USED either.
	(REG_ALLOC_ORDER): Move %r4 up in the allocation order.
	(DELAY_SLOTS_FOR_EPILOGUE): Delete.
	(ELIGIBLE_FOR_EPILOGUE_DELAY): Delete.
	* pa.c (print_stw, print_ldw): Delete.
	(eligible_for_epilogue_delay): Delete.
	(hppa_epilogue_delay_slots): Delete.
	(store_reg, load_reg, set_reg_plus_d): New helper functions.
	(output_function_prologue): Only emit assembler pseudo-ops
	to denote the start of a function.  Place the correct
	value into hp_profile_label_name if profiling.
	(output_function_epilogue): Only emit assembler pseudo-ops
	to deonte the end of a function.
	(hppa_expand_prologue): New function to emit all prologue
	code as RTL.
	(hppa_expand_epilogue): Likewise for the epilogue.
	(compute_frame_size): Update to account for using %r4 as an
	allocatable register if the frame pointer was eliminated.

Mon Apr  5 06:57:35 1993  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* expr.c (expand_expr, case SAVE_EXPR): Pass promoted type to
	store_expr.

Mon Apr  5 03:26:06 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* reload1.c (emit_reload_insns): Cast enum array index to int.

	* expr.c (store_constructor): Properly compute size of array
	when clearing the whole array.

Mon Apr  5 02:54:54 1993  Per Bothner  (bothner@hal.gnu.ai.mit.edu)

	* c-decl.c (lookup_name_current_level):  Make non-static.

Sun Apr  4 20:09:19 1993  Jeffrey A. Law  (law@schirf.cs.utah.edu)

	* pa.h (HARD_REGNO_MODE_OK): Do not accept integer modes
	greater than 32 bits in 1.0 FP registers.
	* pa.md (movdi patterns): Do not accept 1.0 FP registers.
	(floatunsdisf, floatunsdidf expanders): Disable unless TARGET_SNAKE.
	(floatdisf2, floatdidf2 patterns): Likewise.
	(fix_truncdisf2, fix_truncdidf2): Likewise.

	* pa.md (dbra pattern): Extend to allow any 5 bit increment,
	any comparison operator for the compare against zero, and
	no longer require the REG_NONNEG note.

	* pa.h (EXTRA_CONSTRAINT): Refine 'T' constraint to not accept
	pseudos which did not get hard registers and to not use 
	short_memory_operand.
	* pa.c (short_memory_operand): Delete.
	(emit_move_sequence): Do not use short_memory_operand when testing 
	for secondary reloads for FP loads/stores.
	* pa.md (movsi for FP regs): Delete special case patterns.
	(movdi for FP regs): Likewise.
	(movsi main recognizer): Allow fp<->memory copies.
	(movdi main recognizer): Likewise.

Sun Apr  4 18:56:25 1993  Torbjorn Granlund  (tege@hal.gnu.ai.mit.edu)

	* pa.h (FUNCTION_OUTGOING_VALUE): Remove.
	(FUNCTION_VALUE_REGNO_P): Return regs depend on TARGET_SNAKE.

Sun Apr  4 17:47:43 1993  John F Carr  (jfc@Athena.mit.edu)

	* reorg.c (get_jump_flags):  Check for LABEL == 0 before using
	LABEL.

Sun Apr  4 16:38:04 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* mips-tfile.c: Change "illegal" to "invalid" in error messages.
	(parse_stabs_common): Allow nonzero ignored fields in .stabs/.stabn.

	* calls.c (expand_call) [PCC_STATIC_STRUCT_RETURN]:
	Always set pcc_struct_value if aggregate_value_p returns 1.

	* Makefile.in (alloca.o): Delete -Demacs from command.

Sun Apr  4 11:19:07 PDT 1993  Ron Guilmette  (rfg at netcom.com)

	* dwarfout.c (type_attribute): Use the TYPE_MAIN_VARIANT of the
	given type when calling `user_def_type_attribute'.

Sun Apr  4 07:57:18 1993  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* optabs.c: Include reload.h.
	* Makefile.in (optabs.o): Show includes reload.h.

	* alpha.c (output_prolog): Need LDGP even for static procedure.

	* alpha.c (alpha_builtin_saveregs): Adjust for fact that
	virtual_incoming_args_rtx includes pretend size.
	* alpha.h (SETUP_INCOMING_VARARGS): Likewise.

	* alpha.h (LINK_SPEC): Don't pass -O2 to ld; it seems to be broken.

	* reorg.c (rare_destination): New function.
	(mostly_true_jump): Refine to use more info about destination
	and fallthrough; now returns -1 for very unlikely branches.
	(fill_eager_delay_slots, relax_delay_slots): Allow -1 return
	from mostly_true_jump.

Sun Apr  4 03:09:23 1993  Richard Stallman  (rms@churchy.gnu.ai.mit.edu)

	* gstdarg.h [__svr4__]: Test only _VA_LIST_ to avoid dup typedef.
	(This used to be if __SVR4_2__.)

	* config/m68k/m68k.c (floating_exact_log2): Initialize r1.

Sat Apr  3 20:01:05 1993  Jeffrey A. Law  (law@schirf.cs.utah.edu)

	* pa.c (hppa_legitimize_address): Use Pmode consistently.

Sat Apr  3 17:35:11 1993  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* reload1.c (emit_reload_insns): Don't update the status of a
	register from an input reload if it also has an output reload.

	* expr.c (store_expr): Call size_binop instead of doing the
	same thing with fold and build.

	* combine.c (simplify_comparison, case PLUS): Generalize
	simplification of (eq (plus A B) C).
	(simplify_comparison, case MINUS): Add corresponding cases.

Fri Apr  2 19:11:46 1993  Richard Stallman  (rms@geech.gnu.ai.mit.edu)

	* c-parse.in (expr_no_commas, from ASSIGN op):
	Store ERROR_MARK as the original code.

Fri Apr  2 07:49:03 1993  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* reload1.c (reload_reg_used_for_inherit): New variable.
	(clear_reload_reg_in_use): New function.
	(allocate_reload_reg): Don't consider an inherited register as
	one that we should share in the first pass.
	Don't mark a register in use until we are sure it will fit.
	(choose_reload_regs): Mark spill regs used for inheriting.
	When we decide we can no longer use a register, show it isn't
	being used.

	* genopinit (optabs): Fix typo in name for "fix" pattern.

Thu Apr  1 21:24:04 1993  Brendan Kehoe  (brendan@lisa.cygnus.com)

	Cygnus<->FSF merge.

	Thu Apr  1 17:20:05 1993  Mike Stump  (mrs@sphagnum.cygnus.com)

	* cp-decl.c (start_method): Never allow circularities in
	TREE_CHAINs, as otherwise the compiler will core dump.  This happens
	when a method is redeclared improperly at leat.

	Thu Apr  1 12:06:03 1993  Brendan Kehoe  (brendan@lisa.cygnus.com)

	* cp-typeck.c (convert_for_assignment): Check if `rhs' is an
	error_mark_node before looking to see if it's of OFFSET_TYPE.

	* cp-decl.c (grokvardecl): Don't use declarator unless it's non-null
	when looking for a redefinition.

	* cp-typeck.c (convert_for_initialization): Check if `rhs' is a
	TREE_LIST before looking for its value.

	* cp-init.c (expand_default_init): Don't clear DECL_REGISTER.

	Wed Mar 31 17:57:50 1993  Brendan Kehoe  (brendan@lisa.cygnus.com)

	* cp-spew.c (yylex, case IDENTIFIER): If identifier_typedecl_value
	returns a NULL_TREE, then set `lastiddecl' to be `trrr'.
	* cp-lex.c (identifier_typedecl_value): Instead of internal error 62
	when we don't have a match for `type', return a NULL_TREE since our
	callers will know what to do in that case.

	* cp-tree.h (IDENTIFIER_TYPEDECL_VALUE): Deleted.
	(identifier_typedecl_value): Deleted first prototype, kept second.
	* cp-tree.c (list_hash_lookup_or_cons): Call the function for
	identifier_typedecl_value, don't use the macro.
	* cp-spew.c (yylex): Likewise.

	Wed Mar 31 14:43:50 1993  Mike Stump  (mrs@cygnus.com)

	* cp-cvt.c (convert_from_reference): Make sure we set
	TREE_SIDE_EFFECTS if we need to.  Cures duplicate evaluations in
	things like: foo.mem(g++) = class_c; where foo.mem returns a
	reference to a class object.

	Wed Mar 31 13:32:38 1993  Mike Stump  (mrs@cygnus.com)

	* cp-method.c (report_type_mismatch): Arguments are numbered
	starting from 1 now.

	Tue Mar 30 17:21:18 1993  Mike Stump  (mrs@cygnus.com)

	* cp-decl.c (grokfndecl): When re-using an old decl in place of a
	new decl, make sure to wipe out the DECL_CHAIN slot, as otherwise
	this creates a circularity, causing an infinite loop in the compiler
	later.

	Tue Mar 30 14:14:53 1993  Brendan Kehoe  (brendan@lisa.cygnus.com)

	* cp-decl2.c (check_classfn): Say which class when giving an error
	about arglist mismatches or missing members.

	* cp-decl.c (grokdeclarator): For class-local typedefs, call pushtag
	to make sure the identifier is in scope properly.

	Mon Mar 29 18:05:22 1993  Mike Stump  (mrs@cygnus.com)

	lookup_fnfields hacking...  Corrects some problems found with Thu
	Mar 25 23:09:27 1993 vtable fixes.

	* cp-init.c (build_offset_ref): When looking for the component,
	have lookup_fnfields do the ambiguity checking, as we know it works
	much better than anything here.
	* cp-method.c (hack_identifier): If a name is ambiguous, go ahead
	and report the error.
	* cp-search.c (lookup_fnfields): Refine semantics and document
	semantics with respect to ambiguities and returning error_mark_node.
	Also, extend to be able to find all virtual functions.
	* cp-search.c (get_virtuals_named_this): Remove unused second
	argument.  Arrange for call to lookup_fnfields to find all virtual
	functions, even if they are hidden.
	* cp-search.c (get_first_matching_virtual): Removed unused second
	argument to get_virtuals_named_this.

	Mon Mar 29 16:42:58 1993  Brendan Kehoe  (brendan@lisa.cygnus.com)

	* cp-method.c (dump_init): If the init value is an enum, then use
	its tag in the error message, instead of its value.

	* cp-typeck.c (build_binary_op_nodefault): Delete spurious warning
	about comparision between signed/unsigned (matches C front-end).

	Fri Mar 26 16:30:57 1993  Brendan Kehoe  (brendan@lisa.cygnus.com)

	* cp-parse.y (GCC_ASM_KEYWORD): New token.
	(asm_keyword): New rule.
	(extdef, maybeasm, simple_stmt): Use the rule instead of ASM_KEYWORD.
	(maybe_type_qual): Don't warn about use of asm.
	* gplus.gperf (__asm, __asm__): Token is GCC_ASM_KEYWORD.
	* cp-spew.c (init_spew): Add GCC_ASM_KEYWORD.

	* cp-typeck.c (build_unary_op): Fix a bug so errors about ++/-- on
	invalid pointer types actually get emitted.  Don't restrict it to
	when PEDANTIC is set, and use type_as_string to say what type is
	being operated on.

	Fri Mar 26 01:21:43 1993  Mike Stump  (mrs@cygnus.com)

	* cp-decl.c (grokdeclarator): Don't set TREE_PUBLIC for friends.

	Fri Mar 26 01:09:34 1993  Brendan Kehoe  (brendan@lisa.cygnus.com)

	* cp-decl.c (pushdecl): Give a pedwarn, not a regular warning, when
	we shadow a formal parameter.

	* cp-init.c (expand_default_init): Get rid of spurious abort call.

	Thu Mar 25 23:09:27 1993  Mike Stump  (mrs@cygnus.com)

	Major vtable re-vamp.

	* cp-call.c (build_method_call): Reword and improve error messages.
	* cp-class.c (modify_vtable_entries), cp-class.c (finish_struct),
	cp-init.c (init_vfields), cp-tree.c (virtual_member, virtual_offset),
	cp-tree.h: Remove third argument to binfo_value, as it is unneeded.
	* cp-class.c (finish_base_struct): Unshare base class binfos.
	* cp-decl.c (finish_function): Fixup second argument to
	build_virtual_init, so as to make it unambiguous.
	* cp-init.c (build_virtual_init): Use second argument to get the
	vtable, not the first, as the second is more specific.
	* cp-search.c (is_subobject_of_p, hides, lookup_fnfields_here): New
	routines.
	* cp-seach.c (lookup_field, lookup_fnfields_1): Re-implement.  The
	new implementation allows for better ambiguity checking (10.1.1),
	and implements most hiding (10p4).
	* cp-tree.c (binfo_value): Re-implement.
	* cp-typeck.c (build_component_ref): Propagate error_mark_nodes up.

Thu Apr  1 19:38:53 1993  Jeffrey A. Law  (law@schirf.cs.utah.edu)

	* reorg.c (redundant_insn_p): Stop searching for a redundant
	insn if an INSN or JUMP_INSN with delayed effects is 
	encountered.

Thu Apr  1 12:00:01 1993  Michael Meissner  (meissner@osf.org)

	* real.c (toplevel): Add 'extern' keyword in forward declaration
	of arrays without bounds to silence warnings from the MIPS
	compiler.

	* i386/osfrose.h (LONG_DOUBLE_TYPE_SIZE): Undef this to protect
	against long double going to 80 bits until the OSF libraries are
	ready to handle it.

	* mips/mips.md (untyped_call): Rewrite code so that the MIPS
	compiler will not issue statement not reached warning messages.

Thu Apr  1 07:28:11 1993  James Van Artsdalen  (james@bigtex.cactus.org)

	* expr.c (emit_push_insn, expand_assignment): Fix typo in last change.

Thu Apr  1 02:31:16 1993  Per Bothner  (bothner@hal.gnu.ai.mit.edu)

	* emit-rtl.c (init_emit):  Clear sequence_stack.  Otherwise,
	if we're in a sequence when starting a nested function
	expand_function_end () will end all the sequences.

Thu Apr  1 02:11:10 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* Makefile.in (LIB2FUNCS): Add _fixunsxfdi, _fixxfdi, _floatdixf,
	_fixunsxfsi.

	* libgcc2.c (XFtype): Do define it, if LONG_DOUBLE_TYPE_SIZE == 96.
	(__fixunsxfdi): New function, if LONG_DOUBLE_TYPE_SIZE == 96.
	(__fixxfdi, __floatdixf, __fixunsxfsi): Likewise.

Wed Mar 31 20:05:19 1993  Michael Meissner  (meissner@osf.org)

	* mips.h (CLASS_UNITS): Fix typo in previous change, patch from
	ian@cygnus.com.

Wed Mar 31 17:18:27 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* toplev.c (compile_file): Call incomplete_decl_finalize_hook
	only if nonzero.

Wed Mar 31 00:59:50 1993  Gerald Baumgarnter  (gb@cs.purdue.edu)

	* toplev.c (compile_file): Only call `*incomplete_decl_finalize_hook'
	if the `decl' in question is a VAR_DECL.

Wed Mar 31 15:27:41 1993  Jeffrey A. Law  (law@schirf.cs.utah.edu)

	* pa.h (CONSTANT_ADDRESS_P): Fix typo in last change.

Wed Mar 31 15:11:12 1993  Brendan Kehoe  (brendan@lisa.cygnus.com)

	* clipper/clipper.h, convex/convex.h, elxsi/elxsi.h, fx80/fx80.h,
	gmicro/gmicro.h, h8300/h8300.h, i386/i386.h, i386/osfrose.h,
	i860/i860.h, i960/i960.h, m68k/m68k.h, m88k/m88k.h, mips/mips.h,
	pa/pa.h, pyr/pyr.h, romp/romp.h, rs6000/rs6000.h, sparc/sparc.h,
	spur/spur.h, tahoe/tahoe.h, vax/vax.h, we32k/we32k.h
        (CONSTANT_ADDRESS_P): Define with body of `CONSTANT_P', but leave
	out CONST_DOUBLE.

Wed Mar 31 11:28:21 1993  James Van Artsdalen  (james@bigtex.cactus.org)

	* reg-stack.c (emit_swap_insn): Don't link cc0 insns: emit swap
	after cc0 user.

Wed Mar 31 07:00:45 1993  Richard Kenner  (kenner@apple-gunkies.gnu.ai.mit.edu)

	* expr.c (expand_expr, case ADDR_EXPR): Allow taking the
	address of any object; used in call-by-reference situations.

	* tree.c (next_type_uid): Move definition to reasonable place.
	(copy_node): Make new DECL_UID and TYPE_UID as comments say.

	* expr.c (emit_block_move, emit_push_insn, expand_assignment):
	Size passed to memcpy/bcopy is SIZETYPE, not Pmode.

	* cse.c (simplify_binary_operation, case MULT): When testing for
	floating-point equality, make sure we do so inside a region
	protected from traps.
	* i386.c (standard_80387_constant_p): Likewise.

	* alpha.h (INITIAL_ELIMINATION_OFFSET): Subtract
	current_function_pretend_args_size from OFFSET for AP.

	* alpha.h (LINK_SPEC): New definition.

	* cse.c (insert_regs): If a REG already is in a class but not
	in the mode we want, don't do anything to the classes.

Wed Mar 31 02:02:29 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* gvarargs.h [__svr4__]: Test only _VA_LIST_ to avoid dup typedef.
	(This used to be if __SVR4_2__.)

	* local-alloc.c (optimize_reg_copy_1): Don't increment n_calls
	specially if P is a call_insn.

	* convert.c (convert_to_real): Pass mode arg to REAL_VALUE_ATOF.

Tue Mar 30 17:07:33 1993  Stephen L. Moshier  (moshier@world.std.com)
 
	* real.c: This is a new C file to implement floating point
	REAL_ARITHMETIC, target machine bit patterns for cross-compilation,
	and REAL_VALUE_ATOF for decimal input constants in long double
	XFmode as well as lower precisions.
 
	* real.h (REAL_VALUE_TO_TARGET_LONG_DOUBLE, REAL_VALUE_TO_TARGET_DOUBLE)
	(REAL_VALUE_TO_TARGET_SINGLE): New macros.

	* real.h: If REAL_ARITHMETIC is defined or if LONG_DOUBLE_TYPE_SIZE
	is 96, then define REAL_VALUE_ macros to invoke functions in real.c.

	* real.h (REAL_VALUE_RNDZINT, REAL_VALUE_UNSIGNED_RNDZINT):
	New macros truncate toward zero to integer value but
	return REAL_VALUE_TYPE.

	* real.h (REAL_VALUE_TO_DECIMAL): New macro defaults to
	fprintf if no REAL_ARITHMETIC, otherwise uses real.c for
	binary to decimal conversion.  Use in ASM_OUTPUT_ macros.
 
	* Makefile.in (real.o): New target.
	(OBJS): Add real.o.
 
	* c-lex.c (yylex): Convert real decimal constants directly
	to the precision specified by the letter at the end of the number.
	Pass mode arg to REAL_VALUE_ATOF to specify precision.
	Move the "out of range of double" error check.

	* cp-lex.c (yylex): Redo converting float values to desired type.

	* final.c (split_double) :  Use REAL_VALUE macros to extract ints
	from float mode CONST_DOUBLEs.
 
	* emit-rtl.c (operand_subword): Use REAL_VALUE_TO_TARGET_SINGLE
	to convert to target float.
	If REAL_ARITHMETIC is defined, let real.c handle incompatible host
	and target floating point bit patterns.
	(init_emit_once): Add machine_mode argument to REAL_VALUE_ATOF.
 
	* fold-const.c (real_value_truncate): If REAL_ARITHMETIC, replace
	by routine of same name in real.c.
	target_isinf, target_isnan, target_negative): Likewise.
	(const_binop): Delete `register' from decls using REAL_VALUE_TYPE.
	(fold_convert): Use REAL_VALUE_TO_INT.
 
	* rtl.c: Include real.h to get the definition of REAL_VALUE_TYPE.
 
	* varasm.c (assemble_real): Case TFmode and XFmode invoke
	ASM_OUTPUT_LONG_DOUBLE.
 
	* optabs.c (expand_fix): Initialized REAL_VALUE_TYPE
	confuses some compilers.

	* cse.c (simplify_binary_operation): real_value_truncate
	returns REAL_VALUE_TYPE.
	Convert rtx_code into tree_code for argument to REAL_ARITHMETIC.

	* cse.c (simplify_unary_operation): Use new ..._RNDZINT macros
	instead of casting value of REAL_VALUE_FIX_TRUNCATE
	and REAL_VALUE_UNSIGNED_FIX_TRUNCATE.

	* explow.c (rtx_to_tree_code): New function.

	* rtl.h (rtx_to_tree_code): Declare.

	* m68k/m68k.c (standard_68881_constant_p): Initialize REAL_VALUE_TYPE
	binary constants from decimal values.  Use REAL_VALUE_... macros.
	(standard_sun_fpa_constant_p): Likewise.
	(print_operand, floating_exact_log2): Use REAL_VALUE_... macros.
	(init_68881_table): New function.

	* m68k/m68k.h (LONG_DOUBLE_TYPE_SIZE): Set to 96, for XFmode support.
	(ASM_OUTPUT_LONG_DOUBLE_OPERAND) New macro.
	(ASM_OUTPUT_FLOAT, ASM_OUTPUT_DOUBLE): Use REAL_VALUE_... macros.
	(ASM_OUTPUT_DOUBLE_OPERAND): Likewise.
	(ASM_OUTPUT_FLOAT_OPERAND): Likewise.  Also, new argument CODE.
	(ASM_OUTPUT_FLOAT): Delete special def for CROSS_COMPILE.
	(ASM_OUTPUT_LONG_DOUBLE): New macro.
	(PRINT_OPERAND_EXTRACT_FLOAT): Definitions deleted.
	(PRINT_OPERAND_PRINT_FLOAT): Definitions deleted.

	* m68k/m68k.md (movxf, tstxf, extendsfxf2, extenddfxf2): New patterns.
	(truncxfdf2, truncxfsf2, floatsixf2, floathixf2, floatqixf2): Likewise.
	(ftruncxf2, fixxfqi2, fixxfhi2, fixxfsi2): Likewise.
	(addxf3, subxf3, mulxf3, divxf3, negxf2, absxf2, sqrtxf2): Likewise.

	* m68k/sun3.h (FUNCTION_VALUE): Use FUNCTION_VALUEX.
	(FUNCTION_VALUEX): New macro.
	* m68k/mot3300.h, m68k/news.h (LIBCALL_VALUE): Handle XFmode.
 
	* m68k/mot3300.h, m68k/tower-as.h:
	(ASM_OUTPUT_FLOAT, ASM_OUTPUT_DOUBLE): Use REAL_VALUE... macros.
	(PRINT_OPERAND): Likewise.
	(ASM_OUTPUT_LONG_DOUBLE): New definition.
	* m68k/news.h (PRINT_OPERAND, ASM_OUTPUT_DOUBLE):
	Use REAL_VALUE... macros.
	* m68k/next.h, m68k/sun2o4.h, m68k/sun3.h, m68k/altos3068.h:
	(ASM_OUTPUT_FLOAT, ASM_OUTPUT_DOUBLE)
	(ASM_OUTPUT_FLOAT_OPERAND, ASM_OUTPUT_DOUBLE_OPERAND):
	Use REAL_VALUE... macros.
	* m68k/sgs.h (ASM_OUTPUT_FLOAT, ASM_OUTPUT_DOUBLE)
	(ASM_OUTPUT_DOUBLE_OPERAND): Use REAL_VALUE... macros.
	(ASM_OUTPUT_LONG_DOUBLE): New definition.
	(ASM_OUTPUT_FLOAT_OPERAND): New macro.
	(PRINT_OPERAND_PRINT_FLOAT): Deleted.

	* m68k/3b1.h (ASM_OUTPUT_DOUBLE, ASM_OUTPUT_FLOAT):
	Use new REAL_VALUE... macros.
	(ASM_OUTPUT_LONG_DOUBLE): New definition.

	* m68k/hp320.h (ASM_OUTPUT_DOUBLE, ASM_OUTPUT_FLOAT)
	(PRINT_OPERAND_FLOAT, PRINT_OPERAND): Use new REAL_VALUE... macros.
	(ASM_OUTPUT_LONG_DOUBLE): New macro.

	* m68k/crds.h (ASM_OUTPUT_DOUBLE, PRINT_OPERAND):
	Use new REAL_VALUE... macros.

	* vax.h (PRINT_OPERAND, ASM_OUTPUT_FLOAT, ASM_OUTPUT_DOUBLE):
	Use new REAL_VALUE... macros.
	(CHECK_FLOAT_VALUE): Call check_float_value.
	* vax.c (check_float_value): New function.

	* vaxv.h (ASM_OUTPUT_DOUBLE): Use new REAL_VALUE... macros. 

	* alpha.h (ASM_OUTPUT_FLOAT, ASM_OUTPUT_DOUBLE):
	Use new REAL_VALUE... macros.
	(REAL_ARITHMETIC): Defined.

Tue Mar 30 17:07:33 1993  Jeffrey A. Law  (law@schirf.cs.utah.edu)

	For Tege:    
	* pa.md (sminsi3, smaxsi3): Fix bugs in last addition.

Tue Mar 30 16:52:15 1993  Michael Meissner  (meissner@osf.org)

	* mips.h (MIPS_VERSION): Bump Meissner version to 37.
	(CLASS_MAX_NREGS): Make floats in gp registers only use one
	register, and only allocate one float register instead of a
	register pair if -mfloat64 is used.

Tue Mar 30 05:40:26 1993  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* combine.c (record_dead_and_set_regs): Record death of all
	hard regs when a multi-reg object in hard regs dies.
	(move_deaths): Handle the case when we only have to move
	part of a multi-register death note.
	* rtlanal.c (find_regno_note): Find note that overlaps REGNO,
	not just one that mentions REGNO explicitly.

	* reload.c (form_sum): Use mode of inputs when making new PLUS.

	* genopinit.c: New file.
	* expr.h (extendtab, fixtab, fixtrunctab, floattab, movstr_optab):
	New definitions.
	* expr.c (movstr_optab): No longer static.
	(init_expr_once): Don't initialize movstr_optab.
	* optabs.c (extendtab, fixtab, fixtrunctab, floattab): Not static.
	(init_extends, init_fixtab, init_floattab): Deleted.
	(init_optabs): Move active stuff from above functions in.
	Delete filling of optabs.
	Call init_all_optabs.
	* reload1.c (init_reload): Don't initialize optabs here.
	* Makefile.in (OBJS): Add insn-opinit.o.
	(insn-opinit.o, insn-opinit.c, stamp-opinit): New rules.
	(genopinit, genopinit.o): Likewise.

	* reload1.c (emit_reload_insns): Properly track what was reloaded
	into what register when what we reloaded was a hard register group.

Mon Mar 29 17:35:04 1993  Jim Wilson  (wilson@wookumz.gnu.ai.mit.edu)

	* sparc.md (movsi+2): Add f/f constraint case.

	* sched.c (schedule_block): Reset n_ready if schedule_select
	removes all insns from ready list.

	* i960.h (FUNCTION_PROFILER): Call output_function_profiler.
	(CALL_USED_REGISTERS): Add more comments about register usage.
	* i960.c (i960_function_prologue): When profiling, don't use those
	registers clobbered around an mcount call.
	(output_function_profiler): New function.

Mon Mar 29 13:57:28 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* c-iterate.c (collect_iterators): Cast tree code to int for indexing.

Mon Mar 29 06:28:57 1993  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* combine.c (num_sign_bit_copies, case PLUS, case MULT):
	Replace occurrences of HOST_BITS_PER_INT with HOST_BITS_PER_WIDE_INT.

	* reload.c (secondary_memlocs_elim): Now one per mode per operand.
	(get_secondary_mem, combine_reloads): Reflect changed var above.
	(clear_secondary_mem): Use bzero.

	* genrecog.c: Add prototypes for all functions defined in file.
	Change a few occurrences of RTX_CODE to enum rtx_code for consistency.
	(merge_trees): Add casts of args to mybcopy.
	(write_tree_1): Now static.
	(fatal): Always called with one arg, so define that way.

	* reload.h: Add missing declarations for external functions
	in reload.c, reload1.c, and caller-save.c.
	(reload_strict_low, reload_needed_for_multiple, reload_needed_for):
	Deleted.
	(reload_opnum): New array.
	(enum reload_type): Renamed from reload_when_needed and expanded
	to include more reload types.
	(reload_n_operands): New variable.
	* reload.c: Add prototypes for all static functions and clean up
	some definitions.
	(struct decompose): Move to before function declarations.
	(secondary_memlocs_elim): One per operand, not per mode.
	(get_secondary_mem): Accept and use reload description (opnum
	and type).
	(push_reload): Accept and use new reload description instead of
	old NEEDED_FOR.
	Define two new macros: MERGEABLE_RELOADS and MERGE_TO_OTHER.
	Use these macros to see if reloads can be merged and how to do it.
	(transfer_replacements): New function.
	(combine_reloads): Refine when we can combine reloads.
	(find_reloads): Use new method of tracking what a reload is for.
	When we make a CLOBBER insn, do so with DImode.
	Merge cases of making optional reloads, avoid making output-only
	optional reloads, refine when we may not make in-out optional reloads,
	and make an optional reload for a pair of matching operands.
	(find_reloads_toplev, find_reloads_address{,_1, part}): Accept and
	use reload description.
	(forget_volatility): Delete long-obsolete function.
	* reload1.c: Add prototypes for static functions.
	(REGISTER_MOVE_COST, MEMORY_MOVE_COST): Include default definitions.
	(reload): Count number of registers needed for insn using new
	reload type information.
	If mode of insn is DImode, don't change it.
	Refine the way we handle conflict with the return value register.
	Don't try to account for needs already covered by previously
	spilled registers; instead, put them back in the front of
	potential_reload_regs and let them be allocated again.
	(order_regs_for_reload): Don't restrict regs explicitly used if
	we have SMALL_REGISTER_CLASSES defined.
	(reload_as_needed): Don't need to deactivate optional reloads
	ever; if they inherit, it must have been safe.
	Call merge_assigned_reloads if SMALL_REGISTER_CLASSES.
	(reload_reg_used_*): Refine our tracking of reload reg usage
	by defining more of these HARD_REG_SETs.
	(mark_reload_reg_in_use, reload_reg_free_p): Rework to use new
	method of describing where a reload register is used.
	(reload_reg_free_before_p, reload_reg_reaches_end_p): Likewise.
	(allocate_reload_reg): Pass new reload descriptions.
	(choose_reload_regs): Likewise.
	Save and restore the new HARD_REG_SETs.
	Remove now-redundant code to prevent conflicts.
	(merge_assigned_reloads): New function.
	(emit_reload_insns): Output each reload type into its own 
	sequence, then output the sequences in the proper order.
	Put our output reloads after a CLOBBER made by find_reloads.
	Pass ALL_REGS to find_equiv_regs; nothing special about
	GENERAL_REGS.
	Don't use an old equivalence if doing so would be more expensive.
	Clean up tracking of values still in reload regs using reload
	description info to see if the reload reaches the end of the insn.
	(gen_input_reload): Pass reload description and emit insns to end of
	current sequence.
	(inc_for_reload): Return void; no longer need INSN as operand.
	Emit insns to end of current sequence.

Mon Mar 29 02:59:27 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* expr.c (expand_expr, case MAX_EXPR/MIN_EXPR): If mode is
	multiword int, use do_jump_by_parts_greater_rtx to compare efficiently.
	(do_jump_by_parts_greater_rtx): New function.

Sun Mar 28 20:26:11 1993  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* calls.c (expand_call): Always allocate TARGET in mode of
	result expression; VALREG might have been promoted.
	Ensure TARGET is a REG when checking for promotion and verify
	that we get back the mode we expect.

Sun Mar 28 18:49:12 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* c-decl.c (store_parm_decls): Use pedwarn for "promoted arg doesn't
	match prototype" warning.

	* expr.c (expand_expr): For COMPONENT_REF, don't force_reg op0
	if it is BLKmode.

Sun Mar 28 16:25:59 1993  Jeffrey A. Law  (law@schirf.cs.utah.edu)

	* pa.md (smin, umin, smax, umax): New patterns.

	* Support nullification of conditional branch delay slots on
	the PA.

	* pa.md (cbranch define_delay): Enable nullification of
	conditional branch delay slots (based upon branch direction).
	(conditional branch patterns): Call output_cbranch to get the
	correct output template.  Long conditional branches with an
	annulled delay slot have a length of 3.
	(branch on bit patterns): Call output_bb to get the correct
	output template.  Long branches with an annulled delay slot have
	a length of 3.
	(decrement and branch pattern): Handle nullification of long
	backward branches.  Such branches have lengths of either 3 or 6.

	* pa.c (output_cbranch): New function.  Given the operands of the
	branch, possible nullification, length of the branch, possible branch 
	negation, and the branch insn itself, return the output template for 
	the desired conditional branch.
	(output_bb): Likewise, but for branch on bit.

	* pa.h (toplevel): Declare output_bb.

	* genattr.c (main): Output ATTR_FLAG masks.

	* rtl.def (ATTR_FLAG): New RTL code.

	* genattrtab.c (write_eligible_delay): Add new variable
	"flags" to the generated functions.  All callers changed.
	(check_attr_test): Handle ATTR_FLAG.
	(clear_struct_flag): Likewise.
	(count_sub_rtxs): Likewise.
	(write_test_expr): Likewise.
	
	* reorg.c (ANNUL_IFTRUE_SLOTS, ANNUL_IFFALSE_SLOTS): Add new
	flags variable to these dummy macros.
	(get_jump_flags): New function.
	(optimize_skip): Get jump flags information from the delay insn.
	(steal_delay_list_from_target): Get jump flags information from the
	delay insn and the label of the trial jump.
	(steal_delay_list_from_fallthrough): Get jump flags information
	from the delay insn.
	(try_merge_delay_insns): Likewise.
	(fill_simple_delay_slots): Likewise.
	(fill_slots_from_thread): Likewise.
	(make_return_insn): Likewise.

Sun Mar 28 00:36:04 1993  Richard Stallman  (rms@wookumz.gnu.ai.mit.edu)

	* fixincludes: Move comments about big sed command outside the
	command itself.

	* toplev.c (lang_options): Add -W{no-,}missing-braces.

	* c-typeck.c (process_init_constructor, digest_init):
	Check and set new static var partial_bracket_mentioned.

	* c-lex.c: Updated for recent change in c-parse.gperf.

Sat Mar 27 13:43:27 1993  Jeffrey A. Law  (law@schirf.cs.utah.edu)

	* Trampoline support from Jukka Virtanen.
	* pa.md (cacheflush): New pattern.  
	* pa.h (TRAMPOLINE_TEMPLATE): Define for the PA.
	(TRAMPOLINE_SIZE): Define for the PA.
	(INITIALIZE_TRAMPOLINE): Define for the PA.

Sat Mar 27 08:22:25 1993  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* function.c (expand_function_start): When evaluating sizes of
	variable types, do so just for side-effects (the SAVE_EXPRs).
	* stor-layout.c (variable_size): Likewise.

	* va-alpha.h: Major rework to agree with new calling sequence.
	Should have been installed with Feb 10th changes.

	* rs6000.md (mov[qhs]i): Allow moving a special reg to itself.

Sat Mar 27 03:13:46 1993  Richard Stallman  (rms@wookumz.gnu.ai.mit.edu)

	* config/sparc/sparc.c (S_MODES, D_MODES, T_MODES):
	Accept only those complex modes that are small enough.
	Rewrite to make the expressions simpler.

Fri Mar 26 17:07:31 1993  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* c-tree.h, output.h: Use STDIO_PROTO for prototypes with FILE.

	* input.h: Add standard copyright notice.

	* caller-save.c: Add prototypes for static functions.
	(choose_hard_reg_mode): Add missing parameters declaration.

	* a29k.md (multiply/multiplu/mulm/mulmu insns): These clobber Q.

Fri Mar 26 06:23:31 1993  Tom Wood  (wood@next.com)

	* i960.h (FUNCTION_VALUE_REGNO_P): Change to agree with
	FUNCTION_VALUE.
	* pyr.h, spur.h (INCOMING_REGNO, OUTGOING_REGNO): Define.
	* arm.md (untyped_call, blockage): New patterns.

Fri Mar 26 02:09:02 1993  Richard Stallman  (rms@wookumz.gnu.ai.mit.edu)

	* configure (sparc-tti-*, m68k-tti-*): Don't set use_collect2.

Fri Mar 26 01:05:43 1993  Brendan Kehoe  (brendan@lisa.cygnus.com)

	Cygnus<->FSF merge.

	Thu Mar 25 18:19:19 1993  Mike Stump  (mrs@cygnus.com)

	* cp-cvt.c (convert_to_reference), cp-init.c (expand_aggr_init_1):
	Don't try to do more than one level of user defined conversions,
	avoids an infinite loop.  Uses LOOKUP_NO_CONVERSION.

	Wed Mar 24 16:28:17 1993  Per Bothner  (bothner@rtl.cygnus.com)

	* cp-call.c (build_method_call):  Fix handling of foo->~Class().

	Sat Mar 20 12:29:37 1993  Michael Tiemann  (tiemann@rtl.cygnus.com)

	* cp-pt.c (tsubst): Don't get faked out by the fact that ctors and
	dtors have the same method name and can have the same signature.

	Fri Mar 19 15:58:34 1993  Brendan Kehoe  (brendan@lisa.cygnus.com)

	* cp-pt.c (tsubst): Call build_decl_overload for the new
        instantiation.

	Thu Mar 18 19:09:39 1993  Ken Raeburn  (raeburn@cygnus.com)

	* cp-decl2.c (flag_implement_inlines): New variable.
	(lang_f_options): Recognize "implement-inlines".
	* toplev.c (lang_options): Recognize -f[no-]implement-inlines.
	* cp-decl.c (flag_implement_inlines): Declare it.
	(start_function): If it's clear, functions declared inline are
	external under `#pragma implementation'.

	Tue Mar  2 16:24:39 1993  Brendan Kehoe  (brendan@lisa.cygnus.com)

	* cp-typeck.c (c_expand_return): If operand 0 is a TREE_LIST, then
	make sure to use its value.

	Mon Mar  1 14:22:12 1993  Bill Cox  (bill@rtl.cygnus.com)

	* cp-decl.c (push_level_decl): Add cast to correct push_stack_level
          parameter.

	Mon Mar  1 10:19:38 1993  Mike Stump  (mrs@cygnus.com)

	* cp-lex.c (do_identifier): Improve wording on error message.

	Wed Feb 24 19:54:46 1993  Mike Stump  (mrs@rtl.cygnus.com)

	* cp-typeck.c (commonparms, convert_for_assignment): Number
	arguments starting at 1 in error messages to match the C front-end.

	Wed Feb 24 14:55:54 1993  Mike Stump  (mrs@cygnus.com)

	* cp-search.c (saw_first_vbase): Deleted.
	cp-search.c (dfs_walk): When walking the class lattice, use the last
	virtual base class seen, not the first.  Fixes major problem
	introduced on Tue Oct 6 17:54:09 1992 that prevents multi-level
	virtual base classes from working.

	Mon Feb 22 18:07:23 1993  Mike Stump  (mrs@cygnus.com)

	* cp-search.c (get_base_distance_recursive): When searching, if the
	object refers to the same object as before, but just found along a
	different path, the object is not ambiguous.  Fixes problem
	introduced on Feb 16 22:47:29 1993.

	Wed Feb 17 15:12:12 1993  Mike Stump  (mrs@cygnus.com)

	* cp-decl2.c (grok_function_init): Pure virtual descructor must be
	defined, and calls to them generated.  Now conforms with ANSI C++
	working paper dated September 17, 1992 12.4.5.

	Tue Feb 16 22:47:29 1993  Mike Stump  (mrs@cygnus.com)

	Implement a new searching scheme for base classes and use it to
	ensure only related virtual function slots are filled in by
	modify_vtable_entries.  Affects get_base_distance and get_binfo
	answers.  Cures InterViews doc problem.  Solves the problem of
	calling the wrong virtual function in the presence of multiple
	inheritance.

	* cp-search.c (get_binfo_recursive, get_base_distance_recursive):
	New routines that use a depth first search strategy instead of
	breadth first.
	* cp-search.c (get_binfo): Re-implement, and use
	get_binfo_recursive.
	* cp-search.c (get_base_distance): Re-implement, and use
	get_base_distance_recursive.

	* cp-class.c (related_vslot): New routine to ensure that only
	vfields that are related to the given base_fndecl are modified.
	Relies upon new searching scheme for base classes.
	* cp-class.c (modify_vtable_entries): Use related_vslot to ensure
	that only slots related to the base virtual function are filled in.

	* cp-class.c (build_vtable, prepare_fresh_vtable, finish_struct),
	cp-tree.h: Remove DECL_VPARENT.

	* cp-class.c (get_vtable_entry): Use unsigned when dealing with
	DECL_VINDEXes.
	* cp-class.c (finish_struct): Use get_vtable_entry instead of open
	coding that routine here.

	Fri Feb 12 10:24:52 1993  Brendan Kehoe  (brendan@cygnus.com)

	* cp-decl.c (sigsegv): Check if SIGIOT is defined first.  Also check
	for SIGILL and SIGABRT.
	(init_decl_processing): Likewise; set up handlers for SIGILL and
	SIGABRT.

	Thu Feb 11 10:30:59 1993  Brendan Kehoe  (brendan@lisa.cygnus.com)

	* cp-type2.c (readonly_error): New arg `SOFT', to pedwarn instead of
	error.
	* cp-typeck.c, cp-cvt.c, cp-tree.h: Modify callers appropriately.

	Tue Feb  9 10:02:58 1993  Brendan Kehoe  (brendan@lisa.cygnus.com)

	* cp-lex.c (real_yylex): When parsing an exponent, check for 'e' and
	'E' explicitly.

	* cp-typeck.c (build_unary_op): Disallow taking the address of
	the `main' fn.
	* cp-decl.c (grokdeclarator): Check for the length of ORIGINAL_NAME
	being 4, and that it starts with 'm', before calling strcmp.

	* cp-type2.c (readonly_warning_or_error): Rename to readonly_error,
	make it now ARM compliant by emitting a hard error, instead of a
	pedwarn.
	* cp-cvt.c, cp-typeck.c: Change all callers.
	* cp-tree.h (readonly_error): Rename prototype.

	Sun Jan 31 09:58:16 1993  Niklas Hallqvist  (niklas at della.appli.se)
 
	* cp-typeck.c (build_modify_expr): Accept taking the address of a
	temporary generated by an explicit constructor call, but generate
	a warning.

	Mon Feb  8 10:45:56 1993  Brendan Kehoe  (brendan@lisa.cygnus.com)

	* cp-decl.c (grokdeclarator): Demangle DECLARATOR if it's an operator.

Thu Mar 25 11:38:02 1993  Richard Stallman  (rms@wookumz.gnu.ai.mit.edu)

	* cccp.c (do_include):
	For "..." case, leave fend pointing at terminating 0.
	Distinct error msgs for empty file name and for bad syntax.

	* Makefile.in (USER_H): Add va-clipper.h.

Thu Mar 25 07:01:14 1993  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* calls.c (store_one_arg): Fix typo in previous change.

Thu Mar 25 03:37:51 1993  Mike Stump  (mrs@hal.gnu.ai.mit.edu)

	* c-lang.c (lang_identify), cp-lex.c (lang_identify), objc-act.c
	(lang_identify), tree.h (lang_identify): New routine.
	* defaults.h (ASM_IDENTIFY_LANGUAGE) New macro used to identify
	which front-end produced the object file.  Ports that do not
	define ASM_IDENTIFY_GCC will automatically get a reasonable
	definition for ASM_IDENTIFY_LANGUAGE, ports that do define
	ASM_IDENTIFY_GCC for any reason may want to define
	ASM_IDENTIFY_LANGUAGE as done here.
	* toplev.c (output_lang_identify): New routine to identify which
	front-end produced the object file.
	* toplev.c (compile_file): Use ASM_IDENTIFY_LANGUAGE if it exists.

Wed Mar 24 17:53:11 1993  Richard Stallman  (rms@wookumz.gnu.ai.mit.edu)

	* c-parse.gperf: Change __cimag__ to __imag__, __creal__ to __real__,
	to void rejection by gperf.

Tue Mar 23 18:43:14 1993  Holger Teutsch  (holger@hotbso.rhein-main.de)

	* clipper.md: Assign "fp" attribute to fp insns. Add DImode
	insns for widening mul, shift and rotate. Remove 'decrement, test
	and branch' combination patterns. They are not reloadable.

	* clipper.h (HARD_REGNO_MODE_OK): DImode regs must start on even
	registers.

	* gstdarg.h, gvarargs.h: Use va-clipper.h.

	* config.sub: Default to clipper-intergraph if system is clix.
	* configure (clipper-intergraph-clix*): New configuration.
	* clipper.h, clipper.c, clipper.md: New files.
	* x-clix, t-clix, xm-clix.h, clix.h: New files.

Wed Mar 24 1993 18:54:51  Paul Eggert  (eggert@twinsun.com)

	* fixincludes (memory.h):
	Use proper ANSI syntax in `#endif __memory_h__'.

Wed Mar 24 12:52:40 1993  Jeffrey A. Law  (law@schirf.cs.utah.edu)

	* pa.md (sh[123]add): Collapse into a single pattern.
	(sh[123]add for reload): Likewise.
	* pa.c (shadd_operand): New function.
	(print_operand): Handle '%O' for shadd patterns.

Wed Mar 24 08:03:31 1993  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* rs6000.h (EXTRA_SECTION_FUNCTIONS, ASM_DECLARE_FUNCTION_NAME):
	Don't output tab before .csect pseudo-op.

Wed Mar 24 02:01:14 1993  Richard Stallman  (rms@wookumz.gnu.ai.mit.edu)

	* config/pyr/pyr.h (NO_DOT_IN_LABEL): Defined.

	* tree.c (stabilize_reference_1): For division and remainder,
	make a save_expr.

Tue Mar 23 14:51:07 1993  Jim Wilson  (wilson@geech.gnu.ai.mit.edu)

	* alpha.h, i386/sysv4.h, mips.h, rs6000.h (RETURN_IN_MEMORY):
	Delete struct and union references.
	* sparc.h (RETURN_IN_MEMORY): Update comment.
	* h8300.h, 386bsd.h, linux.h, i386/mach.h, i386/osfrose.h,
	i860/mach.h, i960.h, hp2bsd.h, hp3bsd.h, hp3bsd44.h, next.h,
	sun3mach.h, m88k.h, ns32k/pc532-mach.h, pa-utahmach.h,	pa1-utahmach.h,
	rs6000/mach.h (DEFAULT_PCC_STRUCT_RETURN): Define to 0.
	* toplev.c (DEFAULT_PCC_STRUCT_RETURN): Add default definition of 1.
	(flag_pcc_struct_return): Default to DEFAULT_PCC_STRUCT_RETURN.
	(f_options): Add -freg-struct-return flag.

Tue Mar 23 07:43:18 1993  Tom Wood  (wood@next.com)

	* emit-rtl.c (push_topmost_sequence, pop_topmost_sequence): New
	functions.
	* expr.c (expand_builtin, BUILT_IN_SAVEREGS): Use these to put the
	code at the start of the function, even when inside a sequence.

	* tree.h (enum built_in_function): Add BUILT_IN_APPLY_ARGS,
	BUILT_IN_APPLY, and BUILT_IN_RETURN.
	* c-decl.c (init_decl_processing): Declare __builtin_apply_args,
	__builtin_apply, and __builtin_return.
	* function.h (struct function): Add apply_args_value field.
	* expr.c (apply_args_value): New variable.
	(init_expr, save_expr_status, restore_expr_status): Initialize,
	save, and restore apply_args_value.
	(expand_builtin): Implement new built-in functions.
	(apply_args_mode, apply_result_mode): New variables.
	(apply_args_size, apply_result_size, result_vector,
	expand_builtin_apply_args, expand_builtin_apply,
	expand_builtin_return): New functions.
	(INCOMING_REGNO, OUTGOING_REGNO): Supply default definitions.
	* sparc.h (INCOMING_REGNO, OUTGOING_REGNO): Define.
	* sparc.md (untyped_call, untyped_return): New patterns.
	* i386.h (APPLY_RESULT_SIZE): Define.
	* i386.md (untyped_call, untyped_return): New patterns.
	* m68k/isi.h, m68k/m68k.h, m68k/m68kv4.h, m68k/mot3300.h
	(NEEDS_UNTYPED_CALL): Define.
	* m68k.md, fx80.md, gmicro.md, i860,md, ns32k.md
	(untyped_call, blockage): New patterns. 
	* mips.md (untyped_call): New pattern.

Tue Mar 23 06:38:36 1993  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* calls.c (store_one_arg): Use int_size_in_bytes and
	expr_size when appropriate instead of size_in_bytes.

	* regclass.c (record_reg_classes): When an alternative requires
	a match, but we do it with a copy into a register, that alternative
	wins.

	* cse.c (CHEAP_REG): Add missing parens.

	* expr.h: Don't declare fns that use "tree" if tree.h not included.
	(emit_call_1): Remove decl.
	(promoted_input_arg): Add prototype.
	(fix_lexical_addr): Remove duplicate decl.
	(copy_function_value, expand_stmt_expr): Delete; no such functions.
	* calls.c: Include gvarargs.h.
	Add prototypes to forward declarations and declare static functions.
	(emit_call_1): Now static.
	(emit_library_call, emit_library_call_value): Move to here.
	* expr.c: Don't include gvarargs.h.
	(emit_library_call, emit_library_call_value): Delete from here.
	* Makefile.in (expr.o): Doesn't include gvarargs.h.
	(calls.o): Now includes gvarargs.h.

	* dbxout.c (dbxout_type): Use int_size_in_bytes instead of
	size_in_bytes for consistency with other code.

	* calls.c (expand_call): Use expr_size instead of doing it ourself.

Mon Mar 22 19:15:17 1993  Richard Stallman  (rms@wookumz.gnu.ai.mit.edu)

	* function.c (fixup_var_refs_insns): Don't delete an insn copying
	var to itself, if it's the end of a libcall group.

Mon Mar 22 15:28:48 1993  Paul Eggert  (eggert@twinsun.com)

	* fixincludes: Use `set x $y; shift', not `set - $y', to avoid
	altering sh options.  Fix `#endif foo' constructions.  Clean up
	all DONE files.

Mon Mar 22 17:02:58 1993  Doug Evans  (dje@canuck.cygnus.com)

	* expr.h (MUST_PASS_IN_STACK): Make machine parameter.

Mon Mar 22 01:38:41 1993  James Van Artsdalen  (james at bigtex.cactus.org)

	* reload1.c (eliminate_regs): Eliminate regs within a CLOBBER.

	* emit-rtl.c (init_emit): Use INIT_EXPANDERS.

	* i386.c (output_fix_trunc): Use MEMs in insn as stack temps.
	No need to allocate & deallocate stack space on the fly.
	
	(clear_386_stack_locals): New function.
	(assign_386_stack_local): New function.

	* i386.h (PREFERRED_RELOAD_CLASS): Only narrow MODE_FLOAT reloads
	from ALL_REGS to GENERAL_REGS.
	(PREFERRED_OUTPUT_RELOAD_CLASS): Deleted.

	(INIT_EXPANDERS): New macro.

	* i386.md (movsf,movdf): Use an input reload for MEM-MEM moves.
	(extendsfdf2): Don't allow GENERAL_REGS in any operand.

	(truncdfsf2): Allocate a stack temp in expander.
	Use that in the output function.
	(fix_truncMN2,fixuns_truncMN2): Likewise.
	Allocate scratch reg from Q_REGS.

Sun Mar 21 17:24:09 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* toplev.c (compile_file): If warning about a function
	declared static but not defined, make the function extern.

	* cccp.c (collect_expansion): Don't make # special in argless macro.

	* toplev.c (incomplete_decl_finalize_hook): New variable.
	(compile_file): Call incomplete_decl_finalize_hook.
	* c-decl.c (init_decl_processing): Set that var.
	(finish_incomplete_decl): New function.
	(complete_array_type): Use 0 as default maxindex.
	* tree.h (incomplete_decl_finalize_hook): Declared.

Sun Mar 21 16:30:22 1993  Michael Meissner  (meissner@osf.org)

	* t-osfrose (CONFIG2_H): Change include file name to osfrose.h.

	* halfpic.h (prototype support): Fix recent changes for
	prototypes, so it compiles again.

	* configure (ns32k-encore-osf): Delete, last ns32k OSF/rose
	machine turned off.

	* encrose.h, x-encrose, t-encrose: Delete, no longer used.

Sun Mar 21 16:20:04 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* integrate.c (copy_rtx_and_substitute, case USE):
	Don't remove a subreg if ORIG had one.

Sun Mar 21 01:50:07 1993  Pat Rankin  (rankin@eql.caltech.edu)

	* c-common.c: #include "obstack.h".
	* config/vax/xm-vms.h [VAXC]: Work around stdio.h's FILE_TYPE.
	* vmsconfig.com: When making tm.h from config/vax/vms.h, change
	any #include "vax/*.h" directives to use native VMS file syntax.

Sat Mar 20 22:46:31 1993  Jeffrey A. Law  (law@schirf.cs.utah.edu)

	* pa.h (INSN_SETS_ARE_DELAYED): Define for the PA.  Sets and
	clobbers that occur in millicode insns are delayed effects.
	(INSN_REFERENCES_ARE_DELAYED): Likewise, but for operand references 
	occuring in millicode insns.
	* reorg.c (mark_referenced_resources): Parameter
	include_called_routine changed to include_delayed_effects.  All
	references changed. 
	(mark_set_resources): Likewise.
	(insn_references_resource_p): Likewise.
	(insn_sets_resource_p): Likewise.
	(mark_referenced_resources, case INSN): Do not mark any resources
	as referenced if we are not including delayed effects, and the 
	given insn has delayed effects.
	(mark_set_resources): Likewise for resources which are set/clobbered.
	(fill_simple_delay_slots): Include delayed effects for the delay insn
	if we are searching after the delay insn for candiates.
	(dbr_schedule): When initializing `end_of_function_needs' include
	delayed effects.

Sat Mar 20 18:54:46 1993  Michael Meissner  (meissner@osf.org)

	* mips.h (TARGET_SWITCHES): Or in TARGET_CPU_DEFAULT for default
	case.
	(TARGET_CPU_DEFAULT): Default to 0.

Sat Mar 20 14:52:26 1993  Jeffrey A. Law  (law@schirf.cs.utah.edu)

	* pa.h (singlemove_string): Declare.

	* configure: Add support for 4.4BSD on hp300s.
	* hp3bsd44.h, x-hp3bsd44.h: New files for 4.4BSD on hp300s

	* pa.md (conditional branch patterns): Clean up constraints.

	* pa.md (shadd reload patterns): Clean up output templates.

Sat Mar 20 11:23:15 1993  Torbjorn Granlund  (tege@gnu.ai.mit.edu)

	* expmed.c (init_expmed): Fix typo in last change.

Sat Mar 20 07:11:54 1993  Richard Kenner  (kenner@apple-gunkies.gnu.ai.mit.edu)

	* expr.c (get_inner_reference): Simplify code by initializing OFFSET
	to integer_zero_node.
	Do general index computation for ARRAY_REF and include lower bound
	of domain in calculation.
	(expand_expr, case ARRAY_REF): Include lower-bound in index
	computation.

	* fold-const.c (fold, case PLUS_EXPR): Don't associate apart
	a constant operand.

	* combine.c (make_compound_operation): Call recursively in the
	cases where we find a simplification.
	(make_compound_operation, case SUBREG): If the recursive call
	changes the rtx code and this is an appropriate SUBREG, use
	force_to_mode.

Sat Mar 20 03:16:52 1993  Richard Stallman  (rms@wookumz.gnu.ai.mit.edu)

	* print-tree.c (print_node): Print the chain of a STRING_CST.

	* c-lex.c (yylex): Copy the string value we get from __FUNCTION__.

Fri Mar 19 21:06:41 1993  Jim Wilson  (wilson@wookumz.gnu.ai.mit.edu)

	* expr.h: Correct partly nested comment.

	From Bill Cox (bill@cygnus.com):
	* cp-decl.c (push_level_decl): Add cast to correct push_stack_level
	parameter.
	* cse.c (cse_process_notes): Replace NULL_RTX with just zero.
	* function.h, halfpic.h, integrate.h, loop.h, machmode.h, output.h,
	recog.h, reload.h, stack.h: Add prototypes.
	* genattr.c (gen_attr): Generate prototypes in header file.

	* xcoffout.h (DEBUG_SYMS_TEXT): Define.
	* xcoffout.c (xcoffout_declare_function): Call dbxout_source_file
	before emitting .function psuedo-op.

Fri Mar 19 17:45:13 1993  Michael Meissner  (meissner@osf.org)

	* mips.h (MIPS_VERSION): Bump Meissner version to 36.
	(TARGET macros): Move this section to be earlier than
	ASM_FINAL_SPEC.
	(ASM_FINAL_SPEC): If configured with --with-gnu-as or as a cross
	compiler, do not run mips-tfile unless -mmips-as is used.

	* configure (target_cpu_default): Set to 16 when configuring a
	MIPS using the GNU assembler.

Fri Mar 19 06:27:34 1993  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* expmed.c (synth_mult): Don't try to make recursive call if
	we would be shifting by a negative number.
	(expand_mult): Don't negate VAL if it is negative.

	* cse.c (simplify_plus_minus): Count CONSTs coming in and going
	out; we have simplified things if we have more CONSTs going out
	even if we have the same number of total terms.

	* expmed.c (zero_cost): New variable.
	(init_expmed): Always pass some insn to recog.
	Set shift_cost[0], shiftadd_cost[0] and shiftsub_cost[0] to
	something reasonable.
	Compute zero_cost.
	(enum alg_code): Remove alg_none; add alg_zero and alg_m.
	(struct algorithm): Rename field COEFF to LOG.
	(synth_mult): Use new ops alg_zero and alg_m for multiplication by
	zero and one, respectively.
	Use MIN when helpful.
	Be consistent and don't test cost before recursive call.
	Don't special-case shift counts of zero; already handled elsewhere.
	(expand_mult): First operation is always alg_zero or alg_m;
	remaining operations can't be one of those.
	Use proper subtargets for computations.
	Remove special-cases for shift counts of zero.
	Track value computed so far and make REG_EQUAL notes.

Fri Mar 19 01:37:54 1993  Richard Stallman  (rms@wookumz.gnu.ai.mit.edu)

	* c-typeck.c (digest_init): Typo in last change.
	(initializer_constant_valid_p): Handle COMPLEX_CST.

	* expr.c (expand_assignment): Pass to_rtx's mode to expand_expr
	when assigning a result_decl.
	(expand_expr): For ERROR_MARK, give back 0 in TMODE if possible.

	* calls.c (emit_call_1): Don't defer pops in const call.

Thu Mar 18 17:02:24 1993  Jim Wilson  (wilson@wookumz.gnu.ai.mit.edu)

	* c-decl.c (current_function_prototype_file,
	current_function_prototype_line): New variables.
	(start_function): Set them.
	(store_parm_decls): Use them for error and warning messages.

Thu Mar 18 21:28:43 1993  Paul Eggert  (eggert@twinsun.com)

	* optabs.c (expand_float): When converting an unsigned type U
	to a smaller or equal-sized floating type F where there's no
	hardware support for unsigned-to-float conversion, use a temporary
	floating type larger than F if possible, since this avoids
	rounding problems that are worst when U is just greater than
	the maximum signed integer of the same size.

Thu Mar 18 16:16:21 1993  Richard Stallman  (rms@wookumz.gnu.ai.mit.edu)

	* c-typeck.c (digest_init): Handle COMPLEX_TYPE like other scalars.

	* c-parse.in (REALPART, IMAGPART): New token types.
	(unary_expr): Handle REALPART, IMAGPART.

	* expr.c (expand_expr): Don't ensure ref to a volatile value
	if it is a function.

	* c-parse.gperf: Add __cimag, __cimag__, __creal, __creal__.

	* collect2.c  (output_file): New static var.
	(main): Set output_file.
	(my_exit): Delete output_file on failure.

Thu Mar 18 12:39:06 1993  Doug Evans  (dje@canuck.cygnus.com)

	* function.c (assign_parms): Minor cleanup.
	* calls.c (expand_call): Fix bug (don't clobber bitpos).

Thu Mar 18 00:08:40 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* config/vax/vms.h (PCC_STATIC_STRUCT_RETURN): Add #undef.

Wed Mar 17 17:28:17 1993  Jeffrey A. Law  (law@schirf.cs.utah.edu)

	* pa.md (pre_ldwm, pre_stwm): Name these patterns to make
	generating them easier.
	(post_ldwm, post_stwm): New patterns.
	(add_high_const): New pattern.
	(return): New pattern.
	* pa.c (post_cint_operand): New function.
	(hppa_can_use_return_insn_p): New function.

Wed Mar 17 17:24:29 1993  Michael Meissner  (meissner@osf.org)

	* mips.h (MIPS_VERSION): Bump Meissner version to 35.
	(TARGET_SWITCHES): Add -mlong-calls, delete -mwc* switches.

	* mips.md (call insns & expanders): If -mlong-calls, require
	function address to be in a register.

	* x-iris (OLDCC): Iris now needs -Wf,-XNh1500 as well.

Wed Mar 17 16:00:29 1993  Jeffrey A. Law  (law@schirf.cs.utah.edu)

	* pa.h (IS_RELOADING_PSEUDO_P): New subroutine for
	EXTRA_CONSTRAINT.
	(EXTRA_CONSTRAINT): Use IS_RELOADING_PSEUDO_P.  Accept any MEM for
	`Q' constraint during the reload pass.

	* pa.h (SECONDARY_MEMORY_NEEDED): Define.  
	(SECONDARY_MEMORY_NEEDED_RTX): Define.
	* pa.c (output_fp_move_double): Remove code to support GR<->FP
	copies.
	* pa.md (movqi, movhi, movsi, movdi, movsf, movdf): Remove support
	for GR<->FP copies.
	(fix_truncsfsi2, fix_truncdfsi2): Likewise.

Wed Mar 17 14:58:49 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* config/vax/vms.h (STRUCT_VALUE): Defined.
	(STRUCT_VALUE_REGNUM): Add #undef.

Wed Mar 17 14:23:25 1993  Torbjorn Granlund  (tege@gnu.ai.mit.edu)

	* pa.md (branch-on-bit): New patterns.
	* pa.c (pc_or_label_operand): New predicate.

Wed Mar 17 02:46:58 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* config/m68k/m68k.md (movqi): In address reg case, if d0
	appears in the address, use d1 instead as intermediate reg.

Tue Mar 16 17:42:14 1993  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* cse.c (FIXED_REGNO_P): Remove previous change; all callers but
	one already check.
	(CHEAP_REG): Only call FIXED_REGNO_P for hard regs.
	(fold_rtx): Clarify comments.

Tue Mar 16 14:55:40 1993  Jim Wilson  (wilson@wookumz.gnu.ai.mit.edu)

	* x-apollo68 (CFLAGS, LIBGCC2_CFLAGS): Delete overrides and
	comment why they were wrong.

	* c-decl.c (grokdeclarator, ARRARY_REF): If exern, then end
	temporary allocation before building type.

	* sparc.h (SECONDARY_MEMORY_NEEDED_RTX): Define.
	* reload.c (get_secondary_mem): Use macro SECONDARY_MEMORY_NEEDED_RTX.

Tue Mar 16 03:49:13 1993  James Van Artsdalen  (james at bigtex.cactus.org)

	* cse.c (FIXED_REGNO_P): Pseudos can't be fixed regs.

Tue Mar 16 04:33:41 1993  Paul Eggert  (eggert@twinsun.com)
 
	* cccp.c (main): Report errors in output to pcp_outfile.

Mon Mar 15 21:30:32 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* cccp.c (write_output): Test value of `write'; report errors.
	(write_output): Use pfatal_with_name for errors.
	(out_fname): Var now file-scope.

Mon Mar 15 20:52:17 1993  Jeffrey A. Law  (law@schirf.cs.utah.edu)

	* pa.h (EXTRA_CONSTRAINT, case 'S'): Do not accept CONSTANT_P if
	TARGET_LONG_CALLS.

	* pa.h (EXTRA_CONSTRAINT): Merge strict and non-strict variants.
	Delete 'R' constraint.

Mon Mar 15 18:38:22 1993  Torbjorn Granlund  (tege@sics.se)

	* expmed.c (lea_max_mul): Delete.
	(init_expmed): Delete unused variable I.
	(enum alg_code): New tag alg_shift.  Document it.
	(synth_mult): Delete unused variable N.  Handle new trivial case
	first, for T <= 1.  Generalize shifting code to shift whenever a
	number is even; use alg_shift for this.  Set best_alg->ops only in
	trivial case.  Clean up cost calculation code for the `simple
	case' at the end; use shiftadd_cost when appropriate.  Combine
	declarations of Q and move to top of function.  Eliminate use of Q
	in factoring cases.  If we are getting too long a sequence for
	`struct algorithm' to record, fail.
	(expand_mult): Handle alg_shift instead of alg_add_t_m2 as first
	operation.  In RLT emit loop, handle alg_shift; special case
	LOG == 0 for alg_add_t_m2 and alg_sub_t_m2.

Mon Mar 15 16:44:08 1993  Doug Evans  (dje@canuck.cygnus.com)

	* function.c (assign_parms): Remove unnecessary #ifdef.

Mon Mar 15 14:33:52 1993  Jim Wilson  (wilson@wookumz.gnu.ai.mit.edu)

	* sched.c (reg_known_equiv_p): New variable.
	(init_alias_analysis): Allocate and compute reg_known_equiv_p.
	(sched_analyze_1): Reenable code for REG_EQUIV notes, using
	reg_known_equiv_p so that it is only used on REG_EQUIV notes.
	(sched_analyze_2): Likewise.  Only pass memory addresses to the
	sched_analyze_2 call.

	* xm-sol2.h (NO_SYS_SIGLIST): Define.

	* i960.c (print_operand_address): For MULT, set ireg not breg.

	* sparc.md (zero_extendqisi2+4,+5): Add new patterns for combining
	a SI->QI mode truncate with an insn that sets the condition codes.

	* config.sub (sparclite, sparclite-*): New configuration.
	* configure (sparclite-*-*): Likewise.
	* sparc/lite.h: New file.

	* sched.c (adjust_priority): Comment unreachable code.
	(memrefs_conflict_p): Add comment about Fortran aliasing.

Mon Mar 15 13:54:06 1993  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* cse.c (simplify_plus_minus): Remove last change.  Instead,
	count initial operands and test against that count to see if we
	did anything.

	* alpha.h (ASM_OUTPUT_{INT,SHORT,CHAR,BYTE}): Truncate constant
	to maximum range permitted in order to avoid assembler error.

Mon Mar 15 13:37:35 1993  Jeffrey A. Law  (law@schirf.cs.utah.edu)

	* pa.md (sh[123]add patterns): Use register_operand, not 
	shadd_operand.	    
	(sh[123]add patterns for reload): Special patterns to avoid
	lossage due to reload problems.
	* pa.c (shadd_operand): Delete.
 
Mon Mar 15 00:31:20 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* configure (rs6000-ibm-aix3.2): Renamed from rs6000-ibm-aix32.

Sun Mar 14 22:54:10 1993  Jeffrey A. Law  (law@schirf.cs.utah.edu)

	* reorg.c (find_end_label): Update unfilled_slots if the return
	insn we make has a delay slot.

Sun Mar 14 21:27:48 1993  Torbjorn Granlund  (tege@sics.se)

	* expmed.c (shift_cost): Now a vector.
	(shiftadd_cost): New vector for cost of (N * a + b) instructions.
	(shiftsub_cost): New vector for cost of (N * a - b) instructions.
	(lea_cost): Removed.
	(init_expmed): Initialize new vectors.  Use ASHIFT, not LSHIFT.
	Remove code initializing lea_cost.
	(enum alg_code): New definition.
	(synth_mult): Rewrite for better algorithms and faster operation.
	(expand_mult): Rewrite code for constant multiplication.

Sun Mar 14 06:34:28 1993  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* objc-act.c (build_objc_symtab_template): Correctly build index
	type for 0-length array.
	(build_objc_method_call, get_class_reference, get_super_receiver):
	Call assemble_external on anything we are about to generate a call to.
	(handle_class_ref): Put constant in readonly-data section, not text.

	* cse.c (simplify_plus_minus): Reject "simplifications" that are
	too complex in form.
	Correct sign error in expanding NOT.

Sun Mar 14 00:02:12 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* reload1.c (choose_reload_regs): Verify reload_out[j] != 0
	before comparing with reload_earlyclobber elements.

Sat Mar 13 21:05:12 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* calls.c (emit_call_1): Restore inhibit_defer_pop before popping args
	so that pops really do get deferred if appropriate.

Sat Mar 13 18:13:30 1993  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* cse.c (simplify_plus_minus): When seeing if we have reduced the
	number of operands, ensure we count a CONST result as two operands.

	* calls.c, expr.c: Correctly define PUSH_ARGS_REVERSED.

Sat Mar 13 16:49:10 1993  Jeffrey A. Law  (law@schirf.cs.utah.edu)

	* pa.c (eligible_for_epilogue_delay): Insns which access %r2 can
	not be used to fill the epilogue's delay slot.

Sat Mar 13 15:31:02 1993  James Van Artsdalen  (james at bigtex.cactus.org)

	* reg-stack.c (emit_swap_insn): If emitting after a cc0 setter,
	link the cc0 insns.

Fri Mar 12 17:45:36 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* config/m68k/xm-mot3300.h (USE_C_ALLOCA): Define if not __GNUC__.
	* config/m68k/x-alloca-c: New file.
	* configure (m68k-motorola-sysv*): Use it.

	* expr.c (emit_push_insn): Handle failure of gen_movstr...

	* stor-layout.c (variable_size): Better error for div by 0 in size.
	* c-decl.c (grokdeclarator): Error for div by 0 in array size.

Fri Mar 12 17:25:35 1993  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* expr.c: Add prototypes for static functions.
	(struct move_by_pieces): Move definition before function
	forward decls.

	* rs6000.h, a29k.h (PROMOTE_MODE): Fix typo.

	* cse.c (refers_to_mem_p): Use rtx_equal_p to see if bases
	are equal.

	* cse.c (set_nonvarying_address_components): Fix type mismatch with
	caller.
	(refers_to_mem_p): Call properly in second call.

	* jump.c (jump_optimize): Fix bug in last change.

Fri Mar 12 07:25:43 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* optabs.c (expand_binop): For doubleword int addition,
	clobber the whole register at the start.

Fri Mar 12 03:19:26 1993  James Van Artsdalen  (james at bigtex.cactus.org)

	* reg-stack.c (get_true_reg): Don't ignore FLOAT_TRUNCATE.
	(subst_stack_regs_pat): Substitute in FLOAT_TRUNCATE insns.

	(compare_for_stack_reg): Reset insn code after swapping operands.

	* i386.h (FLOAT_CLASS_P): New macro.
	(REGISTER_MOVE_COST): Use it instead of comparing to FLOAT_REGS.
	(PREFERRED_RELOAD_CLASS): Likewise.
	(SECONDARY_MEMORY_NEEDED): Likewise.
	(CLASS_MAX_NREGS): Likewise.

	(SELECT_CC_MODE): Use VOIDmode for non-FP-equality comparisons.

	* i386.md (truncdfsf2): Rewrite to allow FLOAT_REGS in constraints
	for better register preferences.

	(movM): If REG_WAS_0, make sure the reg hasn't changed since then.

	(cmpM expanders): Don't allow both operands to be MEM.
	Use VOIDmode for the COMPARE rtx instead of CCmode.
	(cmpM recognizers): Likewise.
	Remove constraints for constants from operand 0.

	(cmpdf,cmpsf recognizers): When using VOIDmode as mode of the
	COMPARE rtx, require that the mode be exactly VOIDmode.

	* i386.c (VOIDmode_compare_op): New operand predicate function.

	* vax.md (movM): If REG_WAS_0, make sure the reg hasn't changed
	since then.
	* tahoe.md (movM): Likewise.

Thu Mar 11 19:23:51 1993  Doug Evans  (dje@canuck.cygnus.com)

	* function.c (aggregate_value_p): RETURN_IN_MEMORY now handles
	BLKmode values.
	* expr.h (RETURN_IN_MEMORY): Handle BLKmode values.
	* i386/sysv4.h (RETURN_IN_MEMORY): Ditto.
	* m88k/m88k.h (RETURN_IN_MEMORY): Ditto.
	* i960/i960.h (RETURN_IN_MEMORY): Ditto.
	* m68k/apollo68.h (RETURN_IN_MEMORY): Ditto.
	* mips/mips.h (RETURN_IN_MEMORY): Ditto.
	* sparc/sparc.h (RETURN_IN_MEMORY): Ditto.
	* alpha/alpha.h (RETURN_IN_MEMORY): Ditto.
	* romp/romp.h (RETURN_IN_MEMORY): Ditto.
	* rs6000/rs6000.h (RETURN_IN_MEMORY): Ditto.
	* h8300/h8300.h (RETURN_IN_MEMORY): Ditto.

Thu Mar 11 19:02:55 1993  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* alpha.h (RTX_COST, case MULT): Handle s8addx and s4addx.
	(RTX_COST, case MULT): Correctly assign cost to multiplies by a
	power of two.
	(RTX_COST, case ASHIFT, ASHIFTRT, LSHIFTRT, IF_THEN_ELSE): New cases.

	* cse.c (CHEAP_REG): New macro; makes virtual regs cheap too.
	(COST): Use CHEAP_REG.
	(rtx_cost, case REG): Use CHEAP_REG to return zero for some REGs.

Thu Mar 11 07:47:09 1993  Jeffrey A. Law  (law@schirf.cs.utah.edu)

	* pa.md (FP sCC insn): Delete.
	(sCC define_expands): FAIL instead of generating FP sCC insns.
	* pa.c (gen_scond_fp): Delete.
	* pa.h (toplevel): Delete declaration of gen_scond_fp.

	* cse.c (set_nonvarying_address_components): New function.
	(invalidate): Use set_nonvarying_address_components instead of 
	computing them.
	(refers_to_mem_p): Likewise.  Simplify checks for conflicting
	memory accesses.  Make static.
	* loop.c (addr_overlap_p): Delete.

Wed Mar 10 23:52:40 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* fixincludes: Delete ${LIB}/DONE just before exit.

Wed Mar 10 12:27:51 1993  Jeffrey A. Law  (law@schirf.cs.utah.edu)

	* pa.c (reg_or_cint_move_operand): Use cint_ok_for_move.

	* pa.md (add reg and large int): New define splits for the combiner.
	* pa.c (cint_ok_for_move): New function.  Returns 1 iff the given
	CONST_INT can be loaded into a register in a single instruction.
	(move_operand): Use cint_ok_for_move.

	* jump.c (jump_optimize, clause for `if (foo) b++'):
	Do this regardless of BRANCH_COST if HAVE_incscc or 
	HAVE_decscc is defined.

Wed Mar 10 11:50:06 1993  Torbjorn Granlund  (tege@hal.gnu.ai.mit.edu)

	* pa.md (conditional move): Use %B for output when appropriate.
        (conditional move with second operand == 0): New pattern.
	* pa.c (reg_or_cint_move_operand): New function.
	(move_operand): Add header comment.

Wed Mar 10 01:43:43 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* objc-act.c (OBJC_GEN_METHOD_LABEL): Convert colons to _'s.
	Don't use the category name or the number.

	* gcc.c (link_command_spec): New option -nostartfiles.

Tue Mar  9 18:55:43 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* convert.c (convert_to_complex): Avoid using comptypes.

Tue Mar  9 11:33:32 1993  Michael Meissner  (meissner@osf.org)

	* objc-act.c (#ifdef NEXT_OBJC_RUNTIME): Close #ifdef properly.

Tue Mar  9 00:03:03 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* flags.h (flag_volatile_global): Declared.

	* c-decl.c (define_label): Use current line number in error msg.

Mon Mar  8 16:11:18 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* config/i386/i386.h (HARD_REGNO_MODE_OK): Add some casts.

	* reg-stack.c (record_asm_reg_life): Cast class to int for indexing.

	* sdbout.c (PUSH_DERIVED_LEVEL): Cast enumm constants to int.

	* toplev.c (flag_volatile_global): New variable.
	(f_options): Add option for it.
	* varasm.c (make_decl_rtl): Handle that option.

	* objc-act.c (really_start_method): Always use OBJC_GEN_METHOD_LABEL.
	Pass method_slot as additional arg.
	(OBJC_GEN_METHOD_LABEL): Add default definition.
	* config/m68k/next.h (OBJC_GEN_METHOD_LABEL): Accept additional arg.

Mon Mar  8 12:01:49 1993  Paul Eggert  (eggert@twinsun.com)

	* fold-const.c (const_binop): When evaluating a shift, ignore
	overflows generated by force_fit_type.

Mon Mar  8 07:24:30 1993  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* cse.c (cse_gen_binary, simplify_plus_minus): New functions.
	(find_best_addr): Use cse_gen_binary.
	(simplify_binary_operation, fold_rtx): Likewise.
	Remove most special-cases for PLUS and MINUS and call
	simplify_plus_minus instead.
	Clean up some tests for FP.

	* cse.c: Add prototypes for static functions.
	(struct cse_basic_block_data): Move to front of file since it
	constains struct used in a prototype.
	(refers_to_p, find_best_addr): Now static.

	* expr.h: Clean up prototypes for functions in expr.c and
	optabs.c and add some missing ones.

	* optabs.c: Add prototypes for static functions.
	(init_libfuncs): Put args in proper order.

Sun Mar  7 07:59:34 1993  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* reorg.c: Add prototypes for static functions.
	(fill_simple_delay_slots): Add missing declaration of arg.

Sat Mar  6 15:08:59 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* gcc.c: Handle long options by translation to old-style ones.
	(translate_options): New function.
	(option_map): New table.

	* config/i386/t-iscscodbx: New file.
	* configure (i[34]86-*-isc*, i[34]86-*-sco...): Use that if stabs.

	* reload1.c (choose_reload_regs): Handle SUBREG in reload_earlyclobber
	when matching output reloads for setting reload_when_needed.

Sat Mar  6 08:43:09 1993  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* genattrtab.c (write_test_expr): Use INSN_CODE == -2, not 0, for
	constant attributes.

	* genattrtab.c: Add prototypes in forward declarations.
	Add some missing parameters to a few calls.

Sat Mar  6 07:41:36 1993  Doug Evans (dje@cygnus.com)

	* calls.c (expand_call): Fix typo in unaligned code.

Fri Mar 5 20:32:28 1993  Peter Schauer (pes@regent.e-technik.tu-muenchen.de)

	* i386/svr3gas.h, i386/svr3dbx.h, i386/iscdbx.h, i386/scodbx.h,
	i386/sco4dbx.h, svr3.ifile, svr3z.ifile: New files.
	* configure (i[34]86-...): Use them if configured --with-stabs.
	* i386/isccoff.h: Renamed from i386/i386isc.h.
	* i386/iscgas.h: Renamed from i386/i386iscgas.h.

Fri Mar  5 19:41:50 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* expr.c (expand_assignment): Special handling for storing in
	RESULT_DECL.

Fri Mar  5 17:48:41 1993  Chris Smith  (csmith@mozart.convex.com)

	* cse.c (simplify_binary_operation): Move integer CONST_DOUBLE
	folding out of REAL_IS_NOT_DOUBLE conditional.
	(simplify_relational_operation): Put float CONST_DOUBLE folding
	under a REAL_IS_NOT_DOUBLE conditional.
	Add folding for integer CONST_DOUBLE comparisons.

Fri Mar  5 17:37:20 1993  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* alpha.md: Add new define_split for doing sign-extended adds
	of some large constants using sNaddl.

	* function.c (fixup_var_refs_insns): If SMALL_REGISTER_CLASSES,
	ensure we don't put any insns between the setting of the function
	return register and it's use.

Fri Mar  5 15:11:41 1993  Jeffrey A. Law  (law@schirf.cs.utah.edu)

	* pa.h (FIXED_REGISTERS): %r2 is no longer fixed.
	(REG_ALLOC_ORDER): Treat %r2 as a caller-saved allocatable 
	register.  %r30 is fixed and therefore a "special" register.
	%fr22-%fr31 are caller-saved, so allocate them before the 
	callee-saved 1.1 fp registers.  Allocate fp registers before
	general registers.  Fix typo for register 79.

	* pa.c (output_function_epilogue): Perform an early %r2 restore 
	even if actual_fsize is zero.  This can happen if %r2 is used
	as a temporary in a leaf function.

	* pa.h (FIRST_PSEUDO_REGISTER): Update to take into account
	registers which are no longer known to the compiler.
	(FIXED_REGISTERS): Likewise.
	(CALL_USED_REGISTERS): Likewise.
	(HARD_REGNO_NREGS): Likewise.
	(HARD_REGNO_MODE_OK): Likewise.
	(REGNO_REG_CLASS): Likewise.
	(FUNCTION_VALUE): Likewise.
	(LIBCALL_VALUE): Likewise.
	(FUNCTION_VALUE_REGNO_P): Likewise.
	(FUNCTION_ARG_REGNO_P): Likewise.
	(FUNCTION_ARG): Likewise.
	(REGNO_OK_FOR_FP_P): Likewise.
	(REGISTER_NAMES): Likewise.
	(REG_CLASS_CONTENTS): Likewise.  Add %r1 to GENERAL_OR_FP_REGS
	and GENERAL_OR_SNAKE_FP_REGS.
	(REG_ALLOC_ORDER): Likewise.  Document and make allocation order
	"regular" across 1.0 and 1.1 cpus.

	* pa.c (compute_frame_size): Update to take into account
	register which are no longer known to the compiler.
	(output_function_prologue): Likewise.
	(output_function_epilogue): Likewise.
	(output_arg_descriptor): Likewise.


Fri Mar  5 12:45:51 1993  Jim Wilson  (wilson@geech.gnu.ai.mit.edu)

	* sparc.c (output_function_prologue, output_function_epilogue):
	Add comments for frame_base_name usage in leaf_functions.

	* gcc.c (main): Put argv[0] in collect_obstack instead of programname.

	* cse.c (note_mem_written): QImode varying structure memory
	accesses can alias scalars.

Thu Mar  4 10:05:52 1993  Juergen Keil  (jk@leo.tools.de)

	* c-decl.c (store_parm_decls,combine_parm_decls): Call layout_decl
	for a parm declared float when it is changed to double under a
	traditional compilation.

Thu Mar  4 17:52:52 1993  Jeffrey A. Law  (law@schirf.cs.utah.edu)

	* pa.h (ASM_OUTPUT_INT): If TARGET_SHARED_LIBS, then references to
	functions which do not occur in the text space must have a PLABEL
	("P%") prefix to make the assembler and linker happy.

Thu Mar  4 17:18:57 1993  Steve Chamberlain  (sac@geech.gnu.ai.mit.edu)

	* emit-rtl.c (init_emit_once): Initialize const_tiny_rtx for
        partial ints too.

	* convert.c (convert_to_pointer): Fix typo comparing size of
	integer and pointers.
	* varasm.c (immed_double_const): Cope with MODE_PARTIAL_INT.
	(output_constant_pool): Likewise.

Thu Mar  4 15:18:15 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* c-common.c (truthvalue_conversion): Fix handling of COMPLEX_EXPR.
	Handle all complex values specially.

Thu Mar  4 13:48:38 1993  Torbjorn Granlund  (tege@hal.gnu.ai.mit.edu)

	* pa.md (recognizer for general uaddcm): New pattern.

	* pa.md (iorsi3): New DEFINE_EXPAND.
	(iorsi3 recognizer for [reg reg]): Now unnamed.
	Put output template here, don't call output_ior.
	* pa.c (output_ior): Don't handle reg operands.

Thu Mar  4 13:14:13 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* fold-const.c (fold): Handle complex constants as "winning".
	Handle REALPART_EXPR and IMAGPART_EXPR.

Thu Mar  4 13:08:53 1993  Steve Chamberlain  (sac@geech.gnu.ai.mit.edu)

	* config.sub (h8300hds): Change hds to hms.
	* configure (h8300-*-*): Added.
	* h8300.c, h8300.h, h8300.md, t-h8300, xm-h8300.h: New files.

Thu Mar  4 10:31:17 1993  Michael Meissner  (meissner@osf.org)

	* gcc.c (link_command_spec): Add missing \ before newline inside
	character string.

	* c-parse.in (all_iter_stmt_simple): Add missing comma so that
	Objective C compiles.

Thu Mar  4 02:43:43 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* optabs.c (emit_no_conflict_block): Don't move target to itself
	if that takes multiple insns.
	(expand_binop): For complex mult and div, avoid fetching operand
	components more than once from memory.

	* dbxout.c (dbxout_type): Handle complex integer types.

Wed Mar  3 16:01:11 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* c-typeck.c (common_type): Handle complex types.

	* machmode.def: Add complex integer modes.

	* c-common.c (truthvalue_conversion): Handle COMPLEX_EXPR.

	* c-typeck.c (lvalue_p): Handle REALPART_EXPR, IMAGPART_EXPR.
	(build_binary_op, build_unary_op): Handle complex types.

	* c-parse.gperf: Add `__complex', `__complex__'.
	Add `__iterator'.  Delete `iterator'.

	* tree.c (build_complex): Set the TREE_TYPE based on real part.

	* c-lex.h (RID_COMPLEX): New constant.
	* c-lex.c (init_lex): Initialize rid pointers for complex.
	(yylex): Handle i or j in numeric constant.

	* c-decl.c (init_decl_processing): Create complex types.
	(grokdeclarator): Handle complex keyword.
	Distinguish int-by-default from int keyword.
	* c-tree.h: Declare vars to hold complex types.

	* c-convert.c (convert): Handle conversion to complex type.
	* convert.c (convert_to_real): Convert complex to real.
	(convert_to_integer): Likewise.
	(convert_to_complex): New function.
	* convert.h (convert_to_complex): Declared.

Wed Mar  3 15:34:36 1993  Per Bothner  (bothner@hal.gnu.ai.mit.edu)

	* tree.c (build_range_type):  New function.
	* tree.c (build_index_2_type): Re-implement using build_range_type.

Wed Mar  3 08:34:43 1993  Torbjorn Granlund  (tege@hal.gnu.ai.mit.edu)

	* pa.c (lhs_lshift_operand): New function.
	(lhs_lshift_cint_operand): New function.
	* pa.md (ashlsi3): Use lhs_lshift_operand for operand 1.
	Call gen_zvdep_imm when operand 1 is a CONST_INT.
	(zvdep_imm): New pattern.

	* pa.c (print_operand): Handle L and P for bit field instructions.
	* pa.md (ashift recognizer for [reg const_int]): Use %P and %L
	output modifiers.
	(ashiftrt recognizer for [reg const_int]): Likewise.
	(lshrsi3): Likewise.
	(rotrsi3): Reduce integer argument to 5 bits.

	* pa.md: Remove some empty lines.

	* pa.c (pa_adjust_cost): Replace, the function of Mar 2 was an old
	version.
	(output_fp_move_double): Use %r syntax for registers.

Wed Mar  3 01:42:42 1993  Per Bothner  (bothner@hal.gnu.ai.mit.edu)

	* tree.def (INTEGER_TYPE):  Clarify comment to make clear that
	INTEGER_TYPEs are used for arbitrary range types (i.e.
	sub-ranges of enums) in languages that need them.
	* dbxout.c (dbxout_type_range):  New function:  Common code
	needed for both range types and array index types.
	Fixes some problems common in both places:  Now handles
	non-zero lower bound, variable bounds (sort of), and ranges
	of non-integer (e.g. enum) types.
	* dbxout.c (dbxout_type): Use dbxout_type_range.

Tue Mar  2 23:34:45 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* collect2.c (main): Use strlen, not sizeof, for our_file_name.

	* c-common.c (convert_and_check): No warning for converting
	signed integer to unsigned of same width.

Tue Mar  2 18:59:39 1993  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu.edu)

	* c-iterate.c (collect_iterators): Handle simple expressions quickly.
	Don't try to interpret operands that are RTL as if they were trees.

	* regclass.c (regclass): Don't set REGNO_POINTER_FLAG here.
	(reg_scan_mark_refs): Set it here.
	Accept INSN, not UID as arg.
	(reg_scan): Call reg_scan_mark_refs with INSN, not UID.

Tue Mar  2 18:03:25 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* objc-act.c (handle_class_ref): Call assemble_external.

Tue Mar  2 15:56:17 1993  Jim Wilson  (wilson@wookumz.gnu.ai.mit.edu)

	* genattrtab.c (write_const_num_delay_slots): Output 'rtx insn' not
	'rtx *insn' for const_num_delay_slot argument.

	* gcc.c (main): Truncate programname to what is after last slash.

	* cccp.c (do_include): Warn if find unreadable header file.
	(errno.h): Move outside VMS specific section.

	* sparc.c (print_operand): Use output_operand_lossage, not abort.

	* sparc.h (SETUP_FRAME_ADDRESS, DYNAMIC_CHAIN_ADDRESS,
	RETURN_ADDR_IN_PREVIOUS_FRAME, RETURN_ADDR_RTX): Define.
	* sparc.md (flush_register_windows, goto_handler_and_restore):
	Give names to these patterns so they are easier to use.
	* expr.c (expand_builtin, BUILT_IN_FRAME_ADDRESS case): Use new
	macros SETUP_FRAME_ADDRESSES and RETURN_ADDR_IN_PREVIOUS_FRAME.

	* reorg.c (relax_delay_slots): Delete jump around insn identical
	to the insn in its delay slot.

	* i960.c (i960_output_call_insn): Delete scratch_reg arg.  Use r3
	instead.
	* i960.md (call_internal*): Use hard register 19 (r3) in clobber
	instead of match_scratch.

	* i960.md (mov*): Only accept store zero to memory insn if
	rtx_equal_function_value_matters is zero.
	* i960.h (rtx_equal_function_value_matters): Declare.

	* emit-rtl.c (gen_sequence): Add push_obstacks_nochange and
	pop_obstacks calls around rtl_in_saveable_obstack call.
	* varasm.c (immed_double_const, immed_real_const_1): Likewise.
	* tree.c (rtl_in_saveable_obstack): Always switch to saveable_obstack.
	Return type now void instead of int.

Tue Mar  2 14:57:06 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* gcc.c (link_command_spec): Do nothing if -fsyntax-only.

Tue Mar  2 14:17:47 1993  Torbjorn Granlund  (tege@hal.gnu.ai.mit.edu)

	* pa.h (ADJUST_COST): Add new definition.
	* pa.c (pa_adjust_cost): New procudure.

Tue Mar  2 02:12:13 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* optabs.c (gen_move_insn): Big `if' applies only for MODE_CC class.

	* config/m68k/next.c (handle_pragma): New arg get_line_function.
	* config/m68k/next.h (HANDLE_PRAGMA): Pass suitable arg.
	* c-lex.h (get_directive_line): Declared.

Tue Mar  2 10:48:46 1993  Wilson Tien  (wtien at urbana.mcd.mot.com)

	* m68k.md (truncdfsf2+2): Use f%$move instead of fsmove.

	* m68k.md (fix_truncdfsi2, fix_truncdfhi2, fix_truncdfqi2):
	Use %# instead of #.

	* m68k.md (call, call_value): Set SYMBOL_REF_FLAG for the called
	function symbol_ref rtx.  In PIC mode, output `bsr FUNC@PLTPC'
	when the operand is symbol_ref.

	* m68kv4.h (ASM_OUTPUT_COMMON, ASM_OUTPUT_LOCAL): Use SIZE instead
	of ROUNDED.

	* m68kv4.h (ASM_OUTPUT_CASE_LABEL): Always use `swbeg' syntax to
	output switch table (m68k.md depends on this to happen).

	* m68kv4.h (LEGITIMATE_PIC_OPERAND_P): Treat a symbol_ref rtx with
	SYMBOL_REF_FLAG set a valid PIC operand.

	* m68kv4.h (OVERRIDE_OPTIONS): Turn off function cse when doing pic.

	* m68k.c (output_function_prologue): Use m68k svr4 PIC format to 
	load the address of _GLOBAL_OFFSET_TABLE_ into PIC_OFFSET_TABLE_REG
	in function prologue when doing PIC.

	* m68k.c (print_operand_address): Always add "@GOT" suffix for the
	global object operand when doing PIC. 

Mon Mar  1 19:00:38 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* c-lex.h (RID_ITERATOR): New alternative.
	* c-tree.h (ITERATOR_P, ITERATOR_BOUND_P): New macros.

	* c-typeck.c (build_unary_op): Warn if increment `struct unknown *'.

	* c-lex.c (init_lex): Set up ridpointers for `iterator'.
	But maybe turn it off again.
	
	* c-parse.gperf: Add `iterator' and `__iterator__'.

	* c-decl.c (grokdeclarator): Handle iterator storage class.
	(finish_decl): For iterator, require initial value, make a save_expr.
	(init_decl_processing): Call init_iterators.

	* c-parse.in (stmt): Allow all_iter_stmt.
	(primary -> statement expression): Push and pop iterator stack.
	(stmt -> expr): Use iterator_expand.
	(all_iter_stmt): New rule.

	* c-typeck.c (readonly_warning): Warn about assignment to iterator.

	* c-iterate.c: New file.
	* Makefile.in (c-iterate.o): New target.
	(C_OBJS, OBJC_OBJS): Add c-iterate.o.

	* Makefile.in (gcc.o): Delete dep obstack.h.

Mon Mar  1 07:29:51 1993  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* integrate.c (subst_constants): Use proper mode when getting
	equivalent constant for paradoxical SUBREG in SET_DEST.
	(mark_stores): Clean up and tighten to properly handle hard regs.

	* combine.c (subst, case NOT): If STORE_FLAG_VALUE==-1, treat
	an ASHIFTRT of just the sign bit as if it were an LT.
	(subst, case XOR): Likewise for STORE_FLAG_VALUE==1 and an LSHIFTRT.
	(simplify_and_const_int, case LSHIFTRT): If shifting a sign bit
	copy, start shift at the sign bit.
	(simplify_shift_const): Likewise for ASHIFTRT.

	* combine.c (BYTE_LOADS_EXTEND): Fix typo when defining.
	(setup_incoming_promotions): Set modes properly.

	* alpha.md: Add three special-cases of CMP insns against zero.

Mon Mar  1 06:17:02 1993  Jeffrey A. Law  (law@schirf.cs.utah.edu)

	* pa.h (CONSTANT_ADDRESS_P): Do not accept symbolic
	addresses.
	(LEGITIMIZE_ADDRESS): Just a stub now.  Call
	hppa_legitimize_address to do the real work.

	* pa.c (symbolic_expression_p): New function.
	(hppa_legitimize_address): Old LEGITIMIZE_ADDRESS moved
	here.  Handle symbol_ref + displacement addresses. 
	Use rounding instead of masking off lower bits.
	Avoid creating useless pseudos and strip off CONST in
	(const (...)) expressions to make processing easier.

	* pa.md (define_split for symbol_ref+int): New define_split for
	the combiner.

Sat Feb 27 01:57:34 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* c-typeck.c (convert_for_assignment): New arg FUNDECL.  Calls changed.
	(convert_arguments): New arg FUNDECL.
	(build_function_call): Pass function to convert_arguments, if a decl.

	* config.sub: Error if company name is more than one word.
	If $os is `sunos...', don't change it to manufacturer's name.

	* enquire.c (fake_f_rep): Clear all of u, initially.
	Make the ints in u unsigned.
	(f_define): Use ordinary constants for long double
	if it's same width as double.
	Make __convert_long_double_i unsigned.

	* va-i860.h (struct __gnuc_va_list): Test __svr4__ like __SVR4__.

	* config/ns32k/ns32k.h (TARGET_SWITCHES): Reverse defn of 32332.

	* expr.c (convert_move): Truncate via word_mode
	only if to_mode fits in one word.
	Truncate by referring in TO_MODE for any FROM,
	but force_reg if nec.

	* c-decl.c (pushdecl): Nested fn decl gets DECL_CONTEXT iff not extern.

	* c-lex.c (check_newline): #line updates input_file_stack->name.

	* c-typeck.c (convert_for_assignment): Automatically convert
	to a union from its members' types.

	* config/ns32k/ns32k.h (ASM_OUTPUT_ALIGN_CODE):
	Pad with no-op insns.

	* c-decl.c (grokdeclarator): Make `long long' work even with
	-pedantic, despite the warning.

Fri Feb 26 22:01:32 1993  Ian Lance Taylor  (ian@cygnus.com)

	* cccp.c (USER_LABEL_PREFIX, REGISTER_PREFIX): If not defined by
	tm.h, set to empty strings.
	(enum node_type, special_symbol): Added T_USER_LABEL_PREFIX_TYPE
	and T_REGISTER_PREFIX_TYPE, which expand to USER_LABEL_PREFIX and
	REGISTER_PREFIX.
	(initialize_builtins): New builtin definitions
	__USER_LABEL_PREFIX__ and __REGISTER_PREFIX__.

Fri Feb 26 18:08:58 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* Makefile.in (distdir): Depend on cp-parse.y,
	and the .c files for the .y files.

	* c-decl.c (declare_parm_level): Unconditionally store 1.
	(pushdecl): Criterion for no warning is, next level up
	is a parm level.

	* Makefile.in (all.cross): Depend on enquire.

	* libgcc2.c (inhibit_libc): Renamed from inhibit_eprintf.
	(L_new_handler): Don't include stdio.h if inhibit_libc.

	* c-typeck.c (process_init_constructor): Error msg change.

	* gstdarg.h (_VA_LIST_T_H): Test and define this.
	* gvarargs.h (_VA_LIST_T_H): Test and define this.

	* gstddef.h (_SYS_SIZE_T_H): Test this and define this.

	* xm-pbd.h (USE_C_ALLOCA): Define here.
	* pbd.h (USE_C_ALLOCA): Not here.

	* tree.c (simple_cst_equal): New default case handles most
	tree codes based on TREE_CODE_CLASS.  Delete newly redundant cases
	for specific tree codes.

	* dbxout.c (dbxout_type): Enable output of subrange types
	if use_gnu_debug_info_extensions.
	(dbxout_finish_symbol): Enable output of symbols line number.

	* c-typeck.c (initializer_constant_valid_p):
	Allow cast of ptr to wider integer.

Fri Feb 26 19:04:36 1992  Karl Berry  (karl@cs.umb.edu)

	* optabs.c (init_libfuncs): Use int instead of enum for
	first_mode, last_mode, and mode.

Fri Feb 26 14:29:22 PST 1992  Ron Guilmette (rfg@netcom.com)

	* c-parse.in (ivar_decls):  Give a pedwarn (instead of a warning) for
	excess semicolons.

	* cccp.c (do_include): Correctly report the directive name
	when any kind of include directive has no argument or null argument.

Fri Feb 26 11:27:35 1992  Tom Wood  (wood@NeXT.com)

	* toplev.c (compile_file): Use pedwarn_with_decl to warn about
	functions declared static but not defined.
	* c-decl.c (store_parm_decls): Use pedwarn.

Fri Feb 26 10:34:33 1992  Brendan Kehoe  (brendan@lisa.cygnus.com)

	* Makefile.in (uninstall): Also remove the g++ manual page.

Fri Feb 26 01:29:53 1992  Paul Eggert  (eggert@twinsun.com)

	* cexp.y (parse_escape): Don't treat ^ as special after \.

Fri Feb 26 21:37:29 1993  John F Carr  (jfc at Athena.MIT.EDU)

	* varasm.c (make_decl_rtl): Print an error for explicit register
	variable whose type cannot be stored in that register.

Fri Feb 26 17:07:25 1993  Doug Evans  (dje@canuck.cygnus.com)

	* machmode.def: Added 32-byte int OImode.

Fri Feb 26 13:59:23 1993  Jeffrey A. Law  (law@schirf.cs.utah.edu)

	* explow.c (memory_address): Use CONSTANT_ADDRESS_P instead of
	LEGITIMATE_CONSTANT_P.
	(break_out_memrefs): Likewise.

Fri Feb 26 06:18:40 1993  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* expr.c (expand_expr, case IN_EXPR): Fix numerous small bugs and
	make some cleanups.

	* recog.c (constrain_operands, case 'r'): If STRICT, a REG isn't
	valid if it is a pseudo even if GENERAL_REGS == ALL_REGS.

	* alpha.h (LEGITIMIZE_ADDRESS): Add missing args to calls to
	expand_binop.

Thu Feb 25 17:24:45 1993  Bill Cox  (bill@rtl.cygnus.com)

	* expr.h: Add prototypes for most expr-related functions.
	* jump.c (jump_optimize): Add missing parameter in expand_binop	call.

Thu Feb 25 17:50:55 1993  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* toplev.c: No need to #undef ABS; done in rtl.h.

	* reorg.c (redundant_insn_p): Fix typo in testing for types of
	insns by using GET_RTX_CLASS.

	* expmed.c (emit_store_flag): Fix typo in testing BRANCH_COST.

Thu Feb 25 14:32:31 1993  Jim Wilson  (wilson@wookumz.gnu.ai.mit.edu)

	* combine.c (set_nonzero_bits_and_sign_copies): Fix typo in
	paradoxical set dest handling.

	* convert.c (convert_to_integer): Delete Feb 19 change.

	* fold-const.c (decode_field_reference): Fix force_fit_type call.

Thu Feb 25 07:38:36 1993  Ian Lance Taylor  (ian@cygnus.com)

	* fixinc.sco: Use pwd if PWDCMD is not defined.

Wed Feb 24 18:28:06 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* config/vax/vms.h (ASM_OUTPUT_EXTERNAL): Use vms_check_external.
	(ASM_GLOBALIZE_LABEL): New definition; use vms_check_external.
	* config/vax/vax.c (vms_check_external): New function.

	* config/m68k/xm-mot3300.h (NO_SYS_SIGLIST): Defined.

Wed Feb 24 16:01:42 1993  Jim Wilson  (wilson@wookumz.gnu.ai.mit.edu)

	* loop.c (consec_sets_invariant_p): Correct REG_EQUAL note checks
	to distinguish libcall case from ordinary insn case.

	* loop.c (add_label_notes): Don't add notes for references to
	dispatch tables because jump doesn't.
	(find_and_verify_loops): Invalidate loops that contain labels
	whose address has been taken.

	* fixinc.svr4 (string.h): Delete 'g' from sed command.

	* sparc.md (zero_extendqi*i2): Delete never matched constraints.

	* i960.c (umulsidi3+1): Delete extra parenthesis.

Tue Feb 23 15:09:50 1993  Ian Lance Taylor  (ian@cygnus.com)

	* Makefile.in (install-headers): Create relative paths for
	symbolic links within installed include directory.

Tue Feb 23 14:43:46 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* stmt.c (check_for_full_enumeration_handling): Handle nameless type.

	* tree.h (CONSTRUCTOR_NAME_FORMAT): Handle NO_DOT_IN_LABEL.

	* config/m68k/mot3300.h (NO_DOLLAR_IN_LABEL, NO_DOT_IN_LABEL): Defined.

	* collect2.c (is_ctor_dtor): Handle NO_DOT_IN_LABEL.

Mon Feb 22 18:06:06 1993  John Hassey  (hassey@dg-rtp.dg.com)

	* m88k.c (output_call): Don't use the delay slot of a bsr.n 
	to modify the return address, unless -O2 specified.

Mon Feb 22 17:36:52 1993  Kresten Krab Thorup  (krab at xiv)

	* objc/core.c (initialize_class): Take Class_t instead of
	char* as argument.  Callers changed to pass the class.

	* objc/core.c (initialize_class): Mark the class
	initialized *before* the actual call of "+initialize".  This is
	needed in case of certain circular dependances between classes.

	* objc/object.m	(doesNotRecognize): Call sel_getName to get
	the name of the selector, and print that.
	(subclassResponsibility, notImplemented): Likewise.

Mon Feb 22 00:23:47 1993  Richard Stallman  (rms@wookumz.gnu.ai.mit.edu)

	* expr.c (emit_library_call_value): Fix bug in prev change.

	* Makefile.in (install-include-dir): Depend on install-dir.

	* convert.c (convert_to_integer): #if 0 the truncated integer warning.

Mon Feb 22 15:15:40 1993  James Van Artsdalen  (james@bigtex.cactus.org)

	* fold-const.c (all_ones_mask_p): Really use tmask.

Mon Feb 22 11:59:09 1993  Michael Meissner  (meissner@osf.org)

	* fold-const.c (all_ones_mask_p): Declare tmask to be `tree'.
	(optimize_bit_field_compare) Add missing semicolon.

Sun Feb 21 20:20:13 1993  Richard Stallman  (rms@wookumz.gnu.ai.mit.edu)

	* expr.c (emit_library_call_value): Really pass mem value address
	to the library function.

Sun Feb 21 15:15:40 1993  James Van Artsdalen  (james@bigtex.cactus.org)

	* fold-const.c (decode_field_reference): Use force_fit_type
	instead of convert to avoid truncated integer warning.
	(all_ones_mask_p): Likewise.

Sun Feb 21 13:06:00 1993  Jeffrey A. Law  (law@schirf.cs.utah.edu)

	* pa.md (load high pattern): Rework constraints to reduce %r1
	spillage.

	* pa.md (const_double -> FP pattern): Remove cases which can never
	happen anymore.

	* pa.c (print_operand, case 'Y'): Output comparison operators
	which will give the right results when one or more operands is a NaN.

Sun Feb 21 01:38:19 1993  Richard Stallman  (rms@wookumz.gnu.ai.mit.edu)

	* expr.c (emit_move_insn_1): New subroutine cut from emit_move_insn.
	(emit_move_insn): Use that.
	* optabs.c (gen_move_insn): Use emit_move_insn_1.
	* expr.h (emit_move_insn_1): Declared.

Sat Feb 20 20:33:51 1993  Doug Evans  (dje@wookumz.gnu.ai.mit.edu)

	* cccp.c: Add declaration for pedwarn_with_line.

Sat Feb 20 14:46:25 1993  James Van Artsdalen  (james@bigtex.cactus.org)

	* fixincludes (SRCDIR): Make absolute from ORIGDIR.
	(sys/types.h): Quote variables that might expand with spaces.
	Strip quotes from expansion of SIZE_TYPE.
	(stdio.h): Fix typo deleting line.

Sat Feb 20 18:41:05 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* cccp.c (warning_with_line, pedwarn_with_line): New functions.
	(rescan): For pedantic, no error if string constant has newline,
	just a pedwarn.  And don't end the string constant there.

Sat Feb 20 17:25:16 1993  Doug Evans  (dje@wookumz.gnu.ai.mit.edu)

	* fold-const.c (decode_field_reference): Use force_fit_type
	instead of convert to avoid truncated integer warning.

Sat Feb 20 07:31:32 1993  John Hassey  (hassey@dg-rtp.dg.com)

	* fixincludes: Change "va_list)" to "__gnuc_va_list)".

Sat Feb 20 03:19:44 1993  Doug Evans  (dje@wookumz.gnu.ai.mit.edu)

	* fixincludes: Save temp file in ${LIB}.
	Use -I${ORIGDIR} when compiling types.c.

Fri Feb 19 00:45:41 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* convert.c (convert_to_integer): Warn if integer is truncated
	and that changes the value.

Thu Feb 18 20:15:20 1993  Jim Wilson  (wilson@wookumz.gnu.ai.mit.edu)

	* aix386.h: Include aix386ng.h instead of duplicating it.
	* 3b1.h (ASM_OUTPUT_CASE_END): Add missing semicolon.

	* sparc.c (output_function_prologue): Don't save %f31 to stack.
	* sparc.h (STARTING_FRAME_OFFSET): Set to -8.

	* pbd.h, sol2.h, sparc.h, sysv4.h (CPP_PREDEFINES): Add
	-D__GCC_NEW_VARARGS__.
	* va-sparc.h (va_start): If __GCC_NEW_VARARGS__ not defined, use
	old definition.

	* final.c (end_final): Don't call assemble_zeros with an size
	argument of zero.

	* move-if-change: Use cmp -s instead of redirecting output to
	/dev/null.

	* calls.c (expand_call): When MAYBE_REG_PARM_STACK_SPACE defined,
	if reg_parm_stack_space is zero, set args_size.constant to zero.

Thu Feb 18 17:43:30 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* objc/core.c (__objc_execClass):
	Don't assign superclass pointer more than once.

	* objc/record.h (record_store_at, record_get):
	Test record_capacity, not record_entries, in assertion.

	* flow.c (regno_uninitialized): Test global_regs only for hard regs.

	* c-lex.c (yylex): Undo Feb 7 change.
	* c-parse.in (program): After extdefs, pop any unpopped binding lvls.

	* Makefile.in (BISONFLAGS): Add -v.

Wed Feb 17 18:51:51 1993  Karl Berry  (karl@owl.hq.ileaf.com)

	* toplev.c (ABS): #undef after including sys/resource.h.

Wed Feb 17 22:02:09 1993  John Hassey  (hassey@dg-rtp.dg.com)

	* m88k.c (emit_ldst): For large offsets use register index
	instead of immediate.  

Wed Feb 17 18:02:26 EST 1993  John Wehle  (john@feith.com)

	* we32k.h (CONST_COSTS): Updated to better reflect
	the actual constant costs on a we32k.

	* we32k.md (truncdfsf2, extendsfdf2): Changed from
	define_insn to expand_insn so the optimizer can do
	a better job.

	* we32k.h (GO_IF_LEGITIMATE_ADDRESS): Added support for
	deferred addressing.

	* we32k.md: Eliminated a jmp pattern and the peephole
	patterns which are no longer needed now that deferred
	addressing is supported.

Wed Feb 17 17:55:34 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* fixincludes (sys/types.h): Replace definition of size_t
	based on SIZE_TYPE.

Wed Feb 17 06:54:42 1993  John Hassey  (hassey@dg-rtp.dg.com)

	* config/m88k/m88k.h (CONST_OK_FOR_LETTER_P): Added 'K'.  
	* config/m88k/m88k.md: Use 'K' constraint with arith5_operand
	predicate.  

Wed Feb 17 03:04:49 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* Makefile.in (stmp-fixinc): Renamed from stmp-fixincludes.

Tue Feb 16 14:34:19 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* config/sparc/sparc.h (ASM_OUTPUT_IDENT, IDENT_ASM_OP): Defined.

Tue Feb 16 02:48:58 EST 1992  John Wehle  (john@feith.com)

	* reload.c (find_reloads_address): Use strict_memory_address_p
	to check for valid indirect address.

	* xm-we32k.h: Include xm-svr3.h.  Move tm.h include earlier.
	(HOST_BITS_PER_LONGLONG, HOST_WORDS_BIG_ENDIAN): Defined.
	(USG, bcopy, bzero, bcmp): Deleted.
	(alloca): Definition moved before tm.h.

Tue Feb 16 01:28:52 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* c-typeck.c (build_indirect_ref): Avoid *& short-cut if -fvolatile.

Mon Feb 15 22:22:08 1993  Michael Meissner  (meissner@osf.org)

	* mips/osfrose.h (CPP_SPEC): When preprocessing .S files, pass
	-traditional if neither -ansi nor -traditional was passed, to
	allow the macros which form labels to not give gas heartburn.

	* i386/osfrose (CPP_SPEC): Ditto.

Mon Feb 15 02:17:47 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* objc-act.c (HASHFUNCTION): insure nonnegative hash even if
	addresses are negative.

Sat Feb 13 04:16:29 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* c-decl.c (c_decode_option): Handle -Wmissing-braces.
	* c-typeck.c (process_init_constructor): Test warn_missing_braces.
	* c-tree.h (warn_missing_braces): Declared.

Fri Feb 12 19:40:38 1993  Doug Evans  (dje@wookumz.gnu.ai.mit.edu)

	* combine.c (setup_incoming_promotions): Make static.

Fri Feb 12 16:02:52 1993  Per Bothner  (bothner@hal.gnu.ai.mit.edu)

	* tree.def:  Fix typo in comment (TREE_VALUES -> TYPE_VALUES).

Fri Feb 12 11:26:28 1993  Torbjorn Granlund  (tege@hal.gnu.ai.mit.edu)

	* pa.md (rotlsi3): Fix typo, rotate was rotatert in rtl template.

Fri Feb 12 07:47:11 1993  John Hassey  (hassey@dg-rtp.dg.com)

	* function.c (reposition_prologue_and_epilogue_notes): Allow
	for zero length prologue and epilogue list.

Thu Feb 11 05:55:33 1993  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* collect2.c (find_a_file): Always reject "./ld".
	(main): Pass short name of program as first arg to fork_execute;
	ensure argv[0] always gets filename.
	(fork_execute): Print name for diagnostic from PROG; filename
	comes from argv[0].

	* fixincludes: Don't assume that macros defining IO and CTRL
	ioctl codes always use `x'; some use `c' or `g'.

	* collect2.c (putenv): New function, copied from gcc.c.
	(last_file_name): New variable.
	(find_a_file): Ignore name in last_file_name too.
	(main): Look at name in COLLECT_NAME and set it to the name we were
	called with.
	Pass filename used for ld to ld as argv[0].

Thu Feb 11 03:55:39 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* expr.c (expand_builtin): Move memory_address calls
	out of arglist of emit_block_move.

Wed Feb 10 16:14:09 1993  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* Update Alpha support to latest calling sequence.
	* alpha.c (version_string): Declare.
	(current_file_function_operand): New function, replaces
	current_function_operand.
	(print_operand, case 'F'): Case deleted.
	(alpha_builtin_saveregs): Reworked to use homed arglists, as
	recommended in the calling standard.
	(alpha_need_gp): Deleted, code moved into output_prolog.
	(alpha_gp_dead_after): Deleted; optimization is not safe.
	(alpha_write_verstamp): New function.
	(output_prolog, output_epilog): Major rework to update to
	current calling standard.
	* alpha.h (ASM_OUTPUT_LOOP_ALIGN): Enable, now that assembler fixed.
	(SLOW_UNALIGNED_ACCESS): Define as 1.
	(ARG_POINTER_REGNUM): Use register number 31 as an arg pointer.
	(FRAME_GROWS_DOWNWARD): Do not define.
	(STARTING_FRAME_OFFSET): Now is outgoing args size.
	(FIRST_PARM_OFFSET): Now 0.
	(ELIMINABLE_REGS, etc.): Cannot eliminate gp, but do
	eliminate AP in favor of either SP or FP.
	(RETURN_IN_MEMORY): All structs or integers larger than 64
	bits get returned via memory.
	(SETUP_INCOMING_VARARGS): Use homed arglist mechanism.
	(ASM_DECLARE_FUNCTION_NAME): Use proper second arg to .ent.
	(ASM_FILE_START): Call alpha_write_verstamp.
	(ENCODE_SECTION_INFO): Record when a decl is for a function
	in the current file.
	* alpha.md (call insns): Always reload gp after a full call.
	Use current_file_function_operand to see when we can use BSR.

Wed Feb 10 09:53:00 1993  John Hassey  (hassey@wombat.gnu.ai.mit.edu)

	* config.sub: removed m88kbcs, changed delta88 and harris to
	use sysv3.  

Wed Feb 10 03:29:11 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* c-decl.c (duplicate_decls): Silently accept harmless mismatch
	in type of 1st arg of builtin function.

	* c-typeck.c (build_indirect_ref): If arg is void *, just warn.

Tue Feb  9 22:15:08 1993  Brendan Kehoe  (brendan@lisa.cygnus.com)

	* alpha.md (fix_truncdfdi2, fix_truncsfdi2): Use `cvttqc', not
	`cvttq', to avoid rounding up.

Tue Feb  9 18:45:57 1993  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* function.c (promoted_input_arg): New function.
	* expr.h: Declare it.
	* combine.c (setup_incoming_promotions): New function.
	(combine_instructions): Add calls to setup_incoming_promotions.

Tue Feb  9 14:04:22 1993  Brendan Kehoe  (brendan@lisa.cygnus.com)

	* fixincludes: Fix logic about when to duplicate entries under the
	`FILE' link.

Tue Feb  9 13:22:28 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* cccp.c (main): Fix lineno of "does not end in newline" message.
	(finclude): Likewise.

Tue Feb  9 12:03:37 1993  Michael Meissner  (meissner@osf.org)

	* mips/mips.c (function_epilogue): Avoid integer overflows in
	checking whether $31 is the only register saved.
	(mips_epilogue_delay_slots): Ditto.

Tue Feb  9 05:46:17 1993  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* rtl.h: Undefine ABS; some POSIX systems define it as 1.

	* combine.c (combine_instructions): When calling
	set_nonzero_bits_and_sign_copies, set things up so that we
	can call get_last value; call record_dead_and_set_regs in loop.
	(set_nonzero_bits_and_sign_copies): Handle paradoxical SET.

Tue Feb  9 01:13:18 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* c-lex.c (yylex): For wide char constant, use wchar_type_node.
	Swallow any preprocessing number as a (possibly erroneous) number.

	* tree.c (size_in_bytes): Add 2nd arg to force_fit_type.

Mon Feb  8 07:52:23 1993  Ian Lance Taylor  (ian@cygnus.com)

	* configure (*-*-hpux*): Use install-headers-cpio.

Mon Feb  8 07:13:49 1993  John Hassey  (hassey@dg-rtp.dg.com)

	* toplev.c (compile_file): Don't flag global register variables
	as unused.  

Mon Feb  8 06:06:58 1993  James Van Artsdalen  (james at bigtex.cactus.org)

	* i386.md (extendsidi2): Use correct mnemonic for cwtl opcode.

Mon Feb  8 05:52:08 1993  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* expr.c (emit_push_insn): If REG is zero, don't set regs here.
	* expr.h (MUST_PASS_IN_STACK_BAD_ALIGN): Deleted.
	(MUST_PASS_IN_STACK): No problem anymore with nonaligned structs.
	* calls.c: Allow passing nonaligned BLKmode structs in regs.
	(struct arg_data): New fields aligned_regs and n_aligned_regs.
	(expand_call): Set and use these fields when required.
	(store_one_arg): Don't pass reg to emit_push_insn if we have
	previously formed aligned registers.

Sun Feb  7 23:34:16 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* expmed.c (emit_store_flag): Add missing arg to convert_move.

Sun Feb  7 16:13:05 1993  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu.edu)

	* calls.c (struct arg_data): New field MODE.
	(expand_call, store_one_arg): Use it to ensure that all args get
	promoted if requested, not just those passed in registers.

Sun Feb  7 13:12:23 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* c-lex.c (yylex): At eof, if binding levels not popped,
	imagine some close-braces to pop them.

Sun Feb  7 10:54:42 1993  Chip Salzenberg  (chip@tct.com)

	* fold-const.c (fold): Call force_fit_type with two parameters.

	* fold-const.c (force_fit_type): Don't examine the tree until
	it is known to an INTEGER_CST.  If it isn't, just return.

Sat Feb  6 20:26:09 1993  James Van Artsdalen  (james at bigtex.cactus.org)

	* byteorder.h (386 htonl,htons): Avoid hard-coded register usage.

Sat Feb  6 20:23:02 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* config/m68k/m68k.md (movqi): For special case of moving byte
	to stack, push into low byte and then copy to high byte.
	For case of moving to/from address reg, exchange it with d0.

Fri Feb  5 19:58:26 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* stmt.c (expand_expr_stmt): Bypass fetching a volatile value
	if it is VOIDmode.

Fri Feb  5 18:27:27 1993  Jim Wilson  (wilson@geech.gnu.ai.mit.edu)

	From Fred Fish (fnf@fishpond.cygnus.com)
	* config.sub (i[34]86sol2):  New abbrev for i[34]86-unknown-solaris2.
	* configure (i[34]86-*-solaris2):  New config for Solaris 2, x86.
	* crtstuff.c (__do_global_ctors_aux):  Use FORCE_INIT_SECTION_ALIGN
	to avoid Solaris 2, x86 linker bug.
	* config/i386/{sol2-c1.asm, sol2-ci.asm, sol2-cn.asm}:  New runtime
	support files for Solaris 2, x86.
	* config/i386/{sol2.h, t-sol2}:  New config files for Solaris 2, x86.

	* sparc.h (EXTRA_CONSTAINTS): Delete 'R' support.
	(CONST_OK_FOR_LETTER_P): Correct 'K' comment.

	* caller-save.c (CEIL): Delete.
	(restore_referenced_regs): New var NUMREGS.  Pass NUMREGS to
	insert_save_restore instead of using using CEIL.

	* sched.c (true_dependence, anti_dependence, output_dependence):
	Assume that MEM_IN_STRUCT_P QImode varying addresses can overlap a
	non-MEM_IN_STRUCT_P fixed address.

	* i960.c (legitimate_address_p): Accept either REG or SUBREG where
	a register is valid in an address.

	* configure (*-*-sco*): Set install_headers_dir to cpio instead of tar.

	* cccp.c (finclude): Error if try to include a directory.
	(S_ISDIR): Add a default definition.

Fri Feb  5 10:24:35 1993  Brendan Kehoe  (brendan@lisa.cygnus.com)

	* toplev.c (lang_options): Remove `-fSOS' and `-fno-SOS'.

	Wed Feb  3 16:34:58 1993  Brendan Kehoe  (brendan@lisa.cygnus.com)

	* cp-decl.c (init_decl_processing): Add __builtin_args_info.

	Wed Feb  3 12:47:02 1993  Brendan Kehoe  (brendan@lisa.cygnus.com)

	* cp-class.c (finish_struct_methods): Avoid creating a circularity
	when putting ctors and dtors at the front of the list.

	* cp-init.c (build_new): Call c_sizeof_nowarn, not c_sizeof.
	(build_delete): Likewise.

	Tue Feb  2 09:57:29 1993  Brendan Kehoe  (brendan@lisa.cygnus.com)

	* cp-lex.c (yyprint): Make non-static.

	Mon Feb  1 17:09:19 1993  Brendan Kehoe  (brendan@lisa.cygnus.com)

	* cp-lex.c (real_yylex): Use pedwarn for exceeding the range of a
	double.

	Sat Jan 30 13:09:35 1993  Brendan Kehoe  (brendan@lisa.cygnus.com)

	* cp-method.c (hack_identifier): Also check for VALUE being a
	RESULT_DECL before looking for the DECL_REFERENCE_SLOT.

	* cp-decl2.c (bad_specifiers): Pass OBJECT into error.

	Fri Jan 29 11:46:46 1993  Brendan Kehoe  (brendan@lisa.cygnus.com)

	* cp-class.c (alter_visibility): Forbid reducing the visibility of a
	public member of the derived class.

	* cp-typeck.c (comp_target_parms): Give a contravariance warning
	with P2, not P1, since P1 is the established value, not the argument
	that's coming in for a match.

	* cp-decl.c (start_method): When printing out the class name for a
	duplicate definition, be sure to avoid a null context with the
	second definition.

	Tue Jan 26 15:39:54 1993  Brendan Kehoe  (brendan@lisa.cygnus.com)

	* cp-pt.c (lookup_template_class): Try to use the class value if
	there's no global value.

	Mon Jan 25 15:59:21 1993  Mike Stump  (mrs@cygnus.com)

	* cp-call.c (build_method_call): Remove TYPE_NEEDS_WRAPPER cruft.

	Sat Jan 23 12:13:24 1993  Niklas Hallqvist  (niklas at della.appli.se)

	* cp-class.c (finish_struct): See to that static members whose type
	is the class they're declared in gets a correct mode.

	Mon Jan 25 11:04:23 1993  Niklas Hallqvist  (niklas at della.appli.se)

	* cp-decl.c (define_label): Don't report crossings of any internal
	entity initializations.  Don't dereference NULL.

	Wed May 13 21:44:05 1992  Niklas Hallqvist  (niklas@appli.se)

	* cp-decl2.c: Support for NO_DOT_IN_LABEL.
	* cp-tree.h: Likewise.
	* cp-method.c: Likewise.

	* cp-except.c: Support for no JOINER setups (i.e. NO_DOT_IN_LABEL)
	* cp-lex.c: Likewise.
	* cp-search.c: Likewise.

	Fri Jan 22 08:52:58 1993  Niklas Hallqvist  (niklas at della.appli.se)

	* cp-call.c (resolve_scope_to_name): Try to find nested types not
	just in the current class and at global scope but at all
	intermediate classes as well.

	Mon Jan 25 11:04:23 1993  Niklas Hallqvist  (niklas at della.appli.se)

	* cp-decl.c (xref_tag): Enable test of incomplete basetypes.
	* cp-tree.c (layout_basetypes): Disabled it here.

	Mon Jan 25 11:04:23 1993  Niklas Hallqvist  (niklas at della.appli.se)

	* cp-init.c (build_new): Move error check of array size before use.

	Sun Jan 24 21:41:09 1993  John Carr  (jfc@Athena.MIT.EDU)

	* cp-typeck.c (build_binary_op_nodefault): Add support for
	FLOOR_MOD_EXPR, merged in from the c front-end.

Wed Feb  3 18:23:07 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* objc-act.c (init_objc): Use xrealloc, not realloc.

	* expr.c (emit_library_call, emit_library_call_value):
	Handle STACK_BOUNDARY when using push insns.

Tue Feb  2 16:37:49 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* varasm.c (assemble_zeros): Output nothing rather than empty skip.

	* c-typeck.c (build_conditional_expr): Always convert and check
	both result operands even if condition is constant.
	(build_c_cast): Bypass default_conversion when casting to void.

	* c-decl.c: Add some braces for clarity.

	* configure (i[34]86-*-linux*): Set fixincludes to Makefile.in
	Don't set tmake_file.
	* Makefile.in (stmp-fixincludes): Don't run FIXINCLUDES
	if it is Makefile.in.
	* t-linux: File deleted.

	* Makefile.in (install-headers-cpio): Delete spurious parens
	from around the whole command.
	(install-headers-tar): Delete parens around the "source" tar cmd.

Tue Feb  2 15:20:52 1993  Chip Salzenberg  (chip@tct.com)

	* c-decl.c (pushdecl): DECL_EXTERNAL implies TREE_PUBLIC,
	so don't bother to check for both.

	* regclass.c (int_reg_class_contents): Make unsigned to avoid
	signed integer overflow.
	(init_reg_sets): Avoid signed integer overflow.

	* cexp.y (parse_escape):  Support \E and \e like cc1:
	they mean \033, and they generate a warning if pedantic.

Tue Feb  2 15:17:38 1993  Jim Wilson  (wilson@wookumz.gnu.ai.mit.edu)

	* t-sol2 (INSTALL_TARGET): Delete.

Tue Feb  2 14:18:59 1993  Brendan Kehoe  (brendan@cygnus.com)

	* Makefile.in (gcc.o): Depend upon config.status, so any changes
	in prefix will be communicated to the build process.
	(cccp.o): Likewise.

Tue Feb  2 07:09:36 1993  Torbjorn Granlund  (tege@hal.gnu.ai.mit.edu)

	* pa.md (cmov): Use @ for output.

Mon Feb  1 01:50:54 1993  Paul Eggert  (eggert@twinsun.com)

	* c-decl.c (finish_decl, grokdeclarator, finish_struct): Report
	overflows in storage sizes.
	(build_enumerator): Report overflows in enumerators.
	* fold-const.c (same_sign): Remove.
	(lshift_double): Don't report arithmetic overflow, since the
	C standard doesn't seem to require it here.
	(force_fit_type): Accept new parameter specifying whether a signed
	overflow has already occurred.  Yield overflow indication.
	All callers changed.
	(neg_double): Don't report overflow when -0 yields 0.
	(const_binop): Propagate operand overflow for warnings.
	Don't report overflow when -1 + 1 yields 0.

	* c-parse.in (unary_expr): Warn about overflows in parser-built
	unary expressions.
	* c-typeck.c (parser_build_binary_op): Warn about overflows and
	conversions of out-of-range constants in parser-built binary
	expressions.
	(build_conditional_expr): Check conversions in if-then-else
	expressions.
	(build_c_cast): Ignore any integer overflow caused by a cast.
	(convert_for_assignment): Warn if source had overflow in folding.
	(process_init_constructor): Report overflows in array initializer
	indexes.
	* c-common.c (constant_expression_warning): Suppress duplicate
	warnings.
	(convert_and_check, overflow_warning, unsigned_conversion_warning):
	New functions.  Prototypes added to c-tree.h.

	* expr.c (expand_builtin): Report overflow if __builtin_args_info
	arg exceeds one word.
	Fix punctuation of error messages.

Sun Jan 31 17:45:11 1993  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* combine.c (simplify_and_const_int): Never consider bits outside
	of MODE.

Sun Jan 31 15:24:46 1993  Doug Evans  (dje@wookumz.gnu.ai.mit.edu)

	* objc-act.c (build_module_descriptor): Fix call to start_function.

Sun Jan 31 13:08:05 1993  Torbjorn Granlund  (tege@hal.gnu.ai.mit.edu)

	* pa.md (zvdep32): Handle 5 bit immediates for operand 1.
	(ashlsi3): Likewise.
	(and + ashift): New combine pattern.

Sun Jan 31 12:40:00 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* protoize.c: Include gvarargs.h before system headers.

Sat Jan 30 18:51:46 1993  Doug Evans  (dje@wookumz.gnu.ai.mit.edu)

	* c-typeck.c (build_compound_expr): insert missing return

Sat Jan 30 16:10:56 1993  Jeffrey A. Law  (law@schirf.cs.utah.edu)

	* pa.c (reg_or_0_operand): Use CONST0_RTX instead of 
	const0_rtx.
	(reg_or_0_or_nonsymb_mem_operand): New function.
	(emit_move_sequence): Copying CONST0_RTX into any
	register can be done directly.  Use CONST0_RTX instead
	of const0_rtx.
	(output_fp_move_double): Handle copying a CONST0_RTX
	into FP or integer registers.
	(print_operand): Handle "%r0" for DFmode and SFmode
	values too.

	* pa.h (CONST_DOUBLE_OK_FOR_LETTER_P): Generalize.
	(LEGITIMATE_CONSTANT_P): Allow 0.0.
	(CONST_COSTS, case CONST_DOUBLE): fp0.0 is free when
	not used in a SET expression.  

	* pa.md (cmpXf expands): Allow 0.0 for either operand
	of the comparison.
	(cmpXf insns): Allow 0.0 for either operand of the
	comparison.  Update output template to handle 0.0 as one
	of the operands.
	(movsi insn, fp->fp case): Update constraints and template to
	allow store of zero into an FP register.
	(movhi insn, fp->fp case): Likewise.
	(movqi insn, fp->fp case): Likewise.
	(movdi insn, fp->fp case): Likewise.
	(movDF const_double pattern): Do not apply this pattern
	if the const_double is zero.
	(movdf insn, fp->fp and gr->gr cases): Update constraints
	and output template to allow store of zero into a FP or GR.
	Update condition string to allow zero as operand 1.
	(movsf insn, fp->fp and gr->gr cases): Likewise.  Also allow
	store of zero into a memory location.

Sat Jan 30 14:57:44 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* c-tree.h: Add many prototypes from bill@cygnus.com

Sat Jan 30 01:06:52 1993  Niklas Hallqvist  (niklas@spiff.gnu.ai.mit.edu)

	* c-common.c (c_build_type_variant): Moved here from c-decl.c.
	Redirected the TYPE_MAIN_VARIANT to the "real" main variant.
	Build the possibly new array type on the permanent obstack if
	the original type was permanent.
	(permanent_obstack): Added extern declaration.
	* c-decl.c (c_build_type_variant): Moved to c-common.c.

Fri Jan 29 18:16:47 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* config/m68k/m68k.md (iorsi3): Add CC_STATUS_INIT if use bset.

	* fold-const.c (force_fit_type): Abort if T not INTEGER_CST.
	* tree.c (size_in_bytes): Only call force_fit_type for an INTEGER_CST.

	* config/i386/t-linux (FIXINCLUDES): New file.
	* configure (i[34]86-*-linux*): Use t-linux.

Fri Jan 29 12:08:04 1993  Jeffrey A. Law  (law@schirf.cs.utah.edu)

	* reload.c (find_reloads_toplev):  When handling a (subreg (reg))
	where (reg) will be replaced by a memory reference, if the memory
	address is invalid for the mode of the subreg, then search the 
	memory address for reloads.

	* pa.h (FIXED_REGISTERS): %r31 is not fixed.

Thu Jan 28 23:49:25 1993  James Van Artsdalen  (james at bigtex.cactus.org)

	* reg-stack.c (compare_for_stack_reg): Properly swap operands of a
	COMPARE.

Thu Jan 28 13:47:53 1993  Jeffrey A. Law  (law@schirf.cs.utah.edu)

	* pa.md (iorsi3): Split into two patterns, a named "iorsi3" which
	only accepts registers, and a combiner pattern which accepts a
	restricted set of constant integers for one term.
	* pa.c (ior_operand): Do not accept registers.

	* pa.h (LEGITIMIZE_ADDRESS): Delete cases which can never happen.

	* pa.h (CPP_SPEC for OLD_CC): Delete.
	(CC1_SPEC for OLD_CC): Likewise.
	(MODES_TIEABLE_P): Simplify.
	(ASM_OUTPUT_ADDR_VEC_ELT): Fix comment.
	(leaf_function): Delete unused variable.
	(HARD_REGNO_MODE_OK): Delete old useless version.
	(FIRST_PARM_OFFSET): Likewise.
	(FIRST_PARM_CALLER_OFFSET): Likewise.
	(EXPAND_BUILTIN_SAVEREGS): Likewise.
	(ASM_OUTPUT_REG_PUSH): Likewise.
	(ASM_OUTPUT_REG_POP): Likewise

Thu Jan 28 07:51:47 1993  Ian Lance Taylor  (ian@cygnus.com)

	* config/m68k/m68k.h (PRINT_OPERAND_PUNCT_VALID_P): Accept '/'.
	* config/m68k/m68k.c (print_operand): Print %/ as REGISTER_PREFIX.
	* longlong.h (umul_ppmm for 68000): Use %/ before all register
	names.

	* configure (install_headers_dir): New variable for each
	configuration, used to set INSTALL_HEADERS_DIR in Makefile.
	(*-*-sysv4*, *-*-sysv*): Set install_headers_dir to
	install-headers-cpio.

Thu Jan 28 07:30:25 1993  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* a29k.md: Remove 29050-specific variants of patterns generating
	loadm that have earlyclobber.  This was put in for some very old
	version of the '050, which isn't used anymore, that had a bug.

Thu Jan 28 06:56:04 1993  Pat Rankin  (rankin@eql.caltech.edu)

	* vmsconfig.com: change instances of [.config] to [.config.vax].
	* make-cc1.com, make-cccp.com, make-l2.com: change /include and -I
	values from [.config] to [.config.] (this trailing period works with
	GNU C's preprocessor but not with VAX C's).

Thu Jan 28 06:48:57 1993  Michael Collison  (collison@osf.org)

	* optabs.c (init_fixtab, init_optabs): Fix typos in QFmode and HFmode
	initialization.

Wed Jan 27 13:11:26 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* Makefile.in (includedir): Use local_prefix.

Wed Jan 27 12:08:05 1993  Jeffrey A. Law  (law@schirf.cs.utah.edu)

	* pa.c (check_fp_mov): Delete unused function
	(register_or_short_operand): Likewise.
	(eq_or_neq): Likewise.
	(gen_compare_reg): Likewise.
	(reverse_relop): Likewise.
	(frame_base)name): Delete unused variable.

	* pa-ghpux.h (HAVE_ATEXIT): Delete.  This is defined in pa.h
	* pa-gux7.h (HAVE_ATEXIT): Likewise.
	* pa-hpux.h (HAVE_ATEXIT): Likewise.
	* pa-hpux7.h (HAVE_ATEXIT): Likewise.

Wed Jan 27 06:46:50 1993  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* cse.c (simplify_relation_operation): We can compute the result
	of a comparison of CONST_INTs no matter what mode the computation
	is to be done in.

	* expmed.c (emit_store_flag): Swap operands if first is a
	constant and second is not.
	Abort if compare_from_rtx didn't return an rtx with the code we
	expect.
	* expr.c (compare_from_rtx): Only swap operand if first is a
	constant and second is not.

	* c-common (declare_function_name): If char_array_type_node isn't
	large enough for the name, make a larger type.
	* c-decl.c (init_decl_processing): Make the arrays 200 long instead
	of 10 to leave more room for most names.

	* function.c (put_var_into_stack, fixup_var_refs_insns): Minor
	cleanups.
	(fixup_var_refs_1, case SET): Correctly check for simple insns
	that don't need fixups.

	* collect2.c: Delete ISCOFF macro which was in #ifdef _AIX.
	* rs6000.h, a29k/unix.h (MY_ISCOFF): New macro.

Tue Jan 26 19:31:31 1993  Tom Wood  (Tom_Wood@NeXT.com)

	* combine.c (combine_instructions): Initialize undobuf in the
	event `gen_rtx_combine' is called before `try_combine'.

Tue Jan 26 18:20:04 1993  Jim Wilson  (wilson@wookumz.gnu.ai.mit.edu)

	* i960.md (umulsidi3+1): Add variant which accepts constants.

	* fixinc.svr4: Change all uses of EX to SED.
	* fixincludes (sys/types.h): Don't match on ssize_t.
	(stdio.h): Change _VA_LIST_ to __gnuc_va_list for 386BSD.

Tue Jan 26 13:46:04 1993  Brendan Kehoe  (brendan@lisa.cygnus.com)

	* xm-alpha.h (ONLY_INT_FIELDS): Define if not __GNUC__.

	* collect2.c (write_list_with_asm): Use `__asm__' instead of
	`asm', to avoid problems with `-fno-asm'.

	* Makefile.in (insn-*.[ch], protoize.o, unprotoize.o, install): When
	using a trailing semicolon to force a rule to not do anything,
	explicitly run the command `true', to avoid warnings or other
	problems with versions of make which don't like null commands.

Tue Jan 26 07:14:29 1993  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* cse.c (simplify_binary_operation, case SMAX): Correctly
	compute largest possible signed integer.

	* Makefile.in: (rest.cross, gfloat.h, stmp-headers, mostlyclean):
	Build and install gfloat.h instead of float.h.

	* a29k/x-unix (CLIB): Add -lld.

	* integrate.c (copy_rtx_and_substitute, case REG): Call
	gen_lowpart instead of making an explicit SUBREG.
	
	* stmt.c (expand_value_return): Call convert_move instead of the
	erroneous convert_to_mode.

Tue Jan 26 00:58:53 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* collect2.c (find_a_file): First `access' test was backwards.
	(main): Set full_real_ld_suffix right.

	* c-decl.c (init_decl_processing): Use 10 as size
	of ..._array_type_node.

	* cccp.c (handle_directive): Init already_output
	after old_linenum label.
	(finclude): Remove final backslash-newline *before* trigraph_pcp.
	(write_output): Free line_command at end.

Mon Jan 25 19:31:32 1993  Doug Evans  (dje@wookumz.gnu.ai.mit.edu)

	* print-rtl.c (debug_rtx_list, debug_rtx_find): New functions.
	* .gdbinit (prl): New command.

Mon Jan 25 14:49:45 1993  Jim Wilson  (wilson@wookumz.gnu.ai.mit.edu)

	* sparc.c (init_arg_profiler, output_arc_profiler): Delete unused
	functions.
	* sparc.h (ARC_PROFILER): Delete unused macro.

	* sparc.c (sparc_builtin_saveregs): New function.
	* sparc.h (CPP_SPEC): Delete __sparc_frw__ define.
	(TARGET_FRW_COMPAT): New macro.
	(TARGET_DEFAULTS): Comment out -mfrw option.  Add new commented
	out option -mfrw-compat.
	(EXPAND_BUILTIN_SAVEREGS): Call sparc_builtin_saveregs to emit rtl
	inline instead of calling builtin_saveregs in libgcc.a.
	* va-sparc.h (va_start): Rewrite to account for above changes.

	* sparc.h (PRINT_OPERAND_PUNCT_VALID_P): Delete '@' case.
	* sparc.c (print_operand): Likewise.
	(output_fp_move_double): Delete FP_REG to GENERAL_REG and vice
	versa copy support.
	(output_fp_move_quad): Likewise.
	* sparc.md (movsi, movtf, movdf, movdi, movsf): Delete f/r and r/f
	constraint pairs.

	* i960.c (secondary_reload_class): Correct test against
	FIRST_PSEUDO_REGISTER.

	* sparc.c (registers_ok_for_ldd_peep): Delete test for pseudos.

	* optabs.c (emit_indirect_jump): Use Pmode instead of VOIDmode and
	insn_operand_mode.

	* calls.c (calls_alloca): Change name to calls_function.  Add new
	parameter WHICH to control old or new behaviour.
	(expand_call): When stack space is preallocated and parameters
	must be passed on the stack, precompute parameters that involve
	function calls.

	* c-decl.c (language_string): Delete from here.
	* c-parse.in (language_string): Define here for C and Obj-C.

Mon Jan 25 13:54:16 1993  Jeffrey A. Law  (law@schirf.cs.utah.edu)

	* c-decl.c (finish_struct): Disable "structure/union defined
	inside parms" if compiling with -traditional.

Mon Jan 25 05:24:12 1993  Niklas Hallqvist  (niklas at della.appli.se)

	* i386.md (extendsidi2): Fix typo in regno.

Mon Jan 25 00:07:18 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* c-decl.c (lookup_label): Return 0 if not within a function.

	* c-parse.in (unary_expr => ANDAND identifier):
	Handle lookup_label returning 0.

	* Makefile.in (install-float-h-cross):
	Don't ignore error when running enquire.

Sun Jan 24 22:41:00 1993  Michael Meissner  (meissner@osf.org)

	* c-typeck.c (build_compound_expr): Move the code into
	internal_build_compound_expr, and pass second argument TRUE
	indicating that this is the first call.  For recursive calls, pass
	FALSE.  Do not make 0 a non_lvalue constant if this is the first
	call, to allow return 0; from a pointer returning function to not
	get a warning.

Sun Jan 24 18:40:44 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* config/vax/vax.md (move/push address patterns):
	Don't use alternative number to distinguish pushes from moves.
	Use just one alternative `g' in output constraint.

Sun Jan 24 07:19:03 1993  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* final.c (final_scan_insn): Call alter_subreg on duplicate
	operands (in case we need to split the insn).

	* local-alloc.c (CLASS_LIKELY_SPILLED_P): Add default definition.
	(alloc_qty_for_scratch, local_alloc): Use CLASS_LIKELY_SPILLED_P.

Sat Jan 23 19:41:21 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* combine.c (apply_distributive_law): Don't mess with float arith.

	* c-parse.in: Use new name objc-act.h.

Sat Jan 21 13:12:49 1993  Serge Adda  (adda@soft01)

	* expmed.c (emit_store_flag): Reset ICODE using returned COMPARISON.

Sat Jan 23 18:27:35 1993  Niklas Hallqvist  (niklas@spiff.gnu.ai.mit.edu)

	* config/m68k/tower.h (LIB_SPEC): Use %s instead of absolute path.
	(STARTFILE_SPEC): Moved here from tower-as.h.  Use %s instead of
	absolute path.
	* config/m68k/tower-as.h (STARTFILE_SPEC): Moved to tower.h.

Sat Jan 23 16:28:48 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* cccp.c (change_newlines): Renamed from delete_newlines.
	Insert a space in place of a newline.  Caller changed.

	* config/m68k/hp320.h (ASM_OUTPUT_DOUBLE_OPERAND): Delete space
	before arglist.

Sat Jan 23 09:20:41 1993  Niklas Hallqvist  (niklas at della.appli.se)

	* Makefile.in (cross-test): Depend on GCC_PARTS.

Sat Jan 23 07:15:10 1993  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* reload1.c (reload): After calling count_possible_groups, see
	if we have to proceed with allocating a group.
	(count_possible_groups): Use HARD_REG_SET, not a char array, for
	consistency.

	* rs6000.h (ADJUST_COST): Add new definition.

Fri Jan 22 18:55:00 1993  Niklas Hallqvist  (niklas at della.appli.se)

	* fixinc.svr4: Use pwd if PWDCMD is undefined.  Add missing echo
	command.

Fri Jan 22 18:08:47 1993  Brendan Kehoe  (brendan@lisa.cygnus.com)

	Cygnus<-->FSF merge.

	Thu Jan 21 15:26:59 1993  Brendan Kehoe  (brendan@lisa.cygnus.com)

	* Makefile.in (convert.o): Add dependencies.

	* cp-gc.c (NULL): Undef before defining.
	* cp-init.c (NULL): Likewise.
	* cp-expr.c (NULL): Likewise.

	* cp-decl.c (grokdeclarator): Relegate error about operator= to a
	warning for now, an error later.

	Tue Jan 19 16:40:19 1993  Mike Stump  (mrs@cygnus.com)

	* cp-type2.c (my_friendly_assert):  Don't set errorcount or
	sorrycount to zero, as we no longer say "please fix above errors".

	Mon Jan 18 19:44:53 1993  Mike Stump  (mrs@cygnus.com)

	* cp-type2.c (my_friendly_abort): Exit quietly in cases of random
	seg faults in the front-end in the presences of other errors.  This
	makes the handling of these things more uniform.

	Mon Jan 18 16:23:11 1993  Mike Stump  (mrs@cygnus.com)

	* cp-typeck.c (build_unary_op): Improve error message for
	{pre,post}-{increment,decrement}.

	Mon Jan 18 13:58:14 1993  Mike Stump  (mrs@cygnus.com)

	* cp-typeck.c (build_binary_op): Improve error message.

	Fri Jan 15 17:53:33 1993  Mike Stump  (mrs@cygnus.com)

	Fri Jan 15 00:35:22 1993  Niklas Hallqvist  (niklas at della.appli.se)

	* cp-decl.c (start_function): Removed the comp_target_parms test
	when checking for implementations of "C" linkage functions, allows
	for more overloading of extern "C" functions.

	Fri Jan 15 17:32:56 1993  Mike Stump  (mrs@cygnus.com)

	Fri Jan 15 00:35:22 1993  Niklas Hallqvist  (niklas at della.appli.se)

	* cp-decl.c (grokvardecl): Implement the "one definition rule".

	Fri Jan 15 17:17:05 1993  Mike Stump  (mrs@cygnus.com)

	* cp-search.c (get_base_distance): Compute results from calls to
	recursive_bounded_basetype_p into a temp variable, as otherwise we
	can clobber rval with a zero.

	Fri Jan 15 17:10:59 1993  Mike Stump  (mrs@cygnus.com)

	Thu Jan 14 16:02:27 1993  Niklas Hallqvist  (niklas at della.appli.se)

	* cp-decl.c (start_function): Don't try to match static member
	functions with "C"-linkage declared global functions.

	Thu Jan 14 17:58:15 1993  Mike Stump  (mrs@cygnus.com)

	* cp-method.c, cp-type2.c, cp-typeck.c:  Make sure the fourth
	argument to build_overload_call is (struct candidate *)0 not just
	a plain 0.

	Thu Jan 14 17:15:40 1993  Brendan Kehoe  (brendan@lisa.cygnus.com)

	* cp-decl.c (grokdeclarator): Don't warn on an initialized var
	that's extern if it's a const.

	Thu Jan 14 17:03:40 1993  Michael Tiemann  (tiemann@rtl.cygnus.com)

	* cp-pt.c (coerce_template_parms): Add new parameter IN_DECL.
	Update error messages to give location information of the _DECL
	when an instantiation fails.
	(lookup_template_class): Ditto.
	(tsubst): Ditto.
	All callers changed.
	* cp-tree.h (lookup_template_class): Update prototype.
	* cp-parse.y (template_type_name): Update calls to
	lookup_template_class.

	Thu Jan 14 02:09:17 1993  Mike Stump  (mrs@cygnus.com)

	* cp-decl2.c (grokfield): Arrange for the type to be set on class
	typedefs, cures one type of internal compiler error 62.  Now calls
	set_identifier_type_value just before pushdecl_class_level. 

	Wed Jan 13 22:43:58 1993  Mike Stump  (mrs@cygnus.com)

	* cp-search.c (get_base_distance):  Allow checking of UNION_TYPEs,
	as some of the init code calls us.

	Wed Jan 13 21:12:22 1993  Mike Stump  (mrs@cygnus.com)

	Mon Jan 11 20:11:17 1993  Niklas Hallqvist  (niklas at della.appli.se)

	* cp-parse.y (implicitly_scoped_stmt, simple_stmt): New rules to
	handle the changed semantics of selection & iteration statements
	in ANSI C++ (check out 6.4-5 in the draft as opposed to the ARM).
	(simple_if, stmt, compstmt): Changed to use the new rules.
	(stmt_decl_msg): Removed this static (together with all its uses)
	because it's now unnecessary.
	(cond_stmt_keyword): New static string to use in the error message
	of paren_expr_or_null.
	(paren_expr_or_null): Use cond_stmt_keyword instead of stmt_decl_msg.

	Tue Jan 12 18:53:44 1993  Brendan Kehoe  (brendan@lisa.cygnus.com)

	* cp-decl.c (lookup_name): If PREFER_TYPE is -2, don't call
	lookup_nested_field.
	* cp-spew.c (yylex) [IDENTIFIER case]: Call lookup_name with -2
	instead of -1.

	* cp-decl2.c (grokclassfn): If there's no IDENTIFIER_TYPE_VALUE (it
	could have gotten blown away by poplevel_class), use ctype to build
	the overload name.

	* cp-call.c (convert_harshness): Avoid dereferencing a null PARM,
	which can be passed in by convert_harshness itself.

	Mon Jan 11 12:25:51 1993  Brendan Kehoe  (brendan@cygnus.com)

	* cp-tree.h (VTABLE_NAME_P, VBASE_NAME_P): Reverse order, so they'll
	go for [1..3], to avoid referencing beyond the bounds of a name.

	* cp-xref.c (fctname): Delete extern decl of `declname'.

	* cp-type2.c (build_scoped_ref): Pass the nodes themselves down into
	error_not_base_type, not the strings, since it'll peel off the decl
	name and type name of them itself.

	* cp-class.c (build_vbase_path): flag_assume_nonnull_objects is an
	int, not a tree.

	* dbxout.c (dbxout_type_methods): Only emit warning about dbx info
	for templates when WARN_TEMPLATE_DEBUGGING is set.  Only reference
	the var WARN_TEMPLATE_DEBUGGING if we've got HAVE_TEMPLATES defined.
	* cp-tree.h (HAVE_TEMPLATES): Define.
	* cp-decl2.c (lang_decode_option): Set WARN_TEMPLATE_DEBUGGING when
	given -Wall.
	* flags.h (warn_template_debugging): Add extern decl.
	* toplev.c (lang_options): Add -Wtemplate-debugging.

	* cp-decl.c (make_temporary_for_reference): Call make_decl_rtl with
	a NULL_PTR, not 0.
	(finish_decl): Likewise.
	(grokfndecl): With a NULL_PTR, not a NULL_TREE.

	Fri Jan  8 19:43:52 1993  Brendan Kehoe  (brendan@lisa.cygnus.com)

	* cp-search.c (get_binfo): Use obstack_ptr_grow instead of
	obstack_int_grow, casting the int to a void*.  When retrieving it,
	cast the result of dereferencing SEARCH_STACK->FIRST as an int.
	(get_base_distance): Likewise.
	(breadth_first_search): Likewise.

Fri Jan 22 15:09:42 1993  Torbjorn Granlund  (tege@hal.gnu.ai.mit.edu)

	* pyr.h (SIZE_TYPE): Define.
	(NO_DOLLAR_IN_LABEL): Define.

Fri Jan 22 12:19:47 1993  Jeffrey A. Law  (law@schirf.cs.utah.edu)

	* pa.c (secondary_reload_class): Simplify.

Fri Jan 22 07:57:57 1993  Richard Kenner  (kenner@vlsi1.ultra.nyu)

	* collect2.c (our_file_name): New variable.
	(find_a_file): Ignore filename equal to that in our_file_name.
	(main): Initialize our_file_name.

	* expr.c (emit_library_call): Correct mis-applied patch.

Thu Jan 21 11:36:04 1993  Jeffrey A. Law  (law@schirf.cs.utah.edu)

	* pa.h (REG_CLASSES): Delete GENERAL_OR_FP_OR_SNAKE_FP register
	class, it's not needed anymore.  Delete all references.  'Z'
	register class is now "ALL_REGS".
	* pa.c (emit_move_sequence): Handle secondary reloads for SAR.

Tue Jan 19 20:08:01 1993  Jim Wilson  (wilson@wookumz.gnu.ai.mit.edu)

	From Torbjorn Granlund (tege@sics.se):
	* i960.c (cmplpower2_operand): New function.
	* i960.md (addsi3): Clean up condition for when to use subo.
	(umulsidi3): New pattern.
	(non-canonical nand, nor): Remove paterns.
	(clrbit, notbit static bit): New patterns.
	(setbit, clrbit, notbit dynamic bit): New patterns.
	(setbit static bit non-canonical): Remove pattern.
	(muldf3, mulsf3, multf3): Add % to operand1.
	(test recognizers): Use TAB efter mnemonic.

	* reorg.c (update_reg_dead_notes): New function.
	(fill_simple_delay_slots): Call new function when moving
	instruction forward into a delay slot.

	* sched.c (sched_analyze_1, sched_analyze_2): Ifdef out code added
	for handling psuedo register equivalents that was added Dec 31 1992.

	From Steve Chamberlain (sac@cygnus.com):
	* libgcc1.c (__eqdf2, __nedf2, __gtdf2, __gedf2, __ltdf2, __ledf2,
	__eqsf2, __nesf2, __gtsf2, __gesf2, __ltsf2, __lesf2):  comparison
	result type is now word_mode.
	* libgcc2.c (cmpdi2, ucmpdi2): comparison result type is now
	word_mode.
	* optabs.c (emit_cmp_insn, emit_float_lib_cmp): libcall comparisons
	return word_mode.

Tue Jan 19 15:28:59 1993  James Van Artsdalen  (james at bigtex.cactus.org)

	* function.c (fixup_var_refs_1): Set INSN_CODE to -1 before seeing
	if new insn form is recognized.

	* reg-stack.c (all functions): Use NULL_RTX instead of 0 for rtx
	comparisons.

	(emit_pop_insn): Emit insn with mode QImode: insn contains
	stack-regs.

	(emit_hard_swap_insn): Delete.
	(emit_swap_insn): Merge with emit_hard_swap_insn.
	Delete WHEN arg and change all callers.
	If previous insn was a push from REG, omit swap.
	If previous insn wrote reg-stack top to REG, omit swap.
	Emit swap insn with mode QImode: insn contains stack-regs.
	Emit swap insn after previous float insn, instead of before this
	one.

	(swap_rtx_condition): New function.
	(compare_for_stack_reg): If op 0 of COMPARE is not a stack reg,
	exchange ops 0 and 1 and swap cc0 user condition.

	* i386.h (PREFERRED_RELOAD_CLASS): Narrow ALL_REGS to
	GENERAL_REGS.
	(PREFERRED_OUTPUT_RELOAD_CLASS): New macro.  Narrow ALL_REGS to
	GENERAL_REGS.
	(SECONDARY_MEMORY_NEEDED): New macro.

	* i386.md (cmpdf_cc,cmpsf_cc): Allow first operand to be a MEM.
	Don't allow both operands to be MEM.
	(float addM3,subM3,divM3,mulM3 recognizers): Don't allow either
	operand to be a constant.

	(all float patterns, FLOAT_EXTEND operands): Don't allow
	GENERAL_REGS for float_extended operand.
	(all float patterns, FLOAT operands): Change constraints to get
	better register classification.
	(fix_truncMN2 patterns): Likewise.
	(floatMN2 patterns): Likewise.

Tue Jan 19 15:51:16 1993  Torbjorn Granlund  (tege@hal.gnu.ai.mit.edu)

	* pa.md (define_function_unit for memory): Memory is pipelined.

	* pa.md (sCC patterns): Use %char notation instead of nested
	if stmts.
	(branch matchers): Likewise.
	(incscc, negscc): Likewise.  Add ? constraint for 3-insn
	alternative.
	(incscc): Split into `incscc' and `decscc' to make this really
	match.
	(incscc/decscc special cases): New patterns using carry bit.
	* pa.c (print_operand): Handle 'S' and 'B' for conditions.
	Handle 'I' for printing 'i' when CONST_INT.
	Handle 'k' for ones-complement of CONST_INT.
	(incscc_operator): Remove.

	* pa.md (many patterns): Use canonical address format.  Use %r
	register notation.  Use GEN_INT.

	* pa.md (main move SF recognizer): Allow 0 for copying to
	general register.

	* pa.md (zero_extendhisi2): Remove DEFINE_EXPAND.
	(zero_extendqihi2): Likewise.
	(zero_extendqisi2): Likewise.
	(comment before sign extension): Remove the lie.

	* pa.h (REG_CLASS_FROM_LETTER): Remove partly incorrect PA
	documentation.

Tue Jan 19 09:22:06 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* fold-const.c (non_lvalue): Result must not be null ptr constant.
	(omit_one_operand): Use non_lvalue.
	(fold, case COMPOUND_EXPR): Use non_lvalue if value is 0.
	* c-typeck.c (build_compound_expr): Use non_lvalue if value is 0.

Tue Jan 19 08:29:16 1993  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* rs6000.c (print_operand, case 'k'): New case.
	* rs6000.md (plus of gtu patterns): Add case to handle immediates.

	* rs6000.c (output_epilog): Only restore the cr's that we actually
	used; previously, we saved and restored all of them.

	* combine.c (combine_instructions): Clear reg_last_set_label.

Tue Jan 19 01:16:45 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* flow.c (find_basic_blocks): Don't mark labels in nonlocal_label_list
	that were deleted due to having no references.

Mon Jan 18 21:02:22 1993  H.J. Lu  (hlu@yardbird.eecs.wsu.edu)

	* configure (--local-prefix=DIR): new flag sets $local_prefix.
	The default is /usr/local.  Put it into Makefile.

	* Makefile.in (local_prefix): new prefix, the default is /usr/local.
	(cccp.o): change LOCAL_INCLUDE_DIR to $(local_prefix)/include.

Mon Jan 18 15:29:46 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* objc-act.c, objc-act.h: Renamed from objc-actions.*.
	* objc-act.c: Include objc-act.h.
	* Makefile.in: Targets and deps changed.

	* objc-actions.c (encode_method_def): Null-terminate encoding.
	(build_ivar_list_initializer): Null-terminate type encoding.

	* cccp.c (include_defaults): Do use GCC_INCLUDE_DIR for cross compiler.
	Move TOOL_INCLUDE_DIR later if cross.

Mon Jan 18 13:39:32 1993  Jim Wilson  (wilson@wookumz.gnu.ai.mit.edu)

	* expr.c (emit_library_call): Handle OUTGOING_REG_PARM_STACK_SPACE.
	Use NULL_TREE instead of (tree) 0.

	* expr.c (emit_move_insn, expand_expr): Fix typos in comments.

	* cccp.c (initialize_builtins): Add uses of new macros
	NO_BUILTIN_SIZE_TYPE and NO_BUILTIN_PTRDIFF_TYPE.

	* i960.h (ROUND): Change macro name to ROUND_PARM.
	* i960.c (i960_function_arg_advance, i960_function_arg): Likewise.

	* stor-layout.c (make_signed_type): Consistently use
	HOST_BITS_PER_WIDE_INT.  Correct minor formatting problems.
	(fixup_signed_type): Use HOST_BITS_PER_WIDE_INT and HOST_WIDE_INT
	like make_signed_type does.
	(fixup_unsigned_type): Correct minor formatting problem.

	* x-linus (LANGUAGES): Delete.

Mon Jan 18 08:13:34 1993  James Van Artsdalen  (james at bigtex.cactus.org)

	* Makefile.in (stmp-headers): Delete target files before copying
	to them.

Mon Jan 18 06:23:35 1993  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* collect2.c (choose_temp_base, main): Fix "off by one" errors in
	sizes of allocated strings.

Mon Jan 18 00:32:20 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* gcc.c (process_command): Fix typo in last change.

Sun Jan 17 13:09:03 1993  Jeffrey A. Law  (law@schirf.cs.utah.edu)

	* pa.h (FP_REG_CLASS_P): New macro.
	(REGISTER_MOVE_COST): Use FP_REG_CLASS_P to simplify.  Make moves
	from SAR to expensive that they should never happen.

Sun Jan 17 10:38:38 1993  Torbjorn Granlund  (tege@hal.gnu.ai.mit.edu)

	* pa.c (emit_move_sequence): Fix spacing.
	(compute_zdepi_operands): Fix header comment.
	(many functions): Use %%r register syntax.  Use canonical (0,%rN)
	address format.
	(output_function_prologue): No need to test frame_pointer_needed
	in else clause of `if (frame_pointer_needed)'.
	(output_function_prologue): Test boolean merge_sp_adjust_with_store
	for zeroness, not for equality with 1.
	(fmpyaddoperands): Use new variable mode for mode of operands[0].
	(fmpysuboperands): Likewise.

Fri Jan 15 16:42:30 1993  Jeffrey A. Law  (law@schirf.cs.utah.edu)

	* pa.h (LEGITIMIZE_ADDRESS): Handle (plus (mult (X) (Y)) (Z))
	when Y is 2, 4, or 8 specially.
	* pa.c (shadd_constant_p): New function.

	* integrate.c (FIXED_BASE_PLUS_P): Fix typo.

	* loop.c (move_movables): Clear INSN_CODE for each insn as
	we perform register replacements.
	(strength_reduce): Likewise.

Fri Jan 15 16:02:07 1993  Brendan Kehoe  (brendan@mole.gnu.ai.mit.edu)

	* final.c (alter_cond): Undo previous change.

Thu Jan 14 22:09:40 1993  Ian Lance Taylor  (ian@cygnus.com)

	* Makefile.in (stmp-headers): Avoid problems with relative
	$(srcdir) when installing syslimits.h.

Thu Jan 14 19:20:01 1993  Brendan Kehoe  (brendan@lisa.cygnus.com)

	* c-decl.c (c_decode_option): Set WARN_UNINITIALIZED to 2 with
	-Wall, being careful to preserve it if it's already set.
	* cp-decl2.c (lang_decode_option): Likewise.
	* toplev.c (main): Warn about using -Wuninitialized without -O.

	* cccp.c (main): Trim down to the basename of what's to go in
	PROGNAME.

	* gcc.c (process_command): Only accept input files which exist and
	can be read; prevent link phase if an input file was rejected.  Be
	careful not to check for `-l' directives.
	(error_count): Make into a static global variable.

Thu Jan 14 18:19:35 1993  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* t-mips, t-ultrix, t-osfrose: Change `config/' to `config/mips/'.

Thu Jan 14 16:55:11 1993  Jeffrey A. Law  (law@schirf.cs.utah.edu)

	* pa.h (CONDITIONAL_REGISTER_USAGE): Do not make %r27 a global_reg.

	* pa.c (output_function_prologue): Combine stack adjustment and
	first GR save when reasonable to do so.
	(output_function_epilogue): Combine stack adjustment and first
	GR restore when reasonable to do so.  Avoid load/use stall for 
	RP restore in common cases.

	* pa.h (LEGITIMIZE_ADDRESS): Rework to create REG and REG+D 
	addresses instead of REG+REG addresses.

Thu Jan 14 15:45:50 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* objc/core.c (initialize_dispatch_tables): Create an entry in RECORD
	for each class used in a given file, not just one.

Thu Jan 14 12:00:35 1993  Ian Lance Taylor  (ian@cygnus.com)

	* Makefile.in (INSTALL_HEADERS_DIR, FLOAT_H, CROSS_FLOAT_H): New
	variables.
	(INSTALLED_H): Removed.
	(float.h): Copy from $(FLOAT_H).
	(float.h-nat, float.h-cross): New targets.
	(stmp-headers, stmp-fixincludes): New targets to build fixed
	include files in build directory.
	(all.cross, rest.encap): Depend on stmp-headers.
	(clean): Remove the include directory and stmp-*.
	(install-normal): Renamed from install-native.
	(install-cross): Removed.
	(INSTALL_TARGET): Changed to install-normal from install-native.
	(install-headers): Install from build directory.
	(install-include-dir, install-headers-tar,install-headers-cpio,
	install-assert-h): New targets.
	(install-float-h, install-limits-h, install-common-headers,
	install-fixincludes): Removed.
	* cross-make (INSTALL_TARGET): Don't override.
	(FLOAT_H): New override, set to $(CROSS_FLOAT_H).

Thu Jan 14 14:17:05 1993  Jim Wilson  (wilson@wookumz.gnu.ai.mit.edu)

	* libgcc2.c: Correct typo in comment.

	* fixinc.sco, fixinc.svr4 (egrep and sed loop): Don't print
	messages about files that need no change.

	* sparc.md (muldf+1, muldf+2):  Add patterns for fsmuld and fdmulq.

	* sparc.c: Clarify numerous *_operand comments.
	(SPARC_STACK_ALIGN): Delete.
	(sparc_frw_output_function_epilogue): Delete unused variable
	load_only_r15.
	(sparc_frw_epilogue_delay_slots): Delete r15/fmask test.	
	* sparc.md: Document sparclite integer multiply cycle times.
	(movdf, !TARGET_FPU): Remove tests for floating point registers.
	(divsi3, udivsi3): Correct length attribute.
	(ffssi2): Define for sparclite.
	* sparc.h (CPP_SPEC): Add -mfrw support.
	(OVERRIDE_OPTIONS): Define.  Can't omit frame pointer or do pic
	when profiling.
	(REG_USED_SO_FAR): Delete.
	(CONST_COSTS): Give SMALL_INT constants cost of 0.  Make UDIV,
	DIV, MOD, UMOD more expensive.  Make FIX same cost as FLOAT.
	(TARGET_FRW): Define.
	(TARGET_DEFAULTS): Add -mfrw flag.
	(INITIAL_FRAME_POINTER_OFFSET): Add -mfrw support.
	(BASE_OUTGOING_VALUE_REG, BASE_INCOMING_ARG_REG): Likewise.
	(FUNCTION_PROLOGUE, FUNCTION_EPILOGUE): Likewise.
	(DELAY_SLOTS_FOR_EPILOGUE, ELIGIBLE_FOR_EPILOGUE_DELAY): Likewise.
	(EXPAND_BUILTIN_SAVEREGS): Likewise.

	* expr.c (do_tablejump): Pass 1 for unsigned flag to emit_cmp_insn.

Thu Jan 14 14:43:15 1993  Torbjorn Granlund  (tege@sics.se)

	* pa.c (move_operand): Allow all CONST_INTs that can be moved to
	general registers with one insn.
	* pa.c (pre_cint_operand): New predicate for predecrementing
	ldwm/stwm insns.
	* pa.c (zdepi_cint_p): New function.
	* pa.c (depi_cint_operand): Remove.
	* pa.c (and_mask_p): New name for consec_zeros_p.  All callers
	changed.
	* pa.c (srcsi_operand): Removed.
	* pa.c: Use INT_14_BITS instead of synonym SMALL_INT.
	* pa.c (emit_move_sequence): Clean up CONST_INT case.
	* pa.c (compute_zdepi_operands): New name for
	compute_xdepi_operands_from_integer.  Change second parm to return
	plain integers, was RTXes.
	* pa.c (print_operand): Handle 'Z' for 'zdepi' source used to move
	CONST_INT.

	* pa.h (CONST_OK_FOR_LETTER_P): Change meaning of 'K'.  Add new
	alternative 'N'.  Use VAL_*_BITS_P macros when possible.
	* pa.h (LEGITIMATE_CONSTANT_P) Fix comment.
	* pa.h (FITS_14_BITS): Remove.
	* pa.h (SMALL_INT): Remove.

	* pa.md (move patterns): Reorganize pattern order.  Cleanup.  Merge
	CONST_INT patterns into main patterns for SImode, HImode, QImode.
	Add patterns to recognize predecrement cases in SImode, HImode, 
	QImode.  Remove 'y' constraint from SImode recognizer.
	(main HImode, QImode recognizers): Handle SAR move from greg.
	Change constraints to match the SImode pattern.
	* pa.md (cmov): Move near other conditional patterns.
	* pa.md: Replace all occurences of srcsi_operand with move_operand.
	Replace `ldo X(0),d' with `ldi X,d'.
	* pa.md (rotlsi3): Remove SET_ATTRs.
	* pa.md (rotrsi3): Likewise.

Thu Jan 14 13:33:55 1993  Jim Wilson  (wilson@wookumz.gnu.ai.mit.edu)

	* rtl.c (copy_rtx): A MEM with constant address is not sharable.
	Undo Dec 27 change.

Thu Jan 14 06:45:51 1993  James Van Artsdalen  (jrv@goldman.gnu.ai.mit.edu)

	* i386.md (cmpstr patterns): Fix mode mismatch in SET.

Wed Jan 13 16:05:07 1993  Ian Lance Taylor  (ian@cygnus.com)

	* configure: Precompute version in generated Makefile.

	* Makefile.in: (CROSS_GCC_CFLAGS, CROSS_TOOLS, REAL_LD_NAME,
	install-cross-tools): Removed.
	* cross-make (CROSS_GCC_CFLAGS, CROSS_TOOLS): Removed.
	(SYSTEM_HEADER_DIR): Set to $(tooldir)/include.
	* gcc.c: Use TOOLDIR_BASE_PREFIX, not TOOLDIR_PREFIX.

Wed Jan 13 12:04:21 1993  Michael Meissner  (meissner@osf.org)

	* libgcc2.c (_ffsdi2): Use the correct names for structure
	elements of type DIunion.  Return the correctly typed value.

	* mips-tdump.c (print_file_desc): Correctly scale the rfd pointer.
	Patch from ian@cygnus.com.

Wed Jan 13 10:04:26 1993  Jeffrey A. Law  (law@schirf.cs.utah.edu)

	* pa.h (ASM_OUTPUT_INTERNAL_LABEL): Fix typo.

Wed Jan 13 03:05:08 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* fixinc.svr4 (rpc/types.h): Change const extern to extern const.

	* expr.c (expand_increment): Handle all preincrements by building
	arithmetic and calling expand_assignment.

	* stmt.c (expand_asm_operands): For clobbering memory,
	generate (MEM (SCRATCH)) inside the CLOBBER.

	* cccp.c (include_defaults):
	Put GCC_INCLUDE_DIR just before the system dirs whose files are fixed.

	* Makefile.in (risky-stage1, etc): Use $(GCC_PARTS) as what to mv.

Tue Jan 12 23:24:30 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* stor-layout.c (variable_size): Change back to NULL_PTR.

Tue Jan 12 18:59:01 1993  James Van Artsdalen  (james at bigtex.cactus.org)

	* reload1.c (reload): Clear reload_in_progress even if reloading
	fails.

Tue Jan 12 18:32:01 1993  Brendan Kehoe  (brendan@lisa.cygnus.com)

	* calls.c (emit_call_1): Pass a NULL_RTX into emit_call_insn for
	missing last arg.

	* stor-layout.c (variable_size): Call expand_expr with a NULL_RTX,
	not a NULL_PTR.

	* integrate.c (const_equiv): Delete decl, since it's never defined.
	(fold_out_const_cc0): Likewise.
	* loop.c (delete_insn_forces): Likewise.
	* final.c (alter_cond): Delete decl, since it's never defined.

	* fold-const.c (fold): Only call force_fit_type with one arg.

	* expr.c (group_insns): Make void, since it never returns an rtx.

	* emit-rtl.c (emit_jump_insn_before): Call make_jump_insn_raw with
	only one argument.
	(emit_jump_insn_after): Likewise.
	(emit_jump_insn): Likewise.

	* dbxout.c (dbxout_type) [case FILE_TYPE, SET_TYPE]: Call with
	missing third arg as 0.

	* cse.c (fold_rtx): Call itself with missing arg INSN as NULL_RTX.

Tue Jan 12 17:53:13 1993  Jim Wilson  (wilson@wookumz.gnu.ai.mit.edu)

	From Fred Fish:
	* fixinc.svr4 (stat.h):  Don't depend upon specific formal
	parameter names when locating static functions to convert
	to prototype form.  Also be more selective about what
	strings to prepend underbars to during renaming of formal
	parameters and local variables in static functions.

	* cccp.c (main): Set signal handler for SIGPIPE.
	(pipe_closed): New function, to handle SIGPIPE.

Tue Jan 12 17:48:13 1993  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* expr.c (compare_from_rtx): Allow simplify_relational_operation to
	fail.

Tue Jan 12 02:52:50 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* optabs.c (init_optabs): Use plain `ffs' for SImode ffs_optab libcall.

	* Makefile.in (LIB2FUNCS): Add _ffsdi2.
	* libgcc2.c (__ffsdi2): New function.

	* c-decl.c (init_decl_processing): Declare ffs as builtin.

	* fixincludes (egrep and sed loop): Don't print messages about
	files that need no change.

Mon Jan 11 17:22:16 1993  Jim Wilson  (wilson@wookumz.gnu.ai.mit.edu)

	* sparc.c (eligible_for_epilogue_delay): Delete unused variable
	`this_function_name'.
	(output_fp_move_double): Delete unused var `addr'.
	(output_fp_move_quad): Likewise.
	(fregs_ever_live): Delete unused static var.
	(output_function_epilogue): Delete `n_fregs' and `i'.
	(sparc_frw_output_function_prologue): Delete `regno'.
	(sparc_frw_output_function_epilogue): Delete `load_nop'.

	* reload1.c (reload): Delete unused variable inc_groups.

	* sparc.h (TARGET_SWITCHES): Add no-fpu and hard-float.
	(CONDITIONAL_REGISTER_USAGE): Define for ! TARGET_FPU.
	(BASE_RETURN_VALUE_REG): Use reg 8 when ! TARGET_FPU.
	(BASE_OUTGOING_VALUE_REG): Use reg 24 when ! TARGET_FPU.
	* sparc.md (*): Make all fp patterns conditional on TARGET_FPU.
	(movtf, movdf, movsf): Add !TARGET_FPU versions.
	(sfmode return): Add pattern for when !TARGET_FPU.
	(movsi+2, movsf+1): Use %@ instead of %%fp.
	(mulsidi3, umulsidi3): Rewrite, to avoid extending constants.

	* fixincludes: Do not consider //* to be a C++ comment which needs
	to be fixed.

Mon Jan 11 15:03:41 1993  Jeffrey A. Law  (law@schirf.cs.utah.edu)

	* pa.h (REG_OK_FOR_BASE_P, REG_OK_FOR_INDEX_P): Fix typos.

Mon Jan 11 12:41:06 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* config/xm-svr4.h (sys_siglist): New macro.

Sun Jan 10 18:16:49 1993  James Van Artsdalen  (james at bigtex.cactus.org)

	* i386.md (extendsidi2,zero_extendsidi2): New patterns.
	(adddi3,subdi3): Don't emit code for low part if known to be zero.

	* i386/xm-sysv4.h (alloca): Delete - already defined in xm-i386.h.

	* i386/xm-aix.h,i386/xm-sun.h: Include i386/xm-i386.h.
	Remove redundant defines.

Sun Jan 10 18:00:17 1993  Jeffrey A. Law  (law@schirf.cs.utah.edu)

	* pa.h (GENERAL_OR_FP_OR_SNAKE_FP_REGS): New register class.
	(LEGITIMIZE_ADDRESS): No longer show DP relocation.  Simplify.
	* pa.md (reload_insi, reload_outsi): Use new "Z" constraint instead
	of "z" constraint.
	(load HIGH patterns): Rewrite to not show DP relocation.  
	* pa.c (output_global_address): Handle (high (const (plus ...))).
	(secondary_reload_class): If TARGET_KERNEL, then loading a 
	symbolic address, or the high part of a symbolic address requires
	%r1 as a secondary reload register.
	(emit_move_sequence, SYMBOL_REF case): If TARGET_KERNEL, then handle 
	secondary reload created for a symbolic (high (const (plus ...))).  
	No longer show DP relocation; read_only and normal operands emit the
	same RTL now.  
	Emit the same RTL before and after reload, only change how the 
	scratch/temporary register is chosen.

Sun Jan 10 11:42:12 1993  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* combine.c (make_extraction): Don't use POS < 0 as a flag
	that POS_RTX is to be used; instead use POS_RTX unless it is
	nonzero.  If POS_RTX is a constant, set POS and clear POS_RTX.
	(make_compound_operation, make_field_assignment): Pass 0 for POS
	instead of -1 when POS_RTX is nonzero.

Sat Jan  9 01:34:27 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* reload1.c (reload_as_needed): Test for whether to call
	forget_old_reloads_1 for a REG_INC note was backwards.

	* config/i386/xm-i386.h (alloca): Undef before defining.

	* config/i860/sysv3.h (ASM_OUTPUT_LOCAL): New override.

	* gcc.c (lookup_compiler): Fix special code for `-' suffix.

	* c-lex.c (yylex): Change warning msg when decimal const is unsigned.

	* Makefile.in (bootstrap*): Pass BOOT_LDFLAGS down as LDFLAGS.

	* Makefile.in (install-dir): Don't create gcc-lib/include.

	* objc-actions.c (init_module_descriptor):
	Use size_in_bytes to get size of `struct objc_module'.

	* c-decl.c (init_decl_processing): Use unsigned_intQI_type_node,
	not unsigned_char_..., as index type for ..._array_type_node.

	* toplev.c (really_sorry): Use progname in error message, not c++.

	* optabs.c (expand_binop): For complex mult, compute res
	in each alternative, not before.

	* Makefile.in (bootstrap): Pass along CC and libdir in first compile.

	* c-decl.c (pushdecl): Avoid multiple extern decl mismatch warnings
	when previous decl is built-in.

	* cccp.c (macroexpand): Before concatenated empty rest arg,
	do copy constant chars, but delete last run of nonwhitespace chars.
	(rescan): Handle Newline-Hyphen in expand_to_temp_buffer
	as well as when scanning a macro body.

Sat Jan  9 09:11:25 1993  Michael Tiemann  (tiemann@rtl.cygnus.com)

	* varasm.c (output_constant): Handle CHAR_TYPE and BOOLEAN_TYPE like
	INTEGER_TYPE.

Sat Jan  9 08:06:42 1993  Michael Meissner  (meissner@osf.org)

	* cccp.c (main): If we are creating a new dependency file with -MD
	or -MMD, use "w" fopen mode instead of "a".

Fri Jan  8 20:58:12 1993  Brendan Kehoe  (brendan@mole.gnu.ai.mit.edu)

	Cygnus<->FSF merge.
	Thu Jan  7 18:16:05 1993  Brendan Kehoe  (brendan@lisa.cygnus.com)

	* cp-parse.y (template_type): Avoid dereferencing an error_mark.

	Wed Jan  6 17:43:23 1993  Brendan Kehoe  (brendan@lisa.cygnus.com)

	* cp-decl.c (init_decl_processing): Make flag_no_builtin avoid
	definitions of builtin fns memcpy, memcmp, strcmp, strcpy, strlen,
	sin, and cos.  (Add sin and cos.)
	(flag_no_builtin): Add extern decl.

	* cp-decl.c (current_local_enum): New variable.
	(start_enum): Set TREE_ADDRESSABLE on the tag here, and clear
	current_local_enum.
	(build_enumerator): Build the field decl here, rather than in
	grok_enum_decls; set its TREE_CHAIN to the current_local_enum.
	(grok_enum_decls): Chain down, setting the type.

	Tue Jan  5 22:09:18 1993  Brendan Kehoe  (brendan@lisa.cygnus.com)

	* cp-pt.c (tsubst): Properly demangle a method's name if it's for an
	operator.

	Tue Jan  5 15:29:40 1993  Brendan Kehoe  (brendan@lisa.cygnus.com)

	* cp-method.c (build_opfncall): Make postfix/prefix ++/-- work by
	setting the second arg to 0 when using postfix ++/--.

	* cp-decl.c (grokdeclarator): Forbid declaring operator= from being
	declared as a non-member (or friend) function.

	Tue Jan  5 14:26:38 1993  Mike Stump  (mrs@cygnus.com)

	Jan  5 14:09:08 1993  Paul Eggert  (eggert@twinsun.com)

	* cp-lex.c ():  Propagate a change from c-lex.c.

	Tue Jan  5 13:27:05 1993  Mike Stump  (mrs@cygnus.com)

	Sep 14 17:48:27 1992  Paul Eggert  (eggert@twinsun.com)

	* cp-lex.c (real_yylex): For floats, use REAL_VALUES_LESS to
	distinguish underflow from overflow.  Delete special case for 0.0.

	Mon Jan  4 15:26:47 1993  Brendan Kehoe  (brendan@lisa.cygnus.com)

	* cp-typeck.c (build_array_ref): Convert the index from a reference
	before doing any appropriate type conversions.
	 
	Wed Dec 30 15:36:18 1992  Per Bothner  (bothner@cygnus.com)

	* convert.c:  New file.  Contains the common utility routines
	from c-convert.c and cp-cvt.c (such as convert_to_integer).
	* convert.h:  New file: declarations exported from convert.c.
	* c-convert.c, cp-cvt.c:  Correspondingly reduced.
	* cp-cvt.c (cp_convert_to_pointer):  New function, with the
	extra hair beyond that provided by the C convert_to_pointer.
	* Makefile.in (OBJS):  Add convert.o.
	* cp-typeck.c (build_binary_op), cp-tree.h:  Add extra convert_p
	parameter, for consistency with the C version (so we can make
	convert_to_integer independent of C or C++).
	* cp-cvt.c, cp-decl.c, cp-decl2.c, cp-except.c, cp-init.c,
	cp-typeck.c, cp-parse.y:  Fix calls to build_binary_op to pass
	the new convert_p parameter (i.e. 1).

	Fri Dec 18 19:19:28 1992  Brendan Kehoe  (brendan@lisa.cygnus.com)

	* cp-method.c (build_overload_nested_name): Use DECL_NAME instead of
	DECL_ASSEMBLER_NAME, since pushtag now mangles together
	DECL_ASSEMBLER_NAME.  This will make us emit `Q21D1B', not `Q221D1B'.

	* cp-decl2.c (grokclassfn): Try using the local value for a nested
	type if the IDENTIFIER_TYPE_VALUE isn't there.

	Wed Dec 16 18:18:43 1992  Brendan Kehoe  (brendan@lisa.cygnus.com)

        * cp-typeck.c (build_unary_op): Set TREE_CONSTANT on the address of
        a function if it's static or external (i.e., staticp likes it).
	 
	Wed Dec 16 16:09:37 1992  Mike Stump  (mrs@cygnus.com)

	* cp-decl.c (sigsegv, init_decl_processing): Give users the line
	number and source filename on code that makes the back-end call
	abort.

	Tue Dec 15 16:50:45 1992  Brendan Kehoe  (brendan@lisa.cygnus.com)

	* cp-tree.h (CLASSTYPE_NAMES): Deleted.

	* cp-init.c (build_offset_ref): When getting ready to give an error
	about something not being a member or operator, only call
	operator_name_string when it is indeed an operator.

	* cp-decl2.c (bad_specifiers): New function.
	* cp-tree.h (bad_specifiers): Add prototype.
	* cp-decl.c (grokdeclarator): Use it in places where we had
	replicated code.

	Tue Dec 15 04:05:54 1992  Mike Stump  (mrs@cygnus.com)

	* cp-lex.c (UNSET_RESERVED_WORD): Update from c-lex.c.

	Tue Dec 15 01:21:44 1992  Brendan Kehoe  (brendan@lisa.cygnus.com)

	* cp-lex.c (real_yylex): Convert invisible initialized char array
	vars to string constants.

	Mon Dec 14 11:38:10 1992  Brendan Kehoe  (brendan@lisa.cygnus.com)

	* Makefile.in: Fix a lot of dependencies on cp-lex.h and other
	headers for cp-*.o targets.

	* cp-search.c (get_first_matching_virtual): Use warning_with_decl,
	not error_with_decl, inside code that's only ever reached with
	-Woverloaded-virtual.

	* cp-typeck.c (c_expand_return): When building the INIT_EXPR, clear
	out the context if it's an ERROR_MARK so the back-end won't die later.

	* cp-type2.c (my_friendly_abort): Don't say anything like "please
	fix above errors", just exit quietly.

	* cp-lex.h (enum rid): Reordered for improved speed in grokdeclarator
	when it does its linear search.  RID_WCHAR is no longer in the
	search path, since it's found by hand (as are RID_INT and RID_CHAR).
	(RID_FIRST_MODIFIER): Start at RID_EXTERN now.

	* cp-parse.y (overloaddef): Warn that using `overload' is an
	anachronism.

	Wed Dec  9 08:27:13 1992  Niklas Hallqvist  (niklas at della.appli.se)

	* cp-decl.c (init_decl_processing): Make sure the "unknown type"
	typedecl gets ignored by the debuginfo generators.

	Sun Dec 13 02:38:43 1992  Brendan Kehoe  (brendan@cygnus.com)

	* cp-search.c (lookup_nested_field): Check for assignment to members
	of an enclosing class only when looking at a member, not at other
	things (like nested types).

	* cp-pt.c (type_unification): Only check that ARGS is a TREE_LIST if
	it's non-null. 

	These four are from Niklas Hallqvist:

	* cp-search.c (compute_visibility): Use the main variant when
	testing if a member function belongs in the current class.

	* cp-call.c (build_method_call): Don't look for constructors
	called by initialization inside class methods in the classes'
	bases (as opposed to inherited methods).

	* cp-typeck.c (convert_for_initialization): In the case of
	templates, make sure build_method_call knows which instantiation
	of the class template we're initializing an object of.

	* cp-decl.c (grokdeclarator): Instead of an assert, return a
	NULL_TREE if the return_type's not return_ctor.

	Sat Dec 12 23:52:25 1992  Brendan Kehoe  (brendan@lisa.cygnus.com)

	* cp-dem.c (cplus_demangle): Recognize 'S' for signed char.
	(do_cuv_prefix): Print out "signed" for it.

	Fri Dec 11 19:36:36 1992  Brendan Kehoe  (brendan@lisa.cygnus.com)

	* cp-cvt.c (convert_to_reference): Fix a typo about when to return
	the result of a type conversion.

	Tue Dec  8 20:05:25 1992  Mike Stump  (mrs@cygnus.com)

	* cp-cvt.c (convert_to_reference): If a conversion can be found via
	a constructor, then use it.

	Fri Dec  4 13:53:01 1992  Brendan Kehoe  (brendan@lisa.cygnus.com)

	* cp-lex.c (init_lex): Delete inits for CARD_EXPR and SET_LE_EXPR,
	since we never actually use them.

	Thu Dec  3 19:20:14 1992  Brendan Kehoe  (brendan@lisa.cygnus.com)

	* cp-decl.c: Include sys/types.h for systems that need things for
	signal.h.

	Wed Dec  2 15:51:34 1992  Mike Stump  (mrs@cygnus.com)

	* cp-call.c (build_method_call): Don't call abort for pure virtual
	methods, instead, call the user-defined method.  Addresses of pure
	virtual methods are probably still wrong.

	Wed Dec  2 14:44:41 1992  Brendan Kehoe  (brendan@lisa.cygnus.com)

	* cp-call.c (convert_harshness): If parm's null for a reference (as
	can be passed in), return 0.

	Tue Dec  1 18:05:20 1992  Brendan Kehoe  (brendan@lisa.cygnus.com)

	* cp-decl.c (grokdeclarator): Make member initialization be a
	warning, not an error.  Only issue it if not -pedantic, since
	grokfield will issue an error when pedantic.  Only warn about
	constant members being initialized if `-ansi' is being used.
	(finish_decl): Only complain about uninitialized const's that aren't
	members when acting -pedantic, since we'll have already issued the
	error about initializing a field.

	* cp-type2.c (build_functional_cast): Revert change of Nov 2,
	concerning clearing the TREE_VALUE of a default parameter.

	Tue Dec  1 11:09:50 1992  Brendan Kehoe  (brendan@lisa.cygnus.com)

	* cp-call.c (build_method_call): When looking for a default arg
	initialized by a ctor, be careful of a null ref w/ operand 1.

	* cp-method.c (icat): Handle an argument of `1' first, since it's
	the most common case. 

	Tue Dec  1 02:36:28 1992  Mike Stump  (mrs@cygnus.com)

	* cp-search.c (get_first_matching_virtual): Only set the
	DECL_CONTEXT if the new context is a an unambiguous parent of the
	previous context.

	Tue Dec  1 02:20:32 1992  Mike Stump  (mrs@cygnus.com)

	Wed Nov 25 18:25:06 1992  Jim Wilson  (wilson@sphagnum.cygnus.com)

	* cp-decl.c (pushdecl): Clear DECL_CONTEXT for local declarations.

	Mon Nov 30 15:36:43 1992  Brendan Kehoe  (brendan@lisa.cygnus.com)

	* cp-decl.c (finish_decl): Only complain about uninitialized consts
	in the case where we haven't seen a previous decl/init of it.

	Thu Nov 26 11:22:12 1992  Mike Stump  (mrs@cygnus.com)

	* c++: Put a newline after for arg and before do, as ``for arg do''
	is not accepted by all shells.

	Mon Nov 23 13:21:43 1992  Brendan Kehoe  (brendan@cygnus.com)

	* c++ (-lm): Also recognize -lmath as a math library.

	* c++ (first): Only shift if $first is no, on the chance we got no
	arguments at all.  If we didn't get anything, say so (since -lg++
	will fake out the gcc driver into thinking we want to do something).

	* cp-parse.y (paren_expr_or_null): New rule to emit an error when an
	empty condition is used when it shouldn't.
	(simple_if, stmt): Use it for `if', `while', and `do'.

	* cp-decl.c (start_decl): If grokdeclarator returns a
	void_type_node, return a NULL_TREE.

	* cp-typeck.c (build_modify_expr_1): When calling build_opfncall for
	`operator=', use make_node to create a plain NOP_EXPR for it to use,
	rather than trying to pass NOP_EXPR down hoping it gets there intact.
	(build_modify_expr): Ditto.
	* cp-method.c (build_opfncall): Use TREE_CODE on ARG3 for a
	MODIFY_EXPR, since it'll be coming in properly as a tree now.

	Sat Nov 21 02:33:28 1992  Brendan Kehoe  (brendan@cygnus.com)

	* cp-init.c (expand_default_init): Clear DECL_REGISTER if we're
	going to call a ctor, otherwise we may end up generating bogus and
	confusing error messages about taking the addr of something declared
	to be `register'.

	* cp-typeck.c (build_x_function_call): Recognize a ptr-to-method
	that is being passed in as a function argument or as part of
	a COMPONENT_REF.
	(build_indirect_ref): If ERRORSTRING is NULL (it's passed in that
	way in many places), then don't try to use it.

	Sat Nov 21 01:49:34 1992  Brendan Kehoe  (brendan@cygnus.com)

	Work towards 64-bit support, and still more housecleaning.

	* cp-*.[cy]: For all functions and variables, pass/initialize/compare
	NULL_TREE, not 0, where appropriate.  Cast comparisons against 0
	with the proper pointer types, where appropriate.  Fix all passing
	of NULLs where there should be NULL_TREEs.  Don't include
	cp-class.h anywhere.  In many places, pass the missing fifth arg
	to build_opfncall as NULL_TREE.
	* cp-tree.h: Add decls with prototypes for prettymuch every function
	in the C++ front-end.  Include cp-class.h here.
	* cp-call.c: (build_function_call_maybe, unary_complex_lvalue,
	convert_harshness): Don't declare.
	(explained): Initialize to 0.
	(build_field_call): Give build_opfncall its fifth arg (NULL_TREE).
	(build_method_call, build_overload_call_real): Don't declare
	rank_for_overload.
	* cp-class.c (lookup_tag_current_binding_level,
	do_inline_function_hair): Don't declare.
	(get_vfield_name): Add prototype for static fn.
	(leftmost_baseclasses): Disable, never used.
	(constructor_name): Don't declare.
	(finish_struct): Delete arg EMPTY, never used.  Change all callers.
	Disable set of leftmost_baseclasses, since it's never used anywhere.
	(pushclass): Don't declare declare_uninstantiated_type_level.
	* cp-cvt.c (NULL): Undef first.
	(build_up_references): Cast return of error_not_base_type to `tree'.
	(convert_to_reference): Delete useless variable rval1.
	(convert_to_integer): Don't declare build_binary_op_nodefault or
	build_unary_op.
	(build_type_conversion): Don't declare default_conversion.
	* cp-decl.c (many extern funs): Don't declare.
	(grokparms, lookup_name_current_level, lookup_nested_type,
	redeclaration_error_message, parmlist_is_random,
	grok_op_properties, expand_static_int, deactivate_exception_cleanups,
	revert_static_member_fn): Declare static fns w/ prototypes.
	(pushlevel): Cast passing of NEWLEVEL to an int.
	(poplevel, poplevel_class, finish_method): Cast first two args of
	GNU_xref_end_scope to HOST_WIDE_INT.
	(duplicate_decls): Pass third arg to compexcepttypes (0).
	(grokvardecl): Delete arg CTYPE, never used.  Change all callers.
	Delete unused local var block_previously_created.
	* cp-decl2.c (substitute_nice_name): Don't declare decl_as_string.
	(grokclassfn): Delete unused local var name.
	(check_classfn): Delete unused arg FLAGS.  Change all callers.
	(grokfield): Pass digest_init only 3 args, not 6 (that's in the C
	front end, dammit).
	(coerce_new_type, coerce_delete_type): Delete first arg CTYPE, it's
	never used.  Change all callers.
	* cp-dem.c (cplus_demangle): Delete unused var non_empty.
	(NULL): Undef first.
	* cp-except.c: (call_to_unhandled_exception): Add decl of
	combine_strings.
	(init_exception_processing): Add decls of build_function_type and
	define_function.
	* cp-gc.c (define_function): Add extern decl.
	* cp-init.c (is_aggr_typedef): Delete extern decl.  Add type for
	argument OR_ELSE.
	(build_new): Don't declare require_complete_type.
	(build_vec_delete): Only pass 6 args, not 7.
	* cp-lex.c (init_lex): Don't declare init_parse or
	lang_printable_name.
	(cons_up_default_function): Don't declare constructor_name.
	(compiler_error): Declare args V and V2 to be HOST_WIDE_INT.
	* cp-method.c (index, rindex): Don't declare.
	* cp-parse.y (unary_expr): Cast first arg to build_x_unary_op to
	be of enum tree_code type.  For every call to build_new, pass its
	fourth arg as a comparison of $$ against NULL_TREE, instead of
	just passing it in.
	(combine_strings, truthvalue_conversion): Add extern decls.
	(structsp): Pass lookup_name its missing second arg (0).
	(component_decl): Pass 5, not 6, args to grokfield.
	(ansi_except_stmts): Delete decls of ansi_expand_start_match and
	cplus_exception_name.
	* cp-pt.c (mangle_class_name_for_template): Delete decl of
	type_as_string.
	* cp-search.c (get_binfo): Declare third arg PROTECT as int.
	(get_binfo2, get_binfo2_recursive): Make static.
	(get_base_distance): Cast DEPTH and IS_PRIVATE to ints, not
	HOST_WIDE_INTs.
	(get_baselinks): Delete decl of hash_tree_cons.
	* cp-spew.c (probe_obstack): Make static.  Compare NLEVELS != 0,
	not > 0, since it's unsigned.
	* cp-tree.c (list_hash_lookup_or_cons): Don't declare constructor_name.
	* cp-type2.c (digest_init, incomplete_type_error,
	readonly_warning_or_error, convert_for_initialization): Don't delete.
	(error_with_aggr_type): Declare third arg ARG to be HOST_WIDE_INT.
	(build_scoped_ref): Delete unused var orig_ref.
	(build_x_arrow): Even worse, give build_opfncall its missing last
	two arguments (as NULL_TREEs).
	* cp-typeck.c (build_component_ref): Call build_indirect_ref with
	its missing second arg (as a NULL).
	(build_x_indirect_ref): Again, build_opfncall with its missing
	last two args.
	(build_x_function_call): Delete decl of build_overload_call_maybe.
	(convert_for_assignment): Cast return of error_not_base_type to tree.
	* cp-xref.c (getpwd): Declare as extern.
	(Integer, String): Delete typedefs, rename all uses to their real
	meanings (`int' and `char *').

	Thu Nov 19 01:41:58 1992  Brendan Kehoe  (brendan@lisa.cygnus.com)

	* cp-dem.c (do_builtin_type): Recognize `w', a wide character, since
	it's now a type according to the ANSI X3J16 working paper; output
	"wchar_t" for it.
	(cplus_demangle): Accept `w' as an integral type.

	* cp-lex.c (init_lex): Delete duplicate setting of `__pl'.

	Wed Nov 18 21:29:14 1992  Brendan Kehoe  (brendan@cygnus.com)

 	* cp-class.c (finish_struct): Re-enable code to cut down on the size
	of symbol output, the positives outweigh the negatives.

	Wed Nov 18 19:51:59 1992  Mike Stump  (mrs@cygnus.com)

	* cp-search.c (dfs_walk): Move setting of
	vbase_decl_ptr_intermediate out of #ifdef code.

	Wed Nov 18 18:49:13 1992  Mike Stump  (mrs@cygnus.com)

	* cp-decl.c (grokdeclarator): Make wording on error message
	stronger.

	Tue Nov 17 17:46:11 1992  Brendan Kehoe  (brendan@cygnus.com)

	* cp-search.c (CHECK_convert_pointer_to_single_level): Don't define.

	Mon Oct  5 03:10:14 1992  Mark Eichin  (eichin at tweedledumber.cygnus.com)

	* c++ (numargs): $# was used after set was called; instead, save
	$# in $numargs and use that value instead.

Fri Jan  8 18:11:55 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* cccp.c (rescan): Prevent token pasting before macro call.
	(macroexpand): Prevent token pasting around an arg unless it's raw.

	* c-lex.c (yylex): Don't allow @ in identifier outside of Objective C.

Fri Jan  8 15:03:52 1993  Torbjorn Granlund  (tege@hal.gnu.ai.mit.edu)

	* pa.c (plus_xor_ior_operator): New predicate.

Fri Jan  8 13:09:47 1993  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* combine.c (BYTE_LOADS_EXTEND, LOAD_EXTEND): New macros.
	(subst, simplify_and_const_int, nonzero_bits, num_sign_bit_copies):
	Use them.
	(subst, case SET): Make a SIGN_EXTEND instead of paradoxical SUBREG
	if BYTE_LOADS_SIGN_EXTEND; previously only made ZERO_EXTEND.

	* function.c (assign_parm): Fix typo introduced by previous change.

 	* configure (486 targets): Set cpu_type to i386.

Fri Jan  8 03:48:27 1993  James Van Artsdalen  (james at bigtex.cactus.org)

	* i386/perform.h: New file.  perform_* macros for i386.
	* i386/386bsd.h,i386/osfrose.h,i386/mach.h (perform_*): Move
	perform_* macros to new file.

Thu Jan  7 19:03:56 1993  Jeffrey A. Law  (law@schirf.cs.utah.edu)

	* pa.h (target_switches): Add "-mtrailing-colon"
	(ASM_OUTPUT_LABEL): If TARGET_TRAILING_COLON then emit
	a colon after the label.
	(ASM_OUTPUT_INTERNAL_LABEL): Likewise.
	(ASM_OUTPUT_COMMON): Likewise.
	(ASM_OUTPUT_LOCAL): Likewise.

Thu Jan  7 18:21:52 1993  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* configure: Now that all files moved, always include CPU_TYPE in
	default file names; do not check both config and config/$cpu_type.
	Fix a few missing directory names and remove a few redundant specs.

	* config/vax, config/convex: New directories; all files moved.
	* configure (vax-*, convex-*): Files now in subdirectories.

Thu Jan  7 17:31:36 1993  Jim Wilson  (wilson@wookumz.gnu.ai.mit.edu)

	* Makefile.in (specs): Use GCC_FOR_TARGET.

        * Makefile.in (install-common): Install c++ and g++ only if cc1plus
	built.

	* fixincludes: fix the rename prototype on the rs6000 <stdio.h>,
	which conflicted with c++ use of new

	* c-decl.c (start_decl): Correct order of parameter declarations.

Thu Jan  7 16:52:01 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* config/romp/x-romp (CC): Add -U__STDC__.

Thu Jan  7 05:30:10 1993  Torbjorn Granlund  (tege@sics.se)

	* libgcc2.c (__udiv_w_sdiv): Replace hard-coded constants 31 with
	(SI_TYPE_SIZE - 1).

	* pa.md: Add floating point ld/st indexed patterns.

	* pa.md (reg 112:SI recognizers): Remove.
	(main move:SI recognizer): Add alternative for greg -> reg 112.

	* pa.md (floatsisf2 patterns): Put output template here, don't
	call output_floatsiXf2.
	(floatsidf2 patterns): Likewise.
	* pa.c (output_floatsisf2, output_floatsidf2): Remove.

	* pa.md (floatunssidf2, floatunssisf2): New patterns.
	(floatdisf2, floatdidf2): New patterns.
	(fix_truncsfdi2, fix_truncdfdi2): New patterns.
	(rotrsi3, rotlsi3): New patterns.
	(shd optimizers): 2 new patterns.

	* pa.md (ashlsi3, ashrsi3, lshrsi3): Rewrite not to mention SAR.
	(zvdep32, vextrs32): New named recognizers.
	* pa.h (FIXED_REGISTERS): Make register 112 (SAR) not fixed.

Thu Jan  7 00:38:02 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* objc/object.m (+ error:, - error:): Use _objc_error.

	* reload1.c (reload) [SMALL_REGISTER_CLASSES]: When adding an extra
	need if the insn uses the function value return register,
	likewise add an extra single-reg need for each class in which
	the insn needs a group.

Wed Jan  6 20:38:20 1993  Brendan Kehoe  (brendan@cygnus.com)

	* alpha.h (ASM_FILE_START): Change .verstamp ident for BL10.
	* alpha.md (div/mod): Change calling sequence to agree with BL10.

Wed Jan  6 19:54:05 1993  Torbjorn Granlund  (tege@hal.gnu.ai.mit.edu)

	* config/arm: New directory.
	* configure (arm-*-*): Update location of tm_file.
	* config/pyr: New directory.
	* configure (pyramid-*-*): Set xmake_file.
	Update location of tm_file.

Wed Jan  6 19:03:18 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* config/sparc/sol2.h (CPP_SPEC, LIB_SPEC, LINK_SPEC):
	Add -compat-bsd conditionals.

	* cccp.c (main): Implement -iwithprefix.

Wed Jan  6 18:13:13 1993  Jeffrey A. Law  (law@schirf.cs.utah.edu)

	* pa.c (print_operand): Always use "<>" instead of "!=".

	* pa.h (target_switches): Add "-mdisable-fpregs" and 
	"-mdisable-indexing.
	(CONDITIONAL_REGISTER_USAGE): If TARGET_DISABLE_FPREGS, then mark
	all FP registers as fixed.
	* pa.md (indexed loads): Disable if TARGET_DISABLE_INDEXING.
	(mulsi3, xmpyu): Disable xmpyu if TARGET_DISABLE_FPREGS.
	* configure: Add hppa1.X-hp-utahmach target.
	* pa-utahmach.h, pa1-utahmach.h: New files. 

Wed Jan  6 11:20:59 1993  Michael Collison  (collison at osf.org)

	* expr.c (convert_move): Support new modes QFmode and HFmode.

	* optabs.c (init_optabs): Add optab entries for QFmode and HFmode.

	* reload1.c (init_reload): Add entries in 'reload_in_optab'
	for QFmode and HFmode.

	* varasm.c (assemble_real): Use `ASM_OUTPUT_BYTE_FLOAT' and
	`ASM_OUTPUT_SHORT_FLOAT' for QFmode and HFmode respectively.

	* machmode.def: Added new modes QFmode and HFmode.

Wed Jan  6 11:29:46 1993  Jeffrey A. Law  (law@schirf.cs.utah.edu)

	* pa.c (fmpyaddoperands, fmpysuboperands): Cleanups suggested by
	Tege.
	* pa.md (fmpyadd peepholes): Cleanups suggested by Tege.

	* pa.md (movqi, movhi, movsi, movdi, movsf, movdf): Discourage
	regclass from preferring anything which involves a FP<->GR copy.

	* pa.md (millicode expands): Change operand 3 in the expand
	pattern from a clobber of a match_scratch to a clobber of a
	match_operand with a register predicate.  Make appropriate
	change in the generated RTL.
	(millicode insns): Clobber a match_operand with a register
	predicate instead of a match_scratch expression.  
	* pa.c (emit_hpdiv_const): Likewise.

	* pa.md (movsi, movhi, movqi, movdi): Use reg_or_0_operand
	consistently.

Wed Jan  6 02:23:48 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* cexp.y (yylex): Make tokstart an unsigned char *.

Wed Jan  6 10:46:19 1993  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* fixincludes (limits.h):  Add #ifndef/#endif around macros that
	are supposed to be defined in float.h.

	* fixincludes, fixinc.svr4, fixinc.sco: Don't "make LIB absolute"
	if already absolute, to avoid problems with the automounter.

Wed Jan  6 02:35:23 1993  Paul Eggert  (eggert@twinsun.com)

	* cccp.c (check_preconditions, do_error, do_warning, do_xifdef):
	Don't use signed chars to index into arrays; they might be negative.

Tue Jan  5 21:20:29 1993  James Van Artsdalen  (james at bigtex.cactus.org)

	* i386/386.h (DEBUG_PRINT_REG): Print regno along with printable
	name.
	(CONST_COSTS): Handle integer CONST_DOUBLE correctly.
	(PREFERRED_RELOAD_CLASS): Allow integer CONST_DOUBLE into int
	regs.

	* config/fx80: New directory.
	* configure (fx80): fx80 configuration files moved there.

	* config/i960: New directory.
	* configure (i960): i960 configuration files moved there.

	* config/sparc: New directory.
	* configure (sparc): sparc configuration files moved there.
	* sparc/sol2.h: Renamed from spc-sol2.h.
	* sparc/xm-sol2.h: Renamed from xm-spc-sol2.h.
	* sparc/xm-sysv4.h: Renamed from xm-spcv4.h.
	* sparc/sysv4.h: Renamed from sparcv4.h.
	* sparc/x-sysv4: Renamed from x-sparcv4.
	* sparc/*.h: Use new file names for included sparc files.

	* config/i860: New directory.
	* configure (i860): i860 configuration files moved there.
	* i860/bsd.h: Renamed from i860b.h.
	* i860/bsd-gas.h: Renamed from i860bg.h.
	* i860/mach.h: Renamed from i860mach.h.
	* i860/sysv3.h: Renamed from i860v3.h.
	* i860/sysv4.h: Renamed from i860v4.h.
	* i860/xm-sysv3.h: Renamed from xm-i86v3.h.
	* i860/xm-sysv4.h: Renamed from xm-i86v4.h.
	* i860/x-sysv3: Renamed from x-i860v3.
	* i860/x-sysv4: Renamed from x-i860v4.
	* i860/*.h: Use new file names for included i860 files.

	* m68k/tti68k.h: Deleted.
	* i386/x-xenix: Deleted.
	* i860/i860g3.h: Deleted.

Tue Jan  5 23:54:36 1993  Jeffrey A. Law  (law@schirf.cs.utah.edu)

	* config/pa: New directory.
	* config/pa/*.h: Handle PA configuration files in new
	subdirectory.
	* configure (pa): Likewise.

Tue Jan  5 23:31:34 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* elxsi, gmicro, tahoe, we32k, spur: New subdirs; files moved.

	* config/harris.h: Include tahoe.h from tahoe/ subdir.

Tue Jan  5 21:45:56 1993  Jim Wilson  (wilson@wookumz.gnu.ai.mit.edu)

	* fixincludes (Xmu.h): Add missing ${LIB}/.

	* calls.c (expand_call): Pass NULL_RTX to INIT_CUMULATIVE_ARGS.
	* function.c (assign_parms): Pass NULL_RTX to INIT_CUMULATIVE_*.
	* expr.c (emit_library_call): Pass NULL_TREE to INIT_CUMULATIVE_ARGS.

	* Makefile.in (install-dir): Only make includedir once.

	* cccp.c (do_line): Add pedantic warnings for out of range line
	numbers, and non-space characters after the filename.

Tue Jan  5 15:09:29 1993  Michael Meissner  (meissner@osf.org)

	* mips/bsd-4-gdb.h: Renamed from mips-gbsd.h.
	* mips/bsd-4.h: Renamed from mips-bsd.h.
	* mips/bsd-5-gdb.h: Renamed from mips-5gbsd.h.
	* mips/bsd-5.h: Renamed from mips-5bsd.h.
	* mips/dec-gosf1.h: Renamed from dec-gosf1.h.
	* mips/dec-osf1.h: Renamed from dec-osf1.h.
	* mips/iris3-gdb.h: Renamed from irisgdb.h.
	* mips/iris3.h: Renamed from iris.h.
	* mips/iris4-gdb.h: Renamed from iris4g.h.
	* mips/iris4.h: Renamed from iris4.h.
	* mips/mips-4-gdb.h: Renamed from mips-gdb.h.
	* mips/mips-5-gdb.h: Renamed from mips-5gdb.h.
	* mips/mips-5-gdb.h: Renamed from mips-g5.h.
	* mips/mips-5.h: Renamed from mips-5.h.
	* mips/mips.c: Renamed from mips.c.
	* mips/mips.h: Renamed from mips.h.
	* mips/mips.md: Renamed from mips.md.
	* mips/news4-gdb.h: Renamed from mips-gnews.h.
	* mips/news4.h: Renamed from mips-news.h.
	* mips/news5-gdb.h: Renamed from mips-gn5.h.
	* mips/news5.h: Renamed from mips-n5.h.
	* mips/nws3250v4.h: Renamed from nws3250v4.h.
	* mips/osfrose.h: Renamed from decrose.h.
	* mips/svr3-4-gdb.h: Renamed from mips-gsysv.h.
	* mips/svr3-4.h: Renamed from mips-sysv.h.
	* mips/svr3-5-gdb.h: Renamed from mips-5gsysv.h.
	* mips/svr3-5.h: Renamed from mips-5sysv.h.
	* mips/svr4-4-gdb.h: Renamed from mips-gsvr4.h.
	* mips/svr4-4.h: Renamed from mips-svr4.h.
	* mips/svr4-5-gdb.h: Renamed from mips-5g4.h.
	* mips/svr4-5.h: Renamed from mips-5svr4.h.
	* mips/t-mips: Renamed from t-mips.
	* mips/t-osfrose: Renamed from t-decrose.
	* mips/t-ultrix: Renamed from t-decstatn.
	* mips/ultrix-gdb.h: Renamed from decstabs.h.
	* mips/ultrix.h: Renamed from decstatn.h.
	* mips/x-dec-osf1: Renamed from x-dec-osf1.
	* mips/x-mips: Renamed from x-mips.
	* mips/x-nws3250v4: Renamed from x-nws3250v4.
	* mips/x-osfrose: Renamed from x-decrose.
	* mips/x-sysv: Renamed from x-mipsv.
	* mips/x-ultrix: Renamed from x-decstatn.
	* mips/xm-iris3.h: Renamed from xm-iris.h.
	* mips/xm-iris4.h: Renamed from xm-irix4.h.
	* mips/xm-mips.h: Renamed from xm-mips.h.
	* mips/xm-news.h: Renamed from xm-mipsnews.h.
	* mips/xm-sysv.h: Renamed from xm-umips.h.

	* mips/* Modify include files as needed for the MIPS files being
	in the config/mips subdirectory.

	* halfpic.h, halfpic.c: Eliminate unknown symbol errors when
	linking the gen* programs for {i386,dec} OSF/rose, by using BSS
	variables instead of extern.

Tue Jan  5 00:29:45 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* c-typeck.c (c_sizeof): Call force_fit_type only for INTEGER_CST.

	* objc/core.c (_objc_alloc): Renamed from _alloc.
	(_objc_dealloc, _objc_realloc, _objc_copy, _objc_error): Likewise.
	* objc/objc.h: Decls renamed also.
	* objc/objc-proto.h: Uses renamed also.

	* config.sub ($os alternatives for sco and isc): 
	Preserve the specified os version if any.
	Each alternative handles both 386 and 486, preserving distinction.
	($basic_machine alternatives for sco and isc): Deleted.
	(i[34]86v32, i[34]86v, i[34]86v4):
	Handle both cpus together, preserving distinction.

Mon Jan  4 20:59:37 1993  James Van Artsdalen  (james at bigtex.cactus.org)

	* config/ns32k: New directory.
	* configure (ns32k): ns32k configuration files moved there.

	* ns32k/*.h: Use new file names for included ns32k files.

	* config/m68k: New directory.
	* configure (m68k): m68k configuration files moved there.

	* m68k/sgs.h: Renamed from m68ksgs.h.

	* m68k/*.h: Use new file names for included m68k files.

Mon Jan  4 18:06:31 1993  Michael Meissner  (meissner@osf.org)

	* configure (i386-osfrose): Rename i386 OSF/rose files to
	osfrose.h, t-osfrose.h, and x-osfrose.h.

	* i386/osfrose.h: Renamed from i386/rose.h.
	* i386/t-osfrose: Renamed from i386/t-rose.
	* i386/x-osfrose: Renamed from i386/x-rose.

Mon Jan  4 11:03:11 1993  Torbjorn Granlund  (tege@gnu.ai.mit.edu)

	* Makefile.in (install-common-headers): Pipe grep output to /dev/null.

Mon Jan  4 01:12:48 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* i386/bsd.h (ASM_GENERATE_INTERNAL_LABEL, ASM_OUTPUT_INTERNAL_LABEL):
	Alternate definitions if NO_UNDERSCORES.

	* c-parse.in (component_declarator):
	Allow attribute after nameless field.

	* fixincludes (making dirs and links): If we already made subdirs
	for a dir foo and foo turns out to be a symlink outside /usr/include,
	after we have made a dir for it in ./root/, make similar subdirs there.

Sun Jan  3 07:28:32 1992  Karl Berry  (karl@red.cs.umb.edu)

	* x-romp (CC): Add -w.

Sun Jan  3 21:19:50 1993  Jeffrey A. Law  (law@schirf.cs.utah.edu)

	* pa.h (JUMP_TABLES_IN_TEXT_SECTION): Define.

	* jump.c (jump_optimize, clause for `if (foo) b++'):
	Do this regardless of BRANCH_COST if HAVE_incscc is defined.
	* pa.md (scc insn): Name this pattern "scc".
	(negscc, incscc, cmov): New patterns.
	* pa.c (incscc_operator): New function.

	* pa.h (actual_fsize, apparent_fsize): Delete unused variables.

Sun Jan  3 20:37:55 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* cccp.c (main): Recognize and remove .cxx as filename suffix.

Sun Jan  3 19:39:18 1993  Michael Meissner  (meissner@osf.org)

	* mips.h (MIPS_VERSION): Bump Meissner version number to 34.

	* mips.c (save_restore_insns): Don't give an error if saving an FP
	register at stack offset 0, which occurs when the function is a
	leaf function that uses lots of FP registers, and saves no GP
	registers.

Sun Jan  3 19:00:29 1993  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* local-alloc.c (block_alloc): Generalize tying so we can tie
	any operand with the output unless some operand must be in the
	same register as the output, in which case only try tying that
	operand.

	* rtl.c (rtx_alloc): Clear common area of rtx in a portable manner.

Sun Jan  3 13:57:33 1993  Jeffrey A. Law  (law@schirf.cs.utah.edu)

	* pa.h (CONST_COSTS): Make CONST_DOUBLES very expensive.
	Give HIGH expressions a small cost with CONST, SYMBOL_REF,
	and LABEL_REF being twice as expensive as HIGH.

	* pa.md (fmpyadd peepholes): New peepholes to issue independent
	floating point multiply and add instructions at the same time.
	(fmpysub peepholes): Likewise for multiply and subtract instructions.
	* pa.c (fmpyaddoperands): Verifys given registers are suitable for
	use in fmpyadd instructions.
	(fmpysuboperands): Likewise, but for fmpysub instructions.

	Wed Oct 28 12:07:54 1992  Tim Moore  (moore at defmacro.cs.utah.edu)
	* pa.md (call, call_value): If flag_pic, emit restore of PIC table
	register.
	(call_interal, call_value_internal): Name matching insns.
	(movsi, movhi, movqi, movdi, movsf, movdf patterns): Don't
	match memory to memory moves.

	* pa.h (FIXED_REGISTERS, CALL_USED_REGISTERS): r3 isn't fixed!
	(REG_ALLOC_ORDER): Move r3 up in the allocation order.
	(HAVE_ATEXIT): Define.
	(INITIAL_FRAME_POINTER_OFFSET): compute_frame_size ()
	now does the whole calculation, including rounding.
	(FUNCTION_PROLOGUE, FUNCTION_EPILOGUE): Don't pass leaf_function
	to output_function_{prologue,epilogue}.
	(DELAY_SLOTS_FOR_EPILOGUE): Call hppa_epilogue_delay_slots ().

	* pa.c (hppa_save_pic_table_rtx): New variable.
	(finalize_pic): Setup hppa_save_pic_table_rtx..
	(apparent_fsize): Delete variable.
	(compute_frame_size): Many changes. Return the total frame size,
	including space for "magic" stuff at the top of the stack and any
	rounding for the Snake.
	(output_function_prologue): Don't take a leaf_function argument;
	Decide that based on frame size and frame_pointer_needed.
	Don't emit any frame diddling code if actual_fsize is 0.
	(output_function_epilogue): Don't take leaf_function argument.
	Don't do anything if no frame.
	Keep stack pointer aligned to 64 bytes before loading from old
	frame pointer.
	(hppa_epilogue_delay_slots): Only if there is no frame will we
	have an empty delay slot to fill.
	(eligible_for_epilogue_delay): Don't check "leaf_function" anymore.

Sun Jan  3 07:28:29 1993  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* gcc.c (putenv_from_prefixes): Use PATH_SEPARATOR.
	Properly use JUST_MACHINE_SUFFIX when desired; always make path
	the same as find_a_file will use.

Sat Jan  2 16:35:55 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* config.sub: Translate sunos5 to solaris2, and solaris1 to sunos4.

	* tree.c, tree.h (int_size_in_bytes): Change ret type back to int.

	* calls.c (expand_call): Don't use int_size_in_bytes
	for a variable-size object.

Sat Jan  2 15:16:24 1993  Jim Wilson  (wilson@wookumz.gnu.ai.mit.edu)

	* c-parse.in (label): Use expr_no_commas instead of expr for case
	labels.

Sat Jan  2 03:30:10 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* Makefile.in (gcc.o): Define TOOLDIR_BASE_PREFIX.

	* gcc.c (TOOLDIR_PREFIX): Define if not defined.
	(tooldir_prefix, tooldir_base_prefix): New variables.
	(main): Set tooldir_prefix.
	Add it (plus `bin' or `lib') to search paths.

	* cccp.c (default_include): Look directly in TOOL_INCLUDE_DIR.
	* protoize.c (default_include): Likewise.

	* collect2.c (main): Look for `real-ld' after `gld', before `ld'.
	In debug printout, fix typo in prev change.

Fri Jan 1 13:32:36 1992  Ian Lance Taylor  (ian@cygnus.com)

	* Makefile.in (cccp.o, protoize.o, unprotoize.o):
	Define TOOL_INCLUDE_DIR as $(tooldir)/include.
	(test-protoize-simple): Define TOOL_INCLUDE_DIR as 0.

	* config/i386/linux.h (STARTFILE_SPEC): Removed -L"TOOLDIR"/lib.

Fri Jan  1 06:26:11 1993  Richard Kenner  (kenner at vlsi1.ultra.nyu.edu)

	* collect2.c: Look for tools using paths rather than a single prefix.
	(struct prefix_list, struct path_prefix): New structures.
	(cpath, path): New variables.
	(find_a_file, add_prefix): New functions; simplified versions of
	functions from gcc.c.
	(prefix_from_env): New function.
	(main): Get path to search for binaries from COMPILER_PATH
	environment variable always set by gcc.c and from PATH.
	Qualify names with target machine in cross-environment unless
	using compiler directories.
	Use find_a_file to find our binaries.
	Remove use of single prefix.
	If -debug, print strip_file_name.
	(fork_execute): Print program we are trying to execute if -debug and
	we can't find the file.
	(scan_prog_file): Complain if can't find NM.
	* Makefile.in (REAL_LD_NAME): New variable.
	(collect2.o): Don't need STANDARD_STARTFILE_PREFIX, etc.
	(install-cross-tools): Use REAL_LD_NAME instead of `ld' when linking
	files from tooldir to libsubdir.

Fri Jan  1 17:51:05 1993  Jim Wilson  (wilson@sphagnum.cygnus.com)

	* dbxout.c (dbxout_symbol, TYPE_DECL case): Don't output tag which
	references incomplete type.

	* fixincludes (sunwindow/{win_cursor.h,win_lock.h}): Change invalid
	#ifdef identifier `ecd.cursor' to `ecd_cursor'.

	* c-typeck.c (build_binary_op): Add 'right' and 'left' to shift
	count warnings to distinguish them from each other.

	* function.c (fixup_var_refs_insn):  Update last_parm_insn when
	insns are output after it to fix it up.

	* sdbout.c (plain_type_1): Distinguish some C integer types by name.

	* Makefile.in (MAKEINFO): New variable, defined to `makeinfo'.

	* rs6000.h (ASM_FILE_START): Switch to text section at end.
	Output declaration for .mcount when profiling.

Fri Jan  1 12:15:42 1993  Jeffrey A. Law  (law@schirf.cs.utah.edu)

	* pa.md (movqi, movhi, movsi, movdi, movsf, movdf): Fix attributes
	which involve fp<->gr copies to match current reality.
	(indexed loads): These should have "load" attributes, not "move".

	* pa.c (output_floatsisf, output_floatsidf): Abort if presented
	with a general register.
	* pa.md (movdf const_couble): Fix lengths.
	(floatsisf patterns): Likewise.
	(floatsidf patterns): Likewise.

	* pa.h (REGISTER_MOVE_COST): Make moving between FP and non-FP 
	registers more expensive.

	* pa.h (TARGET_NO_BSS): Delete target switch.  Delete all references.

Fri Jan  1 07:40:58 1993  Tom Wood  (wood@dg-rtp.dg.com)

	* config/m88k: New directory.
	* configure (m88k*): Files are now in config/m88k.
	* m88k/dgux.h, m88k/dolph.h, m88k/luna.h, m88k/sysv3.h,
	m88k/sysv4.h, m88k/xm-sysv3.h: Include files in m88k.
	* m88k/t-dgux, m88k/t-m88k, m88k/t-m88k, m88k/t-sysv4: Use
	m88k/m88k-move.sh.

Thu Dec 31 17:38:43 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* gcc.c (do_spec_1): Propagate failure from recursive calls.

	* i386/386bsd.h (perform_*): Rename macro args to arg0, arg1.

Thu Dec 31 15:42:35 1992  Jim Wilson  (wilson@wookumz.gnu.ai.mit.edu)

	* sched.c (sched_analyze_1, sched_analyze_2): If before reloading,
	record dependences that may be introduced by reload substituting
	equivalents for pseudo registers.

	* sched.c (sched_analyze_2): Use REG_NOTE_KIND not GET_MODE in
	add_dependence call.
	(sched_analyze_insn): Likewise.

	* sparc.h (LIB_SPEC): When -a, include bb_link.o.

	* t-sol2 (gmon.o, crt*.o): Change config to $(srcdir)/config.

	* reload.c (operands_match_p): For WORDS_BIG_ENDIAN machines,
	make multiple register operands equivalent if the last register of
	the groups are the same.
	(subst_reloads): Use gen_lowpart_common to change mode of
	reloadreg.
	* reload1.c (emit_reload_insns): Likewise.

	* reload1.c (gen_input_reload):  Also handle PLUS of a MEM and
	CONSTANT specially.

	* i960.h (CPP_SPEC, CC1_SPEC, ASM_SPEC, LINK_SPEC,
	TARGET_SWITCHES): Delete support for non-existent CPU variations.
	(ASM_SPEC, LINK_SPEC, TARGET_SWITCHES): Add support for -mlink-relax.
	(SELECT_CC_MODE): Correct typo.

	* sparc.c (print_operand): For invalid operands, call
	output_operand_lossage instead of aborting.

	* i960.md (call_internal, call_value_internal): Use 'l' for
	match_scratch constraint not 'd'.

	* function.c (assign_parms): Emit conversions into a sequence, and
	then output the sequence after all parameters have been moved.

	* optabs.c (expand_binop): Correct indentation of doubleword
	multiply picture.

	* sparc.h (TARGET_SWITCHES): Have -msparclite also clear TARGET_FPU.

	* va-i960.h: Define away __extension__ if compiled by GCC v1.

	* libgcc2.c (L_builtin_new): Change to L_op_new.  Use new style
	definition for __builtin_new.
	(L_caps_New): Change to L_new_handler.  Delete unused function
	builtin_vec_new.
	(L_builtin_del): Change to L_op_delete.  Delete vfp declaration.
	Use new style definition for __builtin_delete.  Delete unused
	function __builtin_vec_delete.
	* Makefile.in (LIB2FUNCS): Change _builtin_new to _op_new.  Change
	_caps_New to _new_handler.  Change _buildin_del to _op_delete.

	* m68k.h (TARGET_SWITCHES): -m68030 does not imply -m68881.

	* gcc.c (input_from_pipe): New variable.
	(do_spec): Set/clear input_from_pipe as appropriate.  Translate %|
	to "-" if input_from_pipe is true.
	* sparc.h (ASM_SPEC): Use %|.

	* m68k.c (strict_low_part_peephole_ok): New function.
	* m68k.md: Add peephole to eliminate unecessary clear instructions
	in strict_low_part insn sequences.

	* configure (elxsi): Move it out of the middle of the sparc section.

	* unroll.c (copy_loop_body, JUMP_INSN case): Do map the body of
	the loop branch back, then rewrite it to jump past the end of the
	unrolled loop.

	* c-decl.c (pushdecl): Check TREE_PUBLIC in addition to
	DECL_EXTERNAL decls when looking for duplicate external declarations.

	* cccp.c (multiline_string_line): New file scope static variable.
	(rescan): Delete multiline_string_line variable definition.
	(skip_quoted_string): Print start line number of unterminated
	string and character constants.  When see a newline: warn if
	pedantic; delete unreachable duplicate code for traditional case;
	set multiline_string_line.

Thu Dec 31 11:11:30 1992  Jeffrey A. Law  (law@schirf.cs.utah.edu)

	* pa-hpux.h (LIB_SPEC): Fix so that one can link in profiled 
	libraries under HPUX.
	* pa-ghpux.h, pa-hpux7.h, pa-gux7.h (LIB_SPEC): Likewise.

Thu Dec 31 08:50:42 1992  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* a29k.h (OBJECT_FORMAT_COFF): Add definition.

	* rs6000/xm-rs6000.h (REAL_NM_FILE_NAME): Delete from here.
	* rs6000/rs6000.h (REAL_NM_FILE_NAME): Put it here.

Thu Dec 31 01:53:13 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* tree.c (build_index_type): Leave TYPE_MAX_VALUE as -1 if it was;
	don't truncate the high bits.

	* Makefile.in (distdir): New target broken out from gcc.xtar.
	Depend on $(srcdir)/INSTALL.
	(gcc.xtar): Depend on distdir.
	(doc): Delete dep $(srcdir)/INSTALL.

Wed Dec 30 12:54:53 1992  James Van Artsdalen  (james at bigtex.cactus.org)

	* i386/i386.c (output_fp_cc0_set): Abort if cc0 user not found.

	* i386/i386.md (movsf,movdf): Change constraints to use integer regs
	for mem-mem copies.

	* i386/i386.h (PREFERRED_RELOAD_CLASS): Don't reload CONST_DOUBLE into
	integer regs.

	* jump.c (delete_computation): reg_referenced_p wants body, not insn.

Wed Dec 30 07:03:49 1992  John F Carr  (jfc at Athena.MIT.EDU)

	* caller-save.c (setup_save_areas): Don't assign save area for a
	group if some register in the group has already been assigned an
	area.

Wed Dec 30 06:05:07 1992  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* tree.def (TRUTH_XOR_EXPR): New tree code.
	* expr.c (expand_expr, case TRUTH_XOR_EXPR): New case.
	* fold-const.c (invert_truthvalue, case TRUTH_XOR_EXPR): New case.
	(fold, case TRUTH_XOR_EXPR): New case.
	(fold, case TRUTH_OR_EXPR, TRUTH_AND_EXPR): Check for second
	operand of appropriate value to determine result whether or
	not first operand is a constant. 
	* c-common.c (truthvalue_conversion): Handle TRUTH_XOR_EXPR.
	* c-convert.c, cp-cvt.c (convert_to_integer): Likewise.
	* c-typeck.c (build_binary_op): Likewise.
	* cp-typeck.c (build_binary_op_nodefault): Likewise.
	* cp-class.c (instantiate_type): Likewise.
	* stmt.c (expand_return): Likewise.

Wed Dec 30 01:48:38 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* fixincludes: Chmod each copied file a+r.
	* fixinc.svr4, fixinc.sco: Likewise.

	* Makefile.in (extraclean): Quote the sharps.

	* expr.c (expand_expr): In NOP_EXPR case, truncate and
	reextend integer constants.

Tue Dec 29 18:21:06 1992  James Van Artsdalen  (james at bigtex.cactus.org)

	* i386/i386.md (bit complement): Constrain inputs and outputs to
	match, instead of using match_dup.
	(zero_extract test): Reenable with separate patterns to match
	QImode and SImode zero_extract.

	* i386/sysv3.h: Renamed from i386/svr3.h.
	* i386/sysv4.h: Renamed from i386/svr4.h.
	* i386/x-sysv3: Renamed from i386/x-svr3.
	* i386/xm-sysv3.h: Renamed from i386/xm-svr3.h.
	* i386/xm-sysv4.h: Renamed from i386/xm-svr4.h.

	* configure (i386): Use new file names for 386 files.
	* i386/*.h: Likewise for included files.

Tue Dec 29 18:04:13 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* Avoid truncation of object sizes when bit size won't fit in a word.
	* fold-const.c (const_binop): New arg NOTRUNC.  All calls changed.
	(size_binop): Pass 1 for NOTRUNC.
	(force_fit_type): No longer static.
	* tree.c (size_in_bytes): Call force_fit_type with end result.
	(int_size_in_bytes): Avoid overflow as long as result fits.
	Return type is now unsigned int.
	* c-typeck.c (c_sizeof, c_sizeof_nowarn, c_size_in_bytes):
	Call force_fit_type with end result.

	* stor-layout.c (layout_record): Avoid overflow in const_size
	by adding into var_size instead.

Tue Dec 29 09:01:33 1992  Tom Wood  (wood@dg-rtp.dg.com)

	* configure (m88k-dgux): Use t-m88kdgux.

Tue Dec 29 06:56:41 1992  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* genemit.c (gen_split): Initialize _val in generated function.

Tue Dec 29 02:27:51 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* cccp.c (make_definition): Pass NULL as 3rd arg to do_define.

Mon Dec 28 14:56:55 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* c-parse.in (stmt, FOR case): Do call position_after_white_space
	after recording the current lineno for the increment.

	* config.sub: Default to bsd for *-sequent.

Mon Dec 28 06:05:12 1992  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* combine.c: Add a few missing HOST_WIDE_INT casts.
	Rename references to `significant' bits to be `nonzero' bits; 
	specifically the following, but also local vars and comments:
	(reg_nonzero_bits): Renamed from reg_significant.
	(nonzero_bits): Renamed from significant_bits.
	(nonzero_sign_valid): Renamed from significant_valid.
	(set_nonzero_bits_and_sign_copies): Renamed from set_significant.

	* fold-const.c (fold, case BIT_IOR_EXPR): Convert the IOR of a pair
	of shifts into a rotate when it is equivalent.

	* expmed.c (expand_shift): If rotating by a constant, try both
	directions of rotate.
	If can't open-code a rotate, do it as a pair of shifts followed by
	an IOR.

	* combine.c (simplify_comparison, case NEG): Replace large block of
	code with equivalent call to num_sign_bit_copies.

	* expr.c (get_inner_reference): Don't look at flag_volatile.
	(expand_expr, case INDIRECT_REF, OFFSET_REF): Likewise.
	* c-typeck.c, cp-typeck.c (build_indirect_ref): Set volatility from
	flag_volatile.

	* i386/rose.h (OPTIMIZATION_OPTIONS): Delete; we don't want to set
	-finline-functions for -O3 and this does nothing else useful.
	* mips.h (OPTIMIZATION_OPTIONS): Likewise.
	* i960.h (OPTIMIZATION_OPTIONS): Don't set -finline-functions for -O3.

Sun Dec 27 18:33:38 1992  James Van Artsdalen  (james at bigtex.cactus.org)

	* config/i386: New directory.
	* configure.bat: 386 configuration files moved to new directory.
	* configure (i386): Likewise.
	Delete lines that duplicate default actions of configure.

	* i386/386bsd.h: Renamed from i386bsd.h.
	* i386/att.h: Renamed from att386.h.
	* i386/bsd.h: Renamed from bsd386.h.
	* i386/gas.h: Renamed from i386gas.h.
	* i386/gstabs.h: Renamed from i386gstabs.h.
	* i386/linux.h: Renamed from i386linux.h.
	* i386/mach.h: Renamed from i386mach.h.
	* i386/rose.h: Renamed from i386rose.h.
	* i386/sco.h: Renamed from i386sco.h.
	* i386/sco4.h: Renamed from i386sco4.h.
	* i386/seq-gas.h: Renamed from seq386gas.h.
	* i386/sequent.h: Renamed from seq386.h.
	* i386/sun.h: Renamed from i386sun.h.
	* i386/svr3.h: Renamed from i386v.h.
	* i386/svr4.h: Renamed from i386v4.h.
	* i386/t-isc: Renamed from t-i386isc.
	* i386/t-rose: Renamed from t-i386rose.
	* i386/t-sco: Renamed from t-i386sco.
	* i386/unix.h: Renamed from unx386.h.
	* i386/x-aix: Renamed from x-aix386.
	* i386/x-isc: Renamed from x-i386isc.
	* i386/x-rose: Renamed from x-i386rose.
	* i386/x-sco: Renamed from x-i386sco.
	* i386/x-sco4: Renamed from x-i386s4.
	* i386/x-svr3: Renamed from x-i386v.
	* i386/xm-aix.h: Renamed from xm-aix386.h.
	* i386/xm-dos.h: Renamed from xm-i386dos.h.
	* i386/xm-isc.h: Renamed from xm-i386isc.h.
	* i386/xm-sco.h: Renamed from xm-i386sco.h.
	* i386/xm-sun.h: Renamed from xm-i386sun.h.
	* i386/xm-svr3.h: Renamed from xm-i386v.h.
	* i386/xm-svr4.h: Renamed from xm-i38v4.h.

	* i386/*.h: Use new file names for included 386 files.

Sun Dec 27 22:02:09 1992  H.J. Lu  (hlu@yardbird.eecs.wsu.edu)

	* i386linux.h (CPP_SPEC): Define -D__i486__ if compile for i486.
	(ASM_OUTPUT_ADDR_DIFF_ELT, JUMP_TABLES_IN_TEXT_SECTION):
	Copy definitions from i386v4.h to get PIC code correct.
	(FUNCTION_PROFILER): Copy definition from i386bsd.h.
	(COMMENT_BEGIN, ASM_APP_ON, ASM_APP_OFF): Copy from i386bsd.h
	to prepare for new GAS.

	* Makefile.in: (gcc.o): Add $(MAYBE_TARGET_DEFAULT).

Sun Dec 27 16:33:13 1992  Tom Wood  (wood@dg-rtp.dg.com)

	* m88k.c (block_move_loop, block_move_no_loop, block_move_sequence): 
	Always set MEM_IN_STRUCT_P.  If it wasn't previously set, use BLKmode. 
	* m88k.md (BLKmode load/store patterns): New.
	(call_block_move, call_movstrsi_loop): Allow any mode for the preload.

	* m88k.c (output_file_start): Emit `requires_88110' when -m88110
	is used with -mversion-04.00.
	* m88k.h (OVERRIDE_OPTIONS): Allow version 04.00 default.
	(VERSION_0400_SYNTAX, REQUIRES_88110_ASM_OP): New definitions.
	* m88kdgux.h (ASM_FIRST_LINE): Print the version string.

	* m88k.md (length attribute): Branches may be expanded to two
	instructions by the assembler.
	(DFmode bcnd pattern): Don't try to fill the delay slot.
	(CCmode bbx patterns): Reverse the 1/0, not the condition.

	* m88kdgux.h (ASM_SPEC): Pass -KVstring given -mversion-string.

	* m88kdgux.ld, t-m88kdgux: New file.
	* m88kdgux.h (LIB_SPEC): Add crtend.o.
	(STARTFILE_SPEC): Add crtbegin.o, and m88kdgux.ld for COFF.
	(CTOR_LIST_END, DTOR_LIST_END): Define as -1.
	(DO_GLOBAL_{C,D}ORS_BODY): Ignore null entries and look for -1
	bounds.

Sun Dec 27 16:08:04 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* hp320.h (ASM_OUTPUT_DOUBLE_OPERAND): Delete spurious space after \.

	* gstddef.h [__sequent__]: #undef _PTRDIFF_T_ at beginning, if defined.

	* reload1.c (emit_reload_insns): Error instead of abort
	if an asm has a VOIDmode output operand.

	* reload.c (push_reload): Move the NO_REGS abort after the
	error check for asms, to avoid crashing for asms.
	Fix inmode and outmode too, if they are VOID for an asm.

Sun Dec 27 10:48:10 1992  Jeffrey A Law  (law@schirf.cs.utah.edu)

	* reorg.c (mostly_true_jump): When trying to determine
	if the current insn is essentially a conditional return,
	look inside of SEQUENCE insns for jumps.
	Predict jumps to the exit test for loops as likely to be taken.

Sun Dec 27 06:53:39 1992  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* reorg.c (relax_delay_slots): Only look at JUMP_LABEL for a
	condjump_p.

	* jump.c (delete_jump): Use single_set to see if INSN just sets PC.
	Remove code to delete previous cc0-setting insn.
	(delete_compution): No longer conditional on #ifndef HAVE_cc0.
	If insn uses CC0, delete previous insn that just sets CC0 for us;
	do deletion via recursive call.

	* combine.c (subst, case SET): Call recog_for_combine with OTHER_INSN,
	not UNDOBUF.OTHER_INSN.

	* genoutput.c (have_error): New variable.
	(error): Set it.
	(main): Test it and return FATAL_EXIT_CODE if it is set.

	* emit-rtl.c (copy_rtx_if_shared): A CONST can be shared if it
	contains a SYMBOL_REF.
	* rtl.c (copy_rtx): Likewise.
	A SCRATCH must be shared.
	A MEM may be shared if it is at a constant address.

Sun Dec 27 02:48:27 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* cccp.c (macroexpand): Expand each macroarg first time we find a need
	to substitute its expansion.
	(macarg): Don't expand them here.

	* expr.c (expand_expr, constructor case): If we made a stack slot,
	set MEM_IN_STRUCT_P if the type warrants it.

	* configure: When testing existence of a config file, specify $srcdir.

Sat Dec 26 18:12:08 1992  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* tree.c (make_node, case 'c'): For INTEGER_CST, use size of
	struct containing constant, just like for reals.  Also, clean
	up code to avoid confusing fallthrough.

	* a29k/unix.h, rs6000/aix32.h, rs6000/mach.h, rs6000/xm-mach.h:
	Include main file from subdirectory.

	* config/a29k, config/alpha, config/romp, config/rs6000: New
	directories.
	* configure: If a file isn't in config, try in config/$cpu_type.
	(a29k, alpha, romp, rs6000): Files moved to new machine subdirectories.
	Delete lines that duplicate default actions of configure.

	* combine.c (gen_lowpart_for_combine): Allow MODE to be wider
	than a word in restricted circumstances.

	* c-typeck.c (check_format): Using both a precision and the `0' flag
	is only a problem on `d', `i', `o', `u', `x', and `X' conversions.

Sat Dec 26 17:05:24 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* object.h: Don't include objc.h or stdio.h.
	Change Class_t to Class everywhere.
	(id, nil, Nil, Class, STR, SEL, IMP, BOOL, YES, NO): Define,
	but not if objc.h was already included.
	[__objc_INCLUDE_GNU] (Class): Alias this to Class_t.

	* object.m: Include objc.h and stdio.h before object.h.

Sat Dec 26 05:12:05 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* Version 2.3.3 released.

Fri Dec 25 06:53:49 1992  Richard Kenner  (kenner at vlsi1.ultra.nyu.edu)

	* expmed.c (store_bit_field): If VALUE needs to be narrowed, do
	it with gen_lowpart, not an explicit SUBREG.

	* a29k.md (divsf3): Fix typo in mode of DIV.

Fri Dec 25 00:03:26 1992  James Van Artsdalen  (james at bigtex.cactus.org)

	* Makefile.in (install-dir): Add missing semicolon.

	* i386sco4.h (_KR, _SVID, _NO_PROTOTYPE): Define if -traditional.

Thu Dec 24 15:02:29 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* fixinc.svr4: Don't change bitfield types to int.

	* seq386.h (TARGET_DEFAULT): Override.

Wed Dec 23 20:19:17 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* i386sco4.h (CPP_SPEC): Avoid repeated def of _M_SYSV.

Tue Dec 22 15:40:08 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* c-decl.c (store_parm_decls): Use TYPE_MAIN_VARIANT to compare types
	when merging info from previous prototype.

	* fixinc.svr4: Add special fixes for netinet/in.h and sys/endian.h.

Mon Dec 21 02:58:27 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* m68kv4.h (ASM_OUTPUT_CASE_END):
	Use switch_table_difference_label_flag.

	* configure (m68k-motorola-sysv*): Set use_collect2.

Sat Dec 19 20:19:44 1992  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* a29k.c (secondary_reload_class): Return CR_REGS for larger than
	word memory, and BP_REGS for part-word mem with no DW.

	* a29k.md: Consistently use `&' in constraint of MATCH_SCRATCH.
	Always use a reg as 4th arg of dmac/fmac even if ignored by insn.
	Uses of `b' as a constraint in multi-word reload patterns should
	be `c'.

Sat Dec 19 01:32:13 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* Makefile.in (all.cross): Add `specs' as dep.

	* build-make (CC): Delete the -V option.

	* getpwd.c (getpwd): Don't get upset if ERANGE is not defined.

Fri Dec 18 20:56:59 1992  John Hassey  (hassey@dg-rtp.dg.com)

	* objc-actions.c (build_encode_expr):
	Terminate the encode string with a null.
	(encode_aggregate): Distinguish pointer to record from a
	record.  Output fields for record.  Fix unions.

Fri Dec 18 17:17:39 1992  Michael Meissner  (meissner@osf.org)

	* mips.h (MIPS_VERSION): Set Meissner version # to 33.
	(struct mips_args): Add support for passing QI/HI mode structures
	the way the MIPS compiler passes them.
	(SIZE_TYPE, PTRDIFF_TYPE): Define as unsigned int, and int if not
	defined already.

	* mips.c (init_cumulative_args): Use a static structure to
	initialize the CUMULATIVE_ARGS structure.
	(function_arg_advance): Add a newline at the end of debug output.
	(function_arg): If a structure is passed as a QImode or HImode
	value in a register, record the fact for the call define_expands
	and prologue expander to move the structure into the high part of
	the register, and back again.  If debugging, print if the argument
	is a structure.
	(mips_expand_prologue): Shift any QI/HI structures passed back, so
	they can be used as normal QI/HI values.

	* mips.md (call): If there were any tiny structures passes as
	QI/HI modes in registers, shift the register, so that the
	structure value is in the high part of the register.
	(call_value): Ditto.
	(call_internal): Delete creating $31 rtx, since we can get it from
	the normal insn patterns.
	(call_value_internal): Ditto.

Fri Dec 18 05:14:14 1992  Brendan Kehoe  (brendan@lisa.cygnus.com)

	Make abstract virtual functions work.
	* cp-call.c (compute_conversion_costs): Undo change of Sept 1 about
	setting HARSHNESS to 0 re: the conversion of the first argument.
	(build_method_call):  Delete the code that redid the RTL for calling
	the right fn, since we will now behave correctly.  (Even with this,
	we ended up calling the wrong fn---the base class, rather than the
	derived one.)

	* cp-decl2.c (grokclassfn): Try using the local value for a nested
	type if the IDENTIFIER_TYPE_VALUE isn't there.

	* cp-method.c (build_overload_nested_name): Use DECL_NAME instead of
	DECL_ASSEMBLER_NAME, since pushtag now mangles together
	DECL_ASSEMBLER_NAME.  This will make us emit `Q21D1B', not `Q221D1B'.

Thu Dec 17 17:51:16 1992  Roland McGrath  (roland@churchy.gnu.ai.mit.edu)

	* Makefile.in (install-dir): Added missing then and semicolon.

Thu Dec 17 15:19:36 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* x-i386s4 (CC): New assignment.

Wed Dec 16 15:49:11 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* objc-actions.c (finish_objc) [OBJC_SELECTORS_WITHOUT_LABELS]:
	Always call build_selector_translation_table.

	* Makefile.in (install-dir):
	If cross-compiler, create $(tooldir) and $(assertdir). 

Wed Dec 16 14:19:08 1992  Richard Kenner  (kenner at vlsi1.ultra.nyu)

	* rs6000.h (INITIALIZE_TRAMPOLINE): Get function address and toc
	pointer from correct place relative to FNADDR.

	* varasm.c (assemble_trampoline_template): If TRAMPOLINE_SECTION
	is defined, put the trampoline template into that section.

	* alpha.h (TRAMPOLINE_SECTION): New macro.

Wed Dec 16 14:19:41 1992  Jim Wilson  (wilson@wookumz.gnu.ai.mit.edu)

	* reload.c (get_secondary_mem): Don't save address if it isn't valid.

Wed Dec 16 13:59:17 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* varasm.c (assemble_trampoline_template):
	Use readonly_data_section, not text_section.

Wed Dec 16 11:32:11 1992  Michael Meissner  (meissner@osf.org)

	* mips.h (MIPS_VERSION): Set Meissner version # to 32.
	(compute_frame_size): Change function return type to long.
	(epilogue_reg_mentioned_p): New function decl.
	(mips_frame_info): Change unsigned longs to longs.
	(ELIGIBLE_FOR_EPILOGUE_DELAY): Call epilogue_reg_mentioned_p.

	* mips.c (epilogue_reg_mentioned_p): New function to return true
	if any register used in the epilogue sequence is referenced.  If
	the stack size is greater than 32k bytes, return true for
	registers $8 and $9, since they are used to hold temps.
	(compute_frame_size): Change return type & variables to long.
	(compute_frame_size): Use 1L in shifts to create GP save mask.
	(save_restore): Merge function into save_restore_insns.
	(save_restore_insns): Add FILE * argument, to write to the .s
	file if non-NULL -- otherwise produce insns.  Add arguments to
	pass in that the prologue/epilogue has loaded the stack size into
	$8 if large stack frame.  Completely rewrite large stack frame
	support, so that it doesn't abort if large stack frame, saved GP
	registers, and no saved FP registers.  If large stack frame, use
	stack size stored in $8 if we can.
	(function_prologue): Make tsize long.
	(function_epilogue): Ditto.
	(mips_expand_prologue): Ditto.
	(mips_expand_epilogue): Ditto.
	(mips_expand_prologue): Change call to save_restore_insns.
	(mips_expand_epilogue): Ditto.
	(function_epilogue): Call save_restore_insns instead of
	save_restore.

Wed Dec 16 07:33:08 1992  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* stmt.c (expand_goto): Set LABEL_REF_NONLOCAL_P in the LABEL_REF
	we make in the non-local case.

	* varasm.c (assemble_trampoline_template): Always put template in
	text section.

Wed Dec 16 05:04:06 1992  Tom Wood  (wood@dg-rtp.dg.com)

	* combine.c (try_combine): Allow for the case where I3 becomes an
	unconditional jump when it is the last nonnote insn.

Tue Dec 15 20:30:06 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* cccp.c (do_pragma): Use index, not strchr.

	* seq386.h (FUNCTION_PROFILER): Add missing . to label name.

	* reload1.c (eliminate_regs_in_insn): Test old_body, not new_body,
	since people have tested it that way.

	* reload1.c (eliminate_regs_in_insn): Don't recopy new_body
	if it is an asm_operands insn.

Tue Dec 15 19:42:58 1992  Jim Wilson  (wilson@wookumz.gnu.ai.mit.edu)

	* sparc.md (return peepholes): Add QImode and HImode move/return
	patterns.

Tue Dec 15 17:42:07 1992  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* alpha.h (ASM_SPEC): New macro.

	* alpha.h (TRAMPOLINE_{TEMPLATE,SIZE}, INITIALIZE_TRAMPOLINE):
	Make major changes to fix numerous bugs.
	(TRANSFER_FROM_TRAMPOLINE): New macro.
	* alpha.md: Add new UNSPEC_VOLATILE 0 to flush instruction cache.

Mon Dec 14 13:16:14 1992  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* rs6000.c (output_epilog): Support LANGUAGE_STRING values for F77,
	Ada, and Pascal.

Sun Dec 13 16:42:26 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* fixinc.sco: Complete rewrite by ian@cygnus.com.

Sat Dec 12 17:51:43 1992  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* va-alpha.h: Correctly form multi-word object.

	* alpha.c (alpha_builtin_savregs): Correctly compute ARGSIZE and NREGS.

	* alpha.h (FUNCTION_ARG_PASS_BY_REFERENCE): Deleted.

Sat Dec 12 08:42:43 1992  Jeffrey A. Law  (law@schirf.cs.utah.edu)

	* pa-hpux.h (TARGET_DEFAULT): Do not enable TARGET_SHARED_LIBS
	by default in 2.3.3 since it doesn't really work.
	* pa-ghpux.h, pa1-hpux.h, pa1-ghpux.h: Likewise.

	* pa.md (floatsisf, floatsidf): Do not accept general registers.

Fri Dec 11 00:13:52 1992  Ian Lance Taylor  (ian@cygnus.com)

	* configure (i[34]86-*-sco3.2v4*): Use fixinc.sco.
	* fixinc.sco: New file.
	Like fixinc.svr4 but turn !__STDC__ into !__STRICT_ANSI__.  Don't
	require space after getcwd argument in stdlib.h.
	* x-i386s4: Don't use rcc:
	(CC, OLDCC, RCCFLAGS, CCLIBFLAGS): Vars deleted.
	* xm-i386sco.h (ONLY_INT_FIELDS): Define if not __GNUC__.
	(CODE_FIELD_BUG): Likewise.
	* rtl.h (struct rtx_def) [ONLY_INT_FIELDS]: Handle CODE_FIELD_BUG.

Fri Dec 11 17:56:53 1992  Brendan Kehoe  (brendan@mole.gnu.ai.mit.edu)

	* cp-search.c (lookup_nested_field): Check for assignment to members
	of an enclosing class only when looking at a member, not at other
	things (like nested types).

	* cp-cvt.c (convert_to_reference): If a conversion can be found via
	a constructor, then use it.  Also fix a typo about when to
	return the result of a type conversion.

Fri Dec 11 08:15:53 1992  James Van Artsdalen  (james@bigtex.cactus.org)

	* reload1.c (choose_reload_regs): Don't inherit a reload if the
	previous reload wasn't at least as wide as the current reload.

Fri Dec 11 07:19:11 1992  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* alpha.c (output_epilog): Remove garbage from one decl of EXTRA.
	Subtract, not add, size from frame pointer.

	* a29kunix.h (LINK_SPEC): Use -T, not -c, for new gld and change file
	name to default.gld from default.ld.

	* function.c (assign_outer_stack_local): Align proper frame offset.

	* loop.c (get_condition): Check for overflow when canonicalizing
	comparison.

Thu Dec 10 15:53:41 1992  Jim Wilson  (wilson@wookumz.gnu.ai.mit.edu)

	* enquire.c (i_define, u_define, f_define): Add #undef before #define.
	* fixinc.svr4 (limits.h):  Add #ifndef/#endif around macros that
	are supposed to be defined in float.h.

	* combine.c (try_combine): Only use I2DEST as a scratch reg for
	a split if it does not overlap any inputs of NEWPAT.

Thu Dec 10 10:23:28 1992  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* combine.c (get_last_value): Never use value from later insn, even
	if reg is only set once.

	* c-tree.h (IDENTIFIER_LIMBO_VALUE): Delete duplicate definition.

Thu Dec 10 08:54:03 1992  Tom Wood  (wood@dg-rtp.dg.com)

	* i386sco4.h (CPP_PREDEFINES): Define i386 and unix here.
	(CPP_SPEC): Not here.

Wed Dec  9 19:03:55 1992  Jeffrey A. Law  (law@schirf.cs.utah.edu)

	* pa.h (ASM_DECLARE_FUNCTION_NAME): Correctly get the return type
	of DECL.

	* x-pa (CC): Set to "/usr/local/bin/gcc" instead of
	"/usr/local/gcc".

Tue Dec  8 17:50:26 1992  Michael Meissner  (meissner@osf.org)

	* mips.h (MIPS_VERSION): Bump Meissner version number to 31.
	(LEGITIMIZE_ADDDRESS): Split large offsets, even when not
	optimizing.  Otherwise, illegal stack offsets can be generated.

Tue Dec  8 11:55:52 1992  Jeffrey A. Law  (law@schirf.cs.utah.edu)

	* pa.md (sh[123]add): Use "shadd_operand" as the predicate for
	operand one.
	* pa.c (shadd_operand): New function.

Tue Dec  8 08:30:13 1992  Tom Wood  (wood@dg-rtp.dg.com) 

	* hp320.h (AS_BUG_FLOATING_CONSTANT, AS_BUG_TRAILING_LABEL): New.
	(TEXT_SECTION_ASM_OP, DATA_SECTION_ASM_OP): Output align 1 to
	accomodate the "trailing label" bug.
	(ASM_OUTPUT_DOUBLE_OPERAND, ASM_OUTPUT_FLOAT_OPERAND): Define to
	output values in hex to accomodate the "floating constant" bug.
	(PRINT_OPERAND_FLOAT, PRINT_OPERAND): Ditto.

	* gcc.c (temp_names): New variable.
	(do_spec_1): Rewrite MKTEMP_EACH_FILE for %g/%u/%U.
	(choose_temp_base): Abort if mktemp yields a null string.

Tue Dec  8 08:30:13 1992  Niklas Hallqvist  (niklas@della.appli.se)

	* integrate.c (expand_inline_function): Don't output line notes
	for implicit formals.

Tue Dec  8 06:21:44 1992  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* cse.c (max_uid): New variable.
	(cse_end_of_basic_block): Use it to ignore insns made by CSE.
	(cse_main): Set it.

Mon Dec  7 21:22:29 1992  Brendan Kehoe  (brendan@mole.gnu.ai.mit.edu)

	* cp-init.c (do_friend): Revert change of Sept 1; it seems to have
	broken properly emitting friends.

Mon Dec  7 19:09:25 1992  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* reload1.c (eliminate_regs_in_insn): Make another copy of all the
	RTL if we changed something and we aren't permanently replacing.

	* romp.md (reload_out{q,h}i): Write as proper PARALLEL.

Sun Dec  6 16:27:14 1992  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* alpha.md (add-mult): Add missing `&' in constraints of kludge
	plus/plus/mult pattern.

Sun Dec  6 16:26:42 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* optabs.c (expand_binop): Correct sign of complex quotient imagpart.

Sun Dec  6 07:59:16 1992  Michael Meissner  (meissner@osf.org)

	* mips.h (MIPS_VERSION): Set Meissner version # to 30.
	(LEGITIMIZE_ADDRESS): For <reg>+<large int> addresses, rewrite so
	that <reg> + (<large int> & ~0x7fff) is put into a pseudo reg.
	This is to allow CSE to generate better code for repeated
	references in the same general vicinity, such as when large stack
	frames are used.

	* config/dec-osf1.h (LINK_SPEC): Pass -call_shared, -no_archive,
	and -exact_version to the linker.  If -call_shared, do not pass
	-non_shared to the linker.
	* mips-5.h (LINK_SPEC): Ditto.
	* mips-5bsd.h (LINK_SPEC): Ditto.
	* mips-svr4.h (LINK_SPEC): Ditto.
	* mips-sysv.h (LINK_SPEC): Ditto.

Fri Dec  4 19:50:29 1992  david d `zoo' zuhn  (zoo at cirdan.cygnus.com)

	* fixincludes: fix _cplusplus typo in SCO's tinfo.h

Fri Dec  4 19:22:35 1992  Randy S. Welch  (randy@kcin.alphacdc.com)

	* xm-plexus.h: New file.
	* configure (m68k-plexus-sysv*): Use it.

Fri Dec  4 19:21:44 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* c-decl.c (start_function): Use TYPE_MAIN_VARIANT when comparing
	return type with previous prototype declaration. 

	* cccp.c (output_line_command): Use alloca for line_cmd_buf.

Fri Dec  4 19:20:34 1992  Richard Kenner  (kenner@mole.gnu.ai.mit.edu)

	* cse.c (cse_insn): Always pass result of canon_reg through
	validate_change before using it in insn.

	* c-decl.c, cp-decl.c (init_decl_processing): Don't use hardwired
	sizes for the modes when making int{Q,H,S,D}I_type_mode and the
	unsigned versions of them; the actual size depends on BITS_PER_UNIT.

Fri Dec  4 19:13:35 1992  Jonas Olsson  (ljo@po.cwru.edu)

	* i386bsd.h (ASM_OUTPUT_ADDR_DIFF_ELT, JUMP_TABLES_IN_TEXT_SECTION):
	Copy definitions from i386v4.h to get PIC code correct.

Thu Dec  3 19:20:14 1992  Brendan Kehoe  (brendan@lisa.cygnus.com)

	* cp-decl.c: Include sys/types.h for systems that need things for
	signal.h.

Thu Dec  3 01:40:42 1992  Jim Wilson  (wilson@wookumz.gnu.ai.mit.edu)

	* sparc.c (finalize_pic):  Remove "*_" from GLOBAL_OFFSET_TABLE name.
	* spc-sol2.h (ASM_SPEC): Pass "-K PIC" to assembler when pic.
	(JUMP_TABLES_IN_TEXT_SECTION): Define.
	(SELECT_RTX_SECTION): Define.

	* fixincludes (sys/types.h): Check for [ \t]size_t not size_t.

Wed Dec  2 15:40:36 1992  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* configure (rs6000-ibm-aix32): New target.
	* rs6000-aix32.h: New file.

Tue Dec  1 18:05:20 1992  Brendan Kehoe  (brendan@lisa.cygnus.com)

	* cp-type2.c (build_functional_cast): Revert change of Nov 2,
	concerning clearing the TREE_VALUE of a default parameter.

Tue Dec  1 13:33:25 1992  Jim Wilson  (wilson@wookumz.gnu.ai.mit.edu)

	* local-alloc.c (optimize_reg_copy_2): Correct reg_n_refs updates.

	* Makefile.in (INSTALLED_H): Add syslimits.h.

Tue Dec  1 11:09:50 1992  Brendan Kehoe  (brendan@lisa.cygnus.com)

	* cp-call.c (build_method_call): When looking for a default arg
	initialized by a ctor, be careful of a null ref w/ operand 1.

Tue Dec  1 10:43:13 1992  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* combine.c (num_sign_bit_copies): Return 1 on failure, not 0.
	Fix typo in last change; return 1 on failure, not BITWIDTH.

Tue Dec  1 09:39:47 1992  Michael Meissner  (meissner@osf.org)

	* mips.c (function_prologue): Do not emit a .loc before the
	function if debug level is 1.  This confuses gdb.

Tue Dec  1 02:48:29 1992  James Van Artsdalen  (james at bigtex.cactus.org)

	* isc.h (TARGET_DEFAULT): New macro - don't make TARGET_IEEE_FP
	default for ISC.

Fri Nov 27 01:30:41 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* Version 2.3.2 released.

	* objc/core.c (searchForMethodInHierarchy):
	If SEL or NAME is 0, return 0.

	* gcc.c (LINK_LIBGCC_SPECIAL_1): New parameter.
	* rs6000.h (LINK_LIBGCC_SPECIAL_1): Defined.

	* t-hp320g (RANLIB, RANLIB_TEST, AR, AR_FLAGS):
	Just copy value of ..._FOR_TARGET.
	(LIBCONVERT): Use TARGET_TOOLPREFIX.

	* reload.c (find_reloads) [SMALL_REGISTER_CLASSES]:
	Don't use preferred_class for a multiword register.

	* cccp.c (do_include): Initialize searchptr to 0.

Fri Nov 27 07:40:54 1992  Richard Kenner  (kenner at vlsi1.ultra.nyu.edu)

	* combine.c (subst, make_field_assignment, num_sign_bit_copies):
	Protect calls to significant_bits; unless we only care if the
	result is a power of two, don't call if mode size is wider
	than HOST_BITS_PER_WIDE_INT.
	(extended_count, simplify_shift_const, simplify_comparison): Likewise.

Thu Nov 26 10:31:48 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* gstdarg.h (va_end): #undef before the declaration.

	* gstdarg.h (va_arg): Alternative definition for big-endian machines.
	* gvarargs.h (va_arg): Copy both definitions from gstdarg.h.

	* limitx.h, limit.y: Test and define _GCC_LIMITS_H_, not _LIMITS_H_.

	* mips.c (mips_debugger_offset): Don't crash for unknown cases.

	* c-typeck.c (build_unary_op): Call pedantic_lvalue_warning
	for *all* cases of incrementing a cast.

	* libgcc2.c (__udiv_w_sdiv): Cast 1 before shifting by 31.

	* fixincludes (PWDCMD): New variable, set specially for Apollos.
	Use it to get the working dir.

	* combine.c (num_sign_bit_copies): Fix 1-off error in PLUS case.

	* c++: Put newline into `for arg do'.

Thu Nov 26 08:32:20 1992  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* expmed.c (struct algorithm): Make coeff a HOST_WIDE_INT.

	* romp.c (output_epilog): Always call output_fpops.

Wed Nov 25 16:24:43 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* Makefile.in (install-fixincludes): Use SYSTEM_HEADER_DIR.

	* m68ksgs.h (ASM_OUTPUT_DOUBLE_OPERAND): Really use the operand VALUE.

	* tree.h (CONSTRUCTOR_NAME_FORMAT): Let config.h override this.
	* tower-as.h (CONSTRUCTOR_NAME_FORMAT): Defined.

	* c++: Replace `for arg do' which ash can't handle.

	* t-next (OTHER_FIXINCLUDES_DIRS): Delete /NextDeveloper/Headers.

	* apollo68.h (HAVE_ATEXIT): Commented out.

	* regclass.c: Fix typo in use of SECONDARY_INPUT_RELOAD_CLASS.
	(copy_cost): Fix typo in use of SECONDARY_OUTPUT_RELOAD_CLASS.

Wed Nov 25 14:15:50 1992  Jim Wilson  (wilson@sphagnum.cygnus.com)

	* fixinc.svr4 (regexp.h): Don't add a getrnge declaration if a
	conflicting declaration is already present.

Wed Nov 25 06:47:18 1992  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* rs6000.h (LINK_LIBGCC_SPECIAL): No longer define.

	* stmt.c (expand_value_return): Don't emit move between differing
	modes when PROMOTE_FUNCTION_RETURN is defined; convert instead.

	* integrate.c (expand_inline_function): Ensure a REG used as
	COPY has REG_USERVAR_P set if LOC does.

	* optabs.c (expand_binop, expand_twoval_binop): If we are going
	to fail, remove any load from MEM we did due to -fforce-mem;
	if the MEM was volatile, this will cause an extra load.
	(expand_complex_abs): Likewise.
	Correct use of variable LAST so it doesn't include the load
	from MEM (to fix unrelated bug).

Tue Nov 24 00:23:39 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* i386bsd.h (FUNCTION_PROFILER): Use mcount, not _mcount.

	* t-next (OTHER_FIXINCLUDES_DIRS): Leave just /LocalDeveloper/Headers
	and /NextDeveloper/Headers.

Mon Nov 23 22:06:31 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* ns32k.md (movsi): Split alt 1 to deprecate xy classes in operand 1.

	* combine.c (make_extraction): When making a low part subreg of a reg,
	use inner_mode, not is_mode.

Mon Nov 23 21:11:13 1992  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* romp.h (ASM_FILE_START): Stop at first blank in VERSION_STRING.

Mon Nov 23 21:09:20 1992  Tom Wood  (wood@dg-rtp.dg.com)

	* fold-const.c (range_test): Convert the constants to the unsigned
	type before expanding the range test.

Mon Nov 23 20:54:45 1992  Brendan Kehoe  (brendan@lisa.cygnus.com)

	Mon Nov 23 13:21:43 1992  Brendan Kehoe  (brendan@cygnus.com)

	* c++ (first): Only shift if $first is no, on the chance we got no
	arguments at all.  If we didn't get anything, say so (since -lg++
	will fake out the gcc driver into thinking we want to do something).

	* cp-decl.c (start_decl): If grokdeclarator returns a
	void_type_node, return a NULL_TREE.

	* cp-typeck.c (build_modify_expr_1): When calling build_opfncall for
	`operator=', use make_node to create a plain NOP_EXPR for it to use,
	rather than trying to pass NOP_EXPR down hoping it gets there intact.
	(build_modify_expr): Ditto.
	* cp-parse.y (expr_no_commas): Ditto.
	* cp-method.c (build_opfncall): Use TREE_CODE on ARG3 for a
	MODIFY_EXPR, since it'll be coming in properly as a tree now.

	Sat Nov 21 02:33:28 1992  Brendan Kehoe  (brendan@cygnus.com)

	* cp-init.c (expand_default_init): Clear DECL_REGISTER if we're
	going to call a ctor, otherwise we may end up generating bogus and
	confusing error messages about taking the addr of something declared
	to be `register'.

	* cp-typeck.c (build_x_function_call): Recognize a ptr-to-method
	that is being passed in as a function argument or as part of
	a COMPONENT_REF.
	(build_indirect_ref): If ERRORSTRING is NULL (it's passed in that
	way in many places), then don't try to use it.

	Thu Nov 19 01:41:58 1992  Brendan Kehoe  (brendan@lisa.cygnus.com)

	* cp-dem.c (do_builtin_type): Recognize `w', a wide character, since
	it's now a type according to the ANSI X3J16 working paper; output
	"wchar_t" for it.
	(cplus_demangle): Accept `w' as an integral type.

	Wed Nov 18 21:29:14 1992  Brendan Kehoe  (brendan@cygnus.com)

 	* cp-class.c (finish_struct): Re-enable code to cut down on the size
	of symbol output, the positives outweigh the negatives.

	Wed Nov 18 19:51:59 1992  Mike Stump  (mrs@cygnus.com)

	* cp-search.c (dfs_walk): Move setting of
	vbase_decl_ptr_intermediate out of #ifdef code.

	Wed Nov 18 18:49:13 1992  Mike Stump  (mrs@cygnus.com)

	* cp-decl.c (grokdeclarator): Make wording on error message
	stronger.

	Tue Nov 17 17:46:11 1992  Brendan Kehoe  (brendan@cygnus.com)

	* cp-search.c (CHECK_convert_pointer_to_single_level): Don't define.

Mon Nov 23 19:44:38 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* mot3300.h (switch_table_difference_label_flag): Define it.

	* ns32k.md (addsi3): Add & for alternative 1 in operand 0.

Mon Nov 23 18:29:27 1992  Jim Wilson  (wilson@sphagnum.cygnus.com)

	* genattrtab.c (obstack.h): Include after sys/time.h.

	* c-decl.c (duplicate_decls): For builtins, create new function
	type instead of trying to modify old one.

Mon Nov 23 16:28:36 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* i386bsd.h (COMMENT_BEGIN): Redefine as #.
	(ASM_APP_ON, ASM_APP_OFF): Redefine to use #.

	* combine.c (num_sign_bit_copies): Inhibit x-1 special case
	when x is a paradoxical subreg.

	* xm-linux.h (malloc, calloc): Definitions deleted.

Mon Nov 23 11:52:41 1992  Jeffrey A. Law  (law@schirf.cs.utah.edu)

	* pa.md (sh[123]add): Use "nonmemory_operand" instead of 
	"register_operand" as the predicate for the first operand.

Mon Nov 23 00:29:27 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* gcc.c (default_compilers): Pass -i* after -U*.

Sun Nov 22 17:03:48 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* hp320.h (FUNCTION_PROFILER): Complete replacement.

	* xm-hp320.h (index, rindex): Defined.

	* gstddef.h: Fix prev change; test of _STDDEF_H was backwards.

Sun Nov 22 16:12:38 1992  Tom Wood  (wood@dg-rtp.dg.com)

	* toplev.c (W_options): Delete -Wreturn-type, as it is in lang_options.
	* c-decl.c (c_decode_option): Decode -Wreturn-type.

	* c-decl.c, cp-decl.c (pushdecl): Don't inherit DECL_INITIAL when
	redeclaring the current function.

	* integrate.c (expand_inline_function): Use the original
	declaration of the inlined function rather than a redeclaration as
	the BLOCK_ABSTRACT_ORIGIN of the body.

Sat Nov 21 19:54:57 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* cccp.c (main): Do -D's and -A's and -U's in order specified.

	* gcc.c (default_compilers): When running cpp,
	move %{D*} and %{U*} (in that order) just before %i.

Sat Nov 21 18:24:55 1992  Torbjorn Granlund  (tege@hal.gnu.ai.mit.edu)

	* xm-pa.h: Remove #ifdef hpux stuff.
	(S_ISDIR): Remove.
	* xm-pahpux.h: New file, developed from old xm-pa.h.  Define
	rindex/index.
	* pa-hpux7.h, pa-gux7.h: New files.

	* configure (hppa1.0-*-hpux*, hppa1.0-*-hpux*): Use xm-pahpux.h.
	(hppa1.0-*-hpux7*): New alternative.

Sat Nov 21 14:10:57 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* spc-sol2.h (SWITCH_TAKES_ARG, LINK_SPEC): New override definitions.

	* xm-mot3300.h (index, rindex): Defined.

Sat Nov 21 07:54:53 1992  Michael Meissner  (meissner@osf.org)

	* mips.h (MIPS_VERSION): Set Meissner version number to 29.

	* mips.c (mips_expand_prologue): If profiling, emit an insn to
	block other insns from being scheduled before the end of the
	prologue.

	* mips.md (blockage): New unspec_volatile insn to prevent other
	insns from being scheduled before it.

Sat Nov 21 06:03:38 1992  Brendan Kehoe  (brendan@cygnus.com)

	* sdbout.c (template_name_p): New function.
	(sdbout_record_type_name): Use it to possibly use the
	DECL_ASSEMBLER_NAME instead of DECL_NAME if looking at a template.
	(sdbout_symbol): Ditto.

Fri Nov 20 15:31:05 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* dbxout.c (dbxout_type): Handle need for name of a RECORD_TYPE
	when it has none.

	* configure (sparc-*-solaris2): Set broken_install.

	* integrate.c (subst_constants): Inhibit special treatment of subreg
	when the stuff inside is not a reg.

	* config/plexus.h (SIZE_TYPE): Fix syntax.

	* gcc.c (do_spec_1): Handle MKTEMP_EACH_FILE.

Fri Nov 20 15:10:20 1992  david d `zoo' zuhn  (zoo at cirdan.cygnus.com)

	* fixincludes (math.h): Get rid of inconsistent inline definitions
	for abs that are present in HP-UX 8.0.

Fri Nov 20 10:07:48 1992  Michael Meissner  (meissner@osf.org)

	* collect2.c (FREAD, FWRITE): Undef these macros if they were
	defined before including ldfcn.h.

Fri Nov 20 15:38:47 1992  Tom Wood  (wood@dg-rtp.dg.com)

	* integrate.c (expand_inline_function): Mark all notes as integrated.

	* final.c (final): When producing SDB debugging info, delete line
	number notes from inlined functions in other files as well as
	duplicate line number notes.

Fri Nov 20 05:24:16 1992  Jim Blandy  (jimb@totoro.cs.oberlin.edu)

	* config.sub: Added machines and operating systems for Emacs
	ports, since Emacs now uses config.sub for its configuration.
	New manufacturers recognized not to be operating systems: High
	Level Hardware (highlevel, defaults to using BSD), Gould
	(gould, defaults to System V), Commodore (cbm, defaults to
	amigados), National Semiconductor (ns, defaults to Genix), and
	Masscomp (masscomp, defaults to RTU).
	Recognize the NS1600 (ns16k) and the Clipper (clipper) as
	processors.
	Recognize these processors with default manufacturers: the
	Cydra (cydra) from Cydrome (cydrome), the XPS100 (xps100) from
	Honeywell (honeywell), and the Orion (orion) and Orion 1/05
	(orion105) from High Level Hardware (highlevel).
	If the ISC operating system is given with a version number,
	don't kill it and set it to 2.2; just have it default to 2.2
	if omitted.
	Make Irix SGI's default operating system, not SYSV.
	Make BSD Encore's default, so it applies for all Encore
	machines, not just the umax and mmax abbreviations.
	All of Encore's machines use BSD, not just the ns32k-based
	ones.  Make it the manufacturer's default.
	Make it possible to specify an operating system for a Gould
	machine.  Make sysv the manufacturer's default, so it applies
	when we specify the manufacturer as well as when we omit it.
	Add Uniplus (uniplus), Iris (iris), Xenix (xenix), and RTU
	(rtu) as recognized operating system names.

Wed Nov 18 17:58:18 1992  Karl Berry  (karl@cs.umb.edu)

	* i386iscgas.h (SDB_DEBUGGING_INFO): #undef.
	(DBX_DEBUGGING_INFO): #define.
	(DBX_OUTPUT_MAIN_SOURCE_{DIRECTORY,FILENAME}): Override dbxout.c.

	* bsd386.h (LPREFIX) [NO_UNDERSCORES]: Define as `.L'.

Wed Nov 18 13:50:43 1992  Michael Meissner  (meissner@osf.org)

	* mips.c (compute_frame_size): Make sure the {gp,fp}+offset fields
	are always initialized, even if there were no gp/fp registers
	saved.

Wed Nov 18 09:58:50 1992  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* a29k.md (insv): Remove constraints from operand matching
	const_0_operand.

 	* regclass.c (regclass): Add missing cast from enum to int.

Wed Nov 18 09:40:01 1992  John Hassey  (hassey@dg-rtp.dg.com)

	* core.c (initialize_class): The class may not have an initialize
	method.

Wed Nov 18 09:40:01 1992  Wilson Tien  (wtien@urbana.mcd.mot.com)

	* xm-m68kv.h (rindex, index): use strrchr and strchr instead.

Wed Nov 18 01:27:37 1992  Jim Blandy  (jimb@wookumz.gnu.ai.mit.edu)

	* config.sub: Added Xenix operating system.

Tue Nov 17 18:32:01 1992  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* reload.c (combine_reloads): Don't combine with a reload needed
	for multiple things.

Mon Nov 16 08:52:52 1992  Jeffrey A. Law  (law@mole.gnu.ai.mit.edu)

	* pa.c (output_move_double): Handle indirect stores to memory
	via an auto-incremented/auto-decremented register in the same
	manner in which loads are handled. 

Thu Nov 12 21:02:59 1992  Brendan Kehoe  (brendan@mole.gnu.ai.mit.edu)

	Cygnus<-->FSF merge.

	Thu Nov 12 15:02:53 1992  Brendan Kehoe  (brendan@cygnus.com)

	* tree.h (value_member, purpose_member, binfo_member,
	tree_int_cst_equal, tree_int_cst_lt, index_type_equal,
	expand_decl_init): Add decls with prototypes.

	* cp-decl.c (finish_decl): Don't try to use TYPE if it's an
	error_mark_node.

	* cp-decl.c (sigsegv): Set to the default handler before calling
	anything, so we can avoid possible infinite loops.  Call
	my_friendly_abort instead of just error().
	* cp-type2.c (my_friendly_abort): If I is 0, it's coming from sigsegv.

	* cp-type2.c (my_friendly_assert): New function.
	* cp-call.c, cp-class.c, cp-class.h, cp-cvt.c, cp-decl.c, cp-decl.h,
	cp-decl2.c, cp-dem.c, cp-edsel.c, cp-except.c, cp-expr.c, cp-gc.c,
	cp-hash.h, cp-init.c, cp-input.c, cp-lex.c, cp-lex.h, cp-method.c,
	cp-pt.c, cp-search.c, cp-spew.c, cp-tree.c, cp-tree.h, cp-type2.c,
	cp-typeck.c, cp-xref.c, cp-parse.y: Don't include assert.h, and use
	the new function `my_friendly_assert' instead of the `assert' macro.

	Wed Nov 11 22:14:51 1992  Brendan Kehoe  (brendan@lisa.cygnus.com)

	* tree.h (perm_calloc): Add decl.
	* cp-parse.y (except_stmts): Declare return type of get_insns,
	since we don't (can't) include rtl.h.
	* cp-tree.c (TYPE_HASH): Use HOST_WIDE_INT instead of int when
	casting pointers to integers.
	(ld_cmp): Likewise.
	* cp-call.c (build_method_call): Likewise.
	* cp-class.c (finish_struct_methods): Likewise.
	* cp-method.c (build_overload_value): Add decl of index.
	(build_opfncall): Cast to HOST_WIDE_INT, not int.
	* cp-search.c (get_binfo): Likewise.
	(get_base_distance): Likewise.
	(breadth_first_search): Likewise.  Also declare to return
	HOST_WIDE_INT, not int.

	Wed Nov 11 14:34:25 1992  Mike Stump  (mrs@rtl.cygnus.com)

	Thu Nov  5 15:58:38 1992  Tim Moore  (moore at defmacro.cs.utah.edu)

	* cp-decl.c (duplicate_decls): Round to obstack alignment when
	testing if newdecl is at the top of the permanent obstack.

	Wed Nov 11 13:56:18 1992  Mike Stump  (mrs@rtl.cygnus.com)

	* cp-search.c (build_vbase_vtables_init): Make sure external virtual
	tables are declared on machines that need the declaration by calling
	assemble_external.

	Wed Nov 11 12:51:44 1992  Brendan Kehoe  (brendan@lisa.cygnus.com)

	* cp-decl2.c (grokfield): If the init field is really a list with
	just an error_mark_node, then it wasn't a real initialization, so
	don't treat it like one.

	Tue Nov 10 16:21:20 1992  Brendan Kehoe  (brendan@lisa.cygnus.com)
 
	* cp-init.c (build_new): If arg 1 of an array reference is an
	error_mark, then just pretend that there were 0 elements.

	Tue Nov 10 13:23:30 1992  Brendan Kehoe  (brendan@lisa.cygnus.com)

	* cp-typeck.c (build_x_function_call): If the type of FUNCTION is an
	error_mark, don't bother checking its lang-specific info.

	Tue Nov 10 12:38:36 1992  Mike Stump  (mrs@rtl.cygnus.com)

	* cp-decl.c (decls_match): Avoid core dumping when TREE_TYPE is
	NULL_TREE, as is the case when olddecl is a TEMPLATE_DECL.

	Tue Nov 10 11:03:36 1992  Brendan Kehoe  (brendan@lisa.cygnus.com)
 
	* cp-decl.c (pushdecl_top_level): Disable assert for now; it's
	always acted correctly.
 
	Mon Nov  9 12:04:27 1992  Brendan Kehoe  (brendan@lisa.cygnus.com)

	* cp-parse.y (try_for_typename): Deleted rule.
	(scoped_id): Don't use it.

	Fri Nov  6 18:07:37 1992  Brendan Kehoe  (brendan@lisa.cygnus.com)

	* cp-init.c (expand_aggr_init): If INIT is 0, don't bother trying to
	play with its type.

	Thu Nov  5 16:52:37 1992  Chip Salzenberg  (chip@tct.com)

	* cp-decl.c (finish_decl): Set TREE_STATIC, TREE_PUBLIC and
	DECL_EXTERNAL correctly for use with #pragma interface.

	Fri Nov  6 10:07:01 1992  Brendan Kehoe  (brendan@lisa.cygnus.com)

	* cp-class.c (finish_struct): Don't try to work with a field that
	got a bogus type.

	* cp-method.c (build_overload_value): Don't call debug_tree!

	* cp-call.c (build_method_call): If processing a default argument
	that calls a ctor for its default value, use INSTANCE_PTR for the
	parm list, discarding what we knew before.

	* cp-decl.c (grokdeclarator): If initializing a const member and
	acting pedantic, then do make it an error. 

	* cp-decl2.c (warn_traditional): New variable.
	(lang_decode_option): Use it for -Wtraditional and -Wno-traditional.
	* cp-tree.h (warn_traditional): Add decl.
	* cp-lex.c (readescape): For x, avoid overflow when shifting in if.
	Warn for \a and \x if warn_traditional; pass through
	the escaped x and a if -traditional.  Support \e like \E; for both,
	pedwarn about ANSI C.

	* cp-call.c (find_scoped_type): Delete arg TAGS; instead, compute it
	inside from TYPE.  If TAGS is null, don't return immediately, since
	we need to look for TYPE_DECLs.
	(resolve_scope_to_name): Call find_scoped_type without replicating
	the tags.

	Thu Nov  5 17:53:32 1992  Brendan Kehoe  (brendan@cygnus.com)

	* cp-decl.c (grokdeclarator): Constant class members can be
	initialized.

	Thu Nov  5 17:11:30 1992  Mike Stump  (mrs@cygnus.com)

	Thu Nov 5 19:48:17 1992  Niklas Hallqvist  (niklas@appli.se)

	* cp-pt.c (instantiate_class_template): Types are used in later
	processing, so they must go into the permanent obstack.

	Thu Nov  5 13:02:56 1992  Brendan Kehoe  (brendan@lisa.cygnus.com)

	* cp-decl.c (grokdeclarator): Don't allow members to be initialized
	in the class declaration.

	* cp-decl2.c (finish_file): Set the DECL_CLASS_CONTEXT on a function
	that's a file-scope set of ctors/dtors for global variables, so
	is_friend will see things the way they should be seen.

	* cp-call.c (find_scoped_type): New function.
	(resolve_scope_to_name): Use it to check for names that might be in
	base classes.

	Wed Nov  4 00:43:15 1992  Brendan Kehoe  (brendan@lisa.cygnus.com)

	* cp-parse.y (db_yyerror): Deleted fn.
	(yyprint, yyerror, init_parse, yyhook, reduce_cmp, token_cmp,
	print_parse_statistics,set_yydebug, debug_yytranslate): Moved to
	cp-lex.c.
	(reduce_count, token_count): Ditto.
	(current_declspecs): Made static.

	* cp-typeck.c (build_c_cast): Warn if casting between a pointer and
	an integer whose sizes differ.

	* cp-parse.y (unary_expr): Finish making new with placement work;
	use the rule `new' instead of the token `NEW' when parsing it.

	Tue Nov  3 02:16:47 1992  Brendan Kehoe  (brendan@lisa.cygnus.com)

	* cp-typeck.c (c_expand_return): Avoid referencing DECL_NAME if it's
	null when checking for a ref to or the addr of a local variable.

	* cp-search.c (dfs_pushdecls): Don't try to use the context of a
	field which has none at the time.

	* cp-decl.c (redeclaration_error_message): Don't complain about
	redefinition of a function if it's a definition of an abstract
	virtual function.
	(duplicate_decls): For an abstract virtual, don't use the old RTL
	from abort when creating the RTL for the newdecl.

	Tue Nov  3 00:15:44 1992  Brendan Kehoe  (brendan@cygnus.com)

	* cp-decl.c (grokdeclarator): For `inline', `unsigned', and `signed',
	see them as types, not as storage class specs, when looking for more
	than one storage class.

	* cp-lex.c (readescape): New arg ignore_ptr.
	(real_yylex): Pass new arg, handle result that comes back.

	* cp-decl.c (WCHAR_TYPE_SIZE): Deleted; never used.

	Mon Nov  2 10:23:52 1992  Brendan Kehoe  (brendan@lisa.cygnus.com)

	* cp-lex.c (real_yylex): Let skip_white_space handle \r.

	* cp-parse.y (parmlist): Warn on a decl `foo (...)', without a first
	argument.

	* cp-type2.c (build_functional_cast): If expr_as_ctor's argument is
	a SAVE_EXPR, don't wipe out the argument.

	* cp-call.c (build_method_call): Only complain about not having an
	object for a called method if the method is non-static.

	Sun Nov  1 16:50:14 1992  Brendan Kehoe  (brendan@lisa.cygnus.com)

	* cp-decl2.c (warn_char_subscripts): Declare.
	(lang_decode_option): Handle -Wchar-subscripts.
	* cp-typeck.c (build_array_ref): If the type of either the array or
	its index is an error_mark_node, then return one.  Add code to see
	if the index is a character (add warning), then do the default
	promotions.  Don't warn if it's a register array. Make a ref
	volatile if the array is volatile.
	* cp-tree.h (warn_char_subscripts): Add decl.

	* cp-typeck.c (common_type): If either type is nonsense (an
	error_mark), use the other type.

	Thu Oct 29 18:39:50 1992  Mike Stump  (mrs@cygnus.com)

	* cp-decl.c (grokdeclarator): Fix problem introduce by me on Oct 22
	17:41:13.  Put back call to build_offset_type that I took out, as it
	is not wrong, as the comment for build_offset_type had led me to
	believe.

	Thu Oct 29 17:30:12 1992  Brendan Kehoe  (brendan@lisa.cygnus.com)

	* cp-cvt.c: Delete block-level extern decls; include flags.h instead.
	* cp-tree.h (flag_int_enum_equivalence): Declare here.
	* cp-call.c: Not here.

	* Makefile.in (stamp-cp-parse): There are now only 29 shift/reduce
	conflicts, because of the removed wrapper stuff.

	* cp-lex.c (lastiddecl, ridpointers): Define here.
	(NORID): Don't define here.
	* cp-lex.h (NORID): Define here instead.
	(ridpointers, lastiddecl, token_buffer, looking_for_typename): Ditto.
	(make_pointer_declarator, make_reference_declarator,
	reinit_parse_for_function, reinit_parse_for_method, yylex): Likewise.
	* cp-parse.y: Don't define any of them in here.

	* cp-typeck.c (commonparms): Call tree_cons with NULL_TREEs, not 0s.
	(convert_arguments): Likewise.
	Throughout the file, say `ANSI C++ forbids', not `ANSI C forbids'.
	* cp-lex.c, cp-type2.c: Likewise.

	Remove wrapper functionality from the compiler.
	* cp-call.c (build_method_call): Delete wrap and wrap_type.
	Delete code that used them. Don't set err_name to "wrapper", since
	wrapper_name doesn't exist anymore.
	* cp-class.c (finish_base_struct): Don't worry about TYPE_WRAP_TYPE.
	* cp-decl.c (grokfndecl): Delete code for WRAPPER_EXPR and
	ANTI_WRAPPER_EXPR.
	(grokdeclarator): Likewise.  Don't set TREE_HAS_WRAPPER_PRED.
	* cp-decl2.c (grokclassfn): Likewise.
	(check_classfn): Likewise.
	* cp-init.c (get_member_function): Don't check TYPE_NEEDS_WRAPPER.
	* cp-lex.c (real_yylex): Don't check WRAPPER_OR_ANTI_WRAPPER_NAME_P.
	* cp-method.c (wrapper_name, wrapper_pred_name, anti_wrapper_name):
	Deleted variables.
	(init_method): Don't do any setup for *WRAPPER_*.
	(hack_wrapper): Deleted function.
	* cp-parse.y (wrapper): Deleted rule.
	(identifier_or_opname): Deleted all wrapper predicates.
	(notype_declarator): Deleted predicates LEFT_RIGHT for wrappers.
	* cp-ptree.c (print_lang_type): Deleted message for printing "wrapper".
	* cp-search.c (get_wrapper): Deleted fn.
	* cp-tree.h (struct lang_type): Deleted has_wrapper_pred and
	wrap_type members.
	(build_wrapper, hack_wrapper, get_wrapper): Deleted decls.
	(wrapper_name, wrapper_pred_name, anti_wrapper_name): Deleted decls.
	(TYPE_WRAP_TYPE, TYPE_HAS_WRAPPER, TYPE_NEEDS_WRAPPER,
	TYPE_HAS_WRAPPER_PRED, WRAPPER_DECL_FORMAT, WRAPPER_PRED_DECL_FORMAT,
	ANTI_WRAPPER_DECL_FORMAT, WRAPPER_NAME_FORMAT,
	WRAPPER_PRED_NAME_FORMAT, ANTI_WRAPPER_NAME_FORMAT,
	WRAPPER_NAME_P, WRAPPER_PRED_NAME_P, ANTI_WRAPPER_NAME_P,
	WRAPPER_OR_ANTI_WRAPPER_NAME_P): Deleted.
	(enum overload_flags): Deleted WRAPPER_FLAG, WRAPPER_PRED_FLAG,
	and ANTI_WRAPPER_FLAG tags.
	* cp-typeck.c (build_function_call_real): Delete wrapper code.
	(unary_complex_lvalue): Don't check TYPE_NEEDS_WRAPPER.
	* stmt.c (warn_if_unused_value): Don't check *WRAPPER_EXPR.
	* tree.def (WRAPPER_EXPR, ANTI_WRAPPER_EXPR): Deleted.

	Wed Oct 28 15:38:44 1992  Brendan Kehoe  (brendan@lisa.cygnus.com)

	* cp-cvt.c (convert_to_reference): New arguments FNDECL, PARMNUM,
	and ERRTYPE.  Use them to give warnings about const and volatile
	references being used incorrectly.  Call itself with dummy arguments
	where appropriate.
	(convert): Call convert_to_reference with dummy args.
	(convert_force): Likewise.
	* cp-typeck.c (warn_for_assignment): Remove static declaration,
	cp-cvt.c needs to see it now.
	(convert_for_initialization): Call convert_to_reference with fndecl,
	parmnum, and errtype.

	Tue Oct 27 17:38:18 1992  Mike Stump  (mrs@cygnus.com)

	* cp-decl.c (grokdeclarator): Fix problem introduce by me on Oct 22
	17:41:13.  Only output error or warning message	about extra
	qualifiers when we are inside a class declaration.

	Tue Oct 27 16:21:41 1992  Mike Stump  (mrs@cygnus.com)

	* cp-tree.h (THIS_NAME_P): Fix to reflect September 1 change in
	THIS_NAME.

	Tue Oct 27 12:35:59 1992  Brendan Kehoe  (brendan@lisa.cygnus.com)

	* cp-parse.y (operator_name): Remove check for top-level operator
	<typename> decl.
	* cp-decl.c (grokdeclarator): Complain here about type conversion
	operators that aren't declared as members of classes. 

	* cp-decl.c (grokdeclarator): Only call do_friend on a friend if
	decl's non-zero.

	Tue Oct 27 09:31:08 1992  Mike Stump  (mrs@cygnus.com)

	* cp-lex.c (do_identifier): Add missing fourth argument to
	lookup_field.

	Mon Oct 26 15:15:39 1992  Mike Stump  (mrs@cygnus.com)

	* cp-cvt.c (convert_to_reference): Check for ambiguities
	between constructor and conversion operators a bit harder.

	Sat Oct 24 19:34:39 1992  Brendan Kehoe  (brendan@cygnus.com)

	Mon Sep 14 14:36:53 1992  Chip Salzenberg  (chip@tct.com)

	cp-decl.c (poplevel): If apparently nested inline function has
	DECL_ABSTRACT_ORIGIN, don't output it; propagate TREE_ADDRESSABLE.
	(pushdecl): When copying inline details into an extern decl,
	copy DECL_RESULT, TREE_ASM_WRITTEN.  Set DECL_ABSTRACT_ORIGIN.

	Fri Oct 23 18:52:19 1992  Brendan Kehoe  (brendan@lisa.cygnus.com)

	* cp-decl.c (poplevel): Use error_with_decl on an unused label, so
	its line number comes out correct.

	Thu Oct 22 18:31:50 1992  Brendan Kehoe  (brendan@lisa.cygnus.com)

	* cp-parse.y (operator_name): If a type conversion operator is
	defined at the top level, don't crash, complain.

	Thu Oct 22 17:41:13 1992  Mike Stump  (mrs@cygnus.com)

	* cp-decl.c (grokdeclarator): Return void_type_node instead of
	NULL_TREE on errors, to forestall another error message.  Check for
	redundant or illegal qualification on class members.

	Thu Oct 22 13:15:57 1992  Mike Stump  (mrs@cygnus.com)

	* cp-tree.h (ANON_AGGRNAME_P): Check the second charater as well, as
	it could be $vtbl_ptr_type, and not an ANON_AGGRNAME.

	Wed Oct 21 19:31:36 1992  Brendan Kehoe  (brendan@lisa.cygnus.com)

	* cp-call.c (build_method_call): Initialize b_or_d to 0.

	* cp-typeck.c (compparms): Delete dead code for returning if either
	TREE_PURPOSE is true when t1 and t2 are both 0.

	* cp-parse.y (object): Only pass one argument into build_x_arrow.

	* cp-parse.y (unary_expr): Add code to parse `&&label'.
	(stmt): Expand computed gotos.

	* cp-method.c (fndecl_as_string): Say it's static before giving its
	type, it looks better (and matches how you'd declare it).

	Wed Oct 21 16:22:43 1992  Mike Stump  (mrs@cygnus.com)

	* cp-decl.c (start_decl): return NULL_TREE, not error_mark_node to
	signify error.
	* cp-decl2.c (cplus_decl_attributes): New function.  Don't call
	decl_attributes if the first argument is NULL_TREE.
	* cp-tree.h (cplus_decl_attributes): Declare new function.
	* cp-parse.y: Changed all calls to decl_attributes into calls to
	cplus_decl_attributes, as all calls may pass NULL_TREE in the first
	argument.

	Wed Oct 21 11:40:35 1992  Mike Stump  (mrs@cygnus.com)

	* cp-call.c (build_method_call): Avoid an abort on parse errors by
	changing an assert into a conditional my_friendly_abort.

	Tue Oct 20 16:52:32 1992  Mike Stump  (mrs@cygnus.com)

	* cp-tree.h (TYPE_ASSEMBLER_NAME_STRING,
	TYPE_ASSEMBLER_NAME_LENGTH): New macros.
	* cp-search.c (build_type_pathname): Use new macros.
	* cp-decl.c (pushtag): Set DECL_ASSEMBLER_NAME for TYPE_DECLs with
	build_overload_name so that assembler names for template type things
	are like __vt$t1X1Zi$1T.4 and not __vt$X<int>$T.4.
	* cp-decl.c (pushdecl): Since the rest of the compiler wants to use
	DECL_NAME for TYPE_DECLs, use that instead of DECL_ASSEMBLER_NAME.

	Tue Oct 20 11:29:50 1992  Mike Stump  (mrs@cygnus.com)

	Wed Oct  7 16:01:55 1992  Chip Salzenberg  (chip@tct.com)

	[ changes propagated from 921005 snapshot ]
	* cp-lex.c (readescape): No warning if digits in \x are all 0's.

	Fri Oct  9 15:18:19 1992  Brendan Kehoe  (brendan@cygnus.com)

	* cp-decl.c (duplicate_decls): Only find out if olddecl is a
	friend after we know it's not a TREE_LIST.

	Wed Oct  7 16:04:34 1992  Mike Stump  (mrs@cygnus.com)

	Wed Oct  7 12:26:07 PDT 1992  Ron Guilmette  (rfg at netcom.com)

	* cp-lex.c (readescape):  Permit \? as an escape sequence.

	Tue Oct  6 17:54:09 1992  Mike Stump  (mrs@cygnus.com)

	Major MI revamp.

	* cp-search.c (get_binfo, find_base_distance):  Fix comments.
	Disable incorrect code that would incorrectly find ambiguities where
	none existed.  Add some code to find all ambiguities.
	* cp-search.c (get_binfo2_recursive, get_binfo2): Added to find
	ambiguities.

	* cp-search.c (convert_pointer_to_single_level): Added so that one
	can convert pointer unambiguously to an immediate base class
	pointer.

	* cp-search.c (dfs_walk): Added comments.  Fixed to keep track of
	how it walks the inheritance hierarchy so that when we get down to
	the bottom, we have a pointer to what we want.
	* cp-search.c (dfs_find_vbases): Changed to use new intermediate
	pointer instead of incorrectly trying to convert at the bottom.
	* cp-search.c (init_vbase_pointers): Changed to set up new
	intermediate pointer.

	* cp-*.c: Rename child -> base_binfo, child_child ->
	base_base_binfo, child_binfos -> base_binfos, .*_child ->
	.*_base_binfo.  Rename DERIVED_FROM_P to UNIQUELY_DERIVED_FROM_P.

	Tue Oct  6 14:51:13 1992  Brendan Kehoe  (brendan@rtl.cygnus.com)

	* cp-spew.c (yylex_ctr): Make unsigned.
	* cp-decl2.c (spew_debug): Add extern reference.
	(lang_decode_option): New option `-spew-debug', so masochists can
	use it when they need to.

	Mon Oct  5 15:47:35 1992  Brendan Kehoe  (brendan@rtl.cygnus.com)

	Implement protected baseclasses.
	* cp-class.c (finish_base_struct): Set TREE_VIA_PROTECTED.
	(finish_struct_methods): Check for either public or protected
	members to kick out of the "all members are private" test.
	* cp-decl.c (xref_tag): Set TREE_VIA_PROTECTED appropriately.
	* cp-parse.y (base_class_visibility_list): Remove code about
	`protected' visibility not being implemented.
	* cp-pt.c (tsubst): Set via_protected and call hash_tree_cons
	with it as necessary.
	* cp-search.c (compute_visibility): Set visibility if protected.
	Return the appropriate visibility when resolving a field.
	(lookup_field): Set TREE_VIA_PROTECTED for btypes from its child.
	When complaining about a member being protected, differentiate when
	it's from a protected base class (could be a public member in the
	base).
	(lookup_fnfields): Set TREE_VIA_PROTECTED.
	(get_baselinks): Pass TREE_VIA_PROTECTED into hash_tree_cons.
	Also pass a 0 when necessary.
	* cp-tree.c (propagate_binfo_offsets): Set TREE_VIA_PROTECTED.
	(layout_vbasetypes): Ditto.
	(layout_basetypes): Ditto.
	(list_hash_lookup): Check TREE_VIA_PROTECTED when looking at an
	incomplete basetype.
	(hash_tree_cons): New argument `via_protected'.  Set TREE_VIA_PROTECTED
	when necessary.
	(list_hash_lookup_or_cons): Check TREE_VIA_PROTECTED when making
	sure a hash list is sane.
	(make_binfo): Set TREE_VIA_PROTECTED for the new child.

	Mon Oct  5 13:27:44 1992  Mike Stump  (mrs@cygnus.com)

	* cp-init.c (maybe_adjust_addr_for_delete):  Make sure we don't
	evaluate the addr twice if it has side effects.

	Mon Oct  5 13:05:37 1992  Mike Stump  (mrs@cygnus.com)

	* cp-init.c (build_vec_delete): Make sure we don't evaluate the base
	expression twice if it has side effects.

	Mon Oct  5 12:38:35 1992  Brendan Kehoe  (brendan@rtl.cygnus.com)

	* cp-decl.c (grokdeclarator): Issue a warning or error if we're
	being ANSI-careful when they do `extern inline'.
	(flag_ansi): Add extern decl.

	Mon Oct  5 12:34:32 1992  Mike Stump  (mrs@cygnus.com)

	* cp-class.c (finish_struct): Don't give an error if an enumeration
	type is stuck in a bit-field, as it is legal c++.

	Mon Oct  5 11:43:09 1992  Mike Stump  (mrs@cygnus.com)

	Mon Sep 14 16:39:10 1992  Chip Salzenberg  (chip@tct.com)

	* cp-cvt.c (convert_to_integer): Don't pass truncation thru lshift
	if shift count >= width of narrower type.  Instead, just use 0.

	Fri Oct  2 13:21:40 1992  Ken Raeburn  (raeburn@kyriath.cygnus.com)

	* cp-decl.c (start_function): Reinstate error check for missing
	semicolon erroneously removed.

Thu Nov 12 17:37:23 1992  Michael Meissner  (meissner@osf.org)

	* mips.md (movdf_internal): Split movdf insn into two -- one for
	normal use, and one for -msoft-float, and don't prefer FPU
	registers in the -msoft-float case.
	(movsf_internal): Ditto for movsf.

Thu Nov 12 07:30:17 1992  James Van Artsdalen  (james at bigtex.cactus.org)

	* i386.h (HARD_REGNO_MODE_OK): Restrict MODE_INT from FP regs only.

	* i386.md (floatMN2 recognizers): Don't omit mode on a
	match_operand that might be reloaded.  Split into separate
	patterns for each mode.
	(zero_extract test): Disable for now.

	* i386.c (float_op): Delete - no longer used.

Wed Nov 11 11:55:22 1992  Richard Kenner  (kenner at vlsi1.ultra.nyu.edu)
 
	* combine.c (simplify_comparison, case ASHIFTRT): mode_for_size
	returns BLKmode on error, not VOIDmode.

	* romp.md (reload_outdi): Write as proper PARALLEL.

Wed Nov 11 01:06:33 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* toplev.c (lang_options): Change +e... to -+e...

	* xm-tower.h: Include xm-svr3.h.
	(bcopy, bzero, bcmp, USG): Macros deleted.

Tue Nov 10 12:26:23 1992  Steve Chamberlain (sac@cygnus.com)

	* sdbout.c (plain_type_1): Handle LONG_TYPE_SIZE like INT_TYPE_SIZE.

Tue Nov 10 14:20:27 1992  Michael Meissner  (meissner@osf.org)

	* mips.md (ffssi2): Add =& constraints to the two match_scratch
	clobbered registers.  Fix from John F Carr.

	* mips-tdump.c (toplevel): Move #undef index and rindex before
	including sym.h.

Tue Nov 10 10:37:50 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* Makefile.in (install-common): Delete deps $(srcdir)/g++ $(srcdir)/c++

	* expr.c (init_expr_once): Try indexing mem by fp as well as sp.

Tue Nov 10 10:28:59 1992  Chris Smith  (csmith@convex.com)

	* genattrtab.c (main): Unlimit stack size.

Tue Nov 10 10:17:51 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* print-rtl.c (print_rtx): Use sizeof spaces - 1 to get the length
	of the spaces string.

Tue Nov 10 09:56:32 1992  Jeffrey A. Law  (law@schirf.cs.utah.edu)

	* pa-hpux.h (LINK_SPEC): Disable linking against shared libraries.
	* pa-ghpux.h (LINK_SPEC): Likewise. 

Tue Nov 10 08:39:01 1992  Richard Kenner  (kenner at vlsi1.ultra.nyu.edu)

	* elxsi.h (GO_IF_LEGITIMATE_ADDRESS): Verify that register is valid
	for use as base register (un-allocated pseudos aren't when strict).

Mon Nov  9 22:17:23 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* xm-3b1.h (index, rindex): Define as macros.

	* i386bsd.h: Complete rewrite.

Mon Nov  9 14:22:38 1992  Michael Meissner  (meissner@osf.org)

	* mips.h, decrose.h: Move LINK_LIBGCC_SPECIAL to decrose.h.

Mon Nov  9 12:39:03 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* unroll.c (final_biv_value): Make a note after loop_end
	if we need to use NEXT_INSN (loop_end).

	* objc-actions.c (build_message_expr): Don't crash if super_type is 0.

Mon Nov  9 07:42:30 1992  Richard Kenner  (kenner at vlsi1.ultra.nyu.edu)

	* caller-save.c (save_call_clobbered_regs): Ensure any insns we add
	are in the same basic block as the insn we added them for.

Mon Nov  9 12:35:57 1992  Torbjorn Granlund  (tege@jupiter.sics.se)

	* pa.h (TARGET_*): Move it to the beginning of the file.
	(CPP_SPEC): Handle -mnosnake.
	* pa-ghpux.h pa-hpux.h pa1-ghpux.h pa1-hpux.h pa1.h pa.h: Move
	definition of TARGET_DEFAULT to before inclusion of other pa*h files.
	Only define TARGET_DEFAULT if not already defined.
	Get rid of hpux8 conditionals.

Sun Nov  8 20:38:19 1992  James Van Artsdalen  (james at bigtex.cactus.org)

	* i386.md (movstrsi): mask move count after signed shift.

Sun Nov  8 00:24:30 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* fixinc.svr4: Avoid use of | in sed regexp; use multiple s commands.

	* i386mach.h: Include i386gstabs.h, not i386gas.h.

	* gsyslimits.h: Renamed from syslimits.h.
	* Makefile.in (USER_H): syslimits.h deleted.
	(install-common-headers): Install gsyslimits.h as syslimits.h.
	Depend on gsyslimits.h and assert.h.

	* cccp.c (rescan): Accept # as command inside macro args, etc.
	If an actual newline at the same level precedes.

	* fixincludes (EXINIT): Set it to `set', not null.

	* toplev.c (main): Use strncmp when testing for gstabs+ vs gstabs.

Sat Nov  7 17:46:35 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* optabs.c (expand_unop):
	For complex negation, do get_insns, not gen_sequence.

	* c-decl.c (finish_decl): Don't clear DECL_INITIAL in inline fn decls.

	* c-typeck.c (process_init_constructor): Strip NOP_EXPR from indices.
	Clear end_index if there's an error in a range.

	* mips-5sysv.h, mips-5svr4.h, mips-5bsd.h (CPP_PREDEFINES):
	Add single-underscore variants of all the predefined symbols.

	* gstddef.h [_ANSI_H_]: When undefing at the end, test _STDDEF_H,
	not __need_ptrdiff_t.

	* mips.c (gen_int_relational): Handle overflow when incrementing cmp1.

Fri Nov  6 23:03:14 1992  Brendan Kehoe  (brendan@lisa.cygnus.com)

	* elxsi.c: Include config.h.

Fri Nov  6 18:53:21 1992  Chip Salzenberg  (chip@tct.com)

	* i386sco.h (STARTFILE_SPEC): Fix line wrap.
	(SIGNED_CHAR_SPEC): Defined to set _CHAR_UNSIGNED.

Fri Nov  6 19:06:56 1992  Jim Wilson  (wilson@sphagnum.cygnus.com)

	* dbxout.c (dbxout_symbol): Give name ` ' to unnamed enums.

Fri Nov  6 15:26:30 1992  Richard Kenner  (kenner at vlsi1.ultra.nyu.edu)
 
	* optabs.c (init_libfuncs): Add casts when comparing/incrementing enum.
 
Fri Nov  6 15:41:00 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* toplev.c (main): Really accept -gstabs+.

Fri Nov  6 06:46:22 1992  Tom Wood  (wood@dg-rtp.dg.com)

	* m88k.md (tcnd_divide_by_zero, divsi3, udivsi3): Allow the
	explicit trap for divide by zero to resume execution along the
	expected path.

	* t-m88kv4 (FIXINCLUDES): Delete.

Fri Nov  6 03:08:13 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* i386.md (andsi3): Mask immed op to 0xff in QI-reg ff00-byte case.

	* gstddef.h: Find ansi.h in machine subdir.
	[__need_ptrdiff_t]: Don't undef _SIZE_T_ or _WCHAR_T_.
	* gvarargs.h, gstdarg.h: Don't test, define or undef _VA_LIST_
	on NET 2 systems.  Don't include ansi.h.

	* c-lex.c (readescape): Support \e like \E.  Warn only if -pedantic.

Fri Nov  6 08:34:17 1992  Tim Moore  (moore at defmacro.cs.utah.edu)

	* integrate.c (copy_rtx_and_substitute)[ARGS_GROW_DOWNWARD]: Map
	virtual args pointer to the top of the argument block.
	* calls.c (expand_call)[ARGS_GROW_DOWNWARD] Fix fencepost error in
	calculating high_to_save and low_to_save.  Use - high_to_save to
	address stack_area.

Fri Nov  6 00:41:53 1992  Paul Eggert  (eggert@twinsun.com)

	* sparc.h (TARGET_EDOM, GEN_ERRNO_RTX): Deleted.

Thu Nov  5 18:55:44 1992  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* alpha.c (output_prologue): Fix typo: `add' should be `addq'.

Thu Nov  5 18:35:43 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* Makefile.in (install-fixincludes): Add semicolon in new for-loop.

Thu Nov  5 15:24:14 1992  Michael Meissner  (meissner@osf.org)

	* i386rose.h, decrose.h (REAL_LD_FILE_NAME): Define to be the
	correct location on OSF/1 -- /usr/bin/ld points to
	/usr/ccs/gcc/ld, which is collect.
	(REAL_NM_FILE_NAME): Ditto for nm.
	(REAL_STRIP_FILE_NAME): Ditto for strip.

Wed Nov  4 13:36:10 1992  Jim Wilson  (wilson@sphagnum.cygnus.com)

	* optabs.c (expand_binop): When trying to expand a multiple word
	add into multiple single word adds, don't overwrite OP0 and OP1 in
	case we must backtrack.  We use instead new variables XOP0 and XOP1.

Wed Nov  4 16:45:53 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* config.sub: Don't discard SCO version number if it's 3.2v4.

	* xm-vax-vms.h (HOST_FLOAT_FORMAT): Defined.

	* varasm.c: Fix typos in last change.

Wed Nov  4 10:11:28 1992  Torbjorn Granlund  (tege@jupiter.sics.se)

	* va-pa.h (va_end): Do it like in other va-*.h files.

Wed Nov  4 07:23:46 1992  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* local-alloc.c (optimize_reg_copy_1): If P is a CALL_INSN, count
	it as being crossed by SRC since SRC used to die there.

Wed Nov  4 00:13:51 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* x-next (libgcc2.a, stdarg.h): New rules.

	* varasm.c (immed_real_const_1, immed_double_const):
	Don't push on const_double_chain in nested function.

	* expr.c (emit_move_insn): Do return a value, in complex case.

Tue Nov  3 10:45:09 1992  H.J. Lu  (hlu@yardbird.eecs.wsu.edu)

	* i386linux.h (STARTFILE_SPEC): -static is added to ld if 
	  -pg, -g or -p is passed down by gcc.

Tue Nov  3 15:14:48 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* pa.c (output_ior): Handle "ior" against zero.

	* i386mach.h (YES_UNDERSCORES): Define it.

	* sun3.h (ASM_OUTPUT_FLOAT_OPERAND): Use REAL_VALUE_MINUS_ZERO.
	(ASM_OUTPUT_DOUBLE_OPERAND): Likewise.

Tue Nov  3 08:25:35 1992  Chris Smith  (csmith@convex.com)

	* convex.h (REG_CLASS_FROM_LETTER): Add 'A', index regs.
	(movsi alternative): Use it to make psh.w sp (push the
	stack pointer) a noninstruction.

Tue Nov  3 08:05:10 1992  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* jump.c (jump_optimize): Ensure operand of REG_NOTES is an INSN;
	otherwise, we might try to read outside allocated memory.

	* va-alpha.h (va_end): Don't define enum if va_end already defined.

Tue Nov  3 02:56:22 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* objc/Makefile: Use $(srcdir), not `..'.

	* objc-actions.c (build_message_expr): Use save_expr for receiver.

	* va-i860.h (va_end, anonymous enum): Don't declare if
	va_end already defined as macro.
	* va-mips.h, va-i960.h (va_end): If already a macro, don't declare.

Mon Nov  2 21:17:40 1992  Paul Eggert  (eggert@twinsun.com)

	* va-sparc.h (va_end): If already def as macro, don't declare.

Mon Nov  2 16:04:51 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* i386linux.h: Include i386gstabs.h, not i386gas.h.

Mon Nov  2 14:46:31 1992  Richard Kenner  (kenner at vlsi1.ultra.nyu.edu)

	* Makefile.in (install-cross-tools): Delete old symlink before
	making new one; else symlink will fail and we will use
	backed strategy.

Sun Nov  1 17:55:56 1992  Jim Wilson  (wilson@sphagnum.cygnus.com)

	* varasm.c (decode_rtx_const): Handle PC same as LABEL_REF.

Sun Nov  1 03:19:39 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* Version 2.3.1 released.

	* x-i386s4: Renamed from x-i386sco4.
	* configure (i[34]86-*-sco*): Use new name.

	* sol2-c1.asm, sol2-ci.asm, sol2-cn.asm: Renamed from sol2-crt...
	* t-sol2: User new names.

See ChangeLog.6 for earlier changes.
