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 compatible 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.
	(function 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 appropriate 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
	legend information not be produced.
	(LINK_SPEC): Removed -z text

Tue Sep 12 19:05:39 1995  Jim Wilson  <wilson@chestnut.cygnus.com>

	* cccp.c (is_system_include): Call skip_redundant_dir_prefix.

Tue Sep 12 18:58:21 1995  John Carr  <jfc@mit.edu>

	* sparc.md: Change `*return "string"' to "string" in patterns.

Tue Sep 12 18:48:47 1995  Craig Burley  (burley@gnu.ai.mit.edu)

	* function.c (put_var_into_stack): For CONCAT case, order of
	placement depends on FRAME_GROWS_DOWNWARD, not STACK_GROWS_DOWNWARD.

Tue Sep 12 18:34:10 1995  Doug Evans  <dje@canuck.cygnus.com>

	* va-sparc.h (v9 varargs va_start): Handle __builtin_va_alist
	being stack argument.

	* sparc.h (STATIC_CHAIN_REGNUM): Use %g5 for sparc64.
	(TRAMPOLINE_TEMPLATE): Rewrite for sparc64.
	(TRAMPOLINE_SIZE): Is 40 for sparc64.
	* sparc.c (sparc64_initialize_trampoline): Rewrite.

Tue Sep 12 18:30:22 1995  Douglas Rupp  (drupp@cs.washington.edu)

	* cp/Make-lang.in (cc1plus) : Removed unnecessary $(exeext).

	* configure: Added code to handle gcc_extra_objs.
	(alpha-winnt): Changed xmake_file to winnt/x-winnt.
	Added extra_gcc_objs=spawnv.o; changed extra_programs to ld.exe.
	(i386-winnt): Changed xmake_file to winnt/x-winnt.
	Added extra_gcc_objs=spawnv.o; changed extra_programs to ld.exe.
	* configure.bat: Changed to used common winnt/config-nt.bat.
	* Makefile.in: Changed various .o's to .$(objext)'s
	(specs): Removed unnecessary $(exeext).
	(EXTRA_GCC_OBJS): New variable.
	(clean): Removed $(LIB2FUNCS_EXTRA)
	* objc/Makefile: Changed archive command for libobjc.a to use $?
	for objects.

	* alpha/x-winnt, i386/x-winnt: Deleted.
	* alpha/config-nt.bat, i386/config-nt.bat: Deleted.
	* alpha/config-nt.sed, i386/config-nt.sed: Moved architecture
	independent commands to config/winnt/config-nt.sed.
	* alpha/winnt.h: Added -D_M_ALPHA to CPP_PREDEFINES.
	Changed LIB_SPEC to be compatible with Gnu ld for NT.
	* i386/winnt.h: Added -D_cdecl=__attribute__((__cdecl__)).
	Change LIB_SPEC to be compatible with Gnu ld for NT.
	* winnt/config-nt.bat, winnt/config-nt.sed: New files.
	* winnt/dirent.{c,h}, winnt/fixinc-nt.c, winnt/headers.mak: New files.
	* winnt/ld.c: Changed precedence of libraries to look for
	libfoo.lib before libfoo.a
	Changed to work like Gnu ld for NT.
	* winnt/libgcc.mak, winnt/mklibgcc.c: New files.
	* winnt/spawnv.c: Changed spawn function entry points to __spawn*
	instead of spawn*.
	* winnt/x-winnt: New file.
	* fixinc-nt.sed: New file.
	* fixinc.winnt: Rewritten to use fixinc-nt.sed.

	* gcc.c: Remove fix_argv kludge.

Tue Sep 12 13:24:17 1995  Michael Meissner  <meissner@tiktok.cygnus.com>

	* rs6000.md (power subdi3 pattern): Fix pattern to have 5
	alternatives, and correct 4th alternative to match reality.

	* rs6000.md (adddi3, subdi3, negdi2): Add constraints so output reg
	does not overlap one reg with one of the inputs.

Tue Sep 12 13:09:48 1995  Philippe De Muyter (phdm@info.ucl.ac.be)

	* m68k.c (output_scc_di): Fixed for non-SGS_CMP_ORDER syntax.

	* collect2.c (scan_libraries): Cast lsyms' alloca to LDSYM*.

Tue Sep 12 13:04:12 1995  Niklas Hallqvist  (niklas@appli.se)

	* stmt.c (expand_start_stmt_expr): Do stack adjust in right place.

	* stdarg.h (__gnuc_va_list): Make char * for NetBSD.

Tue Sep 12 12:44:46 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* ginclude/va-ppc.h (va_arg): Reorganize to avoid BIND_EXPRs of
 	aggregate or array type.

Tue Sep 12 12:42:27 1995  Ian Lance Taylor  <ian@cygnus.com>

	* fixincludes: Fix HP/UX <sys/file.h> for g++ -pedantic-errors.

	* fixincludes (curses.h): typedef bool need not take up entire line.

Mon Sep 11 19:05:42 1995  Stan Cox  (coxs@dg-rtp.dg.com)

	* c-typeck.c (digest_init): Don't recursively call digest_init
	when in traditional mode if the type is invalid.

Mon Sep 11 18:58:26 1995  Oliver Kellogg  (Oliver.Kellogg@space.otn.dasa.de)

	* 1750a.md: Added DLB/DSTB peepholes for HFmode.
	Corrected mnemonics for HImode DSTB peephole.

Mon Sep 11 18:48:06 1995  Michael Meissner  <meissner@tiktok.cygnus.com>

	* config/fp-bit.c (FLO_union_type): Remove bitfields to set sign,
	exponent, and mantissa, and add value_raw field, which is an
	integer of the appropriate type.  If _DEBUG_BITFLOAT is defined,
	provide little and big endian bitfields.  If the macro
	FLOAT_BIT_ORDER_MISMATCH is defined, use explicit bitfields.
	(pack_d, unpack_d): Switch to use value_raw and explicit shifts
	and masks so that we don't have to worry about whether the target
	is big or little endian unless FLOAT_BIT_ORDER_MISMATCH is
	defined.  If single precision floating point, rename to pack_f and
	unpack_f, so there is no confusion in the debugger.

	* rs6000.h (rs6000_abi): New enumeration to describe which
	ABI we're conforming to.
	(rs6000_stack): Use abi enum, not AIX vs. V.4 boolean.
	(ASM_OUTPUT_OPTIONS): New macro to print output options in .s file.
	(ASM_FILE_START): Use it.
	(output_options,rs6000_float_const): Declare new functions.

	* rs6000.c (output_option{,s}): New functions to write -f, -m,
	and -W options to the asm file.
	(rs6000_float_const): New function to generate floating point
	constants portably used in signed,unsigned -> double conversions.
	(rs6000_stack_info,debug_stack_info): Use ABI enumeration instead
	of AIX vs. V.4 boolean.

	* rs6000.md (float{,uns}sidf2): Call rs6000_float_const to
	portably build the proper floating point constant for conversions.
	(movdi): Properly handle movdi of CONST_{INT,DOUBLE} on little
	endian systems.

	* rs6000/sysv4.h (LIBGCC2_WORDS_BIG_ENDIAN): Define to be 0/1
	depending on the target endianess.
	(ASM_FILE_START): Define, to call output_options in addition to
	output_file_directive.
	(TRAMPOLINE_SIZE): Correct size to match code.

	* rs6000/eabi{,le}sim.h (CPP_SPEC): Define the correct endian
	macro for varargs/stdargs use.

Mon Sep 11 18:41:58 1995  Jim Wilson  <wilson@chestnut.cygnus.com>

	* c-decl.c (redeclaration_error_message): For TYPE_DECLs, return 0
	if TYPE_MAIN_VARIANT of old type is same as new type.

Mon Sep 11 17:39:35 1995  Rob Ryan (robr@cmu.edu)

	* xcoffout.c (xcoff_inlining): New variable, used in place of
	xcoff_current_include_file when determining whether to use
	absolute line numbers.
	(xcoffout_source_file): Switched to using xcoff_inlining to
	determine when to emit .bi/.ei directives.

Mon Sep 11 16:55:06 1995  Torbjorn Granlund  <tege@matematik.su.se>

	* m68k.md (cmpdi): Change patterns to allocate scratch register at
	RTL generation time.
	(tstdi): Likewise.

Sun Sep  3 09:03:50 1995  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* fold-const.c (size_binop): Don't pass 1 to NOTRUNC.

Thu Aug 31 19:27:00 1995  Roland McGrath  <roland@churchy.gnu.ai.mit.edu>

	* libgcc2.c: Include longlong.h.
	[L_udivdi3 || L_divdi3 || L_umoddi3 || L_moddi3] (__udivmoddi4):
	Define this `static inline' when defining these, so they all
	remain leaf functions.

Thu Aug 31 18:38:21 1995  Paul Eggert  <eggert@twinsun.com>

	* c-parse.in (ends_in_label): New %union member.
	(stmts, stmt_or_label): Use new member to avoid lexical lookahead hack.
	(lineno_stmt_or_labels): New rule.
	(lineno_stmt_or_label, stmt_or_label): Yield nonzero if it ends
	in a label.

Thu Aug 31 08:31:40 1995  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* cse.c (canon_hash, CONST_DOUBLE): Hash integer and real
	differently.
	* varasm.c (struct rtx_const): Add new field DI to union.
	(decode_rtx_const, case CONST_DOUBLE): Use to hash CONST_DOUBLE
	representing an integer.

	* va-alpha.h (__gnuc_va_list): Make __offset an int.
	* alpha.c (alpha_builtin_saveregs): Properly compute address
	of __offset both both OSF and WINNT.

	* xm-alpha.h (sbrk): Don't define here.
	* gmon.c (sbrk): Define here for __alpha.
	* toplev.c (sbrk): Likewise.
	* mips-tfile.c (malloc, calloc, realloc): Don't define for anybody.

	* reload.c (push_reload): Add case for output reload of a SUBREG
	of a hard reg when output mode is invalid for that mode.
	In both that case and existing case for in, don't remove SUBREG.
	* reload1.c (emit_reload_insns): Emit RELOAD_OTHER output reloads last.

Tue Aug 29 19:16:06 1995  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* c-common.c (decl_attribute, case A_PACKED): Check is_type first.
	(decl_attribute, case A_T_UNION): Likewise.
	Don't access TYPE_FIELDS if DECL is zero.
	* c-decl.c (finish_struct): If transparent_union attribute
	specified, validate it once we finish laying the union out.

Mon Aug 28 05:58:03 1995  Paul Eggert  <eggert@twinsun.com>

	* arm.c (arm_gen_movstrqi): Remove unused variable const_sxteen.

	* bi-lexer.c (buffer, inpoint): Remove unused variables.

	* i370/mvs.h, i370/mvs370.c (mvs_label_emitted): Renamed
	from mvs_label_emited.

	* msdos/configur.bat: Fix misspelling of `maintainer-clean'.

Sat Aug 26 06:57:17 1995  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* reload.c (push_secondary_reload): If X is a paradoxical SUBREG,
	get mode and thing to reload from inside.
	* reload1.c (emit_reload_insns): Do nothing for SUBREG whose
	operand is unused subsequently.
	In secondary reload case, if paradoxical SUBREG for output, reload
	thing inside SUBREG, just like gen_reload.

Fri Aug 25 19:26:53 1995  Paul Eggert  <eggert@twinsun.com>

	* c-typeck.c (set_init_label): Don't die if an entire
	brace-pair level is superfluous in the containing level.

Fri Aug 25 19:22:46 1995  Michael Meissner  <meissner@tiktok.cygnus.com>

	* configure (powerpc{,le}-eabisim): Add support for a new target
	that works under the PSIM simulator.
	* rs6000/eabisim.h, rs6000/eabilesim.h, rs6000/t-eabisim: New files.

	* rs6000/eabi.h (STRICT_ALIGNMENT): If little endian, always set
	strict alignment to 1.

Fri Aug 25 19:22:23 1995  David Edelsohn  <edelsohn@mhpcc.edu>

	* rs6000.md ({add,sub,mulsi}di3): Support both endian possibilities.
	(negdi2): Likewise.

Fri Aug 25 19:10:41 1995  Oliver Kellogg  (Oliver.Kellogg@space.otn.dasa.de)

	* 1750a.md: Added peephole definitions for Load/Store Base insns
	and eliminating redundant load in an equivalent store/load sequence.

Fri Aug 25 18:33:27 1995  Craig Burley  (burley@gnu.ai.mit.edu)

	* toplev.c (report_error_function): Don't attempt to use input
	file stack to identify nesting of #include's if file name oflocation
	diagnosed is not same as input_filename.

Fri Aug 25 07:31:47 1995  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* integrate.c (output_inline_function): Switch to function obstack.

Mon Aug 21 13:29:54 1995  J"orn Rennecke (amylaar@meolyon.hanse.de)

	* i386.c (arithmetic_comparison_operator): New function.
	(print_operand): Take into account that overflow flag is not
	set the same as after a compare instruction.
	* i386.md (decrement_and_branch_until_zero): Use
	arithmetic_comparison_operator to decide if there is comparison
	suitable to be expressed by condition code from an arithmetic op.

Mon Aug 21 13:26:13 1995  Philippe De Muyter (phdm@info.ucl.ac.be)

	* m68k.md (adddi3, subdi3): "&" added to clobber's constraints.

Mon Aug 21 12:11:14 1995  Jim Wilson  <wilson@chestnut.cygnus.com>

	* t-sparclite (MULTILIB_*, LIBGCC, INSTALL_LIBGCC): Define.

	* sh.md (movdi-1, movdf-1): Make conditional on reload_completed,
	delete conditions checking for pseudo registers and Q addresses.
	Add code to handle SUBREG.

	* local-alloc.c (wipe_dead_reg): Make a register mentioned in a
	REG_INC note die after the instruction.

	* m68k.md: For all dbra pattern, change constraint from 'g' to 'd*g'.

	* Makefile.in: (underscore.c): Rename rule to stamp-under, and
	touch stamp-under at the end.  Add new rule for underscore.c that
	depends on stamp-under.

	* sh.c (reg_unused_after): For a SEQUENCE, make sure all insns are
	safe before returning 1.

	* sh.h (PROMOTE_FUNCTION_ARGS, PROMOTE_FUNCTION_RETURN): Define.

	* sh.c (output_stack_adjust): Add new argument reg.  Use it instead
	of stack_pointer_rtx.
	(sh_expand_prologue, sh_expand_epilogue): Pass new argument to
	output_stack_adjust.

Sat Aug 19 17:34:15 1995  Jim Wilson  <wilson@phydeaux.cygnus.com>

	* sparc/gmon-sol2.c (_mcount): Define.
	* sparc/sol2.h (STARTFILE_SPEC, ENDFILE_SPEC): Delete superfluous
	-pg tests.
	(LINK_SPEC): Add libp directories to -Y when -pg.

	* unroll.c (calculate_giv_inc): Handle increment computed by ASHIFT.

Sat Aug 19 17:28:56 1995  Philippe De Muyter (phdm@info.ucl.ac.be)

	* m68k.md (subdi3): Should not be commutative.
	(one_cmpldi2): Fixed typo with register operand.

Sat Aug 19 17:20:43 1995  Michael Meissner  <meissner@cygnus.com>

	* rs6000.c (output_prolog): Fixup code to set stack pointer
	if stack size > 32k.
	* rs6000.md (sync_isync): Renamed from sync; added an isync insn
	after the sync to properly deal with PowerPC's with split I/D caches.
	* sysv4.h (INITIALIZE_TRAMPOLINE): Sync function now named sync_isync.

Sat Aug 19 17:07:09 1995  Doug Evans  <dje@canuck.cygnus.com>

	* h8300.h (STATIC_CHAIN_REGNUM): Use r3.
	(REGISTER_NAMES): Print r7 as sp.
	(ADDITIONAL_REGISTER_NAMES): Recognize r7.
	(ASM_OUTPUT_ALIGN): Alignment is power of 2.
	* h8300.md (fancy_btst,fancy_btst1): Branch target must be
	operand 0 for length attribute to work.

Sat Aug 19 16:43:11 1995  Paul Franklin  <paul@cs.washington.edu>

	* assert.h: Declare __eprintf with attribute noreturn.

Sat Aug 19 16:40:12 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* stddef.h: Don't define wchar_t if __cplusplus is defined.

Tue Aug 15 18:01:01 1995  Paul Eggert  <eggert@twinsun.com>

	* cccp.c (warning_with_line): Fix typo in declaration when
	!HAVE_VPRINTF and defined (__STDC__).

Tue Aug 15 17:57:54 1995  Stephen L Moshier <moshier@world.std.com>

	* real.c (ediv, emul): Set sign bit of IEEE -0.0 result.

Tue Aug 15 17:49:47 1995  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* expr.c (safe_from_p): Only safe if EXP is variable-size and X
	is BLKmode.

	* stmt.c (fixup_gotos): When some fixups done, reset to point
	to next instead of zeroing TREE_VALUE, which may be shared.

Mon Aug 14 09:15:45 1995  Doug Evans  <dje@canuck.cygnus.com>

	* m68k/m68kemb.h (STARTFILE_SPEC): Define as empty.

Mon Aug 14 09:08:57 1995  Pat Rankin  <rankin@eql.caltech.edu>

	* vax.c (vms_check_external): Update `pending_head' properly
	when the first list element is removed.

Mon Aug 14 09:01:32 1995  Jeffrey A. Law  <law@adder.cygnus.com>

	* pa.md (call expanders): Emit a blockage insn after restoring
	%r19 when generating PIC.

Sun Aug 13 21:58:49 1995  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* toplev.c (main): Change text of unsupported -g option warning.

Sun Aug 13 21:47:57 1995  Andrew McCallum  <mccallum@graphite.cs.rochester.edu>

	* objc/selector.c (sel_get_any_typed_uid): New function.
	* objc/objc-api.h (sel_get_any_typed_uid): Declare new function.

Sun Aug 13 21:43:17 1995  John Carr  <jfc@mit.edu>

	* c-typeck.c (c_expand_asm_operands): Check for read-only output
	operand where the variable is read-only but the type is not.

Sun Aug 13 21:16:12 1995  David Edelsohn  <edelsohn@mhpcc.edu>

	* rs6000.c (direct_return): Epilogue required if CR saved.

Sun Aug 13 19:09:25 1995  Jeff Law  (law@snake.cs.utah.edu)

	* configure (hppa1.?-hp-hpux10): Recognize and treat just like hpux9.

Sun Aug 13 19:07:23 1995  Doug Evans  <dje@canuck.cygnus.com>

	* i960.md (movdi matchers): Fix src/dest order in unaligned
	reg->reg case.

Sun Aug 13 18:49:01 1995  DJ Delorie  <dj@delorie.com>

	* i386/xm-dos.h (HAVE_STRERROR): New definition.

	* msdos/configur.bat: Add missing carriage return.

Sun Aug 13 18:40:55 1995  Andrew Cagney  <cagney@highland.com.au>

	* Makefile.in (USER_H): Add va-ppc.h.

Sun Aug 13 18:36:17 1995  M. Warner Losh  <imp@village.org>

	* stmt.c (expand_asm_operands): Type '0'..'4' operands may
	allow regs, so move them to the default case.

Sun Aug 13 18:32:35 1995  Paul Eggert  <eggert@twinsun.com>

	* cccp.c (warning_with_line): New function.
	(trigraph_pcp): Use it, to avoid reporting line number.
	(vwarning_with_line): Don't report line number if zero.

Sun Aug 13 18:23:08 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* toplev.c (vmessage): Support four arguments.

Sun Aug 13 18:19:51 1995  Michael Meissner  <meissner@cygnus.com>

	* ginclude/stdarg.h: Add ppc svr4 calling sequence support.
	* ginclude/varargs.h: Likewise.
	* ginclude/va-ppc.h: New file.

Sun Aug 13 18:05:20 1995  Michael Gschwind  <mike@donoussa.vlsivie.tuwien.ac.at>

	* configure (pdp-*-*): Add support for t-pdp11.
	* t-pdp11: New file.
	* Makefile.in (LIBGCC2_CFLAGS): Add TARGET_LIBGCC2_CFLAGS.

Sun Aug 13 14:50:58 1995  Jim Wilson  <wilson@chestnut.cygnus.com>

	* final.c (final_start_function): Always call sdbout_begin_function
	and xcoffout_begin_function, even if no line number info.

	* mips/abi64.h (SETUP_INCOMING_VARARGS): In if statement, only
	subtract one for stdarg.  Don't subtract PRETEND_SIZE from
	argument pointer when calculating stack address.
	* mips.h (INITIAL_ELIMINATION_OFFSET): For 64 bit ABI, subtract
	current_function_pretend_args_size when converting from argument
	pointer.
	* va-mips.h (va_start): For stdarg, delete separate define for
	64 bit ABI.  For varargs, don't subtract 64, and only add -8 when
	all argument registers are used.

	* gcc.c (main): When concat gcc_exec_prefix and
	standard_startfile_prefix, put machine_suffix in the middle.

	* iris6.h (INIT_SECTION_ASM_OP): Don't define.
	(LD_INIT_SWITCH, LD_FINI_SWITCH, HAS_INIT_SECTION): Don't undef.
	(ASM_OUTPUT_CONSTRUCTOR, ASM_OUTPUT_DESTRUCTOR): Ifdef out.
	* configure (mips-sgi-irix6, mips-sgi-irix5cross64): Define
	use_collect2 to yes.

	* combine.c (move_deaths): When have a multi-reg hard register,
	if don't find a note, then recur for each individual hard register.

	* cse.c (set_nonvarying_address_components): Handle addresses
	which are the sum of two constant pseudo regs.
	(cse_rtx_addr_varies_p): Likewise.

	* Makefile.in (gfloat.h): Add a - before the rm command.

	* loop.c (find_and_verify_loops): Set dest_loop only if
	JUMP_LABEL (insn) is nonzero.

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 occurrence 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 an 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 variant 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 favor 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): Optimize 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 nonzero 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 from 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.


Copyright (C) 1995-1996 Free Software Foundation, Inc.

Copying and distribution of this file, with or without modification,
are permitted in any medium without royalty provided the copyright
notice and this notice are preserved.
