Sun Mar 31 05:10:10 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* stor-layout.c (layout_decl): Don't make a bitfield an integral mode
	if the mode of the field type is not MODE_INT.

	* sched.c (schedule_block): CALL_INSNs don't affect fixed regs.
	* flow.c (propagate_block): CALL_INSNs don't kill fixed regs.

Sat Mar 30 03:32:48 1996  Torbjorn Granlund  <tege@noisy.tmg.se>

	* expmed.c (expand_divmod, case TRUNC_DIV_EXPR): Move some code
	to avoid shifting by a too large count.

Fri Mar 29 15:45:51 1996  Doug Evans  <dje@cygnus.com>

	* configure (i[3456]86-*-sunos5*): Delete, config.sub converts
	sunos5 to solaris2.
	(sparc-*-sunos5*): Likewise.
	(sparc64-*-{solaris2*,sunos5*}): Delete.  Stick with sparc-*-solaris2*.

	* sparc.h (FUNCTION_PROFILER): Save/restore %g2 around mcount call.

Fri Mar 29 14:20:31 1996  Stan Cox  <coxs@dg-rtp.dg.com>

	* i386.c (notice_update_cc): Clear cc_status if ref modified MEM.

Fri Mar 29 09:37:52 1996  Jeffrey A. Law  <law@cygnus.com>

	* calls.c (expand_call): Remove current_call_is_indirect nonsense.
	Add additional argument to INIT_CUMULATIVE_ARGS.
	(emit_library_call): Likewise.
	(emit_library_call_value): Likewise.
	* expr.c (expand_builtin): Likewise.
	* function.c (assign_parms): Likewise.
	* pa.h (hppa_args): New field "indirect".
	(INIT_CUMULATIVE_ARGS): Initialize "indirect" field.
	(FUNCTION_ARG): Check "indirect" field, rather than
	"current_call_is_indirect".
	* a29k.h (INIT_CUMULATIVE_ARGS):New arg, INDIRECT.
	* alpha.h (INIT_CUMULATIVE_ARGS): Likewise.
	* arm.h (INIT_CUMULATIVE_ARGS): Likewise.
	* clipper.h (INIT_CUMULATIVE_ARGS): Likewise.
	* convex.h (INIT_CUMULATIVE_ARGS): Likewise.
	* dsp16xx.h (INIT_CUMULATIVE_ARGS): Likewise.
	* elxsi.h (INIT_CUMULATIVE_ARGS): Likewise.
	* fx80.h (INIT_CUMULATIVE_ARGS): Likewise.
	* gmicro.h (INIT_CUMULATIVE_ARGS): Likewise.
	* h8300.h (INIT_CUMULATIVE_ARGS): Likewise.
	* i370/mvs.h (INIT_CUMULATIVE_ARGS): Likewise.
	* i386.h (INIT_CUMULATIVE_ARGS): Likewise.
	* i860.h (INIT_CUMULATIVE_ARGS): Likewise.
	* i960.h (INIT_CUMULATIVE_ARGS): Likewise.
	* m68k.h (INIT_CUMULATIVE_ARGS): Likewise.
	* m68k/mot3300.h (INIT_CUMULATIVE_ARGS): Likewise.
	* m88k.h (INIT_CUMULATIVE_ARGS): Likewise.
	* mips.h (INIT_CUMULATIVE_ARGS): Likewise.
	* ns32k.h (INIT_CUMULATIVE_ARGS): Likewise.
	* pdp11.h (INIT_CUMULATIVE_ARGS): Likewise.
	* pyr.h (INIT_CUMULATIVE_ARGS): Likewise.
	* romp.h (INIT_CUMULATIVE_ARGS): Likewise.
	* rs6000.h (INIT_CUMULATIVE_ARGS): Likewise.
	* sh.h (INIT_CUMULATIVE_ARGS): Likewise.
	* sparc.h (INIT_CUMULATIVE_ARGS): Likewise.
	* spur.h (INIT_CUMULATIVE_ARGS): Likewise.
	* tahoe.h (INIT_CUMULATIVE_ARGS): Likewise.
	* vax.h (INIT_CUMULATIVE_ARGS): Likewise.
	* we32k.h (INIT_CUMULATIVE_ARGS): Likewise.
	* mips.c (mips_expand_prologue): Add extra arg to
	INIT_CUMULATIVE_ARGS call.

Thu Mar 28 18:45:49 1996  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>

	* alpha.c (summarize_insn): Fix three "off-by-one" bugs in loop bounds.

Thu Mar 28 16:50:10 1996  Doug Evans  <dje@cygnus.com>

	* ginclude/inl-sparc.h: Deleted.

Thu Mar 28 12:07:31 1996  Jeffrey A. Law  <law@cygnus.com>

	* va-h8300.h (va_arg): Don't assume sizeof (int) == 4.

	* pa.c (hppa_legitimize_address): Don't lose for
	(plus (plus (mult (A) (shadd_const)) (B)) (C)) if
	B + C isn't a valid address for indexing.
	(basereg_operand): Only accept base registers after
	cse has completed.  Don't accept the frame pointer if
	it's likely to be eliminated.
	* pa.md (unscaled indexing patterns): Add variants with
	basereg and index register reversed.
	(HImode and QImode loads): Add zero extended variants.

Wed Mar 27 07:45:27 1996  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>

	* expmed.c (negate_rtx): Fix typo in previous change.

Tue Mar 26 13:50:43 1996  Jim Wilson  <wilson@mole.gnu.ai.mit.edu>

	* calls.c (expand_call): In convert_to_mode call, use word_mode
	not SImode.

Tue Mar 26 13:44:34 1996  Doug Evans  <dje@canuck.cygnus.com>

	* configure: Delete unnecessary special handling of --with-cpu.

Tue Mar 26 10:41:57 1996  Jeffrey A. Law  <law@cygnus.com>

	* expr.c (emit_push_insn): When doing a partial push, emit
	a CLOBBER so that flow doesn't think the entire register
	is live.

Tue Mar 26 10:00:52 1996  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>

	* alpha.c (summarize_insn, default case): Properly use format_ptr.

Tue Mar 26 09:51:09 1996  Philippe De Muyter (phdm@info.ucl.ac.be)

	* m68k.h (output_move_simode_const): New extern declaration.
	* m68k.c (output_move_simode_const): New function.
	(singlemove_string): Call it.
	* m68k.md (fullword move): Likewise.

Tue Mar 26 05:43:06 1996  Torbjorn Granlund  <tege@noisy.tmg.se>

	* vax.md (insv matcher): Call CC_STATUS_INIT.
	* vax.h (NOTICE_UPDATE_CC): Handle ZERO_EXTRACT destination.

Mon Mar 25 19:18:08 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* function.c (expand_function_start): Don't set up context_display
	unless current_function_needs_context.

Mon Mar 25 18:48:18 1996  Philippe De Muyter  <phdm@info.ucl.ac.be>

	* fold-const.c (fold, case BIT_IOR_EXPR): Recognize rotates
	with variable count.

Mon Mar 25 18:05:28 1996  Jim Wilson  <wilson@cygnus.com>

	* Makefile.in (libgcc1-test): Undo Feb 12 change.

Mon Mar 25 08:09:59 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* objc/thread-single.c (objc_mutex_unlock): Properly declare thread_id.

Mon Mar 25 08:02:50 1996  Philippe De Muyter  <phdm@info.ucl.ac.be>

	* configure (m68k-motorola-sysv*): Fixed indentation.

Sun Mar 24 08:16:42 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* expmed.c (negate_rtx): Don't try to negate a constant ourself;
	instead call simplify_unary_operation.

Sun Mar 24 07:29:06 1996  Richard Henderson  <rth@tamu.edu>

	* gcc.c (process_command): Instead of hardcoding non-empty
	switches_need_spaces to turn on "o" and "L", make the string
	contain the switches that need the spaces.
	* m68k/ccur-GAS.h (SWITCHES_NEED_SPACES): Change definition
	correspondingly.

Sat Mar 23 18:34:44 1996  Harry Dolan  <dolan@ssd.intel.com>

	* i860/paragon.h (LIB_SPEC): Always output -lmach.

Sat Mar 23 18:25:39 1996  J"orn Rennecke (amylaar@meolyon.hanse.de)

	* c-typeck.c (set_init_index): Check for use outside an array
	initializer.

        * defaults.h (ASM_OUTPUT_ADDR_DIFF_ELT): Delete.
        * pdp11.h (ASM_OUTPUT_ADDR_DIFF_ELT): Don't define.

Sat Mar 23 15:55:35 1996  Doug Evans  <dje@canuck.cygnus.com>

	* combine.c (make_extraction): In BITS_BIG_ENDIAN correction of POS,
	need to treat MEM and REG differently.

	* sparc.h (SPARC_SIMM{10,11,13}_P): Define.
	(SMALL_INT): Use SPARC_SIMM13_P.
	(CONST_OK_FOR_LETTER_P): Support new letters L,M.
	* sparc.c (arith11_operand): Use SPARC_SIMM11_P.
	(arith10_operand): Use SPARC_SIMM10_P.
	* sparc.md (*mov{qi,hi,si,di}_cc_sp64): Fix constraints.
	(*mov{qi,hi,si,di}_cc_reg_sp64): Likewise.

Sat Mar 23 07:47:19 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* m68k/linux.h (TRAMPOLINE_TEMPLATE): Correct first instruction.
	* m68k/m68kv4.h (TRAMPOLINE_TEMPLATE): Likewise.

Sat Mar 23 07:06:55 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* bc-emit.c (bc_emit_instruction): Add missing va_end call.

	* c-typeck.c (build_array_ref): Give error if subscripting a function.

Fri Mar 22 09:11:45 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* local-alloc.c (optimize_reg_copy_1): Only update reg_live_length
	if it is non-negative.

Thu Mar 21 14:42:26 1996  Doug Evans  <dje@cygnus.com>

	* sparc/splet.h (STARTFILE_SPEC,LINK_SPEC): Define.

Wed Mar 20 17:23:18 1996  Jim Wilson  <wilson@cygnus.com>

	* cse.c (note_mem_written): Delete obsolete code for handling
	(mem (scratch)).

	* mips.c (mips_expand_prologue): In initialization of fnargs, delete
	special treatment of METHOD_TYPE.

Wed Mar 20 17:07:45 1996  Doug Evans  <dje@cygnus.com>

	* sparc/sol2.h (ASM_CPU_SPEC): Recognize -mcpu=v8plus, not v9.
	Fix typo in ultrasparc entry.
	* sparc.h (CPP_CPU_SPEC): Add v8plus entry.
	(ASM_CPU_SPEC): Likewise.

	* sparc.c (fcc_reg_operand): Ensure correct mode.
	(icc_or_fcc_reg_operand): Likewise.
	(gen_v9_scc): IF_THEN_ELSE must have a mode.
	(print_operand): New operand code `x' for all condition codes.
	New operand codes `c,d' for reversed conditional moves.
	* sparc.md (movqicc,movhicc): New named patterns.
	(movdicc): if_then_else must have a mode.
	(movsicc,movsfcc,movdfcc,movtfcc): Likewise.
	Change condition to TARGET_V9, not TARGET_ARCH64.
	Fail if DImode compare and ! TARGET_ARCH64.
	(conditional move matchers): Rewrite.

Wed Mar 20 16:12:29 1996  Stan Cox  <coxs@wombat.gnu.ai.mit.edu>

	* i386.h (HARD_REGNO_MODE_OK): Relax QImode constraint to
	avoid a reload problem.

Wed Mar 20 13:12:22 1996  Jeffrey A. Law  <law@cygnus.com>

	* pa.c (hppa_legitimize_address): Don't lose for x[n-const]
	when n-const will not be shifted.  Don't pessimize code for
	x[n-const] when const is small.

Wed Mar 20 11:42:32 1996  Markus Theissinger  <Markus.Theissinger@gmd.de>

	* m68k/sun3.h (LIB_SPEC): Don't link /usr/lib/bb_link.o with `gcc -a'.
	(__bb_init_func): Deleted.
	(BLOCK_PROFILER_CODE): Don't set macro to nothing.

	* m68k/xm-sun3.h: New file.
	* configure (m68k-sun-sunos*): Use it.

	* xm-linux.h (HAVE_POPEN): New define.

Wed Mar 20 11:28:37 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* m68k/linux.h (ASM_SPEC): Deleted.
	(STRUCT_VALUE_REGNUM): Redefine as register a0.
	(STATIC_CHAIN_REGNUM): Redefine as register a1.
	(TRAMPOLINE_TEMPLATE): Redefine to use the right register.

Wed Mar 20 08:04:34 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* libgcc2.c (__dummy): New function.
	* Makefile.in (LIB2FUNCS): Add __dummy.
	* expr.c (expand_builtin, case BUILT_IN_SETJMP): Call "setjmp"
	pattern, if any.
	Call dummy function pointed to by static chain pointer.
	(expand_builtin, case BUILT_IN_LONJMP): Ignore second expression.
	Set address of __dummy into static chain pointer.
	Copy the label to return to into a pseudo earlier.

	* stupid.c (last_setjmp_suid, regs_crosses_setjmp): New variables.
	(stupid_life_analysis, stupid_mark_refs): Use them to track which
	regs are live over a setjmp; don't allocate such regs.

Tue Mar 19 22:02:07 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* cplus-dem.c (demangle_template): Fix for non-mangled pointer
	arguments.

Tue Mar 19 13:54:06 1996  Jeffrey A. Law  <law@wombat.gnu.ai.mit.edu>

	* pa.c (compute_frame_size): Update comments to reflect reality.
	(hppa_expand_prologue): Don't save registers which aren't
	used, even if it creates holes.  Partially undoes changes from
	early March.
	(hppa_expand_epilogue): Likewise.

Tue Mar 19 08:25:17 1996  J"orn Rennecke (amylaar@meolyon.hanse.de)

	* stmt.c (struct case_node): New member balance.
	(add_case_node): New function.
	(pushcase, pushcase_range): Use it.
	(case_tree2list): New function.
	(expand_end_case): Use it.

Tue Mar 19 07:44:22 1996  Stephen L Moshier  (moshier@world.std.com)

	* regstack.c (move_for_stack_reg): Avoid stack overflow while
	storing XFmode from fp reg to memory.

Tue Mar 19 07:38:03 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* m68k.h (MASK_*): New macros.
	(OVERRIDE_OPTIONS): Use them.
	(TARGET_SWITCHES): Likewise.
	Treat -m68332 like -m68000.

Mon Mar 18 20:04:13 1996  Richard Earnshaw (rearnsha@armltd.co.uk)

	* expmed.c (emit_store_flag): If expanding (GE X 0) will need two
	insns, don't use subtarget for the result of the first insn.
	Move a likely constant to the start of a condition.

Mon Mar 18 19:48:14 1996  Philippe De Muyter  <phdm@info.ucl.ac.be>

	* m68k.h (CONST_OK_FOR_LETTER_VALUE): New constraint 'M'.
	* m68k.c (output_function_epilogue): Restore registers using sp+
	instead of fp(n) in leaf functions.
	(USE_MOVQ, use_movq): Function replaced by macro.
	* m68k.md (pushexthisi_const, movsi_const0): New names.
	(andsi3, iorsi3): Allow only 'M', not 'K' constants, if dest is 'd'.

Mon Mar 18 19:33:20 1996  Fila Kolodny <fila@ibi.com>

	* i370/t-mvs: New file.
	* configure (i370-*-mvs*): Use it.
	* i370/mvs.h (FUNCTION_PROLOGUE): LE/370 takes 120 bytes for DSA.
	Have only one copy of timestamp and PPA2 per object module.
	Only have unnamed CSECT to match IBM C.

Mon Mar 18 19:26:21 1996  Paul Russell  (Rusty.Russell@adelaide.maptek.com.au)

	* combine.c (simplify_if_then_else): Allow for case that
	condition might no longer be a condition.

Mon Mar 18 19:14:42 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* c-typeck.c (build_conditional_expr): If OP1 is null, set
	both OP1 and ORIG_OP1 to IFEXP.

	* c-iterate.c (iterator_loop_epilogue): Don't clear DECL_RTL
	for a static decl.

Mon Mar 18 08:02:25 1996  Stephen L Moshier <moshier@world.std.com>

	* alpha.c (summarize_insn, case SUBREG, CONST_*): New cases.

Sun Mar 17 16:55:00 1996  Doug Evans  <dje@cygnus.com>

	* combine.c (find_split_point): Handle NULL return from
	make_extraction.
	(make_field_assignment): Likewise.

Sat Mar 16 18:56:47 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* tree.c (substitute_in_expr, case COMPONENT_REF): Ignore
	if inner PLACEHOLDER_EXPR has not yet been initialized.

	* i386.c (standard_80386_constant_p): -0.0 is not 0.0.
	* i386.md (insv): Restore missing end of comment.

	* combine.c (make_extraction): Correct typo in force_to_mode
	call in previous change.
	Return 0 if pos+len out of range of want desired mode.

Sat Mar 16 16:20:43 1996  David Mosberger-Tang  <davidm@azstarnet.com>

	* alpha.md (trap): New attribute.
	Modify patterns for all floating-point trap generating instructions.
	* alpha.h (CPP_SPEC): Added -mieee and -mieee-with-inexact.
	(alpha_trap_precision, alpha_fp_rounding_mode, alpha_fp_trap_mode):
	New enum types.
	(target_flags, alpha_tp, alpha_fprm, alpha_fptm): New external vars.
	(alpha_fprm_string, alpha_fptm_string, alpha_tp_string): Likewise.
	(TARGET_IEEE{,_WITH_INEXACT,_CONFORMANT}): New macros.
	(MASK_IEEE{,_WITH_INEXACT,_CONFORMANT}): Likewise.
	(MASK_FP, MASK_FPREGS,
	(TARGET_SWITCHES): Added "ieee-conformant", "ieee", and
	"ieee-with-inexact"; use MASK symbols.
	(TARGET_OPTIONS): New macro.
	(OVERRIDE_OPTIONS, FINAL_PRESCAN_{INSN,LABEL}): New macros.
	(PRINT_OPERAND_PUNCT_VALID_P): Allow operand codes for FP insns.
	(CC1_SPEC): New macro.
	* alpha.c (alpha_tp, alpha_fprm, alpha_fptm): New variables.
	(alpha_tp_string, alpha_fprm_string, alpha_fptm_string
	(trap_pending): Likewise.
	(override_options, summarize_insn, final_prescan_insn): New functions.
	(print_operand): Handle cases '&', '\'', ')', and '+'.
	(output_prolog): Emit ".eflag 48" if TARGET_IEEE_CONFORMANT.
	(output_epilog): Call final_prescan_insn before emitting epilog.

	* final.c (final_scan_insn, case CODE_LABEL): Invoke
	FINAL_PRESCAN_INSN if FINAL_SCAN_LABEL is defined.

	* alpha/{linux.h,x-linux,xm-linux.h}: New files.
	* configure (alpha-*-linux*): New case.
	* alpha.c (output_prolog): Set alpha_function_needs_gp if profiling
	and TARGET_PROFILING_NEEDS_GP defined.

Thu Mar 14 22:28:20 1996  David Edelsohn  <edelsohn@mhpcc.edu>

	* rs6000.h (LEGITIMATE_OFFSET_ADDRESS_P): Fix last change.
	* aix41.h (LINK_SPEC): add -bnoentry if shared and no explicit entry.

Thu Mar 14 12:47:33 1996  Jim Wilson  <wilson@cygnus.com>

	* mips.h (ASM_OUTPUT_DOUBLE_INT): Use 'X' if CONST_INT and
	HOST_BITS_PER_WIDE_INT == 64.

	* mips.c (mips_expand_prologue): Change TYPE_NEEDS_CONSTRUCTING to
	TREE_ADDRESSABLE;

Thu Mar 14 11:21:37 1996  Michael Meissner  <meissner@tiktok.cygnus.com>

	* rs6000.h (LEGITIMATE_OFFSET_ADDRESS_P): For 32-bit mode,
	allow TImode variables with int offsets, so that structures
	greater than 8 bytes and less than or equal to 16 bytes can be
	instantiated correctly.

	* rs6000.c (rs6000_valid_type_attribute_p): Add exception
	attribute for Windows NT.

	* win-nt.h (ASM_OUTPUT_FUNCTION_PREFIX): Delete, merge into
	ASM_DECLARE_FUNCTION_NAME.
	(ASM_DECLARE_FUNCTION_NAME): Add support for exception attribute
	setting fields 3 & 4 of the structured exception handling table.

Thu Mar 14 01:53:19 1996  Jeffrey A. Law  <law@cygnus.com>

	* pa.h (ASM_DECLARE_FUNCTION_NAME): Change TYPE_NEEDS_CONSTRUCTING
	to TREE_ADDRESSABLE.  From Jim Wilson.

Wed Mar 13 13:40:32 1996  Jim Wilson  <wilson@chestnut.cygnus.com>

	* c-tree.h (warn_sign_compare): Add extern to declaration.

Wed Mar 13 13:37:00 1996  Doug Evans  <dje@cygnus.com>

	* configure: Use cross-make and build-make if building
	cross compiler with cross compiler.

Wed Mar 13 12:00:34 1996  Michael Meissner  <meissner@tiktok.cygnus.com>

	* i386/cygwin32.h (ASM_OUTPUT_ALIGN): Correct defination.

	* rs6000/{win-nt,cygwin32}.h (STARTFILE_SPEC): Add crti.o before
	all objects.
	(ENDFILE_SPEC): Add crtn.o after all objects.

	* configure (powerpcle-*-cygwin32): Use t-winnt, not t-cygin32
	* rs6000/t-cygwin32: Delete, no longer used.

	* rs6000/t-winnt ({,INSTALL_}LIBGCC): Build and install crti.o and
	crtn.o.

	* rs6000/win-nt.h (EXTRA_SECTION_FUNCTIONS): Add ctors_section and
	dtors_section.
	(INVOKE__main): Define, so that __main is called.
	(ASM_OUTPUT_{CONSTRUCTOR,DESTRUCTOR}): Define to put pointers to
	the constructor/destructor in the appropriate section.

	* nt-c{i,n}.asm: New files to be linked before/after all of the users'
	objects.

Wed Mar 13 00:42:17 1996  Per Bothner  <bothner@cygnus.com>

	* dbxout.c (dbxout_type):  Better "variant" handling to ignore
	const/volatile but not typedef names.  Improves Feb 12 change.

Tue Mar 12 17:25:14 1996  David Mosberger-Tang  <davidm@azstarnet.com>

	* glimits.h (__LONG_MAX__): On Alpha, use 64 bit value.

Tue Mar 12 15:07:49 1996  Torbjorn Granlund  <tege@tmg.se>

	* m68k.c (valid_dbcc_comparison_p): Don't test cc_prev_status here.
	(flags_in_68881): New function.
	* m68k.md (dbra peepholes): Use flags_in_68881.

Tue Mar 12 13:54:15 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* sparc.md (nonlocal_goto): Emit barrier after jump.
	(setjmp{,_64,_32}): New patterns.

Tue Mar 12 12:43:27 1996  Jim Wilson  <wilson@cygnus.com>

	* i960.h (ROUND_TYPE_SIZE): Return round_up result instead of
	COMPUTED.

	* expr.c (expand_expr, case COMPONENT_REF): For unaligned object in
	an aligned union, delete check for EXPAND_SUM.

	* expr.h (clear_storage): Add comment terminator.

Mon Mar 11 19:07:50 1996  Jeffrey A. Law  <law@cygnus.com>

	* recog.c (constrain_operands, case 'V'): Don't call
	offsettable_memref_p before reload has completed.

Mon Mar 11 16:06:13 1996  Doug Evans  <dje@cygnus.com>

	* h8300.h (SP_AND_G_REGS): Renamed from SP_AND_G_REG.
	(CC_DONE_CBIT): Delete.
	(CC_OVERFLOW_0,CC_OVERFLOW_UNUSABLE,CC_NO_CARRY): Define.
	* h8300.c (cond_string): Delete CC_DONE_CBIT handling.
	(notice_update_cc): Delete CC_CBIT, CC_WHOOPS.  Add CC_SET_ZN_C0.
	(restore_compare_p): New function.
	(shift_one): Use shll instead of shal so overflow bit is usable.
	Set cc_valid bits to cc_status.flags values.
	(emit_a_shift): Set cc_status.flags.
	* h8300.md (attr cc): Delete whoops,cbit.  Add set_zn_c0.
	(all patterns) Update cc attr setting.
	(tstqi,tsthi,tstsi): Delete CC_DONE_CBIT handling.
	(addhi3,subhi3): Change define_expand to define_insn.
	(branch_true,branch_false): Check if compare needs to be restored.

Mon Mar 11 13:55:23 1996  Michael Meissner  <meissner@cygnus.com>

	* rs6000.h (CONST_DOUBLE_OK_FOR_LETTER_P): Add 'H' for movdi
	patterns in 32 bit that generate 3 instructions.
	(num_insns_constant): Add declaration.

	* rs6000.c (num_insns_constant{,_wide}) Functions to determine the
	number of insns it takes to generate an integer constant.
	(easy_fp_constant): Allow DImode in easy constants.  Use
	num_insns_constant_wide.
	(input_operand): Allow any CONST_{INT,DOUBLE}'s for {SI,DI}mode.

	* rs6000.md (movdi): Generate a normal movdi using a CONST_DOUBLE
	for 32 bit mode rather than using SUBREG's.  For 64 bit mode,
	break large integer constants into smaller pieces.  Add various
	define_splits to handle loading the various DImode constants.

Mon Mar 11 06:54:19 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* combine.c (make_extraction): Use proper mode for INNER in all cases.
	(simplify_comparison, case ZERO_EXTRACT): For bits big endian and
	no extzv, use BITS_PER_WORD.
	* fx80.md, gmicro.md, i386.md, m68k.md, tahoe.md, vax.md:
	Use proper modes and predicates for {sign,zero}_extract.

Sun Mar 10 06:23:52 1996  J"orn Rennecke (amylaar@meolyon.hanse.de)

	* emit-rtl.c (free_insn): New variable.
	(init_emit, restore_emit_status): Clear it.
	(gen_sequence): Store insn in free_insn when sequence length is 1.
	(make_insn_raw): Use free_insn if available and still in the
	rtl generation phase.

Fri Mar  8 15:37:31 1996  Mike Stump  <mrs@cygnus.com>

	* expr.c (expand_expr, case TARGET_EXPR): Delay putting the cleanup
	on the cleanup chain until after the subexpression has been expanded.

Fri Mar  8 16:14:51 1996  J"orn Rennecke (amylaar@meolyon.hanse.de)

        * i386.c (ix86_binary_operator_ok): One memory operand is OK.
        This is independent of commutativity.

Fri Mar  8 14:07:43 1996  Jim Wilson  <wilson@cygnus.com>

	* expr.c (store_constructor_field): Call store_field if bitpos is
	nonzero and target is not a MEM.

	* jump.c (jump_optimize): When handle a USE insn before an
	unconditional jump, disable the optimization if the USE is the
	only insn in the loop.

	* sh.c (reg_unused_after): Return 0 if see a JUMP_INSN.

Fri Mar  8 12:08:36 1996  Doug Evans  <dje@cygnus.com>

	* sparc/lynx.h (CPP_SPEC): Use %(cpp_cpu).

	* sparc/sparc.md (move_pic_label_si,move_label_di): Rewrite length
	attr calcs to be more conservative.

Thu Mar  7 19:14:21 1996  Doug Evans  <dje@cygnus.com>

	* sparc/t-splet: New file.
	* sparc/splet.h: New file.
	* configure (sparclet-*-aout*): Use them.

	* sparc.h (MASK_LIVE_G0,TARGET_LIVE_G0): Define.
	(FIRST_PSEUDO_REGISTER): Add 1 for %icc (now 101).
	(FIXED_REGISTERS,CALL_USED_REGISTERS): Update.
	(FIXED_REGISTERS): %g0 is fixed by default.
	(SPARC_{FIRST,LAST}_V9_FCC_REG): Define.
	(SPARC_{ICC,FCC}_REG): Define.
	(CONDITIONAL_REGISTER_USAGE): Don't fix %fcc0 if v8.
	(REG_CLASS_CONTENTS): Reg 0 is an int reg, reg 100 is %icc.
	(REGNO_REG_CLASS): Rewrite to use global `sparc_regno_reg_class'.
	(REG_ALLOC_ORDER,REG_LEAF_ALLOC_ORDER,LEAF_REGISTERS): Add %icc.
	(REG_CLASS_FROM_LETTER): Handle 'c' for FPCC_REGS in non-v9 case.
	(REGNO_OK_FOR_{BASE,INDEX}_P): Treat %g0 as a normal reg.
	(REG_OK_FOR_{BASE,INDEX}_P,EXTRA_CONSTRAINT): Likewise.
	(REGISTER_NAMES): Add %icc.
	(ADDITIONAL_REGISTER_NAMES): Use SPARC_ICC_REG.
	* sparc.c (leaf_reg_remap): Add %icc=100.
	(reg_or_0_operand): Don't allow 0 if TARGET_LIVE_G0.
	(fcc_reg_operand): Renamed from ccfp_reg_operand.
	Use SPARC_FCC_REG.  Don't treat reg 0 as an fcc reg.  Don't match
	modes if `mode' argument is VOIDmode.
	(icc_or_fcc_reg_operand): New function.
	(gen_compare_reg): Use SPARC_FCC_REG for v8 fp compares.
	Use SPARC_ICC_REG for int compares.
	(eligible_for_epilogue_delay): Don't allow anything if TARGET_LIVE_G0.
	Delete unnecessary test for %g0.
	(emit_move_sequence): Don't emit (set (mem) (const_int 0)) if
	TARGET_LIVE_G0.
	(output_scc_insn): Label moved to operand 3.  Condition code reg
	moved to operand 2.
	(sparc_mode_class): Enum C_MODE renamed to CC_MODE.
	(hard_32bit_mode_classes): Set reg 0 to S_MODES.  Add entry for %icc.
	(hard_64bit_mode_classes): Set reg 0 to D_MODES.  Add entry for %icc.
	(sparc_regno_reg_class): New global.
	(sparc_init_modes): Initialize it.
	(output_cbranch): Delete fp_cond_reg argument.
	(print_operand, MEM op): Don't print "%g0+" if TARGET_LIVE_G0.
	(sparc_flat_eligible_for_epilogue_delay): Don't allow anything if
	TARGET_LIVE_G0.
	* sparc.md (live_g0): New attribute.
	(*): Integer condition code register is now reg 100.
	Use SPARC_ICC_REG instead of hardcoding reg 100 where possible.
	Non-v9 floating point condition code register is now reg 96.
	(*cmp{sf,df,tf}_{fpe,fp}_sp{32,64}): Combine v9/non-v9 cases.
	(*{normal,inverted}_{,fp,fpe}_branch): Update call to output_cbranch.
	(*mov{qi,hi,si}_insn): Don't use if TARGET_LIVE_G0.
	(*mov{qi,hi,si}_insn_liveg0): New patterns.
	(*mov{si,di,sf,df,tf}_ccfp{,e}_sp64): ccfp_reg_operand renamed to
	fcc_reg_operand.
	(*negdi2_sp32,negsi2,one_cmplsi2,ffssi2): Ensure %%g0 is 0 if
	TARGET_LIVE_G0.
	(*one_cmpldi2_sp32): Move operand 1 to rs1 and use 0 as rs2.
	(patterns that use %g0 in rs2): Use 0 immediate value instead.
	(patterns that read %g0): Don't use if TARGET_LIVE_G0.

Thu Mar  7 15:39:16 1996  Jim Wilson  <wilson@chestnut.cygnus.com>

	* sh.h (PASS_IN_REG_P): Change < to <=.
	* va-sh.h (va_start): Change __SH3E___ to __SH3E__.
	(va_arg): Add little-endian SH3E support.  Fix big-endian version
	to work for arguments smaller than the word size.

Thu Mar  7 10:37:37 1996  Jeffrey A. Law  <law@cygnus.com>

	* lib2funcs.asm: Remove entry/exit routines.  Move them into...
	* ee.asm: New file.  Entry/exit code.
	* ee_fp.asm: New file.  Entry/exit code with frame pointer.
	* t-pa: Corresponding changes.
	* t-pro: Corresponding changes.

	* pa.c: Fix misc small typos/thinkos in recent changes.

Wed Mar  6 17:36:03 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* cplus-dem.c (demangle_template): Fix for address-of-extern arguments.

Wed Mar  6 15:12:55 1996  Jeffrey A. Law  <law@cygnus.com>

	* t-pro (dp-bit rule): Fix typo.

	* lib2funcs.asm (__outline_prologue): Remove frame pointer
	support.
	(__outline_prologue_fp): Out of line prologue with frame pointer.
	(__outline_epilogue, outline_epilogue_fp): Similarly.
	* pa.c (compute_frame_size): Allocate enough space to avoid holes
	in the callee register saves.  Remove some special handling of %r3.
	(hppa_expand_prologue): Don't do an out of line prologue/epilogue
	if it would take more insns than an inline prologue/epilogue.
	Don't leave holes in the callee register save set.
	(hppa_expand_prologue): Corresponding changes.  Pass stack size
	to out of line epilogue code.
	* pa.h (FRAME_POINTER_REQUIRED): Revert last change.
	* pa.md (outline_prologue_call): Handle outline prologues which
	don't need frame pointers.
	(outline_epilogue_call): Similarly.
	* t-pro: Reenable multilib code.  Build a set of libraries that
	optimize for space.

Wed Mar  6 14:28:14 1996  Jim Wilson  <wilson@chestnut.cygnus.com>

	* Makefile.in (USER_H): Add ginclude/va-sh.h.
	* ginclude/stdarg.h, ginclude/varargs.h: Use va-sh.h.
	* ginclude/va-sh.h: New file.

	* sh.h (PASS_IN_REG_P): Fix typo in last change.

Wed Mar  6 11:42:06 1996  David Edelsohn  <edelsohn@mhpcc.edu>

	* rs6000.h (enum processor_type): Remove PROCESSOR_PPC602.
	(RTX_COSTS): Remove PROCESSOR_PPC602.  PPC603 MULT cost depends
	on constant and domain.
	* rs6000.c (processor_target_table): 602 uses PROCESSOR_PPC603.
	(get_issue_rate): Remove CPU_PPC602.
	* rs6000.md (function units): Remove PPC602.  Add store and
	fpstore type attribute values.  Update patterns.

Tue Mar  5 18:43:43 1996  Richard Henderson  <rth@tamu.edu>

	* m68k/coff.h (ASM_OUTPUT_SECTION_NAME): New define.

	* m68k/{aux-crt1.c,aux-crt[2n].asm}: New files.
	* m68k/{aux-exit.c,aux-low.gld,aux-mcount.c}: More new files.
	* m68k/{aux.h,auxgnu.h,auxstd.h}: Even more new files.
	* m68k/{t-aux,xm-aux.h}: The rest of the new files.
	* m68k/sgs.h (ASM_OUTPUT_CASE_END): Add missing semicolon.
	(switch_table_difference_label_flag): Make extern.
	* fixincludes (sys/param.h): Fix c89 __asm statements.
	* configure (m68k-apple-aux*): New target.

Tue Mar  5 17:38:19 1996  Doug Evans  <dje@cygnus.com>

	* sparc.md (*mov{qi,hi,si}_insn): Simplify length attribute.
	(*movsi_insn): Use fpload/fpstore attributes for fp loads/stores.
	%r1 -> %1 for fpstore alternative.
	(*movsf_insn,*movsf_no_f_insn): %r1 -> %1.

Tue Mar  5 17:19:17 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* expr.c (expand_expr, case *_DECL): If we make a non-local
	reference from a function with DECL_NO_STATIC_CHAIN set, abort.
	(expand_expr, case ADDR_EXPR): We don't need a trampoline for a
	function with DECL_NO_STATIC_CHAIN set.
	* function.c (lookup_static_chain): If we're checking on a function
	that doesn't need a static chain, return 0.
	(init_function_start): We don't need context if DECL_NO_STATIC_CHAIN
	is set.
	* tree.c (staticp): Check DECL_NO_STATIC_CHAIN on nested functions.

Tue Mar  5 15:04:29 1996  Jim Wilson  <wilson@chestnut.cygnus.com>

	* sh.md (push_e, pop_e): Add TARGET_SH3E to condition.
	* sh.h (JUMP_TABLES_IN_TEXT_SECTION): Define.
	* sh.c (find_barrier): Set si_limit to 1018 instead of 1020, and
	hi_limit to 510 instead of 512.

Tue Mar  5 13:39:44 1996  Doug Evans  <dje@cygnus.com>

	* loop.c (init_loop): Use pseudo reg in add_cost computation
	so cost doesn't vary depending on whether reg 0 happens to be
	fixed or not.

Tue Mar  5 09:32:24 1996  J"orn Rennecke (amylaar@meolyon.hanse.de)

	* reg-stack.c (record_label_references): Check for undefined label.

Tue Mar  5 09:22:20 1996  Scott Christley (scottc@net-community.com)

	* objc/objc-api.h, objc/runtime.h: Include objc/thread.h.
	* objc/class.c (__objc_init_class_tables): Surround sarray access
	with mutex lock/unlock.
	(__objc_add_class_to_hash, objc_lookup_class): Likewise.
	(objc_get_class, objc_get_next_class): Likewise.
	(__objc_resolve_class_links, class_pose_as): Likewise.
	* objc/init.c (__objc_runtime_mutux, __objc_runtime_thread_alive):
	New variables.
	(objc_init_statics, __objc_init_protocols): Surround sarray access
	with mutex lock/unlock
	(__objc_exec_class): Likewise.
	Initialization for thread-safe global variables.
	Declarations for thread-safe functions and global variables
	* objc/sendmsg.c (get_imp, __objc_responds_to):
	Surround sarray access with mutex lock/unlock.
	(__objc_init_install_dtable): Likewise.
	(__objc_update_dispatch_table_for_class): Likewise.
	(__objc_print_dtable_stats): Likewise.
	* objc/selector.c (sel_get_typed_uid, sel_get_any_typed_uid): Likewise.
	(sel_get_any_uid, sel_get_name, sel_register_name): Likewise.
	(sel_register_typed_name): Likewise.
	* objc/sarray.h (union sversion): New.
	(struct sarray): Maintain multiple versions.
	(sarray_remove_garbage): Add prototype.
	* objc/sarray.c (sarray_{remove,free}_garbage): New functions.
	(sarray_at_put, sarray_new, sarray_lazy_copy):
	Modify/copy sarray structure/data in a thread-safe manner
	(sarray_{realloc,free}): Reallocate/free sarray structure/data in a
	thread-safe manner.

	* objc/THREADS, objc/thread.c, objc/thread.h: New files.
	* objc/thread-{decosf1,irix,solaris,win32,single}.c: New files.
	* objc/objc-list.h: Renamed from objc/list.h.
	* objc/Makefile: Changes to compile new files and name renaming.
	* objc/makefile.dos: Likewise.

Tue Mar  5 07:51:31 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* bc-emit.c, bc-optab.c (free): Delete declaration of library function.

	* c-decl.c (duplicate_decl): If making decl non-external, copy
	context from old to new.

Tue Mar  5 02:27:35 1996  Jeffrey A. Law  <law@cygnus.com

	* lib2funcs.asm (__outline_prologue): New "function".
	(__outline_epilogue): New "function".
	* pa.h (TARGET_SPACE): Define.
	(target_flags): Add -mspace and -mno-space.  Enable/disable
	space saving optimizations.
	(FRAME_POINTER_REQUIRED): Frame pointers are always required
	when generating out of line prologues and epilogues.
	* pa.c (compute_frame_size): Handle out of line prologues/epilogues.
	(hppa_expand_prologue): If optimizing for space, emit an out of
	line prologue.
	(hppa_expand_epilogue): Similarly.
	(override_options): Optimizing for space is not compatable with
	either profiling or PIC code generation.
	* pa.md (outline_prologue_call): New pattern.
	(outline_epilogue_call): Likewise.

Tue Mar  5 02:17:32 1996  Doug Evans  <dje@cygnus.com>

	* sparc.md (*cmp{si,di}_insn): %r0 -> %0.
	(DFmode move define_split): Ensure registers not extended v9 fp regs.
	(*mov{sf,df,tf}_cc_reg_sp64): %r3 -> %3.

Mon Mar  4 18:46:37 1996  Manfred Hollstein  <manfred@lts.sel.alcatel.de>

	* Makefile.in (CRT0STUFF_T_CFLAGS): New macro.
	(stamp-crt0, crt0.o, mcrt0.o): New goals.
	(STAGESTUFF): stamp-crt0 added.

	* collect2.c (main): Check new define DEFAULT_A_OUT_NAME.

	* m68k.c (print_operand): Emit .l as scale factor #ifdef MOTOROLA.
	* m68k/mot3300-crt0.S, m68k/mot3300Mcrt0.S: New files.
	* m68k/mot3300g.h: Deleted.
	* m68k/mot3300.h (FUNCTION_PROFILER): Emit label references
	corresponding to those generated by ASM_OUTPUT_INTERNAL_LABEL.
	(MOTOROLA, MOTOROLA_BSR, ...): Define #ifndef USE_GAS.
	(ASM_SPEC): Define properly #ifdef USE_GAS.
	(LIB_SPEC): -L/usr/lib/libp deleted.
	(STARTFILE_SPEC): -L/usr/lib/libp added.
	(DEFAULT_A_OUT_NAME): Define.
	(LINK_SPEC): Pass -v if GNU ld is used.
	(LOCAL_LABEL_PREFIX): Local labels start with .L using GAS, else L%.
	(USER_LABEL_PREFIX): Undefine.
	(FUNCTION_PROFILER): Call asm_fprintf instead of normal fprintf.
	(ASM_APP_ON, ASM_FILE_START): GAS supports it.
	(CTORS_.../DTORS_...): Define if GNU ld is used.
	(ASM_FILE_START): Define properly for Motorola and GNU as syntax.
	(TARGET_VERSION): Re-define only #ifndef USE_GAS.
	(CALL_USED_REGISTERS): Deleted.
	(GLOBAL_ASM_OP): Re-define only #ifndef USE_GAS.
	(ASM_{LONG,SHORT,CHAR,BYTE,BYTE_OP}): New macros.
	(ASM_OUTPUT_{DOUBLE,LONG_DOUBLE,FLOAT,INT,SHORT}): Use them.
	(ASM_OUTPUT_{CHAR,BYTE,ASCII,FLOAT_OPERAND,DOUBLE_OPERAND}): Likewise.
	(ALIGN_ASM_OP, SKIP_ASM_OP): New macros.
	(ASM_OUTPUT_{ALIGN,SKIP}): Use them.
	(ASM_OUTPUT_SOURCE_FILENAME): Define only if not using GNU as.
	(ASM_{GENERATE,OUTPUT}_INTERAL_LABEL): Provide proper definitions for
	Motorola and GNU as syntax.
	(ASM_OUTPUT_ADDR_{VEC,DIFF}_ELT): Changed for portability between
	Motorola and GNU as syntax.
	(ASM_OUTPUT_{CASE_LABEL,OPCODE}): Define only if not using GNU as.
	(ASM_OUTPUT_CASE_FETCH, ASM_RETURN_CASE_JUMP): New macros.
	(ASM_OUTPUT_{COMMON,LOCAL}): Proper defns for Motorola and gas syntax.
	(SDB_...): Define only for Motorola as.
	(ALT_LIBM): New define to tell g++.c about an alternative name for
	`-lm'.
	(MATH_LIBRARY, NEED_ATEXIT, HAVE_ATEXIT, EXIT_BODY): New macros.
	* m68k/t-mot3300, m68k/t-mot3300-{gald,gas,gld}: New files.
	* m68k/x-mot3300-gas: New file.
	* m68k/xm-mot3300.h (USG): Set to 1.
	* configure (m68k-motorola-sysv*): Keep track of new different
	combinations (--with-gnu-...), and provide proper definitions for
	tm_file, xmake_file, tmake_file, use_collect2, and extra_parts.

	* gbl-ctors.h (HAVE_ATEXIT): Define if NEED_ATEXIT is defined.
	(atexit): Use `int atexit' prototype also if NEED_ATEXIT is defined.
	(on_exit): According to man on_exit on the Sun it returns int not void.
	* libgcc2.c (L_bb/atexit, onexit): Declarations replaced by
	#include'ing "gbl-ctors.h".
	(L_exit/atexit): New function.
	(L_exit/exit): Call any registered functions.

Mon Mar  4 18:03:38 1996  Bryan Ford  (baford@cs.utah.edu)

	* configure (i[3456]86-moss-msdos*): New target.
	* i386/moss.h: New file.

Mon Mar  4 17:38:50 1996  Jim Wilson  <wilson@cygnus.com>

	* sh.h (PASS_IN_REG_P): Don't reject BLKmode for SH3e.
	For SH3e, do reject parameter that won't fit entirely in registers.

	* sh.md (mulhisi3-2, mulhisi3-1, mulsidi3_i, umulsidi3_i,
	smulsi3_highpart, umulsi3_highpart): Renames operands 1/2 to 0/1.
	(mulsidi3, umulsidi3): Add support for TARGET_LITTLE_ENDIAN.

	* sh.c (machine_dependent_reorg): In TARGET_RELAX code, when scan
	forward from LINK, fail if pass a CODE_LABEL before finding INSN.
	Fail if SCAN not INSN is a JUMP_INSN.

Mon Mar  4 11:27:10 1996  Michael Meissner  <meissner@tiktok.cygnus.com>

	* rs6000.h (CALL_LONG): Change CALL_xx values from an enumeration
	to bitmasks.  Add CALL_LONG to support longcall attributes.
	(rs6000_args): Call_cookie field is now an int.
	(rs6000_longcall_ref): Add declaration.

	* rs6000.c (init_cumulative_args): Add support for longcall
	attributes to always call through a pointer.
	(function_arg): Ditto.
	(rs6000_valid_type_attribute_p): Ditto.
	(rs6000_longcall_ref): New function for long calls.

	* rs6000.md (call insns): Add support for longcall attributes.

Mon Mar  4 08:42:14 1996  J"orn Rennecke (amylaar@meolyon.hanse.de)

	* real.c (significand_size): Don't test the modes, but their sizes.

	* dwarfout.c (xstrdup): Moved from here.
	* toplev.c (xstrdup): New function.
	* tree.h (xstrdup): Declare.
	* bc-emit.c (bc_xstrdup): Delete.
	* expr.c (bc_strdup): Delete.
	(bc_load_externaddr_id): Use xstrdup instead of bc_xstrdup.
	* function.c (bc_expand_function_start): Likewise.
	* 1750a.c (strdup): Delete.
	(float_label): Use xstrdup instead of strdup.
	* 1750a.h (xstrdup): Declare instead of instead of strdup.
	(ASM_OUTPUT_LABEL): Use xstrdup instead of strdup.
	(FIX_FRAME_POINTER_ADDRESS): Don't use DEPTH in string.

Mon Mar  4 08:23:23 1996  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>

	* xm-we32k.h (NO_WAIT_H): Deleted.

	* collect2.c: Never include wait.h.

Sat Mar  2 22:43:07 1996  Torbjorn Granlund  <tege@spiff.gnu.ai.mit.edu>

	* configure (code for making links): Work around sh bug on FreeBSD.

Sat Mar  2 13:40:29 1996  Jeffrey A. Law  <law@cygnus.com>

	* h8300.h (BIGGEST_FIELD_ALIGNMENT): Replace uses of
	TARGET_ALIGN_STRUCT_300 with TARGET_ALIGN_300.
	(BIGGEST_ALIGNMENT): Likewise.

Sat Mar  2 08:04:50 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* calls.c (expand_call): If passing by invisible ref, not const.

	* sparc.c (SKIP_CALLERS_UNIMP_P): Make agree with test used in call.

	* expr.c (do_jump, case COMPOUND_EXPR): Call preserve_temp_slots.

	* fold-const.c (fold, case *_DIV_EXPR): Ignore SAVE_EXPR if has RTL.

Fri Mar  1 17:59:17 1996  Jeffrey A. Law  <law@cygnus.com>

	* optabs.c (emit_cmp_insn): Immediately copy the return
	value from the library call into a pseudo register.
	(emit_float_lib_cmp): Likewise.

Fri Mar  1 14:37:40 1996  Michael Meissner  <meissner@tiktok.cygnus.com>

	* rs6000/sysv4.h (BSS_SECTION_ASM_OP): Define.
	(*_SECTION_ASM_OP): Change tab after .section into a space.
	(ASM_OUTPUT_INT): Ditto.
	(ASM_OUTPUT_ALIGNED_LOCAL): Rewrite to use bss_section.
	(ASM_OUTPUT_ALIGNED_BSS): Define to use ASM_GLOBALIZE_LABEL and
	ASM_OUTPUT_ALIGNED_LOCAL.

	* rs6000/win-nt.h (BSS_SECTION_ASM_OP): Define.
	(ASM_OUTPUT_ALIGNED_LOCAL): Define.
	(ASM_OUTPUT_LOCAL): Don't define any more.
	(ASM_OUTPUT_ALIGNED_BSS): Define to use ASM_GLOBALIZE_LABEL and
	ASM_OUTPUT_ALIGNED_LOCAL.

Thu Feb 29 17:33:12 1996  Jim Wilson  <wilson@chestnut.cygnus.com>

	* c-typeck.c (push_init_level): When output padding to align structure
	field, set constructor_unfilled_fields.

	* dbxout.c (dbxout_type, case METHOD_TYPE): Add CHARS (1) call
	after emitting second '#' character.

Thu Feb 29 13:59:27 1996  Doug Evans  <dje@charmed.cygnus.com>

	* h8300.h (ASM_OUTPUT_BSS): Define.
	* m68k/coff.h (BSS_SECTION_ASM_OP): Define.
	(ASM_OUTPUT_ALIGNED_BSS): Define.
	* m68k/m68k-aout.h (BSS_SECTION_ASM_OP): Define.
	(ASM_OUTPUT_BSS): Define.

Thu Feb 29 13:39:39 1996  Per Bothner  <bothner@cygnus.com>

	* varasm.c (compare_constant_1):  For a SET_TYPE CONSTRUCTOR,
	first extract and compare the set length.

	* varasm.c (record_constant_1):  For SET_TYPE CONSTRUCTOR,
	permanent_obstack.next_free is *end* of available space.

Thu Feb 29 13:14:14 1996  Jeffrey A. Law  <law@cygnus.com>

	* pa.h (TARGET_SWITCHES): Add new flags "-mlong-load-store" and
	"-mno-long-load-store".
	(TARGET_LONG_LOAD_STORE): Define.
	* pa.md (symbolic high part): Handle TARGET_LONG_LOAD_STORE.

Thu Feb 29 11:39:30 1996  Stan Cox  <coxs@dg-rtp.dg.com>

	* i386.md (cmpxf*): XF compare cannot have mem operands.
	(casesi expand): Put (minus:SI..) into subsi3 format.
	* i386.c (i386_return_pops_args): Cleanup extra argument
	used as address of a returned structure.

Wed Feb 28 22:24:28 1996  Doug Evans  <dje@cygnus.com>

	* varasm.c (enum in_section): Define in_bss if BSS_SECTION_ASM_OP
	is defined.
	(bss_section,asm_output_bss,asm_output_aligned_bss): New functions.
	(assemble_variable): Delete redundant test for too large an object.
	Rewrite test for uninitialized variables.  Use new macros
	ASM_OUTPUT{,_ALIGNED}_BSS if defined to output global uninitialized
	but not common variables.
	* bytecode.h (BC_OUTPUT_BSS): Define.
	* lynx.h (EXTRA_SECTIONS): Delete in_bss.
	(EXTRA_SECTION_FUNCTIONS): Delete BSS_SECTION_FUNCTION.
	* svr3.h (EXTRA_SECTIONS): Likewise.
	(BSS_SECTION_FUNCTION): Delete.
	* convex.h (EXTRA_SECTIONS,EXTRA_SECTIONS_FUNCTIONS): Delete.
	* dsp16xx.h (EXTRA_SECTIONS): Delete in_bss.
	(EXTRA_SECTION_FUNCTIONS): Delete bss_section.
	* gmicro.h (EXTRA_SECTIONS,EXTRA_SECTIONS_FUNCTIONS): Delete.
	* i386/aix386ng.h (EXTRA_SECTION_FUNCTIONS): Delete
	BSS_SECTION_FUNCTION.
	* i386/att.h (BSS_SECTION_FUNCTION): Delete.
	* i386/sco5.h (EXTRA_SECTIONS): Delete in_bss.
	(EXTRA_SECTION_FUNCTIONS): Delete BSS_SECTION_FUNCTION.
	(BSS_SECTION_FUNCTION): Delete.
	* i386/seq-sysv3.h (BSS_SECTION_FUNCTION): Delete.
	* i386/svr3gas.h (EXTRA_SECTIONS): Delete in_bss.
	(EXTRA_SECTION_FUNCTIONS): Delete BSS_SECTION_FUNCTION.
	(BSS_SECTION_FUNCTION): Delete.
	* i860/paragon.h (EXTRA_SECTIONS,EXTRA_SECTIONS_FUNCTIONS): Undef.
	* m68k/crds.h (EXTRA_SECTIONS,EXTRA_SECTIONS_FUNCTIONS): Delete.
	(BSS_SECTION_ASM_OP): Define.
	* m68k/m68k.h (BC_OUTPUT_BSS): Define.
	* mips/iris6.h (EXTRA_SECTIONS): Delete in_bss.
	* pa.h (EXTRA_SECTIONS): Delete in_bss.
	(EXTRA_SECTION_FUNCTIONS): Delete bss_section.
	* sparc/litecoff.h (EXTRA_SECTIONS): Delete in_bss.

Wed Feb 28 14:12:25 1996  Jim Wilson  <wilson@chestnut.cygnus.com>

	* sh.h (FUNCTION_VALUE_REGNO_P, FUNCTION_ARG_REGNO_P): Include FP
	registers only when TARGET_SH3E.
	(PASS_IN_REG_P): Exclude BLKmode only when ! TARGET_SH3E.

Wed Feb 28 12:03:26 1996  Michael Meissner  <meissner@tiktok.cygnus.com>

	* rs6000.c (rs6000_trampoline_{template,size}): Change Windows NT
	trampoline template so it doesn't require making stack executable.
	Add support for 64 bit systems.
	(rs6000_initialize_trampoline): Ditto.

Tue Feb 27 16:42:00 1996  David Edelsohn  <edelsohn@mhpcc.edu>

	* rs6000.c (print_operand): New code 'H'.
	* rs6000.md (insv, extzv): Add DImode patterns.  Use 'h'
	consistently for masking SImode shifts.
	(rotldi3, ashldi3, lshrdi3, ashrdi3): Use 'H'.
	(movsf split): Generate CONST_INT instead of SUBREG.

Tue Feb 27 15:02:17 1996  Doug Evans  <dje@cygnus.com>

	* sh.h (HANDLE_PRAGMA): Delete `return'.

Tue Feb 27 08:18:12 1996  Richard Earnshaw (rearnsha@armltd.co.uk)

	* arm.c (aof_text_section): Remove pseudo read-only hack.  Doesn't
	take a parameter any more.
	* arm/aof.h (EXTRA_SECTIONS, EXTRA_SECTION_FUNCTIONS): Remove
	readonly data sections.
	(READONLYDATA_SECTION, READONLY_DATA_SECTION): Delete.

	* arm.h (enum arm_cond_code): New enum.
	(ARM_INVERSE_CONDITION_CODE): Moved here from arm.c.
	(SELECT_CC_MODE): Call arm_select_cc_mode to do the work.
	(PREDICATE_CODES): Add dominant_cc_register; delete
	reversible_cc_register.
	* arm.c (arm_current_cc): Now an enum.
	(ARM_INVERSE_CONDITION_CODE): Moved to arm.h
	(revsersible_cc_register): Delete.
	(dominant_cc_register): New function.
	(select_dominance_cc_mode): New function.
	(arm_select_cc_mode): New function.
	(output_return_instruction): New parameter REVERSE, used to
	reverse the condition of a conditional return.  All callers
	changed.
	(arm_print_operand case 'D'): Only suppress condition printing
	if the operand is a NULL pointer.
	(get_arm_condition_code): Now a static function returning
	enum arm_cond_code.  Handle dominance expressions.  Return enum
	values rather than integers.
	* arm.md (*addsi3_compare0_scratch): New insn.
	(*movsi_compare0, *cmpsi_insn, *cmpsi_shiftsi): Make sure the
	compare has mode CC.
	(cmp{si,sf,df,xf} expands): Just provide sufficient information
	to allow the parameters to be matched properly.
	(*cmpsi_negsi): Delete (of dubious validity).
	(*cmpsi_shiftsi_swp): New pattern.
	(*condbranch_reversed): No longer needs to check REVERSIBLE_CC_MODE.
	(mov{si,sf,df}cc, *mov{si,sf,df}{,_hard,_soft}_insn): The mode of the
	IF_THEN_ELSE must be appropriate to the target (not void).
	(*and_scc): Match cc_register, not reversible_cc_register.
	(*ior_compare_compare): Delete.
	(split for ior_compare_compare + condjump): Delete.
	(*impossible_cond_compare): Delete.
	(*condition_compare_ior): Delete.
	(*cond_move): Mode for the IF_THEN_ELSE must be SImode.
	(*and_scc_scc): Delete.
	(split for and_scc_scc + condjump): Delete.
	(*impossible_cond_branch_and): Delete.
	(*cmp_ite0, *cmp_ite1): New patterns.
	(if_compare_not): Should be an anonymous pattern.
	(Peephole for move and compare): Compare mode must be mode CCmode.
	(Split pattern for comparing shifted reg then branch): Delete.
	(*loadqi_compare): Delete, replaced with a split pattern to do
	the same thing.
	(*cond_move_not): Match cc_register, not reversible_cc_register.

	* arm.c ({load,store}_multiple_sequence): New functions.
	(emit_{ldm,stm}_seq): New functions.
	* arm.md (load/store multiple peepholes): Rewrite using the above
	functions.
	(all patterns taking immediate_operand): If the code later assumes
	this is a CONST_INT, then match const_int_operand instead.

Mon Feb 26 17:26:13 1996  Doug Evans  <dje@cygnus.com>

	* sparc.md: Add sparclet scheduling parameters.
	(compare define_insn's): Move closer to compare define_expand's.
	(32 bit multiply patterns): Use for TARGET_SPARCLET.
	(*smacsi,*smacdi,*umacdi): Multiply/accumulate patterns for the
	sparclet.

Sat Feb 24 19:13:29 1996  David Edelsohn  <edelsohn@mhpcc.edu>

	* rs6000.md (movsf split): Fix typo in last patch.

Sat Feb 24 10:02:55 1996  Michael Meissner  <meissner@tiktok.cygnus.com>

	* toplev.c (fatal_insn): Flush stdout/stderr.

Sat Feb 24 02:03:28 1996  Jeffrey A. Law  <law@cygnus.com>

	* pa.md (abssi2): Rework to avoid matching constraints.

Fri Feb 23 11:21:43 1996  Jeffrey A. Law  <law@cygnus.com>

	* pa.c (override_options): Warn if both PIC code generation and
	profiling are requested.

Fri Feb 23 08:47:38 1996  Richard Kenner  (kenner at vlsi1)

	* expr.c (expand_builtin, case BUILT_IN_SETJMP): Set CONST_CALL_P
	on NOTE_INSN_SETJMP instead of emitting USE insns for call-saved regs.
	* reload1.c (reload): For special CONST_CALL_P NOTE_INSN_SETJMP,
	mark all call-saved regs as used.
	* sched.c (sched_analyze): Record NOTE_INSN_SETJMP if no
	CALL_INSN as prev; preserve CONST_CALL_P bit.
	(reemit_notes): Restore CONST_CALL_P.

Thu Feb 22 17:45:12 1996  Doug Evans  <dje@cygnus.com>

	* configure (sparclet-*-aout*): Set extra_headers.
	* ginclude/inl-sparc.h: New file.

Wed Feb 21 20:39:53 1996  Doug Evans  <dje@cygnus.com>

	* configure (sparc64-*-solaris2*): Merge with sparc-*-solaris2*.
	* sparc.h (enum processor_type): Declare.
	(sparc_cpu_attr): Define.
	(TARGET_OPTIONS): Add -mtune=.
	(sparc_select): Declare.
	(sparc_cpu_string): Delete.
	(FIRST_PSEUDO_REGISTER): Set to 100.
	({FIXED,CALL_USED}_REGISTERS): Merge !v9/v9 cases.
	(CONDITIONAL_REGISTER_USAGE): Mark %g5 as fixed if !v9.
	Mark %g1 as fixed if v9.  Fix v9-only regs if !v9.
	Mark fp{16..47} as call-saved if v9.
	(enum reg_class): Merge !v9/v9 cases.
	(REG_CLASS_NAMES,REG_CLASS_CONTENTS,REGNO_REG_CLASS): Likewise.
	(REG_ALLOC_ORDER,REG_LEAF_ALLOC_ORDER,LEAF_REGISTERS): Likewise.
	(FP_REG_CLASS_P,SPARC_REGISTER_NAMES): Likewise.
	(REG_CLASS_FROM_LETTER): Test TARGET_V9 at runtime.
	* sparc.c (sparc_cpu_string): Delete.
	(sparc_select): New global.
	(sparc_override_options): Handle -mtune=xxx.
	* sparc.md (cpu attr): Add sparc{lite,let} implementations.
	* sparc/sp64-sol2.h: Deleted.

	* arm.md (consttable_end): Delete call to text_section.
	(align_4): Delete call to readonly_data_section.

Wed Feb 21 14:29:06 1996  Ian Lance Taylor  <ian@cygnus.com>

        * cplus-dem.c (demangle_template): Initialize is_bool.  Correctly
        handle 0 as a pointer value parameter.

Wed Feb 21 14:13:29 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* tree.c (decl_function_context): Do decl_function_context right for
	function-local classes.

Wed Feb 21 12:42:52 1996  Jeffrey A. Law  <law@cygnus.com>

	* c-typeck.c (initializer_constant_valid_p): Don't dereference
	a null pointer on partial structure initialization.

Wed Feb 21 11:49:58 1996  David Edelsohn  <edelsohn@mhpcc.edu>

	* rs6000.h (ASM_OUTPUT_EXTERNAL): Append section info
	even when verbatim symbol prefix '*' present.
	* rs6000/aix3newas.h (ASM_OUTPUT_EXTERNAL): Same.
	* rs6000/aix41.h (ASM_OUTPUT_EXTERNAL): Same.
	* rs6000/powerpc.h (ASM_OUTPUT_EXTERNAL): Same.
	* rs6000/win-nt.h (ASM_OUTPUT_EXTERNAL): Same.

Wed Feb 21 03:55:32 1996  Paul Eggert  <eggert@twinsun.com>

	* cccp.c (validate_else): Don't loop given `#endif /'.
	Handle multiple adjacent backslash-newlines correctly.
	Accept a new parameter LIMIT to specify end of input;
	this prevents confusion when the input contains '\0' characters.
	(collect_expansion): Fix off-by-1 error when searching for `*/'
	at end of a comment used for traditional token concatenation.
	(macarg1): Fix off-by-1 error when skipping past `*/'
	at end of comment.

Tue Feb 20 16:12:31 1996  Doug Evans  <dje@cygnus.com>

	* hard-reg-set.h (twice unrolled GO_IF_HARD_REG_EQUAL): Add missing \.

Tue Feb 20 14:21:16 1996  Jeffrey A. Law  <law@cygnus.com>

	* pa.h (DBX_CONTIN_LENGTH): Define to 4000 characters.

	* pa.c (hppa_expand_epilogue): Always emit a blockage insn
	before cutting back the stack.

Mon Feb 19 19:42:15 1996  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* sparc.h (TARGET_SWITCHES): Add -m{,no-}impure-text.
	(MASK_IMPURE_TEXT, TARGET_IMPURE_TEXT): Define.
	(LINK_SPEC): Only add `-assert pure-text' if -mimpure-text wasn't used.

Mon Feb 19 19:20:15 1996  Doug Evans  <dje@canuck.cygnus.com>

	* configure (sparc-aout): sparc-aout.h renamed to aout.h.
	(sparclet-aout): Likewise.
	(sparclite-*-aout*): Renamed from sparclite-*-*.
	Don't set use_collect2.
	(target_cpu_default): Set to TARGET_CPU_<cpu> for sparc.

	* sparc.h (TARGET_CPU_sparc{,let,lite,64}): Define.
	({CPP,ASM}_DEFAULT_SPEC): Set from TARGET_CPU_foo.
	(SPARC_ARCH64 CPP_PREDEFINES): Define __arch64__.
	(CPP_SPEC): Add %(cpp_cpu).
	(CPP_CPU_SPEC): Define.
	(CC1_SPEC): Convert -m<cpu> to -mcpu=<cpu>.
	(ASM_SPEC): Add %(asm_cpu).
	(ASM_CPU_SPEC): Define.
	(EXTRA_SPECS,SUBTARGET_EXTRA_SPECS): Define.
	(OVERRIDE_OPTIONS): Call SUBTARGET_OVERRIDE_OPTIONS after
	sparc_override_options.
	({MASK,TARGET}_SUPERSPARC): Delete.
	({MASK,TARGET}_SPARCLET): Define.
	(MASK_ISA): Renamed from MASK_CPUS.
	(TARGET_SWITCHES): Delete no-{v8,sparclite}.
	(sparc_cpu,sparc_cpu_string): Declare.
	({SUB,}TARGET_OPTIONS): Define.
	(FIXED_REGISTERS): Add definitions for sparc64 in 32 bit mode.
	(CONDITIONAL_REGISTER_USAGE): Don't set fixed_regs[234] if sparc64.
	Don't set call_used_regs[48..80] for sparc64 in 32 bit mode.
	Don't clobber fixed_regs[234] if -ffixed- was passed.
	(ADJUST_COST): Change test for supersparc.
	* sparc.c (sparc_cpu_string,sparc_cpu): New globals.
	(sparc_override_options): Set ISA and CPU from sparc_cpu_string.
	Delete tests for v9 only switches if not v9.
	Error if -mcpu=v9 and v9 support not compiled in.
	* sparc/sol2.h (CPP_SPEC): Use %(cpp_cpu).
	(ASM_SPEC): Likewise.
	(ASM_{DEFAULT,CPU}_SPEC): Use Solaris syntax for sparc64.
	* sparc/sysv4.h (ASM_SPEC): Add %(asm_cpu).
	* sparc/t-sparcbare (MULTILIB_*): -mv8 renamed to -mcpu=v8.
	* sparc/t-sparclite (MULTILIB_*): Delete msoft-float and mno-flat,
	they're the defaults.  Add -mcpu=f934 as synonym for -mfpu.
	* va-sparc.h (__arch64__): Renamed from __sparc_v9__.

	* sparc/lite.h: #include aoutos.h.
	(TARGET_DEFAULT): Use MASK_FOO values.
	* sparc/sp64-aout.h: #include aoutos.h.
	(TARGET_DEFAULT): Add MASK_APP_REGS.
	(JUMP_TABLES_IN_TEXT_SECTION,READONLY_DATA_SECTION): Delete.
	* sparc/sp64-elf.h (TARGET_DEFAULT): Add MASK_APP_REGS.
 	(CPP_PREDEFINES): Define __arch64__.
	* sparc/sp64-sol2.h (TARGET_DEFAULT, SUBTARGET_SWITCHES): Delete.
	(ASM_SPEC): Delete.

	* sparc.h ({MASK,TARGET}_FRW): Delete.
	(FRAME_POINTER_REQUIRED,INITIAL_FRAME_POINTER_OFFSET,
	BASE_{INCOMING_ARG,OUTGOING_VALUE}_REG,INCOMING_REGNO,OUTGOING_REGNO,
	FUNCTION_{PROLOGUE,EPILOGUE},DELAY_SLOTS_FOR_EPILOGUE): TARGET_FRW
	renamed to TARGET_FLAT.

	* sparc.md (cpu attr): Add all cpu variants.
	(negtf2,negdf2,abstf2,absdf2): Use isa attr, not arch attr, in
	determining insn lengths.

	* sparc/aout.h: Renamed from sparc-aout.h.
	(CPP_PREDEFINES): Delete __GCC_NEW_VARARGS__.
	Add -Acpu(sparc) -Amachine(sparc).

Mon Feb 19 17:49:08 1996  David Edelsohn  <edelsohn@mhpcc.edu>

	* rs6000.md (movsf split): Use SUBREG, not operand_subword.
	(movdf split): operand_subword TARGET_32BIT and new split using
	SUBREG for TARGET_64BIT.
	* rs6000.c (easy_fp_constant): Rewrite to not use operand_subword.
	(input_operand): Remove final add_operand test made irrelevant by
	Dec. 8 change.
	(output_toc): Handle DImode values.

Mon Feb 19 13:38:00 1996  Lee Iverson  <leei@Canada.AI.SRI.COM>

	* i386/sol2.h (SWITCH_TAKES_ARG): Restore -R.
	* sparc/sol2.h (SWITCH_TAKES_ARG): Likewise.

Mon Feb 19 08:19:00 1996  Michael Meissner  <meissner@tiktok.cygnus.com>

	* hard-reg-set.h (HARD_REG macros): If more than
	HOST_BITS_PER_WIDE_INT hard registers and less than or equal to
	4*HOST_BITS_PER_WIDE_INT hard registers, unroll loops by hand.

Mon Feb 19 07:35:07 1996  Torbjorn Granlund  <tege@tmg.se>

	* rs6000.md (not:SI with assign and compare): Fix typo.
	(not:DI with assign and compare): Likewise.

Mon Feb 19 07:17:25 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* sparc.md (nonlocal_goto): No longer need USE of %o0.
	(goto_handler_and_restore): Show uses %o0.

	* combine.c (force_to_mode, case IOR): Fix typo in commuting
	IOR and LSHIFTRT.

	* alpha.c (call_operand): If in REG, only reg 27 valid.

Mon Feb 19 06:57:34 1996  Richard Earnshaw (rearnsha@armltd.co.uk)

	* emit-rtl.c (operand_subword): For 32-bit targets, return
	the appropriate subword of extended precision CONST_DOUBLEs.

	* arm.c (offsettable_memory_operand): New function.
	(alignable_memory_operand): New function.
	(gen_rotated_half_load): New function.
	(get_arm_condition_code): Extract the mode of the comparison and
	use it to generate the correct return value.
	* arm.h (EXTRA_CC_MODES, EXTRA_CC_NAMES): Add CC_Zmode.
	(SELECT_CC_MODE): return CC_Zmode if the operand is QImode.  Allow LT
	and GE comparisons in CC_NOOVmode.
	(PREDICATE_CODES): add offsettable_memory_operand and
	alignable_memory_operand.
	* arm.md (*zeroextract[qs]i_compare0_scratch): Use const_int_operand
	for operands 1 and 2.
	(split patterns for aligned memory half-word operations): New patterns.
	(movhi): Handle memory accesses where the alignment is known in a more
	efficient manner.
	(*compareqi_eq0): Use CC_Zmode.

Mon Feb 19 05:34:08 1996  Jason Merrill  <jason@phydeaux.cygnus.com>

	* toplev.c (lang_options): Add -W{no-,}sign-compare.

	* c-tree.h: Declare warn_sign_compare.

	* c-typeck.c (build_binary_op): Check warn_sign_compare rather
        than extra_warnings to decide whether to warn about comparison of
        signed and unsigned.

	* c-decl.c (c_decode_option): Handle warn_sign_compare.  -Wall
        implies -Wsign-compare.

Sun Feb 18 21:13:44 1996  Pat Rankin  (rankin@eql.caltech.edu)

	* c-lex.c (yylex, case '0'..'9','.'): For cases '0' and '1',
	check for single digit constant before resorting to general
	number processing.

Sun Feb 18 19:29:44 1996  J.T. Conklin  <jtc@netbsd.org>

	* m68k.h (TARGET_68060): New macro.
	(TARGET_SWITCHES): Add -m68060.
	* m68k.md (const_umulsi3_highpart): Disable for TARGET_M68060.
	(ftruncdf2, ftruncsf2, muldf3, mulsidi3): Likewise.
	(smulsi3_highpart, umulsi3_highpart, umulsidi3): Likewise.

	* {m68k,ns32k,sparc}/netbsd.h (DBX_NO_XREFS): Removed.

Sun Feb 18 13:29:56 1996  Charles M. Hannum  (mycroft@netbsd.org)

	* c-common.c (check_format_info): Warn about `L' if -pedantic.

Fri Feb 16 20:13:23 1996  Paul Eggert  <eggert@twinsun.com>

	* c-typeck.c (convert_for_assignment):
	Bring back conversion to union without a cast,
	undoing the Jan 16 change, but with the following differences:
	- The union must have the transparent_union attribute.
	- The conversion must be for a function argument.
	- Warn consistently about such conversions if pedantic.
	- Do not warn about an assignment incompatibility for one union member
	  if another union member is compatible with no warning.

Fri Feb 16 12:06:21 1996  Stan Cox  <coxs@spiff.gnu.ai.mit.edu>

	* i386.c (ix86_*_binary_operator*): Allow CONST_INT as operand1
	of MINUS.
	* i386/dgux.h (OPTIMIZATION_OPTIONS): Call optimization_options.

Fri Feb 16 08:39:47 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* configure: Change stdout report when have multiple files in
	tm_file, host_xm_file, or build_xm_file.
	(a29k-*-bsd): Use both a29k.h and unix.h.
	(a29k-*-udi): Rename a29k-udi.h to udi.h;
	use a29k.h, dbxcoff.h, and it.
	(a29k-*-vxworks): Use a29k.h, dbxcoff.h, a29k/udi.h, and a29k/vx29k.h.
	(alpha-dec-osf[23456789]*): Use alpha.h, not osf2.h.
	(alpha-dec-osf1.2): Use alpha.h and alpha/osf12.h.
	(alpha-*-osf*): Add explicit assignment of tm_file.
	* a29k/udi.h: Renamed from a29k-udi.h.
	Don't include a29k.h or dbxcoff.h.
	* a29k/unix.h: Don't include a29k.h.
	* a29k/vx29k.h: Don't include a29k-udi.h.
	* alpha.h (WCHAR_TYPE, WCHAR_TYPE_SIZE): Use unsigned int.
	* alpha/osf2.h: Deleted.
	* alpha/osf12.h: Don't include alpha.h.
	(WCHAR_TYPE, WCHAR_TYPE_SIZE): Use short unsigned int.
	* alpha/win-nt.h (WCHAR_TYPE, WCHAR_TYPE_SIZE): Use short unsigned int.

Thu Feb 15 18:26:04 1996  Michael Meissner  <meissner@tiktok.cygnus.com>

	* rs6000/ntstack.asm (__allocate_stack): Round up length to 16
	byte boundary.

	* rs6000.md (allocate_stack): On Windows NT, call set_sp to
	indicate to CSE  stack pointer changes with  call to __allocate_stack.
	(set_sp): New pattern.

Thu Feb 15 16:49:15 1996  Jim Wilson  <wilson@cygnus.com>

	* integrate.c (save_for_inline_copying): Allocate reg_map with size
	based on regno_pointer_flag_length instead of max_reg+1.

Thu Feb 15 07:48:34 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* fixincludes (rpc/types.h): Remove spurious "ls" command.

	* reload1.c (eliminate_regs, case USE): If using a register that
	is source of elimination, show can't be eliminated.

	* expr.c (expand_builtin, case BUILT_IN_SETJMP): Shows clobbers FP
	and all caller-save registers.
	Set current_function_has_nonlocal_goto.

Wed Feb 14 13:51:55 1996  David Edelsohn  <edelsohn@mhpcc.edu>

	* rs6000.md (fix_truncdfsi2): Use SUBREG not operand_subword.
	(movdi): Test HOST_BITS_PER_WIDE_INT at build time.
	* collect2.c (scan_libraries): Append '/' to import path if missing.

Wed Feb 14 09:01:55 1996  Michael Meissner  <meissner@tiktok.cygnus.com>

	* rs6000.md (movdi): Use HOST_WIDE_INT, not long long.

Tue Feb 13 19:36:21 1996  Per Bothner  <bothner@cygnus.com>

	* expr.c (store_constructor):  Fix flow control thinko (merge error).
	* expr.c (store_constructor):  Pass correct value to recursive call.

Wed Jan 31 11:34:45 1996  Mike Stump  <mrs@cygnus.com>

	* expr.c (expand_expr, case TARGET_EXPR): We must always store
	into the allocated slot for TAREGT_EXPRs.

Tue Feb 13 18:27:05 1996  Philippe De Muyter  <phdm@info.ucl.ac.be>

	* configure (powerpc-ibm-aix3): Look for 3.2.x, not 3.2x.

	* fixincludes (memory.h): Fix it also on sysV68.

Tue Feb 13 17:59:03 1996  Lee Iverson  <leei@Canada.AI.SRI.COM>

	* gcc.c (DEFAULT_SWITCH_TAKES_ARG): New macro, from SWITCH_TAKES_ARG.
	(SWITCH_TAKES_ARG): Use it.
	* i386/{osfrose,sol2}.h (SWITCH_TAKES_ARG): Likewise.
	* mips/{gnu,mips}.h (SWITCH_TAKES_ARG): Likewise.
	* sparc/sol2.h (SWITCH_TAKES_ARG): Likewise.
	* config/svr4.h (SWITCH_TAKES_ARG): Likewise.

Tue Feb 13 17:43:46 1996  Jim Wilson  <wilson@cygnus.com>

	* integrate.c (save_constants_in_decl_trees): New function.
	(save_for_inline_copying, save_for_inline_nocopy): Call it.

Tue Feb 13 17:40:27 1996  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>

	* expr.c (convert_move): Fix typo in extendqfh2 case.

	* reload1.c (reload): Make some non-group code no longer
 	conditional on SMALL_REGISTER_CLASSES.

Tue Feb 13 17:30:45 1996  J"orn Rennecke (amylaar@meolyon.hanse.de)

	* pdp11.c: #include flags.h
	(output_function_prologue, function_epilogue): Remove declarations
	of call_used_regs and frame_pointer_needed.

	* c-common.c (overflow_warning): Fix typo in warning message.

	* c-decl.c (finish_decl): TREE_ASM_WRITTEN says if duplicate_decls
	modified declaration to match an outside file scope declaration.

	* stmt.c (expand_end_case): Don't use ADDR_DIFF_VEC for PIC if
	ASM_OUTPUT_ADDR_DIFF_ELT is not defined.
	* a29k.h, romp.h (ASM_OUTPUT_ADDR_DIFF_ELT): Remove.

Tue Feb 13 13:36:36 1996  Michael Meissner  <meissner@tiktok.cygnus.com>

	* rs6000/cygwin32.h (CPP_PREDEFINES): Do not define PPC, just
	define __PPC__.  Also define _ARCH_PPC to be compatible with the
	other rs6000/powerpc ports.
	* rs6000/win-nt.h (CPP_PREDEFINES): Ditto.

	* rs6000/cygwin32.h (LIBGCC_SPEC): Don't define, always link in.
	(SDB_DEBUGGING_INFO): Undef.
	(DBX_DEBUGGING_INFO): Define.
	(PREFERRED_DEBUGGING_TYPE): Define as DBX_DEBUG.

	* rs6000/t-{cygwin32,winnt} (MULTILIB*): Remove multilib support.

	* rs6000/x-cygwin32 (LANGUAGES): Delete, don't override.

	* rs6000/ntstack.asm: New file to provide __allocate_stack, which
	guarantees all pages in a dynamically allocated stack frame are
	touched in order, so that the stack is properly grown.

	* rs6000/cgywin32.asm: Delete unused file.

	* rs6000/t-{cygwin32,winnt} (LIB2FUNCS_EXTRA): Add ntstack.S
	to libgcc2 build.

	* rs6000.md (allocate_stack): For NT, call __allocate_stack to
	bump the stack if the size is large or variable.

	* libgcc1-test.c (mainCRTStartup,__start): New startup functions
	to silence more linkers.

Tue Feb 13 13:30:53 1996  Jim Wilson  <wilson@cygnus.com>

	* expr.c (store_constructor_field): Only call change_address if
	bitpos is nonzero.

Tue Feb 13 08:21:01 1996  Fila Kolodny <fila@ibi.com>

	* i370/mvs.h (CPP_SPEC): Add '-trigraphs' because IBM's h files
	contain them.

Tue Feb 13 08:17:52 1996  Bernd Schmidt  <crux@pool.informatik.rwth-aachen.de>

	* c-typeck.c (quality_type prototype): Typo, rename as
	qualify_type.
	(build_binary_op): Fix precedence errors.
	* combine.c (force_to_mode, num_sign_bit_copies, simplify_comparison):
	Fix precedence errors.
	* emit-rtl.c (gen_lowpart): Could return without a value.
	* jump.c (jump_optimize): Fix potential infinite loop.
	* reg-stack.c (record_reg_life_pat): Fix precedence error.
	* reload1.c (emit_reload_insns): Fix precedence errors.
	* stmt.c (bc_pushcase): Fix precedence error.

Mon Feb 12 23:14:02 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* toplev.c (rest_of_compilation): Also set RTX_INTEGRATED_P when
 	we aren't going to emit the inline just yet.

Mon Feb 12 21:31:02 1996  Jim Wilson  <wilson@cygnus.com>

	* rtl.h (INLINE_REGNO_POINTER_FLAG, INLINE_REGNO_POINTER_ALIGN):
	Add one to array index.

Mon Feb 12 20:55:39 1996  H.J. Lu  (hjl@gnu.ai.mit.edu)

	* configure (i[345]86-*-linux*): Set tmake_file t-linux.
	Add crtbeginS.o and crtendS.o to extra_parts.
	* i386/linux.h (CC1, LIB_SPEC): Deleted.
	* config/linux.h (STARTFILE_SPEC): Add crtbeginS.o if -shared.
	(CC1_SPEC): New.
	(LIB_SPEC): Remove %{mieee-fp:-lieee}; use -lc_p for -profile.
	* config/t-linux: New file.

Mon Feb 12 20:42:11 1996  Randy Smith  <randys@camaro.osf.org>

	* i386/x-osfrose (XCFLAGS{,_NODEBUG}): Remove $(SHLIB).
	(XCFLAGS): New variable.
	(libdir, mandir, bindir): Delete.
	* i386/t-osf: New file.
	* i860/paragon.h (STARTFILE_SPEC): Make gcc find crt0.o, not loader.
	(LIB_SPEC): Remove /usr/lib.
	* Makefile.in (TCFLAGS): New variable.
	(GCC_CFLAGS): Add $(TCFLAGS).
	(LIBGCC2_CFLAGS): Add -D for __GCC_FLOAT_NOT_NEEDED.
	(libgcc1-test): Remove -nostdlib.
	(float.h-cross): Don't give error #ifdef __GCC_FLOAT_NOT_NEEDED.
	* enquire.c: Define __GCC_FLOAT_NOT_NEEEDED.
	* configure (i[3456]86-*-osfrose): Add t-osf as tmake_file.

Mon Feb 12 18:43:54 1996  Oliver Kellogg  (oliver.kellogg@space.otn.dasa.de)

	* 1750a.c (add_1_to_mem): Corrected.

Mon Feb 12 18:23:35 1996  Doug Evans  <dje@cygnus.com>

	* configure (sparclet-*-aout*): New configuration.

Mon Feb 12 14:43:50 1996  Per Bothner  <bothner@cygnus.com>

	Changes to distinguish typedef from original type in debug output.
	* tree.h (DECL_ORIGINAL_TYPE):  New macro.
	* tree.c (copy_node):  Zero out type.symtab union.
	* c-decl.c (pushdecl):  Set DECL_ORIGINAL_TYPE for typedef origin.
	* dbxout,c (dbxout_type):  Don't canonicalize typedef type to base.

Mon Feb 12 12:01:16 1996  Richard Earnshaw (rearnsha@armltd.co.uk)

	* arm.h: (CPP_SPEC): Define __ARMEB__, __ARMEL__, and
	__ARMWEL__ depending on the endian flags passed to the compiler.
	(ARM_FLAG_LITTLE_WORDS): Define.
	(TARGET_SWITCHES): Add option -mwords-little-endian.
	(TARGET_LITTLE_WORDS): Define.
	(WORDS_BIG_ENDIAN): Select based on the endian switches.
	(LIBGCC2_WORDS_BIG_ENDIAN): Define based on run-time endian
	defines.
	* arm.c (output_move_double): Cope with both word-endian
	alternatives.  Remove extraneous parameters from calls to
	output_mov_immediate.
	(arm_print_operand): New print code 'Q' for the least significant
	register of a DImode operand.  Make code 'R' always print the
	most significant register, rather than the highest numbered.
	* arm.md (all DImode output patterns): Use print code
	'Q' to access the least significant word.  Make sure the
	patterns are fully aware of the word endianness.

	* arm/semi.h (CPP_SPEC):  Define __ARMEB__, __ARMEL__, and
	__ARMWEL__ depending on the endian flags passed to the compiler.
	(LINK_SPEC): Pass -EB to the linker if compiling for big-endian
	mode.
	(ASM_SPEC): Likewise for the assembler.
	* arm/semiaof.h (CPP_SPEC):  Define __ARMEB__, __ARMEL__, and
	__ARMWEL__ depending on the endian flags passed to the compiler.

Mon Feb 12 10:15:29 1996  Ian Lance Taylor  <ian@cygnus.com>

	* configure: Permit tm_file and xm_file to be a list of header
	file names, rather than just a single file.  For many targets,
	handle --with-stabs by adding dbx.h to tm_file, rather than using
	a different tm_file.
	* dbx.h: New file.
	* alpha/gdb-osf2.h, alpha/gdb-osf12.h, alpha/gdb.h: Deleted.
	* i386/sysv4gdb.h, mips/iris{5gdb,4gl,4gdb,3gdb}.h: Likewise.
	* mips/dec-gosf1.h, mips/news{4,5}-gdb.h, mips/svr4-t-gdb.h: Likewise.
	* mips/ultrix-gdb.h, mips/bsd-{4,5}-gdb.h: Likewise.
	* mips/svr{4-5,4-4,3-5,3-4}-gdb.h, mips/mips-5-gdb.h: Likewise.
	* mips/ecoff{,l}-gdb.h, mips/mips-4-gdb.h: Likewise.

Mon Feb 12 07:22:20 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* integrate.c (save_for_inline_copying): Put virtual regs into
	new regno_reg_rtx copy.

Sun Feb 11 18:53:12 1996  Torbjorn Granlund  <tege@noisy.tmg.se>

	* i386.md: Delete spurious integer subtract patterns.
	Delete % from subtract operand constraints.

Sun Feb 11 19:17:24 1996  Jeffrey A. Law  <law@cygnus.com>

	* m68k.md (movqi): Call CC_STATUS_INIT when loading to/from
	an address register via a data register.

Sun Feb 11 08:44:49 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* c-common.c (check_format_info): Handle missing type in format
	when terminated by a new `%'.

Sat Feb 10 15:14:22 1996  J.T. Conklin  <jtc@rtl.cygnus.com>

	* cross-make (STMP_FIXPROTO): Moved from here to build-make.
	* build-make (STMP_FIXPROTO): Moved here from cross-make.

Sat Feb 10 08:39:05 1996  Oliver Kellogg  (oliver.kellogg@space.otn.dasa.de)

	* 1750a.md (movstrqi): Corrected.
	(zero_extendqihi2): Taken out, let GCC synthesize.
	(movhi-1): Added insn to move HImode small constant to memory.
	(movhf-1): Added insn to move HFmode zero to memory.
	(movtqf-1): Added insn to move TQFmode zero to memory.
	(numerous insns): Taken out B (Base Reg with Index) mode.

	* 1750a.c (movcnt_regno_adjust): Corrected.
	(mov_memory_operand, zero_operand): Added.
	(b_mode_operand): Corrected.
	(simple_memory_operand, add_1_to_mem): Added.
	(print_operand_address): Corrected case of 'Q' output modifier.

	* 1750a.h (REG_ALLOC_ORDER): Changed back to natural order.
	(CONST_DOUBLE_OK_FOR_LETTER_P): Added letter 'G'.
	(EXIT_IGNORE_STACK): Set to 0.
	(REG_OK_FOR_BASE_P, REG_OK_FOR_INDEX_P): Use corresponding REGNO_OK.
	(MOVE_MAX, MOVE_RATIO): Defined.

Sat Feb 10 08:28:12 1996  Martin Anantharaman  <martin@goofy.imech.uni-duisburg.de>

	* configure (m68k-*-psos*): New configuration.
	* psos.h: New file.
	* m68k/m68k-psos.h: New file.

Sat Feb 10 08:07:52 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* sched.c (flush_pending_lists): Add new arg, ONLY_WRITE.
	(sched_analyze_{1,2,insn}): Add new arg to flush_pending_lists.
	(sched_analyze): Always flush pending write list for call, even const.

	* integrate.c (save_for_inline_copying): Put reg_map in function's
	maybepermanent obstack instead of using alloca; set regno_reg_rtx
	to it; delete recently-added copying of this later.

Sat Feb 10 00:49:58 1996  Doug Evans  <dje@cygnus.com>

	* sched.c (add_dependence): Add test for next != CODE_LABEL.

Fri Feb  9 16:10:04 1996  Stan Cox  (coxs@dg-rtp.dg.com)

	* i386.md (fp, integer): Added function units for pentium.
	(cmp*,mov*,add*,sub*,mul*,div*,extend*,trunc*,and*,ior*,xor*,neg*,
	abs*,sqrt*,sin*,cos*,not*,ash*,lsh*,rot*,sub): Tightened constraints,
	added attribute support, and made changes for new `binary' and
	`unary' functions.

	* i386.c (processor_costs): New variable.
	(optimization_options, ix86_expand_binary_operator,
	ix86_binary_operator_ok, ix86_expand_unary_operator,
	ix86_unary_operator_ok, is_mul, is_div, copy_all_rtx, rewrite_address,
	last_to_set_cc, doesnt_st_condition_code, sets_condition_code,
	str_immediate_operand, is_fp_insn, is_fp_dest, is_fp_store,
	agi_dependent, reg_mentioned_in_mem): New functions.

	* i386.h (OPTIMIZATION_OPTIONS, ALIGN_DFmode, IS_STACK_MODE,
	IX86_EXPAND_BINARY_OPERATOR): New macros.
	(RTX_COSTS, REGISTER_MOVE_COST, ADJUST_BLOCKAGE) Changed for pentium.

Fri Feb  9 14:47:27 1996  Doug Evans  <dje@cygnus.com>

	* sparc.c (sp64_medium_pic_operand): New function.
	(move_pic_label): Delete.
	(legitimize_pic_address): Simplify using some named patterns.
	(finalize_pic): Add preliminary sparc64 support.
	(emit_move_sequence): Reorganize.
	* sparc.md (pic_lo_sum_si,pic_sethi_si,get_pc_sp32,get_pc_sp64,
	move_pic_label_si,move_label_di,sethi_di_sp64): Make named patterns.
	(sethi_di_sp64_const,sethi_di_medium_pic): New anonymous patterns.
	(move_pic_label_si,move_label_di): Optimize for near labels.
	(tablejump): Use for TARGET_MEDANY.
	(casesi): Delete.

Fri Feb  9 13:48:45 1996  Jim Wilson  <wilson@cygnus.com>

	* mips.md (probe+2, probe+4): New conditional move patterns.
	(movsicc): Don't truncate comparison if it is DImode.

	* sh.h (CPP_SPEC): Add defines for -m1, -m2, and -m3.

Fri Feb  9 09:11:28 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* toplev.c (rest_of_compilation): Set RTX_INTEGRATED_P in
	INLINE_HEADER iff function is inlineable.
	* calls.c (expand_call): Test RTX_INTEGRATED_P in DECL_SAVED_INSNS.

Thu Feb  8 01:11:15 1996  Jeffrey A. Law  <law@cygnus.com>

	* pa.md (floatunssisf2 expander): Don't use "general_operand".
	(floatunssidf2 expander): Likewise.

Wed Feb  7 16:59:31 1996  Michael Meissner  <meissner@tiktok.cygnus.com>

	* rs6000/{sysv4,win-nt,netware,cygwin32}.h ({ASM,LINK}_SPEC):
	Don't use %{V} for either linker or assembler.

Tue Feb  6 17:22:29 1996  Per Bothner  <bothner@cygnus.com>

	* dbxout.c (dbxout_range_type):  Emit non-range INTEGER_TYPE
	as a sub-range of itself (so gdb can tell the difference).

Tue Feb  6 17:01:44 1996  David Edelsohn  <edelsohn@mhpcc.edu>

	* rs6000.md (addsi3 and adddi3 split): Use cleaner computation
	and portable HOST_WIDE_INT.
	(iordi3 split): Use HOST_WIDE_INT.
	(movdi): Add TARGET_64BIT support and generate 64 bit constants.
	(movdi matcher, TARGET_POWERPC64): Add immediate constraint handled
	by new define_split.
	(allocate_stack): Use TARGET_32BIT.
	(tablejump): Add TARGET_64BIT support using ...
	(tablejumpsi): Rename original tablejump pattern.
	(tablejumpdi): New pattern.

Tue Feb  6 15:29:22 1996  Per Bothner  <bothner@cygnus.com>

	* stor-layout.c (layout_type):  Use same code to layout CHAR_TYPE
	as for INTEGER_TYPE (instead of hard-wiring in QImode).

Tue Feb  6 15:13:38 1996  Jeffrey A. Law  <law@cygnus.com>

	* pa.md (various patterns): Avoid using "general operand" in
	define_insn patterns.

Sun Feb  4 21:37:05 1996  Michael Meissner  <meissner@tiktok.cygnus.com>

	* rs6000/eabi{,sim}.h (LINK_START_SPEC): Bump the default start address
	for the simulator to 0x10000074 so that we don't waste a page in the
	linked file.

Fri Feb  2 19:44:10 1996  Michael Meissner  <meissner@tiktok.cygnus.com>

	* rs6000/eabi-c{i,n}.asm (.sdata2, .sbss2): Put these in the
	read-only section, not read-write.

	* libgcc2.c (__unwind_function, rs6000/powerpc): Use _ARCH_PPC
	being defined to indicate to use PowerPC mnemonics.

	* config/rs6000/t-cygwin32 (MULTILIB*): Add software floating
	point support.

Thu Feb  1 09:10:02 1996  Steve Chamberlain  <sac@slash.cygnus.com>

	* {i386,rs6000}/cygwin32.{asm,h}: New templates.
	* {i386,rs6000}/{t,x}-cygwin32: Ditto.
	* {i386,rs6000}/xm-cygwin32.h: Ditto.
	* configure (powerpcle-*-cygwin32, i[3456]86-*-cygwin32): New.

Fri Feb  2 17:42:40 1996  Paul Eggert  <eggert@twinsun.com>

	* c-decl.c (finish_struct):
	Fix typo in transparent union warning that led to core dump.

	* c-parse.in (stmt): Warn about `goto *expr;' if pedantic.
	(label): Warn about `case expr ... expr:' if pedantic.

Fri Feb  2 11:05:27 1996  Doug Evans  <dje@cygnus.com>

	* h8300.h (TARGET_ALIGN_300): Renamed from TARGET_ALIGN_STRUCT_300.
	(TARGET_SWITCHES): Rename -malign-struct-300 to -malign-300.
	(BIGGEST_ALIGNMENT): Use TARGET_ALIGN_300.

Fri Feb  2 08:25:49 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* flow.c (jmp_uses_reg_or_mem): Renamed from uses_reg_or_mem.
	Don't look into condition of an IF_THEN_ELSE; also make faster.
	(find_basic_blocks): Use new name.

Fri Feb  2 06:49:56 1996  J"orn Rennecke (amylaar@meolyon.hanse.de)

	* reload.c (debug_reload): Fix typo for reload_noncombine.

Thu Feb  1 21:49:02 1996  Jeffrey A. Law  <law@cygnus.com>

	* pa-pro.h (TARGET_DEFAULT): Turn on TARGET_SOFT_FLOAT by
	default for all pro targets.
	* t-pro: Delete all multilib references.

Thu Feb  1 17:50:02 1996  Doug Evans  <dje@cygnus.com>

	* c-lex.c (check_newline): Return result of HANDLE_PRAGMA.
	* h8300.h (HANDLE_PRAGMA): Pass result back to caller.
	* i960/i960.h (HANDLE_PRAGMA): Likewise.
	* sh.h (HANDLE_PRAGMA): Likewise.
	* nextstep.h (HANDLE_PRAGMA): Likewise.

Wed Jan 31 19:26:03 1996  Doug Evans  <dje@cygnus.com>

	* m68k/m68k-none.h: Rewrite to use EXTRA_SPECS.
	* m68k/vxm68k.h (CPP_SPEC): Delete.
	(SUBTARGET_EXTRA_SPECS): Define.

Wed Jan 31 15:10:59 1996  David Edelsohn  <edelsohn@mhpcc.edu>

	* rs6000.c (output_epilog): Fix PPC64 typos and use TARGET_32BIT.
	(output_prolog): Same.
	(rs6000_trampoline_template, rs6000_trampoline_size): Use TARGET_32BIT.
	* rs6000.md (movdf TARGET_POWERPC64 matcher): Fix std typo.
	(movdi TARGET_POWERPC64 matcher): Same.

Wed Jan 31 09:46:11 1996  Richard Earnshaw (rearnshaw@armltd.co.uk)

	* regs.h (regno_pointer_align, REGNO_POINTER_ALIGN): Delete from here.
	* rtl.h (regno_pointer_align, REGNO_POINTER_ALIGN): Put them here.

Wed Jan 31 08:26:12 1996  Andreas Schwab  (schwab@issan.informatik.uni-dortmund.de)

	* m68k/linux.h (STRICT_ALIGNMENT): Define to zero.
	(LEGITIMATE_PIC_OPERAND_P): Match definition from m68kv4.h.

	* m68k.h (TRAMPOLINE_{TEMPLATE,SIZE}): Avoid need for helper function.
	(INITIALIZE_TRAMPOLINE): Likewise.
	(TRAMPOLINE_ALIGNMENT): Renamed from TRAMPOLINE_ALIGN.
	* m68k/next.h (INITIALIZE_TRAMPOLINE): Adjusted accordingly.

	* m68kv4.h (STATIC_CHAIN_REGNUM): Redefine to use register a1.
	(TRAMPOLINE_TEMPLATE): Likewise.

	* m68k/linux.h, m68kv4.h (LIBCALL_VALUE): Return XFmode value in fp0.
	* m68k.c (init_68881_table): Use SFmode for the first six
 	constants and DFmode for the seventh.

	* m68k.md (movqi): Use moveq if possible.

Wed Jan 31 08:18:15 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* expr.c (expand_builtin, case BUILT_IN_NEXT_ARG): Strip off
	INDIRECT_REF when checking second arg.

	* calls.c (struct arg_data, expand_call): Test STRICT_ALIGN with #if.

Wed Jan 31 07:47:56 1996  Tim Wright  (timw@sequent.com)

	* configure (i[345]-sequent-sysv*): Change to sysv3*; add i686.
	(i[3456]86-sequent-ptx4*, i[3456]86-sequent-sysv4*): New cases.
	* fixinc.ptx (sys/mc_param.h): Remove embedded asm.
	* fixinc.svr4 (__STDC__): Add one more case.
	* i386/ptx4-i.h, ptx4.h: New files.

Wed Jan 31 07:15:23 1996  Philippe De Muyter (phdm@info.ucl.ac.be)

	* m68k.h (MACHINE_STATE_{SAVE,RESTORE}): Allow MOTOROLA syntax.

	* m68k.md ({adddi,subdi}_sexthishl32): 'a' and 'd' versions merged
	and fixed; do not generate 'add/sub a,m'.

	* gcc.c (warn_std_ptr): Initialize with 0 instead of NULL_PTR.

Tue Jan 30 13:29:05 1996  Ian Lance Taylor  <ian@cygnus.com>

	* dbxout.c: Don't include <string.h>.
	Don't compare strchr result to NULL.

	* config/svr4.h (ASM_FINAL_SPEC): Use %|, not ${pipe:-}.

Tue Jan 30 06:48:43 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* combine.c (nonzero_bits, case REG): Ignore REG_POINTER_ALIGNMENT.
	Restore old code for SP, but use it for all pointers to
	defined locations in the frame.

Mon Jan 29 11:25:28 1996  Ian Lance Taylor  <ian@cygnus.com>

	* dbxout.c (dbxout_type_methods): Don't use #ifndef inside call to
	strchr.

Sun Jan 28 14:44:09 1996  Doug Evans  <dje@cygnus.com>

	* config/dbxcoff.h (*): #undef first.

Sat Jan 27 21:46:16 1996  David Edelsohn  <edelsohn@mhpcc.edu>

	* rs6000.c (rs6000_sync_trampoline): Add cmpdi to 64bit case.
	(rs6000_initialize_trampoline): CSE of Pmode to pmode.
	* rs6000.md (movdf): Handle move between FPR and 64 bit GPR.
	(movdi matcher): Handle SPR move to itself and add "mr." combiner.

Sat Jan 27 10:06:31 1996  Michael Meissner  <meissner@tiktok.cygnus.com>

	* rs6000/sysv4.h (ASM_OUTPUT_ALIGNED_LOCAL): Redefine, put small
	data items in .sbss if -msdata.
	(SWITCH_TAKES_ARG): Add 'B', 'b', and 'V'.

Sat Jan 27 07:59:25 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* tree.h (enum built_in_function): Add BUILT_IN_{SET,LONG}JMP.
	* expr.c: Include hard-reg-set.h.
	(arg_pointer_save_area): New declaration.
	(expand_builtin, case BUILT_IN_{SET,LONG}JMP): New cases.
	* Makefile.in (expr.o): Includes hard-reg-set.h.
	* c-decl.c (init_decl_processing): Add definitions for
	__builtin_setjmp and __builtin_longjmp.
	* cccp.c (initialize_builtins): Add def of __HAVE_BUILTIN_SETJMP__.

	* expr.c (expand_expr, case COMPONENT_REF): Pass EXPAND_INITIALIZER
	to recursive call.

Fri Jan 26 17:24:07 1996  Doug Evans  <dje@cygnus.com>

	* sparc.h (sparc_arch_type): Delete.
	({,TARGET_}MASK_DEPRECATED_V8_INSNS): Define.
	(ARCH64_SWITCHES): Renamed from V9_SWITCHES.
	* sparc.c (sparc_arch_type): Delete.
	(sparc_init_modes): Likewise.
	(output_move_quad): Don't use ldq/stq unless TARGET_HARD_QUAD.
	* sparc/sp64-sol2.h (TARGET_DEFAULT): Add MASK_DEPRECATED_V8_INSNS.
	(SUBTARGET_SWITCHES): Add -m{no-,}deprecated-v8-insns.
	* sparc.md (arch attribute): Rewrite.
	(isa): New attribute.
	(32 bit multiply/divide patterns): Use if TARGET_DEPRECATED_V8_INSNS.
	(32 bit divide patterns): V9 doesn't require delay after y reg write.

Fri Jan 26 12:08:43 1996  David Edelsohn  <edelsohn@mhpcc.edu>

	* rs6000.h (TARGET_32BIT): Define.
	(BITS_PER_WORD, UNITS_PER_WORD): Invert so 32bit expected case.
	(LONG_TYPE_SIZE, POINTER_BOUNDARY, PARM_BOUNDARY): Likewise.
	(RS6000_REG_SAVE, RS6000_SAVE_AREA, RS6000_VARARGS_SIZE): Likewise.
	(RETURN_ADDRESS_OFFSET, CASE_VECTOR_MODE, MOVE_MAX): Likewise.
	(Pmode, FUNCTION_MODE): Likewise.
	(LEGITIMATE_OFFSET_ADDRESS_P): Handle TARGET_64BIT.
	(GO_IF_LEGITIMATE_ADDRESS, LEGITIMIZE_ADDRESS): Likewise.
	(GO_IF_MODE_DEPENDENT_ADDRESS): Same.

Fri Jan 26 10:37:52 1996  Stan Coxs  <coxs@dg-rtp.dg.com>

	* m88k.md (umulsidi3): Added for the 88110

Fri Jan 26 09:35:42 1996  Michael Meissner  <meissner@tiktok.cygnus.com>

	* rs6000/sysv4.h (STRIP_NAME_ENCODING): Deal with names that have
	both @ and * prefix characters.
	(ASM_OUTPUT_LABELREF): Ditto.

Thu Jan 25 10:03:34 1996  Michael Meissner  <meissner@tiktok.cygnus.com>

	* rs6000.h (LEGITIMIZE_ADDRESS): Rewrite to use HOST_WIDE_INT, not
	plain int.
	(optimize,flag_expensive_optimizations): Provide declaration for
	expander functions.

	* rs6000.md (movsi): Correct code in splitting an address into
	load from the TOC, and add low/high integer parts.  If expensive
	optimizations, and reload hasn't started, use separate pseudo regs
	for each step.

	* rs6000.c (small_data_operand): Don't use the function
	eliminate_constant_term, unwind code directly.
	(input_operand): SYMBOL_REF/CONST of small data operand is valid.
	(print_{,address_}operand): Add @sda21(0) in appropriate cases for
	small data.
	%L, etc. so that if the item is in small memory, the appropriate
	relocation is used.
	(rs6000_select{,_rtx}_section): Don't put floating point constants
	or small strings in .sdata2 since we can't tell from the pointer
	whether it is in the small data area or not.

	* rs6000.h (EXTRA_CONSTRAINT): Add 'U' for small data references.
	(LEGITIMATE_SMALL_DATA_P): Test explicitly for SYMBOL_REF or CONST
	before calling small_data_operand.

	* rs6000.md (movsi): Handle the addresses of small data items.

	* rs6000/sysv4.h (g_switch_{value,set}): Add declarations.
	(SDATA_DEFAULT_SIZE): Default to 8.
	(SUBTARGET_OVERRIDE_OPTIONS): If -G was not set, set it to
	SDATA_DEFAULT_SIZE.
	(CC1_SPEC): Pass -G nn to the compilers.
	(SWITCH_TAKES_ARG): Add -G nn support.
	(LINK_SPEC): Pass -G nn to the linker.

Thu Jan 25 09:16:34 1996  Doug Evans  <dje@cygnus.com>

	* configure (sparc64-*-solaris2*): New target.
	* sparc.h (SPARC_{V9,ARCH64}): Default value is 0.
	(*): Replace SPARCV9 with SPARC_{V9,ARCH64}.
	(MASK_CPUS): Define.
	({MASK,TARGET}_ENV32): Delete.
	({MASK,TARGET}_ARCH64,TARGET_ARCH32): Define.
	(TARGET_SWITCHES): Reset cpu flags first for each variant.
	(CONDITIONAL_REGISTER_USAGE): If 32 bit v9 system, unfix g1-g4,
	fix g5, and make %f48-%f80 call used.
	* sparc/sp64-aout.h (SPARC_{V9,ARCH64}): Define.
	(TARGET_VERSION): Define.
	(TARGET_DEFAULT): Add MASK_ARCH64, delete MASK_ENV32.
	(JUMP_TABLES_IN_TEXT_SECTION): Define.
	(READONLY_DATA_SECTION): Make text_section.
	* sparc/sp64-elf.h (SPARC_{V9,ARCH64}): Define.
	(TARGET_DEFAULT): Add MASK_ARCH64.
	(ENDFILE_SPEC): No longer need to check for -nostartfiles.
	(ASM_IDENTIFY_GCC): Define as empty.
	* sparc/sp64-sol2.h: New file.
	* sparc.c (*): Replace TARGET_V9 with TARGET_ARCH64.
	(hard_32bit_mode_classes): Add v9 regs.
	(gen_v9_scc): Handle 32 bit v9 case.  Call v9_regcmp_p.
	* sparc.md (*): Replace TARGET_V9 with TARGET_ARCH64 in places
	requiring 64 bit environment.
	(multf3_extend): Require TARGET_HARD_QUAD.

Thu Jan 25 00:33:25 1996  Ian Lance Taylor  <ian@cygnus.com>

	* dbxcoff.h (DBX_USE_BINCL): Define.
	(DBX_CONTIN_LENGTH): Define if not defined.

Wed Jan 24 18:00:12 1996  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* alpha.c (alpha_write_verstamp): Only emit MS_STAMP and LS_STAMP,
	not the extra numbers.

Wed Jan 24 15:18:15 1996  Michael Meissner  <meissner@tiktok.cygnus.com>

	* rs6000.c (init_cumulative_args): Rewrite to use DEFAULT_ABI
	runtime tests, instead of V.4 #ifdefs.
	(function_arg{,_advance,_partial_nregs,_pass_by_reference}): Ditto.
	(setup_incoming_varargs): Ditto.
  	(init_cumulative_args): Set call_cookie field to CALL_NORMAL or
	CALL_NT_DLLIMPORT.
	(function_arg): Add support for DLL imports.
	(rs6000_valid_{decl,type}_attribute_p): New functions for NT
	attributes cdecl, stdcall, dllimport, and dllexport.
	(rs6000_comp_type_attributes): New attribute support.
	(rs6000_set_default_type_attributes): Ditto.
	(rs6000_dll_import_ref): Ditto.

	* rs6000.h (FP_ARG_{AIX,SYSV}_MAX_REG): Move here from sysv4.h.
	* sysv4.h (FP_ARG_{AIX,SYSV}_MAX_REG): Move to rs6000.h.

	* rs6000.h (rs6000_call_cookie): New enum to describe the integer
	that is the 2nd argument to call insns and 3rd argument to
	call_value insns. Add support for NT DLL imports.
	(rs6000_args): Add call_cookie field.
	(VALID_MACHINE_{DECL,TYPE}_ATTRIBUTE): Define to call C functions.
	({COMP_TYPE,SET_DEFAULT_TYPE}_ATTRIBUTES): Ditto.
	(rs6000_valid_{decl,type}_attribute_p): Add declarations.
	(rs6000_comp_type_attributes): Ditto.
	(rs6000_set_default_type_attributes): Ditto.
	(rs6000_dll_import_ref): Ditto.

	* win-nt.h (ASM_DECLARE_FUNCTION_NAME): Add support for dllexport
	attribute.

	* rs6000.md (call insns): Add support for NT dllimport functions,
	and fix up NT indirect calls.  Also correctly set the flag
	rs6000_save_toc_p on NT indirect calls.

	* aix41.h (LINK_SPEC): Use new extra specs to avoid separate
	versions for native and cross compilation.
	* rs6000.h (LINK_SPEC): Ditto.
	* sysv4.h (LINK_SPEC): Ditto.

	* rs6000.h (EXTRA_SPECS): Add link_syscalls, link_libg, link_path,
	link_specs, and also allow target to define more with the macro
	SUBTARGET_EXTRA_SPECS.
	(LINK_{LIBG,SYSCALLS}_SPEC): Define as fixed pathnames if native
	compilation, and currently nothing if cross compiling.
	(LINK_START_SPEC): If not defined, define as empty.
	* eabi{,sim}.h (LINK_START_SPEC): Add default -Ttext for
	simulator.

	* eabi{aix,le}.h (MULTILIB_DEFAULTS): Add -mno-sdata default.
	* sysv4{,le}.h (MULTILIB_DEFAULTS): Ditto.

	* rs6000.c (small_data_operand): New function to return true if
	the operand lives in small data under eabi.
	(rs6000_select{,_rtx}_section): New functions to determine whether
	to put global and static items in the V.4/eabi small data areas if
	-msdata.

	* rs6000.h (LEGITIMATE_SMALL_DATA_P): Call small_data_operand it
	if V.4.
	(GO_IF_LEGITIMATE_ADDRESS): If LEGITIMATE_SMALL_DATA_P, the item
	is a valid address.
	(ASM_OUTPUT_LABELREF): Use fputs, not fprintf.
	(small_data_operand): Declare function.

	* sysv4.h (TARGET_SWITCHES): New switch -msdata to use V.4 and
	eabi defined small data sections.
	(SUBTARGET_OVERRIDE_OPTIONS): Don't allow -msdata and
	-mrelocatable or -mcall-aix options.
	(EXTRA_SECTION{S,_FUNCTIONS}): Add .sdata, .sdata2, and .sbss
	sections.
	(SELECT{,_RTX}_SECTION): Call (rs6000_select{,_rtx}_section).
	(ASM_SPEC): The -msdata switch passes -memb to the assembler.
	(ENCODE_SECTION_INFO): Prepend a '@' to the name, if the item
	lives in a small data region.
	(STRIP_NAME_ENCODING): Strip '@' in addition to '*'.
	(ASM_OUTPUT_LABELREF): Strip a leading '@'.

	* t-{ppc,eabi}gas (MULTILIB*): Add support for libraries built
	with/without -msdata.  Drop support for -mcall-aixdesc libraries.

Wed Jan 24 15:18:15 1996  Kim Knuttila  <krk@cygnus.com>

	* rs6000/win-nt.h (LIB_SPEC): Change options to GNU ld style.
	(From Jason Molenda)

Wed Jan 24 14:32:48 1996  Jim Wilson  <wilson@cygnus.com>

	* reload1.c (used_spill_regs): New variable.
	(reload): Set it.
	* reorg.c (find_dead_or_set_registers): New function.
	(mark_target_live_regs): Delete loop looking forward from target
	and instead call find_dead_or_set_registers.
	(fix_reg_dead_note): New function.
	(fill_slots_from_thread): Call it.

	* loop.c (scan_loop): Correct comment.
	(strength_reduce): Correct comments.  Don't set maybe_multiple when
	pass branch to scan_start.  Don't set not_every_iteration after
	passing a CODE_LABEL, or after passing a branch out of the loop.
	When outputting DEST_ADDR giv increments, put them next to the memory
	address on machines with auto-increment addresses.
	(record_biv): Set new field always_executed.
	(record_giv): Set new fields always_executed and auto_inc_opt.
	(maybe_eliminate_biv_1): Reject biv with auto_inc_opt optimization
	in some cases.
	* loop.h (struct induction): New fields always_executed and
	auto_inc_opt.

	* c-typeck.c (pointer_int_sum): Use TYPE_PRECISION (sizetype) not
	POINTER_SIZE to agree with expr.c.

Tue Jan 23 15:17:30 1996  Doug Evans  <dje@cygnus.com>

	* sparc/sol2.h (ASM_OUTPUT_ALIGNED_LOCAL): Delete, use svr4.h's.

Tue Jan 23 03:28:01 1996  Paul Eggert  <eggert@twinsun.com>

	* cexp.y: Use preprocessor arithmetic instead of C arithmetic
	to avoid warnings on some compilers.
	(HOST_WIDE_INT_MASK): Remove.
	(MAX_CHAR_TYPE_MASK, MAX_WCHAR_TYPE_MASK): New macros.
	(yylex): Use them.

Mon Jan 22 18:39:21 1996  Per Bothner  <bothner@cygnus.com>

	* cppexp.c (cpp_parse_expr):  Set HAVE_VALUE flag for unary
	minus, even if skip_evaluation is true.

Mon Jan 22 16:53:48 1996  David Edelsohn  <edelsohn@mhpcc.edu>

	* rs6000.h (BIGGEST_ALIGNMENT): Increase to 64 always.
	(BIGGEST_FIELD_ALIGNMENT): Define.
	(GO_IF_LEGITIMATE_ADDRESS): Merge PRE_INC and PRE_DEC cases.
	(LEGITIMIZE_ADDRESS): Use Pmode not SImode.
	(CASE_VECTOR_MODE): Depend on TARGET_64BIT.
	(ASM_OUTPUT_COMMON): Delete.
	(ASM_OUTPUT_ALIGNED_COMMON): Define.
	* rs6000/sysv4.h (BIGGEST_FIELD_ALIGNMENT): Undefine.
	* rs6000.md (adddi3, subdi3, negsi2): New PowerPC64 patterns.
	(ashldi3, lshrdi3, ashrdi3, anddi3, iordi3, xordi3): Same.
	(moddi3, cmpdi, tablejump matchers): Same.
	(divdi3): Update PowerPC64 patterns.
	* rs6000.c (rs6000_initialize_trampoline, case ABI_AIX): Use Pmode
	not SImode.

Sun Jan 21 23:33:24 1996  Ian Lance Taylor  <ian@cygnus.com>

	* dbxout.c: Include <string.h>

Fri Jan 19 17:17:00 1996  Per Bothner  <bothner@kalessin.cygnus.com>

	* tree.h (CONSTRUCTOR_TARGET_CLEARED_P):  Removed.
	* expr.c (is_zeros_p, mostly_zeros_p):  Handle SET_TYPE CONSTRUCTORs.
	(store_constructor_field):  New helper function.
	(store_constructor):  Take 'cleared' parameter.
	(expand_expr):  Fix store_constructor_call to pass 'cleared' of 0.

	* expr.c (store_constructor, SET_TYPE):  Fix off-by-one-error.
	Also, devide start byte by BITS_PER_UNIT before passing to memset.
	(store_constructor):  `continue' in wrong place.

	* expr.c (store_constructor):  If storing into a range of array
	elements, and the range is small, or the target it not memory,
	unroll the loop (and use store_field, which handles REGs).
	(store_constructor):  Handle RANGE_EXPR in array index.

Fri Jan 19 16:52:25 1996  Doug Evans  <dje@charmed.cygnus.com>

	* svr4.h (SWITCH_TAKES_ARG): Add 'x'.
	* sparc/sol2.h (SWITCH_TAKES_ARG): Likewise.

Fri Jan 19 15:18:38 1996  Ian Lance Taylor  <ian@cygnus.com>

	* dbxout.c (flag_minimal_debug): Initialize to 0 if both
	NO_DOLLAR_IN_LABEL and NO_DOT_IN_LABEL are defined.
	(dbxout_type_methods): If the mangled method name uses the special
	C++ marker character, pass show_arg_types as 1 when calling
	dbxout_type.

Fri Jan 19 11:48:28 1996  Michael Meissner  <meissner@tiktok.cygnus.com>

	* rs6000/eabi-ci.asm (_SDA_BASE_): Move the default definition
	from the .got section to the .sdata section.  Do not add 32768.
	(_SDA2_BASE_): Provide a default definition.

	* rs6000/eabi-cn.asm (.got.blrl): Don't define this section any
	more, linker now directly creates the blrl instruction at
	_GLOBAL_OFFSET_TABLE_-4.

Fri Jan 19 05:12:31 1996  Richard Earnshaw <rearnsha@armltd.co.uk>

	* arm/lib1funcs.asm (__divsi3, __modsi3, __udivsi3, __umodsi3):
	Replace with smaller, faster versions.

Thu Jan 18 17:41:46 1996  Jim Wilson  <wilson@cygnus.com>

	* sh.c (ctype.h): Delete.
	(regno_reg_class, reg_class_from_letter): Add SH3e support.
	(prepare_scc_operands, broken_move, push, pop, push_regs): Likewise.
	(calc_live_regs, sh_expand_prologue, sh_expand_epilogue): Likewsie.
	(initial_elimination_offset, arith_reg_operand): Likewise.
	(sh_builtin_saveregs, fp_zero_operand, fp_one_operand): New functions.
	(sh_function_arg, sh_function_arg_partial_nregs): Delete.
	* sh.h (CPP_SPEC, CONDITIONAL_REGISTER_USAGE): Add SH3E support.
	(TARGET_SWITCHES, OVERRIDE_OPTIONS, FIRST_PSEUDO_REGISTER): Likewise.
	(FIXED_REGISTERS, CALL_USED_REGISTERS, HARD_REGNO_MODE_OK): Likweise.
	(enum reg_class, REG_CLASS_NAMES, REG_CLASS_CONTENTS): Likewise.
	(REG_ALLOC_ORDER, CONST_DOUBLE_OK_FOR_LETTER_P, NPARM_REGS): Likewise.
	(FUNCTION_VALUE, LIBCALL_VALUE, FUNCTION_VALUE_REGNO_P): Likewise.
	(FUNCTION_ARG_REGNO_P, CUMULATIVE_ARGS, ROUND_REG): Likewise.
	(INIT_CUMULATIVE_ARGS, FUNCTION_ARG_ADVANCE, FUNCTION_ARG): Likewise.
	(FUNCTION_ARG_PARTIAL_NREGS, LEGITIMATE_CONSTANT_P): Likewise.
	(MODE_DISP_OK_4, REGISTER_MOVE_COST, REGISTER_NAMES): Likewise.
	(DBX_REGISTER_NUMBER, enum processor_type): Likewise.
	(SH3E_BIT, TARGET_SH3E, FPUL_REG, FIRST_FP_REG, LAST_FP_REG): New.
	(FIRST_FP_PARM_REG, FIRST_FP_RET_REG, BASE_RETURN_VALUE_REG): New.
	(BASE_ARG_REG, enum sh_arg_class, struct sh_args): New.
	(GET_SH_ARG_CLASS, PASS_IN_REG_P, sh_builtin_saveregs): New.
	(EXPAND_BUILTIN_SAVEREGS, DOUBLE_TYPE_SIZE): New.
	(TARGET_SWITCHES): Delete broken -m3l option.
	* sh.md (cpu, movsi_i, movsf_i, blt, bge, sle, sge): Add SH3E support.
	(push_e, pop_e, movsi_ie, movsf_ie, addsf3, subsf3): New patterns.
	(mulsf3, macsf3, divsf3, floatsisf2, fix_truncsfsi2): New patterns.
	(cmpgtsf_t, cmpqesf_t, cmpsf, negsf2, sqrtsf2, abssf2): New patterns.
	(abssf2+9, abssf2+10): Add SH3e support to peepholes
	(abssf2+11, abssf2+12): New peepholes for SH3e.
	* t-sh (MULTILIB_OPTIONS): Add SH3E support.
	(MULTILIB_DIRNAMES): Define to empty.

Thu Jan 18 11:29:11 1996  Ian Lance Taylor  <ian@cygnus.com>

	* cplus-dem.c (cplus_demangle_opname): Change type of opname
	parameter to const char *.
	(cplus_mangle_opname): Change return type and type of opname
	parameter to const char *.  Don't cast return value.
	* demangle.h (cplus_demangle_opname): Update declaration.
	(cplus_mangle_opname): Likewise.

Thu Jan 18 10:07:33 1996  Michael Meissner  <meissner@tiktok.cygnus.com>

	* gcc.c (extra_specs): If EXTRA_SPECS is defined, define
	extra_specs array to hold the extra specs the machine description
	defines.
	(set_spec): If EXTRA_SPECS is defined, handle the extra
	specifications.
	(process_command, main, validate_all_switches): Likewise.

	* rs6000/{rs6000.h,powerpc.h,aix41.h} ({CPP,ASM}_SPEC): Use common
	specs with EXTRA_SPECS, only modifying things in the target that
	needs to be modified, rather than having tons of mostly duplicate
	definitions.
	* rs6000/{sysv4{,le}.h,}netware.h,lynx.h,} ({CPP,ASM}_SPEC): Ditto.
	* rs6000/eabi{le,aix}.h,aix3newas.h}} ({CPP,ASM}_SPEC): Ditto.

Wed Jan 17 19:38:24 1996  Paul Eggert  <eggert@twinsun.com>

	* cexp.y (HOST_WIDE_INT_MASK): Renamed from LONG_MASK;
	use HOST_WIDE_INT.
	(HOST_WIDE_INT, HOST_BITS_PER_WIDE_INT): Put back.
	(parse_c_expression, expression_value, parse_escape, left_shift,
	right_shift, struct constant, exp, parse_number, yylex):
	Replace `long' with `HOST_WIDE_INT'.
	* cccp.c (PTR_INT_TYPE): Remove obsolete define to `long'.
	(parse_escape, parse_c_expression, eval_if_expression, get_lintcmd,
	do_line, do_if, do_elif): Replace `long' with `HOST_WIDE_INT'.
	(trigraph_pcp): Don't assume a pointer difference fits in an int.

Wed Jan 17 18:56:31 1996  Jim Wilson  <wilson@cygnus.com>

	* expmed.c (extract_bit_field): For multi-word bitfield, clobber
	target before storing to it.

Wed Jan 17 14:19:34 1996  J.T. Conklin  <jtc@slave.cygnus.com>

	* sparc/{t-sol2,t-sunos40,t-sunos41}: Define away LIBGCC1_TEST
	so that cross compilers targeted at these systems will build.

Wed Jan 17 09:51:58 1996  Doug Evans  <dje@cygnus.com>

	* sparc.h (v9 INIT_CUMULATIVE_ARGS): Fix typos.

	* gcc.c (process_command): New local lang_n_files, and use
	it in test of -c with -o.  Move test of -save-temps.
	Test for trailing NUL in -c.

	* i386/t-go32: New file.
	* i386/xm-go32.h: New file.
	* configure (i[345]86-*-go32*): Define xm_file and tmake_file.

Wed Jan 17 07:47:43 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* cccp.c (HOST_BITS_PER_WIDE_INT, HOST_WIDE_INT): Put back.
	(pcfinclude): Use HOST_WIDE_INT for casting pointer to integer.

Wed Jan 17 05:25:06 1996  Jeffrey A. Law  <law@cygnus.com>

	* va-pa.h (__gnuc_va_list): Use a "void *".

Tue Jan 16 18:45:23 1996  Per Bothner  <bothner@cygnus.com>

	* cppexp.c (cpp_lex):  Do cpp_pop_buffer after CPP_POP so retried
	cpp_skip_hspace will actually work.

	* cppexp.c (SKIP_OPERAND):  New macro.
	(cpp_parse_expr):  Suppress evaluation and diagnostics in
	unevaluated subexpressions.
	Corresponds to Eggert's Fri Jun  9 17:58:29 1995 change.

Tue Jan 16 11:59:07 1996  Mike Stump  <mrs@cygnus.com>

	* expr.c (expand_expr, case COND_EXPR): Make sure cleanups live on
	the function_obstack as they are used by the exception handling code.
	(defer_cleanups_to): Ditto.
	(TRUTH_ANDIF_EXPR): Ditto.
	(TRUTH_ORIF_EXPR): Ditto.

Tue Jan 16 13:57:13 1996  Jim Wilson  <wilson@cygnus.com>

	* cccp.c (new_include_prefix): Ignore ENOTDIR error from stat.

Tue Jan 16 12:18:56 1996  Doug Evans  <dje@cygnus.com>

	* i386/t-sol2 (crt[1in].o): Add missing -c.
	* sparc/t-sol2 (crt[1in].o,gcrt1.o): Likewise.
	Source files are assembler.

	* gcc.c (do_spec_1, case 'W'): Rename local `index' to `cur_index' to
	avoid warning on solaris.

Tue Jan 16 11:42:09 1996  Ian Lance Taylor  <ian@cygnus.com>

	* dbxcoff.h: New file for stabs in COFF support.
	* a29k/a29k-udi.h: Use dbxcoff.h.
	* h8300.h, i960/i960-coff.h, m68k/coff.h, m88k/m88k-coff.h: Likewise.
	* sh.h, sparc/litecoff.h: Likewise.

Tue Jan 16 08:21:45 1996  Hans-Peter Nilsson  <Hans-Peter.Nilsson@axis.se>

	* optabs.c (expand_fix): Don't copy TARGET to TO if same.

	* expr.c (emit_move_insn_1): Don't emit clobber when moving
	by parts and source equals destination.

Tue Jan 16 08:08:29 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* expmed.c (extract_bit_field): Don't abort if not MEM_IN_STRUCT_P.

	* local-alloc.c (memref_referenced_p, case REG): Fix last change.

	* fold-const.c (const_binop): Strip NOPS from both args.

	* regclass.c (regclass): Remove useless cast.

Tue Jan 16 07:06:03 1996  Paul Eggert  <eggert@twinsun.com>

	* cexp.y: General code cleanup in the style of 1995-04-01 change.
	Add prototypes for static functions.
	Add parentheses suggested by `gcc -Wparentheses'.
	Use `long' uniformly, instead of long, int, HOST_WIDE_INT mess.
	(struct constant): Use `signedp' flag (with sign bit) instead of
	`unsignedp' flag; it's a little more convenient.

	(HAVE_STDLIB_H, STDC_HEADERS, LONG_MASK, __attribute__, PROTO,
	VA_START, PRINTF_ALIST, PRINTF_DCL, PRINTF_PROTO, PRINTF_PROTO_1,
	vfprintf, SIGNED, UNSIGNED): New symbols.
	<stdlib.h>: Include if HAVE_STDLIB_H.
	<string.h>: New include.
	(HOST_BITS_PER_WIDE_INT, HOST_WIDE_INT): Remove.
	(yylex, yyerror, expression_value, parse_number,
	initialize_random_junk): Now static.

	(overflow_sum_sign): Renamed from possible_sum_sign, with an
	extra arg SIGNEDP.
	(parse_number): Inline strcmp when checking for "0x".
	(yylex): Keep track of mask needed when decoding wide characters.
	(parse_escape): New arg RESULT_MASK; use it instead of
	assuming char width.
	(yylex, parse_escape, parse_c_expression): Store all host
	integers as long, not int or HOST_WIDE_INT.
	(left_shift): No need to do signed left shifts separately.

	These changes are for the test program (if TEST_EXP_READER):
	(pedantic, traditional): Allocate storage.
	(main): Set pedantic, traditional, yydebug depending on args.
	(is_hor_space, warning, lookup): Change types and implementation
	to match rest of program.
	(pedwarn, check_assertion, xmalloc): New functions.

	* cccp.c (HOST_BITS_PER_WIDE_INT, HOST_WIDE_INT): Remove.
	(parse_escape, parse_c_expression, eval_if_expression):
	Change return type to `long'; all callers changed.
	(pcfinclude): Use `int', not HOST_WIDE_INT; any integral type will do.

	* cccp.c (skip_quoted_string): If pedantic and not pedantic_errors,
	skipped multiline strings elicit a warning, not an error.
	(rescan): Minor code reorg to keep it parallel with skip_quoted_string.

	* fold-const.c (left_shift_overflows): Remove; unused.

	* c-typeck.c (convert_for_assignment): Don't automatically convert
	from a union member to the union.

Tue Jan 16 06:26:00 1996  Stefan Vogel  (stefan@ssw.de)

	* config/svr4.h (ASM_OUTPUT_SECTION_NAME): Define section attributes
	only when a section is defined the first time.

Tue Jan 16 06:03:27 1996  Thomas Graichen  <graichen@omega.physik.fu-berlin.de>

	* i386/freebsd.h (ASM_WEAKEN_LABEL): Deleted; not supported.

Mon Jan 15 20:59:49 1996  J. Kean Johnston  <hug@netcom.com>

	* Makefile.in (LIBGCC2_CLFAGS): Add -DIN_LIBGCC2.
	(libgcc1.a): Add -DIN_LIBGCC1.
	(stamp-crtS): Remove -fpic, use CRTSTUFF_CFLAGS_S.
	* config/t-libc-ok: Add CRTSTUFF_CFLAGS_S.

	* configure (i[3456]86-*-sco3.2v5*): New case.
	* i386/sco5.h, i386/t-sco5, i386/x-sco5, i386/xm-sco5.h: New files.
	* ginclude/stdarg.h, ginclude/varags.h: Add test for SCO Open Server 5.

Mon Jan 15 20:44:13 1996  J.T. Conklin  <jtc@netbsd.org>

	* m68k/netbsd.h (ASM_SPEC): New macro.

Mon Jan 15 17:01:16 1996  Doug Evans  <dje@cygnus.com>

	* c-lex.c (check_newline): Pass character after `#pragma' to
	HANDLE_PRAGMA.  Don't call get_directive_line if at end of line.
	* c-common.c (get_directive_line): Watch for EOF.
	* h8300.h (HANDLE_PRAGMA): New argument `c'.
	Must issue `return' now.
	* i960.h (HANDLE_PRAGMA): Likewise.
	* sh.h (HANDLE_PRAGMA): Likewise.
	* nextstep.h (HANDLE_PRAGMA): Likewise.
	* h8300.c (handle_pragma): New argument `ch'.
	Simplify pragma processing.  Delete support for `#pragma section'.
	* i960.c (process_pragma): New argument `c'.  Change result to
	terminating character.
	* nextstep.c (handle_pragma): Likewise.
	* sh.c (handle_pragma): Likewise.  Also simplified.

	* sched.c (reemit_notes): Add prototype.
	(sched_analyze_2): Reorganize comments.  Call prev_nonnote_insn.
	(sched_analyze): Add abort call.
	(schedule_block): Call prev_nonnote_insn.
	Move call of reemit_notes to after SCHED_GROUP_P scheduling.
	Set `head' to `last'.

Mon Jan 15 16:12:25 1996  Roland McGrath  <roland@churchy.gnu.ai.mit.edu>

	* configure (*-*-gnu*): Use tmake_file=t-gnu.
	* config/t-gnu (CRTSTUFF_T_CFLAGS): New file.
	* configure (*-*-gnu*): Remove crtbeginS.o and crtendS.o frmo
	$extra_parts.  Use xmake_file=x-linux.

Mon Jan 15 15:30:49 1996  Gran Uddeborg <gvran@uddeborg.pp.se>

	* i386/svr3{,z}.ifile: Allocate address areas for the "stab"
	and "stabstr" sections.

Mon Jan 15 14:39:14 1996  Paul Eggert  <eggert@twinsun.com>

	* c-decl.c (finish_incomplete_decl): Warn if completing an
	array that wasn't declared extern.  Simplify test for whether
	completion is needed.

	* cccp.c (do_xifdef): Warn about `#ifdef 0' if not traditional;
	formerly the warning was issued if not pedantic.

Mon Jan 15 13:24:12 1996  Michael Meissner  <meissner@tiktok.cygnus.com>

	* rs6000.md ({add,sub}di3): Make it work on little endian PowerPC
	systems.

	* rs6000/eabi-c{i,n}.asm (.sbss2 section): Don't make .sbss2 a
	.bss section just yet, because it confused the linker.

Mon Jan 15 08:50:31 1996  Philippe De Muyter (phdm@info.ucl.ac.be)

	* m68k.md (pushdi): Allow "i" for operand 1.
	(extendqidi2): Improve 68000 code generation.
	(adddi_lshrdi_63): New pattern.

Mon Jan 15 08:38:40 1996  H.J. Lu {hjl@gnu.ai.mit.edu)

	* configure (i[3456]86-*-linux*): Add extra_parts.
	* i386/linux.h (LIB_SPEC): Remove %{mieee-fp:-lieee}.
	Use -lc_p for -profile.
	(CC1_SPEC): New macro.
	* linux.h (STARTFILE_SPEC): Use crtbegin.o for both shared llibrary
	and normal executable;  use gcrt1.o for -profile.
	(ENDFILE_SPEC): Use crtend.o for shared llibrary and normal executable.
	* x-linux (INSTALL_ASSERT_H): Unset it.
	* configure (i[3456]86-*-linux*oldld*): Set xmake_file to x-linux-aout.
	(i[3456]86-*-linux*aout*): Likewise.
	* x-linux-aout: New file, copied from config/x-linux.

Mon Jan 15 07:41:05 1996  Dmitry K. Butskoy  (buc@stu.spb.su)

	* varasm.c (in_data_section): New function.

Mon Jan 15 07:37:13 1996  Andreas Schwab  (schwab@issan.informatik.uni-dortmund.de)

	* c-typeck.c (build_c_cast): Don't warn about alignment when we
	have an opaque type.

Mon Jan 15 07:22:59 1996  Michel Delval  (mfd@ccv.fr)

	* reload.c (find_equiv_reg): Apply single_set, not PATTERN, to WHERE.

Mon Jan 15 07:02:21 1996  John F. Carr  <jfc@mit.edu>

	* reorg.c (mark_referenced_resources, case TRAP_IF): Set volatil.

Mon Jan 15 06:20:38 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* gcc.c (process_commands): Remove inadvertant fallthrough.

	* function.c ({,round_}trampoline_address): TRAMPOLINE_ALIGNMENT is
	in bits, not bytes.

	* objc/archive.c (objc_{write,read}_type, case _C_STRUCT_B): Fix typo.

	* expr.c (expand_expr, case COMPONENT_REF): Don't make recursive
	call on object with EXPAND_SUM.

	* stmt.c (save_expr_regs): Delete declaration; unused.

Sun Jan 14 21:44:26 1996  Michael Meissner  <meissner@wogglebug.tiac.net>

	* rs6000/eabi-ci.asm (__EXCEPT_START__): Provide label for start
	of g++ exception pointers.

	* rs6000/eabi-cn.asm (__EXCEPT_END__): Provide label for end of
	g++ exception pointers.

	* rs6000/eabi.asm (__eabi): Relocate exception pointers unless
	they are NULL.

	* va-ppc.h (va_arg): Long longs are always passed in odd registers.

	* rs6000.c (function_arg_boundary): On V.4, long longs are always
	passed in odd registers.

	* rs6000.md ({add,sub}di3): Remove restriction for POWER only,
	since all of the instructions used are common to both
	architectures.

Sun Jan 14 20:34:03 1996  Jeffrey A. Law  <law@cygnus.com>

 	* expr.c (expand_assignment): Fix alignment parm in emit_block_move.

Sun Jan 14 19:00:25 1996  Jim Wilson  <wilson@cygnus.com>

	* sched.c (schedule_block): Copy RTX_INTEGRATE_P bit when create
	a new note.

	* integrate.c (save_for_inline_copying, case NOTE): Copy
	RTX_INTEGRATED_P bit.

Sun Jan 14 17:57:52 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* stupid.c (stupid_find_reg): Don't try to allocate reg if live
	over more than 5,000 insns.

Sat Jan 13 23:09:07 1996  Jeffrey A. Law  <law@cygnus.com>

	* pa.h (STACK_BOUNDARY): Bring back down to 64bits.

	* pa.md (pre_ldwm): Fix bug exposed by recent changes.
	Simplify.
	(pre_stwm, post_ldwm, post_stwm): Likewise.
	(HImode and QImode variants): Likewise.
	* pa.c (hppa_expand_prologue): Corresponding changes.
	(hppa_expand_epilogue): Likewise.

	* pa.c (hppa_legitimize_address): Generate more indexing
	address modes.

Fri Jan 12 19:03:21 1996  Doug Evans  <dje@cygnus.com>

	* sparc/sol2.h (COMMON_ASM_OP): Delete, use sysv4.h's.

	* sched.c (schedule_block): Maintain a valid chain so
	emit_note_before works.

Fri Jan 12 13:20:01 1996  Michael Meissner  <meissner@tiktok.cygnus.com>

	* rs6000/eabi{,-ci,-cn}.asm: Add support for V.4 .sbss/.sdata, and
	eabi .sbss2/.sdata2 sections, loading up r13 and r2 respectively
	if the sections were used, and we don't need to relocate the
	pointers.

Thu Jan 11 19:41:07 1996  Per Bothner  <bothner@cygnus.edu>

	* sparc.h (FUNCTION_ARG_PASS_BY_REFERENCE):  Use AGGREGATE_TYPE_P so
	QUAL_UNION_TYPE and SET_TYPE are also passed by invisible reference.
	* sparc.h (INIT_CUMULATIVE_ARGS for SPARCV9):  Return types of
	QUAL_UNION_TYPE and SET_TYPE also make invisible 1st argument.

Thu Jan 11 18:33:50 1996  Doug Evans  <dje@cygnus.com>

	* h8300.h (TARGET_ALIGN_STRUCT_300): New macro.
	(TARGET_SWITCHES): Add -malign-struct-300.
	(BIGGEST_FIELD_ALIGNMENT): Update.

Thu Jan 11 12:07:44 1996  J.T. Conklin  <jtc@cygnus.com>

	* h8300.h (CPP_PREDEFINES): Delete -D_DOUBLE_IS_32BITS.

Thu Jan 11 11:09:33 1996  David Edelsohn  <edelsohn@mhpcc.edu>

	* rs6000.md (mulsf3 !POWERPC): Use dmul attribute.
	(divsf3 !POWERPC): Use ddiv attribute.

Thu Jan 11 11:09:33 1996  Michael Meissner  <meissner@tiktok.cygnus.com>

	* rs6000/eabi-ctors.c (__do_global_ctors): If global variable
	__atexit is non-NULL, call it with __do_global_dtors address to
	register the function to run destructors.
	(__do_global_{c,d}tors): Guard against NULL pointers.

	* rs6000/eabi.asm (__eabi): If the __eabi function was already
	called, do nothing.

Thu Jan 11 11:29:09 1996  Doug Evans  <dje@cygnus.com>

	* fixincludes: Wrap rpc/types.h in extern "C", for osf2.0.

Wed Jan 10 13:16:03 1996  Doug Evans  <dje@cygnus.com>

	* varasm.c (variable_section): New function.
	(assemble_variable): Call it.

Wed Jan 10 11:27:28 1996  Michael Meissner  <meissner@tiktok.cygnus.com>

	* rs6000/eabi-c{i,n}.asm (__DTOR_{LIST,END}__): Fix typo.
	* rs6000/eabi{,sim}.h ({START,END}FILE_SPEC): Add %s to object
	files.

	* rs6000/t-{eabi,eabigas,ppc,ppcgas} (MULTILIB_MATCHES): Drop
	support for obsolete -mcpu=mpc403.
	Add -mcpu=821 and -mcpu=860 to soft-float defaults.

	* rs6000/t-eabi{,gas} (LIBGCC): Add stmp-crt.
	(INSTALL_LIBGCC): Add install-crt.
	(EXTRA_PARTS): Delete.
	(stmp-crt{,-sub}): New rules to build crti.o and crtn.o in a
	multilib fashion.
	(install-crt): Install the multilib crt values.

Tue Jan  9 17:30:16 1996  Doug Evans  <dje@cygnus.com>

	* c-tree.h (merge_attributes): Moved from here.
	* tree.h (merge_attributes): To here.
	* c-typeck.c (merge_attributes): Moved from here.
	* tree.c (merge_attributes): To here.

Mon Jan  8 18:27:38 1996  Arne H. Juul  <arnej@pvv.unit.no>

	* mips/netbsd.h (LINK_SPEC): Change nostdlib to nostartfiles.
	(LOCAL_LABEL_PREFIX): Delete.
	(ASM_OUTPUT_SECTION_NAME): Define.

Sun Jan  7 17:11:11 1996  David Edelsohn  <edelsohn@mhpcc.edu>

	* collect2.c (scan_libraries): Correct Import File ID interpretation.

Sun Jan  7 16:56:56 1996  Michael Meissner  <meissner@wombat.gnu.ai.mit.edu>

	* {svr4,mips/elf{,64}}.h (MAX_OFILE_ALIGNMENT):  Define as 32768*8.

Sat Jan  6 15:52:36 1996  Doug Evans  <dje@cygnus.com>

	* a29k/vx29k.h (CPP_SPEC): Define.

	* configure: Recognize any --with/--without option.

	* Makefile.in (MAKEINFOFLAGS): New variable.
	(cpp.info,gcc.info): Use it.

	* sparc/t-sol2 (crt1.o,crti.o,crtn.o,gcrt1.o): Use $(GCC_FOR_TARGET).
	* i386/t-sol2 (crt1.o,crti.o,crtn.o): Likewise.

Fri Jan  5 10:44:25 1996  Michael Meissner  <meissner@tiktok.cygnus.com>

	* rs6000/aix{3newas,41}.h ({ASM,CPP}_SPEC): Update for new
	processors.
	* rs6000/eabi{aix,le}.h ({ASM,CPP}_SPEC): Ditto.
	* rs6000/{lynx,netware,powerpc,sysv4}.h ({ASM,CPP}_SPEC): Ditto.

	* rs6000.c (rs6000_override_options): Remove requirement that
	-mcpu=common be big endian.
	(rs6000_stack_info): If NAME__main is defined, mark this function
	as doing a call, even if there are no arguments.

	* rs6000.md (SI*SI->DI splitters): Add reload_completed
	condition.
	(mulsidi3): If big endian, do move directly, rather than moving by
	pieces.

	* rs6000/eabi{,sim}.h (STARTFILE_SPEC): Add crti.o before any
	other objects.
	(ENDFILE_SPEC): Add crtn.o after any objects.
	* rs6000/t-eabi{,gas}: Build crt{i,n}.o from eabi-crt{i,n}.asm.
	* rs6000/eabi-crt{i,n}.asm: New files to provide begin/end labels
	for all special sections used by eabi as opposed to relying on GLD
	to set all of these symbols.
	* rs6000/eabi.asm (__eabi): Change to use the new labels provided
	above.  Don't assume that the .got2, .ctors, .dtors, and .fixup
	sections are contiguous.

Fri Jan  5 10:40:37 1996  David Edelsohn  <edelsohn@mhpcc.edu>

	* rs6000.md (mulh_call): Remove r4 clobber.
	(quoss_call): Remove cr0 and cr1 clobbers.

	* rs6000.md (function units): Add MPC505/821/860 support.
	(SF multiply add combiner patterns): Use dmul attribute when limited
	to DFmode POWER instructions.
	* rs6000.c (processor_target_table): Add MPC505/821/860 support.
	Remove MASK_POWER and add MASK_PPC_GFXOPT for PPC602.  Always use
	new mnemonics for common mode.
	(rs6000_override_options): Don't set SOFT_FLOAT based upon
	PROCESSOR_DEFAULT.
	* rs6000.h (processor_type): Add PROCESSOR_MPCCORE.
	(RTX_COSTS): Add PROCESSOR_MPCCORE cases.
	(CPP_SPEC): Add new processor support.

Fri Jan  5 00:32:49 1996  Doug Evans  <dje@cygnus.com>

	* sparc.h (MACHINE_STATE_RESTORE): Add missing .align.

Wed Jan  3 18:29:32 1996  Doug Evans  <dje@cygnus.com>

	* arm/lib1funcs.asm (__USER_LABEL_PREFIX__): Define if not already.
	(CONCAT1,CONCAT2,SYM): Define.
	(__udivsi3,__divsi3,__umodsi3,__modsi3,__div0): Use SYM to define
	global labels.

Wed Jan  3 02:41:39 1996  Jeffrey A. Law  <law@cygnus.com>

	* pa.h (DBX_OUTPUT_MAIN_SOURCE_FILE_END): Call text_section.

Tue Jan  2 16:12:13 1996  Jim Wilson  <wilson@cygnus.com>

	* sh.c (gen_shifty_op): Output a NOP for a shift by 0.
	(find_barrier): New variables si_limit, hi_limit.  Set them depending
	on whether we are optimizing.  Set found_hi if the destination is
	HImode.
	(machine_dependent_reorg): If not optimizing, then change scan to a
	note instead of calling delete_insn.
	* sh.h (OVERRIDE_OPTIONS): Don't set optimize or flag_delayed_branch.

	* dbxout.c (gstab.h): Include if cross compiling.

Mon Jan  1 21:13:43 1996  Arkady Tunik  <Arkady_Tunik@comverse.com>

	* configure (i[3456]-*-solaris2*): Support stabs.
	* i386/sol2dbg.h: New file.

Mon Jan  1 09:08:01 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* c-typeck.c: Use DECL_C_BIT_FIELD, not DECL_BIT_FIELD in all tests.

	* global.c (reg_allocno): No longer static.
	* reload1.c (reg_allocno): Declare.
	(order_regs_for_reload): New arg, GLOBAL.
	Bias against regs allocated in local-alloc.
	(reload): Pass new parm to order_regs_for_reload.

	* local-alloc.c (reg_equiv_replacement): New variable.
	(memref_referenced_p, case REG): Check for reg_equiv_replacement.
	(update_equiv_regs): reg_equiv_replacement now file-scope.

	* c-decl.c (finish_struct): Warn if field with enumeral type is
	narrower than values of that type.

	* combine.c (rtx_equal_for_field_assignment_p): New function.
	(make_field_assignment): Use it.
	Expand compound operations on both sides of an IOR.
	Properly adjust constand in IOR when computing bit position.

Sun Dec 31 18:47:22 1995  Doug Evans  <dje@cygnus.com>

	* m68k-none.h (MULTILIB_DEFAULTS): Define.

Sun Dec 31 15:47:20 1995  Jeffrey A. Law  <law@cygnus.com>

	* hard-reg-set.h (losing_caller_save_reg_set): Declare.
	* regclass.c (losing_caller_save_reg_set): Define.
	(init_reg_sets_1): Initialize losing_caller_save_reg_set.
	* global.c (find_reg): Avoid caller-saving registers in
	losing_caller_save_reg_set.
	* local-alloc.c (find_free_reg): Avoid caller-saving registers
	in losing_caller_save_reg_set.
	(CLASS_LIKELY_SPILLED_P): Delete definition.  Moved into regs.h.
	* regs.h (CLASS_LIKELY_SPILLED_P): Define if not already defined.

	* reorg.c (fill_simple_delay_slots): Try to fill from the
	target of an unconditional branch if necessary.

	* pa.h (REG_ALLOC_ORDER): Allocate PA1.1 caller-saved FP regs
	before PA1.0 caller-saved FP regs.

	* sched.c (adjust_priority): Use ADJUST_PRIORITY if its defined.

	* pa.h (ADJUST_PRIORITY): Define to keep lifetimes of registers
	that will be allocated to %r1 shorter.

Sun Dec 31 14:20:49 1995  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* rtl.h (assign_temp): Add extra arg.
	* function.c (assign_temp): Add extra arg, DONT_PROMOTE.
	Don't return (const_int 0) for VOIDmode.
	* stmt.c (expand_asm_operands): Call assign_temp with extra arg.
	* expr.c (save_nocopied_parts, expand_expr): Likewise.
	(expand_expr, case SAVE_EXPR): Set TEMP to (const_int 0)
	if MODE is VOIDmode.
	(expand_expr): Don't use assign_temp for pseudos when might
	want to be TMODE.

	* stmt.c (tail_recursion_args): Compare TYPE_MAIN_VARIANTs.

	* calls.c (expand_call): Don't warn about not being able to
	inline if -O0.
	* expr.c (clear_pending_stack_adjust): Don't do optimization if -O0.
	* function.c (instantiate_decls): Check DECL_SAVED_INSNS to see
	if obstack change is needed.
	* toplev.c (rest_of_compilation): Leave DECL_INLINE set even if
	won't inline.

	* tree.h: Add documentation on uses of common area flags.
	(DECL_ERROR_ISSUED): New macro.
	(DECL_NO_STATIC_CHAIN): New macro; currently unused.
	* c-aux-info.c (gen_decl): DECL_REGISTER isn't defined
	for FUNCTION_DECL.
	* toplev.c (compile_file): Likewise.
	* stmt.c (fixup_gotos): Use DECL_ERROR_ISSUED instead
	of DECL_REGISTER.
	* varasm.c ({bc_,}make_decl_rtl): Don't look at DECL_REGISTER
	for functions.

Sat Dec 30 07:57:11 1995  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* sdbout.c (plain_type_1, case ARRAY_TYPE): Subtract lower bound
	when writing dimension.

Fri Dec 29 18:23:58 1995  Paul Eggert  <eggert@twinsun.com>

	* cccp.c (eval_if_expression): End expression with '\n', not '\0'
	so '\0' can be diagnosed properly.
	* cexp.y (yylex, parse_c_expression, main): Likewise.

Thu Dec 28 18:24:54 1995  Per Bothner  <bothner@kalessin.cygnus.com>

	* tree.h (TYPE_ARRAY_MAX_SIZE):  New macro (used by Chill).
	* function.c (assign_temp):  New function.  Can handle Chill-style
	variable-sized array with static maximum size.
	* rtl.h (assign_temp):  New declaration.
	* stmt.c (expand_asm_operands):  Use new assign_temp function.
	* expr.c (save_noncopied_parts, expand_expr):  Likewise.

Thu Dec 28 15:28:47 1995  Per Bothner  <bothner@kalessin.cygnus.com>

        * function.c (assign_parms):  Fix thinko for struct value arg.

Fri Dec 29 12:41:47 1995  Michael Meissner  <meissner@tiktok.cygnus.com>

	* rs6000.md (movdf): Reinstate 12/24 change accidently dropped in
	undoing 12/27 changes.

Thu Dec 28 22:24:53 1995  Michael Meissner  <meissner@tiktok.cygnus.com>

	* rs6000.h: (reg_class): Undo 12/27 changes, except for formatting.
	(REG_NAMES, REG_CLASS_CONTENTS, REGNO_REG_CLASS): Likewise.
	(REG_CLASS_FROM_LETTER): Likewie.
	(PREDICATE_CODES): Delete predicate functions.
	(gpc_reg{0,3,4,34}_operand): Delete declaration.
	(cc_reg{0,1}_operand): Likewise.
	* rs6000.c (gpc_reg{0,3,4}_operand): Delete.
	(cc_reg{0,1}_operand): Likewise.

	* rs6000.md (common mode functions): Undo 12/27 changes,and add
	 appropriate clobbers for common mode calls.  Keep define_splits for
	 powerpc SI*SI->DI.

Thu Dec 28 11:08:11 1995  Mike Stump  <mrs@cygnus.com>

        * sparc.h (RETURN_ADDR_OFFSET): Rename from NORMAL_RETURN_ADDR_OFFSET;
	returns offset for the current function specifically.

Thu Dec 28 07:07:14 1995  Paul Eggert  <eggert@twinsun.com>

	* c-lex.c (yylex): Improve error message for bogus numbers.
	Consolidate duplicated code.

	* cexp.y (parse_number): Improve error message for bogus numbers.
	(yylex): Consider `0xe-1' to be a (bogus) number if not traditional.

	* cccp.c (do_include): In VMS, worry only about EACCES when open fails.
	(new_include_prefix): Don't try to stat dir prefixes in VMS.

Wed Dec 27 14:02:54 1995  Per Bothner  <bothner@kalessin.cygnus.com>

	* fix-header.c:  Add EXIT_FAILURE and EXIT_SUCCESS to stdlib.h if
	missing.  Re-write how errno is added to be done similarly.
	(XOPEN_SYMBOL, XOPEN_EXTENDED_SYMBOL):  New macros, to mark XPG4
	functions.
	(std_include_table):  Add a number of functions (mostly XPG4).

Tue Dec 26 23:18:34 1995  Per Bothner  <bothner@kalessin.cygnus.com>

	* sys-types.h:  Add dummy definition for ssize_t.
	* sys-protos.h (bcmp, bcopy, gethostname, lockf, read, readlink,
	write):  Fix prototypes to match Posix and XPG4.
	(socket, strcasecmp, strncasecmp):  New prototypes (from XPG4).

Wed Dec 27 15:30:04 1995  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* libgcc2.c (_bb_init_prg): Cast arg to bzero to (char *).

	* regs.h (reg_rtx_no, regno_pointer_{flag_length,align): New decls.
	(REGNO_POINTER_ALIGN): New macro.
	* emit-rtl.c (regno_pointer_align): New variable.
	(gen_reg_rtx): Extend regno_pointer_align table.
	Allocate tables in saveable obstack.
	(mark_reg_pointer): New arg, ALIGN.
	(gen_inline_header): New args for reg info.
	(set_new_first_and_last_insn): Set cur_insn_uid.
	({save,restore}_emit_status): Save and restore regno_pointer_align.
	(restore_reg_data{,_1}): Deleted.
	(init_emit): Allocate register tables in saveable obstack.
	Set REGNO_POINTER_ALIGN for regs pointing into frame.
	* function.c (assign_parms): Set REGNO_POINTER_ALIGN for
	parms that are pointers.
	* function.h (struct function): New field regno_pointer_align.
	* expr.c (expand_expr, case VAR_DECL): Set REGNO_POINTER_ALIGN
	when copying address into memory.
	(expand_expr, case COMPONENT_REF, case ADDR_EXPR): Set alignment
	of register when result or result's address.
	(expand_expr, case CONVERT_EXPR): Don't handle -fforce-mem here.
	* combine.c (set_nonzero_bits_and_sign_copies): Handle reg even
	if only set once and in one basic block.
	(nonzero_bits, case REG): Use REGNO_POINTER_ALIGN instead of
	explicit alignment of registers pointing into frame.
	* stmt.c (expand_decl): Set alignment of register for pointer
	variable.
	* optabs.c (emit_unop_insn): Don't do -fforce-mem for SIGN_EXTEND.
	* cse.c (find_best_addr): Make sure folded address better before using.
	* rtl.h (INLINE_REGNO_{RTX,POINTER_FLAG,POINTER_ALIGN}): New macros.
	(gen_inline_header): Add three new parms.
	* rtl.def (INLINE_HEADER): Add three new fields.
	* integrate.c: Include regs.h.
	(initialize_for_inline): Pass additional args to gen_inline_header.
	(save_for_inline_copying): Make new regno_reg_rtx, regno_pointer_flag,
	and regno_pointer_align arrays.
	(expand_inline_function): Set alignment of reg for parm if passed
	by hidden pointer.
	Set regno_pointer_{flag,align} into remap table.
	(copy_rtx_and_substitute): Set alignment of pointers into
	stack frame.
	Copy pointer flag and alignment to regs that are copies of
	pointer registers from the original regs.
	(output_inline_function): Don't call restore_reg_data.
	Restore reg_rtx_no, regno_{reg_rtx,pointer_flag,pointer_align}.
	* integrate.h (struct inline_remap): New fields regno_pointer_flag
	and regno_pointer_align.
	* unroll.c (unroll_loop): Set regno_pointer_{flag,align} in
	remap table.
	* explow.c (memory_address, allocate_dynamic_stack_space):
	Pass additional arg to mark_reg_pointer.
	* Makefile.in (integrate.o): Includes regs.h.

	* alpha.c ({non,}aligned_memory_operand): Test REGNO_POINTER_ALIGN.
	(reg_or_unaligned_mem_operand): New function.
	(get_unaligned_address): Add new arg, EXTRA_OFFSET.
	* alpha.h ({CONSTANT,DATA}_ALIGNMENT): Align to at least BITS_PER_WORD.
	(PREDICATE_CODES): Add reg_or_unaligned_mem_operand.
	* alpha.md (extend{qihi,qisi,hisi}2): Allow unaligned memory
	as arg 1 and pass to extend_{q,h}idi2.
	(unaligned_extend{q,h}idi): New patterns.
	(extend{q,h}idi2): If unaligned memory, call above new patterns.
	(ext{q,l,w}h recognizer): Update to proper RTL.
	(ext define_split): Comment out for now; wrong and maybe useless.
	(unaligned_{load,store}hi): Do similarly to QImode.
	(movhi, reload_{in,out}hi): Call unaligned case differently.

Wed Dec 27 11:38:20 1995  Michael Meissner  <meissner@tiktok.cygnus.com>

	* rs6000.md (mulsidi3{,_common}): Undo previous change using
	register classes instead of fixed registers for SI*SI->DI common
	mode multiplies.

	* rs6000.c (gpc_reg34_operand): Delete unused function.
	* rs6000.h (gpc_reg34_operand): Likewise.

	* rs6000.c (gpc_reg{3,4}_operand): Reorganize code and don't allow
	SUBREG's.

	* rs6000.c (rs6000_override_options): Do not allow -mcpu=common on
	little endian PowerPC's.
	(gpc_reg{0,3,4,34}_operand): New functions to match a specific
	register.
	(cc_reg{0,1}_operand): Likewise.

	* rs6000.h (reg_class): Add register classes for register 3 by
	itself, register 4 by itself, registers 3&4, and CR1.
	(REG_NAMES): Add support for new register classes.
	(REG_CLASS_CONTENTS, REGNO_REG_CLASS, REG_CLASS_FROM_LETTER): Likewise.
	(PREDICATE_CODES): Add new predicate functions.
	(gpc_reg{0,3,4,34}_operand): Add declaration.
	(cc_reg{0,1}_operand): Likewise.

	* rs6000.md (common mode multiplication/division): Move/rename common
	mode calls so they are closer to define_expands that call them.
	Set attribute type to be jmpreg, rather than integer, so optimizer
	knows branch processing unit is used; make SI*SI->DI multiplier use
	register classes instead of hardwired registers. 
	Add appropriate clobbers of CR0/CR1 as mandated by PowerOpen spec.
	(PowerPC SI*SI->DI multipliers): Add appropriate define_splits.

	* rs6000/t-{,x}newas (MULTILIB*): Don't build power2 or 601
	specific libraries.

Tue Dec 26 21:52:18 1995  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* fold-const.c (fold_convert): When converting a NaN to
	another type, change the type of the node before returning it.

Mon Dec 25 17:12:10 1995  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>

	* c-typeck.c (mark_addressable): Fix error in last change.

Sun Dec 24 22:19:49 1995  Jeffrey A. Law  <law@cygnus.com>

	* pa.c (output_function_epilogue): Use assemble_integer rather
	than calling ASM_OUTPUT_INT directly.
	* pa.h (ASM_OUTPUT_INT): Use labels for everything in the
	exception table section.

	* pa.c (print_operand): Don't call fprintf to output a register
	name.  Use fputs instead.

	* pa.h (ASM_OUTPUT_FUNCTION_PREFIX): Strip any name encoding
	on the section name.

Sun Dec 24 17:46:03 1995  Markus Theissinger  <Markus.Theissinger@gmd.de>

	* toplev.c (main): Add -ax option.
	* gcc.c (struct compilers): Likewise.
	* final.c (end_final): Extended header increased to 11 words.
	(profile_after_prologue): FUNCTION_BLOCK_PROFILER uses
	count_basic_blocks instead of profile_label_no.

	* libgcc2.c (struct bb): Add flags field.
	(HAVE_POPEN): Test new define.
	(struct __bb, struct bb_{edge,func}): New structs.
	(__bb_init_{prg,file},__bb_{init,exit}_trace_func,__bb_trace_ret,
	(__bb_trace_func{,_ret},gopen,gclose): New functions.

	* sparc.h, i386.h, m68k.h (FUNCTION_BLOCK_PROFILER, BLOCK_PROFILER):
	Extension for -ax option (profile_block_flag == 2).
	(MACHINE_STATE_SAVE,MACHINE_STATE_RESTORE): New macros.
	(FUNCTION_BLOCK_PROFILER_EXIT): New macro.
	* sparc.c (output_function_epilogue), i386.c (function_epilogue):
	Use FUNCTION_BLOCK_PROFILER_EXIT.
	* m68k.c (output_function_epilogue): Likewise.
	* xm-sparc.h: Define HAVE_POPEN.

Sun Dec 24 06:50:30 1995  Barrett Richardson  (barrett@iglou.com)

	* floatlib.c (__divdf3): Rewrite to do software divide of two
	doubles instead of using __divsf3.

Sun Dec 24 06:38:15 1995  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* rs6000.md (movdf): Don't copy a word at a time; nearly always loses.

	* c-tree.h (DECL_C_BIT_FIELD): New macro.
	* c-decl.c (finish_struct): Set it when set DECL_BIT_FIELD.
	* c-typeck.c (mark_addressable, case COMPONENT_REF):
	Give error if taking address of a bit field.

	* gcc.c (unused_prefix_warning): Include machine_suffix if
	require_machine_suffix.
	(warn_B, warn_std, warn_std_ptr): New variables.
	(process_commands): Use them and NULL_PTR as WARN arg to add_prefix.

	* gcc.c (process_command): Give error for -c with -o and
	multiple compilations.
	(handle_braces): Rename variable "pipe" to "pipe_p".

	* expr.h (clrstr_optab): New declaration.
	(clear_storage): New parm, ALIGN.
	* tree.h (CONSTRUCTOR_TARGET_CLEARED_P): New macro.
	* genopinit.c (optabs): Add "clrstr%a%".
	* optabs.c (init_optabs): Initialize clrstr_optab.
	* expr.c (struct clear_by_pieces): New structure.
	(clear_by_pieces{,_1}, {is,mostly}_zeros_p): New functions.
	(clrstr_optab): New optab.
	(clear_storage): Rework to try to use clear_by_pieces, then
	new clrstr insn, then library call.
	(store_constructor): Track if target is already cleared.
	Clear target first if CONSTRUCTOR is mostly zeros.
	Don't write zeros if target has been cleared.
	Add new arg to clear_storage call.
	(expand_expr, case CONSTRUCTOR): Don't put static constructor
	in memory if mostly zero.
	* i386.md (clrstrsi): New pattern and associate anonymous pattern.

Sat Dec 23 12:21:53 1995  Jeffrey A. Law  <law@cygnus.com>

	* pa.c (output_move_double): Correctly identify and handle
	overlapping moves.
	* pa.md (movdi patterns): Eliminate earlyclobbers in mem<->gr cases.
	(movdf patterns): Likewise.

Fri Dec 22 17:29:42 1995  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* expr.c (store_constructor): Don't call change_address on REG.
	(expand_expr, case CONSTRUCTOR): Likewise.

	* mips.c (expand_block_move): Preserve MEM flags in call to
	movstrsi_internal.

	* pa.c (emit_move_sequence): Don't try to set REGNO_POINTER_FLAG
	for a SUBREG.

	* reload.c (find_valid_class): New function.
	(push_reload): Use it in cases where a SUBREG and its contents
	both need to be reloaded.

	* toplev.c (rest_of_compilation): Never defer functions that
	contain nested functions.

Fri Dec 22 15:55:00 1995  Michael Meissner  <meissner@tiktok.cygnus.com>

	* rs6000.md (function units): Add 403 support which deleted
 	by accident on Nov 21st.  Mark all compares from 602, 603, 604,
 	620, 403, like was done for rios{1,2} and 601 as needing the bpu,
 	so that compares are hoisted far enough branches for zero cycle
 	branch support.

Fri Dec 22 15:13:47 1995  Stan Cox  <coxs@dg-rtp.dg.com>

	* i386.h (TARGET_UNROLL_STRLEN): New macro.
	* i386.c (output_strlen_unroll): New function.
	* i386.md (strlensi): New pattern.

Thu Dec 21 18:53:31 1995  Roland McGrath  <roland@churchy.gnu.ai.mit.edu>

	* /gnu.h (GNU_CPP_PREDEFINES): Add missing space after -Amachine(CPU).

Thu Dec 21 12:23:42 1995  Michael Meissner  <meissner@tiktok.cygnus.com>

	* configure ({powerpc,rs6000}*): Change --enable-cpu to --with-cpu.
	* rs6000.c (rs6000_select): Likewise.

	* rs6000/aix41.h (LINK_SPEC): Do not pass -bexport to the linker
	if -g and -shared.

Wed Dec 20 11:23:39 1995  Michael Meissner  <meissner@tiktok.cygnus.com>

	* configure ({powerpc,rs6000}-ibm-aix*): Merge these two into the
	same case statement.  Aix 4 now generates -mcpu=common by default.
	({powerpc,rs6000}*): Add support for --enable-cpu=<value> to
	select the default cpu to compile for.

	* rs6000/aix41.h (TARGET_DEFAULT): Make -mcpu=common default behavior.
	(PROCESSOR_DEFAULT): Likewise.
	(MULTILIB_DEFAULTS): Set mcpu=common.

	* rs6000.h (TARGET_CPU_DEFAULT): Define to be NULL if not defined.
	(PROCESSOR_COMMON): Set this to PROCESSOR_601.
	(PROCESSOR_POWERPC): Set this to PROCESSOR_604.
	(TARGET_OPTIONS): Add -mtune= switch.
	(rs6000_select): New structure to hold -mcpu=, -mtune= switches
	and the result of configuring --enable-cpu=.
	(OVERRIDE_OPTIONS): Pass TARGET_CPU_DEFAULT to
	rs6000_override_options.

	* rs6000.c (rs6000_cpu_string): Delete global variable.
	(rs6000_select): Define new global variable.
	(rs6000_override_options): Take default_cpu argument, and provide
	support for it and -mtune= in addition to -mcpu=.

	* rs6000/{aix{3newas,41},lynx,netware,powerpc}.h (ASM_SPEC): Add
	support for -mcpu=power2.
	* rs6000/{rs6000,sysv4}.h (ASM_SPEC): Likewise.

	* rs6000/{aix41,eabiaix,eabile,lynx,powerpc}.h (CPP_SPEC): Make
	sure all -mcpu=xxx targets are supports.
	* rs6000/{rs6000,sysv4,sysv4le}.h (CPP_SPEC): Likewise.

	* rs6000/t-x{newas,rs6000}: New files to be used when making a
	cross compiler, to prevent libgcc1-test from being made.

	* rs6000/t-{x,}newas (MULTILIB_*): Build multlilib libraries for
	power, power2, 601, powerpc, and common mode processors.

	* rs6000/aix41ppc.h: Delete, no longer used.

Tue Dec 19 18:31:21 1995  Jim Wilson  <wilson@cygnus.com>

	* mips.c (mips_reg_names, mips_sw_reg_names, mips_regno_to_class):
	Add entry for new RAP reg.
	* mips.h (FIRST_PSEUDO_REGISTER): Increment.
	(FIXED_REGISTERS, CALL_USED_REGISTERS, REGISTER_NAMES,
	DEBUG_REGISTER_NAMES): Add entry for new RAP reg.
	(RAP_REG_NUM, RETURN_ADDRESS_POINTER_REGNUM): New macros.
	(RETURN_ADDR_RTX): Define.
	(ELIMINABLE_REGS, CAN_ELIMINATE, INITIAL_ELIMINATION_OFFSET):
	Add RETURN_ADDRESS_POINTER_REGNUM support.
	* emit-rtl.c (return_address_pointer_rtx): New global variable.
	(gen_rtx, init_emit_once): Add support for it.

Tue Dec 19 15:08:31 1995  Jason Merrill  <jason@yorick.cygnus.com>

	* collect2.c: Remove auto_export functionality.

Tue Dec 19 10:57:23 1995  Kim Knuttila  <krk@cygnus.com>

	* ppc-asm.h: Do not compile the register macros under winnt.

Mon Dec 18 19:31:23 1995  Adam Fedor  <fedor@wilma.Colorado.EDU>

	* objc/encoding.c (objc_alignof_type): Handle _C_PTR case.

Mon Dec 18 18:40:34 1995  Jim Wilson  <wilson@chestnut.cygnus.com>

	* combine.c (simplify_rtx, case SUBREG): For SUBREG of a constant,
	use <= instead of < when comparing mode sizes.
	(force_to_mode, case NOT): Use full mask inside	the NOT operation.

	* expr.c (emit_block_move): When call emit_libary_call for bcopy,
	pass arguments using correct types and modes.
	(emit_push_insn, expand_assignment): Likewise.
	(clear_storage, store_expr): Likewise for memset and bzero.
	(store_constructor): Likewise for memset.
	* optabs.c (emit_cmp_insn): Likewise for memcmp and bcmp.
	* convex.c (expand_movstr_call): Likewise for memcpy.
	* m88k.c (expand_block_move): Likewise for memcpy and bcopy.
	* mips.c (block_move_call): Likewise for memcpy and bcopy.
	* mips.h (INITIALIZE_TRAMPOLINE): Likewise for cacheflush.

	* c-common.c (WCHAR_TYPE_SIZE): Add a default definition.

	* sdbout.c (sdbout_symbol, case FUNCTION_DECL): Use DECL_INITIAL
	instead of DECL_EXTERNAL to identify declarations.

        * svr4.h (ASM_IDENTIFY_GCC): Don't output stab here.
	(ASM_IDENTIFY_GCC_AFTER_SOURCE): Output stab here instead of above.

	* stmt.c (expand_asm_operands): Handle numeric constraints in
	with the default case.

Mon Dec 18 16:49:43 1995  John F. Carr  <jfc@mit.edu>

	* expr.h (expand_mult_highpart_adjust): Declare.

Mon Dec 18 16:39:41 1995  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* expr.c (store_constructor): Fix error in last change: just
	copy MEM, but be sure to share address.
	(expand_expr, case CONSTRUCTOR): Likewise.

Mon Dec 18 16:22:46 1995  Michael Meissner  <meissner@tiktok.cygnus.com>

	* rs6000.h (ASM_GENERATE_INTERNAL_LABEL): Put leading '*' in label
	string so as to not confuse dbxout.c.

Mon Dec 18 09:44:56 1995  Mike Stump  <mrs@cygnus.com>

	* libgcc2.c (__empty): An empty function used by the C++ frontend for
	defaulting cleanup actions.

	* tree.c (save_tree_status, restore_tree_status): Save and restore
	temporary_firstobj.

Mon Dec 18 07:49:34 1995  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* function.c (fixup_var_refs_1): Fix error in last change (when
	mode of VAR is not the same as PROMOTED_MODE).

Sun Dec 17 12:14:37 1995  Jeffrey A. Law  <law@cygnus.com>

	* pa.h (ASM_OUTPUT_FUNCTION_PREFIX): Don't surround section names
	with '$'; that confuses collect2.
	(ASM_OUTPUT_SECTION_NAME): Likewise.

	* sched.c (canon_rtx): Recursively look for equivalences;
	look for expressions equivalent to MEMs.
	(true_dependence): Canonicalize inputs before operating
	on their values.
	(anti_dependence, output_dependence): Likewise.

        * jump.c (follow_jumps): Don't follow an unconditional jump
        that is not a simple_jump.

        * pa.c (override_options): Make 7100 scheduling the default.

        * pa.md: Add 2nd reload peephole somehow omitted from Nov27 changes.

	* regclass.c (regclass): Use SECONDARY_RELOAD_CLASS if it's
	defined to avoid useless work.

	* combine.c (find_split_point): Try to split SET_DEST
	just like we do for SET_SRC.

Sun Dec 17 11:37:25 1995  Torbjorn Granlund  <tege@noisy.tmg.se>

	* expmed.c (expand_mult_highpart): When doing widening multiply,
	put constant in a register.
	(expand_mult_highpart): When mode is word_mode use gen_highpart
	instead of right shift by size.

	* expr.c (expand_expr, case MULT_EXPR): Generalize code for widening
	multiply to handle signed widening multiply when only unsigned optab
	is defined, and vice versa.

Sun Dec 17 07:35:50 1995  Pat Rankin  <rankin@eql.caltech.edu>

	* vax/vms.h (WCHAR_TYPE_SIZE): Define.

Sun Dec 17 07:08:34 1995  Ronald F. Guilmette  <rfg@monkeys.com>.

	* fp-test.c: New file.

Sun Dec 17 07:06:03 1995  Peter Flass  <flass@lbdc.senate.state.ny.us>

	* i370.md (cmpqi): Fix generation of literal operand of CLM instruction
	to avoid double literals (=X'=F'...).

Sun Dec 17 06:57:02 1995  Paul Eggert  <eggert@twinsun.com>

	* cccp.c: Try harder not to open or stat the same include file twice.
	Simplify include file names so that they are more likely to match.
	E.g. simplify "./a//b" to "a/b".  Represent directories with simplified
	prefixes, e.g. replace "./a//b" with "a/b/", and "." with "".
	(absolute_filename): New function.
	(do_include): Use it.
	(read_name_map): Likewise; this makes things more consistent for DOS.
	(main, do_include, open_include_file): -M output now contains
	operands of -imacros and -include.
	(skip_to_end_of_comment): When copying a // comment, don't try to
	change it to a /* comment.
	(rescan, skip_if_group, skip_to_end_of_comment, macarg1): Tune.
	(rescan, skip_if_group, skip_to_end_of_comment, macarg1):
	If warn_comments is nonzero, warn if backslash-newline appears
	in a // comment.  Simplify method for finding /* /* */ comment.
	(skip_if_group): Optionally warn if /* /* */ appears between # and
	a directive inside a skipped if group.
	(macarg): Optionally warn if /* /* */ appears in a macro argument.
	(strncat, VMS_strncat, vms_ino_t, ino_t): Remove.
	(INCLUDE_LEN_FUDGE): Add 2 if VMS, for trailing ".h".
	(INO_T_EQ, INO_T_HASH): New macros.
	(struct file_buf): New member `inc'.
	(expand_to_temp_buffer): Initialize it.
	(struct file_name_list): New member `inc'.
	(struct file_name_list): New member `st'.
	c_system_include_path is now 1 if not 0.
	fname is now an array, not a pointer.
	(struct include_file): New members `next_ino', `deps_output', `st'.
	Remove members `inode' and `dev'; they are now in `st'.
	(INCLUDE_HASHSIZE): Rename from INCLUDE_HASH_SIZE.
	(include_hashtab): Rename from include_hash_table.
	(include_ino_hashtab): New variable.
	(main): Store file status in struct stat, not in long and int pieces.
	Use base_name to strip prefixes from file names.
	When printing directory prefixes, omit trailing / and print "" as ".".
	Fatal error if the input file is a directory.
	(main, path_include): Regularize operands of -include, -imacros,
	-isystem, -iwithprefix, and -iwithprefixbefore.
	Regularize default include directories.
	(do_include):
	Allocate dsp with alloca, since fname is now dynamically allocated.
	Use -3 to represent a never-opened file descriptor.
	Make copy of file name, and simplify the copy.
	Use base_name to identify the end of fname's directory.
	Do not prepend dir for "..." if it matches the search list's first dir.
	open_include_file now subsumes redundant_include_p and lookup_import.
	Use bypass_slot to remember when to skip directories when including
	a file that has already been seen.
	Instead of using 0 to represent the working directory, and ""
	to represent a directory to be ignored, use "" for the former,
	and assume the latter has been removed before we get here.
	Assume the directory prefixes have already been simplified.
	Report as errors all open failures other than ENOENT.
	Fatal error if fstat fails.
	Use new deps_output member to avoid printing dependencies twice.
	(bypass_hashtab): New variable.
	(do_include, open_control_file, record_control_macro): New convention:
	control_macro is "" if the file was imported or had #pragma once.
	(pragma_once_marker): Remove.
	(redundant_include_p, include_hash, lookup_include, lookup_import,
	add_import, file_size_and_mode): Remove; subsumed by open_include_file.
	(skip_redundant_dir_prefix): Remove; subsumed by simplify_filename.
	(is_system_include, read_name_map, remap_include_file):
	Assume arg is a directory prefix.
	(base_name, simplify_filename, remap_include_file,
	lookup_ino_include, new_include_prefix): New functions.
	(open_include_file): New arguments `importing' and `pinc'.
	Move filename mapping into new remap_include_file function.
	First try to find file by name in include_hashtab;
	if that doesn't work, open and fstat it and try to find it
	by inode and dev in include_ino_hashtab.
	(finclude): Get file status from inc->st instead of invoking fstat.
	Store inc into fp->inc so that record_control_macro doesn't
	need to do a table lookup.
	(finclude, record_control_macro): Accept struct include_file *
	instead of char * to identify include file.  All callers changed.
	(check_precompiled): Get file status from new argument `st'.
	(do_pragma): Output at most one warning about #pragma implementation.
	Always return 0 instead of returning garbage sometimes.
	(do_pragma, hack_vms_include_specification):
	Use base_name for consistency, and remove redundant code.

	From Per Bothner:
	Unify the 3 separate mechanisms for avoiding processing
	of redundant include files: #import, #pragma once, and
	redundant_include_p to use a single more efficient data structure.
	(struct file_name_list):  Remove no-longer needed field control_macro.
	(dont_repeat_files, all_include_files):  Remove, no longer used.
	(struct import_file):  Renmed to struct include_file, moved earlier
	in file, renamed field name to fname, and added control_macro field.
	(pragma_once_marker):  New constant.
	(import_hash_table):  Renamed to include_hash_table.
	(import_hash):  Renamed to include_hash.
	(IMPORT_HASH_SIZE):  Renamed to INCLUDE_HASH_SIZE.
	(main, path_include):  Don't clear removed control_macro field.
	(lookup_include):  New function - look up fname in include_hash_table.
	(redundant_include_p):  Re-write to use lookup_include.
	(lookup_import, record_control_macro):  Likewise.
	(add_import):  Defer fstat to caller.  Combine two xmallocs into one.
	(do_once):  Use pragma_once_marker in include_hash_table.
	(do_pragma):  Re-implement to scan include_hash_table.
	(do_include):  Use new lookup_include and add_import.

Sun Dec 17 06:45:43 1995  John F. Carr <jfc@mit.edu>

	* configure (savesrcdir): Do not create paths with trailing "/.".

	* combine.c (try_combine): When checking for two sets of the same
	register in a split insn, also test for setting a ZERO_EXTRACT,
	STRICT_LOW_PART, or SUBREG.

Sun Dec 17 06:37:00 1995  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* reload.c (push_secondary_reload): Don't strip paradoxical SUBREG
	if reload_class is CLASS_CANNOT_CHANGE_SIZE.

Sat Dec 16 18:24:20 1995  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* expr.c (expand_assignment): Fix alignment parm in emit_block_move.

Sat Dec 16 18:16:08 1995  John Hassey  (hassey@rtp.dg.com)

	* local-alloc.c (optimize_reg_copy_2): Don't attempt
	optimization if destination register dies.

Sat Dec 16 08:31:16 1995  Paul Eggert  <eggert@twinsun.com>

	* fold-const.c (fold):  Don't record overflow when negating
	unsigned constants.

Sat Dec 16 07:45:11 1995  Gran Uddeborg  (uddeborg@carmen.se)

	* configure (i[3456]-*-isc, gas, stabs): Remove crt* from extra_files

Sat Dec 16 07:03:33 1995  Philippe De Muyter (phdm@info.ucl.ac.be)

	* stor-layout.c (layout_record): When PCC_BITFIELD_TYPE_MATTERS,
	compute bitpos using field_size % type_align instead of field_size.

	* fixincludes (stdio.h):  Fix return type of fread and fwrite
	on sysV68.

Sat Dec 16 06:57:14 1995  Thomas Lundqvist  (d0thomas@dtek.chalmers.se)

	* function.c (fixup_var_refs_1): Fix two incorrect calls to single_set.

Fri Dec 15 22:30:27 1995  Torbjorn Granlund  <tege@noisy.tmg.se>

	* i386.h (REGISTER_MOVE_COST): Simplify.

Fri Dec 15 22:30:27 1995  Stan Cox  <coxs@dg-rtp.dg.com>

	* i386.h (TARGET_CPU_DEFAULT*, PROCESSOR_*,
	TARGET_{LEAVE,386_ALIGNMENT,PUSH_MEMORY,ZERO_EXTEND_WITH_AND,
	DOUBLE_WITH_ADD,BIT_TEST}): New macros.
	* i386.c (ix86_cpu*, ix86_isa*): New global variables.
	(override_options): Add -mcpu and -misa support
	* i386.md: Use TARGET* macros.
	* i386/dgux.{c,h}: New files.
	* m88k/t-dgux: (GCC_FOR_TARGET, T_CFLAGS): New macros.
	* m88k/t-dguxbcs: New file.
	* m88k/x-{dgux,dguxbcs}: (GCC_FOR_TARGET, X_CFLAGS): Removed.

Fri Dec 15 18:41:50 1995  Philippe De Muyter (phdm@info.ucl.ac.be)

	* fixincludes (sys/wait.h):  Add forward declaration of struct rusage
	on AIX 3.2.5.

Fri Dec 15 18:39:36 1995  Marco S Hyman  (marc@dumbcat.sf.ca.us)

	* xm-bsd386.h (DONT_DECLARE_SYS_SIGLIST): Defined.

Fri Dec 15 18:36:42 1995  Gran Uddeborg (uddeborg@carmen.se)

	* i386/svr3dbx.h (DO_GLOBAL_DTORS_BODY): Delete; obsolete.

Fri Dec 15 18:21:34 1995  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>

	* i386/i386iscgas.h, i386/t-iscscodbx: Deleted; long dead.

Fri Dec 15 10:01:27 1995  Stan Cox  <coxs@dg-rtp.dg.com>

	* configure (target_cpu_default) Set for 486/586/686
	(m88k-dg-dgux) Use t-dguxbcs instead of x-dguxbcs
	(i*86*) Change [345] to [3456]
	(i[3456]86-dg-dgux) Added
	* Makefile.in (out_object_file) Add MAYBE_TARGET_DEFAULT

Fri Dec 15 08:05:49 1995  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* function.c (init_temp_slots): New function.
	(init_function_start): Code moved to new function and called here.
	* toplev.c (rest_of_compilation): Call init_temp_slots.

	* expmed.c (store_bit_field): Don't use insv for BLKmode value.
	(store_split_bit_field): Set total_bits to BITS_PER_FOR for
	BLKmode value.

Fri Dec 15 06:35:36 1995  David Edelsohn  <edelsohn@mhpcc.edu>

	* xcoffout.h (DBX_STATIC_BLOCK_END): Use macro arguments.
	(xcoff_begin_function_line, xcoff_current_function_file): Remove
	unused extern declarations.
	(DBX_OUTPUT_MAIN_SOURCE_FILENAME): Use macro argument.
	* xcoffout.c (xcoff_begin_function_line): Make static.
	(xcoff_inlining): Likewise.
	(xcoff_current_function_file): Likewise.
	(xcoff_output_standard_types): Remove TARGET_64BIT dependencies from
	int and unsigned int.

Mon Oct 16 12:25:52 1995  Per Bothner  <bothner@kalessin.cygnus.com>

	* fix-header.c:  Support different kinds of functions (ANSI and
	Posix1).  Enable ANSI proptotypes if __STRICT_ANSI__.
	(namelist_end):  Removed.
	(std_include_table):  Divide up functions into kinds.
	(add_symbols):  New function.
	(read_scanfile, write_rbrac, main):  Use new data structures.

Thu Dec 14 19:17:12 1995  Torbjorn Granlund  <tege@noisy.tmg.se>

	* rs6000.md (umulsidi3): New pattern.

Thu Dec 14 18:08:59 1995  Torbjorn Granlund  <tege@noisy.tmg.se>

	* expmed.c (expand_divmod, case TRUNC_DIV_EXPR): Only reject
	larger-than-HOST_BITS_PER_WIDE_INT modes for general constants,
	not for powers-of-2.

	* i960.md (andsi3): Match op2 with logic_operand, change constraints
	accordingly.  Output andnot for negative op2.
	(iorsi3, xorsi3): Analogous changes.
	* i960.c (logic_operand): New function.
	(i960_print_operand): Handle code `C'.
	* i960.h (PREDICATE_CODES): Add logic_operand.
	(CONST_OK_FOR_LETTER_P): Handle `M'.
	* i960.md: Move all plain logical patterns together.
	* i960.h (SHIFT_COUNT_TRUNCATED): Define as 0 as appropriate.

	* clipper.md (untyped_call): New pattern.

	* m68k.md (ashrsi_31): New pattern.

Thu Dec 14 17:22:14 1995  Richard Earnshaw (rearnsha@armltd.co.uk)

	* arm.c (output_move_double): Extract DFmode constants using
	REAL_VALUE_TO_TARGET_DOUBLE.

Thu Dec 14 15:05:13 1995  Doug Evans  <dje@cygnus.com>

	* Makefile.in (distclean): Delete float.h.
	* configure: Set CROSS_FLOAT_H from float_format.
	* config/float-i64.h: New file.
	* config/float-i32.h: New file.
	* config/float-vax.h: New file.
	* arm/cross-float.h: Delete.
	* arm/t-semi (CROSS_FLOAT_H): Delete.

Wed Dec 13 19:16:57 1995  Mike Stump  <mrs@cygnus.com>

	* expr.c (expand_expr, case ADDR_EXPR): Ensure op0 isn't QUEUED.

Wed Dec 13 19:12:21 1995  Paul Eggert  <eggert@twinsun.com>

	* gcc.c (my_strerror): Return "cannot access" if errno is 0.
	(perror_with_name, pfatal_with_name, perror_exec): Don't assume that
	the returned value from my_strerror contains no '%'s.
	(sys_nerr): Declare only if HAVE_STRERROR is not defined.

Wed Dec 13 19:05:47 1995  Alan Modra  (alan@spri.levels.unisa.edu.au)

	* Makefile.in (c-parse.y, objc-parse.y): Add warning that file is
	automatically generated.

Wed Dec 13 15:40:30 1995  Mike Stump  <mrs@cygnus.com>

	* function.c (identify_blocks): Start with chain of BLOCKs to match
	rest of backend (dbxout.c), instead of just one BLOCK.
	(reorder_blocks, all_blocks): Likewise.

	* stmt.c (find_loop_tree_blocks): Pass the toplevel list of
	blocks, not just the first subblock.

Wed Dec 13 16:11:18 1995  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* expmed.c (expand_divmod): Don't use TARGET if it's the wrong mode.

Wed Dec 13 15:02:39 1995  Ian Lance Taylor  <ian@cygnus.com>

	* dbxout.c (struct typeinfo): Define.
	(typevec): Change to be struct typeinfo *.  Change other uses as
	appropriate.
	(struct dbx_file): Define if DBX_USE_BINCL.
	(current_file): New static variable if DBX_USE_BINCL.
	(next_file_number): Likewise.
	(dbxout_init): If DBX_USE_BINCL, initialize new variables.
	(dbxout_start_new_source_file): New function.
	(dbxout_resume_previous_source_file): New function.
	(dbxout_type_index): New function.
	(dbxout_range_type): Use dbxout_type_index.
	(dbxout_type): Likewise.  If DBX_USE_BINCL, initialize new typevec
	fields.
	* c-lex.c (check_newline): If DBX_DEBUGGING_INFO and write_symbols
	== DBX_DEBUG, call dbxout_start_new_source_file and
	dbxout_resume_previous_source_file when appropriate.
	* sparc/sunos4.h (DBX_USE_BINCL): Define.
	* svr4.h (DBX_USE_BINCL): Define.

Wed Dec 13 06:52:40 1995  Michael Meissner  <meissner@cygnus.com>

	* rs6000/win-nt.h (ASM_OUTPUT_EXTERNAL): Do not emit .extern for
	builtin functions.

Tue Dec 12 15:37:48 1995  David Edelsohn  <edelsohn@mhpcc.edu>

	* rs6000.c: Replace many uses of fprintf with putc and fputs.
	(output_function_profiler): Use more efficient mnemonics, target
	dependent mnemonics, asm_fprintf, and reg_names array.

	* rs6000.h: Replace many uses of fprintf with putc and fputs.

	* rs6000.h (INT_TYPE_SIZE): Remove TARGET_64BIT dependency.
	(MAX_INT_TYPE_SIZE): Delete.

Tue Dec 12 13:58:57 1995  Doug Evans  <dje@cygnus.com>

	* t-h8300 (MULTILIB_{OPTIONS,DIRNAMES}): Add -mint32 support.

Sun Dec 10 18:51:21 1995  Torbjorn Granlund  <tege@noisy.tmg.se>

	* rs6000.md (matcher for neg:SI (geu:SI ..)): Get ppc syntax right.

Sun Dec 10 08:47:16 1995  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* combine.c (simplify_if_then_else): Convert "a == b ? b : a" to "a".

	* expr.c (expand_expr, case CONSTRUCTOR): If TREE_READONLY,
	set RTX_UNCHANGING_P in TARGET.
	(expand_expr, case COMPONENT_REF): If result is BLKmode,
	use that to access object too.

Sun Dec 10 01:06:57 1995  Jeffrey A. Law  <law@cygnus.com>

	* pa.md (millicode delay slot description): Remove reference
	to defunct TARGET_MILLICODE_LONG_CALLS.

Sat Dec  9 18:05:03 1995  Jim Wilson  <wilson@cygnus.com>

	* expr.c (expand_expr, case INDIRECT_REF): Correct typo in May 8
	change.

	* sh.h (ADDRESS_COST): Define.
	* sh.md (subsi3): Rename to subsi3_internal.  Add new define_expand
	to handle subtracting a register from a constant.

Fri Dec  8 19:17:30 1995  Mike Meissner  <meissner@beauty.cygnus.com>

	* rs6000.c (input_operand): Allow any integer constant, not
	just integers that fit in 1 instruction.

Fri Dec  8 10:45:07 1995  Richard Earnshaw (rearnsha@armltd.co.uk)

	* arm/lib1funcs.asm (RET, RETCOND): Define according to whether we
	are compiling for 32 or 26 bit mode.
	(all return instructions): Use RET or RETCOND as appropriate.

Wed Dec  6 06:58:23 1995  Richard Earnshaw (rearnsha@armltd.co.uk)

	* arm.c (arm_gen_constant): New function.
	(arm_split_constant): Split most of the functionality into
	arm_gen_constant.  Try to decide which way of handling the constant
	is optimal for the target processor.

	* arm.c (arm_prgmode): New enum.
	(target_{cpu,fpe}_name, arm_fast_multiply, arm_arch4): New variables.
	(all_procs): New table describing processors and capabilities.
	(arm_override_options): New function.
	(arm_return_in_memory): New function.
	(arm_rtx_costs): Adjust the multiply costs to cope with processors
	with fast multiplication instructions.
	(output_move_double): Use the ldm/stm variants more efficiently.
	Delete cases that can no-longer occur.
	(output_return_instruction, output_func_epilogue): Use TARGET_APCS_32,
	not TARGET_6 for determining the type of return instruction to emit.
	(final_prescan_insn case CALL_INSN): Use TARGET_APCS_32, not TARGET_6
	to determine condition preservation.
	* arm.h (CPP_SPEC): Add defines for the cpu type, hard or soft floating
	point, and the APCS PC size.
	(TARGET_*): Restructure.
	(ARM_FLAG_*): Many new definitions for different target options, not
	all of which are supported yet.
	(TARGET_SWITCHES): Use the ARM_FLAG_* definitions instead of explicit
	numbers.
	(prog_mode_type): New enum.
	(floating_point_type): Split emulated floating point into FP_SOFT[23].
	(OVERRIDE_OPTIONS): Call arm_override_options.
	(ARM_CPU_NAME): Default to NULL if not defined by a subtarget.
	(BYTES_BIG_ENDIAN): Can now be set as a compilation option.
	(RETURN_IN_MEMORY, DEFAULT_PCC_STRUCT_RETURN): New definitions.
	(GO_IF_LEGITIMATE_OFFSET): Use different HImode offsets if compiling
	for an architecture 4 target.  The offsets for floating point
	constants are the same as for integers if compiling TARGET_SOFT_FLOAT.
	(GO_IF_LEGITIMATE_ADDRESS): Don't allow PRE_INC and POST_DEC if
	the size is more than 4 bytes.  Restrict the range offsets for DImode;
	likewise for DFmode when TARGET_SOFT_FLOAT.
	(LEGITIMIZE_ADDRESS): Use symbol_mentioned_p, not LEGITIMATE_CONSTANT_P
	to determine if a constant address might be better in a register.
	Handle DFmode addresses in the same way as DImode if TARGET_SOFT_FLOAT.
	(LOAD_EXTEND_OP): If arm_arch4, then HImode also zero-extends.
	* arm.md (attributes): Rearrange order, so that condition clobbering
	can be automatically determined for call insns.
	(attribute cpu): Add new cpu ARM7.
	(attribute type): Add new type MULT.
	(attribute prog_mode): New attribute.
	(attribute conds): Clobbering of call insns can now be determined
	using prog_mode attribute.
	(function units "write_buf", "write_blockage"): Model the write buffer
	as two function units, so that conflicts are avoided more often.
	(funcion unit "core"): New function unit, so that elapsed cycles can
	be more accurately determined.
	(all anonymous patterns): Add names.
	(mulsidi3, umulsidi3): New patterns available with fast multiply
	variants.
	(all call insns): The conds attribute is now determined automatically.
	(zero_extendhisi): Expand for architecture 4 variants if appropriate.
	(*zero_extendhisi_insn): New pattern.
	(extendqi{hi,si}, extendhisi): Expand for architecture 4 variants if
	appropriate.
	(*extendhisi_insn, *extendqihi, *extendqisi): New patterns.
	(storehi_single_op): New expand.
	(movhi): Handle architecture 4 expansion.
	(*movhi_insn_arch4): New pattern.
	(*movhi_*): Adjust applicability conditions to handle architecture 4.
	(reload_outdf): Handle pre/post inc/dec reloads.
	(tablejump): Delete.
	(matcher for optimized tablejump): delete.
	(casesi): New expand.
	(casesi_internal): New pattern.
	* semi.h (EXIT_BODY): Delete.
	(TARGET_DEFAULT): Set to ARM_FLAG_APCS_32.
	(CPP_SPEC): Define.
	arm/cross-float.h: New file, used when building a cross-compiler.
	* t-semi: Don't define inhibit_libc when building libgcc2.a.
	(CROSS_FLOAT_H): Define.

	* arm.c	({symbol,label}_mentioned_p): New functions.
	(add_constant, dump_table, fixit, find_barrier, broken_move): New
	support functions for handling constant spilling.
	(arm_reorg): New constant spilling pass, for putting unhandlable
	constants into the rtl where we can load them efficiently.
	(output_load_symbol): Delete.
	* arm.h (SECONDARY_OUTPUT_RELOAD_CLASS): No need to handle floating
	point constants any more, since arm_reorg will deal with them.
	(LEGITIMATE_CONSTANT_P): Is now anything that doesn't contain a
	LABEL.
	(GO_IF_LEGITIMATE_ADDRESS): Recognize address expressions generated
	by arm_reorg, but only after reload has completed.
	(MACHINE_DEPENDENT_REORG): Define.
	(ASM_OUTPUT_SPECIAL_POOL_ENTRY): There should be nothing left in
	the pool, even if it might look like it.
	* arm.md (*movsi_insn): Much simpified now that constants are handled
	properly.
	(movaddr): New expand.
	(movsf, movdf): No need to force constants into the pool any more.
	(*movdf_hard_insn): Much simplified.
	(consttable_4, consttable_8, consttable_end, align_4): New patterns
	for supporting embedded constants.

	* configure: New target arm-semi-aof.
	* arm.c (strings_fpa): Use a form which is common to both GAS and
	ARMASM.
	(output_return_instruction, output_func_epilogue): Call
	assemble_external_libcall, before trying to generate an abort call
	in the assembler.
	(arm_asm_output_label): Call ARM_OUTPUT_LABEL, rather than assuming
	that labels are followed by a colon.
	(aof_text_section, aof_add_import, aof_delete_import,
	 aof_dump_imports): New functions to support ARMASM assembler
	generation.
	* arm/aout.h: New file.
	* arm/aof.h: New file.
	* arm.h (most assembler-specific defines): Move to arm/aout.h.
	(CONSTANT_ADDRESS_P): Can't directly access constant strings when
	generating assembler for ARMASM.
	(ENCODE_SECTION_INFO): Don't define if generating ARMASM assembler.
	(ASM_OUTPUT_INTERNAL_LABEL): Generalize, so that it can be used
	with all targeted assemblers.
	(ASM_OUTPUT_LABEL): Call arm_asm_output_label.
	* riscix.h: Include arm/aout.h, not arm/arm.h.
	* riscix1-1.h: Likewise.
	* semi.h: Likewise.
	* arm/semiaof.h: New file.
	* arm/t-semiaof: New file.

Mon Dec  4 22:17:37 1995  Jason Merrill  <jason@yorick.cygnus.com>

	* gcc.c (LIBGCC_SPEC): Do link with libgcc when -shared.
	* alpha.h (LIBGCC_SPEC): Remove.
	* linux.h (LIBGCC_SPEC): Remove.
	* svr4.h (LIBGCC_SPEC): Remove.
	* i386/t-crtpic (TARGET_LIBGCC2_CFLAGS): Use -fPIC.
	* t-pa (TARGET_LIBGCC2_CFLAGS): Use -fPIC.
	* sparc/t-sunos41 (TARGET_LIBGCC2_CFLAGS): Use -fPIC.
	* sparc/t-sol2 (TARGET_LIBGCC2_CFLAGS): Use -fPIC.
	* configure (i386-linux): Use i386/t-crtpic.

	* i386/xm-sco.h: #define NO_SYS_SIGLIST.

Mon Dec  4 21:30:37 1995  Jim Wilson  <wilson@mole.gnu.ai.mit.edu>

	* sh.c (shiftcosts): For SH3, max cost of arithmetic right shift is 3.
	(expand_ashiftrt): For SH3, if shift cost is more than 3, then
	call gen_ashrsi3_d to use shad instruction.

Mon Dec  4 18:29:08 1995  Jason Merrill  <jason@yorick.cygnus.com>

	* c-decl.c (finish_struct): Don't mess with the type of bitfields.

Mon Dec  4 15:28:02 1995  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* expr.c (store_constructor, record): If field is READONLY,
	set RTX_UNCHANGING_P in TO_RTX.

Mon Dec  4 12:59:33 1995  Ian Lance Taylor  <ian@cygnus.com>

	* sparc/t-sol2 (CRTSTUFF_T_CFLAGS): Use -fPIC unconditionally.

Sun Dec  3 20:55:43 1995  Jeffrey A. Law  <law@cygnus.com>

	* pa.h (ASM_OUTPUT_FUNCTION_PREFIX): Handle arbitrary sections.
	(ASM_OUTPUT_SECTION_NAME): Define.

Sat Dec  2 22:19:16 1995  Jeffrey A. Law  (law@cygnus.com)

	* pa.h: Replace many uses of fprintf with fputs.
	* pa.c: Likewise.
	* pa-pro.h: Likewise.

	* pa.h (SECONDARY_RELOAD_CLASS): Don't call secondary_reload_class
	to handle trivial cases.
	* pa.c (secondary_reload_class): Rework to be more efficient.

Sat Dec  2 07:52:46 1995  Michael Meissner  <meissner@tiktok.cygnus.com>

	* rs6000.md (movsi): Don't split large constants in the
	movsi pattern, let the define_split split it later as needed.

Fri Dec  1 16:00:42 1995  Brendan Kehoe  <brendan@cygnus.com>

	* sparc.c (output_double_int): Handle CODE_LABEL's if v9.

Fri Dec  1 09:13:23 1995  Michael Meissner  <meissner@tiktok.cygnus.com>

	* m68k.md (decrement_and_branch_until_zero): Split into a
	define_expand and an anonymous define_insn.
	* fx80.md (decrement_and_branch_until_zero): Ditto.
	* m88k.md (decrement_and_branch_until_zero): Ditto.

Thu Nov 30 15:02:16 1995  Jim Wilson  <wilson@mole.gnu.ai.mit.edu>

	* sh.c (noncall_uses_reg): New function.
	(machine_dependent_reorg): Add support for TARGET_RELAX.
	(final_prescan_insn): Likewise.
	* sh.h (ASM_SPEC, LINK_SPEC): Pass on -mrelax.
	(RELAX_BIT, TARGET_RELAX): New macros.
	(TARGET_SWITCHES): Add -mrelax.

	* sh.c (insn-attr.h): Include.
	(pragma_nosave_low_regs): New global variable.
	(calc_live_regs): If SH3 and pragma_nosave_low_regs, then don't
	save registers r0 through r7 for interrupt functions.
	(function_epilogue): Clear pragma_nosave_low_regs.
	(handle_pragma): Set pragma_nosave_low_regs if see pragma for it.

	* sh.h (FUNCTION_PROFILER): Use trap #33 instead of trap #5.
	Put additional .align before trapa instruction.

Thu Nov 30 14:45:13 1995  Doug Evans  <dje@canuck.cygnus.com>

	* sparc.md (seqdi_special_trunc, snedi_special_trunc,
	seqsi_special_extend, snesi_special_extend): Delete uses of SUBREG.
	Make compare modes match modes of operands.
	(snesi_zero_extend, snedi_zero_trunc_sp32, snedi_zero_trunc_sp64,
	seqsi_zero_extend, seqdi_zero_trunc_sp32, seqdi_zero_trunc_sp64):
	New patterns.

Thu Nov 30 12:27:22 1995  Michael Meissner  <meissner@tiktok.cygnus.com>

	* genmultilib: Take a 4th argument that says are the exceptions to
	the multilibs, so illegal combinations can be eliminated.

	* Makefile.in (multilib.h): Pass $(MULILIB_EXCEPTIONS) as the 4th
	argument to genmultilib.

	* configure (powerpc*): Remove little endian and eabiaix versions
	of the t-* files.  Accept powerpc{,le}-*-sysv in addition to
	*-sysv4.
	(powerpc{,le}-*-eabisim): Use standard t-eabigas instead of
	t-eabisim.
	(powerpcle-*-{winnt3,pe}): Add support for Windows NT on PowerPC.
	* rs6000/t-{eabiaix,eabisim,eabilegas,ppclegas}: Delete.

	* rs6000/{t-winnt,win-nt.h}: New files for PowerPC Windows NT.

	* ginclude/ppc-asm.h: New file to provide common macros for the
	various PowerPC calling sequences.
	* rs6000/eabi.asm: Use ppc-asm.h.

	* rs6000/aix3newas.h (CPP_SPEC): Add support for -mcpu=603e, 602,
	and 620.
	* rs6000/{aix41,powerpc,rs6000,eabi{aix,le}}.h (CPP_SPEC): Ditto.
	* rs6000/sysv4{,le}.h (CPP_SPEC): Ditto.

	* rs6000/aix3newas.h (LINK_SPEC): If cross compiling, don't use
	absolute paths.
	* rs6000/{aix41,aixppc,rs6000}.h (LINK_SPEC): Ditto.

	* rs6000/eabi.h (INVOKE__main): Don't define any more.
	(ASM_OUTPUT_INT): Move to sysv4.h.
	({STARTFILE,LIB}_SPEC): If -msim or -mmvme add the appropriate
	libraries.

	* rs6000/{eabiaix,eabile,sysv4{,le}}.h (CPP_SPEC): Add support for
	-mcall-{aixdesc,nt} directives.
	(MULTILIB_DEFAULTS): Define.

	* rs6000/eabi{,le}sim.h (TARGET_DEFAULT, CPP_SPEC): No longer
	define, simulator supports floating point.
	({STARTFILE,LIB}_SPEC): If -mvme, use mvme libraries, not
	simulator libraries.

	* rs6000/{mach,netware}.h (TARGET_AIX): Define as 0.

	* rs6000/netware.h (RS6000_OUTPUT_BASENAME): Don't redefine
	anymore.
	(STRIP_NAME_ENCODING): Undef.

	* rs6000.c (rs6000_save_toc_p, rs6000_abi): New globals.
	(rs6000_override_options): Add 602, 603e, and 620 support.
	(count_register_operand): New function to return true if operand
	is the count register.
	(easy_fp_constant): All constants are easy if -msoft-float.
	(volatile_mem_operand): New function to return true if operand is
	in volatile memory.
	({fp_,}reg_or_mem_operand): Call volatile_mem_operand.
	(input_operand): Allow support for Windows NT loading SYMBOL_REFs
	and LABEL_REFs from the TOC.
	(function_arg_boundary): On Windows NT, any argument >= 8 bytes
	must be double word aligned.
	(function_arg{_advance,}): Call function_arg_boundary to determine
	if we need to align to an odd register for large arguments.
	Changes to accomidate new method of determining which ABI we're
	adhering to.
	(expand_block_move_mem): Copy RTX_UNCHANGING_P, and if
	MEM_UNALIGNED_P is defined, copy that too.
	(expand_block_move): Copy dest/src to registers using
	copy_addr_to_reg.
	(print_operand): Changes to accomidate Windows NT.
	(first_reg_to_save): Ditto.
	(rs6000_stack_info): Ditto.
	(debug_stack_info): Ditto.
	(output_{prolog,epilog,toc,function_profiler}): Ditto.
	(rs6000_stack_info): Save main's arguments around __eabi call.
	(svr4_traceback): Delete, current V.4 ABI no longer wants
	tracebacks in this format.
	(output_prolog): Call __eabi here, saving and restoring main's
	args if needed.  Save the toc pointer if needed.
	(get_issue_rate): New function to return # of instructions a
	machine can issue at once.
	(rs6000_sync_trampoline): Emit instructions to synchronize the
	PowerPC caches after a trampoline.
	(rs6000_trampoline_{template,size}): New functions to provide
	common trampoline support for all ABI's.
	(rs6000_initialize_trampoline): Ditto.

	* rs6000.h (TARGET_{WINDOWS_NT,AIX,MACOS}): Define.
	(processor_type): Add 602.
	(PROCESSOR_COMMON): Assume current processor is a 604, not a 601.
	(SUBTARGET_OPTIONS): Define if not defined.
	(TARGET_OPTIONS): Include SUBTARGET_OPTIONS.
	(COUNT_REGISTER_REGNUM): Define as 66.
	(EXTRA_CONTRAINT): Add 'S' and 'T' for Windows NT.
	(rs6000_abi): Add ABI_AIX_NODESC, ABI_NT.
	(DEFAULT_ABI): Define if not defined.
	(rs6000_stack): Add fields for Windows NT support.
	(RS6000_SAVE_TOC): Add for Windows NT support.
	(FUNCTION_ARG_BOUNDARY): Call function_arg_boundary.
	(trampoline macros): Call trampoline functions in rs6000.c.
	(RETURN_ADDRESS_OFFSET): Add Windows NT support.
	(toc_section): Skip leading '*'.
	(PREDICATE_CODES): Add volatile_mem_operand,
	count_register_operand.
	(MACHINE_issue_rate): Define.
	(function decls): Add new function decls from rs6000.c.

	* rs6000.md (cpu attribute): Add 602.
	(function units): Update to match reality better.
	(calls through pointer): Rework to support Windows NT.
	(movsi): Add Windows NT support.
	(movstrsi): Remove match_operand predicates, since
	expand_block_move does the checking.
	(sync_isync): Delete.
	(icbi, dcbst, sync, isync): New insns to generate named instruction
	for making trampolines on eabi/V.4 properly flush the caches.
	(decrement_and_branch_on_count): Rename from
	decrement_and_branchsi.  Add update of count in insn pattern.

	* rs6000/sysv4.h (TARGET_SWITCHES): Drop -mtraceback.  Keep
	-mno-traceback but don't do anything with it.  Add
	-mcalls-{nt,aixdesc}.  Add -m{,no-}relocatable-lib.  Add -msim,
	-mmvme, and -memb.
	(TARGET_TOC): Update for use with -mcalls-{nt,aixdesc}.
	(SUBTARGET_OVERRIDE_OPTIONS): Update for new switches.
	(RS6000_OUTPUT_BASENAME): Delete.
	(toc_section): Add support for -mcall-{nt,aixdesc}.
	(ASM_OUTPUT_SPECIAL_POOL_ENTRY_P): Ditto.
	(ASM_DECLARE_FUNCTION_NAME): Use STRIP_NAME_ENCODING instead of
	RS6000_OUTPUT_BASENAME.  For -mcall-{nt,aixdesc} emit the proper
	function descriptor.
	(ASM_SPEC): Pass appropriate -mxxx switches to the assembler based
	on the -mcpu=xxx options.
	(ASM_OUTPUT_INT): Move here from eabi.h.
	(ENCODE_SECTION_INFO): If -mcall-{nt,aixdesc} add approriate magic
	so function name has two or one leading periods.
	(ASM_OUTPUT_SOURCE_LINE): Delete, use version in svr4.h.
	(trampoline macros): Call trampoline functions in rs6000.c.

	* t-{eabi,ppc}{,gas} (EXTRA_HEADERS): Add ginclude/ppc-asm.h.
	(LIB2FUNCS_EXTRA): Depend on eabi.S, not eabi.s.
	(eabi.S): Rename from eabi.asm.

	* t-{eabi,ppc}gas (MULTILIB_*): Add -mcall-aixdesc libraries, but
	don't build either little endian or -mrelocatable versions of
	those libraries.

Tue Nov 28 00:10:27 1995  David Edelsohn  <edelsohn@mhpcc.edu>

	* rs6000.md (divsi3): Reorder so common mode does not negate
	power-of-2 shift optimization.

Wed Nov 29 22:06:11 1995  J.T. Conklin  <jtc@rtl.cygnus.com>

 	* configure (sparc-*-solaris2*): Add gcrt1.o to extra_parts.
 	* sparc/sol2.h (STARTFILE_SPEC): Link with gcrt1.o with -pg.
 	* sparc/sol2-g1.asm: New file, startup code for profiled
  	executables.
 	* sparc/t-sol2: Add make rule for gcrt1.o.
 	* sparc/gmon-sol2.c (_mcleanup): Add support for PROFDIR
 	environment variable.

Wed Nov 29 21:41:13 1995  Ian Lance Taylor  <ian@cygnus.com>

	* mips/abi64.h (CPP_SPEC): If -msingle-float and not
	-msoft-float, pass -D__mips_single_float.  Likewise for -m4650 and
	not -msoft-float.
	* mips/dec-bsd.h (CPP_SPEC): Likewise.
	* mips/dec-osf1.h (CPP_SPEC): Likewise.
	* mips/elf64.h (CPP_SPEC): Likewise.
	* mips/iris3.h (CPP_SPEC): Likewise.
	* mips/iris5.h (CPP_SPEC): Likewise.
	* mips/mips.h (CPP_SPEC): Likewise.
	* mips/netbsd.h (CPP_SPEC): Likewise.
	* mips/osfrose.h (CPP_SPEC): Likewise.
	* mips/t-ecoff (MULTILIB_OPTIONS, MULTILIB_DIRNAMES,
	MULTILIB_MATCHES): Add -msingle-float support.

Wed Nov 29 17:57:48 1995  Doug Evans  <dje@cygnus.com>

	* toplev.c (main): Invoke OPTIMIZATION_OPTIONS after target_flags
	has been initialized so sets of target_flags aren't clobbered.

	* cccp.c (do_include): Recognize c:\foo as absolute path name in DOS.

	* svr4.h (MD_EXEC_PREFIX): Don't use if cross compiling.
	(MD_STARTFILE_PREFIX): Likewise.
	(LINK_SPEC): Don't use absolute path names if cross compiling.
	* svr3.h (LIB_SPEC): Likewise.

	* gcc.c (do_spec_1): Fix typos in version calculation.

Wed Nov 29 14:06:13 1995  Jim Wilson  <wilson@cygnus.com>

	* sh.md (ashrsi3_d): Use %0 not %1 in output pattern.

	* svr4.h (MAX_OFILE_ALIGNMENT): Define.

	* mips/iris5.h (WORD_SWITCH_TAKES_ARG): Define.
	(LINK_SPEC): Add rpath.
	* mips/iris6.h (LINK_SPEC): Likewise.

	* stupid.c (stupid_mark_regs): For hard registers, use regno+j
	instead of just regno in MARK_LIVE_AFTER and SET_HARD_REG_BIT calls.

	* c-common.c (combine_strings): Add support for WCHAR_TYPE as short.

Wed Nov 29 13:59:58 1995  J"orn Rennecke (amylaar@meolyon.hanse.de)

	* c-decl.c (duplicate_decls): Add new paramter different_binding_level.
	Lots of changes to use new new parameter.
	(pushdecl): Delete variable declared_global.  New variable
	different_binding_level and code to set it.  Move extern/static
	warning before duplicate_decls call.  Don't let global typedefs
	conflict with nested extern declarations.  Move oldglobal test
	inside code for setting IDENTIFIER_LIMBO_VALUE.
	(lookup_name_current_level_global): Delete.
	* c-tree.h (merge_attributes): New declaration.
	* c-typeck.c (merge_attributes): New function.  Move code from
	common_type to here.
	(common_type): Call merge_attributes instead of having inline code.
	* integrate.c (integrate_decl_tree): Delete variable newd.
	Always set DECL_ABSTRACT_ORIGIN before calling pushdecl.

Tue Nov 28 21:57:04 1995  Jim Wilson  <wilson@cygnus.com>

	* mips.c (mips_function_value): Add check for i > 0 when deciding
	if structure should be return in FP registers.

Tue Nov 28 12:47:52 1995  Jeffrey A. Law  <law@cygnus.com>

	* pa.md (define split for (plus (reg) (large_constant)): Try
	another way to handle this with only 2 insns.  From Tege.

Mon Nov 27 02:05:18 1995  Jeffrey A. Law  <law@cygnus.com>

	* lib1funcs.asm, pa-pro.h, t-pro.h, xm-papro.h: New PA
	target files.
	* configure (hppa*-*-pro*): Use new target files.

	* toplev.c (rest_of_compilation): Always call jump_optimize
	at least once.

	* pa.h (ASM_OUTPUT_EXTERNAL): Don't let assemble_name clobber
	the value of TREE_SYMBOL_REFERENCED.

	* pa-ghpux9.h (LINK_SPEC): Pass "-z" to the linker to enable
	trap on null pointer dereference for programs built on hpux9.
	* pa-hpux9.h, pa1-ghpux9.h, pa1-hpux9.h: Likewise.

	* pa.c (output_function_prologue): No longer need to keep
	track of the total number code bytes when TARGET_GAS &&
	not TARGET_PORTABLE_RUNTIME.
	* pa.h (DBX_OUTPUT_MAIN_SOURCE_FILE_END): Use .NSUBSPA when
	not TARGET_PORTABLE_RUNTIME.
	(ASM_OUTPUT_FUNCTION_PREFIX): Define.  Prefix functions with
	.NSUBSPA when TARGET_GAS and not TARGET_PORTABLE_RUNTIME.

	* pa.md (symbolic high patterns): Use 'H' to print the symbolic
	address so that the constant part gets rounded.
	* pa.c (print_operand): Handle 'H' operand for high part of a
	symbolic address with a rounded constant.
	(output_global_address): New argument "rounded_constant".  All
	callers changed appropriately.

	* x-pa-hpux (FIXPROTO_DEFINES): Add -D_HPUX_SOURCE.

	* pa.h (CPP_SPEC): Only pass -D_HPUX_SOURCE and -D_HIUX_SOURCE if
	-ansi is not present.
	(CPP_PREDEFINES): Remove -D_HPUX_SOURCE and/or -D_HIUX_SOURCE.
	* pa-ghiux.h (CPP_PREDEFINES): Likewise.
	* pa-gux7.h (CPP_PREDEFINES): Likewise.
	* pa-hiux.h (CPP_PREDEFINES): Likewise.
	* pa-hpux.h (CPP_PREDEFINES): Likewise.
	* pa-hpux7.h (CPP_PREDEFINES): Likewise.
	* pa1-ghiux.h (CPP_PREDEFINES): Likewise.
	* pa1-hiux.h (CPP_PREDEFINES): Likewise.

	* pa-hpux.h (LINK_SPEC): If -mlinker-opt, then pass -O to the
	linker.
	* pa-ghpux.h, pa-hpux9.h, pa-ghpux9.h: Likewise.
	* pa1-ghpux9.h, pa1-hpux9.h: Likewise.
	* pa.h (LINK_SPEC): Likewise.
	(TARGET_SWITCHES): Add -mlinker-opt.

	* pa.md (all peepholes): Disable if TARGET_SOFT_FLOAT.

	* pa.c (pa_reorg): If TARGET_GAS, then emit insns to mark
	the beginning and end of the branch table.
	* pa.md (begin_brtab): New insn.  Just a marker so GCC knows
	where to put the .begin_brtab pseudo-op.
	(end_brtab): Similarly.

	* pa.h (EXTRA_SECTIONS): Add in_ctors and in_dtors if
	CTORS_SECTION_FUNCTION is defined.  Else define dummy
	versions of CTORS_SECTION_FUNCTION and DTORS_SECTION_FUNCTION.
	(EXTRA_SECTION_FUNCTIONS): Add CTORS_SECTION_FUNCTION and
	DTORS_SECTION_FUNCTION.

	* pa.md: Add peepholes to improve spill code generated
	by reload when we run out of FP registers.

	* xm-pa.h: Remove spurious double-quote.

	* pa.md (call expanders): For indirect calls, load %r22 with the
	function's address.
	(indirect call patterns): No need to copy the call address into
	%r22 anymore.

	* pa.c (output_cbranch): Fix buglet in length handling of
	backwards branches with unfilled delay slots.
	(output_bb, output_bvb, output_dbra, output_movb): Likewise.

	* pa.md: Fix off-by-one error in length computations for all
	conditional branch patterns.

	* pa.h (output_bvb): Declare.
	* pa.c (output_bvb): New function to output branch on variable
	bit insns.
	* pa.md (branch-on-variable-bit): New patterns.

	* pa.h (TARGET_MILLICODE_LONG_CALLS): Delete swtich and all
	references.
	(output_millicode_call): Declare new function
	* pa.md (millicode calls): Update length computation to handle
	variable length millicode calls.
	(call pattners): Likewise.
	(indirect call patterns): Update length compuations and output
	templates to handle variable length millicode calls.
	(plabel_dereference): Likewise.
	* pa.c (override_options): Give warnings when incompatable
	options are used.
	(output_mul_insn): Call output_millicode_call instead of
	output_call, eliminate last argument to output_millicode_call.
	(output_div_insn): Likewise.
	(output_mod_insn): Likewise.
	(output_call): Rewrite long call code to handle variable length
	millicode calls.  Eliminate support for calling mul, div and mod
	millicode routines.
	(output_millicode_call): New function for calling mul, div and mod
	millicode routines.

	* pa.md (abssi2): New pattern.

	* pa.c (secondary_reload_class): Loads from reg+d addresses into
	FP registers don't need secondary reloads.
	* pa.h: Delete soem #if 0 code.  Update some comments.
	(EXTRA_CONSTRAINT, case 'Q'): Only accept valid memory addresses.

	* pa.h (RTX_COSTS): Tege's rewrite.

	* pa.c (hppa_legitimize_address): Generate unscaled indexed
	addressing for (plus (symbol_ref) (reg)).
	(emit_move_sequence): Set REGNO_POINTER_FLAG appropriately
	to encourage unscaled indexing modes.
	(basereg_operand): New function for unscaled index address support.
	* pa.md (unscaled indexing patterns): New patterns for unscaled
	index address support.

	* pa.h (MOVE_RATIO): Define.
	* pa.md (movstrsi expander): Refine tests for when to use the
	library routine instead of an inlined loop copy.  Provide an
	additional scratch register for use in the inlined loop copy.
	(movstrsi_internal): Name the pattern for ease of use.  Add
	additional scratch register.
	* pa.c (output_block_move): Greatly simplify.  Use 2X unrolled
	copy loops to improve performance.
	(compute_movstrsi_length): Corresponding changes.

	* pa.c (print_operand): Handle 'y' case for reversed FP
	comparisons.  Delete some #if 0 code.  Fix various comment typos.
	* pa.md (fcmp patterns): Try and reverse the comparison to avoid
	useless add,tr insns.

Sun Nov 26 14:47:42 1995  Richard Kenner  <kenner@mole.gnu.ai.mit.edu>

	* Version 2.7.2 released.

	* function.c (fixup_var_refs_1): Make pseudo for DEST
	in PROMOTED_MODE unless in a SUBREG.

	* cse.c (insert): Don't put a REG into qty_const.

	* msdos/top.sed: Change version to 2.7.2.
	* winnt/config-nt.sed: Likewise.

Sun Nov 26 14:41:49 1995  Douglas Rupp  (drupp@cs.washington.edu)

	* Makefile.in (stamp-objlist): Change .o to $objext.

	* alpha/win-nt.h (CPP_PREDEFINES): Set __unaligned and __stdcall
	to null.
	(ASM_SPEC): Add a translation for -g to -Zi.
	* winnt/ld.c (main): Don't pass -g to link.
	* winnt/oldnames.c: Reformat and add some new functions for gnat1.
	* winnt/win-nt.h (LINK_SPEC): Pass -g to ld.exe.
	Increase default stack size.
	* configure ({alpha-dec,i386-ibm}-winnt3.5): Add oldnames.o
	to extra_objs.
	* libgcc2.c (trampoline): Add getpagesize and mprotect for WINNT.

Sun Nov 26 14:25:26 1995  Uwe Seimet  (seimet@chemie.uni-kl.de)

	* atari.h (FUNCTION_VALUE): Deleted; incorrect.

Sun Nov 26 14:23:03 1995  Philippe De Muyter (phdm@info.ucl.ac.be)

	* fixincludes (curses.h): Allow space or tab after bool keyword,
	instead of tab or tab.

Sun Nov 26 14:14:11 1995  Oliver Kellogg  (oliver.kellogg@space.otn.dasa.de)

	* 1750a.md (pattern for HImode PSHM): Corrected.
	(trunchiqi2, zero_extendqihi2, extendhftqf2): Corrected.
	(pattern for movhi of CONST_INT to REG): Corrected.
	(divmodqi pattern for DISN): Corrected.
	(all shift patterns): Corrected.

	* 1750a.h (REG_OK_FOR_INDEX_P, REG_OK_FOR_BASE_P): Corrected.
 	(ASM_OUTPUT_[datatype]): Corrected datalbl[].size computation
	for output of arrays.

Sun Nov 26 14:08:57 1995  Dave Love  <d.love@dl.ac.uk>

	* mips/iris5.h (NO_IMPLICIT_EXTERN_C): Define this again so
	that unistd.h doesn't get badly `fixed' for C++.  libg++ will now
	build with this definition.

Sun Nov 26 14:02:43 1995  Robert E. Brown  (brown@grettir.bibliotech.com)

	* configure: Better workaround for Nextstep bug.

Sun Nov 26 13:55:07 1995  Torbjorn Granlund  <tege@bozo.matematik.su.se>

	* rs6000.md (load_multiple matcher): Fix typo in opcode.

Sun Nov 26 13:51:08 1995  Lee Iverson  <leei@Canada.AI.SRI.COM>

	* final.c (final_start_function): Move call to sdbout_begin_function
	back to final_scan_insn on MIPS systems so parameter descriptions are
	recognized.

Sun Nov 26 13:43:06 1995  DJ Delorie  (dj@delorie.com)

	* msdos/top.sed: Don't insert "go32".

Sun Nov 26 12:08:23 1995  Jim Wilson  <wilson@chestnut.cygnus.com>

	* combine.c (nonzero_bits, case REG):  Put POINTERS_EXTEND_UNSIGNED
	code before stack pointer code.  Return nonzero at end of stack
	pointer code.

	* sparc.h (PRINT_OPERAND_ADDRESS): Handle CONST inside PLUS.

	* Makefile.in (cppalloc.o): Add a rule to build it.

	* alpha.c (alpha_emit_set_const): Don't output SImode sequences
	that rely on invisible overflow.  Sign extend new when SImode.
	Don't recur if new == c.  Don't allow shift outside mode.  Make
	logical right shift be unsigned.

Sun Nov 26 11:37:50 1995  Arne H. Juul  (arnej@idt.unit.no)

	* Makefile.in (compare*): Add "|| true" to avoid spurious
	failure messages from some versions of make.

Sun Nov 26 11:20:09 1995  Dmitry K. Butskoy  (buc@stu.spb.su)

	* expr.c (truthvalue_conversion): Add declaration.

Sun Nov 12 18:09:35 1995  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* Version 2.7.1 released.

	* function.c (put_reg_into_stack): New arg volatile_p.
	(put_var_into_stack): Call with new arg.

Sat Nov 11 08:25:34 1995  Jim Wilson  <wilson@chestnut.cygnus.com>

	* reload.c (output.h): Include it.
	* Makefile.in (reload.o): Add dependence on output.h.

Thu Nov  9 11:24:20 1995  Jim Wilson  <wilson@chestnut.cygnus.com>

	* mips.h (HARD_REGNO_NREGS): If FP_REG_P, always use UNITS_PER_FPREG
	to calculate number of words needed.

Thu Nov  9 11:04:50 1995  Oliver Kellogg  (Oliver.Kellogg@space.otn.dasa.de)

	* 1750a.md (cmphf): Addd Base Reg with Offset address mode (LB,STB,..)
	(movqi,movhi,movhf,addqi3,addhf3,subqi3,subhf3,mulqihi3): Likewise.
	(mulhf3,divhf3,andqi3,iorqi3): Likewise.
	(define_peephole): Remove the Base mode peepholes. Replace the
	special addqi define_insn for "LIM Ra,sym,Rb" by a define_peephole.
	(ashlqi3): Took out futile 0th alternative.
	(lshrqi3, lshrhi3, ashrqi3, ahsrhi3): Correct case of non-constant
	shift count.

	* 1750a.h (REG_ALLOC_ORDER): Define.
	(REGNO_OK_FOR_BASE_P): Include stack pointer in test against
	reg_renumber[REGNO].
	(ASM_OUTPUT_DESTRUCTOR): Remove bogus assembler comment.

Thu Nov  9 11:01:33 1995  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* expr.c (expand_expr, case ARRAY_REF): Properly convert types
	of index, size, and multiplication.

Wed Nov  8 09:00:22 1995  Richard Earnshaw (rearnsha@armltd.co.uk)

	* arm.md (mov*cc_{,soft_}insn): Use match_operator to test the
	comparison and check that the condition code register is used.

Wed Nov  8 08:49:35 1995  Michael Meissner  <meissner@tiktok.cygnus.com>

	* rs6000/sysv4.h (ASM_OUTPUT_{CONSTRUCTOR,DESTRUCTOR}): Undef before
	including svr4.h.

Tue Nov  7 10:58:12 1995  Torbjorn Granlund  <tege@bozo.matematik.su.se>

	* m68k.md (subxf3): Properly name pattern.

Tue Nov  7 10:53:09 1995  Michael Meissner  <meissner@tiktok.cygnus.com>

	* libgcc2.c (__{C,D}TOR_LIST): For AIX, initialize these arrays to
	0,0, just like NeXT to avoid a warning message from the AIX 4.1
	linker.

Tue Nov  7 09:58:34 1995  John F. Carr <jfc@mit.edu>

	* cppexp.c (cpp_lex): Correctly parse character constants.

Tue Nov  7 09:52:15 1995  Jason Merrill  <jason@yorick.cygnus.com>

	* rs6000.h (ASM_OUTPUT_{DES,CONS}TRUCTOR): Define.

Mon Nov  6 10:27:15 1995  Doug Evans  <dje@cygnus.com>

	* combine.c (force_to_mode): Fix typo.

Sun Nov  5 18:37:02 1995  Torbjorn Granlund  <tege@bozo.matematik.su.se>

	* m68k.md (cmpxf): Don't call force_const_mem, it looses for PIC;
	get predicates right instead.  Get rid of separate DEFINE_EXPAND.
	(addxf3, subxf3, mulxf3, divxf3): Likewise.
	(All XFmode patterns): Delete `F' and `G' constraints.
	(absxf2, negxf2): Delete spurious condition on TARGET_FPA.

Sun Nov  5 11:05:44 1995  Philippe De Muyter (phdm@info.ucl.ac.be)

	* fixincludes (malloc.h):  Fix return type of {m,re}alloc.

Sun Nov  5 11:02:26 1995  J"orn Rennecke (amylaar@meolyon.hanse.de)

        * cse.c (invalidate): For a pseudo register, do a loop to
	invalidate all table entries, irrespective of mode.

Sun Nov  5 10:57:43 1995  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>

	* combine.c (force_to_mode): Put in last change properly.

Sun Nov  5 10:53:49 1995  Jeffrey A Law  (law@cygnus.com)

	* pa.h (CONDITIONAL_REGISTER_USAGE): Make sure FP regs
	get disabled regardless of PA1.0 vs PA1.1 code generation
	when TARGET_SOFT_FLOAT or TARGET_DISABLE_FPREGS is on.

Sun Nov  5 10:49:43 1995  Doug Evans  <dje@lisa.cygnus.com>

	* i960.c (emit_move_sequence): Add a scratch register to
	multi-reg stores.
	(i960_output_move_{double,quad}): New functions.
	(i960_print_operand): Handle new operand types E, F.
	* i960.md (movdi matchers): Rewrite.
	(store_unaligned_di_reg): New pattern.
	(movti matchers): Rewrite.
	(store_unaligned_ti_reg): New pattern.

Sun Nov  5 10:45:24 1995  Ian Lance Taylor  (ian@cygnus.com)

	* mips.h (MULTILIB_DEFAULTS): Define.
	* mips/elf64.h, mips/iris6.h (MULTILIB_DEFAULTS): Define.

Sun Nov  5 10:41:48 1995  Jim Wilson  <wilson@chestnut.cygnus.com>

	* reload.c (push_reload): Delete abort for RELOAD_OTHER case added
	in last change.
	* reload1.c (emit_reload_insns): For RELOAD_OTHER output reloads,
	output the reload insns in descending order of reloads.

	* sh.md (mulsidi3-1, mulsidi3, umulsidi3-1, umulsidi3): Enable.
	(smulsi3_highpart-1, smulsi3_highpart): New patterns.
	(umulsi3_highpart-1, umulsi3_highpart): Likewise.
	(movdi-1): Add r/x constraint.
	* t-sh (MULTILIB_OPTIONS): Add m2.
	(MULTILIB_DIRNAMES): Add m2.
	(MULTILIB_MATCHES): Define.

	* sparc.h (RTX_COSTS, case MULT): Check for TARGET_SPARCLITE.

	* abi64.h, elf64.h (CPP_SPEC): Add -EB and -EL support.

Sat Nov  4 10:36:26 1995  Jim Wilson  <wilson@chestnut.cygnus.com>

	* sh.md (casesi_worker): Change constraint from = to +.

	* svr4.h (ASM_IDENTIFY_GCC_AFTER_SOURCE): Delete.
	(ASM_IDENTIFY_GCC): Output stab here.

Sat Nov  4 10:32:37 1995  John Carr  <jfc@mit.edu>

	* cpplib.c (finclude): Set current input pointer when input
	is not a regular file.

	* cppmain.c: Define progname, required by cpplib.

Sun Oct 29 07:48:36 1995  Michael Meissner  <meissner@cygnus.com>

	* xcoffout.h (DBX_FINISH_SYMBOL): Deal with names created via
	the __asm__ construct that start with a leading '*'.
	* xcoffout.c (xcoff_declare_function): Likewise.

Sun Oct 29 07:45:41 1995  Jim Wilson  <wilson@chestnut.cygnus.com>

	* stupid.c (stupid_mark_refs): Handle SUBREG of pseudo-reg in a
	SET_DEST same as we handle a pseudo-reg in a SET_DEST.

Sun Oct 29 07:43:15 1995  Pat Rankin  <rankin@eql.caltech.edu>

	* libgcc2.c (L_eh: __unwind_function): Implement for VAX.
	* vax.h (RETURN_ADDRESS_OFFSET, RETURN_ADDR_RTX): Define.

Sun Oct 29 12:39:08 1995  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>a

	* i386/sol2.h (CPP_PREDEFINES): Add -D__SVR4.

Sun Oct 29 07:14:36 1995  J"orn Rennecke (amylaar@meolyon.hanse.de)

	* reload.c (find_equiv_reg): Check for nonsaving setjmp.

Fri Oct 27 15:15:56 1995  Jim Wilson  <wilson@chestnut.cygnus.com>

	* Makefile.in (out_object_file): Depend on TREE_H.

Fri Oct 27 06:42:36 1995  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* alpha.c (call_operand): Only allow reg 27 on NT too.
	* alpha.md (call_value_nt, call_nt): Force non-SYMBOL_REF
	into reg 27, just like for OSF.

	* rs6000.c (struct asm_option): Changed from struct option.
	(expand_block_move_mem): Remove erroneously-added line.

	* expr.c (clear_storage): SIZE is now rtx, not int.
	(store_constructor): Call clear_storage with rtx.
	(get_inner_reference): Convert index to precision of
	sizetype, not POINTER_SIZE.
	(expand_expr, case ARRAY_REF): Likewise.
	* expr.h (clear_storage): Second arg is rtx, not int.

Fri Oct 27 05:45:58 1995  J"orn Rennecke (amylaar@meolyon.hanse.de)

	* combine.c (force_to_mode, case ASHIFTRT): Properly handle
	mask wider than HOST_WIDE_INT.

        * c-decl.c (pushdecl): Don't test TREE_PUBLIC when deciding whether
	to register a duplicate decl in the current block.

Thu Oct 26 21:55:39 1995  Jason Merrill  <jason@sethra.cygnus.com>

	* calls.c (expand_call): Don't trust the callee to copy a
 	TREE_ADDRESSABLE type.
	* function.c (assign_parms): Likewise.

Thu Oct 26 19:25:05 1995  Mike Stump  <mrs@cygnus.com>

	* libgcc2.c (__unwind_function): Provide a default definition for
	implementations that don't yet have a function unwinder.

Thu Oct 26 18:08:19 1995  Paul Eggert  <eggert@twinsun.com>

	* cccp.c (handle_directive): Don't treat newline as white
	space when coalescing white space around a backslash-newline.

Thu Oct 26 17:57:34 1995  Ian Lance Taylor  <ian@cygnus.com>

	* mips-tdump.c (enum st): Define st_Struct, st_Union, and st_Enum.
	(st_to_string): Handle them.
	(type_to_string): Add fdp argument; pass it to emit_aggregate.
	(print_symbol): Add fdp argument; pass it to type_to_string.
	Handle st_Struct, st_Union, and st_Enum.
	(emit_aggregate): Add fdp argument.  Handle opaque types.  Map
	through RFD entries.
	(print_file_desc): Pass FDR to print_symbol.
	(main): Pass null FDR to type_to_string.

Thu Oct 26 08:07:10 1995  Michael Meissner  <meissner@cygnus.com>

	* configure (powerpc-ibm-aix[456789]*): Use rs6000/t-newas,
	not rs6000/t-rs6000.
	(rs6000-ibm-aix3.2.[456789]*): Likewise.
	(rs6000-ibm-aix[456789]*): Likewise.

	* rs6000/t-newas: Copy from t-rs6000.
	* t-rs6000: Don't build -mcpu=common multilib variants of libgcc.a.

	* rs6000.md (load_multiple insn): If address register is among regs,
	don't load it with a lwsi instruction, which is undefined on PowerPC.

Thu Oct 26 08:01:32 1995  Jim Wilson  <wilson@chestnut.cygnus.com>

	* dwarfout.c (output_compile_unit_die): Handle language_string
	of "GNU F77".

	* reload.c (find_reloads_address): When check for out of range constant
	plus register, accept any hard register instead of just fp, ap, sp.

	* combine.c (distribute_notes): For Oct 19 change, add additional
	check to verify that place has a valid INSN_CUID.

	* sparc/t-vxsparc (LIBGCC1_TEST): Define.

	* sh.md (negdi2): Use TARGET_LITTLE_ENDIAN.

	* combine.c (force_to_mode, case ASHIFTRT): Verify mode bitsize is
	within HOST_BITS_PER_WIDE_INT before shifting by it.

	* final.c (final_scan_insn): When recur for instruction in delay slot,
	add loop around recursive call in case the instruction gets split.

Thu Oct 26 07:28:45 1995  J"orn Rennecke (amylaar@meolyon.hanse.de)

	* genrecog.c (write_tree_1): Avoid emitting '-2147483648'.

	* jump.c (duplicate_loop_exit_test): Return 0 if found
	a NOTE_INSN_LOOP_CONT.

Tue Oct 24 15:30:14 1995  Jeffrey A Law  <law@cygnus.com>

	* calls.c (expand_call): Make sure valreg is at least
	a full word.

Sun Oct 22 19:35:41 1995  Jim Wilson  <wilson@chestnut.cygnus.com>

	* sh.h (INIT_SECTION_ASM_OP): Delete.
	(HAVE_ATEXIT): Define.

Sun Oct 22 07:46:04 1995  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* libgcc2.c (__fixuns[xds]fsi): #undef MIN and MAX before #include
	of limits.h.

	* pa.c (pa_adjust_cost): Use pa_cpu, not pa_cpu_attr.

Sun Oct 22 07:38:58 1995  J"orn Rennecke (amylaar@meolyon.hanse.de)

        * alpha.h (CONST_OK_FOR_LETTER_P): Use 'U' for unsigned constants.
        * alpha.c (alpha_emit_set_const): Likewise.
        * mips.c (gen_int_relational): Likewise.

Sun Oct 22 07:14:35 1995  Douglas Rupp  (drupp@cs.washington.edu)

	* i386.c (i386_return_pops_args): Don't need a FUNDECL to
	check for type attributes in FUNTYPE.

Sat Oct 21 18:17:42 1995  Jim Wilson  <wilson@chestnut.cygnus.com>

	* sh.md (define_delay): Don't accept any instruction for an annulled
	slot, only accept those for which in_delay_slot is yes.
	* sh.c (find_barrier): When hi_const returns true, increment count_si
	by two if found_si is true.
	Always use get_attr_length to compute length of instructions.
	If count_hi or count_si out of range at end, need two PREV_INSN calls
	not one.
	When create new label, set LABEL_NUSES to 1.
	(reg_unused_after): Ifdef out code for handling labels.
	(prepare_scc_operands): New local variable mode.  Set it from
	sh_compare_op0 or sh_compare_op1.  Use it instead of SImode in
	force_reg calls.

	* optabs.c (expand_float): Emit missing barrier after unconditional
	jump.

Sat Oct 21 14:16:46 1995  Torbjorn Granlund  <tege@bozo.matematik.su.se>

	* alpha.md (cmpdf): Make conditional on TARGET_FP.

Fri Oct 20 19:11:12 1995  J"orn Rennecke (amylaar@meolyon.hanse.de)

	* combine.c (distribute_notes): Delete instructions without
	side effect that set a subreg of an unused register.

	* m68k.h (PREFERRED_RELOAD_CLASS): Check for !G constants
	for DATA_OR_FP_REGS also.

Fri Oct 20 18:57:10 1995  Ian Lance Taylor  <ian@cygnus.com>

	* genmultilib: Output negations of unused alternatives, even if
	one of the alternatives is selected.

Fri Oct 20 18:48:50 1995  Jeff Law  (law@hurl.cygnus.com)

	* integrate.c (output_inline_function): Turn on flag_no_inline
	to avoid function integration once we begin writing deferred
	output functions.

Fri Oct 20 18:46:33 1995  Michael Meissner  <meissner@wogglebug.tiac.net>

	* rs6000.c (float_conv_temp): Delete global variable.
	(stack_temps): New static array to hold stack temps.
	(offsettable_mem_operand): Delete function.
	(offsettable_addr_operand, rs6000_stack_temp): New functions.
	(output_epilog): Zero stack_temps.

	* rs6000.h (offsettable_addr_operand): Declare instead of
	offsettable_mem_operand.
	(PREDICATE_CODES): Use offsettable_addr_operand.
	(float_conv_temp): Delete variable.

	* rs6000.md (move_to_float insns): Change move_to_float so
	that it doesn't have a clobber of the memory address, and instead
	passes the stack temp's memory address as one of the unspec args.
	(fix_truncdfsi2): Use rs6000_stack_temp to allocate the temp.
	(multiply, shift insns): Fix all cases of multiply and shift insns so
	that the right mnemonics are used for -mcpu=common with both
	-m{old,new}-mnemonics.

Fri Oct 20 17:58:19 1995  Jim Wilson  <wilson@chestnut.cygnus.com>

	* expr.c (safe_from_p, case RTL_EXPR): Return 0 if RTL_EXPR_SEQUENCE
	exists.  Delete code to return 0 if exp_rtl is zero.

	* function.c (init_function_start): Don't call init_insn_lengths here.
	* toplev.c (rest_of_compilation): Call it here.

Thu Oct 19 19:19:06 1995  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* c-common.c (check_format_info): Make test for null pointer
	more general.

Thu Oct 19 18:56:16 1995  Satoshi Adachi  (adachi@wisdom.aa.ap.titech.ac.jp)

	* fixincludes (stdlib.h): Be more general in edit to change
	declaration of {c,m,re}alloc.

Thu Oct 19 18:48:53 1995  Torbjorn Granlund  <tege@bozo.matematik.su.se>

	* libgcc2.c (__udiv_w_sdiv): If we don't have sdiv_qrnnd, define
	dummy variant of __udiv_w_sdiv.

Thu Oct 19 18:45:21 1995  Jim Wilson  <wilson@chestnut.cygnus.com>

	* alpha.h (ASM_SPEC): If GNU as is the default, then pass -g to
	the assembler if -malpha-as.  If GNU as is not the default, then pass
	-g to the assembler is not -mgas.

	* combine.c (distribute_notes): When search for new place to put
	REG_DEAD note, call distribute_links if this new place is between
	i2 and i3, and i2 uses the register.

Thu Oct 19 18:41:36 1995  Michael Meissner  <meissner@cygnus.com>

	* rs6000.md (float{,uns}sidf2): Rewrite to break the conversion
	process into several general insns.
	(move_to_float): New insns to move 2 integer regs into a float register
	through memory, taking endianess into account.  Make sure that the
	floating temporary is a valid address.  Use one temporary for all
	floats converted.
	(fix_truncdfsi2): Take endianess into account.

	* rs6000.c ({low_32_bit,offsettable_mem}_operand): The function
	low_32_bit_operand is now unused, delete it.  New function
	offsettable_mem_operand to determine if a memory address is
	offsettable.
	* rs6000.h ({low_32_bit,offsettable_mem}_operand): Ditto.
	(PREDICATE_CODES): Ditto.

	* rs6000.{c,h} (float_conv_temp): New global.
	* rs6000.c (output_epilog): Zero out float_conv_temp.

	* Makefile.in (libgcc{1,2}.a): Allow LIB{1,2}FUNCS_EXTRA files to
	end in .S as well as .c and .asm.

Wed Oct 18 17:56:45 1995  Jose Alonso  (sidinf@fpsp.fapesp.br)

	* c-typeck.c (parser_build_binary_op): Warn about x^y==z, etc.

Mon Oct  9 12:38:06 1995  Michael Meissner  <meissner@cygnus.com>

	* protoize.c (reverse_def_dec_list): Silence compiler warnings.

Mon Oct  9 12:35:54 1995  Andrew Cagney  <cagney@highland.com.au>

	* ginclude/va-ppc.h (va_arg): Deal with long longs that would be
	passed in the 7th register, and are passed in the stack instead.

Fri Oct  6 13:47:10 1995  Jim Wilson  <wilson@chestnut.cygnus.com>

	* alpha.h (ASM_SPEC): Add -g.

Fri Oct  6 13:42:50 1995  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>

	* alpha.h (alpha_{arg,auto}_offset): Make extern.

Fri Oct  6 13:24:43 1995  Michael Meissner  <meissner@tiktok.cygnus.com>

	* rs6000.h (RETURN_ADDRESS_OFFSET): Correct previous change.

Fri Oct  6 13:14:43 1995  Doug Evans  <dje@canuck.cygnus.com>

	* rtlanal.c (reg_set_last): Fix call to reg_set_between_p.

Tue Oct  3 12:31:38 1995  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* stor-layout.c (layout_type, case ARRAY_TYPE): Strip MAX_EXPR
	from upper bound when computing length if it just protects against
	negative length.

	* expr.c (emit_move_insn_1): When doing multi-word move, show
	output is clobbered.

Tue Oct  3 12:26:07 1995  Jim Wilson  <wilson@chestnut.cygnus.com>

	* cse.c (set_nonvarying_address_components, case AND): Add *pend to
	end.  Add constant to start instead of subtracting it.

Tue Oct  3 12:23:28 1995  Torbjorn Granlund  <tege@bozo.matematik.su.se>

	* combine.c (simplify_rtx): In code that attempts to simplify
 	conditional expressions, if the result is an NE around another
	comparison, return the original expression.

	* longlong.h (mips umul_ppmm): Use `l' and `h' constraints;
	remove mflo and mfhi instructions.

Tue Oct  3 12:21:29 1995  Michael Meissner  <meissner@cygnus.com>

	* ginclude/va-ppc.h (va_start, stdarg case): Call
	__builtin_next_arg, and ignore the result, so that the compiler
	can report the proper error, if the second argument is not the
	last argument.

Tue Oct  3 12:02:51 1995  Kohtala Marko  <Marko.Kohtala@ntc.nokia.com>

	* function.c (assign_stack_temp): Adjust full_size field of
	temp_slot when splitting an unused slot.

Tue Oct  3 11:51:59 1995  Mike Stump  <mrs@cygnus.com>

	* expr.c (expand_builtin_return_addr): Break out functionality
	from expand_builtin.
	(expand_builtin): Call expand_builtin_return_addr.
	* rs6000.h (RETURN_ADDR_RTX): Remove call to copy_to_reg.
	Offset to return address is 4 when !TARGET_64BIT and v4_call_p,
	8 otherwise.
	* sparc.h (RETURN_ADDR_RTX): Remove call to copy_to_reg.
	* alpha.h (RETURN_ADDR_RTX): New definition.

Sun Oct  1 21:23:30 1995  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* tree.c (staticp, case INDIRECT_EXPR): Disable case.

	* expr.c (expand_expr, case COMPONENT_REF): If getting component
	of union of variable size, propagate TARGET.

Fri Sep 29 07:48:09 1995  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* expr.c (store_expr): When storing promoted value, don't return
	MEM if address contains target.

Thu Sep 28 14:30:03 1995  Paul Eggert  <eggert@twinsun.com>

	* cccp.c (rescan): Expand `#if foo && #bar' without a bogus
	complaint about preprocessor directives within macro args.
	Expand `foo' in `foo#bar' without requiring a space before `#'.

Thu Sep 28 14:24:26 1995  Philippe De Muyter (phdm@info.ucl.ac.be)

	* m68k.md (anonymous DImode shift patterns setting cc0): Turned
	off due to reload problems.

Thu Sep 28 14:05:22 1995  Niklas Hallqvist  (niklas@appli.se)

	* Makefile.in (USER_H): Move up so can override.
	(INSTALL_ASSERT_H): New definition.
	(install-headers): Use it.
	(stmp-int-hdrs): Handle USER_H being empty.
	* config/x-netbsd (INSTALL_ASSERT_H): Define as empty.

	* i386/netbsd.h (WCHAR_{TYPE,UNSIGNED,TYPE_SIZE}): Now int.
	* m68k/netbsd.h, ns32k/netbsd.h, sparc/netbsd.h: Likewise.
	* vax/netbsd.h: Likewise.
	(SIZE_TYPE): Use unsigned int.

	* m68k.c (output_scc_di): Swap operands when needed.
	* m68k.h (LEGITIMATE_PIC_OPERAND): Allow SYMBOL_REF_FLAG symref.
	* m68k.md: Make both assembler syntaxes do the same for PIC calls.

Tue Sep 26 16:51:44 1995  Michael Meissner  <meissner@tiktok.cygnus.com>

	* mips.c (override_options): Don't allow anything but integers to
	go in the HI/LO registers.

Tue Sep 26 16:36:18 1995  John F. Carr  <jfc@mit.edu>

	* c-common.c (check_format_info): Don't warn about format type
	mismatch if the argument is an ERROR_MARK.

Mon Sep 25 17:50:50 1995  Craig Burley  (burley@gnu.ai.mit.edu)

	* stor-layout.c (put_pending_sizes): New function.
	* tree.h (put_pending_sizes): Add declaration.
	* tree.c (save_expr): Return original for ERROR_MARK.

Fri Sep 22 19:20:01 1995  Jeff Law  (law@hurl.cygnus.com)

	* expr.c (expand_builtin, case BUILT_IN_MEMCPY): Strip off
	all NOP exprs from the source and destination nodes, then
	set MEM_IN_STRUCT_P.

Fri Sep 22 18:50:31 1995  Michael Meissner  <meissner@tiktok.cygnus.com>

	* rs6000/eabi.h (ASM_OUTPUT_INT): Test for whether the integer
	being output is also a constant so &sym - &sym2 is not fixed up.

Fri Sep 22 18:49:07 1995  Peter Flass  (FLASS@LBDRSCS.BITNET)

	* i370.md (cmpsi): Add missing constraints to operand 1.

Fri Sep 22 18:27:33 1995  Torbjorn Granlund  <tege@matematik.su.se>

	* i386.h (CONST_OK_FOR_LETTER_P): Make `N' match range 0..255
	for `outb' instruction.

	* pyr.h (PRINT_OPERAND): Handle code `R' for REG.
        * longlong.h (pyr umul_ppmm): Use it.

Fri Sep 22 18:24:38 1995  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* c-parse.in (enumlist): Propagate error_mark_node.

	* c-aux-info.c (gen_type): Handle ERROR_MARK.

	* alpha.md (movdi): Avoid memory sharing problem when in reload.

Wed Sep 20 14:27:09 1995  Peter Flass <flass@lbdrscs.bitnet>

        * mvs.h (FUNCTION_PROLOGUE): Maintain savearea forward chain
	per MVS standards.

Wed Sep 20 14:20:52 1995  Torbjorn Granlund  <tege@matematik.su.se>

        * pyr.md (cmphi recognizer): Make condition match constraints.
	(cmpqi recognizer): Likewise.

Wed Sep 20 12:42:59 1995  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* integrate.c (expand_inline_function): Do copy something setting
	the result register if it is setting it to itself and has a REG_NOTE.

	* integrate.c (set_decl_{origin_self,abstract_flags}): Treat
	a DECL_INITIAL of error_mark_node the same as one of NULL_TREE.

Tue Sep 19 19:30:18 1995  Dave Pitts  (dpitts@nyx.cs.du.edu)

	* i370.md (cmphi, movhi, movstricthi, extendhisi2): Correct generation
	of short integer (Halfword)
	({add,sub,mul,and,ior,xor}hi3): Likewise.
	* i370/mvs.h (MACROPROLOGUE): New macro.
	(FUNCTION_{PRO,EPI}LOGUE): Added ability to use IBM supplied function
	prologue macros.
	(FUNCTION_PROLOGUE): Corrected function "in-line" prologue alignment
	problems.
	(ASM_DECLARE_FUNCTION_NAME): Changed alignment to FullWord.
	(ASM_OUTPUT_{SHORT,ASCII}): Reworked.

Tue Sep 19 19:22:15 1995  Douglas Rupp  (drupp@cs.washington.edu)

	* winnt/win-nt.h: Renamed from winnt/win-nt.h.
	(LINK_SPEC): Add -noinhibit-exec.
	* {alpha,i386}/win-nt.h: Renamed from {alpha,i386}/winnt.h.
	Include winnt/win-nt.h, not winnt/winnt.h.
	* winnt/oldnames.c: New file.
	* winnt/headers.mak (fixinc-nt.obj): Fix typo.
	* winnt/config-nt.bat: Change winnt.h to win-nt.h.
	* i386/config-nt.sed: Likewise.
	* configure ({alpha,i386}-*-winnt3*): Likewise.

Mon Sep 18 14:00:45 1995  Oliver Kellogg  (Oliver.Kellogg@space.otn.dasa.de)

	* 1750a.h (enum reg_class, REG_CLASS_NAMES, REG_CLASS_CONTENTS):
	Added R2 and R0_1.
	(REG_CLASS_FROM_LETTER): New letters 't' and 'z'.
	(EXTRA_CONSTRAINT): New letter 'Q'.

Sun Sep 17 12:39:22 1995  Jeff Law  (law@snake.cs.utah.edu)

	* pa.h (ASM_DECLARE_FUNCTION_NAME): If a parameter's type
	has TYPE_NEEDS_CONSTRUCTING on, then it's passed by invisible
	reference.

Sat Sep 16 17:42:33 1995  Jim Wilson  <wilson@chestnut.cygnus.com>

	* loop.c (find_and_verify_loops): Fix error in last change.

Sat Sep 16 08:38:22 1995  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* alpha.h (GO_IF_LEGITIMATE_ADDRESS): Disallow SYMBOL_REF for
	current function.

	* cse.c (recorded_label_ref): New variable.
	(insert): Set instead of cse_jumps_altered.
	(cse_main): Initialize it and return 1 if nonzero at end.

Fri Sep 15 18:26:49 1995  Torbjorn Granlund  (tege@matematik.su.se)

	* fold-const (div_and_round_double): Change `carry', `quo_est',
	and `scale' from plain int to `unsigned HOST_WIDE_INT'.

Fri Sep 15 18:24:24 1995  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* cse.c (insert): Set cse_jumps_altered when inserting a LABEL_REF.

Fri Sep 15 17:29:41 1995  Oliver Kellogg  (Oliver.Kellogg@space.otn.dasa.de)

	* 1750a.c (b_mode_operand): New function.
	(print_operand): Added code 'Q'.

Fri Sep 15 17:27:23 1995  Jim Wilson  <wilson@chestnut.cygnus.com>

	* loop.c (find_and_verify_loops): When moving exit blocks out of
	the loop, verify that the target of P is within the current loop.

	* reorg.c (fill_slots_from_thread): Update thread if it is split.

Fri Sep 15 17:06:51 1995  Michael Meissner  <meissner@cygnus.com>

	* rs6000.md (decrement_and_branchsi and related insns): Don't use
	a "2" to select a register preference for operand 1 if operand 2
	hasn't been seen yet.
	Add appropriate clobbers in decrement_and_branchsi.
	Add patterns where the pc/label_ref are interchanged.

	* Makefile.in (gnucompare, stmp-multilib-sub): Remove extra . in
	front of $(objext).

	* rs6000.c (output_toc): Align DF constants if STRICT_ALIGNMENT.

	* config/fp-bit.c (FLO_union_type): Add words field if double
	precision to get at the separate words.
  	(FLO_union_type, pack_d, unpack_d): Use FLOAT_BIT_ORDER_MISMATCH
	to determine when the bitfields need to be reversed, and
	FLOAT_WORD_ORDER_MISMATCH when the words need to be reversed.

Fri Sep 15 16:41:43 1995  Jeff Law  (law@snake.cs.utah.edu)

	* reorg.c (fill_simple_delay_slots): When filling insn's delay slot
	with JUMP_INSN, don't assume it immediately follows insn on
	unfilled slots obstack.

	* Makefile.in (caller-save.o): Depend on insn-codes.h.

Thu Sep 14 17:41:49 1995  Jim Meyering  (meyering@comco.com)

	* protoize.c (do_cleaning): Don't blank out backslash-escaped
	newlines in double quoted strings.

Thu Sep 14 16:20:35 1995  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* emit-rtl.c (gen_lowpart): If gen_lowpart_common fails
	for a REG, load it into a pseudo and try again.

Thu Sep 14 14:15:16 1995  Stan Cox  (coxs@dg-rtp.dg.com)

	* m88k.h (VERSION_INFO1): Removed BCS reference.
	* m88k/dgux.h (ASM_SPEC, *_LEGEND):
	Added -mno-legend option. -mstandard no longer implies that legend
	legend information not be produced.
	(LINK_SPEC): Removed -z text

Tue Sep 12 19:05:39 1995  Jim Wilson  <wilson@chestnut.cygnus.com>

	* cccp.c (is_system_include): Call skip_redundant_dir_prefix.

Tue Sep 12 18:58:21 1995  John Carr  <jfc@mit.edu>

	* sparc.md: Change `*return "string"' to "string" in patterns.

Tue Sep 12 18:48:47 1995  Craig Burley  (burley@gnu.ai.mit.edu)

	* function.c (put_var_into_stack): For CONCAT case, order of
	placement depends on FRAME_GROWS_DOWNWARD, not STACK_GROWS_DOWNWARD.

Tue Sep 12 18:34:10 1995  Doug Evans  <dje@canuck.cygnus.com>

	* va-sparc.h (v9 varargs va_start): Handle __builtin_va_alist
	being stack argument.

	* sparc.h (STATIC_CHAIN_REGNUM): Use %g5 for sparc64.
	(TRAMPOLINE_TEMPLATE): Rewrite for sparc64.
	(TRAMPOLINE_SIZE): Is 40 for sparc64.
	* sparc.c (sparc64_initialize_trampoline): Rewrite.

Tue Sep 12 18:30:22 1995  Douglas Rupp  (drupp@cs.washington.edu)

	* cp/Make-lang.in (cc1plus) : Removed unnecessary $(exeext).

	* configure: Added code to handle gcc_extra_objs.
	(alpha-winnt): Changed xmake_file to winnt/x-winnt.
	Added extra_gcc_objs=spawnv.o; changed extra_programs to ld.exe.
	(i386-winnt): Changed xmake_file to winnt/x-winnt.
	Added extra_gcc_objs=spawnv.o; changed extra_programs to ld.exe.
	* configure.bat: Changed to used common winnt/config-nt.bat.
	* Makefile.in: Changed various .o's to .$(objext)'s
	(specs): Removed unnecessary $(exeext).
	(EXTRA_GCC_OBJS): New variable.
	(clean): Removed $(LIB2FUNCS_EXTRA)
	* objc/Makefile: Changed archive command for libobjc.a to use $?
	for objects.

	* alpha/x-winnt, i386/x-winnt: Deleted.
	* alpha/config-nt.bat, i386/config-nt.bat: Deleted.
	* alpha/config-nt.sed, i386/config-nt.sed: Moved architecture
	independent commands to config/winnt/config-nt.sed.
	* alpha/winnt.h: Added -D_M_ALPHA to CPP_PREDEFINES.
	Changed LIB_SPEC to be compatible with Gnu ld for NT.
	* i386/winnt.h: Added -D_cdecl=__attribute__((__cdecl__)).
	Change LIB_SPEC to be compatible with Gnu ld for NT.
	* winnt/config-nt.bat, winnt/config-nt.sed: New files.
	* winnt/dirent.{c,h}, winnt/fixinc-nt.c, winnt/headers.mak: New files.
	* winnt/ld.c: Changed precedence of libraries to look for
	libfoo.lib before libfoo.a
	Changed to work like Gnu ld for NT.
	* winnt/libgcc.mak, winnt/mklibgcc.c: New files.
	* winnt/spawnv.c: Changed spawn function entry points to __spawn*
	instead of spawn*.
	* winnt/x-winnt: New file.
	* fixinc-nt.sed: New file.
	* fixinc.winnt: Rewritten to use fixinc-nt.sed.

	* gcc.c: Remove fix_argv kludge.

Tue Sep 12 13:24:17 1995  Michael Meissner  <meissner@tiktok.cygnus.com>

	* rs6000.md (power subdi3 pattern): Fix pattern to have 5
	alternatives, and correct 4th alternative to match reality.

	* rs6000.md (adddi3, subdi3, negdi2): Add constraints so output reg
	does not overlap one reg with one of the inputs.

Tue Sep 12 13:09:48 1995  Philippe De Muyter (phdm@info.ucl.ac.be)

	* m68k.c (output_scc_di): Fixed for non-SGS_CMP_ORDER syntax.

	* collect2.c (scan_libraries): Cast lsyms' alloca to LDSYM*.

Tue Sep 12 13:04:12 1995  Niklas Hallqvist  (niklas@appli.se)

	* stmt.c (expand_start_stmt_expr): Do stack adjust in right place.

	* stdarg.h (__gnuc_va_list): Make char * for NetBSD.

Tue Sep 12 12:44:46 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* ginclude/va-ppc.h (va_arg): Reorganize to avoid BIND_EXPRs of
 	aggregate or array type.

Tue Sep 12 12:42:27 1995  Ian Lance Taylor  <ian@cygnus.com>

	* fixincludes: Fix HP/UX <sys/file.h> for g++ -pedantic-errors.

	* fixincludes (curses.h): typedef bool need not take up entire line.

Mon Sep 11 19:05:42 1995  Stan Cox  (coxs@dg-rtp.dg.com)

	* c-typeck.c (digest_init): Don't recursively call digest_init
	when in traditional mode if the type is invalid.

Mon Sep 11 18:58:26 1995  Oliver Kellogg  (Oliver.Kellogg@space.otn.dasa.de)

	* 1750a.md: Added DLB/DSTB peepholes for HFmode.
	Corrected mnemonics for HImode DSTB peephole.

Mon Sep 11 18:48:06 1995  Michael Meissner  <meissner@tiktok.cygnus.com>

	* config/fp-bit.c (FLO_union_type): Remove bitfields to set sign,
	exponent, and mantissa, and add value_raw field, which is an
	integer of the appropriate type.  If _DEBUG_BITFLOAT is defined,
	provide little and big endian bitfields.  If the macro
	FLOAT_BIT_ORDER_MISMATCH is defined, use explicit bitfields.
	(pack_d, unpack_d): Switch to use value_raw and explicit shifts
	and masks so that we don't have to worry about whether the target
	is big or little endian unless FLOAT_BIT_ORDER_MISMATCH is
	defined.  If single precision floating point, rename to pack_f and
	unpack_f, so there is no confusion in the debugger.

	* rs6000.h (rs6000_abi): New enumeration to describe which
	ABI we're conforming to.
	(rs6000_stack): Use abi enum, not AIX vs. V.4 boolean.
	(ASM_OUTPUT_OPTIONS): New macro to print output options in .s file.
	(ASM_FILE_START): Use it.
	(output_options,rs6000_float_const): Declare new functions.

	* rs6000.c (output_option{,s}): New functions to write -f, -m,
	and -W options to the asm file.
	(rs6000_float_const): New function to generate floating point
	constants portably used in signed,unsigned -> double conversions.
	(rs6000_stack_info,debug_stack_info): Use ABI enumeration instead
	of AIX vs. V.4 boolean.

	* rs6000.md (float{,uns}sidf2): Call rs6000_float_const to
	portably build the proper floating point constant for conversions.
	(movdi): Properly handle movdi of CONST_{INT,DOUBLE} on little
	endian systems.

	* rs6000/sysv4.h (LIBGCC2_WORDS_BIG_ENDIAN): Define to be 0/1
	depending on the target endianess.
	(ASM_FILE_START): Define, to call output_options in addition to
	output_file_directive.
	(TRAMPOLINE_SIZE): Correct size to match code.

	* rs6000/eabi{,le}sim.h (CPP_SPEC): Define the correct endian
	macro for varargs/stdargs use.

Mon Sep 11 18:41:58 1995  Jim Wilson  <wilson@chestnut.cygnus.com>

	* c-decl.c (redeclaration_error_message): For TYPE_DECLs, return 0
	if TYPE_MAIN_VARIANT of old type is same as new type.

Mon Sep 11 17:39:35 1995  Rob Ryan (robr@cmu.edu)

	* xcoffout.c (xcoff_inlining): New variable, used in place of
	xcoff_current_include_file when determining whether to use
	absolute line numbers.
	(xcoffout_source_file): Switched to using xcoff_inlining to
	determine when to emit .bi/.ei directives.

Mon Sep 11 16:55:06 1995  Torbjorn Granlund  <tege@matematik.su.se>

	* m68k.md (cmpdi): Change patterns to allocate scratch register at
	RTL generation time.
	(tstdi): Likewise.

Sun Sep  3 09:03:50 1995  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* fold-const.c (size_binop): Don't pass 1 to NOTRUNC.

Thu Aug 31 19:27:00 1995  Roland McGrath  <roland@churchy.gnu.ai.mit.edu>

	* libgcc2.c: Include longlong.h.
	[L_udivdi3 || L_divdi3 || L_umoddi3 || L_moddi3] (__udivmoddi4):
	Define this `static inline' when defining these, so they all
	remain leaf functions.

Thu Aug 31 18:38:21 1995  Paul Eggert  <eggert@twinsun.com>

	* c-parse.in (ends_in_label): New %union member.
	(stmts, stmt_or_label): Use new member to avoid lexical lookahead hack.
	(lineno_stmt_or_labels): New rule.
	(lineno_stmt_or_label, stmt_or_label): Yield nonzero if it ends
	in a label.

Thu Aug 31 08:31:40 1995  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* cse.c (canon_hash, CONST_DOUBLE): Hash integer and real
	differently.
	* varasm.c (struct rtx_const): Add new field DI to union.
	(decode_rtx_const, case CONST_DOUBLE): Use to hash CONST_DOUBLE
	representing an integer.

	* va-alpha.h (__gnuc_va_list): Make __offset an int.
	* alpha.c (alpha_builtin_saveregs): Properly compute address
	of __offset both both OSF and WINNT.

	* xm-alpha.h (sbrk): Don't define here.
	* gmon.c (sbrk): Define here for __alpha.
	* toplev.c (sbrk): Likewise.
	* mips-tfile.c (malloc, calloc, realloc): Don't define for anybody.

	* reload.c (push_reload): Add case for output reload of a SUBREG
	of a hard reg when output mode is invalid for that mode.
	In both that case and existing case for in, don't remove SUBREG.
	* reload1.c (emit_reload_insns): Emit RELOAD_OTHER output reloads last.

Tue Aug 29 19:16:06 1995  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* c-common.c (decl_attribute, case A_PACKED): Check is_type first.
	(decl_attribute, case A_T_UNION): Likewise.
	Don't access TYPE_FIELDS if DECL is zero.
	* c-decl.c (finish_struct): If transparent_union attribute
	specified, validate it once we finish laying the union out.

Mon Aug 28 05:58:03 1995  Paul Eggert  <eggert@twinsun.com>

	* arm.c (arm_gen_movstrqi): Remove unused variable const_sxteen.

	* bi-lexer.c (buffer, inpoint): Remove unused variables.

	* i370/mvs.h, i370/mvs370.c (mvs_label_emitted): Renamed
	from mvs_label_emited.

	* msdos/configur.bat: Fix misspelling of `maintainer-clean'.

Sat Aug 26 06:57:17 1995  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* reload.c (push_secondary_reload): If X is a paradoxical SUBREG,
	get mode and thing to reload from inside.
	* reload1.c (emit_reload_insns): Do nothing for SUBREG whose
	operand is unused subsequently.
	In secondary reload case, if paradoxical SUBREG for output, reload
	thing inside SUBREG, just like gen_reload.

Fri Aug 25 19:26:53 1995  Paul Eggert  <eggert@twinsun.com>

	* c-typeck.c (set_init_label): Don't die if an entire
	brace-pair level is superfluous in the containing level.

Fri Aug 25 19:22:46 1995  Michael Meissner  <meissner@tiktok.cygnus.com>

	* configure (powerpc{,le}-eabisim): Add support for a new target
	that works under the PSIM simulator.
	* rs6000/eabisim.h, rs6000/eabilesim.h, rs6000/t-eabisim: New files.

	* rs6000/eabi.h (STRICT_ALIGNMENT): If little endian, always set
	strict alignment to 1.

Fri Aug 25 19:22:23 1995  David Edelsohn  <edelsohn@mhpcc.edu>

	* rs6000.md ({add,sub,mulsi}di3): Support both endian possibilities.
	(negdi2): Likewise.

Fri Aug 25 19:10:41 1995  Oliver Kellogg  (Oliver.Kellogg@space.otn.dasa.de)

	* 1750a.md: Added peephole definitions for Load/Store Base insns
	and eliminating redundant load in an equivalent store/load sequence.

Fri Aug 25 18:33:27 1995  Craig Burley  (burley@gnu.ai.mit.edu)

	* toplev.c (report_error_function): Don't attempt to use input
	file stack to identify nesting of #include's if file name oflocation
	diagnosed is not same as input_filename.

Fri Aug 25 07:31:47 1995  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* integrate.c (output_inline_function): Switch to function obstack.

Mon Aug 21 13:29:54 1995  J"orn Rennecke (amylaar@meolyon.hanse.de)

	* i386.c (arithmetic_comparison_operator): New function.
	(print_operand): Take into account that overflow flag is not
	set the same as after a compare instruction.
	* i386.md (decrement_and_branch_until_zero): Use
	arithmetic_comparison_operator to decide if there is comparison
	suitable to be expressed by condition code from an arithmetic op.

Mon Aug 21 13:26:13 1995  Philippe De Muyter (phdm@info.ucl.ac.be)

	* m68k.md (adddi3, subdi3): "&" added to clobber's constraints.

Mon Aug 21 12:11:14 1995  Jim Wilson  <wilson@chestnut.cygnus.com>

	* t-sparclite (MULTILIB_*, LIBGCC, INSTALL_LIBGCC): Define.

	* sh.md (movdi-1, movdf-1): Make conditional on reload_completed,
	delete conditions checking for pseudo registers and Q addresses.
	Add code to handle SUBREG.

	* local-alloc.c (wipe_dead_reg): Make a register mentioned in a
	REG_INC note die after the instruction.

	* m68k.md: For all dbra pattern, change constraint from 'g' to 'd*g'.

	* Makefile.in: (underscore.c): Rename rule to stamp-under, and
	touch stamp-under at the end.  Add new rule for underscore.c that
	depends on stamp-under.

	* sh.c (reg_unused_after): For a SEQUENCE, make sure all insns are
	safe before returning 1.

	* sh.h (PROMOTE_FUNCTION_ARGS, PROMOTE_FUNCTION_RETURN): Define.

	* sh.c (output_stack_adjust): Add new argument reg.  Use it instead
	of stack_pointer_rtx.
	(sh_expand_prologue, sh_expand_epilogue): Pass new argument to
	output_stack_adjust.

Sat Aug 19 17:34:15 1995  Jim Wilson  <wilson@phydeaux.cygnus.com>

	* sparc/gmon-sol2.c (_mcount): Define.
	* sparc/sol2.h (STARTFILE_SPEC, ENDFILE_SPEC): Delete superfluous
	-pg tests.
	(LINK_SPEC): Add libp directories to -Y when -pg.

	* unroll.c (calculate_giv_inc): Handle increment computed by ASHIFT.

Sat Aug 19 17:28:56 1995  Philippe De Muyter (phdm@info.ucl.ac.be)

	* m68k.md (subdi3): Should not be commutative.
	(one_cmpldi2): Fixed typo with register operand.

Sat Aug 19 17:20:43 1995  Michael Meissner  <meissner@cygnus.com>

	* rs6000.c (output_prolog): Fixup code to set stack pointer
	if stack size > 32k.
	* rs6000.md (sync_isync): Renamed from sync; added an isync insn
	after the sync to properly deal with PowerPC's with split I/D caches.
	* sysv4.h (INITIALIZE_TRAMPOLINE): Sync function now named sync_isync.

Sat Aug 19 17:07:09 1995  Doug Evans  <dje@canuck.cygnus.com>

	* h8300.h (STATIC_CHAIN_REGNUM): Use r3.
	(REGISTER_NAMES): Print r7 as sp.
	(ADDITIONAL_REGISTER_NAMES): Recognize r7.
	(ASM_OUTPUT_ALIGN): Alignment is power of 2.
	* h8300.md (fancy_btst,fancy_btst1): Branch target must be
	operand 0 for length attribute to work.

Sat Aug 19 16:43:11 1995  Paul Franklin  <paul@cs.washington.edu>

	* assert.h: Declare __eprintf with attribute noreturn.

Sat Aug 19 16:40:12 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* stddef.h: Don't define wchar_t if __cplusplus is defined.

Tue Aug 15 18:01:01 1995  Paul Eggert  <eggert@twinsun.com>

	* cccp.c (warning_with_line): Fix typo in declaration when
	!HAVE_VPRINTF and defined (__STDC__).

Tue Aug 15 17:57:54 1995  Stephen L Moshier <moshier@world.std.com>

	* real.c (ediv, emul): Set sign bit of IEEE -0.0 result.

Tue Aug 15 17:49:47 1995  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* expr.c (safe_from_p): Only safe if EXP is variable-size and X
	is BLKmode.

	* stmt.c (fixup_gotos): When some fixups done, reset to point
	to next instead of zeroing TREE_VALUE, which may be shared.

Mon Aug 14 09:15:45 1995  Doug Evans  <dje@canuck.cygnus.com>

	* m68k/m68kemb.h (STARTFILE_SPEC): Define as empty.

Mon Aug 14 09:08:57 1995  Pat Rankin  <rankin@eql.caltech.edu>

	* vax.c (vms_check_external): Update `pending_head' properly
	when the first list element is removed.

Mon Aug 14 09:01:32 1995  Jeffrey A. Law  <law@adder.cygnus.com>

	* pa.md (call expanders): Emit a blockage insn after restoring
	%r19 when generating PIC.

Sun Aug 13 21:58:49 1995  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* toplev.c (main): Change text of unsupported -g option warning.

Sun Aug 13 21:47:57 1995  Andrew McCallum  <mccallum@graphite.cs.rochester.edu>

	* objc/selector.c (sel_get_any_typed_uid): New function.
	* objc/objc-api.h (sel_get_any_typed_uid): Declare new function.

Sun Aug 13 21:43:17 1995  John Carr  <jfc@mit.edu>

	* c-typeck.c (c_expand_asm_operands): Check for read-only output
	operand where the variable is read-only but the type is not.

Sun Aug 13 21:16:12 1995  David Edelsohn  <edelsohn@mhpcc.edu>

	* rs6000.c (direct_return): Epilogue required if CR saved.

Sun Aug 13 19:09:25 1995  Jeff Law  (law@snake.cs.utah.edu)

	* configure (hppa1.?-hp-hpux10): Recognize and treat just like hpux9.

Sun Aug 13 19:07:23 1995  Doug Evans  <dje@canuck.cygnus.com>

	* i960.md (movdi matchers): Fix src/dest order in unaligned
	reg->reg case.

Sun Aug 13 18:49:01 1995  DJ Delorie  <dj@delorie.com>

	* i386/xm-dos.h (HAVE_STRERROR): New definition.

	* msdos/configur.bat: Add missing carriage return.

Sun Aug 13 18:40:55 1995  Andrew Cagney  <cagney@highland.com.au>

	* Makefile.in (USER_H): Add va-ppc.h.

Sun Aug 13 18:36:17 1995  M. Warner Losh  <imp@village.org>

	* stmt.c (expand_asm_operands): Type '0'..'4' operands may
	allow regs, so move them to the default case.

Sun Aug 13 18:32:35 1995  Paul Eggert  <eggert@twinsun.com>

	* cccp.c (warning_with_line): New function.
	(trigraph_pcp): Use it, to avoid reporting line number.
	(vwarning_with_line): Don't report line number if zero.

Sun Aug 13 18:23:08 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* toplev.c (vmessage): Support four arguments.

Sun Aug 13 18:19:51 1995  Michael Meissner  <meissner@cygnus.com>

	* ginclude/stdarg.h: Add ppc svr4 calling sequence support.
	* ginclude/varargs.h: Likewise.
	* ginclude/va-ppc.h: New file.

Sun Aug 13 18:05:20 1995  Michael Gschwind  <mike@donoussa.vlsivie.tuwien.ac.at>

	* configure (pdp-*-*): Add support for t-pdp11.
	* t-pdp11: New file.
	* Makefile.in (LIBGCC2_CFLAGS): Add TARGET_LIBGCC2_CFLAGS.

Sun Aug 13 14:50:58 1995  Jim Wilson  <wilson@chestnut.cygnus.com>

	* final.c (final_start_function): Always call sdbout_begin_function
	and xcoffout_begin_function, even if no line number info.

	* mips/abi64.h (SETUP_INCOMING_VARARGS): In if statement, only
	subtract one for stdarg.  Don't subtract PRETEND_SIZE from
	argument pointer when calculating stack address.
	* mips.h (INITIAL_ELIMINATION_OFFSET): For 64 bit ABI, subtract
	current_function_pretend_args_size when converting from argument
	pointer.
	* va-mips.h (va_start): For stdarg, delete separate define for
	64 bit ABI.  For varargs, don't subtract 64, and only add -8 when
	all argument registers are used.

	* gcc.c (main): When concat gcc_exec_prefix and
	standard_startfile_prefix, put machine_suffix in the middle.

	* iris6.h (INIT_SECTION_ASM_OP): Don't define.
	(LD_INIT_SWITCH, LD_FINI_SWITCH, HAS_INIT_SECTION): Don't undef.
	(ASM_OUTPUT_CONSTRUCTOR, ASM_OUTPUT_DESTRUCTOR): Ifdef out.
	* configure (mips-sgi-irix6, mips-sgi-irix5cross64): Define
	use_collect2 to yes.

	* combine.c (move_deaths): When have a multi-reg hard register,
	if don't find a note, then recur for each individual hard register.

	* cse.c (set_nonvarying_address_components): Handle addresses
	which are the sum of two constant pseudo regs.
	(cse_rtx_addr_varies_p): Likewise.

	* Makefile.in (gfloat.h): Add a - before the rm command.

	* loop.c (find_and_verify_loops): Set dest_loop only if
	JUMP_LABEL (insn) is non-zero.

Mon Jul 31 14:31:53 1995  Ian Lance Taylor  <ian@cygnus.com>

	* fixincludes: Avoid clobbering VxWorks drv/netif/if_med.h file.

Sat Jul 29 16:21:42 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* collect2.c: (XCOFF_SCAN_LIBS): Define if OBJECT_FORMAT_COFF and
	XCOFF_DEBUGGING_FORMAT.
	(SCAN_LIBRARIES): Also define if XCOFF_SCAN_LIBS.

Sat Jul 29 16:19:42 1995  Stuart D. Gathman  <stuart@bmsi.com>

	* collect2.c (scan_libraries): Implement for AIX.

Sat Jul 29 09:59:33 1995  Michael Gschwind  <mike@lanai.vlsivie.tuwien.ac.at>

	* configure: (pdp11-*-bsd) New target.
	* 2bsd.h: New file.

	* pdp11.c (output_move_double): Handle CONST_INT parameters properly.
	* pdp11.h (RTX_COSTS): Fill in missing default values.
	* pdp11.md (truncdfsf2, extendsfdf2, floatsidf2, fix_truncdfsi2):
	Allow register parameters, required by gcc to generate correct code.
	* xm-pdp11.h: Include tm.h.

Sat Jul 29 09:55:17 1995  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* configure (m68k-*-linux*aout*, m68k-*-linux*): New targets.
	* m68k/linux-aout.h, m68k/linux.h, m68k/t-linux, m68k/xm-linux.h: New.
	* m68k.md [USE_GAS]: Output `jbsr' instead of `jsr' for normal
	function calls and `bsr.l' instead of `bsr' for pic function calls.

Sat Jul 29 09:44:13 1995  Jim Wilson  <wilson@chestnut.cygnus.com>

	* sh.h (CAN_DEBUG_WITHOUT_FP): Comment out.

	* reload.c (find_reloads_address_1, case PLUS): When handle SUBREG,
	add SUBREG_WORD offset to SUBREG_REG register number.
	(find_reloads_address_1, case SUBREG): If a pseudo register inside
	a SUBREG is larger than the class, then reload the entire SUBREG.
	* sh.h (SUBREG_OK_FOR_INDEX_P): New macro.
	(INDEX_REGISTER_RTX_P): Use it.

Sat Jul 29 09:33:19 1995  Doug Evans  <dje@canuck.cygnus.com>

	* mips/netbsd.h (CPP_SPEC): Fix typo.

	* configure (a29k-*-vxworks*): Define extra_parts for crt{begin,end}.o.
	* t-a29k, t-a29kbase, t-vx29k ({,CROSS_}LIBGCC1): Define as empty.

Sat Jul 29 09:15:17 1995  Jeffrey A. Law  <law@rtl.cygnus.com>

	* pa/lib2funcs.asm (gcc_plt_call): Rewrite to avoid the need
	for being called by _sr4export.  Inline expand $$dyncall to
 	avoid the need for long-call and PIC support.

Sat Jul 29 07:30:04 1995  Oliver Kellogg  (Oliver.Kellogg@space.otn.dasa.de)

	* ms1750.inc (ucim.m, ucr.m, uc.m): New.
	* 1750a.md (cmpqi): Account for unsigned comparisons.
	(rotrqi3, rotrhi3): Reworked.
	* 1750a.c (notice_update_cc): INCM and DECM set condition codes.
	(unsigned_comparison_operator, next_cc_user_is_unsigned): New fcns.
	* 1750a.h (FUNCTION_EPILOGUE): Local variables freed from SP, not FP.
	(ASM_OUTPUT_BYTE): Make distinct from ASM_OUTPUT_CHAR.
	(ASM_OUTPUT_CONSTRUCTOR): Add FILE arg to assemble_name.

Fri Jul 28 09:40:07 1995  Jeffrey A. Law  <law@rtl.cygnus.com>

        * pa.h (DO_GLOBAL_DTORS_BODY): Use an asm statement to keep optimizer
	from deleting an assignment it believes dead.

Fri Jul 28 08:47:51 1995  Jim Wilson  <wilson@chestnut.cygnus.com>

	* unroll.c (unroll_loop): When preconditioning, output code to
	execute loop once if initial value is greater than or equal to final
	value.

	* configure (lang_specs_files, lang_options_files): Add $srcdir to
	file names when adding them to these variables.

	* c-typeck.c (pointer_int_sum): Don't distribute if intop is unsigned
	and not the same size as ptrop.

	* function.c (assign_stack_temp): When split a slot, set base_offset
	and full_size in the newly created slot.
	(combine_temp_slots): Update full_size when slots are combined.

	* sh.c (reg_unused_after): New function.
	* sh.md (define_peephole): Add peepholes to use r0+rN addressing mode
	for some address reloads.

	* final.c (final_start_function): If SDB_DEBUG, call
	sdbout_begin_function.  If XCOFF_DEBUG, call xcoffout_begin_function
	instead of xcoffout_output_first_source_line.
	(final_scan_insn): Don't call sdbout_begin_function or
	xcoffout_begin_function.
	* xcoffout.c (xcoffout_output_first_source_line): Delete.
	(xcoffout_begin_function): Call dbxout_parms and
	ASM_OUTPUT_SOURCE_LINE.

	* va-mips.h: Change every occurance of #if __mips>=3 to
	#ifdef __mips64.
	* mips/abi64.h (CPP_SPEC): Output -D__mips64 when -mips3, or -mips4,
	or -mgp64.  Output -U__mips64 when -mgp32.
	* mips/dec-bsd.h, mips/elf64.h, mips/iris3.h: Likewise.
	* mips/iris5.h, mips/mips.h, mips/netbsd.h, mips/osfrose.h: Likewise.

	* i960.c (i960_function_epilogue): Don't clear g14 for functions with
	an argument block.
	(i960_output_reg_insn): Likewise.
	(i960_output_call_insn): Clear g14 for functions wtih an argument
	block.

Fri Jul 28 08:43:52 1995  Doug Evans  <dje@canuck.cygnus.com>

	* i960.c (i960_arg_size_and_align): Correct alignment of XFmode
	values in library calls.
	* i960.md (movdi matchers): Support odd numbered regs.

Fri Jul 28 08:37:25 1995  Michael Gschwind  <mike@lanai.vlsivie.tuwien.ac.at>

	* pdp11.md (divhi3, modhi3, divmodhi4): Rewrite.

Wed Jul 26 10:15:52 1995  Hallvard B Furuseth  (h.b.furuseth@usit.uio.no)

	* collect2.c (end_file): Fix typo in error message text.

Wed Jul 26 09:22:22 1995  Jeff Law  (law@snake.cs.utah.edu)

	* xm-pa.h (USE_C_ALLOCA): Always define.
	* xm-pahpux.h (USE_C_ALLOCA): Likewise.

	* x-pa (CC): Remove useless definition.
	* xm-pa.h (HAVE_STRERROR): Define.
	(__BSD_NET2__): Define.

Wed Jul 26 09:10:25 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* expr.c (preexpand_calls): Don't look past a CLEANUP_POINT_EXPR.

Wed Jul 26 08:43:42 1995  Jim Wilson  <wilson@chestnut.cygnus.com>

	* cse.c (cse_insn): When do special handling for (set REG0 REG1),
	must delete REG_EQUAL note from insn if it mentions REG0.

	* loop.c (find_and_verify_loops): When moving blocks of code, verify
	that the just destination is not in an inner nested loop.
	(mark_loop_jump): Don't mark label as loop exit if it jumps to
	an inner nested loop.

Wed Jul 26 08:40:31 1995  Paul Eggert  <eggert@twinsun.com>

	* cccp.c (do_include, read_name_map): Omit leading "./" and
	trailing "/" when it makes sense.
	(skip_redundant_dir_prefix): New function.

Wed Jul 26 08:36:41 1995  Michael Meissner  <meissner@cygnus.com>

	* stmt.c (emit_nop): Do not emit a nop if there is a single
	insn before a label or at the start of a function.

Wed Jul 26 08:21:21 1995  Doug Evans  <dje@cygnus.com>

	* Makefile.in (gfloat.h): Delete previous copy before updating.

Wed Jul 26 08:18:29 1995  Roland McGrath  <roland@churchy.gnu.ai.mit.edu>

	* Makefile.in (STAGESTUFF): Add stamp-crtS.
	(crtbeginS.o, crtendS.o, stamp-crtS): New rules; just like
	crtbegin.o et al, but compiled using -fPIC.
	* configure (*-*-gnu*): Add crtbeginS.o and crtendS.o to $extra_parts.

Wed Jul 26 08:11:52 1995  Michael Gschwind  <mike@java.vlsivie.tuwien.ac.at>

	* pdp11.md: Fixed typos ('bhos' -> 'bhis').

Wed Jul 26 08:05:41 1995  Jim Wilson  <wilson@chestnut.cygnus.com>

	* hp320.h, m68k.h, m68kv4.h (LEGITIMATE_PIC_OPERAND_P): Reject
	CONST_DOUBLE with MEM with invalid pic address.
	* reload1.c (real.h): Include it.
	* Makefile.in (reload1.o): Depends on real.h.

Wed Jul 26 07:58:22 1995  Ian Lance Taylor  <ian@cygnus.com>

	* gcc.c (MULTILIB_DIRS): Provide default if not defined.
	(multilib_defaults): New static variable.
	(default_arg): New static function.
	(set_multilib_dir): Ignore default arguments.
	(print_multilib_info): Ignore entries which use default arguments.

Tue Jul 25 10:06:09 1995  Michael Meissner  <meissner@cygnus.com>

	* rs6000.md (allocate_stack): Don't copy the LR register to
	the new stack end.
	* rs6000.c (rs6000_stack_info): Correctly store the LR in
	the caller's frame, not the current frame, for V.4 calls.
	* rs6000/eabi.asm (_save*, _rest*): Provide all mandated V.4 save
	and restore functions, except for the save*_g functions which
	return the GOT address.

Fri Jul 21 14:24:25 1995  Michael Meissner  <meissner@cygnus.com>

	* rs6000/eabi.h (__eabi): Load up r13 to be the small data
	pointer, unless -mrelocatable.

	* rs6000/aix3newas.h (LINK_SPEC): Import machine independent
	functions if -mcpu=common.
	* rs6000/milli.exp: Import file referenced in aix3newas.h.

	* rs6000/eabi.asm (__eabi): Support for fixing up user initialized
	pointers when -mrelocatable is used.
	* rs6000/eabi.h (ASM_OUTPUT_INT): Record any pointers initialized
	by the user if -mrelocatable, to be fixed up by __eabi.
	(CONST_SECTION_ASM_OP): If -mrelocatable, put read-only stuff in .data,
	not .rodata, to allow user initialized pointers to be updated by __eabi.

	* rs6000.h (TARGET_SWITCHES): Add -mdebug-{stack,arg}.
	(TARGET_{ELF,NO_TOC,TOC}): Add defaults for non system V.
	(rs6000_stack): New structure to describe stack layout.
	(RS6000_{REG_SAVE,SAVE_AREA,VARARGS_*}): New macros used to
	support both AIX and V.4 calling sequences.
	(FP_ARG_*, GP_ARG_*): Ditto.
	(FP_SAVE_INLINE): Ditto.
	(STARTING_FRAME_OFFSET): Modify to support both AIX and V.4
	calling sequences.
	(FIRST_PARM_OFFSET): Ditto.
	(REG_PARM_STACK_SPACE): Ditto.
	(STACK_POINTER_OFFSET): Ditto.
	(FUNCTION_ARG_REGNO_P): Ditto.
	({,INIT_}CUMULATIVE_ARGS): Ditto.
	(LEGITIMATE_LO_SUM_ADDRESS_P): Ditto.
	(FUNCTION_ARG{,_ADVANCE,PARTIAL_NREGS,PASS_BY_REFERENCE}): Ditto.
	(SETUP_INCOMING_VARARGS): Ditto.
	(EXPAND_BUILTIN_SAVEREGS): Ditto.
	(CAN_ELIMINATE): Ditto.
	(INITIAL_ELIMINATION_OFFSET): Ditto.
	(LEGITIMATE_CONSTANT_POOL_{BASE,ADDRESS}_P): Ditto.
	(GO_IF_{LEGITIMATE_ADDRESS,MODE_DEPENDENT_ADDRESS}): Ditto.
	(LEGITIMIZE_ADDRESS): Ditto.
	(CONST_COSTS): Ditto.
	(ASM_OUTPUT_SPECIAL_POOL_ENTRY_P): Ditto.
	(ASM_OUTPUT_REG_{PUSH,POP}): Use reg_names to print registers.
	(function declarations): Add new rs6000.c function declarations,
	and delete decls of deleted functions.
	(SHIFT_COUNT_TRUNCATED): Parenthesize the expression.

	* rs6000.c (init_cumulative_args): New function to support AIX
	and V.4 calling sequences.
	(function_arg{,_advance,partial_nregs,pass_by_reference}): Ditto.
	(setup_incoming_varargs): Ditto.
	(expand_builtin_saveregs): Ditto.
	(rs6000_stack_info): Ditto.
	(debug_stack_info): Ditto.
	(direct_return): Changes to support AIX and V.4 calling sequences.
	(first_reg_to_save): Ditto.
	(svr4_traceback): Ditto.
	(output_{prolog,epilog}): Ditto.
	(print_operand): Use reg_names to print registers.  Add support
	for V.4 HIGH/LO_SUM address modes.
	(must_save_cr): Function deleted, in rewrite of AIX/V.4 calling
	sequence support.
	(rs6000_sa_size): Ditto.
	(rs6000_pushes_stack): Ditto.
	(output_toc): Add abort if no toc.

	* rs6000.md (call insns): Add a new argument to flag a V.4
	function needs to set bit 6 of the CR.
	(elf_{low,high}): New V.4 functions to create addresses via HIGH
	and LO_SUM patterns.
	(movsi): Use elf_{low,high} if appropriate.
	(mov{si,di}_update): Name these patterns for allocate_stack.
	(allocate_stack): Support for V.4 stack layout.
	(sync): New pattern for V.4 trampolines to issue the sync
	instruction.

	* rs6000/sysv4.h (TARGET_SWTICHES): Add -mcall-{aix,sysv}, and
	-mprototype.  Remove separate flag bit for -mno-toc.
	(SUBTARGET_OVERRIDE_OPTIONS): Don't test for -mno-toc.
	(FP_ARG_*): Adjust for V.4 calling sequences.
	(RS6000_*): Ditto.
	(FP_SAVE_INLINE): Ditto.
	(toc_section): Eliminate use of AIX style full TOC.
	(TRAMPOLINE_{TEMPLATE,SIZE}): Redefine for V.4 support.
	(INITIALIZE_TRAMPOLINE): Ditto.

	* rs6000/eabi.h (CPP_SPEC): Define _CALL_SYSV or _CALL_AIX,
	depending on whether -mcall-sysv or -mcall-aix was used.
	* rs6000/eabile.h (CPP_SPEC): Ditto.
	* rs6000/sysv4le.h (CPP_SPEC): Ditto.

	* rs6000/t-eabigas (MULTILIB_{OPTIONS,DIRNAMES}): Delete no-toc
	libraries, explicit big endian libraries.
	* rs6000/t-ppcgas (MULTILIB_{OPTIONS,DIRNAMES}): Ditto.

	* rs6000/t-eabiaix: New file for eabi, using -mcall-aix as the
	default.
	* rs6000/eabiaix.h: Ditto.

	* rs6000/t-eabilegas: New file for eabi on little endian systems.
	* rs6000/t-ppclegas: New file for V.4 on little endian systems.

	* rs6000/t-rs6000 (MULTILIB_{OPTIONS,DIRNAMES}): Build libgcc.a
	for -mcpu=common.

	* configure (powerpc-*-eabiaix): New configuration for defaulting
	to old-style AIX calling sequence.
	(powerpcle*): Use new t-{eabi,ppc}legas files, to avoid building
	explicit little endian multilib libraries.

Fri Jul 21 13:23:06 1995  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* toplev.c (main): Don't define sbrk #ifdef __alpha__.

Tue Jul 18 19:23:44 1995  Paul Eggert  <eggert@twinsun.com>

	* cccp.c (do_include): Prefix -H output lines with spaces, not dots.
	(output_dots): Remove.

	* cccp.c (main): cplusplus_comments now defaults to 1.
	But clear it if	-traditional or the new option -lang-c89 is given.
	* gcc.c (default_compilers, cpp): Specify -lang-c89 if -ansi is given.
	This turns off C++ comment recognition.

Tue Jul 18 19:16:38 1995  Jim Wilson  <wilson@chestnut.cygnus.com>

	* va-sparc.h (va_arg): Add support for 128 bit long double type.

Tue Jul 18 19:11:18 1995  Jorn Rennecke  (amylaar@meolyon.hanse.de)

	* c-common.c (decl_attributes, case A_ALIGNED): Handle is_type
	case properly.

Tue Jul 18 19:03:02 1995  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* fold-const.c (fold, case CONVERT_EXPR): Don't merge conversions
	if outer is to handle a type with differing precision.

Mon Jul 17 14:37:35 1995  Pat Rankin  (rankin@eql.caltech.edu)

	* vax/vms.h (HAVE_ATEXIT): Define.
	(DO_GLOBAL_CTORS_BODY): Don't call atexit; let __do_global_ctors do it.
	* vax/xm-vms.h (HAVE_VPRINTF): Define.

Mon Jul 17 06:41:19 1995  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* c-typeck.c ({unsigned,signed}_type): Handle intXX_type_node types.

	* xm-alpha.h (sbrk): Add declaration.

	* convert.c (convert_to_integer): If TYPE is a enumeral type or
	if its precision is not the same as the size of its mode,
	convert in two steps.

	* m68k.md (tstdi, cmpdi): Use match_scratch, not match_operand.

Fri Jul 14 19:23:42 1995  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* c-decl.c (field_decl_cmp): Rewritten to make sure that a null
	name always sorts low against other names.
	* c-typeck.c (lookup_field): Change name comparison to match what
	field_decl_cmp does.

Fri Jul 14 18:46:24 1995  Michael Meissner  <meissner@cygnus.com>

	* rs6000.md (movsi): Convert a CONST_DOUBLE into a CONST_INT of
	the low part.

Fri Jul 14 18:30:52 1995  Doug Evans  <dje@cygnus.com>

	* toplev.c (main): Reword dwarf/c++/-g warning.

Fri Jul 14 18:19:34 1995  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* expr.h (NO_DEFER_POP): Remove last change.
	* expr.c (stor_expr): Force stack adjust before NO_DEFER_POP.
	(expand_expr, case COND_EXPR): Likewise.
	* stmt.c (expand_start_stmt_expr): Likewise.

Fri Jul 14 07:58:35 1995  Jim Wilson  <wilson@chestnut.cygnus.com>

	* function.c (struct temp_slot): New fields base_offset, full_size.
	(assign_stack_temp): For !FRAME_GROWS_DOWNWARD, set p->size to size.
	Set new fields base_offset and full_size.
	(combine_temp_slots): Use new fields base_offset and full_size instead
	of slot and size.

	* loop.c (loop_number_exit_count): New global variable.
	(loop_optimize): Allocate space for it.
	(find_and_verify_loops, mark_loop_jump): Set it.
	(strength_reduce, check_dbra_loop): Use loop_number_exit_count
	instead of loop_number_exit_labels.
	* loop.h (loop_number_exit_count): Declare it.
	* unroll.c (find_splittable_{regs,givs}, final_[bg]iv_value): Use
	loop_number_exit_count instead of loop_number_exit_labels.
	(reg_dead_after_loop): Check loop_number_exit_count, and fail
	if the count doesn't match loop_number_exit_labels.

	* cse.c (cse_insn): Ifdef out code that pre-truncates src_folded.

	* sparc.md (sethi_di_sp64): Return null string at end.

	* function.h (struct function): Add stdarg field.
	* function.c (current_function_stdarg): New global variable.
	(push_function_context_to): Save it.
	(pop_function_context_from): Restore it.
	(assign_parms): Set it.
	(init_function_start): Clear it.
	* output.h (current_function_stdarg): Declare it.
	* i960.md: Modify all patterns which handle stores to memory to also
	check current_function_varargs and current_function_stdarg.

	* reorg.c (fill_simple_delay_slots): When trying to take instruction
	from after the branch, don't continue past target label.  Local
	variables passed_label and target_uses are no longer necessary.

Thu Jul 13 19:30:04 1995  Jeff Law  (law@snake.cs.utah.edu)

	* pa.c (output_bb): Fix error in long backwards branch with
	nullified delay slot.

Thu Jul 13 19:26:13 1995  Jim Wilson  <wilson@chestnut.cygnus.com>

	* expmed.c (SHIFT_COUNT_TRUNCATED): Use #ifdef not #if.

Mon Jul 10 20:16:44 1995  Paul Eggert  <eggert@twinsun.com>

	* cccp.c (rescan): Don't address outside of array when
	preprocessing C++ comments.

Mon Jul 10 20:05:46 1995  Michael Meissner  <meissner@tiktok.cygnus.com>

	* rs6000.c (expand_block_move): Remove #if 0 conditionals
	against using larger block moves.

	* t-rs6000 (EXTRA_PARTS): Copy milli.exp to release dir.
	(milli.exp): Copy to build dir from machine dependend dir.

Mon Jul 10 20:03:29 1995  Richard Earnshaw (rearnsha@armltd.co.uk)

	* arm.md (matcher for (shiftable_op (cond-exp) (reg))): If
	shiftable_op is minus, then subtract from zero when cond fails.

Mon Jul 10 19:58:26 1995  John F. Carr <jfc@mit.edu>

	* sparc.h (SELECT_SECTION): Use TREE_CODE_CLASS instead of directly
	referencing tree_code_type.

Mon Jul 10 19:54:31 1995  Jim Wilson  <wilson@chestnut.cygnus.com>

	* protoize.c (reverse_def_dec_list): Delete const qualifiers from
	local variables, and delete casts which were casting away const.

Mon Jul 10 19:14:39 1995  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* c-lang.c (finish_file): Add missing parm to start_function call.

	* jump.c (jump_optimize): Pass outer_code arg to rtx_cost.

	* varasm.c (assemble_name, bc_assemble_integer): Call
	bc_emit_labelref with proper args.

	* function.c (setjmp_args_warning): Remove bogus arg.

Mon Jul 10 18:20:54 1995  Fergus Henderson  (fjh@cs.mu.oz.au)

	* gcc.c (p{fatal,error}_with_name, perror_exec): Quote filename.

Mon Jul 10 18:12:51 1995  Gran Uddeborg (uddeborg@carmen.se)

	* i386/iscdbx.h (STARTFILE_SPEC): Handle -Xp.

Wed Jul  5 02:42:17 1995  Per Bothner  (bothner@spiff.gnu.ai.mit.edu)

	* cpphash.h (enum node_type):  Remove unneeded and non-standard
	forward declaration.

Sat Jul  1 20:15:39 1995  Jim Wilson  <wilson@chestnut.cygnus.com>

	* mips/t-mips, mips/t-mips-gas (MULTILIB_*, LIBGCC, INSTALL_LIBGCC):
	Delete.

	* sparc/sol2.h (LINK_SPEC): Revert March 16 change.  Do not add -R
	for each -L.

	* collect2.c (libcompare): Verify that file name extensions are valid.
	Put files with invalid extensions last in the sort.

	* integrate.c (integrate_decl_tree): Set DECL_ABTRACT_ORIGIN before
	pushdecl call for local variables.

Sat Jul  1 08:13:38 1995  Richard Earnshaw (rearnsha@armltd.co.uk)

	* cpplib.c (output_line_command): If not emitting #line directives
	delay returning until after adjust_position has been called.

	* arm.md (mov{si,sf,df}cc): Call gen_compare_reg to generate
	the condition code register.

Sat Jul  1 06:55:09 1995  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* fold-const.c (decode_field_reference): New parm PAND_MASK.
	(unextend): New parm MASK.
	(fold_truthop): Pass new parms to decode_field_reference and unextend.

	* va-alpha.h (__va_tsize): Use __extension__ to avoid warning
	on use of `long long'.

	* expr.h (NO_DEFER_POP): Do any pending stack adjusts.

	* recog.c (register_operand): Disallow subreg of reg not allowed to
	change size.

Thu Jun 29 05:51:57 1995  Jeff Law  (law@snake.cs.utah.edu)

	* pa.md (reload addsi3): New pattern to avoid reload lossage
	with register eliminations.

	* pa.c (output_cbranch): When checking for a jump to the given
	insn's delay slot, handle the case where JUMP_LABEL for the
	given insn does not point to the first label in a series of
	labels.
	(output_bb, output_dbra, output_movb): Likewise.

Wed Jun 28 18:04:56 1995  Jeff Law  (law@snake.cs.utah.edu)

	* pa.h (PIC_OFFEST_TABLE_REGNUM_SAVED): Define to %r4.
	(CONDITIONAL_REGISTER_USAGE): Make it fixed when compiling
	PIC code.
	(INIT_EXPANDERS): Delete.
	* pa.c (hppa_save_pic_table_rtx): Delete variable.
	(hppa_expand_prologue): For PIC generation, copy the PIC
	register into a fixed callee register at the end of the
	prologue of non-leaf functions.
	* pa.md (call expanders): Reload the PIC register from the
	fixed callee saved register.  Don't try to save the PIC
	register before the call.

Wed Jun 28 18:01:14 1995  Stan Cox  (coxs@dg-rtp.dg.com)

	* m88k/dguxbcs.h (ASM_SPEC): Removed -h flag.
	* m88k/dgux.h (ASM_SPEC): Likewise.

Wed Jun 28 17:01:58 1995  David Edelsohn  <edelsohn@mhpcc.edu>

	* rs6000.c (processor_target_table): Remove CPU name synonyms.
	* rs6000.h (CPP_SPEC): Likewise.
	* rs6000/sysv4.h (CPP_SPEC): Likewise.
	(ASM_SPEC): Likewise.
	* rs6000/sysv4le.h (CPP_SPEC): Likewise.
	* rs6000/eabile.h (CPP_SPEC): Likewise.
	* rs6000/powerpc.h (CPP_SPEC): Likewise.
	(ASM_SPEC): Set assembler target according to compiler target.
	* rs6000/aix3newas.h (CPP_SPEC): Likewise.
	(ASM_SPEC): Likewise.
	* rs6000/aix41.h (CPP_SPEC): Likewise.
	(ASM_SPEC): Likewise.

Wed Jun 28 16:25:53 1995  Gran Uddeborg  (uddeborg@carmen.se)

	* i386/x-isc3 (INSTALL_HEADERS_DIR): Delete; done by configure.

Wed Jun 28 16:10:47 1995  Philippe De Muyter (phdm@info.ucl.ac.be)

	* xm-rs6000.h (alloca): Extern decl added for non-GNU compiler.

Wed Jun 28 11:31:30 1995  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* cpplib.c (progname): Remove definition from here.

	* final.c (final_scan_insn): Fix error in last change.

	* rtlanal.c (reg_set_p_1): Now static; add extra parm.

	* stmt.c: Delete redundant forward decls.
	(expand_anon_union_decl): Correctly call expand_decl.

	* toplev.c (strip_off_ending): Strip off any ending; don't
	pretend we know what valid endings are.

	* svr4.h (ASM_OUTPUT_SECTION_NAME): Don't crash if DECL is null.

	* rs6000.md ({load,store}_multiple): Don't use indirect_operand
	in define_insn; use explicit MEM of register_operand instead.

Tue Jun 27 11:42:56 1995  Stephen L Moshier  <moshier@world.std.com>

	* i386/i386.c (print_operand, case `J'): Use jns for GE and js for
	LT.

Tue Jun 27 07:58:55 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* expr.c (expand_expr, TARGET_EXPR): Only use original_target
	if !ignore.

Tue Jun 27 07:27:26 1995  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* fold-const.c (fold_truthop): Commute unextend and convert on
	l_const and r_const.

	* c-common.c (decl_attributes, case A_CONSTRUCTOR, A_DESTRUCTOR):
	Set TREE_USED.

	* final.c (final_scan_insn): Don't call alter_cond unless
	condition is on cc0.

	* stmt.c (expand_asm_operands): Handle input operands that may not
	be in a register.

Mon Jun 26 19:23:05 1995  Richard Earnshaw (rearnsha@armltd.co.uk)

	* arm/lib1funcs.asm (L_dvmd_tls): Renamed from L_divmodsi_tools.
	* arm/t-semi (LIB1ASMFUNCS): Rename _dvmd_tls from _divmodsi_tools.

Mon Jun 26 19:18:06 1995  Jim Wilson  <wilson@chestnut.cygnus.com>

	* unroll.c (find_splittable_regs): When completely unrolling loop,
	check for non-invariant initial biv values.

Mon Jun 26 19:13:54 1995  Gran Uddeborg  <uddeborg@carmen.se>

	* configure (i[345]86-*-isc*): Fix misspelled "rfile" to "ifile".

Mon Jun 26 18:58:22 1995  Mike Stump  <mrs@cygnus.com>

	* expr.c (expand_expr, case COND_EXPR): Protect the condition from
	being evaluated more than once.
	(do_jump, case TRUTH_ANDIF_EXPR, TRUTH_ORIF_EXPR): Likewise.

Mon Jun 26 18:52:36 1995  Philippe De Muyter (phdm@info.ucl.ac.be)

	* fixincludes (string.h):  Fix return value for mem{ccpy,chr,cpy,set}
	and str{len,spn,cspn} on sysV68.

Mon Jun 26 06:54:50 1995  Michael Meissner  (meissner@cygnus.com)

	* i386/osfrose.h (LONG_DOUBLE_TYPE_SIZE): Go back to making long
	double == double.

Thu Jun 22 19:14:41 1995  Pat Rankin  (rankin@eql.caltech.edu)

	* make-cc1.com (if DO_LINK): Skip c-parse.* processing when
	only relinking.
	(gas_message): Update to reflect current version, and give
	a different message if/when no version of gas is found.xo

Thu Jun 22 18:52:37 1995  Richard Earnshaw (rearnsha@armltd.co.uk)

	* arm/lib1funcs.asm (___modsi3): Correctly set SIGN register for
	modulo involving negative numbers.

Thu Jun 22 18:32:27 1995  Uwe Seimet  (seimet@chemie.uni-kl.de)

        * xm-atari.h (HZ): Now 100 and don't define if already defined.

Thu Jun 22 18:26:12 1995  Jeffrey A Law  (law@snake.cs.utah.edu)

	* calls.c (expand_call): Correctly handle returning BLKmode
	structures in registers when the size of the structure is not
	a multiple of word_size.
	* stmt.c (expand_return): Likewise.

	* pa-gux7.h (LIB_SPEC): Undefine before redefining.
	* pa-hpux.h (LIB_SPEC): Likewise.
	* pa-hpux7.h (LIB_SPEC): Likewise.

	* genmultilib: Work around hpux8 /bin/sh case bug.

	* pa.h (LIB_SPEC): Define to avoid -lg.

Thu Jun 22 18:19:09 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* expr.c (expand_expr, TARGET_EXPR): Use original_target.

	* collect2.c (locatelib): Fix parsing of LD_LIBRARY_PATH.

Thu Jun 22 18:15:54 1995  Paul Eggert  <eggert@twinsun.com>

	* configure: Create an empty Makefile.sed first, to work
	around a Nextstep 3.3 bug.

Thu Jun 22 18:03:44 1995  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* Makefile.in (STAGESTUFF): Add stamp-crt.
	(crtbegin.o, crtend.o): Now depend on stamp-crt.
	(stamp-crt): New rule, to actually build crt{begin,end}.o.

	* collect2.c (main): Unlink export_file before we return.

Thu Jun 22 14:25:56 1995  Michael Meissner  (meissner@cygnus.com)

	* rs6000.h (STRIP_NAME_ENCODING): Store NAME and strlen(NAME) into
	local variables; cast result of alloca to avoid compiler warnings.

Tue Jun 20 18:25:29 1995  Douglas Rupp  (drupp@cs.washington.edu)

	* alpha/config-nt.sed, i386/config-nt.sed: Edit to add
	a missing $(exeext) for CCCP.

Tue Jun 20 18:18:00 1995  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* protoize.c (default_include): Use name and two ints to be
	compatible with definition of INCLUDE_DEFAULTS.

Mon Jun 19 19:24:29 1995  Ted Lemon  <mellon@toccata.fugue.com>

      * mips/netbsd.h (ASM_DECLARE_FUNCTION_NAME): Don't emit function label.

Mon Jun 19 18:34:55 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* fixincludes: Don't define wchar_t under C++.

Mon Jun 19 17:12:41 1995  Paul Eggert  <eggert@twinsun.com>

	* cccp.c (collect_expansion): Work around enum bug in vax
	ultrix 4.3 pcc.
	* tree.c (simple_cst_equal): Likewise.

Mon Jun 19 16:53:00 1995  Douglas Rupp  (drupp@cs.washington.edu)

	* winnt/spawnv.c: New file.

Mon Jun 19 16:30:29 1995  Glenn Brown  <glenn@mars.myri.com>

 	* caller-save.c (save_call_clobbered_regs): If AUTO_INC_DEC, mark
	register indicated by REG_INC notes as live so they will be saved.

Mon Jun 19 16:21:12 1995  Jeffrey A Law  (law@snake.cs.utah.edu)

	* pa.h (PRINT_OPERAND_ADDRESS, case LOW_SUM): Fix logic bug
	in last change.

Mon Jun 19 14:11:49 1995  Jim Wilson  <wilson@chestnut.cygnus.com>

	* integrate.c (integrate_decl_tree): Only set DECL_ABSTRACT_ORIGIN
	if the decl returned by pushdecl is the one we started with.

	* mips.h (current_function_name): Delete declaration.
	(ASM_DECLARE_FUNCTION_NAME): Don't set current_function_name.
	* gnu.h (ASM_DECLARE_FUNCTION_NAME): Likewise.
	* mips.c (current_function_decl): Delete declaration.
	(function_prologue): New variable fnname.  Use it instead of
	current_function_name.
	(function_epilogue): Likewise.

Mon Jun 19 13:13:15 1995  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>

	* alpha.h (ASM_OUTPUT_ASCII): Always reset line count when
	starting new line.

	* scan-decls.c (scan_decls): Fix typo when resetting PREV_ID_START.

	* i386/config-nt.sed, alpha/config-nt.sed: Change version to 2.7.1.

Mon Jun 19 13:06:14 1995  DJ Delorie  (dj@delorie.com)

	* msdos/top.sed: Support new build variables.
	* msdos/configur.bat: Make options.h and specs.h.
	Change realclean to maintainer-clean.

Fri Jun 16 06:54:03 1995  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* Version 2.7.0 Released.

	* obstack.c: Always enable this code for now.

	* alpha.c (alpha_builtin_saveregs): Use ptr_mode and conversions
	when need so works for both OSF and NT.
	* va-alpha.h (__va_tsize): Round to long long not long.

Thu Jun 15 17:54:52 1995  Bdale Garbee  <bdale@gag.com>

	* configure (a29k-*-coff): Synonym for a29k-*-udi.

Thu Jun 15 17:51:21 1995  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* function.c (assign_parms): Do all conversions in CONVERSION_INSNS.

Thu Jun 15 17:36:49 1995  Michael Meissner  <meissner@cygnus.com>

	* reg-stack.c (record_reg_life): Call record_reg_life_pat with 0
	for douse argument so that USE's created to mark variables within
	blocks don't get marked as set.

Thu Jun 15 06:28:15 1995  Dennis Glatting  (dennisg@CyberSAFE.COM)

	* configure: Change one sed command to work around m68k-next bug.

Wed Jun 14 22:14:39 1995  Jason Merrill  <jason@deneb.cygnus.com>

	* collect2.c (main): Don't turn off auto_export because of -g.
	(main): Ignore the argument to -o.

	* alpha.h (LINK_SPEC): Don't pass -init __main anymore.
	* alpha/osf12.h (LINK_SPEC): Ditto.
	* mips/iris5.h (LINK_SPEC): Ditto.

	* collect2.c (main): Place o_file after an initial .o (like crt0.o).
	If we have LD_INIT_SWITCH, use init and fini functions for
	executables, too.  Specify the unique function names.
	(write_c_file_stat): Fix the case of destructors but no constructors.
	Don't include the generic-named functions for executables.
	(write_c_file): If we have LD_INIT_SWITCH, always use
	write_c_file_stat.

	* collect2.c (main): Also add _GLOBAL__D? to export list.

	* ginclude/iso646.h: Do nothing if compiled as C++.

Wed Jun 14 17:39:10 1995  Roland McGrath  (roland@gnu.ai.mit.edu)

	* c-common.c (format_char_info, case 'm'): Set type to void.
	(check_format_info): If type is void, ignore operand.

Wed Jun 14 17:04:10 1995  Paul F. Kunz  (Paul_Kunz@SLAC.Stanford.EDU)

	* expr.c (expand_builtin_apply_args): Put back original
	register save and restore order.

Wed Jun 14 16:56:22 1995  Michael Meissner  <meissner@cygnus.com>

	* rs6000/eabi.h (INVOKE__main): Define, so __eabi is called after
	main's arguments are saved.

	* rs6000.c (output_prolog): Don't call __eabi here, let
	compiler call it after the arguments to main are saved.
	(output_{prolog,epilog}): Don't use functions under V.4 to save
	and restore floating point registers.

Wed Jun 14 16:52:12 1995  Philippe De Muyter (phdm@info.ucl.ac.be)

	* m68k/mot3300.h (PCC_BITFIELD_TYPE_MATTERS): Defined.

Wed Jun 14 16:48:53 1995  Jerry Frain  (jerry@tivoli.com)

	* Makefile.in (stage[1-4]): Correctly link `as', `ld', and `collect2'.

Wed Jun 14 05:52:04 1995  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* objc-act.c (hack_method_prototype): Set DECL_CONTEXT of parms.

	* expmed.c (emit_store_flag): Always set LAST.

	* c-decl.c (start_function): New parameter for attributes.
	* c-tree.h (start_function): Likewise.
	* c-lang.c (finish_file): Pass extra parm to start_function.
	* objc-act.c (build_module_descriptor, really_start_method): Likewise.
	* c-parse.in (fndef, nested_function, notype_nested_function):
	Likewise.

	* function.c (assign_parms): Use convert_to_mode instead of
	gen_lowpart when converting incoming parm.

Tue Jun 13 19:10:32 1995  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>

	* rs6000.md (decrement_and_branch): Finish last fix; update matching
	constraint.

Tue Jun 13 18:32:51 1995  Torbjorn Granlund  <tege@bozo.matematik.su.se>

	* fold-const.c (fold): When converting a COND_EXPR to an ABS_EXPR,
	get the types right for ABS_EXPR to work.

Mon Jun 12 17:09:55 1995  Michael Tiemann  (tiemann@axon.cygnus.com)

	* reorg.c (fill_simple_delay_slots): Set MAYBE_NEVER according to
	code of TRIAL_DELAY, not TRIAL.

Mon Jun 12 15:02:37 1995  Doug Evans  <dje@cygnus.com>

	* configure: Restore code to make ld symlink if ! use_collect2.

	* gcc.c (link_command_spec): Undo patch of May 11.
	-nostdlib implies -nostartfiles again.
	* dsp16xx.h (CROSS_LINK_SPEC): Likewise.
	* i386/freebsd.h (LINK_SPEC): Undo patch of May 24.
	Don't pass "-e start" if nostdlib.
	* i386/sun.h (LINK_SPEC): Likewise.
	* m68k/sun2o4.h (LINK_SPEC): Likewise.
	* m68k/sun3.h (LINK_SPEC): Likewise.
	* m68k/vxm68k.h (LINK_SPEC): Likewise.
	* mips/netbsd.h (LINK_SPEC): Likewise.
	* config/netbsd.h (LINK_SPEC): Likewise.
	* rs6000/mach.h (LINK_SPEC): Likewise.
	* sparc.h (LINK_SPEC): Likewise.
	* sparc/vxsparc.h (LINK_SPEC): Likewise.

	* gcc.c (link_command_spec): New argument -nodefaultlibs.

Sun Jun 11 20:47:53 1995  Stephen L Moshier  (moshier@world.std.com)

	* Makefile.in (fix-header.o): Depends on xsys-protos.h.

Sun Jun 11 15:07:58 1995  Tim Carver  (timc@ibeam.intel.com)

	* reload1.c (emit_reload_insns): Don't call HARD_REGNO_NREGS
	on psuedo when clearing reg_last_reload_reg.

Sun Jun 11 14:07:05 1995  Philippe De Muyter (phdm@info.ucl.ac.be)

	* m68k.md ({add,sub}di{_mem,3}): Patterns merged.

Sun Jun 11 13:43:26 1995  Torbjorn Granlund  <tege@bozo.matematik.su.se>

	* m68k.md (cmpdi matcher): Set cc_status before returning.

	* config/xm-freebsd.h (DONT_DECLARE_SYS_SIGLIST): Define.

Sun Jun 11 13:38:49 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* fixincludes (math.h):  Keep declaration of abs on HPUX.

Sun Jun 11 12:31:42 1995  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* stor-layout.c (variable_size): Do nothing if SIZE is constant.

	* stmt.c (expand_asm_operands): See if output operand permits
	register.  If not, mark output addressable, call expand_operand
	on it, and give error if not MEM.

	* function.c (assign_parms): Handle promotions of both
	passed and nominal modes separately and insert needed conversions.
	(promoted_input_arg): Return 0 if nominal and passed modes differ.

	* stmt.c (all_cases_count, case INTEGER_TYPE): Fix typo in checking
	for integer bounds.

Sat Jun 10 08:55:25 1995  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* libgcc2.c (_floatdidf): Correctly set float sizes.

	* c-decl.c (c_decode_option, case "-Wall"): Don't set extra_warnings.

	* Makefile.in (cpplib.o, fix-header.o): Update dependencies.
	(cpperror.o, cppexp.o, cpphash.o): New rules, to show .h dependencies.

Fri Jun  9 18:06:10 1995  Doug Evans  <dje@canuck.cygnus.com>

	* cse.c (cse_basic_block): Fix test for whether block ends with a
	barrier.  Return next insn, not 0, if block ends in a barrier.

Fri Jun  9 17:58:29 1995  Paul Eggert  <eggert@twinsun.com>

	* fold-const.c (lshift_double): Replace `&' with `%' to fix typo.
	([lr]shift_double): Truncate shift count only if SHIFT_COUNT_TRUNCATED.
	Remove unnecessary `count >= prec' test.

	* cexp.y (left_shift): Ignore integer overflow.

	* cexp.y (skip_evaluation): New variable.
	(&&, ||, ?:): Increment it in unevaluated subexpressions.
	(/, %, integer_overflow): Suppress diagnostics if skip_evaluation != 0.
	(yyerror): Clear skip_evaluation.

Fri Jun  9 17:49:05 1995  Torbjorn Granlund  <tege@bozo.matematik.su.se>

	* m68k.md (tstdi): Rewrite.

Fri Jun  9 17:28:55 1995  Per Bothner  <bothner@cygnus.com>

	* scan-decls.c (scan_decls):  Handle declarations with
	multiple comma-separated declarators.

Thu Jun  8 19:16:12 1995  Richard Earnshaw (rearnsha@armltd.co.uk)

	* arm.md (mov[sd]f expands): Don't allow fp constants in pseudos
	when TARGET_SOFT_FLOAT.

Thu Jun  8 19:11:43 1995  Jim Wilson  <wilson@chestnut.cygnus.com>

	* expmed.c (store_split_bit_field): When adjust arg in
	BYTES_BIT_ENDIAN case, use number of bits in arg for MEM operands
	and BITS_PER_WORD for other operands.
	(extract_fixed_bit_field): Undo last change.

	* unroll.c (verify_addresses): New function.
	(find_splittable_givs): Use it instead of memory_address_p.

Thu Jun  8 18:58:18 1995  Torbjorn Granlund  <tege@bozo.matematik.su.se>

	* expmed.c (expand_divmod): Always check result of emit_store_flag.

Thu Jun  8 12:02:34 1995  David D Zuhn  (zoo@armadillo.com)

	* cpplib.c (cpp_push_buffer): Include filename in error message.

Thu Jun  8 11:53:45 1995  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* function.c (assign_parms): Don't call promote_mode on arg
	unless PROMOTE_FUNCTION_ARGS defined.

	* rs6000.md (decrement_and_branch): Ensure label is operand 0.

	* rs6000.md (aux_truncdfsf2): New pattern.
	(movsf): Use it instead of invalid SUBREG and truncdfsf2.

	* varasm.c (assemble_name): Disable warn_id_clash around
	get_identifier call.

Wed Jun  7 17:22:25 1995  Philippe De Muyter (phdm@info.ucl.ac.be)

	* configure (gdb_needs_out_file_path): New variable.
	(m68k-motorola-sysv): Set gdb_needs_out_file_path if not using gas.
	(.gdbinit): If gdb_needs_out_file_path is set, add a 'dir' command
	for $(out_file).

Wed Jun  7 17:17:19 1995  Torbjorn Granlund  <tege@bozo.matematik.su.se>

	* fold-const.c (fold): When folding `<' type nodes, make true_value
	and false_value have correct types.

Wed Jun  7 05:06:42 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* collect2.c (COFF scan_prog_file): Use the AIX duplicate entry.

Tue Jun  6 18:43:09 1995  Jeffrey A Law  (law@snake.cs.utah.edu)

	* pa.h (FUNCTION_ARG_CALLEE_COPIES): Define.

Tue Jun  6 18:21:18 1995  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* expr.c (expand_expr, case PLACEHOLDER_EXPR): Consider two types
	identical if their TYPE_MAIN_VARIANTs are the same.

	* c-decl.c (start_decl): Set DECL_COMMON before calling
	decl_attributes.

	* a29k.c (print_operands): Cast args to bcopy to char *.

	* c-decl.c (duplicate_decls): Don't clear DECL_CONTEXT of
	new decl if it is a function.

Tue Jun  6 17:57:44 1995  Eberhard Mattes  (mattes@azu.informatik.uni-stuttgart.de)

	* gcc.c (do_spec_1, case 'g'): Handle %O as suffix if MKTEMP_EACH_FILE.

Tue Jun  6 17:53:05 1995  Michael Meissner  <meissner@cygnus.com>

	* rs6000.c (expand_block_move): Update source and destination pointers
	inside the loop moving the bytes, not outside.

Tue Jun  6 14:58:37 1995  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* m68k.h (CONDITIONAL_REGISTER_USAGE): Don't mark pic reg as fixed.
	* m68k.c (finalize_pic): Emit USE insn at start and end of function.

Tue Jun  6 13:46:57 1995  Jim Wilson  <wilson@mole.gnu.ai.mit.edu>

	* sh.c (print_operand): Check for annulled branches.
	(output_movedouble): Handle SUBREG addresses.
	(output_branch): Handle annulled branches.
	(sh_expand_prologue): Correct number of saved registers for
	varargs functions.
	* sh.h: Add some comments.
	* sh.md: Add some comments.  Cleanup formatting.
	(type attribute): Add pstore and call.
	(return define_delay): Reorganize to make clearer.
	(call/sfunc define_delay): Define.
	(cbranch define_delay): Define to have annul-true delay slot.
	(subsi3): Use arith_reg_operand for operand 2.
	(shift patterns): Use const_int_operand instead of immediate_operand
	for shift counts.
	(push): Add pstore constraint case.
	(movsi_i): Move t/z constraint pair to the front of the list.
	(calli, call_valuei): Add "call" attribute.

Mon Jun  5 19:23:13 1995  Jim Wilson  <wilson@chestnut.cygnus.com>

	* sched.c (attach_deaths): In last change, use find_reg_note instead
	of find_regno_note.

Mon Jun  5 19:17:31 1995  Tom Quiggle  (quiggle@lovelace.engr.sgi.com)

	* mips/iris5.h (MACHINE_TYPE): Say "IRIX 5.x", not "5.0".
	(NO_DOLLAR_IN_LABEL): Undefine.
	* mips.h (sdb_begin_function_line): New declaration.
	(PUT_SDB_FUNCTION_END): New definition.

Mon Jun  5 18:56:10 1995  Michael Meissner  <meissner@cygnus.com>

	* rs6000.c (expand_block_move): Don't do block moves where we clobber
	fixed numbers of regs, instead move just 1-8 bytes at a time.

	* Makefile.in (STAGESTUFF): Copy files produced by -da and
	-save-temps to the stage subdirectories.

Mon Jun  5 08:18:46 1995  Torbjorn Granlund  <tege@bozo.matematik.su.se>

	* combine.c (reg_dead_at_p): When scanning backwards, stop at BARRIER.

	* m68k.c (print_operand): Handle 'R' for registers.
	* m68k.md (cmpdi): Rewrite to avoid bogus matching constraints.

	* optabs.c (expand_binop): In last change, don't defererence TARGET
	if it is 0.

	* pa.md (movsicc): Use MATCH_DUP for operand 4 and 5.

Mon Jun  5 08:14:56 1995  Jeffrey A Law  (law@cs.utah.edu)

	* pa.c (hppa_encode_label): Allocate stuff on permanent_obstack
	rather than via malloc.

	* c-common.c (decl_attributes): Fix typo in size passed to alloca.

Mon Jun  5 08:10:55 1995  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* alpha.md: Use "some_operand" for patterns valid only during
	reload and meant to handle adding more PLUS operators during
	register elimination.

Mon Jun  5 07:31:53 1995  Stephen L Moshier  (moshier@world.std.com)

	* cse.c (simplify_unary_operation, case FLOAT, UNSIGNED_FLOAT):
	Truncate to requested mode.

Sat Jun  3 22:08:51 1995  Jim Wilson  <wilson@chestnut.cygnus.com>

	* sched.c (attach_deaths): Don't add a REG_DEAD note if a REG_UNUSED
	note is already present.

Sat Jun  3 18:36:57 1995  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* pa.h (hppa_builtin_saveregs): Add declaration.

Sat Jun  3 18:11:26 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* Makefile.in (scan-decls.o):  Depends on cpplib.h.

Fri Jun  2 19:23:47 1995  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* optabs.c (expand_binop): Don't use non-REG TARGET in 2-word case.

Thu Jun  1 19:30:30 1995  Tor Egge  (tegge@flipper.pvv.unit.no)

	* m88k.h (RETURN_POPS_ARGS): New argument.
	* m88k/dolphin.ld: Added start of comment.

Thu Jun  1 19:12:28 1995  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* configure (a29k-*-bsd*): Fix typo in last change.

Thu Jun  1 18:51:53 1995  Jim Wilson  <wilson@chestnut.cygnus.com>

	* expmed.c (extract_fixed_bit_field): For REG case, compute total_bits
	from mode instead of assuming BITS_PER_WORD.

Thu Jun  1 18:34:31 1995  Michael Meissner  <meissner@cygnus.com>

	* rs6000.h (FIXED_R13): Default to 0.
	({FIXED,CALL_USED}_REGISTERS): Use FIXED_R13 for register 13.
	* sysv4.h (FIXED_R13): Define to be 1.

Wed May 31 20:57:26 1995  Torbjorn Granlund  <tege@matematik.su.se>

	* m68k.md ([su]mulsi3_highpart): Pass correct number of arguments to
	const_uint32_operand.
	* m68k.c (const_uint32_operand): Reject negative numbers.

	* expmed.c (expand_mult_highpart): Use wide_op1 for all multiplies.
	(expand_divmod): Undo Nov 12 change.  Instead, add special case
	for division by MIN_INT in signed TRUNC_DIV_EXPR case.

Wed May 31 20:44:21 1995  Philippe De Muyter (phdm@info.ucl.ac.be)

	* m68k.md (one_cmpldi2): New pattern.
	({a,l}shrdi{3,_const}): Allow 63 as shift count.

Wed May 31 14:56:31 1995  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* varasm.c (assemble_start_function, assemble_variable):
	Make sure first_global_object_name is in permanent obstack.

	* reload1.c (alter_reg): Clean up setting of RTX_UNCHANGING_P
	when making a MEM.

	* reorg.c (struct resources): New field unch_memory.
	(CLEAR_RESOURCES, mark_target_live_regs, dbr_schedule): Clear it.
	(mark_{referenced,set}_resources, redundant_insn): Set it.
	(fill_simple_delay_slots): Likewise.
	(resource_conflicts_p): Test it.

	* unroll.c (copy_loop_body): Fix typo in call to sets_cc0_p.

	* integrate.c (output_inline_function): Don't call expand_function_end.

	* calls.c (prepare_call_address): Only call use_reg on
	static_chain_rtx if it is a REG.

	* configure (a29k-*-bsd*): Use t-a29k.
	* t-a29k: New file.
	* a29k/t-a29kbare (LIBGCC1_TEST): New null definition.
	* a29k/t-vx29k (LIBGCC1_TEST): Likewise.

Wed May 31 14:17:42 1995  Jeffrey A Law  (law@snake.cs.utah.edu)

	* configure (hppa*-*-bsd*): Do not run fixincludes.
	(hppa*-*-osf*): Likewise.
	(hppa*-*-lites*): Likewise.

	* pa.h (PRINT_OPERAND_ADDRESS): Use "RR'" rather than "R'" for
	symbolic addresses.
	* pa.md (symbolic HIGH patterns): Likewise.
	(symbolic LO_SUM pattern): Likewise.

Wed May 31 14:11:53 1995  Michael Meissner  <meissner@cygnus.com>

	* rs6000.md (all movstri recognizers): Eliminate updating the pointers.
	* rs6000.c (expand_block_move): Don't pass argument of # bytes to
	increment pointers by to movstrsi expanders.

	* rs6000.c (rs6000_override_options): Fix typo with -mstring handling.

	* rs6000.h (TARGET_SWITCHES): Set MASK_STRING_SET explicitly
	if -mno-string, so that it can override the processor default.

Wed May 31 07:31:53 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* c-common.c (truthvalue_conversion, BIT_AND_EXPR): Make sure that
	the result has boolean_type_node.

Tue May 30 19:03:21 1995  J.T. Conklin  <jtc@cygnus.com>

	* stddef.h: Undefine _BSD_XXX_T_ if _GCC_XXX_T is defined on BSD
	Net/2 derived systems.

Tue May 30 08:17:37 1995  Philippe De Muyter (phdm@info.ucl.ac.be)

	* m68k.md (decrement_and_branch_until_zero): Operand 0 constraint
	changed from "+g" to "+d*am".
	(similar anonymous HImode pattern): Likewise.

	* m68k.md (tstdi): Use tst/subx #0 instead of neg/negx.
	Allow "a" and ">" for operand 0.

Mon May 29 19:24:43 1995  Niklas Hallqvist  (niklas@appli.se)

	* m68k.md (addsi_lshrsi_31): Use match_dup, not constraint "1",
	for matching inputs.

Mon May 29 12:39:58 1995  Allen Briggs <briggs@rrinc.com>

	* i386/isc.h ({STARTFILE,LIB,CPP}_SPEC): Handle -Xp like -posix.
	* i386/x-isc3 (X_CFLAGS): Add -Xp.

Mon May 29 12:28:41 1995  J.T. Conklin  (jtc@cygnus.com)

	* configure (sparc-*-netbsd): Add missing asterisk at end.

Mon May 29 08:55:48 1995  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* combine.c (recog_for_combine): New parm PADDED_SCRATCHES; set it.
	(try_combine): Accumulate number of scratches and update max_scratch.
	(simplify_set): Add extra parm to recog_for_combine.

	* romp.md (call): Put USE for r0 in CALL_INSN; call call_internal
	to emit insn.
	(call_internal): New name for anonymous call.
	(call_value, call_value_internal): Likewise.

	* winnt/xm-winnt.h: Protect most definitions with #ifndef.
	* alpha/xm-winnt.h: Include alpha/xm-alpha.h, then winnt/xm-winnt.h.
	(POSIX): Undefine.
	* xm-alpha.h: Don't include alloca.h for winnt.

Sun May 28 18:34:01 1995  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* configure: Make sed commands more uniform.

	* Makefile.in: Properly use $(srcdir) for files that have it
	in their reference as a target of a rule.
	(libgcc1.a): Add missing RANLIB_TEST use.

	* stmt.c (expand_computed_goto): Call do_pending_stack_adjust.

Sun May 28 18:08:41 1995  Torbjorn Granlund  <tege@mole.gnu.ai.mit.edu>

	* m68k.md (divmodhi4, udivmodhi4): Use "dmsK" for operand 2.

Fri May 26 17:01:22 1995  Paul Eggert  <eggert@twinsun.com>

	* fixincludes: Fix bogus recursive <stdlib.h> in NEWS-OS 4.0C.

Fri May 26 08:02:14 1995  Michael Meissner  (meissner@cygnus.com)

	* c-typeck.c (initializer_constant_valid_p): For the CONSTRUCTOR
	case, if the type is a record, recurse, just like for unions.

Thu May 25 07:56:14 1995  Paul Eggert  <eggert@twinsun.com>

	* fixincludes: Add `sel', `tahoe', `r3000', `r4000' to the
	list of pre-ANSI symbols that need to be surrounded with __ __.
	Allow white space between `#' and `if' when looking for lines to patch.

	* objc/sarray.h (PRECOMPUTE_SELECTORS, struct soffset):
	Use #ifdef __sparc__, not sparc.

	* m68k.md (addsi_lshrsi_31, ashldi_const, ashrdi_const, lshrdi_const):
	Replace `mov' with `move'.

Thu May 25 07:35:37 1995  Allen Briggs  <briggs@rrinc.com>

	* libgcc2.c (L_eh, i386): Remove in-line comments in assembly
	code--the '#' character is not valid for the SYSV as.

Thu May 25 07:28:54 1995  Pat Rankin  (rankin@eql.caltech.edu)

	* Makefile.in (BC_ALL): Restore it from May 22 change; vms uses it.
	(STAGESTUFF): Use it.

Thu May 25 07:11:56 1995  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* alpha.c (alpha_emit_set_const): Don't call expand_binop for
	other than add if SImode and can't create pseudos.

Wed May 24 21:38:24 1995  Jim Wilson  <wilson@cygnus.com>

	* sched.c (reemit_notes): New function.
	(schedule_block): Call reemit_notes twice.  Reorganize code for
	handling SCHED_GROUP_P insns, so that reemit_notes works.

	* sh/sh.c (shiftcosts, genshifty_op): Add SH3 support.
	* sh/sh.md (ashlsi3, lshrsi3): Add SH3 support.
	(ashlsi3_d, ashrsi3_d, lshrsi3_d): New patterns for SH3.
	(ashrsi2_31): Remove r/!r constraint.

Wed May 24 17:00:47 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* tree.c (type_list_equal): Call simple_cst_equal before checking
        types.

Wed May 24 16:49:49 1995  Douglas Rupp  (drupp@cs.washington.edu)

	* Makefile.in (libgcc2.a): Handle case of separate srcdir.

Wed May 24 16:22:01 1995  Paul Eggert  <eggert@twinsun.com>

	* configure: Define $(MAKE) if `make' doesn't.

Wed May 24 15:50:51 1995  Doug Evans  <dje@cygnus.com>

	* dsp16xx.h (CROSS_LINK_SPEC): ENDFILE_SPEC moved to -nostartfiles.
	* i386/freebsd.h (LINK_SPEC): Don't pass "-e start" if nostartfiles
	rather than nostdlib.
	* i386/sun.h (LINK_SPEC): Likewise.
	* m68k/sun2o4.h (LINK_SPEC): Likewise.
	* m68k/sun3.h (LINK_SPEC): Likewise.
	* m68k/vxm68k.h (LINK_SPEC): Likewise.
	* mips/netbsd.h (LINK_SPEC): Likewise.
	* config/netbsd.h (LINK_SPEC): Likewise.
	* rs6000/mach.h (LINK_SPEC): Likewise.
	* sparc.h (LINK_SPEC): Likewise.
	* sparc/vxsparc.h (LINK_SPEC): Likewise.

	* m88k/m88k.h (FUNCTION_ARG_BOUNDARY): Use GET_MODE_BITSIZE.

Wed May 24 15:44:04 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* fold-const.c (fold): Make sure that a folded TRUTH_NOT_EXPR
        retains the same type.

	* c-common.c (truthvalue_conversion): Also accept TRUTH_NOT_EXPR.

Wed May 24 15:41:51 1995  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* cplus-dem.c (strstr, strncmp, strlen): Remove declarations.

	* tree.c (type_list_equal, simple_cst_list_equal, index_type_equal):
	Check for simple_cst_equal return value of -1.

Wed May 24 10:05:24 1995  Michael Meissner  <meissner@cygnus.com>

	* libgcc1-test.c (start, _start): Provide declarations, so that
	the GNU linker doesn't give a warning message about defaulting the
	start address.

	* rs6000/sysv4.h (STRIP_NAME_ENCODING): Redefine back to the
	original defination, rather than the defination used in rs6000.h.
	(ASM_OUTPUT_SOURCE_LINE): Use STRIP_NAME_ENCODING.
	* rs6000.h (STRIP_NAME_ENCODING): Skip leading '*'.

	* rs6000.h (MASK_STRING_SET, TARGET_STRING_SET): Add target
	flags bit for whether -mstring was actually used.
	(TARGET_SWITCHES): Add MASK_STRING to all power targets.  Set
	MASK_STRING_SET for -mstring and -mno-string.
	(TARGET_DEFAULT): Add MASK_STRING.

	* rs6000.c (rs6000_override_options): Add MASK_STRING to
	all power targets.  Make an explicit -mstring/-mno-string override
	the -mcpu=processor default.

	* rs6000/eabile.h (CPP_SPEC): Copy from sysvle.h to provide the
	appropriate little endian defaults.

	* rs6000/sysv4.h (ASM_OUTPUT_SOURCE_LINE): Use assemble_name to
	output the canonical name.

Wed May 24 01:21:15 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* rs6000.h (STRIP_NAME_ENCODING): Define.
	(RS6000_OUTPUT_BASENAME): Use it.

Tue May 23 19:54:21 1995  Doug Evans  <dje@cygnus.com>

	* gcc.c (link_command_spec): Move ENDFILE_SPEC from -nostdlib
	to -nostartfiles.

Tue May 23 17:01:50 1995  Jim Wilson  <wilson@cygnus.com>

	* alpha.md (negsi2-2): Change output pattern to #.

	* mips.c (embedded_pic_offset): Output RTL to initialize
	embedded_pic_fnaddr_rtx.
	(mips_finalize_pic): Delete.
	* mips.h (mips_finalize_pic): Delete declaration.
	(FINALIZE_PIC): Delete.
	(INIT_EXPANDERS): Clear embedded_pic_fnaddr_rtx.
	* mips.md (get_fnaddr): Add = to output contraint.

	* sh.c (shift_amounts): Correct entry for shifts by 29.
	* sh.md (sett): New pattern.
	(movsi_i): Change source constraint for move to T reg to be 'z'.

	* mips/ecoff.h (STARTFILE_SPEC): Define to null string.
	* mips/elfl.h, mips/elfl64.h: Correct typo in comment.

	* mips/elflorion.h, mips/elforion.h (MIPS_CPU_DEFAULT): Delete.
	* mips.c (override_options): Delete #ifdef MIPS_CPU_DEFAULT code.
	Add #ifdef MIPS_CPU_DEFAULT_STRING code before the first
	mips_cpu_string test.

Tue May 23 07:22:36 1995  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* romp.c (hash_rtx): Avoid warning on int-to-pointer conversion.
	(output_fpops): Cast args to bcopy to char *.

	* cpplib.c (initialize_builtins): Add missing parm to timestamp call.

	* Makefile.in (install-libobjc): Don't depend on libobjc.a.

	* c-parse.in: Objc shift/reduce conflicts now 48.
	(parm): Use setspecs/restore here.
	(parmlist_or_identifiers): Not here.

Mon May 22 19:30:30 1995  Doug Evans  <dje@cygnus.com>

	* h8300.md (movsf_h8300h): Add missing post-inc case to constraints.

Mon May 22 14:38:36 1995  Michael Meissner  <meissner@cygnus.com>

	* rs6000.c (rs6000_override_options): Do SUBTARGET_OVERRIDE_OPTIONS
	here.
	* rs6000.h (OVERRIDE_OPTIONS): Not here.

	* rs6000.c (expand_block_move): Handle moves without string
	instructions by generating a series of loads and stores.
	(output_prolog): Support -mno-toc on V.4 and eabi systems.

	* rs6000/sysv4.h (TARGET_SWITCHES): Add -mtoc and -mno-toc.
	(SUBTARGET_OVERRIDE_OPTIONS): Add some warnings for incompatible
	switches.
	(TOC_SECTION_FUNCTION): Make -mno-toc like -mrelocatable in that
	we don't put the minimal toc pointer in the global toc section.
	(LINK_SPEC): Use -oformat to set link output format, not -m.

	* rs6000/t-eabigas (MULTILIB_OPTIONS, MULTILIB_DIRNAMES): Build
	libgcc.a variants with -mno-toc support.
	* rs6000/t-ppcgas (MULTILIB_OPTIONS, MULTILIB_DIRNAMES): Ditto.

Mon May 22 07:10:52 1995  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* cplus-dem.c (mystrstr): Replacement for strstr.

	* configure: Split up long sed command.
	* Makefile.in (SYMLINK): Deleted; unused.
	(oldobjext): Deleted; no longer used.
	(FLAGS_TO_PASS): Include objext and exeext.
	(STAGESTUFF, protoize.o, unprotoize.o): Use $(objext), not .o.
	(test_protoize_simple, compare{,3}, gnucompare{,3}): Likewise.
	(STAGESTUFF, specs, gcc-cross, collect2): Add missing $(exeext).
	(libgcc1.null, libgcc[12].a, stage[1-4]): Likewise.
	(xgcc, cc1, cc1obj, enquire): Use $@ instead of filename for -o value.
	(collect2, mips-tfile, mips-tdump, gen*): Likewise.
	(bi-arity, bi-opcode, bi-opname, cccp, cppmain): Likewise.
	(protoize, unprotoize, gen-protos, fix-header): Likewise.
	(crtbegin.o, crtend.o): Don't use -o; move output to proper
	filename (using objext) instead.
	(BI_ALL, BC_ALL, bytecode): Deleted; unused.
	(bi-*.o, cexp.o, stamp-{proto,fixinc}): Remove unneeded $(srcdir).
	(getopt{,1}.o, SYSCALLS.c.X): Likewise.
	(install-driver): New target.
	(install-normal): Depend on it.
	(install-common): Don't depend on xgcc.
	(maketest): Deleted; no longer used.
	(stage[1-4]): Use name collect-ld, not real-ld.
	(risky-stage[1-4]): Use stage[1-4] as dependencies; don't copy.
	* alpha/config-nt.bat, i386/config-nt.bat: Make {,h,t}config.h
	and tm.h by writing a single #include line.
	Update way specs.h and options.h are written.
	* alpha/config-nt.sed, i386/config-nt.sed: Set new variables
	into Makefile.
	Build winnt.obj.
	Edit CCCP definition.
	* alpha/x-winnt, i386/x-winnt (oldobjext): Deleted.
	Add rules for .c.obj, .adb.obj, and .ads.obj.
	(LIB2FUNCS_EXTRA, spawnv.o): New rules.
	* i386/x-winnt (objext): Now .obj, not .o.

	* gcc.c (HAVE_OBJECT_SUFFIX): New macro.
	(process_command): Convert x.o to x.foo for OBJECT_SUFFIX of ".foo".
	(do_spec_1): Avoid shadow variable "i" and always use for loop var.

	* c-decl.c (finish_decl_top_level): Removed; no longer used.
	* objc-act.c: Numerous formatting changes.
	(NULLT): Deleted; all uses changed to NULL_TREE.
	(get_{static,object}_reference, objc_add_static_instance):
	Use push_obstacks instead of saving obstacks manually.
	(build_{selector,class}_reference_decl): Likewise.
	(build_objc_string_decl, build_protocol_reference): Likewise.
	(comp_{method,proto}_with_proto): Likewise.
	(create_builtin_decl, synth_module_prologue): Set DECL_ARTIFICIAL
	for internal objects.
	(build_{selector,class}_reference_decl, add_objc_decls): Likewise.
	(generate_objc_symtab_decl, build_module_descriptor): Likewise.
	(build_protocol_reference): Likewise.
	(build_objc_string_decl, synch_forward_declarations): Likewise.
	Delete call to end_temporary_allocation.
	(generate_static_references, generate_strings): Likewise.
	(build_selector_translation_table, generate_category): Likewise.
	(generate_{ivars,protocol}_list, build_protocol_reference): Likewise.
	(build_objc_string_object): If next_runtime, put everything in
	permanent obstack.
	(objc_add_static_instance): Use build_decl instead of start_decl
	and finish_decl_top_level.
	(build_{class_reference,objc_string}_decl): Clear DECL_CONTEXT.
	(start_class): Exit with FATAL_EXIT_CODE, not 1.
	(add_objc_decls): Don't set DECL_IN_SYSTEM_HEADER.

	* tree.c (valid_machine_attribute): Handle attribute on
	pointer-to-function types.

Sun May 21 17:16:37 1995  J. T. Conklin <jtc@cygnus.com>

	* mips/netbsd.h (HAVE_STRERROR): Remove.
	* mips/xm-netbsd.h: New file.
	* mips/t-mips-netbsd: Deleted.
	* configure (mips-dec-netbsd): Use xm-netbsd.h and t-libc-ok.

Sun May 21 17:16:37 1995  Arne H. Juul  (arnej@pvv.unit.no)

	* mips/netbsd.h: Use __start as entry point. Ifdef some
	paths on CROSS_COMPILE.

Sun May 21 08:39:26 1995  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* c-parse.in (datadef, fndef, ivar_decl, mydecls):
	Restore declspec_stack since setspecs is used.
	(parmlist_or_identifiers): Use setspecs before parsing parms
	and restore after parsing parms.

Sun May 21 01:04:52 1995  Jeffrey A. Law  <law@snake.cs.utah.edu>

	* pa.c (hppa_encode_label): New variable "permanent" to
	where/how memory is allocated for the new label.  All
	callers changed.

Sat May 20 16:53:30 1995  Mike Meissner  <meissner@cygnus.com>

	* rs6000.md (insv, extz): Fail if the structure is QI or HI reg to
	avoid paradoxical subreg's being created in RTL phase, which uses
	SImode to load from memory if  structure is later moved to stack.

Sat May 20 06:44:59 1995  Philippe De Muyter (phdm@info.ucl.ac.be)

	* m68k.md (udivmodhi4): Output "divu" instead of "divs".

Sat May 20 06:11:32 1995  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* reload.c (push_reload): Don't reload inside a SUBREG
	when SUBREG_WORD is nonzero.

	* c-decl.c (shadow_tag_warned): Don't warn about useless keyword
	if in system header file.

	* tree.c (simple_cst_equal): Don't look at language-specific
	nodes since we don't know what's in them.

	* cpperror.c: #include config.h before any other .h file.
	* collect2.c: Likewise.

	* i386/config-nt.bat: Add missing ^M on two lines.
	Add case for Fortran; fix typo in Ada case.
	* alpha/config-nt.bat: Add case for Fortran; fix typo in Ada case.

	* m68k/t-next (LIBGCC1, CROSS_LIBGCC1): Make not, not "libgcc1.null".
	(OTHER_FIXINCLUDES_DIRS, LIMITS_H_TEST): Delete from here.
	* m68k/x-next (OTHER_FIXINCLUDES_DIR, LIMITS_H_TEST): Move to here.

Fri May 19 19:30:20 1995  Stan Cox  (gcc@dg-rtp.dg.com)

      * crtstuff.c: Added reference to INIT_SECTION_PREAMBLE for systems that
      do something which must be undone prior to __do_global_ctors.

Fri May 19 19:27:08 1995  Alan Modra  <alan@SPRI.Levels.UniSA.Edu.Au>

	* i386/linux-aout.h (CPP_SPEC): Add defines for -fPIC.
	* i386/linux-oldld.h (CPP_SPEC): Likewise.

Fri May 19 17:46:28 1995  Philippe De Muyter (phdm@info.ucl.ac.be)

	* collect2.c (strstr): Deleted.
	* cplus-dem.c (strstr): Define ifndef POSIX.

Fri May 19 11:16:51 1995  Per Bothner  <bothner@kalessin.cygnus.com>

	* cpplib.c (collect_expansion):  Don't escape '@' inside string.

Fri May 19 06:59:21 1995  Pat Rankin  (rankin@eql.caltech.edu)

	* vmsconfig.com (process_objc_lib, configure_makefile): New routines.
	(bc_all.list, ./vax.md, objc-objs.opt, objc-hdrs.list): New files
	created at config time.
	(bc_all.opt, ./md.): No longer created.
	* make-cc1.com: Handle revised filenames from vmsconfig.com;
	(DO_OBJCLIB): New variable, plus code to compile objc/*.{c,m}.

Wed May 17 16:15:31 1995  Torbjorn Granlund  <tege@cygnus.com>

	* i960.c (i960_output_ldconst): New code for XFmode.
	Also, move SFmode code to immediately after DFmode code.
	(S_MODES, D_MODES): Handle XFmode.
	(XF_MODES): Was TF_MODES, handle XFmode instead of TFmode.
	(hard_regno_mode_ok): Replace TFmode with XFmode.
	(i960_output_long_double): New function.

	* i960.h (DATA_ALIGNMENT): Define.
	(ROUND_TYPE_ALIGN): Align XFmode scalars at 128 bit boundaries.
	(ROUND_TYPE_SIZE): Round up the size of XFmode objects to 128 bits.
	(CONST_DOUBLE_OK_FOR_LETTER_P): Use CONST0_RTX and CONST1_RTX
	so that all FP modes are recognized.
	(ASM_OUTPUT_LONG_DOUBLE): Define.

	* i960.md: Change all TFmode patterns to have XFmode.
	(movxf recognizer, frame version): Use movt, ldt, and stt.
	(movxf recognizer, non-frame version): Delete.
	(extenddfxf2): Delete * before f constraint.
	(extendsfxf2): Likewise.

Wed May 17 17:53:35 1995  Jim Wilson  <wilson@mole.gnu.ai.mit.edu>

	* unroll.c (unroll_loop): Increment copy_start_luid if copy_start
	is loop_start.

Wed May 17 17:44:57 1995  Lee Iverson  <leei@Canada.AI.SRI.COM>

	* fold-const.c (invert_truthvalue, case CLEANUP_POINT_EXPR): New case.

Tue May 16 18:51:16 1995  Michael Meissner  <meissner@cygnus.com>

	* rs6000/rs6000.h (TARGET_SWITCHES): Add -mstring to enable string
	instructions, and -mno-string to disable them.
	(MOVE_MAX): Don't test TARGET_MULTIPLE anymore.
	(MAX_MOVE_MAX): Set to 8, not 16.
	(expand_block_move): Add declaration.

	* rs6000/rs6000.c (expand_block_move): New function to expand
	block moves when -mstring is used.

	* rs6000/rs6000.md (movti): Use TARGET_STRING, not TARGET_MULTIPLE.
	(load_multiple, store_multiple): Ditto.
	(string insns): Add 8, 6, 4, 2, and 1 register variants for using
	the native string instructions if -mstring.

	* rs6000/sysv4.h (CPP_SPEC): If little endian, define
	_LITTLE_ENDIAN and set littleendian assertion.  If big endian,
	define _BIG_ENDIAN and set bigendian assertion.
	* rs6000/sysv4le.h (CPP_SPEC): Copy from sysv4.h, and change
	default to little endian.

	* rs6000/rs6000.c (override_options): Check for -mmultiple and
	-mstring on little endian systems here.
	* rs6000/sysv4.h (SUBTARGET_OVERRIDE_OPTIONS): Don't do the check
	here.

Tue May 16 18:36:41 1995  Douglas Rupp  (drupp@cs.washington.edu)

	* alpha.c: Changed WINNT to _WIN32.
	* alpha/config-nt.bat, i386/config-nt.bat: Added commands to
	generate specs.h and options.h.
	* i386/config-nt.sed: Changed link32 to link.
	* winnt/ld.c (main): Removed call to free.
	* configure.bat: Added line to echo usage on invalid input.
	* gcc.c (fix_argv): Removed call to free.
	* gcc.c, getpwd.c, protoize.c, sdbout.c: Changed WINNT to _WIN32.
	* toplev.c: Likewise.

Tue May 16 18:04:47 1995  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* toplev.c (pfatal_with_name, fatal_io_error, vfatal):
	Use FATAL_EXIT_CODE instead of magic number.
	* cccp.c, cpplib.c, cpplib.h: Use FATAL_EXIT_CODE instead
	of FAILURE_EXIT_CODE.
	* fix-header.c, gen-protos.c: Likewise.
	* cpperror.c, cppmain.c: Likewise.
	Include config.h #ifndef EMACS.
	* xm-alpha.h, xm-rs6000.h, xm-vms.h (FAILURE_EXIT_CODE): Remove.

Tue May 16 17:46:57 1995  Adam Fedor  <fedor@colorado.edu>

	* objc/archive.c (__objc_write_class): Write class version.
	(__objc_write_selector, objc_{write,read}_selector): Handle null
	selector.

        * objc/sarray.h (struct sarray): Make capacity size_t.
        * objc/sarray.c (sarray_realloc): Make array index variables size_t.

Tue May 16 06:59:08 1995  Paul Eggert  <eggert@twinsun.com>

	* dsp16xx.c (print_operand_address): Fix misspellings in messages.
	* i370/mvs.h (FUNCTION_PROFILER): Likewise.
	* mips-tdump.c (type_to_string): Likewise.
	* print-tree.c (print_node): Likewise.

	* protoize.c (edit_fn_definition): Fix mispelled local `have_flotsam'.

	* objc/sendmsg.c (__objc_init_install_dtable): Fix misspelling
	in name of local label `already_initialized'.

	* winnt/winnt.h (STDC_VALUE): Was misspelled.

	* m68k/ccur-GAS.h (FUNCTION_BOUNDARY): Was misspelled.

	* 1750a.h (DEFAULT_PCC_STRUCT_RETURN): Was misspelled.

Mon May 15 23:41:25 1995  Jeffrey A. Law  <law@snake.cs.utah.edu>

	* pa.h (ASM_OUTPUT_EXTERNAL_LIBCALL): Make sure to encode section
	info for all libcalls.

Mon May 15 20:58:00 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* collect2.c (strstr): Define ifndef POSIX.

	* defaults.h (SUPPORTS_WEAK): Provide default.
	* aoutos.h, sparc/sunos4.h: Don't support weak symbols.
	* netbsd.h, svr4.h, i386/freebsd.h, i386/osfrose.h,
        m88k/m88k.h: Define ASM_WEAKEN_LABEL instead of WEAK_ASM_OP.
	* c-pragma.h: Check ASM_WEAKEN_LABEL instead of WEAK_ASM_OP.
        HANDLE_PRAGMA_WEAK is never defined in a tm.h file.
	* c-decl.c (duplicate_decls): Propagate DECL_WEAK.
	* tree.h (DECL_WEAK): New macro.
	(tree_decl): Add weak_flag.
	* varasm.c (assemble_start_function): Declare the symbol weak if
	appropriate.
	(assemble_variable): Ditto.
	(assemble_alias): Ditto.  Mark the decl as written.
	(declare_weak): Check for weak declaration after definition.
	Set DECL_WEAK.
	(weak_finish): Use ASM_WEAKEN_LABEL.
	* libgcc2.c: The C++ free-store management functions are weak
        aliases on targets that always support them.

Mon May 15 19:01:43 1995  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* configure (out_object_file): New variable; put value in Makefile.
	* Makefile.in (out_object_file): Use in place of aux-output.o.

	* fold-const.c (const_binop): Don't pass OVERFLOW to force_fit_type
	if type is unsigned.

Mon May 15 18:48:26 1995  Paul Eggert <eggert@twinsun.com>

        * install.sh (transformbasename): Fix misspelling.

	* tahoe.h (CHECK_FLOAT_VALUE): Fix misspelling of OVERFLOW parameter.

	* i386.h (VALID_MACHINE_{DECL,TYPE_ATTRIBUTE): Fix typo.

	* fx80.h (CHECK_FLOAT_VALUE): Fix misspelled use of parameter.

	* a29k.c (spec_reg_operand): Fix misspelling of `default:'.

Mon May 15 18:36:41 1995  Philippe De Muyter (phdm@info.ucl.ac.be)

	* m68k.md (b{eq,ne,ge,lt}0_di): Fixed for non-MOTOROLA syntax.
	* m68k/xm-mot3300.h (alloca): Extern decl added for non-GNU compiler.

Mon May 15 13:14:29 1995  Per Bothner  <bothner@kalessin.cygnus.com>

	* cppexp.c (cpp_reader):  Test for '#' (start of assertion) *after*
	skipping hspace, not before.

Mon May 15 08:13:54 1995  Pat Rankin  (rankin@eql.caltech.edu)

	* vmsconfig.com: Construct options.h and specs.h to #include
	all "*/lang-{options|specs}.h" files found.

Sun May 14 21:32:49 1995  Doug Evans  <dje@cygnus.com>

	* alpha/alpha.md (movsicc, case NE): Don't generate unrecognizable
	insn.
	(movdicc, case NE): Likewise.

Sun May 14 15:44:54 1995  Jim Wilson  <wilson@mole.gnu.ai.mit.edu>

	* unroll.c (unroll_loop): Make local_regno have size
	max_reg_before_loop.  Don't do local register optimization if
	copy_end has no INSN_LUID.

Sun May 14 10:38:23 1995  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* objc-act.c (start_method_def): Mark _self as possibly unused.

	* configure: Create specs.h and options.h from */lang-specs.h
	and */lang-options.h.
	Set lang_specs_files and lang_options_file variables in Makefile.
	* Makefile.in (lang_{specs,options}_files): New variables.
	(gcc.o): Depends on $(lang_specs_files).
	(toplev.o): Depends on $(lang_options_file); merge two dep lists.
	(distclean): Remove spes.h and options.
	* gcc.c (default_compilers): Remove entries for Ada, C++, Chill,
	and Fortran; #include specs.h instead.
	* toplev.c (lang_options): Remove entries for Ada, C++, and Fortran;
	include options.h instead.

Sat May 13 23:11:21 1995  DJ Delorie  <dj@delorie.com>

	* configure (i[345]86-go32-msdos, i[345]86-*-go32): New targets.

Sat May 13 10:58:38 1995  Jim Wilson  <wilson@cygnus.com>

	* loop.c (record_giv): When computing replaceable, use
	back_branch_in_range_p instead of looking for branches to named
	labels.
	* loop.h (back_branch_in_range_p): Declare.
	* unroll.c (back_branch_in_range_p): No longer static.

Sat May 13 06:47:11 1995  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* combine.c (simplify_shift_count, case LSHIFTRT): Don't merge
	shifts of different modes if first is any right shift.

Sat May 13 05:39:09 1995  Richard Earnshaw (rearnsha@armltd.co.uk)

	* configure (arm-semi-aout): New configuration.
	* config.sub: Add support for semi-hosted ARM.
	* arm/t-semi, arm/semi.h: New files.

Fri May 12 21:51:22 1995  Doug Evans  <dje@cygnus.com>

	* flow.c (find_basic_blocks): Only perform n_basic_blocks sanity
	check on first pass, and on second pass ensure it has the correct
	value.

Fri May 12 19:23:11 1995  Jim Wilson  <wilson@cygnus.com>

	* c-typeck.c (build_binary_op): Warn when ~unsigned is compared
	against unsigned, and type promotions result in an unexpected
	answer.

Fri May 12 19:10:21 1995  Roland McGrath  <roland@churchy.gnu.ai.mit.edu>

	* configure (*-*-gnu*): Always use ELF; set tm_file=${cpu_type}/gnu.h.
	* config/i386/gnu.h: Contents replaced with old i386/gnuelf.h.
	* config/i386/gnuelf.h: File removed.

Fri May 12 17:29:57 1995  Ken Raeburn  (raeburn@cygnus.com)

	* m68k/lb1sf68.asm (__IMMEDIATE_PREFIX__): Default to #.
	(IMM): New macro.
	(all code): Use IMM macro instead of hardcoding # for immediate
	operands.

Fri May 12 16:52:10 1995  Philippe De Muyter (phdm@info.ucl.ac.be)

	* m68k.c (output_scc_di): New function.
	(extend_operator) : Allow DImode target.
	* m68k.h (HARD_REGNO_MODE_OK): Don't allow d7/a0 as DImode reg pair.
	* m68k.md (tstdi, cmpdi, addsi_lshrsi_31, ashldi_extsi): New patterns.
	(extendqidi2, extendhidi2, extendsidi2): Allow "general_operand"
	instead of "register_operand" 0.
	(adddid_sexthishl32, subdid_sexthishl32, subdi_dishl32): Likewise.
	(adddi_dilshr32): Operand 0 constraint changed from "ro" to "do";
	Code generation fixed.
	(adddi_mem, subdi_mem): Fixed for "<" and ">" operand 0.
	(adddi3, subdi3): Operand 2 constraint changed from "ao" to "*ao"
	(ashldi_sexthi, ashrdi_const32): Allow only "register_operand"
	instead of "general_operand" 0.
	(ash[lr]di_const, ash[lr]di3): Allow also 8 and 16 as shift count.
	(subreg1ashrdi_const32): Pattern deleted.
	(subreghi1ashrdi_const32, subregsi1ashrdi_const32): New pattern.
	(lshrsi_31): New implementation.
	(scc0_di, scc_di, beq0_di, bne0_di, bge0_di, blt0_di): New patterns.

Fri May 12 16:50:49 1995  Jeffrey A. Law  <law@mole.gnu.ai.mit.edu>

	* pa.md (bb patterns): Fix bugs in length computation exposed by
	recent branch shortening and genattrtab changes.

Fri May 12 16:22:27 1995  Ken Raeburn  <raeburn@cygnus.com>

	* cccp.c (enum node_type): Add T_IMMEDIATE_PREFIX_TYPE.
	(special_symbol): Handle it; emit value of IMMEDIATE_PREFIX.
	(IMMEDIATE_PREFIX): Default to empty string.
	(initialize_builtins): Install __IMMEDIATE_PREFIX__ builtin,
	parallel to __REGISTER_PREFIX__.

Fri May 12 14:40:03 1995  Pat Rankin  (rankin@eql.caltech.edu)

	* cccp.c: #if VMS, don't define `stat' macro to be VMS_stat.
	Compare enums explicitly to 0 to work around VAX C bug.
	(do_include): Cast alloca's value.

	* make-cc1.com (bc_loop): Process comma-separated list rather
	than space-separated one; restore .h suffix stripped by vmsconfig;
	(loop1): More robust handling of directory prefix on file names.
	* vmsconfig.com (TPU makefile.in): Reorganize and reformat code.
	Make generated .opt files have more consistent format (all comma
	separated, excess whitespace eliminated);
	(additional_compiler): New routine.
	(process_makefile): Use it to handle cc1plus via cp/Make-lang.in.

Fri May 12 13:35:07 1995  Doug Evans  <dje@cygnus.com>

	* arm.h: Replace ARM_REG_PREFIX with REGISTER_PREFIX.
	Replace ARM_COMMENT_CHAR with ASM_COMMENT_START.
	(REGISTER_PREFIX): Define.
	(USER_LABEL_PREFIX, LOCAL_LABEL_PREFIX): Define.
	(SECONDARY_OUTPUT_RELOAD_CLASS): Handle DFmodes only if
	TARGET_HARD_FLOAT.
	(PREDICATE_CODES): Add soft_df_operand.
	* arm.c: Replace ARM_REG_PREFIX with REGISTER_PREFIX.
	Replace ARM_COMMENT_CHAR with ASM_COMMENT_START.
	(arm_asm_output_label): Use USER_LABEL_PREFIX.
	(soft_df_operand): New function.
	* arm.md (movsicc): New pattern.
	(movsfcc, movdfcc, *movsicc_insn, *movsfcc_hard_insn): Likewise.
	(*movsfcc_soft_insn, *movdfcc_insn): Likewise.
	(*movdf_soft_insn): Rewrite.
	(movsi matcher): Fix typo in type attribute.

Fri May 12 10:25:40 1995  Michael Meissner  (meissner@cygnus.com)

	* i386.h (TARGET_RTD): Use MASK_RTD, not MASK_REGPARM.
	(TARGET_SWITCHES): Add -m{,no-}align-double switch.
	(TARGET_OPTIONS): Add -mregparm= switch to set number of registers
	to use for passing arguments.  Add -malign-loops= switch to set
	the alignment for loops.  Add -malign-jumps= switch to set the
	alignment for code that is jumped to.  Add -malign-functions=
	switch to set the initial alignment of functions.
	(TARGET_REGPARM): Delete, in favor of -mregparm=
	(TARGET_SWITCHES): Delete -mregparm, add -mdebug-arg switches.
	(RETURN_POPS_ARGS): Call i386_return_pops_args to do the real work.
	(VALID_MACHINE_DECL_ATTRIBUTE): Define as function call.
	(VALID_MACHINE_TYPE_ATTRIBUTE): Define as function call.
	(COMP_TYPE_ATTRIBUTES): Define as function call.
	(REGPARM_MAX): Maximum number of regs to use for passing arguments.
	(CUMULATIVE_ARGS): Make this a structure, not an int.
	(INIT_CUMULATIVE_ARGS, FUNCTION_ARG{,_ADVANCE}): Call function.
	(FUNCTION_ARG_PARTIAL_NREGS): Likewise.
	(MAX_CODE_ALIGN): Maximum value to align loops/jumps to.
	(BIGGEST_ALIGNMENT): Return 64 if -malign-double, 32 otherwise.
	(ASM_OUTPUT_ALIGN_CODE): Use value of -malign-jumps= switch.
	(ASM_OUTPUT_LOOP_ALIGN): Use value of -malign-loops= switch.
	(toplevel): Declare all new functions and external variables added
	in i386.c.

	* i386.c (i386_regparm_string, i386_regparm): New variables
	for -mregparm= switch to set the number of registers to use for
	passing arguments.
	(i386_align_loops_string, i386_align_loops): New variables for
	-malign-loops= switch to set alignment to use for loops.
	(i386_align_jumps_string, i386_align_jumps): New variables for
	-malign-jumps= switch to set alignment to use for labels that are
	jumped to.
	(override_options): Support new switches.
	(i386_valid_decl_attribute_p): New function to validate decl
	specific attributes.  Presently returns 0.
	(i386_valid_type_attribute_p):  New function to validate type
	specific attributes.  Recognize "stdcall", which says function
	with fixed numbers of arguments is responsible for popping stack,
	"cdecl", which says to use the normal C calling sequence, even if
	-mrtd is used, and "regparm", which specifies the number of
	registers to use for passing arguments.
	(i386_comp_type_attributes): New function, to validate whether
	attributes are compatible.
	(i386_return_pops_args): New function, to return whether or not
	the function pops its argument list or not, taking into account
	-mrtd, and the stdcall/cdecl attributes.
	(init_cumulative_args): Rewrite as a function, taking variable
	argument functions, and regparm support into account.
	(function_arg{,_advance,_partial_nreg}): Likewise.
	(print_operand): Support %J, to print appropriate jump insn.

	* i386.md (decrement_and_branch_until_zero): Define pattern,
	so that loops that count down to zero, don't have an unneeded
	compare after the decrement.  Add a general insn recognizer for
	add to a value and compare against zero.

	* i386/go32.h, i386/winnt.h (VALID_MACHINE_DECL_ATTRIBUTE):
	Delete, code folded into the mainline.
	(RETURN_POPS_ARGS): Likewise.

	* i386/winnt.h (ENCODE_SECTION_INFO): The stdcall attribute is now
	stored on the type field, rather than the decl.

	* i386/gas.h (ASM_OUTPUT_ALIGN_CODE, ASM_OUTPUT_LOOP_ALIGN): Use
	i386_align_{loops,jumps} variables to do alignment.
	* i386/osfrose.h, i386/svr3dbx.h: Likewise.

Fri May 12 12:48:19 1995  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* stor-layout.c (layout_type, case ARRAY_TYPE): Compute length using
	MAX of length and zero if sizetype signed and neither bound constant.

	* i386/gnuelf.h, i386/linux-oldld.h, i386/lynx-ng.h, i386/v3gas.h:
	Use <...> in #include instead of "...".
	* m68k/lynx-ng.h, sparc/lynx-ng.h: Likewise.

	* c-parse.in (myparm): Handle attributes.
	* objc-act.c (unused_list): New variable.
	(build_tmp_function_decl): Call push_parm_decl with new format.
	(start_class): Initialize unused_list.
	(start_method_def): Call push_parm_decl with new format and
	mark _cmp as possibly unused.

	* combine.c (simplify_shift_const): Don't change SHIFT_MODE
	for LSHIFTRT either.

	* unroll.c (unroll_loop): Don't move reg if used in copy_end and
	that is a JUMP_INSN.

Fri May 12 12:31:37 1995  Doug Evans  <dje@cygnus.com>

	* arm/lib1funcs.asm: New file.

Fri May 12 11:52:03 1995  Kung Hsu  <kung@cygnus.com>

	* configure (a29k-*-vxworks*): New target.
	* config.sub (vxworks29k): New alias.
	* a29k/t-vx29k: New file.
	* a29k/vx29k.h: New file.

Fri May 12 11:17:28 1995  Jim Wilson  <wilson@mole.gnu.ai.mit.edu>

	* loop.c (check_dbra_loop): When reversing loop when
	no_use_except_counting is false, there must be only one biv.

Fri May 12 07:10:00 1995  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* unroll.c (unroll_loop): Only use local_regno for pseudos.

	* genattrtab.c (write_test_expr, case MATCH_DUP): Use operands[N]
	instead of JUMP_LABEL (which may not be set).
	(walk_attr_value, case MATCH_DUP): Set must_extract.

	* c-parse.in: Adjust number of shift/reduce conflicts.
	(parm): Support attributes.
	* c-decl.c (push_parm_decl): Pass any attributes to decl_attributes.

Fri May 12 00:36:26 1995  Per Bothner  <bothner@kalessin.cygnus.com>

	* cpplib.c (skip_quoted_string):  Removed - no longer needed.
	(skip_if_group):  Use cpp_get_token instead of skip_quoted_string.

	* cpplib.h (struct cpp_reader):  Remove start_line field.
	Add multiline_string_line field.

	* cpplib.c (cpp_error_with_line, cpp_warning_with_line,
	cpp_pedwarn_with_line):  Take extra column number parameter.
	(macroexpand, cpp_get_token):  Fix reporting of unterminated strings.
	(line_for_error):  Removed - no longer needed.

Fri May 12 02:21:34 1995  Jim Wilson  <wilson@cygnus.com>

	* mips/svr4-t.h (MD_STARTFILE_PREFIX, MD_EXEC_PREFIX,
	STARTFILE_SPEC, LINK_SPEC): Define.
	* configure (mips-tandem-sysv4): Use t-mips not t-svr4.

Thu May 11 19:18:54 1995  Per Bothner  <bothner@kalessin.cygnus.com>

	* cpplib.c (line_for_error):  Make it work; add extra parameter.
	(skip_quoted_string, cpp_get_token):  Update calls to line_for_error.
	(macroexpand):  Remember initial line so we can report it if the
	call is unterminated.  Also, simplify error logic slightly.
	(do_include):  Cast alloca return value, to avoid pcc warning.

	* cppexp.c (parse_number):  Cleanup some Cygnus crud for MPW.

Thu May 11 21:35:23 1995  Torbjorn Granlund  <tege@cygnus.com>

	From Moshier:
	* i960.c (i960_output_ldconst): Let split_double handle DImode.
	(i960_print_operand): Use REAL_VALUE_TO_DECIMAL for decimal strings.
	(i960_output_double, i960_output_float):  Likewise; also change arg
	VALUE from `double' to `REAL_VALUE_TYPE'.

Thu May 11 21:09:25 1995  Per Bothner  (bothner@wombat.gnu.ai.mit.edu)

	* cpperror.c (cpp_print_containing_files):  Remove some
	Cygnus-local stuff.

Thu May 11 21:06:47 1995  Doug Evans  <dje@canuck.cygnus.com>

	* gcc.c (link_command_spec): Make -nostdlib no longer imply
	-nostartfiles.

Thu May 11 18:48:57 1995  Paul Eggert  <eggert@twinsun.com>

	* c-common.c (convert_and_check): Don't diagnose overflow in constant
	expression merely because conversion overflowed.

Thu May 11 18:43:59 1995  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* c-decl.c (grokdeclarator): Use PARM_FLAG to see if should
	make PARM_DECL.
	* c-parse.in (nested_function, notype_nested_function):
	Allow old-style arg definitions (use xdecls).

	* c-decl.c (finish_struct): Properly update DECL_PACKED.

Thu May 11 15:24:15 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* fold-const.c (fold): Also fold CLEANUP_POINT_EXPRs into
        TRUTH_*_EXPRs and into the first operand.
	(operand_equal_for_comparison_p): Also make sure the second operand
	is integral.

Thu May 11 14:22:03 1995  Ted Lemon  <mellon@toccata.fugue.com>

	* config/mips/netbsd.h: New file.
	* config/mips/t-mips-netbsd: New file.
	* config/mips/x-netbsd: New file.

	* configure (mips-dec-netbsd*): Add entry.

	* mips.h (LOCAL_LABEL_PREFIX, USER_LABEL_PREFIX): Define.
	(PUT_SDB_BLOCK_START, PUT_SDB_BLOCK_END, ASM_OUTPUT_LABEL_REF,
	ASM_OUTPUT_INTERNAL_LABEL, ASM_GENERATE_INTERNAL_LABEL,
	ASM_OUTPUT_ADDR_VEC_ELT, ASM_OUTPUT_ADDR_DIFF_ELT): Use them.

	* mips.c (mips_output_lineno): Use LOCAL_LABEL_PREFIX.

Thu May 11 14:22:03 1995  Stan Cox  (gcc@dg-rtp.dg.com)

	* dwarfout.c (output_decl): Don't output DIE for struct or union type
	with no name or with ERROR_MARK for the fields.

Thu May 11 06:36:34 1995  Michael Meissner  (meissner@cygnus.com)

	* flow.c (mark_used_regs): If a SUBREG does not have a REG in the
	SUBREG_REG position, recursively call mark_used_regs, instead of
	segfaulting.

Thu May 11 06:44:34 1995  Pat Rankin  (rankin@eql.caltech.edu)

	* expr.c (do_jump, case EQ_EXPR, NE_EXPR): Fix typo for complex.

Wed May 10 12:34:46 1995  Michael Meissner  <meissner@cygnus.com>

	* configure: Add support for the little endian variant of the
	PowerPC System V.4 and Eabi targets.  If the GNU assembler was not
	specified, don't build libgcc.a variants on the PowerPC systems
	that use -mrelocatable, -mlittle, and -mbig.

	* genmultilib: For MULTILIB_MATCHES arguments, map question marks
	into equal signs after spliting the left and right side of
	equivalent options, to all support for options like: -mcpu=403.

	* rs6000/rs6000.md (rs6000_immed_double_const): New function that
	is like immed_double_const, except that it reverses the two words
	in the constant if the target is little endian.

	* rs6000/rs6000.md (floatsidf2): Use rs6000_immed_double_const,
	not immed_double_const.
	(floatunssidf2): Ditto.

	* rs6000/rs6000.h: Add declarations for all functions in rs6000.c.

	* rs6000/sysv4.h (TARGET_SWITCHES): Add -mlittle, -mlittle-endian,
	-mbig, and -mbig-endian for bi-endian support.
	(ASM_SPEC): Pass -mlittle/-mbig to the assembler if it was passed
	to us.
	(LINK_SPEC): If explicit little or big endian support was
	requested, tell the GNU linker to use the appropriate target
	format.

	* rs6000/t-eabi (MULTILIB_*): Build libgcc.a variants for software
	floating point.  Remove mrelocatable libgcc.a variant.

	* rs6000/t-eabigas: New file, cloned from t-eabi.  Build
	mrelocatable libgcc.a variant in addition to the other variants.

	* rs6000/t-ppc: New file, for PowerPC System V.4 support without
	the GNU assembler.

	* rs6000/t-ppcgas: New file, for PowerPC System V.4 support with
	the GNU assembler.

	* rs6000/eabile.h: New file, little endian eabi config file.
	* rs6000/sysv4le.h: New file, little endian V.4 config file.

Wed May 10 14:22:28 1995  Doug Evans  <dje@cygnus.com>

	* libgcc1-test.c (main_without__main): Renamed from `main'.
	* Makefile.in (libgcc1-test): Tell the user to ignore warnings.

	* configure: Support --enable-foo, --disable-foo.

Wed May 10 10:34:00 1995  Lee Iverson  <leei@Canada.AI.SRI.COM>

	* unroll.c: Add declarations of static functions.
	(unroll_loop): Renumber regs local to loop for each unrolled iteration.

Wed May 10 08:27:03 1995  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* alpha.c (alpha_set_emit_const): Cleanups to work properly
	when run on 32-bit host.

	* configure: Instead of symlinking tm.h and {h,t,}config.h,
	make them files that #include the proper file; pass to Makefile.
	Pass out_file and md_file to Makefile instead of making symlinks.
	* Makefile.in (out_file, md_file, tm_file, {build,host}_xm_file):
	New symbols, to be overridden by configure.
	(insn-*): Use $(md_file), not md.
	(aux-output.o): Use $(out_file), not aux-output.c.
	($(MD_FILE)): Rework to use new conventions.
	(gen*.o, bi-*.o): Depend on $(build_xm_file), not hconfig.h.
	(scan.o, fix-header.o, scan-decls.o): Likewise.
	(distclean): Adjust files removed for new convention.

Tue May  9 19:26:42 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* rs6000/rs6000.h (LIBGCC_SPEC): Do link with libgcc when -shared.

	* Makefile.in (STAGESTUFF): Add underscore.c.
	(underscore.c): Rename temporary files to begin with 'tmp-' so that
	they will be removed by 'make mostlyclean'.

Tue May  9 19:19:55 1995  Mike Stump  <mrs@cygnus.com>

	* toplev.c (lang_options): Add new flag -ffor-scope.

Tue May  9 19:11:47 1995  Lee Iverson  (leei@ai.sri.com)

	* objc/init.c (objc_init_statics): Fix missing part of last change.

Tue May  9 18:25:34 1995  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>

	* i386/gnu.h, i386/linux.h, i386/linux-aout.h, i386/lynx.h:
	Use <...> in #include instead of "..." to avoid recursion.
	* i386/netbsd.h, i386/xm-gnu.h, i386/xm-linux.h: Likewise.
	* i386/xm-lynx.h, i386/xm-freebsd.h, i386/xm-netbsd.h: Likewise.
	* m68k/lynx.h, m68k/netbsd.h, m68k/xm-lynx.h: Likewise.
	* m68k/xm-netbsd.h, mips/gnu.h, ns32k/netbsd.h: Likewise.
	* ns32k/xm-netbsd.h, rs6000/lynx.h, rs6000/xm-lynx.h: Likewise.
	* sparc/lynx.h, sparc/netbsd.h, sparc/xm-lynx.h: Likewise.
	* sparc/xm-netbsd.h, vax/netbsd.h, vax/xm-netbsd.h: Likewise.

Tue May  9 15:52:05 1995  Michael Meissner  <meissner@cygnus.com>

	* config.sub: Recognize powerpcle as the little endian varient of
	the PowerPC.  Recgonize ppc as a PowerPC variant, and ppcle as a
	powerpcle variant.  Convert pentium into i586, not i486.  Add p5
	alias for i586.  Map new x86 variants p6, k5, nexgen into i586
	temporarily.

Tue May  9 15:43:27 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* rs6000/rs6000.h (LINK_SPEC, LIB_SPEC): Don't mess with libg
        if -shared.
	* rs6000/aix41ppc.h (LINK_SPEC): Ditto.

	* rs6000/powerpc.h: Don't emit .extern directives.

Tue May  9 14:08:09 1995  Jim Wilson  <wilson@cygnus.com>

	* sh/lib1funcs.asm (__ashrsi3, __ashlsi3, __lshrsi3): Use .byte
	instead of .word offsets in switch table.

Tue May  9 11:44:47 1995  Jeremy Bettis  <jbettis@cse.unl.edu>

	* objc/sendmsg.c (__objc_send_initialize): Call superclass if object
	does not implement +initialize.

Tue May  9 02:44:16 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* rs6000/xm-rs6000.h (COLLECT_EXPORT_LIST): Define if not
        cross-compiling.
	* rs6000/xm-mach.h: #undef COLLECT_EXPORT_LIST.
	* rs6000/rs6000.h (COLLECT_SCAN_OBJECTS): Lose.

	* collect2.c (collect_exit): Unlink export_file.
	(prefix_from_string): Broken out from prefix_from_env.
	(prefix_from_env): Call it.
	(main): Under AIX, recognize -bE: and -bexport:, and don't
	automatically export everything if we see one.  Otherwise, scan the
	objects individually and add all their symbols to an export file to be
	passed to the linker.
	(write_export_file): New function.
	(scan_prog_file): Ignore symbols starting with '.'

	* c-common.c (declare_hidden_char_array): Mark decl artificial.

Mon May  8 18:13:57 1995  Adam Fedor  <fedor@colorado.edu>

	* objc/init.c (_objc_load_callback): Add declaration.
	(__objc_exec_class): Call _objc_load_callback after every Class
	or Category is added.
	* objc/objc-api.h (_objc_load_callback): Add declaration.

Mon May  8 17:56:28 1995  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* expr.c (expand_expr, case INDIRECT_REF): Set RTX_UNCHANGING_P
	if both TREE_READONLY and TREE_STATIC set.

	* c-typeck.c (convert_for_assignment): Don't give errors about
	adding const or volatile unless both sides point to functions.

Mon May  8 11:48:23 1995  Michael Meissner  <meissner@cygnus.com>

	* configure: If ../ld/Makefile, symlink ../ld/ld.new to collect-ld,
	not real-ld.  Don't test for $use_collect2 any more.

Sun May  7 17:52:23 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* calls.c (expand_call): Improve -Winline warnings.

Sun May  7 17:28:27 1995  DJ Delorie  (dj@delorie.com)

	* configure.bat: Use "go32" instead of "msdos" for future expansion.

	* i386/go32.h: Add support for win32's stdcall functions.

	* configure.bat: Add ^M to end of each line.
	* i386/config-nt.bat, alpha/config-nt.bat: Likewise.

Sun May  7 02:12:26 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* tree.h (DECL_ARTIFICIAL): New macro.

	* function.c (expand_function_end): Don't warn about unused
        anonymous or artificial parms.

Fri May  5 18:41:22 1995  Jim Meyering  (meyering@comco.com)

	* configure: Fix typo in name of "maintainer-clean".

Fri May  5 14:58:01 1995  Jeffrey A. Law  <law@snake.cs.utah.edu>

 	* pa.c (emit_move_sequence): Force problematical constants
	into memory during the reload pass when generating PIC.

Fri May  5 13:30:33 1995  Doug Evans  <dje@cygnus.com>

	* objc/NXConstStr.m: NXConstantString.h renamed to NXConststr.h.

Fri May  5 07:10:15 1995  Stephen L Moshier  (moshier@world.std.com)

	* real.c (emdnorm, toe64, etoe64): Significand of Intel long double
	denormals is shifted down one bit.

Fri May  5 07:04:12 1995  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* c-typeck.c (process_init_element): Don't clear_momentary if
	constructor_stack is not empty.

	* objc/Makefile (SHELL): Now /bin/sh.

	* c-typeck.c (build_binary_op): Also warn about ordered
	comparison of pointer with zero if -Wall.

	* expr.c (do_jump, case EQ_EXPR, NE_EXPR): Properly compare complex.

Thu May  4 18:01:25 1995  Philippe De Muyter (phdm@info.ucl.ac.be)

	* objc/Makefile: NXConstantString renamed to NXConstStr.
	* objc/NXConstStr.m: Renamed from objc/NXConstantString.m.
	* objc/NXConstStr.h: Renamed from objc/NXConstantString.h.

Thu May  4 17:38:21 1995  J.T. Conklin  <jtc@netbsd.org>

	* configure (vax-*-netbsd*): New configuration.
	* vax/netbsd.h, vax/xm-netbsd.h: New files.

Thu May  4 16:39:05 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* collect2.c (main): Add check for 'collect-ld', just like
        'real-ld', except that old versions won't be looking for it in the
        path.  Don't look for 'real-ld' in the path anymore.  Sigh.

	* collect2.c: #include demangle.h and obstack.h.
	(obstack_chunk_alloc): Define.
	(obstack_chunk_free): Define.
	(generic): Don't define.  Don't use.
	(main): Initialize obstacks and demangling.

	* collect2.c (dump_file): Adjust space padding in output to
        maintain tabulation with Solaris ld.  Don't demangle if the
        environment variable COLLECT_NO_DEMANGLE is set.

        * collect2.c (main): Redirect the output of the first link and
        demangle it.  Don't collect static c/dtors unless USE_COLLECT2 is
        defined.  Null-terminate the list of objects.
	(dump_file): New function.
	(file_exists): New function.
	(collect_exit): Renamed from my_exit.  Dump and remove the temporary
	ld output file.
	(collect_execute): Break out from fork_execute.  Support redirection.
	(fork_execute): Call it.
	(fatal_perror, fatal, error): Make non-static.
	(xcalloc, xmalloc): Don't use generic.
	(xrealloc): Define.
	(collect_wait): Break out for do_wait.  Just return the exit status.
	(do_wait): Call it.

	* collect2.c: Check SUNOS4_SHARED_LIBRARIES using #if, not #ifdef.

	* Makefile.in (collect2): Now uses cplus-dem.o and underscore.o.
	(collect2.o): Pass MAYBE_USE_COLLECT2 to compile.
	(underscore.c): Rules for creation.

	* cplus-dem.c, demangle.h: Copy from libiberty.

Thu May  4 14:12:35 1995  Jim Wilson  <wilson@cygnus.com>

	* sdbout.c (plain_type): Pass additional argument to plain_type_1.
	(plain_type_1): New parameter level.  Increment it when making
	recursive calls.  Force the type to void_type_mode before starting
	a 7th level of recursion.

	* sh.c (general_movsrc_operand, general_movdst_operand): Delete
	references to POST_DEC and PRE_INC.
	* sh.h: Clean up whitespace, comments, etc.
	(TARGET_SH, RTL_BIT, DT_BIT, C_BIT, R_BIT, TARGET_DUMP_RTL,
	TARGET_DUMP_R, TARGET_CDUMP): Delete.
	(TARGET_SWITCHES): Delete -mR, -mc, -mr options.
	(CONST_DOUBLE_OK_FOR_LETTER_P): Delete 'G' contraint.
	(FUNCTION_VALUE): Simplify.
	(REG_OK_FOR_PRE_POST_P, IS_INDEX): Delete.
	(BASE_REGISTER_RTX_P, INDEX_REGISTER_RTX_P): Rewrite to allow
	SUBREGs.
	(GO_IF_LEGITIMATE_INDEX): Delete unused REGNO argument.
	(GO_IF_LEGITIMATE_ADDRESS): Use BASE_REGISTER_RTX_P instead of
	REG_OK_FOR_PRE_POST_P.  Don't accept PRE_INC or POST_DEC addresses.
	(PREDICATE_CODES, PROMOTE_MODE): Define.

Wed May  3 09:57:55 1995  Michael Meissner  <meissner@cygnus.com>

	* rs6000/rs6000.md (non power abs insns): If not powerpc, use
	sf/subfc instructions, not subf.

Wed May  3 08:49:06 1995  Alan Modra  <alan@SPRI.Levels.UniSA.Edu.Au>

	* protoize.c (gen_aux_info_file): Use strerror #ifdef HAVE_STRERROR.

Wed May  3 01:06:01 1995  Jeffrey A. Law  <law@mole.gnu.ai.mit.edu>

	* pa.c (output_call): Fix typo/thinko in last change.
	(output_function_epilogue): Align the data section before
	emitting deferred plabels.

	From Torbjorn:
	* pa.c (before functions): Declare deferred_plabels and
	n_deferred_plabels.
	(output_call): When generating pic, don't use LP and RP.  Use 32 bit
	plabel instead.
	(output_function_epilogue): Output plabels accumulated in output_call.

Tue May  2 17:15:08 1995  Jeffrey A. Law  <law@mole.gnu.ai.mit.edu>

	* pa.c (hppa_expand_epilogue): Fix thinko in last change.

Tue May  2 16:54:35 1995  Doug Evans  <dje@cygnus.com>

	* jump.c (jump_optimize, can_reach_end determination): A barrier can
	follow the return insn.

Tue May  2 12:39:55 1995  Mike Stump  <mrs@cygnus.com>

	* fold-const.c (fold): Ensure that we don't alter the expression's
	type when folding CLEANUP_POINT_EXPRs.

Tue May  2 13:36:08 1995  Michael Meissner  <meissner@cygnus.com>

	* expmed.c (emit_store_flag): When creating store flag
	instructions from simpler parts, such as XOR, ABS, etc. do not
	reuse pseudo registers if expensive optimizations, instead create new
	pseudos for each insn result.

Tue May  2 01:25:29 1995  Jeffrey A. Law  <law@snake.cs.utah.edu>

	* pa.c (hppa_expand_epilogue): Correctly handle restore of %rp
	for functions with a stack size of exactly 8kbytes and no frame
	pointer.

Mon May  1 19:27:08 1995  Jim Wilson  <wilson@cygnus.com>

	* sdbout.c (sdbout_one_type): Don't switch to text section if
	in function with section attribute.

	* combine.c (combine_instrutions): Set subst_prev_insn to zero.
	(try_combine, undo_all): Likewise.
	(get_last_value): Return zero if subst_prev_insn set.

	* sparc.h (INIT_TARGET_OPTABS): Move INIT_SUBTARGET_OPTABS to end.

	* Makefile.in (install-dir): chmod a+rx all newly created directories.

	* expr.c (expand_expr, case SAVE_EXPR): Handle the case where
	mode is VOIDmode.

Fri Apr 28 15:39:38 1995  Per Bothner  <bothner@kalessin.cygnus.com>

	* cpplib.h (cpp_buffer):  Note new escape combination "@ ".
	* cpplib.c (macroexpand):  Delete "@ " if stringifying.
	(cpp_skip_hspace):  Also skip "@ " if input buffer has_escapes.
	(collect_expansion):   Cleanup white-space handling.
	(create_definition):  Remove all leading spaces, not just first one.
	(cpp_expand_to_buffer):  Set has_escapes on resulting input buffer.
	(macroexpand):  Set output_escapes during whole function (and
	specifically during calls of macarg).
	(macroexpand):  Set "@ " before and after expansion result.
	(push_macro_expansion):  Remove unneeded initial "@ ", not " ".
	(cpp_get_token):  Remove unneeded "@ " (not " ") at end of expansion.
	(cpp_get_token):  Handle "@ ".

	* cpplib.c (read_name_map):  Add cpp_reader parameter.  Access
	map_list from former (instead of having it be static).
	(open_include_file):  Extra parameter (because of above changes).
	(do_include, lookup_import):  Update calls of open_include_file.

	* cpplib.c (do_include):  Fix memory leak.

	* cpplib.c (delete_assertion):  Also delete tokenlist.
	(do_unassert):  Don't delete tokenlist (handled by delete_assertion).
	(cpp_cleanup):  New function.  Frees resources used by a cpp_reader.
	* cpphash.c (cpp_hash_cleanup):  New function.
	(delete_macro):  Enable commented-out code.
	(file_cleanup):  Free actual buffer.

	* cpplib.c (cpp_options):  Add map_list.

	* cpplib.h (PARSE_GETC):  Removed.  Bogus and unused.
	* cppmain.c (main):  Remove commented-out code that used PARSE_GETC.

	* cpplib.c:  Don't #include <string.h>.  Causes clashes
	on Nextstep (when index/rindex are macros).
	(cpp_grow_buffer, int_parse_file):  Cast to U_CHAR*, rather than char*.

Sun Apr 30 08:11:23 1995  Alan Modra  (alan@spri.levels.unisa.edu.au)

	* stdarg.h, varargs.h (va_arg): Don't assume __va_rounded_size (char)
	has the value of 4.

Sun Apr 30 07:13:43 1995  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* vax.h (NOTICE_UPDATE_CC): Correctly handle aob insns.

	* expr.c (expand_expr, case CONSTRUCTOR): Don't set target to
	zero if more then one word.
	Pass size and alignment to move_by_pieces_ninsns in bytes, not bits.

	* cse.c (cse_insn): Properly set IN_MEMORY for SET_DEST.

	* tree.c (substitute_in_expr): Preserve TREE_READONLY.

	* c-common.c (enum attrs): Add A_UNUSED.
	(init_attributes): Initialize it.
	(decl_attributes, case A_UNUSED): New case.

Sat Apr 29 15:42:03 1995  Paul Eggert  <eggert@twinsun.com>

	* cccp.c (do_include): Re-fix minor memory leak by using
	alloca instead of xmalloc and free.

	* cccp.c (macarg): Except for reporting error, treat unterminated
	macro call as if it were terminated, since `macroexpand' relies
	on *argptr being filled in.

Sat Apr 29 06:09:35 1995  Torbjorn Granlund  <tege@cygnus.com>

	* pa.c (output_mul_insn): Simplify, it is never called with
	UNSIGNEDP set.

	* pa.md (divsi3, udivsi3, modsi3, umodsi3): Simplify.
	(ashlsi3): Clean up indentation and commentary.

Fri Apr 28 12:48:01 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* integrate.c (expand_inline_function): Don't emit any notes until
        after we've expanded the actual parameters.

Fri Apr 28 11:51:06 1995  Stan Cox  (gcc@dg-rtp.dg.com)

        * m88k/dgux.h: (ENDFILE_SPEC, LIB_SPEC) Fix crtbegin and crtend
        (SELECT_RTX_SECTION) Put relocatable pic constants in data section

        * m88k/dguxbcs.h: (LIB_SPEC) Likewise

        * m88k/m88k.c: (symbolic_operand) Put relocatable pic constants in data

        * m88k/m88k.h: (FRAME_POINTER_REQUIRED) Add -momit-leaf-frame-pointer

        * m88k/m88k.md: (umulsidi3) Doesn't work for 88110 with mod/div changes

        * m88k/x-dgux: (GCC_FOR_TARGET) tdesc gets mixed up for crtbegin/crtend

Fri Apr 28 06:36:47 1995  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* c-typeck.c (pop_init_level, output_init_element): Pass
	require_constant_* to digest_init.

	* alpha.c (alpha_emit_set_const): Now returns rtx and take MODE arg.
	Rework to use a new pseudo for intermediate values if high opt level.
	Also use expand_{bin,un}op.
	* alpha.h (alpha_emit_set_const): Add declaration.
	* alpha.md (mov[sd]i and splits): Change call to alpha_emit_set_const.

	* reg-stack.c (stack_result): Fix bug in last change.

Fri Apr 28 01:08:43 1995  Doug Evans  <dje@cygnus.com>

	* objc-act.c: Update calls to start_decl, finish_struct,
	pass NULLs for attributes.

Thu Apr 27 21:13:14 1995  Doug Evans  <dje@cygnus.com>

	* sparc.md (tablejump): Only if ! TARGET_MEDANY.
	(casesi): New pattern for TARGET_MEDANY case.

	* c-common.c (decl_attributes): Always continue if attribute not found.
	* c-typeck.c (common_type): Call lookup_attribute instead of
	value_member.
	* tree.c (attribute_hash_list): New function.
	(build_type_attribute_variant): Call it.
	(valid_machine_attribute): Handle attributes with arguments.
	(is_attribute_p): New function.
	(lookup_attribute): New function.
	(attribute_in_list): Deleted.
	(attribute_list_contained): Check TREE_PURPOSE and TREE_VALUE.
	* tree.h (valid_machine_attribute): Add prototype.
	(is_attribute_p, lookup_attribute): Likewise.
	* i386/winnt.h (RETURN_POPS_ARGS): Call lookup_attribute.
	(ENCODE_SECTION_INFO): Likewise.
	(CPP_PREDEFINES): Use __stdcall__, __cdecl__.
	(VALID_MACHINE_DECL_ATTRIBUTE): Call is_attribute_p.
	`args' must be NULL.

Thu Apr 27 21:10:41 1995  David Edelsohn  <edelsohn@mhpcc.edu>

	* rs6000.md (insv): New anonymous patterns to combine insert with
	arbitrary ashift, ashiftrt, lshiftrt, or zero_extract.  (Based on
	patch from John Brooks <jbrooks@ea.com>.)
	(ashlsi3): Remove extraneous operand processing.

Thu Apr 27 18:47:24 1995  Jim Wilson  <wilson@cygnus.com>

	* sh/ashlsi3.c, sh/ashrsi3.c, sh/lshrsi3.c: Delete.
	* sh/lib1funcs.asm (ashiftrt_r4_*): Rewrite for efficiency.
	(ashrsi3, lshrsi3, lshrsi3): Add.
	* t-sh (LIB1ASMFUNCS): Add new functions.
	(LIBGCC2_CFLAGS): Delete.
	(LIB2FUNCS_EXTRA): Remove deleted files.
	(ashlsi3.c, ashrsi3.c, lshrsi3.c): Remove rules for deleted files.

	* stmt.c (expand_return): When returning BLKmode structure, use
	operand_subword instead of doing arithmetic on the register number.
	Also, for structures smaller than word_mode, copy it into a word_mode
	temporary and then subreg it.

	* sparc.md: Delete two define_peepholes which print `bad peephole'.

Thu Apr 27 16:17:01 1995  Torbjorn Granlund  <tege@cygnus.com>

	* toplev.c (rest_of_compilation): Call shorten_branches even when
	!optimize.
	* final.c (shorten_branches): For non-optimizing compiles, break
	after first pass.

Thu Apr 27 14:22:50 1995  Michael Meissner  <meissner@cygnus.com>

	* i386/linux-oldld.h: New file, that is cloned from linux-aout.h,
	except that it does not pass -m i386linux to the linker.  This is
	to support the original GNU/Linux ld that is on most distributions.

	* configure (i[345]86-*-linux*oldld*): Use i386/linux-oldld.h as
	the target file.

Thu Apr 27 08:56:50 1995  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* tree.c (valid_machine_attribute): Update last change.

Thu Apr 27 08:06:33 1995  Philippe De Muyter (phdm@info.ucl.ac.be)

	* fix-header.c, cpplib.c: Don't include <sys/stat.h> twice.
	* cpplib.c (cpp_grow_buffer, init_parse_file): Cast {xmalloc,xrealloc}
	for token_buffer to U_CHAR* instead of char*.

	* m68k/x-mot3300: New file.
	* configure (m68k-motorola-sysv*): Use x-mot3300 instead of x-alloca.

Thu Apr 27 07:04:09 1995  Paul Eggert  <eggert@twinsun.com>

	* cccp.c (do_include): Fix minor memory leak.

	* cccp.c (struct argdata): Remove unused `comments' member.
	(macarg): Don't set `comments' member.

	* cccp.c (collect_expansion): Assume leading white space
	already removed.
	Don't allocate unnecessary space for expansion.

	* cccp.c (deps_output): Don't generate overly long output lines.
	Do not invoke self recursively with spacer == 0; this simplifies
	the code a bit.

Wed Apr 26 19:20:02 1995  Andrew McCallum  <mccallum@leopard.cs.rochester.edu>

	* objc/Object.h: Changed Class * to Class in order to match NEXTSTEP
	and OpenStep runtime.
	* objc/Object.m, objc/Object.h, objc/archive.c, objc/class.c: Likewise.
	* objc/encoding.c, objc/init.c, objc/objc-api.h, objc/objc.h: Likewise.
	* objc/objects.c, objc/runtime.h, objc/selector.c: Likewise.
	* objc/sendmsg.c, objc/typedstream.h: Likewise.

Wed Apr 26 19:18:52 1995  Pieter Schoenmakers  <tiggr@es.ele.tue.nl>

	* objc/objc-api.h (objc_static_instances): New struct to record
	static instances of a certain class.
	(objc_module): New tag STATICS to point to the table of
	objc_statics_instances.

	* objc/init.c (OBJC_VERSION): Version 7.
	(objc_init_statics): New function.
	(__objc_exec_class): Invoke objc_init_statics if needed.

	* objc/NXConstantString.m, objc/NXConstantString.h: New files.
	* objc/Makefile (OBJC_O): Added bare-bones implementation of
	NXConstantString.

	* objc-act.c (OBJC_VERSION): Version 7.
	(build_objc_string_object): Build a full declaration if not using
	the next runtime.
	(objc_add_static_instance): New function.
	(init_module_descriptor): Add reference to static instances table.
	(build_module_descriptor): Add field for static instances table.
	(get_objc_string_decl): New function.
	(generate_static_references): New function.
	(finish_objc): Call generate_static_references if needed.

	* c-tree.h (finish_decl_top_level): New declaration.
	* c-decl.c (finish_decl_top_level): New function.

Wed Apr 26 18:04:32 1995  Dirk Steinberg  (Dirk.Steinberg@gmd.de)

	* stddef.h: Treat _MACHINE_ANSI_H_ like _ANSI_H_.

Wed Apr 26 14:09:59 1995  Jim Wilson  <wilson@cygnus.com>

	* sparc.h (NEGTF2_LIBCALL): Define.
	(INIT_TARGET_OPTABS): Add support for all TFmode *_LIBCALL macros.
	* optabs.c (init_optabs): Delete all uses of undocumented TImode and
	TFmode *_LIBCALL macros.

	* combine.c (simplify_rtx, case TRUNCATE): Add.  Use force_to_mode.
	(force_to_mode, case AND): Allow some simplifications when GET_MODE (x)
	has more bits than HOST_BITS_PER_WIDE_INT.
	* mips/mips.md (truncdiqi2+[456]): Add patterns to simplify ZERO_EXTEND
	of a TRUNCATE.

Wed Apr 26 13:01:22 1995  Doug Evans  <dje@cygnus.com>

	* sparc.md (memop define_splits): Rewrite to not use memop.
	Preserve MEM_IN_STRUCT_P, MEM_VOLATILE_P, RTX_UNCHANGING_P bits.
	* sparc.c (memop): Deleted.
	(splittable_symbolic_memory_operand): New function.
	(splittable_immediate_memory_operand): New function.

Wed Apr 26 12:54:26 1995  Jeffrey A. Law  <law@snake.cs.utah.edu>

	* configure: Add hppa1.1-hp-lites support.

Wed Apr 26 08:04:46 1995  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* sh.md (ashrsi2_31): Don't use dead_or_set_p after reload.
	* pyr.md: Remove bad peepholes that improperly use dead_or_set_p.

	* function.c (expand_function_end): Warn about unused parms
	if both -Wunused and -W.

	* tree.h (TYPE_PARSE_INFO): Delete unused field.
	(TYPE_PACKED): Add new macro.
	(struct tree_type): Delete unused field `parse_info'.
	Add new field `packed_flag'.
	* c-tree.h (finish_enum, finish_struct): Add ATTRIBUTES argument.
	* c-common.c (init_attributes): Don't require decl for A_PACKED.
	(decl_attributes, case A_PACKED): Set TYPE_PACKED for type.
	* c-parse.in: Update number of shift/reduce conflicts.
	(structsp): Pass attribute arg to finish_struct.
	Support attributes on enums and pass to finish_enum.
	* c-decl.c (finish_struct): Add ATTRIBUTES argument, call
	decl_attributes and set DECL_PACKED from TYPE_PACKED.
	(finish_enum): Add ATTRIBUTES argument, call decl_attributes,
	and make enum narrow if TYPE_PACKED.
	* print-tree.c (print_node): Print TYPE_PACKED.

	* c-decl.c (init_decl_processing): Don't give builtin__constant_p an
	argument type.
	* expr.c (expand_builtin, case BUILT_IN_CONSTANT_P): A pointer to a
	string constant is a constant.

	* c-typeck.c (output_init_element): Constructor is not simple if
	a bitfield is being assigned a non-integer.

	* c-typeck.c (push_init_level): Update constructor_depth when we
	push spelling level.

Tue Apr 25 19:50:06 1995  Jeffrey A. Law  <law@snake.cs.utah.edu>

	* pa.c (emit_move_sequence): Handle function label arithmetic for
	PIC code generation too.

Tue Apr 25 18:52:43 1995  Stephen R. van den Berg  (berg@pool.informatik.rwth-aachen.de)

	* reg-stack.c (current_function_returns_real): Deleted (unused).
	(FP_mode_reg): Trimmed to a smaller size, less overhead.
	(FP_MODE_REG): New macro over which FP_mode_reg will be accessed.
	(mark_regs_pat, straighten_stack): New functions.
	(reg_to_stack): Amend initialisation of FP_mode_reg.
	Mark FP registers mentioned in USE insns before NOTE_INSN_FUNCTION_BEG.
	(get_true_reg): Eliminate FP subreg accesses in favour of the
	actual FP register in use.
	(record_reg_life_pat): Make it work on SUBREGs as well.  Make use of
	the new mark_regs_pat function.  Handle USE insns if called unnested.
	(record_reg_life): Don't check for QImode again, we know that it
	is there.  Process CALL_INSNs like all other insns, they might `use'
	some FP argument registers if register passing.
	(stack_result_p): Changed in stack_result and returning an rtx.
	(stack_reg_life_analysis): Take a new stackentry state argument.
	Use stack_result and the rtx to mark using mark_regs_pat.  This ensures
	that types that need multiple FP registers are handled correctly.
	Delete the no_live_regs shortcut to save space.
	Use stackentry state to determine filled registers.
	(replace_reg): Accept COMPLEX_FLOAT as well.
	(move_for_stack_reg): Optimise away some pointer dereferencing.
	(subst_stack_regs): Make sure the stack is in the right order
	and of the right size for register passing.
	(goto_block_pat): Make sure the stack is in the right order
	to return possible multi-register values from the function.
	(convert_regs): Fix comment about CALL_INSN, it's no longer valid.
	Make sure the stack is of the right size and in the right order
	to return possible multi-register values from the function.

	* function.c (assign_parms): If STACK_REGS is defined, generate USE
	insns before the function body, thus showing which registers are filled
	with parameters.
	* expr.c (expand_builtin_apply_args): Likewise.
	Reverse order of saving registers, more compact code for i387.
	(expand_builtin_apply): Likewise.
	* emit-rtl.c (gen_highpart): Add comment about broken implementation.
	* i386.md (untyped_call): Make it return a complex double.

        * c-parse.in (attrib): Permit null-length argument list to attributes.

	* tree.c (valid_machine_attribute): Use new function attribute_in_list,
	makes sure type_attribute_variants are reused even when attributes have
	parameters.
	Assign any new type to TREE_TYPE (decl).
	(attribute_in_list): New function.
	(attribute_list_contained): Use it.
	* tree.h (attribute_in_list): New declaration.

Tue Apr 25 18:25:53 1995  Jim Wilson  <wilson@cygnus.com>

	* expr.c (struct move_by_pieces): Add to_struct and from_struct fields.
	(move_by_pieces): Set to_struct and from_struct fields.
	(move_by_pieces_1): Set MEM_IN_STRUCT_P of to1 and from1.
	(expand_builtin, case BUILT_IN_MEMCPY): New variable type.
	Set MEM_IN_STRUCT_P of src_mem and dest_mem.

	* Makefile.in (clean): Delete libgcc1-asm.a.

	* m68k/vxm68k.h (CPP_SPEC): Define.

	* c-decl.c (pushdecl): Don't test DECL_EXTERNAL when deciding whether
	to register a duplicate decl in the current block.

	* cross64.h (INIT_ENVIRONMENT): Define as string not putenv call.
	* gcc.c (main): Pass INIT_ENVIRONMENT to putenv.

	* stmt.c (expand_return): When returning BLKmode structure in
	registers, copy it to a psuedo-reg instead of to hard registers.

Tue Apr 25 15:14:58 1995  Michael Meissner  <meissner@cygnus.com>

	* rs6000.h (LEGITIMIZE_ADDRESS): Don't create a DF address using two
	regs if -msoft-float or -mcpu=403.

Tue Apr 25 15:45:44 1995  Richard Henderson  (richard@atheist.tamu.edu)

	* m68k.md (divhi3, udivhi3, modhi3, umodhi3): Deleted
	these insns plus some surrounding trash.
 	(divmodhi4, udivmodhi4): Added these insns.

Tue Apr 25 10:12:40 1995  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* alpha.c (alpha_builtin_saveregs): Refine last change to work
	for both stdarg and varargs.

	* tree.c (chain_member_purpose): Make similar to chain_member_value.

	* Makefile.in, configure: Change "realclean" to "maintainer-clean".

	* protoize.c: Removed __NetBSD__ from conditional.
	Declare strerror if HAVE_STRERROR is defined; otherwise
	declare sys_errlist and sys_nerr.
	(my_strerror): New function.
	(errno): Don't define if already defined as a macro.

	* alpha.c (current_file_function_operand): Return false if profiling.

	* expr.c (convert_move): Don't access a hard reg in an invalid
	mode when doing a truncation.

	* alpha.c (add_operand): Test for exactly the constants allowed by
	the constraints.
	* alpha.h (CONST_OK_FOR_LETTER_P, case 'L'): Reject 0x80000000.

	* c-parse.in (initdcl, notype_initdcl): Pass attributes to
	start_decl; delete call to decl_attributes.
	* c-tree.h (start_decl): Two new tree parameters.
	* c-decl.c (start_decl): New args for attributes; call decl_attributes.

	* c-decl.c (duplicate_decls): Don't look at TYPE_ACTUAL_ARG_TYPES
	if it is not set.

	* xm-1750a.h: New file.

	* alpha.c (alpha_builtin_saveregs): Add to incoming args addr
	if less than 6 named args, not less than or equal to.

Mon Apr 24 15:25:19 1995  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* mips-tfile.c (fatal, error): Make first arg const to avoid warning.

	* stmt.c (expand_end_bindings): Write a BARRIER after call
	to abort in nonlocal handler.

	* stmt.c (expand_decl_init): Call preserve_temp_slots to keep
	around any temp whose address was taken.

Fri Apr 21 16:26:15 1995  Torbjorn Granlund  <tege@adder.cygnus.com>

	* pa.md (call_internal_reg): Fix typos in length calculation.
	(call_value_internal_reg): Likewise.

Fri Apr 21 13:17:15 1995  Roland McGrath  <roland@churchy.gnu.ai.mit.edu>

	* config/gnu.h (STANDARD_INCLUDE_DIR): New macro.
	* config/mips/gnu.h (STANDARD_INCLUDE_DIR): Macro moved there.

Fri Apr 21 08:23:58 1995  Tom Quiggle  (quiggle@lovelace.engr.sgi.com)

	* toplev.c (lang_options): Add -I for GNAT.
	* gcc.c (default_compilers): Pass -I to gnat1.

Fri Apr 21 07:58:06 1995  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* tree.c (integer_all_onesp): Test to size of mode, not TYPE_PRECISION.

	* toplev.c (main): Turn on -fforce-mem for -O2.

	* fold-const.c ([lr]rotate_double): Replace; old versions were bogus.
	(fold, shift and rotate): Don't call tree_int_cst_sgn on non-integer.
	(fold, case LROTATE_EXPR): If constant count, convert to RROTATE_EXPR.
	(fold, case RROTATE_EXPR): Sometimes commute logical op with rotate.
	Delete pair of counteracting shifts.

	* combine.c (simplify_logical, case AND): If still an AND, get
	new values for op0 and op1.

Thu Apr 20 17:52:10 1995  Jim Wilson  <wilson@chestnut.cygnus.com>

	* sh.c: Completely rewritten.
	* sh.h (FAST_BIT, CONSTLEN_2_BIT, CONSTLEN_3_BIT, CONSTLEN_0_BIT,
	TARGET_FASTCODE, TARGET_CLEN3, TARGET_CLEN0, TARGET_OPTIONS): Delete.
	(TARGET_SWITCHES): Delete -mclen3 and -mclen0 options.
	(TARGET_DEFAULT): Is zero.
	(OVERRIDE_OPTIONS): Delete code to set max_count_si and max_count_hi.
	(SPECIAL_REG): New macro.
	(HARD_REGNO_MODE_OK): Allow any mode in any general register.
	(GO_IF_LEGITIMATE_ADDRESS): Delete constant + reg address case.
	(MOVE_RATIO): Define to 2 when TARGET_SMALLCODE.
	(max_si, max_hi, max_count_si, max_count_hi): Delete.
	* sh.md: Delete spurious constraints from all define_expands.
	(rotlsi3_1): Set T reg instead of clobbering it.
	(ashrsi3): Use expand_ashiftrt instead of gen_shifty_op.
	(movsi_i, movhi_i, movsf_i): Add conditions to reject patterns
	needing a reload.
	(movdi-2, movdf_k): Correct conditions to reject patterns needing
	a reload.
	([inverse_]branch_{true,false}): Pass operands to output_branch.
	(jump): Delete unnecessary braces.
	(call, call_value): Don't use expand_acall.  Force operand0 into
	a register.

Thu Apr 20 12:57:16 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* function.c (assign_parms): Use TREE_ADDRESSABLE rather than
        TYPE_NEEDS_CONSTRUCTING to decide whether a parameter needs to be
        passed by invisible reference.

	* calls.c (expand_call): Ditto.  Abort if we try to pre-evaluate a
        parameter of TREE_ADDRESSABLE type.

Wed Apr 19 17:50:24 1995  Torbjorn Granlund  <tege@cygnus.com>

	* pa.h (TARGET_SWITCHES): Fix typo.

Tue Apr 18 18:06:03 1995  Per Bothner  <bothner@kalessin.cygnus.com>

	* expr.c (store_constructor):  Use BYTES_BIG_ENDIAN rather
	than BITS_BIG_ENDIAN to layout bits within bitstring.
	* tree.c (get_set_constructor_bytes):  Likewise.

Tue Apr 18 17:22:46 1995  Per Bothner  (bothner@wombat.gnu.ai.mit.edu)

	* config/m68k/{x-hp320,x-hp320g} (FIXPROTO_DEFINES):
	Define _HPUX_SOURCE so putenv and other functions get seen.

Tue Apr 18 03:57:35 1995  Michael Meissner  (meissner@cygnus.com)

	* varasm.c (weak_decls): Make this a unique structure, instead of
	a tree structure.
	(handle_pragma_weak): Don't redeclare asm_out_file.  Use new weak
	structure to copy name and value to.  Protect name and value by
	copying them to the permanent obstack.
	(declare_weak): Call handle_pragma_weak, instead of duplicating
	the code.
	(finish_weak): Rewrite to use new weak symbols list structure.

	* c-pragma.h: New file to define the c-pragma.c interfaces.
	* c-pragma.c: Include it.
	* varasm.c: Include it.
	* c-lex.c: Include it.
	* cp/lex.c: Include it.

	* varasm.c (handle_pragma_weak): No longer pass output file
	stream, since weak pragmas are delayed until the end of the
	compilation.
	* c-pragma.c (handle_pragma_token): Call handle_pragma_weak
	without file stream argument.

	* Makefile.in (varasm.o, c-lex.o, c-pragma.o): Add dependencies on
	c-pragma.h.

	* config/rs6000.md (movdf): If -msoft-float, do not generate
	memory to memory references, like is already done for the
	-mhard-float case.  Remove an extra test for -mhard-float inside
	of -mhard-float code.

Tue Apr 18 06:19:50 1995  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* fold-const.c (size_int): Arg is unsigned HOST_WIDE_INT.
	* tree.h (size_int): Likewise.

Mon Apr 17 23:36:57 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* rs6000/aix41.h: Restore March 11th changes, plus
        (ASM_OUTPUT_EXTERNAL): Do add [DS] or [RW], just don't emit
        anything.
	* rs6000/aix3newas.h (ASM_OUTPUT_EXTERNAL): Ditto.

Mon Apr 17 15:58:52 1995  Per Bothner  <bothner@kalessin.cygnus.com>

	* config/mips/x-iris (FIXPROTO_DEFINES):  Add -D_LANGUAGE_C_PLUS_PLUS.
	* config/mips/x-iris6:  Likewise.

	* cpplib.c:  Rename  make_definition to cpp_define.
	* cpplib.h (cpp_define):  New declaration.

	* cpplib.c (special_symbol):  For T_SPECLINE, calculate __LINE__
	in enclosing file buffer, not current buffer (if macro expanding).
	(cpp_get_token):  Fix thinko (in code for chopping unneeded space).

Mon Apr 17 11:36:07 1995  Jim Wilson  <wilson@cygnus.com>

	* abi64.h (CPP_SPECS): Define and use _ABI64 instead of
	_MIPS_SIM_ABI64.
	(SETUP_INCOMING_VARARGS): Set MEM_IN_STRUCT_P if big endian target.
	* iris6.h (ASM_IDENTIFY_GCC, ASM_IDENTIFY_LANGUAGE): Define.

	* combine.c (get_last_value): Ignore BARRIER when scanning backwards.
	(move_deaths): New variables before_dead and after_dead.  Set them
	to instructions that have valid INSN_CUID values and use in test.

	* combine.c (subst_prev_insn): New variable.
	(try_combine): Set it.
	(get_last_value): Use it.

	* reload.c (find_reloads): Recompute reg_equiv_address from
	reg_equiv_memory_loc before using it.
	(find_reloads_toplev, make_memloc): Likewise.

	* expr.c (expand_builtin, case BUILT_IN_MEMCPY): Call force_operand
	on dest_rtx before returning it.

	* function.c (instantiate_decls): Use temporary allocation if
	DECL_DEFER_OUTPUT is set.

Sat Apr 15 23:19:03 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* aoutos.h (ASM_OUTPUT_DEF): Define instead of SET_ASM_OP.
	* sparc/sunos4.h (ASM_OUTPUT_DEF): Ditto.

	* varasm.c (weak_finish): Don't handle aliases.
	(declare_weak): Ditto.
	(assemble_alias): Handle aliases.

	* c-common.c (enum attrs): Add A_ALIAS.
	(init_attributes): Ditto.
	(decl_attributes): Ditto.

Sat Apr 15 13:26:34 1995  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* calls.c (expand_call): Call preserve_temp_slots on temps
	made for BLKmode args returned in registers.

	* pa.c (override_options): Fix typo.

Sat Apr 15 12:11:46 1995  Brendan Kehoe  <brendan@cygnus.com>

	* alpha/alpha.c (output_epilog): Initialize fp_offset to 0, and
	make sure it's non-zero before we try to use it to restore the
	frame pointer.

Fri Apr 14 19:45:05 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* ginclude/va-{clipper,pa,pyr,sparc,spur}.h (va_arg): Reorganize
        to avoid BIND_EXPRs and COND_EXPRs of aggregate type.

Fri Apr 14 19:31:14 1995  Roland McGrath  <roland@churchy.gnu.ai.mit.edu>

	* config/svr4.h (ASM_OUTPUT_SECTION_NAME): Make the section
 	read-only executable "ax" if DECL is a FUNCTION_DECL; read-only
 	"a" (previously the case always) if DECL is TREE_READONLY;
 	otherwise writable "aw".

Fri Apr 14 18:49:11 1995  Linus Torvalds  <Linus.Torvalds@cs.Helsinki.FI>

	* alpha.md (probe_stack): Probe with write, not read.
	(allocate_stack): Update and correct stack probe code.
	* alpha.c (output_prolog): Changed stack probe at function entry.

Fri Apr 14 18:42:34 1995  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* jump.c (delete_insn): When deleting after label, delete
	a BARRIER as well.

Fri Apr 14 14:40:48 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* toplev.c (compile_file): Call weak_finish.

	* c-common.c (enum attrs): Add A_WEAK.
	(init_attributes): Ditto.
	(decl_attributes): Support __attribute__ ((weak)) by
        calling declare_weak.

	* sparc/sunos4.h (HANDLE_PRAGMA_WEAK, WEAK_ASM_OP, SET_ASM_OP):
        Define to support weak symbols with -fgnu-linker.
	* aoutos.h: Ditto.

	* varasm.c (handle_pragma_weak): Add declared weak symbols to
        weak_decls rather than emitting them immediately.
	(declare_weak): Add the indicated declaration to weak_decls.
	(weak_finish): Emit .weak directives for any weak symbols.

	* libgcc2.c: The C++ free-store management functions are weak.

Fri Apr 14 13:00:29 1995  Michael Meissner  (meissner@cygnus.com)

	* rs6000/rs6000.c (output_prolog): For eabi systems, emit main's
	call to __eabi before setting up the minimal TOC used with the
	-mrelocatable support.

	* rs6000/eabi.h (INVOKE__main): Don't define any more,
	output_prolog will emit the call.

Fri Apr 14 09:09:03 1995  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* alpha.c (call_operand): Any reg is valid for NT.
	(output_prologue): Never need GP for Windows/NT.
	Set SYMBOL_REF_FLAG in current function decl.

Thu Apr 13 20:19:30 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* alpha/xm-alpha.h (HAVE_VPRINTF): Define.
	(HAVE_PUTENV): Define.
	(POSIX): Define.

Thu Apr 13 19:57:44 1995  Doug Evans  <dje@cygnus.com>

	* emit-rtl.c (gen_sequence): If the insn has a non-null
	CALL_INSN_FUNCTION_USAGE field, output it as a sequence so the
	latter isn't discarded.

	* c-parse.in: Update expected conflict count.

Thu Apr 13 08:10:20 1995  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* configure.bat: Arg 2 is which machine (i386 or alpha).
	* configure (alpha-*-winnt3*): New configuration.
	* alpha.c: Don't #include stamp.h for WINNT.
	(input_operand, case CONST): Allow ptr_mode and DImode.
	* alpha.h (WINDOWS_NT): Provide default definition.
	(ASM_OUTPUT_INT): Use output_addr_const.
	(ASM_OUTPUT_ADDR_DIFF_ELT): Use .long for NT.
	* alpha.md (calll, tablejump, movsi): New variants for NT.
	* alpha/winnt.h, alpha/xm-winnt.h, alpha/x-winnt: New files.
	* alpha/config-nt.bat, alpha/config-nt.sed: New files.
	* i386/config-nt.bat: Add Ada fragments to Makefile.
	* i386/config-nt.sed: Adjust for deletion of config.run in Makefile.in
	Change version to 2.6.3.
	Add some missing tabs.
	* winnt/winnt.h (TARGET_MEM_FUNCTIONS): Define.
	(LINK_SPEC): Delete "align:0x1000".
	* winnt/xm-winnt.h (OBJECT_SUFFIX): Define.
	* ginclude/stdarg.h, ginclude/varargs.h: Clean up code that
	defines *DEFINED* symbols.

	* configure (a29k-*-sym1*): Same as a29k-*-bsd*.
	* a29k.h (ASM_OUTPUT_SECTION_NAME): New macro.

Wed Apr 12 14:36:03 1995  Jim Wilson  <wilson@cygnus.com>

	* dbxout.c (dbxout_type_fields): Correct arguments to CHARS macro
	in flag_minimal_debug case.
	(dbxout_symbol_name): Use DECL_ASSEMBLER_NAME unconditionally.
	* sdbout.c (sdbout_record_type_name): Correct indentation.
	(sdbout_symbol): Use DECL_ASSEMBLER_NAME unconditionally.
	(sdbout_one_type): Likewise.

Tue Apr 11 13:24:13 1995  Per Bothner  <bothner@kalessin.cygnus.com>

	* fix-header.c (main):  Fix loop over required_functions_list.
	(fatal):  Also print inc_filename.

	* cpplib.c (cpp_push_buffer):  Added missing initializatuon of buf.
	(cpp_file_buffer):  Compare against CPP_NULL_BUFFER, not NULL.
	(finclude):  No longer call cpp_push_buffer - let callers do it.
	(do_include):  Add call to cpp_push_buffer.
	(push_parse_file):  Call cpp_push_buffer early, so initial
	defines can use file and line from a valid cpp_buffer.
	(nreverse_pending):  New function.
	(push_parse_file):  Use nreverse_pending.
	(push_parse_file):  For -include files, just push them in reverse
	order - we don't need to scan them now.
	(cpp_error_from_errno, cpp_perror_with_name):  Don't emit extra '\n'.

Tue Apr 11 13:36:44 1995  Jim Wilson  <wilson@cygnus.com>

	* configure (mips-dec-mach3): Add.

	* sh.c (shiftby_operand): Delete.
	* sh.h (TARGET_SWITCHES): -m3 and -m3l also set SH2_BIT.
	(OVERRIDE_OPTIONS): Don't add CPU_SH2 to CPU_SH3 when TARGET_SH3.
	* sh.md (ashlsi3): Use nonmemory_operand as a predicate instead of
	shiftby_operand.  Don't use shiftby_operand in the output statement.
	(lshrsi3): Likewise.

	* c-decl.c (poplevel): Do output inline function if
	DECL_ABSTRACT_ORIGIN points to itself.

	* varasm.c (output_constant): Cast assemble_string argument to char *.

Mon Apr 10 14:29:28 1995  Torbjorn Granlund  <tege@adder.cygnus.com>

	* recog.c (constrain_operands, case 'E'): Make this work like
	constraint character `F' when REAL_ARITHMETIC is defined.
	* regclass.c (record_reg_classes, case 'E'): Likewise.
	* reload.c (find_reloads, case 'E'): Likewise.

Mon Apr 10 14:30:31 1995  Michael Meissner  <meissner@cygnus.com>

	* rs6000/aix3newas.h, rs6000/aix41.h: Eliminate March 11th changes
	to undefine ASM_OUTPUT_EXTERNAL{,_LIBCALL}, since this causes the
	compiler not to bootstrap.

Mon Apr 10 07:17:39 1995  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* cppalloc.c: #include config.h.
	* cppexp.c: Add declarations of xmalloc and xrealloc.
	(cpp_parse_expr): Cast args to bcopy to char *.
	* cpphash.c: Add declaration of xmalloc.
	* cpplib.c (init_parse_options, cpp_reader): Cast args to bcopy,
	bcmp, and bzero to char *.
	(add_import, push_parse_file, init_parse_file): Likewise.

	* c-common.c (enum attrs): New attribute, A_NOCOMMON.
	(init_attribute): Initialize it.
	(decl_attributes): Implement it.
	* varasm.c (make_decl_rtl): Allow section attribute if -fno-common
	or variable is not to be placed in common for some other reason.

	* combine.c (simplify_set): Don't move a SUBREG to dest if it
	is changing the size of a hard reg in CLASS_CANNOT_CHANGE_SIZE.

	* reload.c (find_equiv_reg): If goal is a pseudo that got memory,
	a store into memory makes it invalid.
	* reload1.c (reload_as_needed): Call forget_old_reloads_1 on
	pattern before reg elimination.

Mon Apr 10 00:26:14 1995  Jeffrey A. Law  <law@snake.cs.utah.edu>

	* pa.c (pa_reorg): Bump label use count for each entry in an
	exploded ADDR_VEC.

Sun Apr  9 09:22:51 1995  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* i386.md (adddi3, subdi3): Need scratch reg whenever operand 0 in
	mem and operands 1 not '0'.
	(subdi3): Don't treat two non-equal MEMs as non-aliasing.

Sat Apr  8 22:53:38 1995  Jeffrey A. Law  <law@snake.cs.utah.edu>

	* pa.c (pa_reorg): Fix typo.

Sat Apr  8 19:36:36 1995  Michael Meissner  <meissner@cygnus.com>

	* rs6000/rs6000.h (SELECT_SECTION): TREE_CODE_CLASS must be called
	with a tree code, not a tree value.

Sat Apr  8 12:41:01 1995  Mike Stump  <mrs@cygnus.com>

	* cpphash.c: Don't use const on compilers that don't support it.

Sat Apr  8 16:32:22 1995  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* expr.c (expand_increment): Handle case where INCREMENTED
	has a non-trivial conversion.

Fri Apr  7 19:33:21 1995  Phil Nelson  (phil@cs.wwu.edu)

	* ns32k.h (TRAMPOLINE_TEMPLATE, TRANSFER_FROM_TRAMPOLINE):
	Fix assembler syntax errors.

Fri Apr  7 19:27:23 1995  Pat Rankin  (rankin@eql.caltech.edu)

	* cccp.c (VMS_fstat, VMS_stat):  New functions.

Fri Apr  7 19:25:21 1995  Paul Eggert  <eggert@twinsun.com>

	* cccp.c (collect_expansion): If traditional, set stringify
	member to SHARP_TOKEN regardless of the value of
	stringify_sharp_token_type.

Fri Apr  7 07:48:35 1995  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* cse.c (simplify_unary_operation): #ifdef POINTERS_EXTEND_UNSIGNED,
	handle sign- or zero-extending addresses.

	* optabs.c (init{,_integral,_floating,_complex}_libfuncs):
	Change SUFFIX to "char" to avoid confusion with prototype.

	* explow.c (convert_memory_address): No longer static.
	New arg, TO_MODE.
	Do something special for SYMBOL_REF, LABEL_REF, and CONST.
	(memory_address): Add extra arg to call to convert_memory_address.
	* rtl.h (convert_memory_address): Add extra arg.
	* expr.c (expand_expr, case ADDR_EXPR): Always call
	convert_memory_address when converting; add extra arg.
	* stmt.c (expand_computed_goto): Convert from ptr_mode to Pmode.

	* gcc.c (OBJECT_SUFFIX): Default now ".o", not "o".
	(all specs): Remove "." before %O; use %O in a few missing cases.
	* i386/os2.h (OBJECT_SUFFIX): Delete from here.
	* i386/xm-os2.h (OBJECT_SUFFIX): Move to here; now has period.

	* Makefile.in (STAGESTUFF): Use $(exeext) for executables.

Fri Apr  7 03:32:29 1995  Richard Stallman  <rms@mole.gnu.ai.mit.edu>

	* config.sub: Accept -lites* as op sys.

Thu Apr  6 23:08:50 1995  Per Bothner  <bothner@kalessin.cygnus.com>

	* cpplib.c (bcopy, bzero, bcmp):  Remove #undefs.
	* cppalloc.c (xcalloc):  Re-implement using calloc,
	rather than malloc+bzero.
	* cpplib.c (SELF_DIR_DUMMY):  New macro.
	(do_include):  Don't pass searchptr to finclude if it is dsp,
	since that is on the stack, and would cause a dangling pointer.
	If handling #include_next, recognize SELF_DIR_DUMMY.

Fri Apr  7 00:54:24 1995  Jeffrey A. Law  <law@snake.cs.utah.edu>

	* pa.h (MACHINE_DEPENDENT_REORG): Define.
	* pa.md (switch_jump): New pattern for jumps which implement
	a switch table.
	* pa.c (pa_reorg): New function to explode jump tables.
	(pa_adjust_insn_length): Account for jumps in switch tables with
	unfilled delay slots.

Thu Apr  6 14:31:10 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* c-typeck.c (build_binary_op): Don't call common_type for
        uncommon pointer types.

Wed Apr  5 13:53:17 1995  Per Bothner  <bothner@kalessin.cygnus.com>

	Re-write fixproto/fix-header/etc to use cpplib:
	* fix-header.c:  Comment out support for adding missing extern "C"
	using #ifdef ADD_MISSING_EXTERN_C instead of #if 0.
	* fixproto:  Removed case of required functions.   Instead use ...
	* fix-header.c (std_include_table):  ... new required-functions table.
	(cpp_file_line_for_message, cpp_print_containing_files, cpp_message):
	New stub functions, to intercept cpplib error message.
	* fixproto:  Don't call $CPP, since fix-header now incorporates cpplib.
	* gen-protos.c (fatal, hashf):  New functions.
	(main):  Use hashf, instead of hash.
	* scan-decls.c (scan_decls, skip_to_closing_brace):  Re-write to
	take a cpp_reader* as argument, not a FILE*.
	* scan.h (hash):  Make parameter const.
	* scan.c (hash):  Removed.
	* scan.c (memory_full, xmalloc, xrealloc):  Removed.
	Use functions from cppalloc.c instead.
	* Makefile.in (gen-prtos, fix-header, stmp-fixproto):  Update.

Wed Apr  5 13:24:14 1995  Per Bothner  <bothner@kalessin.cygnus.com>

	* cpplib.c (cpp_get_token): If traditional, return after comment,
	instead of reading more, so end-of-line can be peeked at.
	* cpperror.c (cpp_file_line_for_message, cpp_message):  New
	functions, that do the actual printing of error messages.
	(cpp_print_file_and_line, cpp_error, cpp_warning, cpp_pedwarn,
	cpp_error_with_line, cpp_warning_with_line, cpp_pedwarn_with_line,
	cpp_pedwarn_with_file_and_line, cpp_error_from_errno, my_strerror,
	cpp_perror_with_name):  Re-write to use cpp_file_line_for_message
	and cpp_message, and move to cpplib.c.

Tue Apr  4 23:35:49 1995  Roland McGrath  <roland@churchy.gnu.ai.mit.edu>

	* config/gnu.h (GNU_CPP_PREDEFINES): Remove -D__HURD__.

Tue Apr  4 17:15:54 1995  Jeffrey A. Law  <law@mole.gnu.ai.mit.edu>

	* pa.h (DO_GLOBAL_DTORS_BODY): Fix pointer -> integer assignment
	problem.

	* reorg.c (fill_simple_delay_slots): Don't use a JUMP_INSN
	a the target of another JUMP_INSN to fill a delay slot.

Mon Apr  3 19:03:48 1995  Torbjorn Granlund  <tege@adder.cygnus.com>

	* cse.c (simplify_unary_operation): Sign-extend constants when
	they have the most significant bit set for the target.

	* m68k.md (umulsi3_highpart): Test for CONST_INT and CONST_DOUBLE,
	not CONSTANT_P.
	(smulsi3_highpart): Likewise.
	* m68k.c (const_uint32_operand): New function.
	(const_sint32_operand): New function.
	* m68k.md (const_umulsi3_highpart): Use const_uint32_operand instead
	of immediate_operand for op3.  Delete mode.
	(const_smulsi3_highpart): Analogous change.

Mon Apr  3 19:03:48 1995  Jim Wilson  <wilson@cygnus.com>

	* cse.c (simplify_binary_operation): Sign-extend constants when
	they have the most significant bit set for the target.

	* combine.c (force_to_mode, case PLUS): Sign extend masks that are
	negative in OP_MODE.
	(simplify_and_const_int): Sign-extend constants when they have the
	most significant bit set for the target.
	(merge_outer_ops): Likewise.
	(simplify_shift_const): Likewise.

Mon Apr  3 18:23:48 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* toplev.c (lang_options): Add -f{no-,}repo.

Mon Apr  3 18:13:15 1995  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* combine.c (nonzero_bits, case REG): Check POINTERS_EXTEND_UNSIGNED.
	(num_sign_bit_copies, case REG): Likewise.
	* explow.c (convert_memory_address): New function.
	(memory_address): Call if it needed.
	(promote_mode, case POINTER_TYPE): Use Pmode and pointer extension.
	(allocate_dynamic_stack_space): Convert size from ptr_mode.
	* expr.c (clear_storage, expand_assignment, store_{expr,constructor}):
	Use ptr_mode instead of Pmode in some places.
	(expand_expr, expand_builtin): Likewise.
	(push_block, store_expr): Convert size to Pmode.
	(expand_expr, case ADDR_EXPR): Convert from Pmode to ptr_mode.

Mon Apr  3 18:00:52 1995  Jim Wilson  <wilson@cygnus.com>

	* explow.c (allocate_dynamic_stack_space): Correct typo in last
	change.

	* sh.c (gen_shifty_op, case ASHIFTRT): Return 0 if shift count is not
	a constant.

Mon Apr  3 12:17:10 1995  Michael Meissner  (meissner@cygnus.com)

	* expmed.c (extract_bit_field): When converting a SUBREG into a
	REG, if the system is big endian, adjust the bit offset
	appropriately.

Mon Apr  3 00:08:45 1995  Roland McGrath  <roland@churchy.gnu.ai.mit.edu>

	* config/i386/linux.h: Include "config/linux.h" instead of
 	"linux.h", to avoid recursion.

Sun Apr  2 23:50:27 1995  Roland McGrath  <roland@churchy.gnu.ai.mit.edu>

	* config/i386/gnuelf.h: Include i386/linux.h instead of
 	i386/linuxelf.h.

Sun Apr  2 17:35:10 1995  Jim Wilson  <wilson@cygnus.com>

	* cse.c (simplify_relational_operation): Don't simplify A-B for
	compare of A and B when the compare is unsigned.

Sun Apr  2 08:23:38 1995  Paul Eggert  <eggert@twinsun.com>

	* fixincludes (stdio.h): BSDI 2.0 changed the spelling of _VA_LIST_
	to _BSD_VA_LIST_.

Sun Apr  2 07:57:28 1995  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>

	* i386/xm-bsd386.h: New file.
	* configure (i[345]86-*-bsd*): Add xm_file.

	* gcc.c (default_compilers): Pass -W and -w to gnat1.

	* winnt/winnt.h (STDC_VALUE): Add #undef.
	* i386/winnt.h (LIB_SPEC): Likewise.

Sun Apr  2 07:55:25 1995  Douglas Rupp  (drupp@cs.washington.edu)

	* i386/winnt.h (RETURN_POPS_ARGS, ENCODE_SECTION_INFO): Call
	chain_member_purpose, not chain_member_value.
	(ASM_FILE_START, LIB_SPEC): Move to here.
	* winnt/winnt.h (ASM_FILE_START, LIB_SPEC): Delete from here.
	* tree.c (chain_member_purpose): New function.

Sat Apr  1 12:19:14 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* c-typeck.c (build_binary_op): New variable build_type controls
	type given to expression when created.  Set to integer_type_node for
	comparison ops instead of result_type so result_type still holds type
	in which comparison is done.  When checking for comparison between
	signed and unsigned, use result_type rather than (possibly shortened)
	type of op0.  Don't warn about equality comparison of signed operand
	to unsigned constant that fits in signed type.

Sat Apr  1 09:47:02 1995  Douglas Rupp  (drupp@cs.washington.edu)

	* i386/winnt.h (CPP_PREDEFINES): Add definitions for __stdcall
	and __cdecl.
	* winnt/winnt.h (LIB_SPEC): Add OLDNAMES.LIB.
	* winnt/xm-winnt.h: Remove unneeded #define's for non-ANSI functions.
	* fixinc.winnt: Remove unneeded fixes relating to __stdcall.

	* objc/Makefile (SHELL): New definition.

Sat Apr  1 08:25:26 1995  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* cse.c (cse_insn): When emitting a BARRIER, don't put it after
	a deleted insn.

	* reload.c (push_reload): Initialize secondary_{in,out}_icode.

	* gcc.c (print_multilib_info): Don't use LAST_PATH if not set.

Sat Apr  1 08:15:59 1995  Pat Rankin  (rankin@eql.caltech.edu)

	* vax.md (extv, extzv): Don't use immediate value for operand 1.

Sat Apr  1 07:48:29 1995  Yury Shevchuk  (sizif@botik.yaroslavl.su)

	* stmt.c (expand_asm_operands): Properly ignore invalid reg in clobber.

Sat Apr  1 07:02:24 1995  Paul Eggert  <eggert@twinsun.com>

	* cccp.c: General code cleanup.
	Add prototypes for static functions.
	Remove unnecessary casts to (char *); add casts to (U_CHAR *).
	Add parentheses suggested by `gcc -Wparentheses'.
	Rename local variables as suggested by `gcc -Wshadow'.
	<fcntl.h>, <stdlib.h>, <string.h>, <unistd.h>: New includes.
	<sys/time.h>, <sys/resource.h>: Include only if defined(RLIMIT_STACK).
	<time.h>: Include, unless <sys/time.h> already does.
	(HAVE_FCNTL_H, HAVE_STDLIB_H, HAVE_SYS_TIME_H): New symbols.
	(HAVE_UNISTD_H, STDC_HEADERS, TIME_WITH_SYS_TIME): Likewise.
	(__attribute__, PROTO, VA_START, PRINTF_ALIST, PRINTF_DCL): New macros.
	(PRINTF_PROTO{,_1,_2,_3}, DO_PROTO): Likewise.
	(bcopy, bzero, bcmp): If #defined by configuration file, use that.
	If STDC_HEADERS is defined, use standard C functions.
	If BSTRING is defined, or USG and VMS are not defined, use
	the C library.  Otherwise, use my_bcopy, my_bzero, my_bcmp.
	(localtime): Remove no-longer-necessary explicit declaration.
	(getenv, index, rindex): Don't declare explicitly if the
	appropriate system header should declare it.
	(fdopen): Remove no-longer-used declaration.
	(vprintf): Define a subsitute macro if !defined(HAVE_VPRINTF).
	(main): Replace `fdopen (dup (fileno (stdout)), "w"))'
	with `stdout'.
	(get_lintcmd, rescan, create_definition): Use bcmp instead of strncmp
	when both operands are known to be free of null bytes.
	(check_macro_name, compare_defs, collect_expansion): Likewise.
	(do_assert, compare_token_lists, assertion_lookup, do_line): Likewise.
	(skip_if_group, lookup): Likewise.
	(rescan): Remove unused label `startagain'.
	Abort instead of printing nonsense if the stack is corrupted
	when there was an unterminated successful conditional.
	(pcfinclude): Include explicit double-cast through GENERICPTR
	to identify particularly egregious type puns.
	(create_definition, do_define, check_macro_name): Use %.*s
	printf format to avoid painful copying-and-casting.
	(do_once): Return void, not (unused) int.
	(do_ident, do_pragma, do_sccs): Accept extra arguments so that
	all directive-handler's types match.
	(do_sccs): Define only if SCCS_DIRECTIVE is defined.
	(skip_if_group, dump_single_macro): Add `default: break;' to
	keep -Wswitch happy.
	(error, warning, error_with_line, vwarning_with_line, pedwarn): Use
	stdarg/vararg/vfprintf instead of passing bogus char * args around.
	(pedwarn_with_line, pedwarn_with_file_and_line, fatal):  Likewise.
	(verror, vwarning, verror_with_line, vwarning_with_line): New fcns.
	(dump_single_macro): Abort if ap points to garbage.
	(make_definition, make_undef, make_assertion): Parameter now char *.
	(xmalloc, xrealloc, xcalloc, savestring, index0): Make sizes size_t
	instead of unsigned; make pointer parameters GENERICPTR, not char *.
	(xcalloc): Use bzero to clear memory instead of using own loop.

Fri Mar 31 08:33:07 1995  Ken Raeburn  (raeburn@wombat.gnu.ai.mit.edu)

	* longlong.h (umul_ppmm mc68000): Use %# instead of #.

Fri Mar 31 06:37:54 1995  Michael Meissner  (meissner@cygnus.com)

	* stor-layout.c (layout_decl): Implment -fpack-struct.
	(layout_record): Ditto.

	* flags.h (flag_pack_struct): New flag variable.

	* toplev.c (flag_pack_struct): New flag variable.
	(f_options): Add -fpack-struct support.

	* Makefile.in (stor-layout.o): Add flags.h dependency.

Fri Mar 31 08:40:16 1995  Douglas Rupp  (drupp@cs.washington.edu)

	* configure (i[345]86-*-winnt3*): Add tmake_file.
	* i386/x-winnt (winnt.o): Deleted.
	* i386/t-winnt: New file.

Fri Mar 31 07:26:37 1995  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* m68k/netbsd.h, m68k/hp3bsd44.h: Remove #include of machine/ansi.h.

	* configure (a29k-*-bsd): Set tmake_file to t-libc-ok.

	* stmt.c (expand_asm_operands): Properly handle output that can't
	be directly written into.

	* c-parse.in (structsp): Correct error in last change.
	* c-common.c (init_attributes): A_FORMAT is only for decls.

Thu Mar 30 18:27:34 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* libgcc2.c: Remove explicit 0-initializations of static variables.

Thu Mar 30 18:22:39 1995  Fergus Henderson  <fjh@cs.mu.oz.au>

	* c-typeck.c (internal_build_compound_expr): Warn if LHS of comma
	expression has no side effects, or computes value which is not used.
	* stmt.c (make warn_if_unused_value): No longer static.
	* tree.h (warn_if_unused_value): Add declaration.

Thu Mar 30 18:15:11 1995  Jim Wilson  <wilson@cygnus.com>

	* combine.c (get_last_value): Revert back to use prev_nonnote_insn
	instead of prev_real_insn.  Modify test that ignores USE insns.

	* rs6000.h (SELECT_SECTION): Apply constant DECL_INITIAL test
	only to DECLs.

	* explow.c (allocate_dynamic_stack_space): Test STACK_BOUNDARY against
	BIGGEST_ALIGNMENT at run time instead of at compile time.
	Give MUST_ALIGN macro a value, and test this value in if statements.

Thu Mar 30 08:59:56 1995  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* c-parse.in: Now have 27 shift/reduce conflicts.
	(attribute_list): Just make chain of all attributes.
	(attrib): Consistently put name as PURPOSE, args, if any, as VALUE.
	(structsp): Allow attributes on any struct or union.
	* c-common.c (enum attrs): New enum class.
	(attrtab, attrtab_idx): New variables.
	(add_attribute, init_attributes): New functions.
	(decl_attributes): Major rewrite.
	* tree.c (valid_machine_attribute): Now receive name and args.

Thu Mar 30 07:20:14 1995  Paul Eggert  <eggert@twinsun.com>

	* protoize.c: Use the phrase `preprocessing directive' consistently.
	* cccp.c (handle_directive, do_line, skip_if_group): Likewise.
	(output_line_directive): Renamed from output_line_command.
	(no_line_directives): Renamed from no_line_commands.

	* cccp.c (rescan): Don't recognize preprocessing directives
	within macro args.  Warn if one is found.

Thu Mar 30 06:20:36 1995  H.J. Lu   (hjl@nynexst.com)

	* configure (i[345]86-*-linux*): Set xmake_file=x-linux,
	tm_file=i386/linux.h, and don't set extra_parts.
	(i[345]86-*-linux*aout*): New configuration.
	(i[345]86-*-linuxelf): Deleted.
	* config/linux{,-aout}.h, config/x-linux, config/xm-linux.h: New files.
	* config/i386/linux-aout.h: New file.
	* config/i386/linux.h: Extensive modifications to use ELF format
	as default.
	(LIB_SPEC): Don't use libc_p.a for -p. don't use libg.a
	unless for -ggdb.
	(LINUX_DEFAULT_ELF): Defined.
	* config/i386/linuxelf.h,config/i386/x-linux: Files deleted.
	* config/i386/xm-linux.h: Just include xm-i386.h and xm-linux.h.

Wed Mar 29 19:09:36 1995  Mike Stump  <mrs@cygnus.com>

	* libgcc2.c (__throw_type_match): Update to use new calling convention.

Wed Mar 29 14:53:23 1995  Jim Wilson  <wilson@cygnus.com>

	* gcc.c (process_command): Delete code modifying gcc_exec_prefix.
	(main): Put it here after last use of gcc_exec_prefix.  For cross
	compiler, set startfile_prefixes if gcc_exec_prefix is set and
	standard_startfile_prefix is a relative path.

	* combine.c (make_compound_operation, AND case): Undo July 7, 1994
	change.

	* mips/mips.md (call_internal1, call_value_internal1): Move %* from
	start of assembler output to immediately before the jal.

	* mips/mips.c (function_prologue): Put SDB_DEBUGGING_INFO ifdef around
	code for SDB_DEBUG support.
	(mips_select_rtx_section, mips_select_section): Change rdata_section
	to READONLY_DATA_SECTION and sdata_section to SMALL_DATA_SECTION.
	* mips/mips.h (SMALL_DATA_SECTION): Define.

	* reorg.c (mark_referenced_resources): Make setjmp use all registers.

	* flow.c (mark_used_regs, case SUBREG): Only fall through to REG case
	if operand is a REG.

	* i960/i960.h (TARGET_SWITCHES): Make -mold-align set
	TARGET_FLAG_STRICT_ALIGN.
	(STRICT_ALIGNMENT): Test TARGET_STRICT_ALIGN.

	* sh/sh.c (andcosts): Modify costs to match the hardware, and add
	explanatory comments.

	* sparc/sol2.h (CPP_PREDEFINES): Add -D__SVR4.

Wed Mar 29 14:30:30 1995  Michael Meissner  <meissner@cygnus.com>

	* rs6000/rs6000.md (movsf): When moving to/from integer registers,
	don't move floating point to memory if it is being simulated with
	-msoft-float.

Wed Mar 29 06:47:36 1995  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* c-parse.in (initdcl): Only call decl_attributes once.
	* c-common.c (decl_attributes): Clean up test for __mode__.

Tue Mar 28 08:34:37 1995  John Hassey  (hassey@dg-rtp.dg.com)

	* i386.md (adddi3): Don't treat two non-equal MEMs as non-aliasing.

Tue Mar 28 08:20:49 1995  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* a29k.h (CONSTANT_ADDRESS_P): Provide consistent definition.

Tue Mar 28 07:26:41 1995  Paul Eggert <eggert@twinsun.com>

	* cccp.c (do_xifdef, do_endif): Remove unnecessary pointer comparisons.

Mon Mar 27 20:45:15 1995  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* calls.c (expand_call, store_one_arg): Don't set KEEP in calls
	to assign_stack_temp.
	* function.c (preserve_temp_slots): Clear ADDR_TAKEN on item
	that we are preserving.

Mon Mar 27 14:39:35 1995  Ian Lance Taylor  <ian@cygnus.com>

	* mips/mips.h (FIRST_PSEUDO_REGISTER): Increment.
	(FIXED_REGISTERS, CALL_USED_REGISTERS): Add new register.
	(MD_REG_LAST): Increment.
	(ST_REG_FIRST, ST_REG_LAST): Increment.
	(HILO_REGNUM): Define.
	(enum reg_class): Add HILO_REG.
	(REG_CLASS_NAMES): Add "HILO_REG".
	(REG_CLASS_CONTENTS): Add HILO_REG initializer, and adjust ST_REGS
	and ALL_REGS initializers.
	(SECONDARY_RELOAD_CLASS): Remove.
	(SECONDARY_INPUT_RELOAD_CLASS): Define.
	(SECONDARY_OUTPUT_RELOAD_CLASS): Define.
	(REGISTER_MOVE_COST): Treat HILO_REG as MD_REGS.
	(REGISTER_NAMES): Add initialization line.
	(DEBUG_REGISTER_NAMES): Add "accum".
	* mips/mips.md: For each instruction which sets HI or LO, clobber
	HILO_REGNUM with (clobber (match_scratch:MODE N "=a")).  Change
	each explicit reference to register 66 to register 67.
	(mulsidi3): Change to define_expand.
	(mulsidi3_internal): New name of old mulsidi3.
	(mulsidi3_64bit): New insn.
	(umulsidi3): Change to define_expand.
	(umulsidi3_internal): New name of old umulsidi3.
	(umulsidi3_64bit): New insn.
	(madddi_64bit, umaddi_64bit): New insns.
	(movdi_internal2): Add case for setting HILO_REG to zero.
	(reload_indi, reload_outdi): New define_expands.
	(movsi_internal1, movsi_internal2): Add cases for setting MD_REGS
	to zero, and for setting a general reg to HILO_REG.
	(reload_outsi): New define_expand.
	* mips/mips.c (mips_reg_names): Add "accum".
	(mips_sw_reg_names): Likewise.
	(mips_regno_to_class): Map HILO_REGNUM to HILO_REG.
	(mips_move_1word): Handle moving HILO_REGNUM to a general
	register.  Make sure that the normal MD_REG cases aren't used for
	HILO_REGNUM.  Handle moving zero to a MD_REG.
	(mips_move_2words): Make sure that the normal MD_REG cases aren't
	used for HILO_REGNUM.  Handle moving zero to a MD_REG.
	(override_options): Set mips_char_to_class for 'a' and 'b'.
	(mips_secondary_reload_class): Add in_p argument.  Handle
	HILO_REGNUM.

Mon Mar 27 07:16:05 1995  Warner Losh  <imp@village.org>

	* gcc.c: Removed __NetBSD__ from conditional.
	Declare strerror if HAVE_STRERROR is defined; otherwise
	declare sys_errlist and sys_nerr.
	(my_strerror): New function.

Fri Mar 24 18:08:14 1995  Jason Merrill  <jason@python.cygnus.com>

	* i386/linux.h (LIB_SPEC): Don't try to link with libraries we
	know only exist in archive form unless -static.

Fri Mar 24 16:12:16 1995  Doug Evans  <dje@cygnus.com>

	* Makefile.in (multilib.h): Depend on Makefile, not config.status.

Fri Mar 24 15:01:17 1995  Michael Meissner  <meissner@cygnus.com>

	* rs6000/rs6000.h (TARGET_MULTIPLE_SET): New target_flags bit that
	indicates -mmultiple or -mno-multiple was explicitly passed by the
	user, and not set as part of the cpu defaults.
	(TARGET_SWITCHES): Set TARGET_MULTIPLE_SET bit for both -mmultiple
	and -mno-multiple.

	* rs6000/rs6000.c (rs6000_override_options): If -mmultiple or
	-mno-multiple was explicitly used, don't override the setting with
	the processor default.

Wed Mar 22 21:42:13 1995  Doug Evans  <dje@cygnus.com>

	* i960/i960.c (i960_function_arg_advance): Ensure all regs marked
	as used if stack is also used (for va_start).
	(i960_setup_incoming_varargs): Rewrite to be similar to Intel's
	version, but don't allocate reg block unless necessary.
	* ginclude/va-i960.h (varargs va_start): Save g14 explicitly.
	Account for arguments preceding va_alist.

Wed Mar 22 13:24:55 1995  Torbjorn Granlund  <tege@adder.cygnus.com>

	* pa.c (singlemove_string): Handle SFmode constants again.  Simplify.
	(zdepi_cint_p): Make some variables HOST_WIDE_INT.
	(lhs_lshift_cint_operand): Likewise.
	(output_and): Likewise.
	(output_ior): Likewise.

Wed Mar 22 12:40:09 1995  Jim Wilson  <wilson@chestnut.cygnus.com>

	* sh.md (udivsi3): Don't clobber register 6.
	(udivsi3, divsi3, mulsi3_call): Use a pseudo-reg with regclass 'z'
	for output rather than hard register 0.
	(block_move_real): Don't clobber registers 4 and 5.

	* mips.c (mips_select_section): Apply constant DEC_INITIAL tests
	only to VAR_DECLs.

Wed Mar 22 03:53:17 1995  Richard Stallman  <rms@mole.gnu.ai.mit.edu>

	* config.sub (rm400, rm600): New machine names.
	(sinix5.*, sinix): New os aliases.
	(mips-siemens): Default os to sysv4.

Mon Mar 20 21:56:47 1995  Per Bothner  <bothner@kalessin.cygnus.com>

	Merged Paul Eggert's patch to cccp.c of Wed Mar  8 18:21:51 1995:
	* cpplib.c (do_include): Fix type typo: pcfbuflimit is char *, not int.

	Merged Doug Evans' patch to cccp.c of Mon Feb 27 17:06:47 1995:
	* cpplib.c (do_include): Check for redundant file before opening in
	relative path case.  Don't call fstat unnecessarily.

	Merged J.T. Conklin's patch to cccp.c of Wed Feb 22 20:29:31 1995:
	* cpperror.c:  Removed __NetBSD__ from conditional.

	Merged Kenner's patch to cccp.c & cexp.y of Tue Sep 20 17:49:47 1994:
	* cppexp.c (struct operation):  Make value by HOST_WIDE_INT.
	(cpp_parse_expr):  Change return type to HOST_WIDE_INT.
	* cpplib (eval_if_expr):  Likewise.
	(do_if, do_elif):  Update appropriately.
	* cpplib.h (cpp_parse_expr):  Removed, to avoid defining HOST_WIDE_INT.

	Merged Paul Eggert's patch to cccp.c of Mon Aug  8 19:42:09 1994:
	* cpplib.c (create_definition): Warn about `#define a@', since a
	diagnostic is now required (see ISO TC1's addition to subclause 6.8).
	Also warn about `#define is-empty(x) (!x)'.

Tue Mar 21 00:10:50 1995  Jeffrey A. Law  <law@mole.gnu.ai.mit.edu>

	* x-pa (CC): Add "-Dbsd4_4".

Mon Mar 20 18:40:31 1995  Per Bothner  <bothner@kalessin.cygnus.com>

	* toplev.c (print_error_function):  New function hook.
	(default_print_error_function):  New function.  Default value
	of print_error_function.  Code moved here from report_error_function.
	(report_error_function):  Use print_error_function hook.

Mon Mar 20 20:27:43 1995  Doug Evans  <dje@cygnus.com>

	* cccp.c (do_xifdef): Handle c++ comments.
	(do_endif): Likewise.

Mon Mar 20 15:31:45 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* configure (i386 configurations): Prepend i386/ to t-crt*.

Mon Mar 20 07:58:04 1995  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* stmt.c (fixup_gotos): Add missing call from last change.

	* objc/misc.c: Put Alpha-specific decls before #include of runtime.h.

	* alpha.h (EXTRA_SECTIONS): Write zeros first time in .rdata.

Sat Mar 18 16:37:24 1995  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* flow.c (mark_used_regs, case SUBREG): Set reg_changes_size even
	for integer modes.
	(mark_used_regs): Set reg_changes_size for RHS, if necessary.
	* combine.c (gen_lowpart_for_combine): Set reg_changes_size, if needed.
	* reload.c (push_reload): Reload a SUBREG if paradoxical and
	class is CLASS_CANNOT_CHANGE_SIZE.
	* reload1.c (gen_reload): Handle paradoxical SUBREGs.
	* alpha.h (SECONDARY_{INPUT,OUTPUT}_RELOAD_CLASS): Need GENERAL_REGS
	for paradoxical SUBREG and FLOAT_REGS.
	(SECONDARY_NEEDED_MODE): Use actual mode for 4 bytes or wider.
	* alpha.md (movsi): Allow FP regs and add case for store of FP reg.
	Remove cvtlq from MEM to FP reg case.

	* rtl.h (emit_insns_after): Add declaration.
	* stmt.c (fixup_gotos): Do a cleanup for a block when it is exited
	even if label if not defined yet.

	* function.c (pop_function_context): Fix error in last change;
	reference old value of current_function_decl before we modify it.

Fri Mar 17 21:57:44 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* toplev.c (rest_of_compilation): Handle -Wreturn-type properly
	for inlines we aren't compiling yet.

Fri Mar 17 21:26:48 1995  Mike Stump  <mrs@cygnus.com>

	* libgcc2.c (__register_exceptions): Handle empty tables.

Fri Mar 17 11:48:31 1995  Douglas Rupp  (drupp@cs.washington.edu)

	* i386/winnt.c (winnt_function_prologue): Deleted.
	(gen_stdcall_suffix): New function.

Thu Mar 16 17:36:52 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* svr4.h (LINK_SPEC): If the user did not specify -h name, use the
	output file name, if any.
	* sparc/sol2.h (LINK_SPEC): Ditto.  Also, if the user did not
	specify -R path, add an -R for each -L.

	Move SunOS 4-specific assembler switches into the appropriate place.
	* m68k/sun[23].h (ASM_SPEC): Add %{R} %{j} %{J} %{h} %{d2}
	%{keep-local-as-symbols:-L}.
	* i386/sun.h (ASM_SPEC): Add %{R} %{keep-local-as-symbols:-L}.
	* sparc/sparc.h (ASM_SPEC): Ditto.
	* gcc.c (default_compilers): Remove %{R} %{j} %{J} %{h} %{d2}
	%{keep-local-as-symbols:-L} from assembler rules.

Thu Mar 16 16:58:09 1995  Michael Meissner  <meissner@cygnus.com>

	* rs6000/eabi-ctors.c: New file, handle C++ static constructors
	and destructors without requiring anything else from a libc.

	* rs6000/t-eabi (LIB2FUNCS_EXTRA): Build eabi-ctors.c.

	* rs6000/eabi.asm: Do not load up register 2 if there is no .got
	section.  Jump to the __do_global_ctors function at the end of
	processing to call C++ static constructors, and it will return to
	__eabi's caller.  Use normal volatile registers, instead of saving
	and restoring registers 30 and 31.

	* rs6000/eabi.h (STARTFILE_SPEC): Define as null.
	(LIB_SPEC): Ditto.
	(ENDFILE_SPEC): Ditto.
	(LIBGCC_SPEC): Always look for libgcc.a.

Thu Mar 16 17:05:14 1995  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>

	* stmt.c (warn_if_unused_value, case SAVE_EXPR): New case.
	(warn_if_unused_value, case NOP_EXPR): OK if CALL_EXPR inside.

	* c-common.c (decl_attributes): Allow alignment for TYPE_DECLs.

	* Makefile.in (xsys-protos.h): Fix typo in -U operand.

Thu Mar 16 13:49:10 1995  Per Bothner  <bothner@rtl.cygnus.com>

	* cpplib.c, cpplib.h:  New files - a C PreProcessor library.
	* cpphash.c, cpphash.h, cppalloc.c, cpperror.c, cppexp.c:
	New files - utility features used by cpplib.
	* cppmain.c:  New file - cpp replacement main program for cpplib.
	* Makefile.in:  New rules to build cppmain.

Thu Mar 16 16:11:05 1995  Douglas Rupp  (drupp@cs.washington.edu)

	* i386/winnt.h (FUNCTION_PROLOGUE, HAVE_probe, gen_probe): Deleted.
	(ENCODE_SECTION_INFO, VALID_MACHINE_DECL_ATTRIBUTE): New macro.

Thu Mar 16 15:58:24 1995  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* combine.c (apply_distributive_law, case SUBREG): Fix typo when
	checking for paradoxical SUBREG.

Wed Mar 15 18:45:08 1995  Doug Evans  <dje@cygnus.com>

	* libgcc1-test.c: Renamed from cross-test.c.
	* Makefile.in (LIBGCC1_TEST): Renamed from CROSS_TEST.
	(all.cross): Delete $(ENQUIRE) dependency.
	(libgcc1-test): Renamed from cross-test.
	Delete unnecessary gcc-cross and $(LIBGCC) dependencies.
	Link with -nostartfiles -nostdlib
	`$(GCC_FOR_TARGET) --print-libgcc-file-name`.
	(libgcc1-test.o): Renamed from cross-test.o.
	Change gcc-cross dependency to xgcc since the latter is used.

Wed Mar 15 13:49:21 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* tree.c (save_tree_status): Now takes a tree 'context' instead of
	a boolean 'toplevel' as an argument.  If 'context' is not
	current_function_decl, create a new obstack for the new function.
	Also save inline_obstacks.
	(restore_tree_status): No longer takes a second argument.  Also
	restore inline_obstacks.
	(temporary_allocation): Clear inline_obstacks.
	(permanent_allocation): Free up the obstacks in inline_obstacks.

	* function.h (struct function): New fields contains_functions and
	inline_obstacks.

	* function.c (push_function_context_to): Now takes a tree
	'context' instead of a boolean 'toplevel' as an argument.
	Also save current_function_contains_functions.
	(push_function_context): Pass current_function_decl to it.
	(pop_function_context_from): Takes 'context' instead of 'toplevel'.
	Set current_function_contains_functions properly.
	(pop_function_context): Pass current_function_decl to it.

Wed Mar 15 14:53:09 1995  Michael Meissner  <meissner@cygnus.com>

	* rs6000/rs6000.md (abssi2): Turn into a define_expand.  If
	TARGET_POWER, do old code that uses the abs instruction.  If not,
	do abs in three instructions, using a temporary register, which
	enables generating more reasonable code for sne.  Add a recognizer
	for negative of the absolute value.  Add define_splits for the
	PowerPC.
	(sne insn): Add a recognizer for sne on the PowerPc to use two
	instructions, compared to the four generated using the absolute
	value insn.

Tue Mar 14 18:38:40 1995  J.T. Conklin  <jtc@cygnus.com>

	* m68k.md ({add,sub,mul,div}[sdx]f3): Add new patterns for recognizing
	SImode, HImode, and QImode operands.

Mon Mar 13 18:59:36 EST 1995  David Edelsohn  <edelsohn@mhpcc.edu>

	* rs6000.h (CPP_SPEC): Add PPC403.
	(processor_type): Add PPC403.
	(RTX_COSTS): Add PPC403.
	* powerpc.h (CPP_SPEC): Add PPC403.
	* sysv4.h (CPP_SPEC): Add PPC403.
	* rs6000.c (processor_target_table): Add PPC403.
	* rs6000.md (define_attr cpu and function units): Add PPC403.

Mon Mar 13 14:40:23 1995  Michael Meissner  <meissner@cygnus.com>

	* rs6000/rs6000.md (call, call_value insns): Do not put a nop
	after a bl instruction on System V.4 and eABI.

	* rs6000/sysv.4 (SUBTARGET_SWITCHES): Add support for
	-mno-traceback to suppress the V.4 traceback word.
	(ASM_DECLARE_FUNCTION_NAME): Don't put out a traceback work if
	-mno-traceback.

Mon Mar 13 13:36:37 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* t-svr4, i386/t-{crtpic,sol2}, m88k/t-svr4, sparc/t-sol2:
	Use -fPIC, rather than -fpic, for building crtstuff.

Sat Mar 11 17:27:08 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* configure: Use aix3newas.h for AIX 3.2.4 and 5.
	* rs6000/aix41.h: Undefine ASM_OUTPUT_EXTERNAL{,_LIBCALL}.
	* rs6000/aix3newas.h: New file.  Define ASM_SPEC to -u, and
	undefine ASM_OUTPUT_EXTERNAL{,_LIBCALL}.

Sat Mar 11 06:42:50 1995  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* dbxout.c (dbxout_symbol): Properly handle decl whose DECL_NAME
	points to a TYPE_DECL with a zero TYPE_NAME.

Fri Mar 10 18:18:33 1995  Torbjorn Granlund  <tege@cygnus.com>

	* pa.h (PROMOTE_MODE): Define.

Fri Mar 10 14:37:58 1995  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* sdbout.c (sdbout_record_type_name): If TYPE_NAME is
	a TYPE_DECL, get name from DECL_NAME.

Fri Mar 10 14:09:26 1995  Doug Evans  <dje@cygnus.com>

	* arm/riscix.h (SUBTARGET_SWITCHES): Renamed from
	ARM_EXTRA_TARGET_SWITCHES.
	* arm/riscix1-1.h (SUBTARGET_SWITCHES): Likewise.
	* arm.h (SUBTARGET_SWITCHES): Likewise.
	(TARGET_HARD_FLOAT, TARGET_SOFT_FLOAT): Define.
	(TARGET_SWITCHES): Add -msoft-float, -mhard-float.
	(BYTES_BIG_ENDIAN): Delete #ifndef/#endif.
	(CONDITIONAL_REGISTER_USAGE): If -msoft-float, disable fp regs.
	(FUNCTION_VALUE): R16 is return reg only if !-msoft-float.
	(LIBCALL_VALUE): Likewise.
	* arm.md (all fp patterns): Conditionalize on TARGET_HARD_FLOAT.
	(*movsf_soft_insn, *movdf_soft_insn): New patterns.

Fri Mar 10 13:53:46 1995  Jim Wilson  <wilson@cygnus.com>

	* reorg.c (steal_delay_list_from_target): Exit at the top if the
	branch in SEQ is not a single set.

	* sh.md (movdi define_split, movdf define_split): Correct indentation
	and formatting.  Make the condition fail if an operand is a MEM
	with an auto-inc address.

	* varasm.c (copy_constant): Copy operand of ADDR_EXPR if it is a
	constant.

	* mips/abi64.h (SETUP_INCOMING_VARARGS): Correct arguments to
	move_block_from_reg call.

	* expr.c (expand_assignment): When offset is zero, make new MEM
	before setting MEM_VOLATILE_P.

	* reload.c (find_reloads, case 'o'): Accept a fully reloaded
	auto-increment address.

	* combine.c (max_uid_cuid): New static variable.
	(INSN_CUID): Call abort if INSN is out of range.
	(combine_instructions): Set max_uid_cuid.  Set uid_cuid directly
	instead of through INSN_CUID.
	(get_last_value): Use prev_real_insn instead of prev_nonnote_insn.
	Ignore USE insns generated by combine.

Fri Mar 10 13:47:08 1995  Rod Barman  <rodb@cs.ubc.ca>

	* m68k/fpgnulib.c (__fixdfsi): Catch values < 0.5 in magnitude.

Fri Mar 10 12:02:33 1995  Ian Lance Taylor  <ian@cygnus.com>

	* fixincludes: Fix `typedef struct term;' on hppa1.1-hp-hpux9.

Fri Mar 10 05:50:11 1995  Oliver Kellogg  (Oliver.Kellogg@RST13.DASA.DBMAIL.d400.de)

	* 1750a.c (sectname): Reverse Init and Normal.
	(print_operand_address, case PLUS): Add case for LABEL_REF.
	(print_operand_address, case LABEL_REF): Split fom SYMBOL_REF.
	(print_operand_address, case CODE_LABEL): New case.
	(ASM_FILE_END): Delete.
	* 1750a.h (FUNCTION_EPILOGUE): Restore stack before freeing local vars.
	(DEFAULT_SIGNED_CHAR): Now 1.
	(DATA_SECTION_ASM_OP): Use pseudo-op for read-only data (later copied).
	(JUMP_TABLES_IN_TEXT_SECTION): Define.
	(ASM_OUTPUT_ASCII): Split into multiple lines if long.
	(ASM_OUTPUT_{CHAR,SHORT,INT,LONG_INT}): Split up.
	(ASM_OUTPUT_COMMON): Call check_section.

Thu Mar  9 12:46:53 1995  Michael Meissner  <meissner@cygnus.com>

	* rs6000.md (movsf): Do not call truncdfsf2 for non PowerPC
	when expanding a store to memory and -msoft-float was used.

Thu Mar  9 08:51:35 1995  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* c-decl.c (start_function): Handle new parameter ATTRIBUTES.
	* c-tree.h (start_function): Add new parameter.
	* c-lang.c (finish_file): Pass new parm to start_function.
	* objc-act.c (build_module_descriptor, really_start_method): Likewise.
	* c-parse.in (fndef, nested_function): Pass prefix_attributes
	to start_function.
	(setspecs): Save prefix_attributes in declspec_stack.
	(decl rules): Restore prefix_attributes along with current_declspecs.
	(setattrs): Concatenate prefix_attributes to previous value.
	* c-common.c (decl_attributes): Handle prefix and suffix attributes
	the same way.

	* print-tree.c (print_node): Fix typo in printing large INTEGER_CST.

	* varasm.c (assemble_variable): Consistently use DECL_SIZE for
	everything.

	* c-typeck.c (convert_for_assignment): Fix typo in testing for
	pointer to function type.

	* varasm.c (record_constant_1): Handle NON_LVALUE_EXPR.
	Rewrite to use switch instead of if/then/elseif/else.

Wed Mar  8 18:21:51 1995  Paul Eggert  <eggert@twinsun.com>

	* cccp.c (do_include): Fix type typo: pcfbuflimit is char *, not int.

Wed Mar  8 17:30:29 1995  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* fold-const.c (force_fit_type): Always propagate OVERFLOW.

	* rtl.def (INLINE_HEADER): Add new "e" field.
	* rtl.h (FORCED_LABELS): New field; other fields adjusted.
	(gen_inline_header_rtx): New parm FORCED_LABELS.
	* emit-rtl.c (gen_inline_header): Add new parm FORCED_LABELS.
	* integrate.c (initialize_for_inline, output_inline_function):
	Handle FORCED_LABELS.

Wed Mar  8 13:47:20 1995  Jason Merrill  (jason@cygnus.com)

	* alpha.h (WORD_SWITCH_TAKES_ARG): Add -rpath.
	(LINK_SPEC): Pass through -taso and -rpath.
	* alpha/osf12.h (LINK_SPEC): Ditto.

Wed Mar  8 09:59:56 1995  Michael Meissner  <meissner@cygnus.com>

	* rs6000/eabi.asm: Rewrite so that the initialized pointers go
	into the .got2 section, which allows eabi.asm to be assembled with
	the -mrelocatable option.  Move the data picked up from the bl
	instruction to before the traceback tag.

	* rs6000/sysv4.h (CPP_SPEC): Define _RELOCATABLE if -mrelocatable
	switch is used.

	* libgcc2.c (__new_handler): Don't initialize the pointer variable
	with the address of __default_new_handler, which may not work in
	some shared library mechanisms.
	(__builtin_new): If __new_handler is NULL, call the function
	__default_new_handler.

Tue Mar  7 17:34:59 1995  Ian Lance Taylor  <ian@cygnus.com>

	* i960.h (PROCESS_PRAGMA): Define.
	(ROUND_TYPE_ALIGN): Pass maximum of COMPUTED and SPECIFIED to
	i960_round_align.
	(ROUND_TYPE_SIZE): Delete.
	* i960.c (process_pragma): Uncomment, and rewrite for gcc 2.
	(i960_round_size): Delete.
	(i960_round_align): Don't adjust suggested alignment downward.
	Restrict alignment to value set by #pragma align.

Tue Mar  7 12:14:46 1995  Doug Evans  <dje@cygnus.com>

	* configure (sparc64-*-elf): Add crtbegin.o, crtend.o to extra_parts.
	* sparc/sp64-elf.h (TARGET_VERSION): Define.
	(CPP_PREDEFINES): Delete sun, sparc, unix.  Delete OS assertions.
	(ASM_SPEC): Define.
	(LINK_SPEC): Delete solaris stuff, this is an embedded target.
	(STARTFILE_SPEC, ENDFILE_SPEC): Define.

Mon Mar  6 17:54:01 1995  Doug Evans  <dje@cygnus.com>

	* Makefile.in (install-common): Fix typo in installation of cpp.
	Likewise with gcc-cross.

Mon Mar  6 02:29:05 1995  Jeffrey A. Law  <law@mole.gnu.ai.mit.edu>

	* pa.md (movsicc): New expander.

Fri Mar  3 13:34:20 1995  Michael Meissner  (meissner@cygnus.com)

	* rs6000/sysv4.h (ASM_SPEC): If -mrelocatable was passed to
	compiler, pass it on to the assembler.

Fri Mar  3 12:11:28 1995  Ian Lance Taylor  <ian@cygnus.com>

	* fixincludes: Add fixes for VxWorks header files.
	* ginclude/stddef.h: If VxWorks typedef macros are defined, invoke
	them as appropriate.

Fri Mar  3 05:48:54 1995  Paul Eggert  <eggert@twinsun.com>

	* cccp.c (dump_single_macro): Fix typo: % wasn't properly
	doubled in printf formats.

Thu Mar  2 19:44:02 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* expr.c (expand_expr, CLEANUP_POINT_EXPR): Force the operand out
	of memory before running cleanups.

Thu Mar  2 19:15:24 1995  Paul Eggert  <eggert@twinsun.com>

	* cccp.c (rescan): Prevent accidental token-pasting to
	get !=, *=, /=, ==, or ^=.

Thu Mar  2 15:37:13 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* c-typeck.c (build_binary_op): Avoid spurious warning
	comparing enumerator to unsigned variable.

Thu Mar  2 18:18:38 1995  J.T. Conklin  <jtc@netbsd.org>

	* m68k.md (sqrtsf2,sqrtdf2): Use fp precision specifiers.

Thu Mar  2 18:09:01 1995  Stephen L Moshier  (moshier@world.std.com)

	* c-lex.c (yylex, case !NOT_FLOAT): Remove previous change.

Thu Mar  2 15:26:50 1995  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* Makefile.in (bootstrap*): Pass new STAGE_PREFIX to recursive makes.

Wed Mar  1 14:52:16 1995  Ian Lance Taylor  <ian@cygnus.com>

	* i960/i960-coff.h (ASM_FILE_START): Define.
	(CTORS_SECTION_ASM_OP, DTORS_SECTION_ASM_OP): Define.
	(EXTRA_SECTIONS, EXTRA_SECTION_FUNCTIONS): Define.
	(CTORS_SECTION_FUNCTION, DTORS_SECTION_FUNCTION): Define.
	(INT_ASM_OP): Define.
	(ASM_OUTPUT_CONSTRUCTOR, ASM_OUTPUT_DESTRUCTOR): Define.
	* i960/vx960-coff.h (CPP_PREDEFINES): Define.
	(CPP_SPEC): Define.
	(CC1_SPEC): Default to -mca.

Wed Mar  1 11:10:54 1995  Michael Meissner  (meissner@cygnus.com)

	* rs6000/rs6000.c (output_prologue): Do not emit the word that
	gives the PC relative location to the local GOT table for the
	-mrelocatable option here.
	* rs6000/sysv4.h (ASM_DECLARE_FUNCTION_NAME): Emit it here.

	* t-eabi (MULTILIB_OPTIONS, MULTILIB_DIRNAMES): Build -msoft-float
	and -mrelocatable versions of the library.

	* rs6000/powerpc.h (CPP_PREDEFINES): Define the cpu and machine as
	powerpc, not rs6000.

	* libgcc2.c (_unwind_function): Clone for powerpc, using the
	PowerPC mnemonics.

	* rs6000/rs6000.md (uminsi3, umaxsi3): Silence warnings that
	-2147483648 is too large to fit in a signed integer on 32-bit
	hosts.

Wed Mar  1 06:48:31 1995  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>

	* fold-const.c (decode_field_reference): Don't check TREE_CODE
	of EXP; let get_inner_reference decide if have reference.
	Allow no bit reference if have AND_MASK.
	(all_ones_mask_p): Use tree_int_cst_equal, not operand_equal_p.
	(unextend): New function.
	(fold_truthop): For constant cases, use new function, rework
	conversion, and warn if comparison can never be true.

	* expr.c (store_expr): Do conversion in two steps for promoted lhs.

See ChangeLog.9 for earlier changes.
