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 parameter 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 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 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.
