Tue Feb 28 16:36:58 1995  Michael Meissner  <meissner@cygnus.com>

	* rs6000/eabi.asm (__eabi): Correctly reload r30 in the case where
	the GOT pointers have to be relocated.

	* rs6000/rs6000.md (floatsidf2, floatunssidf2): Add
	TARGET_SOFT_FLOAT conditional dropped in the last change.
	(movdf insns): Add -msoft-float varients that do not use 'f' register
	constraints.
	(movti): On PowerPC, don't clobber the MQ register, since it doesn't
	exist.  Add abort to default switch case.
	(store_multiple, load_multiple): Test for TARGET_POWER instead
	of !TARGET_POWERPC to determine whether the MQ register exists.

Tue Feb 28 14:46:48 1995  Doug Evans  <dje@cygnus.com>

	* configure (extra_headers): Renamed from header_files.

	* toplev.c (rest_of_compilation): Defer output of static inlines
	even if not optimizing, they may never be referenced.

Mon Feb 27 17:06:47 1995  Doug Evans  <dje@cygnus.com>

	* cccp.c (do_include): Check for redundant file before opening in
	relative path case.  Don't call fstat unnecessarily.

Mon Feb 27 11:20:29 1995  Jim Wilson  <wilson@chestnut.cygnus.com>

	* mips.md (muldi3_internal): Change dmul to dmult.

Mon Feb 27 02:30:54 1995  Jeffrey A. Law  <law@mole.gnu.ai.mit.edu>

	* pa.c (hppa_expand_prologue): Don't save the PIC register into
	the stack for functions which have no stack of their own.

Mon Feb 27 00:43:32 1995  Roland McGrath  <roland@churchy.gnu.ai.mit.edu>

	* config/gnu.h (ASM_SPEC): Macro removed.

Sun Feb 26 20:21:52 1995  Doug Evans  <dje@cygnus.com>

	* reload.c (find_reloads_address): Fix typo in reg+const case.

Sat Feb 25 10:21:13 1995  Doug Evans  <dje@cygnus.com>

	* gcc.c (print_search_dirs): New variable.
	(build_search_list): New function.
	(putenv_from_prefixes): Call it.
	(option_map): New option --print-search-dirs.
	(process_command): Handle it.
	(main): Print installation directory and exec/startfile_prefixes if
	--print-search-dirs given.

	* Makefile.in (Makefile): Delete config.run afterwards.
	(distclean): Delete config.run.

Sat Feb 25 08:36:40 1995  David Mosberger-Tang  (davidm@cs.arizona.edu)

	* alpha.h (ASM_SPEC): Pass -pg to assembler.
	(FUNCTION_PROFILER): Do nothing; the assembler does it for us.

Sat Feb 25 08:24:27 1995  H.J. Lu   (hjl@nynexst.com)

	* configure (native_prefix): New; lets some hosts put
	files in /usr instead of /usr/local if no --prefix specified.

Sat Feb 25 08:07:56 1995  David Edelsohn  <edelsohn@mhpcc.edu>

	* rs6000.h (RTX_COSTS): Add cost of FFS.

Sat Feb 25 06:52:22 1995  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* mips.c (mips_fill_delay_slot): Fix typo in call to FP_REG_P.

	* cse.c (simplify_unary_operation): If operand mode is VOIDmode
	for UNSIGNED_FLOAT and operand looks negative, can't simplify.

	* rs6000.c (low_32_bit_operand): New function.
	* rs6000.h (PREDICATE_CODES): Add low_32_bit_operand.
	* rs6000.md: Remove unneeded tests on HOST_BITS_PER_INT from 
	some extra conditions.
	Use low_32_bit_operand for (plus:DI (zero_extend:DI ..) ..) cases.

Sat Feb 25 00:49:29 1995  Roland McGrath  <roland@churchy.gnu.ai.mit.edu>

	* config/xm-gnu.h (POSIX): Define this macro.

	* config/gnu.h (GNU_CPP_PREDEFINES): Add missing backslash.

Fri Feb 24 19:17:29 1995  Jeffrey A. Law  <law@snake.cs.utah.edu>

	* configure (hppa1.?-hp-hpux9*): Use hpux9 configuration files.
	* pa-hpux9.h, pa-ghpux9.h, pa1-hpux9.h, pa1-ghpux9.h: New
	configuration files.

Fri Feb 24 15:55:33 1995  Jim Wilson  <wilson@cygnus.com>

	* reorg.c (relax_delay_slots): When searching for next CODE_LABEL,
	use next_real_insn not next_active_insn.

	* stdarg.h, va-*.h, varargs.h (va_end): Expand to a void expression
	instead of nothing.

	* sh.h (PACKSTRUCT_BIT, TARGET_PACKSTRUCT): Change to PADSTRUCT.
	Add comment saying that the option is not useful.
	(TARGET_SWITCHES): Change -mpackstruct option to -mpadstruct.
	(STRUCTURE_SIZE_BOUNDARY): Change PACKSTRUCT to PADSTRUCT changing
	default value from 32 to 8.

	* dwarfout.c (PUSHSECTION_FORMAT): Add a leading tab.

	* expr.c (expand_expr, case COMPONENT_REF): Don't fetch unaligned
	field if we only want its address.

	* i960.c (fp_literal_one, fp_literal_zero): Don't accept VOIDmode.
	(i960_output_ldconst): In DFmode code, delete code to handle FP_REG_P
	target.  In DFmode and SFmode code, delete test for HOST_FLOAT_FORMAT
	== TARGET_FLOAT_FORMAT.
	* i960.h (REAL_ARITHMETIC): Define.
	(LEGITIMATE_CONSTANT_P): Pass argument mode not VOIDmode to fp_literal.

	* i960.h (CC1_SPEC): Don't output implicit -gstabs or -gcoff option
	if user gave an explicit one.
	* vx960-coff.h (CC1_SPEC): Likewise.

	* dbxout.c (GDB_INV_REF_REGPARM_STABS_LETTER): New macro.
	(dbxout_parms): For gdb, output use GDB_INV_REF_REGPARM_STABS_LETTER
	for parameters passed by invisible reference in registers.

	* mips.c (mips_secondary_reload_class): Also handle SUBREGs.
	* mips.md (madsi): Don't use '+' constraint in a clobber.
	(madsi_highpart, umadsi_highpart): Delete.

	* dbxout.c (dbxout_parms): For parameters passed in memory, delete
	obsolete code to handle parameters converted and stored back to
	the stack slot where they were passed in.
	(dbxout_reg_parms): Delete obsolete ifdefed out code.  Combine
	redundant PARM_PASSED_IN_MEMORY tests.  For case where parameter
	lives in memory, output stab if it doesn't live where it was passed.

	* sh.c: Correct typos and formatting problems.
	(add_constant, current_function_pretend_args_size,
	flag_traditional, table_lab): Delete unnecessary declarations.
	(sh_cpu): Change type from attr_cpu to processor_type.	
	(need_slot, output_shift, lshiftrt_insns, howshift,
	pop_operand): Delete.
	(print_operand, output_branch): Delete calls to need_slot.
	(synth_constant): Comment that it doesn't work.
	(output_movedouble): Handle PRE_DEC dest not POST_INC dest.
	(output_options): Don't use flag_traditional.
	(shift_insns): Correct numbers to optimal sequences.
	(shift_amounts): New table.
	(shift_insns_rtx): New function.
	(shiftinsns): Combine LSHIFTRT and ASHIFT cases.
	(shiftcosts): Return true costs of shifts instead of estimate of 1.
	(gen_ashift): Handle negative shift amounts.  Call gen_lshrsi3_m
	for single bit LSHIFTRT, and gen_lshrisi3_k for multiple bit shifts.
	(gen_shifty_op): Handle negative shift amounts at top.  Generate
	optimal sequences for ASHIFT and LSHIFTRT.
	(find_barrier): Correct pattern for matching mova instructions.
	(general_movsrc_operand): Delete redundant test for (MEM LABEL_REF).
	Don't reject POST_INC address for size > 4.
	(general_movdst_operand): Don't reject PRE_DEC address for size > 4.
	* sh.h: Correct typos and formatting problems.
	(MODE_DISP_OK_[12]): Delete.
	(GO_IF_LEGITIMATE_INDEX): Delete uses of MODE_DISP_OK_[12].
	(RTX_COSTS): Add LSHIFTRT.
	(table_lab): Delete declaration.
	(enum processor_type): New enum.
	(sh_cpu_attr): New macro.
	(sh_cpu): Change type to enum processor_type to avoid incomplete
	enum type.
	* sh.md: Correct typos and formatting problems.
	(cpu): Use sh_cpu_attr not sh_cpu.
	(adddi3, subdi3, udivsi3-1, divsi3-1, mulsi3_call-1, ashrsi2_16,
	ashrsi2_31, dect, casesi_worker): Use arith_reg_operand not
	register_operand.
	(ashlsi3_n, lshrsi3_n): Enable pattern.  Set length correctly.
	Use '#' to output it.
	(ashlsi3_n+1, lshrsi3_n+1): New patterns to split shifts.
	(ashlsi3, lshrsi3): Use shiftby_operand instead of gen_shifty_op.
	(lshlsi3_m): New pattern for single bit shifts.
	(lshlsi3_k): Only handle multiple bit shifts.	
	(negc): Use IOR not PLUS to set carry bit.
	(push+2, pop+2, movsi_pi, movdi-2, movdf_k-1, movsf_i-1): Delete.
	(movsi_i, movqi_i, movhi_i): Delete redundant < and > constraints.
	(movsf_i): Delete incorrect < and > constraints.

Fri Feb 24 13:07:55 1995  Stephen L Moshier  <moshier@world.std.com>

	* i386/i386.md (sinxf2, cosxf2): Define.

Thu Feb 23 14:14:20 1995  Mike Stump  <mrs@cygnus.com>

	* rs6000.h/rs6000.h (RETURN_ADDR_RTX): Add definition to support
	__builtin_return_address and __builtin_frame_address on the
	rs6000.  This is necessary to support exception handling in g++ on
	the rs6000. 

Thu Feb 23 15:23:26 1995  Michael Meissner  <meissner@cygnus.com>

	* rs6000/rs6000.h (TARGET_SWITCHES): All -mpower switches set
	-mmultiple by default.  Rename -mno-fp-regs to -msoft-float and
	-mfp-regs to -mhard-float.
	(TARGET_NO_FPR): Rename all occurances of macro to be either
	TARGET_HARD_FLOAT or TARGET_SOFT_FLOAT.
	(FUNCTION_VALUE): If -msoft-float, floating point gets returned in
	register 3.
	(LIBCALL_VALUE): Ditto.
	(USE_FP_FOR_ARG_P): Don't use floating point registers if
	-msoft-float.
	(MOVE_MAX): Use TARGET_MUTIPLE instead of TARGET_POWER to decide
	to move 16 bytes at a time.
	(GO_IF_LEGITIMATE_ADDRESS): Don't allow index + base register
	addresses for DF's if -msoft-float.

	* rs6000/rs6000.c (POWER_MASKS): Or in MASK_MULTIPLE.
	(processor_target_table): Set MASK_MULTIPLE for Power CPUs and
	don't set it for PowerPC CPUs.
	(output_prolog): If -mrelocatable and a GOT pool is used, mark the link
	register as being live.  Load the GOT address via a bl instruction.
	(output_toc): If V.4 semantics, make the TOC label be the difference
	from the start of the TOC section, rather a label the assembler has to
	recognize as being an offset.

	* rs6000/rs6000.md (all floating point ops): For all operations,
	check if floating point is allowed.
	(movti): Use TARGET_MULTIPLE to decide whether to expand movti
	instead of TARGET_POWER.

	* rs6000/sysv4.h (SUBTARGET_SWITCHES): Move here from eabi.h, so the
	various macro overrides don't have to be recoded for eabi as well
	as System V.4.  Add -mstrict-align to set STRICT_ALIGNMENT to 1.
	Add -mrelocatable to specify that that the data/text sections may
	be copied elsewhere, but not true V.4 style PIC.
	(TOC_SECTION_FUNCTION): Handle TARGET_RELOCATABLE.
	(TOC_SECTION_ASM_OP): Put quotes around ".got".
	(MINIMAL_TOC_SECTION_ASM_OP): Put quotes around ".got1".

	* rs6000/eabi.h (SUBTARGET_SWITCHES): Move to rs6000/sysv4.h.
	(MINIMAL_TOC_SECTION_ASM_OP): Use ".got2" section if
	-mrelocatable.

	* rs6000/eabi.asm: New file to load up register 2 or relocate the .got2
	addresses.  Called from main.

	* rs6000/t-rs6000: Build two libgcc.a's, one for normal use, and one
	used when compiling with -msoft-float.

	* rs6000/t-eabi: New file, build two libgcc.a's, one for normal use,
	and one used when compiling with -msoft-float.  Add support for eabi
	module to relocate the .GOT2 section to support -mmultiple.

	* configure (powerpc-*-eabi*): Use t-eabi, not t-rs6000.

Thu Feb 23 06:58:46 1995  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* Makefile.in (ld): Add missing backslash to make continuation line.

	* i386/winnt.c (gen_stdcall_suffix): Deleted.
	* winnt/winnt.h (MODIFY_ASSEMBLER_NAME): Deleted.
	(VALID_MACHINE_DECL_ATTRIBUTES): Deleted.
	* varasm.c (make_decl_rtl): Remove reference to MODIFY_ASSEMBLER_NAME.

	* alpha.h (RTX_COSTS): Update costs for FP operations.

Thu Feb 23 00:13:05 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

        * c-typeck.c (build_binary_op): Warn if, in a comparison, a signed
        operand that might be negative is converted to unsigned.

Wed Feb 22 21:32:48 1995  Peter Schauer  (Peter.Schauer@regent.e-technik.tu-muenchen.de)

	* config/svr4.h (DBX_OUTPUT_MAIN_SOURCE_FILE_END): New macro.

Wed Feb 22 20:29:31 1995  J.T. Conklin  <jtc@netbsd.org>

	* configure (*-*-netbsd*): Set tmake_file to t-libc-ok.

	* config/xm-netbsd.h, i386/xm-netbsd.h, m68k/xm-netbsd.h: New files.
	* sparc/xm-netbsd.h: New file.
	* ns32k/xm-netbsd.h: Changed to use config/xm-netbsd.h and
	ns32k/xm-ns32k.h.
	* configure (i386-*-netbsd*): Use i386/xm-netbsd.h.
	(m68k-*-netbsd*): Use m68k/xm-netbsd.h.
	(sparc-*-netbsd*): Use sparc/xm-netbsd.h.

	* cppp.c, collect2.c: Removed __NetBSD__ from conditional.
	* collect2.c: Declare strerror if HAVE_STRERROR is defined;
	otherwise declare sys_errlist and sys_nerr.

Wed Feb 22 19:07:08 1995  Niklas Hallqvist  (niklas@appli.se)

	* Makefile.in (libgcc1.a): Run ranlib.

Wed Feb 22 18:46:50 1995  Yury Shevchuk  (sizif@botik.yaroslavl.su)

	* explow.c (memory_address): Add missing "else".

Wed Feb 22 15:29:58 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

        * collect2.c (libselect): New function for passing to scandir.
        (libcompare): Ditto.
        (locatelib): Use scandir to look for libraries with matching version
        numbers.

Wed Feb 22 18:27:14 1995  Paul Eggert  <eggert@twinsun.com>

	* cccp.c (enum sharp_token_type): New type.
	(stringify, raw_before, raw_after): Use this type instead of char.
	(collect_expansion, dump_single_macro): Keep track of white space
	after # and around ## tokens, since the C Standard requires a
	diagnostic if the white space doesn't match during a redefinition.
	(sharp_token, sharp_sharp_token): Labels renamed from hash_token and
	hash_hash_token for naming consistency.

Wed Feb 22 17:37:12 1995  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* gcc.c (SWITCH_TAKES_ARG): Add `x'.
	(process_command): -Wl, -Xlinker, and -lm values always go to
	linker even if -x was specified.

Wed Feb 22 09:33:36 1995  Jason Merrill  <jason@phydeaux.cygnus.com>
     
        * fold-const.c (fold): Support folding CLEANUP_POINT_EXPRs into
        arithmetic expressions.

Wed Feb 22 08:40:30 1995  David Edelsohn  <edelsohn@mhpcc.edu>

	* rs6000.c (print_operand, case 'H', 'S'): Delete unused.

	* rs6000.md (ffssi2): Use gpc_reg_operand predicate.
	(Some maskir patterns): Likewise.
	(ffsdi2): Likewise.

	* rs6000.md (movsfcc, movdfcc): New standard patterns.
	(fselsfsf4, fseldfsf4, fseldfdf4, fselsfdf4): Name and create
	variants of existing anonymous patterns for movsfcc and movdfcc.
	
Wed Feb 22 08:10:36 1995  Philippe De Muyter (phdm@info.ucl.ac.be)

	* final.c (output_asm_name): New function, using code taken
	from output_asm_insn.
	(output_asm_insn): If flag_print_asm_name, print the comment
	after the first assembler instruction even in multi-instruction
	templates.

Wed Feb 22 07:04:25 1995  Ian Lance Taylor  (ian@cygnus.com)

	* real.c (REAL_WORDS_BIG_ENDIAN): New macro.  Define as either
	FLOAT_WORDS_BIG_ENDIAN or HOST_FLOAT_WORDS_BIG_ENDIAN.  Use it
	instead of FLOAT_WORDS_BIG_ENDIAN. 

Wed Feb 22 07:03:39 1995  Stephen L Moshier  (moshier@world.std.com)

	* final.c (split_double): Handle CONST_INT that holds both words.
	* i386.c (output_move_double): Let split_double extract any
	constant in op 1; take size from op 0.

	* real.c (m16m, edivm, emulm): Change `short' to `EMUSHORT', and `long'
	to `EMULONG'.
	Clean up comments.

Wed Feb 22 00:52:40 1995  Jeffrey A. Law  <law@mole.gnu.ai.mit.edu>

	* pa.h (ASM_DECLARE_FUNCTION_NAME): Handle invisible reference
	arguments passed in registers.

Tue Feb 21 19:03:09 1995  Douglas Rupp  (drupp@cs.washington.edu)

	* Makefile.in ($exeext, $objext, $oldobjext): New macros.
	* Makefile.in: Copy config.status to config.run and then execute.
	* configure, Makefile.in: Try a "cp" if "ln" fails.
	* objc/Makefile: Added {} around file variable.

	* c-parse.in: New rules to allow attributes in a prefix position.
	* c-tree.h (decl_attributes): Added argument.
	* c-decl.c (grokdeclarator): Added code to support machine attributes.
	* c-common.c (decl_attributes): Add third argument prefix_attributes.
	(valid_machine_attribute): Deleted; moved to tree.c.
	* tree.h (union tree_decl): New field MACHINE_ATTRIBUTES.
	(DECL_MACHINE_ATTRIBUTES): New macro.
	* c-decl.c (duplicate_decls): Pass DECL_MACHINE_ATTRIBUTES to
	descendent typedef; make duplicate typedefs that are identical 
	generate a warning if they are both in system header files.  
	(redeclaration_error_message): Make duplicate typedefs that 
	are identical not an error if they are both in system header files.  
	* print-tree.c (print_node{,_brief}): Print machine attributes.

	* calls.c (emit_call_1): Added function declaration node argument
	passed to RETURN_POPS_ARGS; also effects calls to emit_call_1.
	* function.c (assign_parms): Added arg to RETURN_POPS_ARGS.
	* 1750a.h, a29k.h, alpha.h, arm.h, clipper.h, convex.h: Likewise.
	* dsp16xx.h, elxsi.h, fx80.h, gmicro.h, h8300.h, i370/mvs.h: Likewise.
	* i386.h, i386/isc.h, i386/next.h, i386/sco.h: Likewise.
	* i386/scodbx.h, i860.h, i960.h, m68k.h, m88k.h, mips.h: Likewise.
	* ns32k.h, pa.h, pdp11.h, pyr.h, romp.h, rs6000.h, sh.h: Likewise.
	* sparc.h, spur.h, tahoe.h, vax.h, we32k.h: Likewise.

	* cccp.c (main): Don't set "Include" environment variable for NT.
	* protoize.c: Added #ifdef's WINNT.
	* toplev.c (get_run_time): Return an approximate value for NT.
	* gbl-ctors.h, libgcc2.c (atexit): Prototype now works with NT.
	* gcc.c (fix_argv): Rewrite.

	* i386/winnt.c: New file
	* winnt/ld.c (expand_lib): Look for both libfoo.a and foo.lib.
	Modified to support linking with Windows NT graphics libraries. 
	* i386/winnt.h, x-winnt: Support NT Graphics programs; also bug fixes.
	* winnt/winnt.h (CPP_SPEC): Accept c++ style comments.
	* winnt/xm-winnt.h: Reflect features/functions available in NT.

	* fixinc.winnt: New file.
	* configure (i[345]86-*-winnt): Add fixincludes and extra_objs.
	* config-nt.bat: Deleted.
	* configure.bat: Take arg specifying msdos or winnt batch file config.
	* i386/config-nt.{bat,sed}: Updated to Windows NT 3.5.

	* ginclude/stdarg.h, ginclude/varasgs.h: Test _VA_LIST_DEFINED macro.
	* ginclude/stddef.h: Test _SIZE_T_DEFINED and _WCHAR_T_DEFINED.
	* ginclude/varargs.h: Modifed to work with Windows NT.  Needed a 
	_VA_LIST_DEFINED macro.

	* tree.c: (chain_member_value, decl_attribute_variant): New functions.
	(valid_machine_attribute): Moved here from c-common.c.

	* varasm.c (make_decl_rtl): Call MODIFY_ASSEMBLER_NAME if defined.

Tue Feb 21 12:40:05 1995  Jeffrey A. Law  <law@snake.cs.utah.edu>

	* local-alloc.c (block_alloc): Stop looping over the input
	operands once we find an input/output register pair which can
	be combined into a single qty.

	* integrate.c (finish_inline): Don't set DECL_INLINE.

Tue Feb 21 10:19:51 1995  Michael Meissner  <meissner@cygnus.com>

	* toplev.c (lang_options): Move fortran switches here, fixing bad
	patch.

Tue Feb 21 07:30:11 1995  Stephen L Moshier  (moshier@world.std.com)

	* rs6000.c (output_toc): Use REAL_VALUE_* macros.
	* rs6000.h (REAL_ARITHMETIC): Define.

Tue Feb 21 06:48:41 1995  Stephen R. van den Berg  (berg@pool.informatik.rwth-aachen.de)

	* stmt.c (expand_value_return): Make function static.

Tue Feb 21 06:42:33 1995  Paul Eggert  <eggert@twinsun.com>

	Add support for ISO Normative Addendum 1 to the C Standard.
	* ginclude/iso646.h: New file.
	* Makefile.in (USER_H): Add iso646.h.
	* c-lex.c (yylex): Add support for <: :> <% %> digraphs.
	* cccp.c (rescan): Add support for %: and %:%: digraphs.
	(collect_expansion, skip_if_group, dump_single_macro): Likewise.
	(union hashval): Remove ival member; it doesn't suffice for `199409L'.
	(special_symbol): Use cpval instead of ival for T_CONST macros.
	(install): Remove ivalue argument, since string value now suffices.
	All callers changed.
	(initialize_builtins): Switch from int to string values for T_CONST.
	If not traditional, initialize __STDC_VERSION__ to 199409L.
	(STDC_VALUE): Remove no-longer-used configuration macro.

Tue Feb 21 06:16:37 1995  Franz Korntner  (fkorntne@bazis.nl)

	* gcc.c (read_specs): Use length read when inserting zero.

	* c-lex.c (yylex): For float, build constant in long double.

Tue Feb 21 05:57:42 1995  Craig Burley  (burley@gnu.ai.mit.edu)

	* toplev.c (lang_options): Add options for Fortran.

	* gcc.c (default_compilers): Add entries for .f and .F.

Tue Feb 21 05:37:21 1995  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* gcc.c (default_compilers): Remove rule for ".ada".
	Pass .ads or .adb suffix to -dumpbase, depending on input filename.

	* toplev.c (compile_file): Initialize input_file_stack before
	calling lang_init, not after.
	* c-lex.c (check_newline): Give warning if unrecognized data on #line.
	(yylex): Give error for unterminated string constant.

Mon Feb 20 14:46:56 1995  Per Bothner  <bothner@kalessin.cygnus.com>

	* varasm.c (output_constant):  Strip NOP_EXPRs for SET_TYPE too,
	by using AGGREGATE_TYPE_P macro.

Mon Feb 20 14:39:57 1995  Per Bothner  <bothner@kalessin.cygnus.com>

	* config/svr4.h (ASM_OUTPUT_SOURCE_LINE):  Use assemble_name.

Mon Feb 20 15:26:05 1995  Doug Evans  <dje@cygnus.com>

	* config.sub (sun4sol2): Alias for sparc-sun-solaris2.

Sat Feb 18 16:15:33 1995  Mike Stump  <mrs@cygnus.com>

	* libgcc2.c (__unwind_function): New function to support stack
	unwinding on rs6000 for g++ exception handling.

Sat Feb 18 13:55:02 1995  Per Bothner  <bothner@kalessin.cygnus.com>

	* tree.h (get_set_constructor_bytes): Fix prototype.
	* varasm.c (output_constructor): Fix typo byte_size -> size.

Sat Feb 18 12:36:12 1995  Doug Evans  <dje@cygnus.com>

	Lynx patches from various Cygnus people.
	* config.sub: Recognize lynx* as lynxos.
	* configure (i386-lynx): Set xm_file to i386/xm-lynx.h
	Set tmake_file to i386/t-i386bare.
	(m68k-lynx): Set xm_file to m68k/xm-lynx.h.
	Set tmake_file to m68k/t-lynx.
	(rs6000-lynxos*): New target.
	(sparc-lynxos*): Set xm_file to sparc/xm-lynx.h.
	Set tmake_file to sparc/t-sunos41.
	* config/lynx.h (LIB_SPEC, STARTFILE_SPEC): Update to LynxOS 2.2.2.
	(FUNCTION_PROFILE): Undef.
	* config/xm-lynx.h (HOST_BITS_PER_CHAR): Delete.
	(HOST_BITS_PER_{SHORT,INT,LONG,LONGLONG}): Likewise.
	(mktemp): Provide our own, lynx's definition isn't standard.
	* i386/t-i386bare (LIBGCC1): Define to empty instead of libgcc1.null.
	(CROSS_LIBGCC1): Likewise.
	* i386/xm-lynx.h: New file.
	* m68k/lynx.h (FUNCTION_VALUE): Redefine.
	(LIBCALL_VALUE, FUNCTION_VALUE_REGNO_P, NEEDS_UNTYPED_CALL): Likewise.
	* m68k/t-lynx: New file.
	* m68k/xm-lynx.h: New file.
	* rs6000/lynx.h: New file.
	* rs6000/rs6000.h (SUBTARGET_OVERRIDE_OPTIONS): Define.
	(OVERRIDE_OPTIONS): Call it.
	* rs6000/x-lynx: New file.
	* rs6000/xm-lynx.h: New file.
	* sparc/xm-lynx.h: New file.

Thu Feb 16 17:02:51 1995  Ian Lance Taylor  <ian@cygnus.com>

	* config/mips/mips.h (enum processor_type): Add PROCESSOR_R4650.
	* config/mips/mips.c (override_options): Use PROCESSOR_R4650 for
	the 4650, not PROCESSOR_R4600.  Check for it when doublechecking
	mips_isa level.
	* config/mips/mips.md: Add r4650 to cpu attr.  Update functional
	units for r4650.
	(mulsi3): If TARGET_MAD, generate mulsi3_r4650.
	(mulsi3_r4650): New instruction, mul directly to register file,
	supported on r4650.

Thu Feb 16 11:44:51 1995  Michael Meissner  <meissner@cygnus.com>

	* rs6000/eabi.h (SUBTARGET_SWITCHES): Add support for
	-mstrict-align to control whether STRICT_ALIGNMENT is 1 or 0.
	(STRICT_ALIGNMENT): Redefine, to be 1 if -mstrict-align used.

Wed Feb 15 13:03:38 1995  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* libgcc2.c: Repair botch in application of patch.

Tue Feb 14 16:00:52 1995  Per Bothner  <bothner@kalessin.cygnus.com>

	* tree.c (get_set_constructor_bytes):  New function.  Replaces ...
	(get_set_constructor_words):  ... removed old function.
	* tree.h: get_set_constructor_words -> get_set_constructor_bytes.
	* expr.c (store_constructor):  Don't use get_set_constructor_words.
	* varasm.c (const_hash):  Add support for SET_TYPE constructors.
	(record_constant_1):  Likewise.
	(copy_constant):  Likewise.
	(output_constant):  Likewise.  (Also SET_TYPE INTEGER_CSTs.)

Tue Feb 14 08:05:07 1995  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* tree.c (stabilize_reference_1): No longer static.
	* tree.h (stabilize_reference_1): Add declaration.

Mon Feb 13 19:37:15 1995  Roland McGrath  <roland@churchy.gnu.ai.mit.edu>

	* config/mips/gnu.h: Rewritten to use ELF object format.
	* config/gnu.h (GNU_CPP_PREDEFINES): New macro.
	* config/i386/gnu.h (CPP_PREDEFINES): Use GNU_CPP_PREDEFINES macro.
	* config/i386/gnuelf.h: Likewise.

Mon Feb 13 14:06:04 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

        * libgcc2.c (__default_new_handler): Don't call write if
        inhibit_libc is defined.
        (__pure_virtual): Ditto.

Mon Feb 13 16:42:38 1995  Doug Evans  <dje@cygnus.com>

	* a29k/a29k-udi.h (DBX_DEBUGGING_INFO): Define.
	(PREFERRED_DEBUGGING_TYPE): Define.

	* expmed.c (store_split_bit_field): If value is VOIDmode,
	pass word_mode to force_reg.

	* varasm.c (function_section): New function.
	(assemble_start_function): Call it.
	* output.h (function_section): Declare it.
	* final.c (final_scan_insn): Call function_section instead of
	text_section.
	* dwarfout.c (dwarfout_begin_block): Likewise.
	(dwarfout_end_block): Likewise.
	(dwarfout_label): Likewise.
	(dwarfout_begin_function): Likewise.
	(dwarfout_end_function): Likewise.
	(dwarfout_line): Likewise.

	* flow.c (find_basic_blocks): Revise calculation of when to
	make another pass.

	* libgcc2.c (exit): Don't call __do_global_dtors if
	INIT_SECTION_ASM_OP and OBJECT_FORMAT_ELF.

	* Makefile.in (libgcc1.S): New target.

Mon Feb 13 12:45:11 1995  Per Bothner  <bothner@kalessin.cygnus.com>

	* tree.c (permanent_allocation):  Pop function_maybepermanent_obstack,
	not hardwired &maybepermanent_obstack.

Mon Feb 13 12:10:31 1995  J.T. Conklin  <jtc@netbsd.org>

	* config/netbsd.h: Changed so that macro definitions used when gcc
	is integrated into the NetBSD source tree are not defined unless
	NETBSD_NATIVE is defined too.

	* configure (*-netbsd-*): Rename netbsd config files so that they don't
	have the machine type in them.
	* i386/netbsd.h: Renamed from i386/netbsd-i386.h.
	* m68k/netbsd.h: Renamed from m68k/netbsd-m68k.h.
	* ns32k/netbsd.h: Renamed from ns32k/netbsd32k.h.

Mon Feb 13 15:05:09 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

        * collect2.c (main): Remember all the .o files specified on the
        command line, and scan them directly if COLLECT_SCAN_OBJECTS.
        * rs6000/rs6000.h (COLLECT_SCAN_OBJECTS): Define.

        * stmt.c (warn_if_unused_value): Don't warn about dereferenced
        references.

Mon Feb 13 14:00:51 1995  Jim Wilson  <wilson@mole.gnu.ai.mit.edu>

	* m68k.h (RTX_COSTS): Fix typo from last change.

	* reload1.c (last_spill_reg): Move definition to top of file.
	Don't initialize here.  
	(reload): Intialize here to -1.

Mon Feb 13 09:29:49 1995  Paul Eggert  <eggert@twinsun.com>

	* fixinc.svr4 (longlong_t, u_longlong_t):
	Work around bug in Solaris 2.4 <sys/types.h>.

Mon Feb 13 08:31:18 1995  David Edelsohn  <edelsohn@mhpcc.edu>

	* rs6000.h, powerpc.h (CPP_SPEC): Define _POSIX_SOURCE if -posix.

	* rs6000.md (extendsfdf2): Undo 30 Nov 94 change.  Use float_extend
	instead of SUBREG and restore fmr instruction for differing FPRs.

Mon Feb 13 05:25:09 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

        * convert.c (convert_to_{pointer,real,integer,complex}):
	Handle references.

Mon Feb 13 08:14:10 1995  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* c-parse.in (ALIGN): Remove unused token.

	* loop.c (mark_loop_jump): Remove bogus assignments to LABEL_
	fields in default case.

Mon Feb 13 07:55:30 1995  Torbjorn Granlund  (tege@tiny.cygnus.com)

	* a29k.h (TARGET_MULTM): New #define.
	(TARGET_SWITCHES): Recognize "-mno-multm".
	* a29k.md (smulsi3_highpart, umulsi3_highpart, mulsidi3, umulsidi3):
	Make these conditional on TARGET_MULTM.

	* a29k.md (multm matcher): Delete.
	(multmu matcher): Delete.
	(mulsidi3 DEFINE_SPLIT): Generate RTL for smulsi3_highpart instead of
	for deleted pattern.  Fix typo in preparation code.
	(umulsidi3 DEFINE_SPLIT): Analogous change.

Mon Feb 13 07:09:02 1995  Peter Flass  (FLASS@LBDRSCS.BITNET)

	* i370/mvs.h (ASM_OUTPUT_ASCII): Don't duplicate first char.

Mon Feb 13 06:51:07 1995  Samuel A. Figueroa  (figueroa@CS.NYU.EDU)

	* i386/os2.h (OBJECT_SUFFIX): New macro.
	(LIB_SPEC, STARTFILE_SPEC): Adjust to include better set of libs.

	* i386/xm-os2.h (DIR_SEPARATOR): Define if not already.
	(strcasecmp): New definition.

	* toplev.c (main): Look at DIR_SEPARATOR for finding last component.
	* cccp.c (do_include, is_system_include, open_include_file):
	Handle DIR_SEPARATOR.

Sun Feb 12 20:20:28 1995  Brendan Kehoe  (brendan@lisa.cygnus.com)

        * config/sparc/sysv4.h (ASM_OUTPUT_SECTION_NAME): Check to make
        sure DECL is non-null before trying to reference it.
        * config/mips/elf64.h (ASM_OUTPUT_SECTION_NAME): Likewise.

Sun Feb 12 19:55:45 1995  Roland McGrath  <roland@churchy.gnu.ai.mit.edu>

	* calls.c (expand_call): Add missing paren in last change.

Sat Feb 11 18:09:27 1995  Jim Wilson  <wilson@cygnus.com>

	* libgcc2.c (L_fixunsxfsi, L_fixunsdfsi, L_fixunssfsi): Undef
	normal types before including limits.h.

	* calls.c (expand_call): When setting n_named_args, depend on new
	macro STRICT_ARGUMENT_NAMING.

	* expr.c (expand_builtin, case BUILT_IN_NEXT_ARG): Don't warn when
	no argument if this is a varargs routine.

Sat Feb 11 16:08:13 1995  Samuel A. Figueroa  (figueroa@CS.NYU.EDU)

	* gcc.c (specs): Use %O instead of "o" for object file suffix.
	(do_spec_1, case 'O'): New option.

Sat Feb 11 14:58:19 1995  Philippe De Muyter (phdm@info.ucl.ac.be)

	* m68k/mot3300.h (RETURN_IN_MEMORY): Fix error in last change.

Sat Feb 11 13:09:28 1995  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* cexp.y (%union): Delete VOIDVAL and SVAL; unused.

	* c-decl.c (grokdeclarator): Use NAME, not IDENTIFIER_POINTER
	of DECLARATOR for error messages; DECLARATOR might be null.

	* expmed.c (expand_divmod): Always call expand_twoval_binop with
	psuedos as targets.

Fri Feb 10 14:55:05 1995  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* caller-save.c: Replace MAX_UNITS_PER_WORD with MIN_UNITS_PER_WORD.
	* h8300.h, mips.h, rs6000.h, sparc.h: Likewise.

	* alpha.c (direct_return): Can't if have outgoing args.

	* expr.c (store_constructor, ARRAY_TYPE): Use code for
	non-integer INDEX for non-integer ELTTYPE size.
	Allow INDEX to be zero in code and divide size by BITS_PER_UNIT.

	* fold-const.c (fold): Don't modify tree with newly-allocated
	nodes; instead make new tree in those cases.

Wed Feb  8 15:13:49 1995  Doug Evans  <dje@cygnus.com>

	* sparc/sparc.c (v9_regcmp_p): New function.
	(v9_regcmp_op): Call it.
	* sparc/sparc.md (movsicc): New pattern.
	(movdicc, movsfcc, movdfcc, movtfcc): Likewise.

	* sparc/sparc.c (sparc64_initialize_trampoline): Use gen_flush
	instead of knowing what pattern looks like.

	* sparc/sparc.md (nonlocal_goto): Use Pmode instead of SImode.

Wed Feb  8 10:05:11 1995  David J. MacKenzie  <djm@geech.gnu.ai.mit.edu>

	* config.sub: Add a blank in the #! line for 4.2BSD, Dynix, etc.

Wed Feb  8 02:52:21 1995  Jeffrey A. Law  <law@mole.gnu.ai.mit.edu>

	* pa.md (call, call_value): Emit save of the PIC register
	with "emit_insn" before emitting the call insn itself.

Tue Feb  7 15:19:40 1995  Jim Wilson  <wilson@cygnus.com>

	* sh.c (prepare_scc_operands, from_compare): Force constant 0 into
	register for unsigned comparisons.

	* sh.c: Correct errors in comments.
	(calc_live_regs, expand_acall): Delete TARGET_SMALLCALL support.
	(need_slot): Add comment.  Delete test of INSN_ANNULLED_BRANCH_P.
	(print_operand_address): Delete '*', '^', '!' support.
	(synth_constant): Call zero_extend* instead of and*.  Call ashlsi3_k
	instead of ashlsi3_n.
	(prepare_scc_operands): Abort for NE case.
	(output_move_double, output_far_jump, output_branch): Delete commented
	out code.  Don't output assembler comments.
	(gen_ashift): Don't call addsi3.
	(fixit): Delete redundant test for QImode constants.
	(hi_const): Delete TARGET_SHORTADDR support.
	(find_barrier): Don't put constant pool between mova and its label.
	(add_function, seen_function, bsr_operand, mac_operand,
	fake_shift): Delete.
	(sh_expand_prologue, expand_acall): Delete TARGET_BSR support.
	(general_movsrc_operand): Don't reject non-I CONST_INT.
	* sh.h: Correct errors in comments.
	(CONDITIONAL_REGISTER_USAGE): Delete TARGET_NOSAVE support.
	(TARGET_MAC, TARGET_TRYR0, TARGET_NOSAVE, TARGET_SMALLCALL,
	TARGET_PARANOID, TARGET_RETR2, TARGET_SHORTADDR, TARGET_BSR): Delete.
	(TARGET_SWITCHES): Delete above options.
	(OVERRIDE_OPTIONS): Delete TARGET_BSR support.
	(FUNCTION_BOUNDARY): Use 32 bit alignment when not TARGET_SMALLCODE.
	(FIRST_RET_REG): Delete TARGET_RETR2 support.
	(MODE_DISP_OK_[21]): Delete TARGET_TRYR0 support.
	(EXTRA_CONSTRAINT_U): Delete.
	(CONST_COSTS): For logical operations, give L constants cost 1.
	(PRINT_OPERAND_PUNCT_VALID_P): Delete '*', '^', '!'.
	* sh.md: Correct errors in comments.  Delete all assembler comments.
	Delete commented out patterns.  Delete all peepholes but two.
	Delete all define_splits but one.  Delete all `combiner' patterns.
	(mpy): Correct multiply latencies.
	(needs_delay_slot, hit_stack, interrupt_function, in_delay_slot,
	define_delay): Correct and/or simplify all reorg related definitions.
	(addsi3_real): Delete.
	(addsi3): Use arith_operand for argument 1.
	(mulhisi3): Use arith_reg_operand not mac_operand.
	(and_ffff, and_ff): Delete.
	(andsi3): Handle constant 255 specially.
	(rot*): Correct and/or simplify all rotate patterns.
	(ashlsi3_k): Delete clobber of T bit.  Output add for 1 bit shift.
	(ashlsi3_n, lshrsi3_n): Delete use of fake_shift.
	(negc): Correct pattern by adding set of T bit.
	(extend*): Delete 'u' and 'U' constraint cases.
	(pop): Separate 'l' and 'x' constraint cases.
	(movsi-1): Better code for move to T bit case.
	(bsr, bsr_value, mac): Delete.

Tue Feb  7 14:23:52 1995  Doug Evans  <dje@cygnus.com>

	* sparc/sparc.md (*): Give names to all anonymous patterns.

Mon Feb  6 23:41:09 1995  Stephen L Moshier  <moshier@world.std.com>

	* sparc/sysv4.h (ASM_OUTPUT_FLOAT, ASM_OUTPUT_DOUBLE): Remove
	  tests for host == target format and endianness.

Mon Feb  6 16:52:38 1995  Torbjorn Granlund  (tege@tiny.cygnus.com)

	* i386.h (RTX_COSTS): Rewrite.

	* m68k/lb1sf68.asm (__udivsi3, __divsi3, __umodsi3, __modsi3):
	Rewrite to actually work for more than a few small operands,
	and to be reasonably small.
	(__mulsi3): Eliminate usage of link register (i.e. a6).
	(shift patterns): Delete.
	(__umulsi3): Delete.
	* t-m68kbare (LIB1ASMFUNCS): Remove _umulsi3.
	* t-vxworks68: Likewise.

Mon Feb  6 15:22:39 1995  Jim Wilson  <wilson@cygnus.com>

	* ginclude/va-i960.h (va_start): Add __builtin_next_arg call.

	* sh/sh.c (sh_function_arg): Don't reject unaligned structures.
	(sh_function_arg_partial_nregs): Likewise.

	* sparc/sparc.md (movsf-1, movdf-1, movtf-1): Use 'F' not 'E'.

	* sparc/sol2.h (STARTFILE_SPEC): Delete explicit /usr/ccs/lib/
	pathnames.

	* reload1.c (alter_reg): New variable stack_slot.  Apply anti
	BYTES_BIG_ENDIAN correction to stack slot address stored in
	spill_stack_slot.

	* jump.c (jump_optimize): When searching for a LOOP_END note to move,
	stop if we find a LOOP_BEG note first.

Mon Feb  6 15:03:35 1995  Doug Evans  <dje@cygnus.com>

	* i386/sysv3.h (DBX_DEBUGGING_INFO): Define.
	(PREFERRED_DEBUGGING_TYPE): Define.

Mon Feb  6 11:56:14 1995  Jeffrey A. Law  <law@mole.gnu.ai.mit.edu>

	* pa.md: Replace "misc" attribute with "multi" in recentlyadded
	soft-float code.

	* pa-osf.h (TARGET_DEFAULT): Protect definition.

Mon Feb  6 11:52:25 1995  Ian Lance Taylor  <ian@cygnus.com>

	* fixincludes: When changing <assert.h> to include <stdio.h> or
	<stdlib.h>, make it include them only for C++.

Sun Feb  5 21:39:41 1995  Torbjorn Granlund  <tege@cygnus.com>

	* pa.c (globally): Use GEN_INT.
	(emit_move_sequence): Use expand_inc instead of plus_constant
	(generates less rtl).
	* pa.md (globally): Use GEN_INT.

	* pa.h (PREDICATE_CODES): Fix many errors.  Enable.

	* m68k.h (RTX_COSTS): Add special cases for a plain 68000.

	* expmed.c (mul_cost, div_cost): New variables.
	(mul_widen_cost, mul_highpart_cost): New variables.
	(init_expmed): Init new variables.
	(expand_mult_highpart): New argument, MAX_COST.
	Use new argument in several places.  Simplify code that tries
	widening multiply variants.
	(expand_divmod): New variables MAX_COST, EXTRA_COST.
	Initialize MAX_COST dependent on REM_FLAG.
	Calculate and pass cost in all calls of expand_mult_highpart.

Sat Feb  4 13:19:29 1995  Jim Wilson  <wilson@cygnus.com>

	* mips/abi64.h, mips/cross64.h, mips/iris6.h: New files.
	* mips/iris5.h (TARGET_DEFAULT): Add #ifndef/#endif around define.
	* mips/mips.c (mips_isa_string): Add mips4 to comment.
	(large_int): Delete code for handling 64 bit constants.
	(mips_const_double_ok): For irix6, reject all floating point constants.
	(mips_move_2words): Use dli not li for 64 bit constants.
	Use dla not la for 64 bit addresses.
	(output_block_move): Likewise.
	(function_arg): Add support for 64bit ABI.
	(override_options): Add support for mips4 and R8000.
	(print_operand): Handle new modifiers 'B', 'b', 'T', 't'.
	Make 'X' case work for 64 bit host.
	(mips_output_filename): Use ASM_OUTPUT_FILENAME.
	(mips_asm_file_start): Go to text section for 64bit ABI.
	(compure_frame_size, save_restore_insns, function_prologue,
	mips_expand_prologue, function_epilogue): Add support for 64 bit ABI.
	(type_dependent_reg, mips_function_value): New functions.
	* mips/mips.h (__PTR_TO_INT, __INT_TO_PTR): Delete.
	(enum processor_type): Add R8000.
	(mips_isa_string, CC1_SPEC): Add mips4 to comment.
	(CONDITIONAL_REGISTER_USAGE): Use SUBTARGET_CONDITIONAL_REGISTER_USAGE.
	(SUBTARGET_CONDITIONAL_REGISTER_USAGE): New macro.
	(ASM_SPEC, LINK_SPEC, CPP_SPEC): Add mips4 support.
	(MIPS_TEMP[12]_REGNUM): Change to avoid clobbering 64bit abi
	parameter registers.
	(SMALL_INT, SMALL_INT_UNSIGNED, CONST_OK_FOR_LETTER_P): Fix for 64
	bit host.
	(ABI_64BIT): New macro.
	(REG_PARM_STACK_SPACE): Use UNITS_PER_WORD not 4.
	(GO_IF_LEGITIMATE_ADDRESS, CONSTANT_ADDRESS_P, LEGITIMATE_CONSTANT,
	LEGITIMIZE_ADDRESS): Don't allow CONST addresses for Irix6.
	(ASM_OUTPUT_FILENAME): New macro.
	(ASM_OUTPUT_ADDR_DIFF_ELT): Add 64 bit ABI support.
	* mips/mips.md (type attribute): Add fmadd.
	(cpu attribute): Add r8000.
	(umaddi+1, ..., umadddi+8): Add pattern for multiply accumulate.
	(movdi): Legitimize addresses, just like movsi does.
	(loadgp): New pattern for 64 bit ABI.
	(shift patterns): Use INTVAL instead of XINT for constants.
	(jump, tablejump_interal[12]): Add 64 bit ABI support.
	(movsicc-8, ..., movsicc): Add patterns for conditional moves.
	* mips/t-cross64, mips/t-iris6, mips/x-iris6, mips/xm-iris6.h:
	New files.
	* configure: Add irix6 and irix5cross64 configurations.
	* ginclude/va-mips.h (*): Change __mips==3 to __mips>=3.
	(sgidefs.h): Include if _MIPS_SIM is defined.
	(va_start): Add support for 64 bit ABI.

Sat Feb  4 10:31:37 1995  Doug Evans  <dje@cygnus.com>

	* dbxout.c (dbxout_source_file): Don't switch to text section if
	in function with section attribute.  Print Ltext label to correct
	file (important on mips).

Fri Feb  3 14:43:23 1995  Michael Meissner  (meissner@cygnus.com)

	* rs6000/rs6000.md (call, call_value): If building for System V.4
	or eABI, function pointers are just pointers, not pointers to a
	three word area.

Thu Feb  2 15:50:26 1995  Ian Lance Taylor  <ian@cygnus.com>

	* fixincludes: When fixing bool in <curses.h>, permit whitespace
	before the semicolon.  Needed on AIX 3.2.5.

Thu Feb  2 12:06:12 1995  David Edelsohn  <edelsohn@mhpcc.edu>

	* rs6000.md (smax:SF define_split): Change match_operand typo to
	match_dup.
	(smin:SF define_split): Likewise.
	(smax:DF define_split): Likewise.
	(smin:DF define_split): Likewise.

Wed Feb  1 16:50:18 1995  Michael Meissner  (meissner@cygnus.com)

	* config.sub: Add support for powerpc-*-{elf,svr4,eabi}.
	* configure: Ditto.

	* rs6000/xm-sysv4.h: New file, to support building GCC for a
	System V.4 PowerPC system.
	* rs6000/sysv4.h: Ditto.
	* rs6000/x-sysv4: Ditto.

	* rs6000/eabi.h: New file, to support building GCC for an embedded
	PowerPC system.

	* rs6000/rs6000.h (TARGET_SWITCHES): Add -mmultiple, -mno-multiple
	to control emitting load/store multiple instructions.  On the
	power, this is on by default, and on the powerpc it is off.
	(SUBTARGET_SWITCHES): New macro, which defaults to nothing to
	allow a subtarget to add new switches.
	(SAVE_FP_*, RESTORE_FP_*): New macros that give the prefix and
	suffix to use for the functions that save and restore the floating
	point registers.

	* rs6000/rs6000.c (output_prolog): Use TARGET_MULTIPLE instead of
	TARGET_POWER to control whether to emitt load/store multiple
	instructions.  Use the SAVE_FP_*/RESTORE_FP_* macros instead of
	using the hardwired AIX names for the functions to save and
	restore the floating point registers.
	(output_epilog): Likewise.
	(print_operand_address): Do not prepend a '.' for %z when using
	the ELF object file format.
	(svr4_traceback): New function to emit the word before the
	procedure prologue that System V.4 expects to do tracebacks.
	(output_prolog): Call svr4_traceback under ELF systems.
	(output_epilog): Omit AIX style traceback tables for ELF systems.
	(output_function_profiler): Abort for now in the ELF case.

	* rs6000/rs6000.md (load_multiple, store_multiple): Test against
	TARGET_MULTIPLE instead of TARGET_POWER.

Tue Jan 31 19:27:43 1995  Torbjorn Granlund  <tege@cygnus.com>

	* pa.h (REAL_ARITHMETIC): Define.
	(ASM_OUTPUT_DOUBLE): Rewrite.
	(ASM_OUTPUT_FLOAT): Rewrite.
	* pa.md (SF and DF move): Use constraint 'E' instead of 'F'.
	* pa.c (singlemove_string): Make case with SFmode CONST_DOUBLE abort.
	(print_operand): #ifdef out CONST_DOUBLE cases.

Tue Jan 31 19:27:43 1995  Jim Wilson  <wilson@chestnut.cygnus.com>

	* pa/pa.h (TARGET_SOFT_FLOAT): New macro.
	(TARGET_SWITCHES, CPP_SPEC, CONDITIONAL_REGISTER_USAGE, FUNCTION_VALUE,
	LIBCALL_VALUE, FUNCTION_VALUE_REGNO_P, FUNCTION_ARG_REGNO_P,
	FUNCTION_ARG, ASM_DECLARE_FUNCTION_NAME, GO_IF_LEGITIMATE_ADDRESS,
	RTX_COSTS): Use TARGET_SOFT_FLOAT.
	* pa/pa.md (*sf*, *df*, etc): Make all floating point patterns depend
	on ! TARGET_SOFT_FLOAT.
	(movsi, movdi, movsf, movdf): Add patterns for TARGET_SOFT_FLOAT.

Tue Jan 31 15:53:04 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

        * toplev.c (lang_options): Add -f{no-,}check-new.

Tue Jan 31 13:55:37 1995  Doug Evans  <dje@cygnus.com>

	* mips/mips.h (ASM_DECLARE_FUNCTION_NAME): Ensure section is .text if
	no section attribute.
	* mips/elf64.h (ASM_OUTPUT_SECTION_NAME): Use asm_out_text_file for
	functions.

Tue Jan 31 13:26:42 1995  Ian Lance Taylor  <ian@cygnus.com>

	* libgcc2.c: Include <limits.h>, not "glimits.h".

Mon Jan 30 16:34:24 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

        * c-common.c (type_for_size): Try to match on int before other
        types (which might be the same size).
        (type_for_mode): Ditto.

Sat Jan 28 16:28:15 1995  Roland McGrath  <roland@churchy.gnu.ai.mit.edu>

	* config/sparc/sysv4.h (ASM_OUTPUT_SECTION_NAME): #undef before
 	defining.

Sat Jan 28 13:54:23 1995  Jeffrey A. Law  (law@snake.cs.utah.edu)

	* pa.md (call, call_value): Always save the PIC register before
	a call.

Sat Jan 28 07:31:26 1995  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* c-typeck.c (c_expand_return): Refine check for returning pointer
	to local variable to allow subtracting a pointer from it.

	* calls.c (expand_call): When emitting queue for each arg,
	call protect_from_queue; put in initial_value so EXPR_LIST in
	is_const case won't have QUEUED.

Sat Jan 28 04:36:46 1995  Jeffrey A. Law  (law@snake.cs.utah.edu)

	* pa.md (call_internal_reg): Use an even faster sequence for
	TARGET_FAST_INDIRECT_CALLS.
	(call_value_internal_reg): Likewise.

Fri Jan 27 21:28:51 1995  Ronald F. Guilmette  (rfg@segfault.us.com)

	* config.sub (unixware, svr4): Treat as synonyms for sysv4.

Fri Jan 27 19:36:13 1995  Roland McGrath  <roland@churchy.gnu.ai.mit.edu>

	* config/i386/gnuelf.h: New file.

Fri Jan 27 16:55:05 1995  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* libgcc1.c (perform_lshlsi3, __lshlsi3): Deleted.
	* libgcc2.c (__lshldi3): Deleted.
	* Makefile.in (LIB1FUNCS): Delete _lshlsi3.
	(LIB2FUNCS): Delete _lshldi3.

	* expr.c (expand_expr, case MINUS_EXPR): Remove bogus operand swap.

	* optabs.c (expand_binop): Add missing test for VOIDmode
	before calling convert_to_mode.

	* final.c (high_{block,function}_linenum): New variables.
	(final_start_function): Initialize them.
	(final_end_function): Pass highest line number to function end
	debugging routines.
	(final_scan_insn): Pass highest line number in block to block end
	debugging function.
	(output_source_line): Update highest line in block and function.

Thu Jan 26 03:46:35 1995  Roland McGrath  <roland@churchy.gnu.ai.mit.edu>

	* configure (i[345]86-*linux*): Set $extra_parts if $elf.
	(*-*-gnu*): Likewise.

Wed Jan 25 18:11:19 1995  Jim Wilson  <wilson@cygnus.com>

	* sh.c (prepare_scc_operands): Force sh_compare_op1 to a register if
	it is an invalid constant.
	(output_branch): Add cases for 4, 8, and 18.  Correct branch offsets
	in comments.
	(find_barrier): Correct test for move instructions that need to be
	fixed by verifying that the set source is a bad constant.
	(arith_reg_or_0_operand): New function.
	* sh.h (CONST_OK_FOR_LETTER_P): Add case for 'N'.  Correct comment.
	(ADJUST_INSN_LENGTH, SHORTEN_WITH_AJUST_INSN_LENGTH): New macros.
	* sh.md (define_attr type): Combine pcloadsi and pcloadhi into pcload.
	(*): Likewise for all patterns that use them.
	(define_attr length): Delete cases for pcloadsi and pcloadhi.
	Modify branch offsets and lengths to be correct.  Correct comment.
	(*): Correct length attributes for all patterns.
	(in_delay_slot): Delete maybe value.  Change default case from yes to
	no.  Delete case for lengths of 4, 6, 8, 10, and 12.
	(cmpeq_0, cmpeq_0-1, cmpeq_0-2): Delete patterns.
	(cmpeqsi_t): Delete case with constant as first operand.
	(cmpgtsi_t, cmpgesi_t): Use arith_reg_or_0_operand not arith_operand.
	Put register cases first.
	(cmpgeusi_t, cmpgtusi_t): Delete cases for comparing against zero.
	(jump): Call output_far_jump if insn length >= 14 instead of == 14.
	(casesi): Use arith_reg_operand not arith_operand for operand 2.

	* fixincludes (strings.h): Fix return type of strlen.

	* expr.c (expand_expr, case MIN_EXPR): If must emit multiple
	instructions, then don't allow a MEM target.

Wed Jan 25 17:07:47 1995  Pat Rankin  (rankin@eql.caltech.edu)

	* cccp.c (do_include): For VMS, don't attempt to
	treat `#include X' as `#include <X.h>' unless `X' has already been
	macro expanded.
	(main): For VMS, do a better job of picking out the base name from
	argv[0]'s absolute name.
	* vax/xm-vms.h (FAILURE_EXIT_CODE): Define.

Wed Jan 25 14:50:45 1995  David S. Miller  (davem@nadzieja.rutgers.edu)

	* genattrtab.c (check_attr_value): Change error message text.
	(simplify_test_exp): Likewise.
	* stmt.c (expand_asm, expand_asm_operands): Likewise.
	* mips.c (print_operand, print_operand_address): Likewise.
	* dsp16xx.c (dsp16xx_reg_class_from_letter): Likewise.
	(limit_reload_class, double_reg_to_memory): Likewise.
	(print_operand_address, emit_1600_core_shift): Likewise.
	(gen_tst_reg, gen_compare_reg): Likewise.
	* dsp16xx.md (compare): Likewise.
	* unroll.c (find_splittable_givs): Likewise.

Wed Jan 25 13:21:10 1995  Matthias Pfaller (leo@marco.de)

	* configure (ns32k-pc532-netbsd): Use netbsd32k.h instead of netbsd.h.
	* ns32k/netbsd32k.h: Renamed from netbsd.h.
	Don't include ansi.h.
	Include config/netbsd.h and delete definitions included from it.
	* ns32k/xm-netbsd.h (HAVE_ATEXIT): Deleted.

Wed Jan 25 12:53:40 1995  Philippe De Muyter (phdm@info.ucl.ac.be)

	* m68k/mot3300.h (DEFAULT_PCC_STRUCT_RETURN): Define as zero.
	(RETURN_IN_MEMORY): Small aggregates are to be returned in d0.

Wed Jan 25 12:48:43 1995  Paul Eggert  <eggert@twinsun.com>

	* cccp.c (handle_directive): Fix typo: '\' caused next char to
	be copied blindly, which was an error if !traditional and if
	the next char was newline or one of <\'"/.

Wed Jan 25 08:15:49 1995  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* jump.c: Include expr.h after insn-config.h and insn-flags.h.

Tue Jan 24 23:19:28 1995  Doug Evans  <dje@cygnus.com>

	Improved conditional move support from Richard Earnshaw.
	* optabs.c (movcc_gen_code): New variable.
	(init_optabs): Initialize it.
	(emit_conditional_move): New function.
	(can_conditionally_move_p): New function.
	* combine.c (simplify_set): Call it.
	* expr.h: (emit_conditional_move): Declare it.
	(can_conditionally_move_p): Likewise.
	(movcc_gen_code): Likewise.
	* genopinit.c (optabs): Add entry for movcc_gen_code.
	* genconfig.c (main): Delete #ifndef around HAVE_conditional_move.
	* jump.c (jump_optimize): Try to emit a conditional move insn before
	trying a store-flag insn.
	* alpha.md (movsicc): New named pattern.
	(movdicc, movsfcc, movdfcc): Likewise.
	(SImode conditional move): New matcher.
	* sparc.h (HAVE_conditional_move): Delete.

	* configure: Recognize and ignore --x-* options.

Mon Jan 23 23:23:33 1995  Roland McGrath  <roland@churchy.gnu.ai.mit.edu>

	* config/svr4.h (ASM_OUTPUT_SECTION_NAME): Renamed from
 	ASM_OUTPUT_SECTION.  The old name was a typo.
	(ASM_OUTPUT_SECTION_NAME): Take proper number of args.

Mon Jan 23 18:51:38 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

        * collect2.c (main): Check LD_INIT_SWITCH and LD_FINI_SWITCH
        separately.
        (scan_prog_file): Don't add shared library initializers or
        finalizers to list if LD_INIT_SWITCH or LD_FINI_SWITCH are
        defined, respectively.

Mon Jan 23 18:45:13 1995  Ian Lance Taylor  <ian@cygnus.com>

	* config/mips/mips.c (override_options): Permit any small integral
	mode in the HI/LO registers.

Mon Jan 23 15:41:10 1995  Steve Chamberlain  <sac@cygnus.com>

	* h8300.md (table_jump_h8300, table_jump_h8300h): Constrain
	operand to use register.

Sat Jan 21 00:01:08 1995  Roland McGrath  <roland@churchy.gnu.ai.mit.edu>

	* configure (*-*-gnuelf*): Set elf=yes.
	(*-*-gnu*): Use ${cpu_type}/gnuelf.h under --with-elf.

Fri Jan 20 20:11:17 1995  Jim Wilson  <wilson@cygnus.com>

	* combine.c (num_sign_bit_copies): Can handle paradoxical subreg only
	if LOAD_EXTEND_OP is defined to SIGN_EXTEND.

	* loop.c (record_giv): Initialize new field same_insn.
	* loop.h (structure induction): Add new field same_insn.
	* unroll.c (copy_loop_body): When check for shared address givs, use
	new same_insn field.
	(find_splittable_givs): New variable v2.  Scan givs to set new
	same_insn field.  Use same_insn to indentify address givs to be
	shared.

	* flow.c (find_basic_blocks): No longer need to check for deleted
	nonlocal_labels.
	* function.c (delete_handlers): When clear LABEL_PRESERVE_P,
	also remove label from nonlocal_label list.
	* integrate.c (save_for_inline_copying): Add comment that
	nonlocal_label list should be updated if it ever can be nonzero.

	* sdbout.c (syms.h): Don't include under Linux.

	* loop.c (scan_loop): For the replace_rtx call, copy the rtx that is
	being substituted in before the call.

	* sh.c (machine_dependent_reorg): When remove SUBREG, add in
	SUBREG_WORD to new register number.

	* sh.c (multcosts): Do not compute cost of constant power-of-two
	multiplies as if they were shifts.  Reduce multiply cost from 5 to 3.
	Delete variable insn_cost.

Fri Jan 20 14:21:49 1995  Mike Stump  <mrs@cygnus.com>

	* stmt.c (expand_cleanups): Add 4th argument to indicate if code
	needs to be expanded for the cleanup.
	(expand_goto_internal): Ditto.
	(bc_expand_goto_internal): Ditto.
	(fixup_gotos): Ditto.
	(expand_end_bindings): Ditto.  We now always call expand_cleanups,
	even after BARRIERs, so that the call to the exception handling
	routines is always done.

Thu Jan 19 18:39:14 1995  Ian Lance Taylor  <ian@cygnus.com>

	* config/mips/mips.h (MASK_SINGLE_FLOAT): Define.
	(MASK_MAD): Define.
	(TARGET_SINGLE_FLOAT, TARGET_DOUBLE_FLOAT): Define.
	(TARGET_MAD): Define.
	(TARGET_SWITCHES): Add single-float, double-float, mad, no-mad,
	4650.
	(ASM_SPEC): For gas, pass down -m4650, and pass -m4650 if -mmad is
	used.
	(CC1_SPEC): If -mips3 is used, only set -mfp64 if neither
	-msingle-float nor -m4650 are used.  Don't permit both -mfp64 and
	-msingle-float, or both -mfp64 and -m4650.  If -m4650 is used,
	pass down -mcpu=r4650.
	(FIXED_REGISTERS): Change HI and LO to not be fixed.
	(HARD_REGNO_NREGS): If TARGET_SINGLE_FLOAT, use floating point
	registers in 4 byte units, not 8 byte units.
	(SECONDARY_RELOAD_CLASS): Define.
	(mips_secondary_reload_class): Declare.
	(LIBCALL_VALUE): If TARGET_SINGLE_FLOAT, only use FP_RETURN if the
	mode size is <= 4.
	(REGISTER_MOVE_COST): Use a cost of 12 when moving HI or LO to
	anything other than a general register.
	* config/mips/mips.c (function_arg): If TARGET_SINGLE_FLOAT, pass
	DFmode arguments in general registers.
	(override_options): Accept 4650 as a cpu type.  If
	TARGET_SINGLE_FLOAT, permit only small floating point modes in
	floating point registers.  Always permit SImode modes in HI/LO
	registers.
	(compute_frame_size): If TARGET_SINGLE_FLOAT, only save 4 bytes
	per floating point register.  Align the floating point register
	save space to an eight byte boundary.
	(save_restore_insns): If TARGET_SINGLE_FLOAT, save floating point
	regisers in single precision.
	(mips_secondary_reload_class): New function.
	* config/mips/mips.md: Require TARGET_DOUBLE_FLOAT for all double
	precision floating point insns.  Change the multiplication insns
	to be single instructions which set a register of class l or h or
	x, as appropriate, rather than explicitly setting HI and/or LO.
	Use define_expand to avoid generating a shift near a multiply on
	the r4000.  Use match_scratch in the division insns to clobber HI
	and LO, rather than mentioning them explicitly.  Add support for
	r4650 mad and madu insns.
	* config/mips/t-ecoff (MULTILIB_OPTIONS): Add mips1/mips3.
	(MULTILIB_DIRNAMES): Add mips1 mips3.

Wed Jan 18 07:43:53 1995  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* tree.c (stabilize_reference): Fix typo in last change.
	* expr.c (get_inner_reference): Don't ignore CONVERT_EXPR from
	non-UNION_TYPE to UNION_TYPE.
	(expand_expr, case CONVERT_EXPR): Check for conversion to union
	before checking for not changing mode.

Tue Jan 17 22:33:27 1995  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* tree.c (stabilize_reference, case RTL_EXPR): New case.

Tue Jan 17 18:42:44 1995  Jeffrey A. Law  (law@snake.cs.utah.edu)

	* pa.c (emit_move_sequence): Also handle displacements which
	do not fit in 14 bits for fp load/store secondary reloads.

Tue Jan 17 13:34:22 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

        Avoid bogus errors for C++ lvalues.
        * c-decl.c (init_decl_processing): Set pedantic_lvalues to pedantic.
        * fold-const.c (pedantic_non_lvalue): Only force a non-lvalue if
        pedantic_lvalues is set.
        * tree.h: Declare pedantic_lvalues.

        Generalize shared truthvalue code to allow for C++ bool.
        * c-tree.h: Declare boolean_{type,true,false}_node.
        * c-decl.c (init_decl_processing): Set up
        boolean_{type,true,false}_node to equal
        integer_{type,one,zero}_node.
        * c-common.c (truthvalue_conversion): Use
        boolean_{type,true,false}_node instead of
        integer_{type,one,zero}_node.
        (shorten_compare): Ditto.

Mon Jan 16 07:11:50 1995  Paul Eggert  <eggert@twinsun.com>
 
	* cccp.c (rescan): Fix typo that caused tokens to be glued
	together improperly.

Sun Jan 15 21:00:24 1995  Doug Evans  (dje@cygnus.com)

	* configure (vintmsg): Delete.

Sat Jan 14 17:50:06 1995  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* expr.c (get_inner_reference): Only treat offset of PLUS_EXPR
	as special if second arg is integer constant.

Sat Jan 14 01:28:15 1995  Doug Evans  (dje@cygnus.com)

	* expmed.c (extract_bit_field, fields bigger than word case): Count
	subwords in target.  Zero remaining upper bits if unsigned.

	* c-common.c (decl_attributes): Fix typo in packed ignored warning.
	Fix unrecognized mode warning.  Make string comparisons consistent.
	Support machine attributes with arguments.  Make noreturn/volatile
	warnings consistent with others.

	* a29k.h (INIT_CUMULATIVE_INCOMING_ARGS): Reserve two regs for
	caller's lr0,lr1.
	* a29k.c (incoming_reg): Keep regstack aligned to even boundary.

Fri Jan 13 20:29:30 1995  Philippe De Muyter (phdm@info.ucl.ac.be)

	* sdbout.c (plain_type_1): For LONG_LONG_TYPE_SIZE, return T_[U]LONG
	instead of 0 (i.e. T_VOID).

	* optabs.c (expand_binop): Do not force constant shift-count to
	a register, to allow possible widening; do not convert_to_mode
	mode{1,2} or copy_to_mode_reg if mode{1,2} is VOIDmode.
	* m68k.md (zero_extendsidi2): New pattern.
	(extendqidi2, extendhidi2, extendsidi2, extendplussidi): New patterns.
	(adddia_sexthishl32, adddid_sexthishl32): New patterns.
	(adddi_dilshr32, adddi_dishl32, adddi_mem): New patterns.
	(adddi3, subdi3): Allow more alternatives.
	(subdia_sexthishl32, subdid_sexthishl32): New patterns.
	(subdi_dishl32, subdi_mem): New patterns.
	(negdi2): New pattern.
	(ashldi_sexthi, ashldi_const32, ashldi_const, ashldi3): New patterns.
	(subreg1ashrdi_const32, ashrdi_const32): New patterns.
	(ashrdi_const32_mem, ashrdi_const, ashrdi3): New patterns.
	(subreg1lshrdi_const32, lshrdi_const32, lshrdi_const, lshrdi3): Ditto.
	(lshrsi_31): New pattern.
	(lshrsi_16, lshrsi_17_24): New names for old unnamed patterns.

	* m68k.c (use_movqi, const_method): New functions.
	(const_int_cost, output_move_const_into_data_reg): Likewise.
	(singlemove_string): Call output_move_const_into_data_reg.
	* m68k.md (fullword move): Likewise.
	* m68k.h (CONST_COSTS): Call const_int_cost.

Fri Jan 13 20:17:55 1995  Oliver Kellogg  (okellogg@salyko.cube.net)

	* 1750a.h, 1750a.c: Remove use of function prototypes.

Fri Jan 13 15:53:33 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

        * tree.h (DECL_STATIC_CONSTRUCTOR): New macro.
        (DECL_STATIC_DESTRUCTOR): New macro.
        (tree_decl): Add static_ctor_flag and static_dtor_flag.

        * objc-act.c (finish_file): Renamed from objc_finish.

        * c-parse.in (program): Call finish_file.

        * c-decl.c (duplicate_decls): Propagate DECL_STATIC_{CON,DE}STRUCTOR.
        (finish_function): Handle DECL_STATIC_{CON,DE}STRUCTOR.

        * c-lang.c (finish_file): New function to emit code for calling
        static constructor and destructor functions as necessary.

        * c-common.c (decl_attributes): Support __attribute__s
        "constructor" and "destructor".

Fri Jan 13 19:38:08 1995  Paul Eggert  <eggert@twinsun.com>

	* gcc.c (execute): Don't wait for just any N subprocesses,
	since we may have started with some subprocesses before we
	started executing.  Wait just for _our_ N subprocesses.

Fri Jan 13 18:08:17 1995  John F Carr  <jfc@mit.edu>

	* gencodes.c, genemit.c, genflags.c (gen_insn):  Ignore insns whose
	names begin with '*'.
	* genoutput.c (output_epilogue): Do not reference gen_ functions for
	insns whose names begin with '*'.

Fri Jan 13 17:54:42 1995  Wolfgang Formann  (wolfi@exner.tgm.ac.at)

	* i386/isc.h (ASM_FILE_START): New macro.

Fri Jan 13 15:01:59 1995  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* c-parse.in (unary_expr): If -pedantic, give error for &&.

	* fold-const.c (fold, case COND_EXPR): Properly swap args 1 and 2.
	Strip nops from ARG2, just like ARG1.
	Make {MIN,MAX}_EXPR properly when type of result different than args.
	
	* function.c (optimize_bit_field): Don't remove a SUBREG that
	changes mode class.

	* Makefile.in (stmp-multilib*): Pass CC and CFLAGS to recursive make.

	* alpha/osf12.h (LINK_SPEC): Add missing "\".

Thu Jan 12 13:37:13 1995  Jim Wilson  <wilson@cygnus.com>

	* i960/t-* (LIBGCC1, CROSS_LIBGCC1): Define to empty instead of
	to libgcc1.null.
	* mips/t-*, sparc/t-*: Likewise.

Thu Jan 12 08:13:55 1995  Steve Chamberlain  (sac@wombat.gnu.ai.mit.edu)

	* libgcc2.c (__lshldi3, __lshrdi3,  __ashldi3, __ashrdi3):
	Shift count comes as a word, not as an SI.  Keep temporary in
	a word.
	(__moddi3, __divdi3): Make negate flag `c' have word_type for
	efficiency.

Thu Jan 12 07:18:09 1995  Stephen L Moshier  (moshier@world.std.com)

	* real.c (toe64):  Use Intel bit pattern for little-endian XFmode Inf.
	(e64toe): Likewise; also check the exponent field properly.

Wed Jan 11 14:24:55 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

        * toplev.c (lang_options): Add -f{no-,}gnu-keywords, 
        -f{no-,}operator-names.

Tue Jan 10 19:16:07 1995  David Edelsohn  <edelsohn@mhpcc.edu>

	* rs6000.h (REGISTER_MOVE_COST): Add LINK_OR_CTR_REGS class to
	expensive moves.

Tue Jan 10 19:07:36 1995  Jonathan Beimel  (jbeimel@gomez.sc.intel.com)

	* combine.c (simplify_if_then_else): Fix typo: "|" should be "||".

Tue Jan 10 05:49:25 1995  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* fold-const.c (fold): Avoid infinite recursion caused by last change.

Mon Jan  9 17:08:56 1995  Michael Meissner  (meissner@cygnus.com)

	* configure: All AIX versions [456789].* use the AIX 4.1 support.

Mon Jan  9 13:21:07 1995  David Edelsohn  <edelsohn@npac.syr.edu>

	* rs6000/aix41ppc.h: New file.

	* configure (powerpc-ibm-aix4.1*): Add support AIX version 4.1 on
	the powerpc.

Sat Jan  7 08:51:29 1995  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* sparc.c (order_regs_for_local_alloc): Add casts to bcopy call.
	(print_operand, case 'f'): New case.
	(sparc_initialize_trampoline): Use gen_flush instead of knowing
	what pattern looks like.
	Use MEM instead of address in flush insn, so virtual reg
	instantiation can update.
	Ensure address in flush insn is valid.
	* sparc.md (flush): Change to using a MEM instead of address.

	* reorg.c (dbr_schedule): Add missing casts in bzero call.

	* fold-const.c (fold, case CONVERT_EXPR): Don't remove an
	integer conversion when outer is FP unless it doesn't change
	signedness; rework code in this area to be clearer.

Sat Jan  7 02:58:21 1995  Jeffrey A. Law  (law@snake.cs.utah.edu)

	* pa.h (enum processor_type): New enumeration describing the
	processor to schedule for (700, 7100, 7100LC).
	(pa_cpu_attr, TARGET_OPTIONS, OVERRIDE_OPTIONS): Define.
	(pa_cpu_string, pa_cpu): Provide extern decls.
	* pa.c (pa_cpu, pa_cpu_string): Provide definitions.
	(override_options): New function.
	(pa_adjust_cost): Handle PROCESSOR_7100 and PROCESSOR_7100LC
	scheduling.  Handle anti-dependendy cases involving fp division
	and sqrt.  Handle output dependencies correctly.  Break TYPE_FPMUL
	into TYPE_FPMULSGL and TYPE_FPMULDBL.
	* pa.md (cpu attribute): New attribute.
	Clean up comments for PROCESSOR_700 scheduling info.  Slightly
	simplify.  Make conditional on PROCESSOR_700.
	Add comments and scheduling information for PROCESSOR_7100 and
	PROCESSOR_7100LC.  Set types for instructions which use the shifter
	to "shift".  Explicitly set lengths and types for all instructions.
	Break type "fpmul" into "fmulsgl" and "fpmuldbl".

Fri Jan  6 17:50:48 1995  Jim Wilson  <wilson@chestnut.cygnus.com>

	* sh/sh.h (DO_GLOBAL_CTORS_BODY): Run constructors from right to
	left not left to right.
	* h8300/h8300.h: Likewise.

Thu Jan  5 12:37:26 1995  Doug Evans  <dje@cygnus.com>

	* loop.c (get_condition): Use CONST0_RTX instead of const0_rtx.

Wed Jan  4 04:26:23 1995  Jeffrey A. Law  (law@snake.cs.utah.edu)

	* pa.md (call expander): Use emit_insn_before to emit an insn to
	save the PIC register before a function call.
	(call_value expander): Likewise.

Tue Jan  3 15:23:49 1995  Jim Wilson  <wilson@cygnus.com>

	* va-mips.h (va_arg, mips3 case): Use __PTRDIFF_TYPE__ not int in
	casts.

	* c-decl.c (duplicate_decls): Push to correct obstack before
	creating new function types.

Fri Dec 30 16:12:52 1994  Ian Lance Taylor  <ian@cygnus.com>

	* fixinc.svr4: Remove special patch for <netinet/in.h>.

Fri Dec 30 08:00:53 1994  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* varasm.c: Include output.h.
	Add prototyes for all static functions; remove forward declarations
	of non-static functions.
	(assemble_variable): Add missing arg decl.
	(bc_make_decl_rtl, const_hash, const_hash_rtx): Now static.
	(output_addressed_constants, output_constructor): Likewise.
	(bc_output_constructor): Add missing argument.
	(output_byte_asm): Delete, unused.
	* output.h: Add decls of functions in varasm.c.
	Allow to be included when rtl.h is not.
	* function.h ({save_restore}_varasm_status): Add decls.
	* c-decl.c, c-typeck.c, toplev.c: Include output.h.
	* Makefie.in (c-decl.o, c-typeck.o, toplev.o, varasm.o): Likewise.

Thu Dec 29 21:48:03 1994  Jeffrey A. Law  (law@snake.cs.utah.edu)

	* calls.c (expand_call): Set MEM_IN_STRUCT_P as needed on return
	value from assign_stack_temp.
	(store_one_arg): Likewise.
	* expr.c (save_noncopied_parts): Likewise.
	(expand_expr): Likewise.
	* function.c (assign_parms): Likewise.
	* integrate.c (expand_inline_function): Likewise.
	* stmt.c (expand_decl): Likewise.

Thu Dec 29 14:06:34 1994  Jim Wilson  <wilson@cygnus.com>

	* cse.c (simplify_unary_operation): Cast constant 1 to HOST_WIDE_INT
	before shifting left to form mask.
	* gcc.c (print_multilib_info): Initialize last_path_len to 0.
	* varasm.c (output_constructor): Change type of variable value to
	HOST_WIDE_INT.

	* expmed.c (expand_mult_highpart): Use convert_modes instead of
	gen_lowpart to do conversions.

Thu Dec 29 13:42:08 1994  Mike Stump  <mrs@cygnus.com>

	* toplev.c (lang_options): Add -frtti flag for rtti support in C++.

Wed Dec 28 22:04:42 1994  Jeffrey A. Law  (law@snake.cs.utah.edu)

	* config/pa/lib2funcs.asm: New file.
	* config/pa/t-pa (LIB2FUNCS_EXTRA): Define.
	* config/pa/pa.h (DO_GLOBAL_DTORS_BODY): Define.  Include a
	reference to __gcc_plt_call so __gcc_plt_call always appears in
	executables which reference __main.

Wed Dec 28 21:18:26 1994  Jim Wilson  <wilson@cygnus.com>

	* mips.md (truncdiqi2+[123]): Add patterns to optimize DImode to
	SImode truncation.

	* reorg.c (fill_simple_delay_slots): For the epilogue case, set needed
	to include frame pointer and stack pointer, don't include all of
	end_of_function_needs.	Reject insn if it sets a previously set
	resource.

	* sh.c (sh_expand_prologue): Clear extra_push at start.  Clear
	current_function_anonymous_args if set.  Clear shiftsyms array.
	(sh_expand_epilogue): Don't clear extra_push,
	current_function_pretend_args_size, current_function_anonymous_args,
	and shiftsyms array.

	* reload.c (find_equiv_reg): Exclude registers clobbered in the
	CALL_INSN_FUNCTION_USAGE field of a CALL_INSN.

Tue Dec 27 19:22:35 1994  Mike Stump  <mrs@cygnus.com>

	* stmt.c (expand_cleanups): Add third parameter so that we can
	avoid marking a cleanup region if this cleanup is part of a fixup
	style goto.
	(expand_goto_internal): Pass a 1 to expand_cleanups.
	(bc_expand_goto_internal): Ditto.
	(fixup_gotos): Ditto.
	(expand_end_bindings): Pass a 0 to expand_cleanups.

Tue Dec 27 15:45:18 1994  Jeffrey A. Law  <law@snake.cs.utah.edu>

	* pa.c (output_movb): Fix ttypo.

Tue Dec 27 15:11:42 1994  Ian Lance Taylor  <ian@cygnus.com>

	* config/i960/i960.c (i960_output_double): Print hex constants if
	REAL_VALUE_TO_TARGET_DOUBLE is defined.
	(i960_output_float): Likewise with REAL_VALUE_TO_TARGET_SINGLE.

Sun Dec 25 07:22:30 1994  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* convert.c (convert_to_pointer): Eliminate ref to null_pointer_node.

Thu Dec 22 12:51:31 1994  Stephen R. van den Berg  (berg@pool.informatik.rwth-aachen.de)

	* limitx.h (syslimits.h): Find syslimits.h in the same directory.

	* limity.h (_GCC_NEXT_LIMITS_H): If macro defined, recurse down
	to real limits.h.

	* gsyslimits.h (_GCC_NEXT_LIMITS_H): Define macro and start recursing
	down to the real limits.h.

Thu Dec 22 12:17:11 1994  Ian Lance Taylor  <ian@cygnus.com>

	* Makefile.in (LIMITS_H_TEST): New variable.
	(xlimits.h): Use LIMITS_H_TEST.
	* config/m68k/t-next (LIMITS_H_TEST): Define.
	* config/i386/t-next (LIMITS_H_TEST): Define.

Wed Dec 21 15:56:13 1994  Holger Teutsch  (teutsch@sw017.ffm-iw.Degussa.DE)

	* clipper.h (TRAMPOLINE_TEMPLATE): Specify some code as explicit hex
	words. Shorten template.
	(TRAMPOLINE_SIZE,INITIALIZE_TRAMPOLINE): Update accordingly.
	(FUNCTION_ARG,FUNCTION_ARG_ADVANCE): Aggregates are ALWAYS passed
	on the stack.
	* va-clipper.h (__va_rounded_size): Delete.
	(__va_round): Args have at least PARM_BOUNDARY (=32) alignment.

Wed Dec 21 15:36:46 1994  Stephen L Moshier  (moshier@world.std.com)

	* m68k.md (sqrtsf2, sinsf2, sindf2, sinxf2): Define.
	(cossf2, cosdf2, cosxf2): Likewise.
	(sqrtxf2): Operand 1 now XFmode.

Wed Dec 21 14:39:46 1994  Philippe De Muyter (phdm@info.ucl.ac.be)

	* m68k.md (adddi3, subdi3): New patterns.

Wed Dec 21 13:56:08 1994  Michael Gschwind  <mike@vlsivie.tuwien.ac.at>

	* pdp11.md (mulhisi3): Add truncate to mulhisi3 to fix bug and
	change from define_insn to define_expand to survive register
	presssure.

Wed Dec 21 12:51:10 1994  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* stmt.c (expand_asm_operands): Make sure input operands are
	valid constants if they are constants.

	* toplev.c (rest_of_compilation): Adjust tests for when to
	inline and when to defer.
	* calls.c (expand_call): Only inline if DECL_INLINE; don't
	call function_cannot_inline_p here.

	* stmt.c (expand_expr_stmt): If want values for statements,
	convert function to address-of-function.

Wed Dec 21 00:02:33 1994  Ian Lance Taylor  <ian@cygnus.com>

	* combine.c (simplify_shift_const): Always copy flags to new MEM.

Tue Dec 20 14:15:58 1994  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>

	* rs6000/aix41.h (LINK_SPEC): Add case for -shared, just like rs6000.h.

Tue Dec 20 09:14:00 1994  DJ Delorie (dj@ctron.com)

	* i386/go32.h: support #pragma pack().

	* msdos/configur.bat: add libgcc.a target.
	* msdos/mklibgcc.c: new file, helps build libgcc.a.
	* msdos/libgcc.mak: new file, makefile fragment for libgcc.a.
	* msdos/top.sed: change Makefile to be able to build libgcc.a.

Mon Dec 19 20:52:13 1994  Jim Wilson  <wilson@cygnus.com>

	* mips/x-sysv (CLIB): Add -L/usr/lib/cmplrs/cc3.11.

	* dsp16xx/dsp16xx.h (HAVE_VPRINTF): Delete.

	* flow.c (mark_set_1): For multi-reg hard register, clear all
	reg_next_use entries.

Mon Dec 19 17:49:59 1994  Doug Evans  <dje@cygnus.com>

	* Makefile.in (stmp-multilib): Check recursive make's return code.
	(.PHONY): Tell GNU make the various LANGUAGES are phony targets.

Mon Dec 19 17:07:41 1994  Ian Lance Taylor  <ian@cygnus.com>

	* config/mips/mips.c (print_operand): Don't print a CONST_DOUBLE
	as a floating point value if it is not MODE_FLOAT.

Mon Dec 19 15:27:42 1994  Jim Wilson  <wilson@cygnus.com>

	* fp-bit.c (fpadd_parts): Adding infinities with opposite signs
	yields a NaN.

	* loop.c (invariant_p): Reject const volatile references.

Sun Dec 18 21:55:26 1994  Jeffrey A. Law  <law@snake.cs.utah.edu>

	* pa.md (pic2_highpart): Accept readonly operands.

Sun Dec 18 16:29:20 1994  Jim Wilson  <wilson@cygnus.com>

	* mips/dec-bsd.h (CPP_PREDEFINES): Change _MIPSEB to _MIPSEL.

	* cccp.c (macarg1): Count newline at end of C++ comment.

Sun Dec 18 06:54:34 1994  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* stor-layout.c (layout_decl): Allow DECL_BIT_FIELD for any type.

Sat Dec 17 03:43:24 1994  Jeffrey A. Law  <law@snake.cs.utah.edu>

	* pa.h (readonly_section): During PIC code generation, put
	readonly data into the standard data section.

	* pa.c (pic_label_operand): Disallow SYMBOL_REFs (constant data).

Fri Dec 16 06:44:40 1994  Jim Wilson  <wilson@chestnut.cygnus.com>

	* sparc/litecoff.h (DBX_BLOCKS_FUNCTION_RELATIVE, DBX_FUNCTION_FIRST,
	DBX_OUTPUT_MAIN_SOURCE_FILE_END): Define.
	(ASM_OUTPUT_SOURCE_LINE): Modify it to output function relative stabs.

	* sh/lib1funcs.asm (ashiftrt_r4_1): Delete useless or instruction.
	Add nop to rts delay slot.

	* combine.c (distribute_notes): When output an insn to hold a REG_DEAD
	note, update basic_block_head if necessary.

Thu Dec 15 15:22:46 1994  Jeffrey A. Law  <law@snake.cs.utah.edu)

	* pa.h (DBX_OUTPUT_MAIN_SOURCE_FILE_END): Don't emit a ".text"
	pseudo-op, we already make sure we're in the right space/subspace.

Thu Dec 15 07:49:36 1994  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* expr.c (store_constructor): Properly get constant part of
	bit position when DECL_FIELD_BITPOS is a PLUS_EXPR.

Wed Dec 14 19:01:32 1994  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* expr.c (get_inner_reference): Use EXACT_DIV_EXPR to
	compute byte offset from bit offset.

Wed Dec 14 11:41:21 1994  Ian Lance Taylor  <ian@cygnus.com>

	* fixincludes: Fix non const atof parameter on NEWS-OS 4.2R.

Tue Dec 13 18:39:09 1994  Doug Evans  <dje@cygnus.com>

	* h8300.c (handle_pragma): Only print warning once.

	* function.c (instantiate_virtual_regs_1, case PLUS): If offset is
	zero, make sure register replacement is still validated.

Tue Dec 13 07:51:20 1994  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* tower-as.h (FUNCTION_EXTRA_EPILOGUE): Fix typo in mov.l opcode.
	* tower.h (IMMEDIATE_PREFIX): Really define.

	* expr.c (expand_expr, case MINUS_EXPR): Properly handle case
	when the NEGATE overflows.

Mon Dec 12 17:22:19 1994  der Mouse  (mouse@collatz.mcrcim.mcgill.edu)

	* reload.c (debug_reload): Use GET_MODE_NAME to avoid warning.

Mon Dec 12 13:15:04 1994  Doug Evans  <dje@cygnus.com>

	* function.c (locate_and_pad_parm): Don't call pad_below for BLKmode
	parms in regs.

	* expmed.c (emit_store_flag): Set mode after canonicalizing op0/op1
	so op1 is constant.

Mon Dec 12 08:04:33 1994  Pat Rankin  (rankin@eql.caltech.edu)

	* cccp.c, toplev.c (vms_fopen): Call `fopen' through an indirect
	pointer to inhibit checking argument list against its prototype.
	Increase RMS multi-block count from 16 to 32.

Sat Dec 10 17:03:59 1994  H.J. Lu   (hjl@nynexst.com)

	* cccp.c (do_include): Avoid dynamic initialization of aggregate.

Sat Dec 10 16:57:50 1994  Andreas Luik  (luik@isa.de)

	* m68k.md (cmpsi): Make this into a define_expand; legitimize
	PIC addresses if necessary.
	Old cmpsi code now unnamed define_insn pattern.

Sat Dec 10 16:06:03 1994  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* fold-const.c (pedantic_omit_one_operand): New function.
	(fold, case COND_EXPR): Use it instead of calling
	pedantic_non_lvalue on the result of omit_one_operand.

Fri Dec  9 15:53:35 1994  Steve Chamberlain  (sac@wombat.gnu.ai.mit.edu)

	* reload.c (find_reloads_address_1):  Handle TRUNCATE and
	ZERO_EXTEND in same way as SIGN_EXTEND.

Fri Dec  9 14:52:41 1994  Jason Merrill  <jason@phydeaux.cygnus.com>

        * rs6000/rs6000.h (LINK_SPEC): Add %{shared:-bM:SRE}.
        (LINK_LIBGCC_SPECIAL_1): Use LIBGCC_SPEC instead.

Fri Dec  9 14:24:02 1994  Per Bothner  <bothner@kalessin.cygnus.com>

	* gcc.c (default_compilers):  Add support for Chill (.ch and .chi).

Fri Dec  9 17:31:46 1994  Jason Merrill  <jason@phydeaux.cygnus.com>

	* fixinc.svr4 (sys/byteorder.h): Turn extern inlines back into
	static inlines for targets (such as SPARC/Solaris) that don't
	supply these functions in the C library.

Fri Dec  9 17:19:44 1994  David Edelsohn  <edelsohn@npac.syr.edu>

	* rs6000.h (MASK_NO_FPR, TARGET_NO_FPR): Define.
	(TARGET_SWITCHES): Add "fp-regs" and "no-fp-regs".
	(CONDITIONAL_REGISTER_USAGE): Set FPRs fixed and call_used if
	TARGET_NO_FPR.

Fri Dec  9 16:06:23 1994  Doug Evans  <dje@cygnus.com>

	* fold-const.c (fold): Call real_zerop for real constants.

Thu Dec  8 17:28:57 1994  Jason Merrill  <jason@phydeaux.cygnus.com>

        * dbxout.c (dbxout_type_method_1): Don't try to look at the first
        argument of non-methods (which might not have a first argument).

Thu Dec  8 16:07:27 1994  Roland McGrath  <roland@churchy.gnu.ai.mit.edu>

	* configure (mips-*-gnu*): Recognize this configuration.
	* config/mips/gnu.h: New file.

Thu Dec  8 15:41:32 1994  Philippe De Muyter (phdm@info.ucl.ac.be)

	* m68k.c (extend_operator): New predicate.
	* m68k.md (bsetmemqi, bclrmemqi): New patterns to set bit in memory
	byte with bit number dynamic (use bclr/bset instructions).

Thu Dec  8 14:13:45 1994  Paul Eggert  <eggert@twinsun.com>

	* cccp.c (do_include): Don't turn newline markers into spaces
	when expanding an include file name.

	* cccp.c (discard_comments): If traditional, replace a comment
	with nothing instead of with a space.

	* cccp.c (char_name): New var.
	(initialize_char_syntax): Initialize it.
	(handle_directive): Use it to simplify printing of diagnostics.
	Warn about '\r' too.
	(create_definition, do_pragma, do_endif, make_assertion): Be consistent
	about skipping all horizontal white space, not just space and tab.

Thu Dec  8 13:54:38 1994  H.J. Lu (hjl@nynexst.com)

	* i386/linuxelf.h: Modified for stabs-in-ELF.
	(PREFERRED_DEBUGGING_TYPE): Defined as DBX_DEBUG.
	(FUNCTION_PROFILER): Use mcount instead of _mount.
	(CPP_PREDEFINES): Add -D__ELF__.
	(CPP_SPEC): Add -D__PIC__ -D__pic__ for -fPIC or -fpic.
	(LIB_SPEC): Don't use any default library if -shared.
	(LIBGCC_SPEC, LINK_SPEC, STARTFILE_SPEC, ENDFILE_SPEC): New specs.
	* configure (gxx_include_dir): Set default to '$(prefix)/include/g++'
	(i[345]86-*-linuxelf): New platform for ELF.
	* crtstuff.c (CRT_END): Add dummy refs to ___brk_addr, __environ
	and atexit if __linux__ and __PIC__  defined. 

Thu Dec  8 12:58:34 1994  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>

	* config/xm-freebsd.h, i386/xm-freebsd.h: New files.
	* configure (i[345]86-*-freebsd*): Use i386/xm-freebsd.h.

Wed Dec  7 16:51:56 1994  Philippe De Muyter (phdm@info.ucl.ac.be)

	* m68k.md: New pattern for ior between SImode target and zero_extended
	value.

Wed Dec  7 16:42:46 1994  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* combine.c (distribute_notes): If can't find place for REG_DEAD
	note, add an INSN with a USE to hold it.

	* tree.c (preserve_momentary): New function.

Wed Dec  7 15:59:00 1994  Doug Evans  <dje@cygnus.com>

	* function.c (locate_and_pad_parm): Do padding before rounding
	so pad_below knows how much is needed.

Tue Dec  6 17:53:37 1994  Steve Chamberlain  (sac@wombat.gnu.ai.mit.edu)

        * sh.md (ashrsi2_16): New pattern doesn't clobber reg 18.
        (ashrsi2_31): Fix.

Tue Dec  6 19:11:36 1994  Stephen L Moshier  (moshier@world.std.com)

	* c-decl.c (init_decl_processing):  Implement built-in functions
	fabsf, sqrtf, sinf, cosf, fabsl, sqrtl, sinl, cosl.

Tue Dec  6 18:42:15 1994  Pat Rankin  (rankin@eql.caltech.edu)

	* make-gcc.com: Eliminate `set symbol/scope=noGlobal'.

	* vax/vms.h (CPP_PREDEFINES): Set __GNUC_MINOR__ to 7.

Tue Dec  6 15:10:37 1994  Jason Merrill  <jason@phydeaux.cygnus.com>

        * sparc/t-sol2 (CRTSTUFF_T_CFLAGS): Don't use PIC if
        cross-compiling, use the native assembler otherwise.

Tue Dec  6 05:48:32 1994  Roland McGrath  <roland@churchy.gnu.ai.mit.edu>

	* configure (i[345]86-*-gnu*): Just set cpu_type=i386 here.
	(*-*-gnu*): Match this in second case stmt and set other vars based on
	$cpu_type.
	* config/gnu.h: New file.
	* config/i386/gnu.h: Include "gnu.h".

Mon Dec  5 16:59:39 1994  Doug Evans  <dje@cygnus.com>

	* sparc/t-sparcbare (LIB2FUNCS_EXTRA): Compile fp-bit.c.

Mon Dec  5 14:48:53 1994  Jim Wilson  <wilson@mole.gnu.ai.mit.edu>

	* unroll.c (copy_loop_body): Reformat CODE_LABEL_NUMBER macro call
	to avoid HPUX compiler bug.

Mon Dec  5 13:53:45 1994  Doug Evans  <dje@cygnus.com>

	* m68k.md (negsf2): Flip sign bit if software floating point.
	(negdf2,negxf2): Likewise.
	(abssf2): Zero sign bit if software floating point.
	(absdf2,absxf2): Likewise.

Mon Dec  5 13:00:37 1994  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* rs6000.h (EXTRA_CONSTRAINT, case 'R'): Fix error in last change.

Mon Dec  5 00:40:11 1994  Doug Evans  <dje@cygnus.com>

	* Makefile.in (c-parse.h): Split away from c-parse.c for parallel
	makes.
	(bi-parser.h): Likewise with bi-parser.c.

Sun Dec  4 21:04:40 1994  Doug Evans  <dje@cygnus.com>

	Delete this patch:
	* reorg.c (fill_slots_from_thread): Create a USE insn for any
	redundant insn we pretend to fill a delay slot with.  Continue
	searching for a suitable delay slot insn at the new USE insn.

Fri Dec  2 11:29:41 1994  Per Bothner  <bothner@kalessin.cygnus.com>

	* expr.c (store_constructor):  Add support for SET_TYPE.

Fri Dec  2 18:14:09 1994  David Edelsohn  <edelsohn@npac.syr.edu>

	* rs6000.h (MASK_64BIT, TARGET_64BIT, SHORT_TYPE_SIZE): Define.
	(INT_TYPE_SIZE, MAX_INT_TYPE_SIZE, LONG_TYPE_SIZE): Define.
	(MAX_LONG_TYPE_SIZE, LONG_LONG_TYPE_SIZE, CHAR_TYPE_SIZE): Define.
	(FLOAT_TYPE_SIZE, DOUBLE_TYPE_SIZE, LONG_DOUBLE_TYPE_SIZE): Define.
	(POINTER_SIZE, PARM_BOUNDARY): Depend on TARGET_64BIT.
	(BIGGEST_ALIGNMENT, STARTING_FRAME_OFFSET): Likewise.
	(FIRST_PARM_OFFSET, REG_PARM_STACK_SPACE): Likewise.
	(STACK_POINTER_OFFSET, Pmode, FUNCTION_MODE): TARGET_64BIT dependent.
	* xcoffout.c (xcoff_output_standard_types): Add TARGET_64BIT
	dependencies.  Add "wchar", "long long int", and "long long
	unsigned int" built-in C types.

Fri Dec  2 18:08:16 1994  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* integrate.c (subst_constant): Don't treat all virtual regs as
	constants, just those that are off FP and AP, but not SP.
	(expand_inline_function): If called function calls alloca, save and
	restore SP around its call.

	* rs6000.c (input_operand): Correctly check for SYMBOL_REF 
	referring to the TOC.
	* rs6000.h (EXTRA_CONSTRAINT): Likewise.

Wed Nov 30 20:42:57 1994  Jeffrey A. Law  <law@snake.cs.utah.edu)

	* reorg.c (fill_slots_from_thread): Create a USE insn for any
	redundant insn we pretend to fill a delay slot with.  Continue
	searching for a suitable delay slot insn at the new USE insn.

Wed Nov 30 19:02:49 1994  Jim Wilson  <wilson@chestnut.cygnus.com>

	* combine.c (record_dead_and_set_regs_1): Handle SUBREGs.

	* expr.c (convert_move): When emit multiword conversion, force FROM
	into a new pseudo-reg if it overlaps TO.

	* fold-const.c (fold_truthop): Delete BIT_AND_EXPR of constants
	with masks.

Wed Nov 30 18:22:31 1994  David Edelsohn  <edelsohn@npac.syr.edu>

	* rs6000.h (BITS_PER_WORD): TARGET_POWERPC64 dependent.
	(MAX_BITS_PER_WORD): Define.
	(UNITS_PER_WORD): TARGET_POWERPC64 dependent.
	(MAX_UNITS_PER_WORD): Define.
	(UNITS_PER_FP_WORD): Define.
	(HARD_REGNO_NREGS): Use MAX_UNITS_PER_FP_WORD.
	(HARD_REGNO_MODE_OK): Likewise.
	(CLASS_MAX_NREGS): Likewise.
	(MOVE_MAX): TARGET_POWER and TARGET_POWERPC64 dependent.
	(MAX_MOVE_MAX): Define.
	* rs6000.md (floatsidf2): Test BITS_PER_WORD in pattern condition
	not during build.  Fail if TARGET_POWERPC64.
	(floatunssidf2): Likewise.

	* rs6000.md (extendsidi2): Use lwa_operand predicate.
	(sign_extend load with update): New PowerPC64 pattern.
	* rs6000.c (lwa_operand): New predicate.
	* rs6000.h (PREDICATE_CODES): Add lwa_operand.

Wed Nov 30 18:19:08 1994  Will Athanasiou  (will@westford.ccur.com)

	* rs6000.md (extendsfdf2): SFmode and DFmode register format
	identical so use define_expand with paradoxical subreg no-op and
	accompanying new define_split.

Wed Nov 30 18:05:03 1994  Michael Collison  (collison@sw.stratus.com)

	* reload.c (combine_reloads): If using reg dying in this insn as
	reload reg, ensure it can't be a secondary output reload reg.
	
Wed Nov 30 15:48:29 1994  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* expr.c (emit_block_move): Only use movstr if size is
	small enough constant or MODE is at least BITS_PER_WORD.

	* c-common.c (decl_attribute): Allow special names (e.g, `word')
	for mode attribute.
	* libgcc2.c (word_type): Use __attribute__ ((mode (__word__))).

Tue Nov 29 16:50:37 1994  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

    	* expmed.c (expand_shift): Open-code rotate even if by a variable.
	* optabs.c (init_optabs): Don't set functions for rotl and rotr.

Tue Nov 29 00:39:56 1994  Jeffrey A. Law  (law@snake.cs.utah.edu)

	* pa.h (DEFAULT_PCC_STRUCT_RETURN): Define as zero.
	(RETURN_IN_MEMORY): Only large structs (>8 bytes) and addressable
	structs should be returned in memory.
	* calls.c (expand_call): Handle returning BLKmode values in
	registers.  Do not try to promote BLKmode.
	* expr.c (expand_assignment): For BLKmode structure returns,
	copy the return value from registers into the target memory
	locations.
	* integrate.c (function_cannot_inline_p): Do not inline functions
	which return a BLKmode value in registers.
	* stmt.c (expand_return): For BLKmode structure returns, copy
	the return value from memory into the return registers.  Use
	an integer mode rather than BLKmode for returning structures
	in registers.
	* explow.c (hard_function_value): Change a register in BLKmode
	to a register in a sufficiently wide integer mode.

	* calls.c (expand_call): Do not set is_integrable if the
	function is not inlineable according to function_cannot_inline_p.

Mon Nov 28 18:53:06 1994  Dave Love  (d.love@dl.ac.uk)

	* Makefile.in (FLAGS_TO_PASS): Fix typo in GCC_FOR_TARGET.

Mon Nov 28 18:15:58 1994  Stephen R. van den Berg  (berg@pool.informatik.rwth-aachen.de)

	* configure (lang): Really fix the quoting bug in bash 1.12.

Mon Nov 28 18:03:48 1994  Jim Wilson  (wilson@cygnus.com)

	* expmed.c (store_bit_field, extract_bit_field): Consistently use
	SLOW_UNALIGNED_ACCESS instead of STRICT_ALIGNMENT.
	* expr.c (move_by_pieces, move_by_pieces_ninsns, emit_push_insn,
	expand_assignment, store_field, expand_expr): Likewise.
	(SLOW_UNALIGNED_ACCESS): Default to STRICT_ALIGNMENT, not zero.

	* cccp.c (create_definition): Error if comma not followed by an
	identifier.
	(collect_expansion): Error if # used in macro with no arguments.

	* c-decl.c (finish_decl): Use DECL_CONTEXT instead of
	current_binding_level to identify file-scope variables.

Wed Nov 23 19:44:25 1994  Steve Chamberlain  (sac@jonny.cygnus.com)

	* sh.c (MSW, LSW): New macros.
        (print_operand_address): Added 'T' and 'S'.  Modified
        to support alternate endianness.
        (output_movedouble):  Support both byte orders.
        (output_options): Tell assembler when in little endian mode.
        (shiftinsns): New function to calculate shift cost more
        accurately.
        (gen_shifty_op): Use new function.
        * sh.h (CPP_SPEC, ASM_SPEC, LINK_SPEC, LIBGCC2_WORDS_BIG_ENDIAN): New.
        (TARGET_SWITCHES, WORDS_BIG_ENDIAN, BYTES_BIG_ENDIAN, ): Support
        both byte orders.
        * sh.md (addi3, subdi3, ashrdi3, ashldi3, extendsidi2, movdi, movdf):
        Support both byte orders.
        (ashrsi2_16, ashrsi2_31): New.
        t-sh: Support both byte orders.

Wed Nov 23 17:25:43 1994  Ian Dall  (dall@hfrd.dsto.gov.au)

	* config/ns32k/{ns32k.c,ns32k.h}: Add -mhimem to
	support linking above 0x20000000 boundary.

	* config/ns32k/{netbsd.h,pc532.h, ns32k.c}: Fix meaning
	of BASE_REG_NEEDED.

Wed Nov 23 17:24:24 1994 Matthias Pfaller (leo@marco.de)

	* configure (ns32k-pc532-netbsd): No need for fixincludes
	and libgcc1.
	* ns32k/ns32k.h (CONST_COSTS): Correct range is -0x1fff to 0x2000.
	* ns32k/ns32k.md (everywhere): Correct range is -0x1fffffff
	to 0x20000000, others have to be loaded with movd.
	Shortcircuit with TARGET_32532 as early as possible.
	(movsi): Use movd to load unknown symbol values. to allow
	* ns32k/ns32k.c (print_operand): Removed dead code.
	* ns32k/pc532.h (TARGET_DEFAULT): Forbid usage of bitfield
	instructions.

Wed Nov 23 14:09:42 1994  Jim Wilson  (wilson@cygnus.com)

	* mips.c (mips_output_external): Exclude __builtin_next_arg from list
	of used external functions.

	* sh.c (arith_reg_operand): Disallow MACH_REG and MACL_REG.

	* sparc.h (SECONDARY_MEMORY_NEEDED_RTX, SECONDARY_MEMORY_NEEDED_MODE):
	Use MODE not mode.

Wed Nov 23 13:30:52 1994  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* expr.c (emit_move_insn): If splitting up into individual words
	and X is a push_operand, do the push and reference top of stack.

Tue Nov 22 21:39:52 1994  Doug Evans  (dje@cygnus.com)

	* mips/elf64.h (ASM_OUTPUT_SECTION_NAME): Define.

Tue Nov 22 06:29:21 1994  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* fold-const.c (fold_convert): Don't fold conversion if it would
	produce constant larger than we can support.
	* emit-rtl.c (gen_lowpart_common): Do nothing if size is
	greater than twice host wordsize, not just if equal.

	* optabs.c (emit_no_conflict_block): Just emit the insns if
	the block contains something not an INSN or has an embedded block.

	* emit-rtl.c (init_emit): Set REGNO_POINTER_FLAG
	for HARD_FRAME_POINTER_REGNUM.

	* machmode.h (ptr_mode): Add declaration.
	* emit-rtl.c (ptr_mode): Add definition.
	(init_emit_once): Initialize ptr_mode.
	* stor-layout.c (layout_type): Use ptr_mode instead of equivalent
	call to mode_for_size.

Mon Nov 21 18:41:42 1994  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* varasm.c (output_constant): When eliminating conversions,
	treat ARRAY_TYPE like a record.

	* m68k.md (movqi): Fix typo in push/pop case.

Mon Nov 21 18:11:55 1994  Stephen R. van den Berg  (berg@pool.informatik.rwth-aachen.de)

	* genopinit.c (gen_insn): Use GET_MODE_WIDER_MODE macro instead of
	directly accessing the array.

Mon Nov 21 17:59:07 1994  David Edelsohn  <edelsohn@npac.syr.edu>

	* aix41.h (LINK_SPEC): New overriding defintion.

Mon Nov 21 17:44:01 1994  John F Carr  (jfc@mit.edu)

	* rs6000.c (input_operand):  Allow a SYMBOL_REF referring to a
	symbol in the TOC.

Mon Nov 21 14:39:13 1994  Doug Evans  (dje@cygnus.com)

	* mips/t-ecoff (dp-bit.c): Fix typos.

Mon Nov 21 14:06:29 1994  Jim Wilson  (wilson@cygnus.com)

	* emit-rtl.c (operand_subword): For CONST_DOUBLE, add case to
	handle BITS_PER_WORD of 16.

	* reload1.c (reload): When decrement max_groups of superclass, can
	only do so if the group_size is smaller than the current group.

	* c-lex.c (yylex): Do warn about floating point out of range if
	target floating-point format is IEEE.  Use warning instead of
	pedwarn to avoid getting errors.

Mon Nov 21 13:37:03 1994  Doug Evans  (dje@cygnus.com)

	* m88k/m88k-aout.h (CPP_PREDEFINES): Add -Acpu and -Amachine.
	* m88k/m88k-coff.h (CPP_PREDEFINES): Likewise.
	(DBX_DEBUGGING_INFO): Define.

	* m68k/t-m68kbare (MULTILIB_MATCHES): Treat m68302/m68332 like m68000.

Mon Nov 21 00:58:36 1994  Jeffrey A. Law  (law@mole.gnu.ai.mit.edu)

	* pa.c (output_call): When emitting an inline long-call, use LP%
	and RP% prefixes to get the function's address.

Sun Nov 20 07:00:25 1994  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* Makefile.in (objc-parse.y): Fix typo.

	* t-svr3: Deleted.
	* t-svr4 (EXTRA_PARTS): Deleted.
	* i386/t-crtstuff, i386/t-crtpic: New files.
	* i386/t-svr3dbx (EXTRA_PARTS): Deleted.
	* configure: Replace use of t-svr3 with extra_parts definition.
	Add extra_parts to t-svr4 users; likewise for i386/t-svr3dbx.
	(i386 configurations): Add t-crtstuff if can't build crtstuff.c
	with -fomit-frame-pointer; use t-crtpic if also must build with -fpic.

Sat Nov 19 17:14:54 1994  Jim Wilson  (wilson@cygnus.com)

	* m68k/lb1sf68.asm (addsf3): After using swap for 16 bit rotate,
	branch back only if count still greater than 0.

	* c-typeck.c (build_binary_op): Can shorten shift only if shift count
	is less than size in bits of arg0.
	* expmed.c (expand_shift): Re-enable truncation of immediate shift
	count.

	* mips.c (mips_const_double_ok): Accept VOIDmode not DImode.
	(mips_move_1word): Accept VOIDmode CONST_DOUBLE.

Sat Nov 19 05:36:35 1994  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* alpha.c (print_operand, case 'c', case 'd'): New cases.
	* alpha.md (sign_extend): Disable pattern with explicit SUBREG.
	(cmov): Allow first operand of comparison to be zero, 2nd reg.

	* a29k/unix.h (DEFAULT_PCC_STRUCT_RETURN): Define as 0.
	* a29k/x-unix (CLIB): Remove -lsysv.

Fri Nov 18 22:37:26 1994  Jason Merrill  (jason@phydeaux.cygnus.com)

	* m88k/mot-sysv4.h: Remove, no longer needed.
	* configure: Remove m88k-mot*-sysv4* special case.

	* collect2.c: Make various functions static.

	* sparc/sysv4.h ([CD]TORS_SECTION_ASM_OP): Remove #execinstr.

	* svr4.h, i386/sol2.h, m88k/dgux.h, sparc/sol2.h
	(LINK_SPEC): Pass -z text when -shared or -symbolic.
	* svr4.h (LIBGCC_SPEC): Don't pass -lgcc when -symbolic.

	* crtstuff.c: Fix comments.

Fri Nov 18 22:36:26 1994  Jason Merrill  (jason@phydeaux.cygnus.com)

	* pa/pa-hpux.h (LDD_SUFFIX): Move to pa.h.
	(PARSE_LDD_OUTPUT): Ditto.
	* pa/pa.h: (LDD_SUFFIX): Move from pa-hpux.h.
	(PARSE_LDD_OUTPUT): Ditto.
	(LINK_SPEC): Pass -b if -shared.  Don't pass -u main if -shared.
	* pa/pa1-osf.h: Reduce code duplication.

Fri Nov 18 22:35:26 1994  Jason Merrill  (jason@phydeaux.cygnus.com)

	* Makefile.in (crt{begin,end}.o): Pass $(CRTSTUFF_T_CFLAGS).
	(CRTSTUFF_T_CFLAGS): New variable.

	* svr4.h, m88k/sysv4.h, sparc/sysv4.h (FINI_SECTION_ASM_OP): Define.
	* i386/sol2.h (FORCE_FINI_SECTION_ALIGN): Define to
	FORCE_INIT_SECTION_ALIGN.
	* m88k/dgux.h, m88k/mot-sysv4.h, sparc/sysv4.h
	(INIT_SECTION_PREAMBLE): Remove.
	* svr4.h, sparc/sol2.h (STARTFILE_SPEC): Include crti.o and
        values-X?.o when building a shared lib.
	* svr4.h, i386/sol2.h, sparc/sol2.h (LIB_SPEC): Remove endfiles.
	(ENDFILE_SPEC): Handle endfiles.

	* libgcc2.c (__do_global_dtors): Don't define if
        INIT_SECTION_ASM_OP and OBJECT_FORMAT_ELF.
	(L_[cd]tor_list): Lose unused pieces.

	* crtstuff.c (__[CD]TOR_{LIST,END}__): static if OBJECT_FORMAT_ELF.
	(__do_global_ctors_aux): In .text if OBJECT_FORMAT_ELF.
	(__do_global_dtors_aux): Ditto.
	(init_dummy): Dummy function to stick a call to __do_global_ctors_aux
	into the .init section if OBJECT_FORMAT_ELF.
	(fini_dummy): Similarly.
	Remove reference to INIT_SECTION_PREAMBLE.

	* mips/iris5.h (HAS_INIT_SECTION): Define.
	(LINK_SPEC): Pass -u __main -init __main if not -shared.
	(STARTFILE_SPEC): Don't include these when -shared.
	(LIB_SPEC): Don't include these when -shared.
	(ENDFILE_SPEC): Define.
	(LD_INIT_SWITCH): Define.
	(LD_FINI_SWITCH): Define.

	* alpha/alpha.h (LD_INIT_SWITCH): Define.
	(LD_FINI_SWITCH): Define.
	(INIT_NAME_FORMAT): Lose.
	(FINI_NAME_FORMAT): Lose.

Fri Nov 18 22:34:26 1994  Ronald F. Guilmette (rfg@segfault.us.com)

	* crtstuff.c, svr4.h, i860/sysv4.h, m88k/sysv4.h, sparc/sysv4.h
        (CTORS_SECTION_ASM_OP): Remove @progbits, add SHF_WRITE.
	(DTORS_SECTION_ASM_OP): Ditto.

	* t-svr4, i386/t-sol2, m88k/t-sysv4, sparc/t-sol2
	(CRTSTUFF_T_CFLAGS): Define to -fpic.

Fri Nov 18 22:33:26 1994  Jason Merrill  (jason@phydeaux.cygnus.com)

	* gcc.c (LIBGCC_SPEC): New spec.
	(link_command_spec): Use LIBGCC_SPEC.
	(set_spec): Handle LIBGCC_SPEC.
	(process_command): Ditto.
	(do_spec_1): %G is LIBGCC_SPEC.
	(validate_all_switches): Also validate LIBGCC_SPEC.

	* alpha/alpha.h (LIBGCC_SPEC): Do include libgcc when
        creating a shared library.

Fri Nov 18 22:32:26 1994  Steve Dum  (steve_dum@mentorg.com)

	* collect2.c (SUNOS4_SHARED_LIBRARIES): Support scanning the
        _DYNAMIC field of SunOS 4 shared libraries directly.

Fri Nov 18 22:31:26 1994  Jason Merrill  (jason@phydeaux.cygnus.com)

	* collect2.c (main): For shared libraries, link in stubs even if
	there are no constructors or destructors so that static objects
	can be added without re-linking everything that uses the library.
	(write_c_file_stat): Tweak.

	* configure: Use sunos4.h instead of sparc.h for SunOS 4 targets.

	* sparc/sunos4.h: New file for SunOS 4-specific things.
	(SUNOS4_SHARED_LIBRARIES): Define to 1.
	* sparc/sparc.h: (LINK_SPEC): Support -shared.
	(LIB_SPEC): Ditto.

	* pa/pa-hpux.h (LDD_SUFFIX): New macro.
	(PARSE_LDD_OUTPUT): New macro.
	(LINK_SPEC): Pass -b if -shared.  Don't pass -u	main if -shared.
	(LIB_SPEC): Don't include if -shared.

	* collect2.c (scan_prog_file): Ignore undefined symbols.

Fri Nov 18 22:30:26 1994  Steve Dum (steve_dum@mentorg.com)

	* collect2.c (enum pass): Add PASS_LIB.
	(is_ctor_dtor): Check for shared library constructor and destructor
	functions, too.
	(main): Add o_file after any link libraries, too.
	Create a shared object if COLLECT_GCC_OPTIONS contains -shared.
	Also scan shared libraries for constructors and destructors if
	LDD_SUFFIX is defined.
	(write_c_file_stat): New function to write out file for a shared
	object.
	(write_c_file_glob): Renamed from write_c_file.
	(write_c_file): Calls one of write_c_file_{stat,glob}.
	(scan_prog_file): Update to deal with shared libraries.
	(scan_libraries): New function to scan shared libraries for
	constructors and destructors.

Fri Nov 18 19:16:19 1994  David Edelsohn  (edelsohn@npac.syr.edu)

	* rs6000.c (addrs_ok_for_quad_peep): New function.
	(output_prolog): Use liu mnemonic.
	(registers_ok_for_quad_peep): New function.
	* rs6000.md (peepholes for two DF load/store): New peepholes.

Fri Nov 18 19:10:24 1994  Kresten Krab Thorup  (krab@next.com)

        * objc/object.c (class_create_instance):  Replace memchr
	with memset.

Fri Nov 18 19:06:15 1994  Doug Evans  (dje@cygnus.com)

	* sparc/lite.h: #include "gofast.h"
	(INIT_SUBTARGET_OPTABS): Define.

Fri Nov 18 19:01:51 1994  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>

	* Makefile.in (extraclean): Remove *.ps.

Fri Nov 18 18:53:57 1994  Philippe De Muyter (phdm@info.ucl.ac.be)

	* cccp.c (create_definition): Allow carriage-return ('\r')
	as white space in simple or empty expansion.

Fri Nov 18 18:30:40 1994  Douglas Rupp  (drupp@cs.washington.edu)

	* winnt/ld.c (main): Fix off-by-one error allocating sdbuff.

Fri Nov 18 18:23:54 1994  Mike Collison  (collison@sw.stratus.com)

	* regclass.c (record_reg_classes): For single SET between hard reg
	 alone in a class and pseudo, ensure reg is the only member of class.

Fri Nov 18 15:15:27 1994  Jim Wilson  (wilson@cygnus.com)

	* sol2.h (MD_STARTFILE_PREFIX): Delete.

Fri Nov 18 14:16:04 1994  Chris Huey  (cah@tactix.rain.com)

	* Makefile.in (objc-parse.y, mostlyclean): Rename temp file 
	for objc-parse.y to be under 14 characters.

Thu Nov 17 20:46:15 1994  Doug Evans  <dje@cygnus.com>

	VxWorks support from various people at Cygnus.
	* config.sub: Vendor for vxworks is wrs.
	* configure (i960-wrs-vxworks*): New target.
	(m68k-wrs-vxworks*): New target.
	(sparc-wrs-vxworks*, sparclite-wrs-vxworks*): New targets.
	* i960/t-vxworks960, i960/vx960-coff.h, i960/vx960.h: New files.
	* m68k/t-vxworks68, m68k/vxm68k.h: New files.
	* sparc/t-vxsparc, sparc/vxsparc.h: New files.

	* h8300/h8300.h (DBX_DEBUGGING_INFO): Define.
	(PREFERRED_DEBUGGING_TYPE): Define to SDB_DEBUG.

	* configure (--program-prefix, --program-suffix,
	--program-transform-name, -v, -verbose): New arguments.
	(as): If gas is in build tree, use it.
	(ld, real-ld): Likewise but watch for use_collect.
	(program_transform_name): Update Makefile if
	--program-transform-name given.
	(program_transform_cross_name): Likewise.
	* Makefile.in (program_transform_name): Define.
	(program_transform_cross_name): Define.
	(GCC_INSTALL_NAME, GCC_CROSS_NAME): Define.
	(install-common): Use them.
	(install-man): Likewise.
	(distclean): Delete *.asm.
	(stage*, risky-stage*): If as/ld/real-ld exist, copy them to stage dir.

	Embedded target support from various Cygnus people.
	* config.sub (sparc): Recognize as a cpu.
	(ecoff*, vsta, udi): Recognize as os's.
	(udi29k): New alias.
	* configure: (a29k-*-udi): New target.
	(i[345]86-*-aout*): New target.
	(i[345]86-*-coff*): New target.
	(i[345]86-*-vsta): New target.
	(m68k-*-aout*): New target.
	(m68k-*-coff*): New target.
	(m88k-*-aout*): New target.
	(m88k-*-coff*): New target.
	(mipsel-*-ecoff*): New target.
	(mips-*-ecoff*): New target.
	(mipsel-*-elf*): New target.
	(mips-*-elf*): New target.
	(mips64el-*-elf*): New target.
	(mips64orionel-*-elf*): New target.
	(mips64-*-elf*): New target.
	(mips64orion-*-elf*): New target.
	(sparc-*-aout*): New target.
	(sparclite-*-coff*): New target.
	(sparclite-*-*): Set tmake_file to sparc/t-sparclite.
	(mips*-*-*): Changed from mips-*-*.
	* optabs.c (expand_unop): Try subtraction from zero if there isn't a
	negate library function.
	* config/gofast.h: New file.
	* a29k/a29k-udi.h, a29k/t-a29kbare: New files.
	* i386/i386-aout.h, i386/i386-coff.h, i386/t-i386bare: New files.
	* i386/vsta.h, i386/t-vsta, i386/x-vsta, i386/xm-vsta.h: New files.
	* m68k/coff.h: New file (renamed from m68k-coff.h).
	* m68k/lynx-ng.h, m68k/lynx.h: Include it.
	* m68k/fpgnulib.c, m68k/lb1sf68.asm, m68k/m68kemb.h: New files.
	* m68k/m68k-aout.h, m68k/m68k-coff.h, m68k/m68k-none.h: New files.
	* m68k/t-m68kbare: New file.
	* m88k/m88k-aout.h, m88k/m88k-coff.h, m88k/t-bug: New files.
	* mips/ecoff-gdb.h, mips/ecoff.h, mips/ecoffl-gdb.h: New files.
	* mips/ecoffl.h, mips/elf.h, mips/elf64.h, mips/elfl.h: New files.
	* mips/elfl64.h, mips/elflorion.h, mips/elforion.h: New files.
	* mips/t-ecoff: New files.
	* sparc/lb1spc.asm, sparc/lb1spl.asm, sparc/litecoff.h: New files.
	* sparc/sparc-aout.h, sparc/t-sparcbare, sparc/t-sparclite: New files.

Thu Nov 17 18:32:24 1994  Torbjorn Granlund  (tege@tiny.cygnus.com)

	* cse.c (simplify_binary_operation): Do (x - (x & y)) -> (x & ~y).

Thu Nov 17 17:26:02 1994  Mark P. Gooderum  (mark@good.com)

	* stddef.h: Include <machine/ansi.h> on NetBSD.
	Check for _BSD_XXX_T_ as well as _XXX_T_.
	Add _BSD_XXX_T_ to list of defines to check and define for a given
	type for SIZE_T, PTRDIFF_T, and WCHAR_T.

Thu Nov 17 11:11:50 1994  Mike Collison  (collison@sw.stratus.com)

	* dsp16xx.c (notice_update_cc): Removed reference to obsolete LSHIFT.
	* dsp16xx.h (RTX_COSTS): Likewise.

Thu Nov 17 11:06:43 1994  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* alpha.c (some_operand): New function.
	* alpha.h (PREDICATE_CODES): Add `some_operand'.
	* alpha.md (addsi3, adddi3): For patterns valid only
	during reload, allow operand 1 to be `some_operand'.

	* flow.c (find_auto_inc): Insert missing "return" statement.

	* c-common.c (print_char_table): Allow `L' for `u'.

Thu Nov 17 10:15:50 1994  Richard Stallman  <rms@mole.gnu.ai.mit.edu>

	* config.sub: Accept -domain as OS, and make it default for Apollo.

Wed Nov 16 19:28:46 1994  Jim Wilson  (wilson@chestnut.cygnus.com)

	* loop.c (move_movables): For move_insn case, skip notes when deleting
	instructions.

Wed Nov 16 16:13:48 1994  Ian Lance Taylor  (ian@cygnus.com)

	* bi-run.h: Always check BITS_BIG_ENDIAN, BYTES_BIG_ENDIAN, and
	WORDS_BIG_ENDIAN at run time, never at compile time.
	* bytecode.h, combine.c, cse.c, dbxout.c, dwarfout.c: Likewise.
	* expmed.c, expr.h, final.c, fold-const.c, function.c: Likewise.
	* jump.c, objc-act.c, real.c, real.h, recog.c, reload.c: Likewise.
	* reload1.c, sdbout.c, tree.c, varasm.c: Likewise.
	* real.c: Replace uses of MIEEE and IBMPC with a compile time
	check of IEEE and a runtime check of FLOAT_WORDS_BIG_ENDIAN.
	* libgcc.2 (LIBGCC2_WORDS_BIG_ENDIAN): If not defined, define to
	WORDS_BIG_ENDIAN.  Use it instead of WORDS_BIG_ENDIAN.
	* mips-tfile.c (init_file): Initialize fBigendian field based on
	HOST_WORDS_BIG_ENDIAN, not BYTES_BIG_ENDIAN.
	* config/mips/mips.h (MASK_BIG_ENDIAN): Define, replacing
	MASK_UNUSED4.
	(TARGET_BIG_ENDIAN): Define.
	(TARGET_SWITCHES): Add eb and el.  Include TARGET_ENDIAN_DEFAULT
	in default value.
	(TARGET_ENDIAN_DEFAULT): Define if not defined, based on
	DECSTATION.
	(CC1_SPEC): Convert -EB to -meb, convert -EL to -mel, and warn if
	-EB and -EL are both used.
	(CPP_SPEC): If -EB is seen, undefine MIPSEL, _MIPSEL, __MIPSEL and
	__MIPSEL__, and define _MIPSEB, __MIPSEB, __MIPSEB__ and MIPSEB
	(the last only if -ansi was not seen).  Similarly if -EL is seen.
	(REAL_ARITHMETIC): Define.
	(BYTES_BIG_ENDIAN, WORDS_BIG_ENDIAN): Base on TARGET_BIG_ENDIAN.
	(LIBGCC2_WORDS_BIG_ENDIAN): Define.
	(CONST_COSTS): Use split_double in CONST_DOUBLE case.
	* config/mips/mips.c (mips_move_2words): Use split_double rather
	than CONST_DOUBLE_LOW and CONST_DOUBLE_HIGH.
	(output_block_move): Check BYTES_BIG_ENDIAN at run time, not
	compile time.
	(print_operand): Check WORDS_BIG_ENDIAN, rather than using
	MOST_SIGNIFICANT_WORD and LEAST_SIGNIFICANT_WORD.
	* config/mips/t-mips (MULTILIB_OPTIONS, MULTILIB_DIRNAMES,
	MULTILIB_MATCHES, LIBGCC, INSTALL_LIBGCC): Define to build both
	big and little endian versions of libgcc.a.
	* config/mips/t-mips-gas: LIkewise.
	* config/mips/dec-bsd.h (CPP_SPEC): Same change as in mips.h.
	* config/mips/dec-osf1.h (CPP_SPEC): Likewise.
	* config/mips/iris3.h (CPP_SPEC): Likewise.
	* config/mips/iris5.h (CPP_SPEC): Likewise.
	* config/mips/osfrose.h (CPP_SPEC): Likewise.
	(CC1_SPEC): Same change as in mips.h.

Wed Nov 16 16:04:21 1994  Paul Eggert  <eggert@twinsun.com>

	* cccp.c (rescan): Remove unnecessary comparisons of ibp to limit.

Wed Nov 16 07:48:17 1994  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* regclass.c (record_reg_classes): Handle case of single SET
	between a hard register alone in a class and a pseudo.

	* tree.c (integer_{zero,one,all_ones,pow2}p): Handle COMPLEX_CST.
	(real_{zero,one,two}p): Likewise.

	* gcc.c (main): For -V output, give both driver and compiler
	versions, if they differ.

	* toplev.c (rest_of_compilation): Always rerun jump_optimize
	after CSE if -O2.

	* fold-const.c (fold): If moved conversion into COND_EXPR,
	leave it there if it is an integral conversion to word or narrower.
	(fold, case NOP_EXPR): Ignore conversion to same type as operand.
	(fold, case COND_EXPR): Make third operand the simplest.

	* expr.c (convert_move): Don't put FROM in a register if it
	is a SUBREG.
	(store_expr): If don't want a value and storing into promoted
	variable, do conversion at tree level; don't copy volatile MEM
	unless want value, as comment says.

Tue Nov 15 20:02:34 1994  Doug Evans  (dje@cygnus.com)

	* varasm.c (named_section): New argument decl, all callers changed.
	* h8300/h8300.h, sh/sh.h, sparc/sysv4.h (ASM_OUTPUT_SECTION_NAME):
	New arg DECL.

Mon Nov 14 15:07:19 1994  Jason Merrill  <jason@phydeaux.cygnus.com>

        * tree.h (POINTER_TYPE_P): New macro.
        * m68k/m68kv4.h, m68k/mot3300.h (FUNCTION_VALUE): Use
        POINTER_TYPE_P rather than checking the type against
        POINTER_TYPE (to include references).
        * function.c (init_function_start): Ditto.

        * alpha/alpha.h (FUNCTION_VALUE): Use INTEGRAL_MODE_P rather than
        checking the type against various integral and pointer types.

        * m68k/{3b1,3b1g,crds,mot3300}.h: Don't define __PTR_TO_INT and
        __INT_TO_PTR.
        * m68k/xm-{3b1,crds,mot3300}.h: Define __PTR_TO_INT and __INT_TO_PTR.

Tue Nov 15 19:29:04 1994  Per Bothner  <bothner@kalessin.cygnus.com>

	* tree.c (staticp):  A non-nested function is always static.

Tue Nov 15 19:12:03 1994  Jim Meyering  (meyering@comco.com)

	* Makefile.in (specs, float.h-cross, xlimits.h): Use temporary instead
	of redirecting output directly to make target.
	($(MD_FILE), xsys-protos.h): Likewise.
	(mostlyclean): Remove any of these temporaries.
	(libgcc2.a): Add missing semicolon in commented code that could cause
	a /bin/sh syntax error if uncommented.

Tue Nov 15 19:07:00 1994  Warner Losh  (imp@village.org)
  
        * i386/freebsd.h (NO_IMPLICIT_EXTERN_C): Define.

Tue Nov 15 19:00:55 1994  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>

	* reorg.c (redundant_insn): Renamed from redundant_insn_p; all
        callers changed.

Tue Nov 15 18:57:46 1994  Jim Wilson  (wilson@chestnut.cygnus.com)

	* reorg.c (relax_delay_slots): When invert a conditional jump over a
	single unconditional jump, invert the INSN_FROM_TARGET_P bit of insns
	in the delay slots.

	* reorg.c (redundant_insn_p): Change return type to rtx.  Return the
	redundant insn instead of true.
	(update_reg_unused_notes): New function.
	(fill_slots_from_thread): Call update_reg_unused_notes after one of
	the redundant_insn_p calls.

Tue Nov 15 18:39:33 1994  Torbjorn Granlund  (tege@tiny.cygnus.com)

	* expmed.c (expand_divmod, case ROUND_DIV_EXPR): Implement.
	* expr.c (do_jump_by_parts_greater_rtx): No longer static.
	(expand_expr): Delete code for plain `abs'.
	* optabs.c (expand_abs): New function, code moved from expand_expr.
	* expr.h: Declare expand_abs.

Tue Nov 15 12:11:26 1994  Jeffrey A. Law  (law@mole.gnu.ai.mit.edu)

	* pa.c (output_cbranch): Improve code for short backwards branch
	with an unfilled delay slot.
	(output_bb, output_dbra, output_movb): Likewise.

Tue Nov 15 09:55:31 1994  Doug Evans  (dje@cygnus.com)

	* jump.c (delete_insn): Delete labels in ADDR_VECs and
	ADDR_DIFF_VECs if their use count becomes zero.
	* flow.c (flow_delete_insn): New function.
	(find_basic_blocks): Call it to physically delete insns in
	unreachable blocks.  When scanning blocks after dead ones,
	start scanning after the dead one (not at the dead one).
	If there are lots of unreachable blocks, make another pass to squeeze
	them out (this reduces memory usage in some pathalogical cases by a
	significant amount without resorting to sparse matrices).
	(propagate_block): Make code a bit more efficient (for example,
	no need to test `loop_depth' for each insn, just notes).

Tue Nov 15 09:42:31 1994  Lynn Shumaker  (shumaker@saifr00.ateng.az.honeywell.com)

	* function.c (assign_stack_temp): Compute size of slot after
	assign_stack_local has accounted for alignment.

Mon Nov 14 23:47:20 1994  Torbjorn Granlund  (tege@tiny.cygnus.com)

	* pa.h (GO_IF_LEGITIMATE_ADDRESS): Allow
	(lo_sum (reg) (unspec (symref))).

	* pa.md (pic2_lo_sum): New pattern matching when -fPIC using UNSPEC.
	* pa.c (legitimize_pic_address): Generate an insn matching
	pic2_lo_sum when -fPIC.

	* pa.md (pic_highpart): Add missing mode for PLUS.
	(add_high_const): Likewise.

	* pa.md (matcher for plain lo_sum): Call abort if this happens
	when generating pic or PIC.

Mon Nov 14 23:47:20 1994  Jeffrey A. Law  (snake.cs.utah.edu)

	* Automatic generation of inline long call sequences when needed.
	* pa.h (TARGET_LONG_CALLS): Delete.  Replace all uses of with
	TARGET_PORTABLE_RUNTIME.
	(TARGET_MILLICODE_LONG_CALLS): New target flag.
	* pa.c (output_function_prologue): Keep track of the total number
	of code bytes emitted for each source file.
	(output_call): Handle TARGET_PORTABLE_RUNTIME and millicode calls
	for TARGET_MILLICODE_LONG_CALLS.  Emit an inline long-call if
	needed.  If emitting an inline long-call, perform argument relocations
	before the call if they are needed, unfill the delay slot of the
	call if necessary.
	* pa.md (define_delay for millicode): Disable the delay slot if
	TARGET_MILLICODE_LONG_CALLS.
	(millicode insns and indirect calls): Properly compute length for 
	both TARGET_PORTABLE_RUNTIME and TARGET_MILLICODE_LONG_CALLS.
	(call_internal_symref): Properly compute the length when more
	than 240000 bytes of code have already been output.  Take 
	TARGET_MILLICODE_LONG_CALLS into account in the length
	computation.

	* pa.h (DBX_OUTPUT_MAIN_SOURCE_FILE_END): Define.
	(ASM_FILE_END): Delete unneeded definition.

	* Fast indirect call support.
	* pa.h (TARGET_FAST_INDIRECT_CALLS): New target switch.
	(TARGET_SWITCHES): Add "fast-indirect-calls" and inverse.
	* pa.md (call_internal_reg, call_value_internal_reg): Generate
	appropriate code for TARGET_FAST_INDIRECT_CALLS.
			  
	* PA PIC support.
	* pa.c (secondary_reload_class): Refine.  Readonly data needs a
	secondary reload only during PIC generation.  Loading a floating
	point register with a constant requires a register from R1_REGS
	during -fPIC code generation.
	(read_only_operand): Constant pool entries are no longer read only
	during PIC code generation.
	(hppa_legitimize_address): If flag_pic is nonzero, then
	immediately call legitimize_pic_address.
	(emit_move_sequence): Call legitimize_pic_address to handle
	constant data.  Handle secondary reloads for PIC.  Use
	pic_label_operand rather than open coding the test.  Handle
	loading a LABEL_REF when generating PIC.
	(legitimzie_pic_address): Handle constant data addressing for PIC
	here.   Fix loading of symbolic addresses for -fPIC generation.
	(pic_label_operand): Renamed from pic_operand.  Handle any read
	only operand (such as constant data).  Reject function addresses,
	Accept SYMBOL_REF with the read-only bit set.  Generalize to
	handle (const (plus (reg) (int))).
	(finalize_pic): Delete unused function.
	(check_pic): Delete function.
	(pic_pc_rtx): Delete variable definition.
	(current_function_uses_pic_offset_table): Delete extern decl.
	(force_reg, validize_mem): Likewise.
        (output_global_address): Don't tack on "-$global$" when generating
        PIC code.
	(finalize_pic): Don't emit code for initialization of 
	hppa_save_pic_table_rtx here.  Don't claim we USE
	pic_offset_table_rtx at function end.
	* pa.h (SELECT_RTX_SECTION): Define.  During PIC generation
	everything (in the constant pool) goes into the data space.
	(PRINT_OPERAND_ADDRESS): Handle CONST_INTs during PIC
	generation.  Handle LO_SUM address during -fPIC generation.
	(LEGITIMATE_CONSTANT_P): Reject function labels when generating
	PIC code.
	(GO_IF_LEGITIMATE_ADDRESS): Only accept pic_reg + SYMBOL_REF for
	-fpic.
	(EXTRA_SECTION_FUNCTIONS): For -fpic, use the TEXT section for
	constants to avoid GAS lossage.
	(OVERRIDE_OPTIONS): Delete.
	(PIC_OFFSET_TABLE_REG_CALL_CLOBBERED): Define.
	(FINALIZE_PIC): Delete definition.
	(INIT_EXPANDERS): Define.  Clear hppa_save_pic_table_rtx here.
	* pa.md: Use !flag_pic rather than calling check_pic.
	(HImode high and lo_sum): Only accept const_int_operands.
	(pic_load_label): Force output to be in %r1. 
	(pic_highpart): New pattern.  Output must go into %r1.  More
	linker trickery.
	(symbolic high and lo_sum): Disallow during PIC	generation if
	source is a symbolic operand.  Handle CONST_INT LO_SUM during PIC
	generation.  Simplify.
	(define_split for symbolic_operand load): Do not accept a symbolic
	operand that is a pic_label_operand.
	(pic_load_label): Name this pattern.  Mask least significant bits
	and optimize when a simple label is within reach of an ldo.
	(call, call_value): Emit new-style USE information for
	pic_offset_table_rtx.  Emit code for initialization of
	hppa_save_pic_table_rtx and wrap it into push_topmost_sequence()
	and pop_topmost_sequence() calls. 

	* Various PA configuration cleanups.  
	* configure (hppa*-*-h[pi]ux): Use xm-pahpux.h and x-pa-hpux instead
	of the redundant hiux files.  Likewise for t-pa instead of t-pa-hpux.
	* config/pa/xm-pahiux.h: Delete.  It's identical to xm-pahpux.h.
	* config/pa/x-pa-hiux: Delete.  It's idential to x-pa-hpux.
	* config/pa/x-pa (TAROUTOPTS): Delete.  It was an HPUX host
	conditional, and x-pa is a BSD host target fragment.
	(INSTALL_HEADERS): Define.
	(STMP_FIXPROTO): Define.
	* config/pa/t-pa (INSTALLED_H): Delete.
	* config/pa/t-pa-hpux: Delete, it's identical to t-pa.
	* config/pa/pa-hiux.h: Include "pa/pa-hpux.h" and just override
	the CPP predefines.
	(CPP_PREDEFINES): Add -A assertions.
	* config/pa/{pa1-hiux.h, pa-ghiux.h, pa1-ghiux.h}: Likewise.
	* config/pa/pa-ghpux.h: Simplify by including pa-hpux.h.
	(DBX_DEBUGGING_INFO): Define.
	(DEFAULT_GDB_EXTENSIONS): Define.

Mon Nov 14 19:16:00 1994  Dennis Glatting  <war04!dennisg@kerby.ocsg.com>

	* fixincludes: Fixes for NextStep 3.2.  Remove ``__const__'' from
	sin and cos prototypes in ansi/math.h.  Remove keyword ``template''
	from bfd/libc.h.  Remove ``volatile'' from abort in bsd/libc.h
	and abort and exit in ansi/stdlib.h.

Mon Nov 14 18:54:28 1994  Douglas Rupp  (drupp@cs.washington.edu)

	* i386/x-winnt (EXTRA_PROGRAM): Match target name.

Mon Nov 14 18:48:21 1994  Torbjorn Granlund  (tege@tiny.cygnus.com)

	* freebsd.h (INCLUDE_DEFAULTS): Move definition beyond
	FREEBSD_NATIVE conditional.
	(FUNCTION_PROFILER): Move down to make file more similar to
	netbsd-i386.h.
	(DEFAULT_TARGET_MACHINE, etc): Comment our this braindamage!

Mon Nov 14 18:46:18 1994  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* calls.c (expand_call): If IS_CONST and VALREG == 0, end our
	sequence and emit the insns.

Sat Nov 12 06:35:42 1994  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>

	* Version 2.6.2 released.

Sat Nov 12 06:35:21 1994  Torbjorn Granlund  (tege@cygnus.com)

	* expmed.c (expand_divmod, case TRUNC_DIV_EXPR): Promote signed
	division by 0x80000000 to unsigned.

Fri Nov 11 17:07:35 1994  Michael Meissner  (meissner@osf.org)

	* c-common.c (decl_attributes): Add double-underscore version of
	printf and scanf for format type.

Fri Nov 11 16:38:04 1994  Jim Wilson  (wilson@chestnut.cygnus.com)

	* mips-tdump.c: Include <time.h>.  Delete ctime prototype.

Fri Nov 11 14:16:00 1994  Holger Teutsch  <holger@hotbso.rhein-main.de>

	* clipper.md (movsi+1): Allow r->m move during reloading.

Fri Nov 11 12:40:51 1994  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>

	* c-decl.c (duplicate_decls): Properly merge decls with
	differing DECL_CONTEXT.

	* function.c (preserve_rtl_expr_result): find_temp_slot_from_address
	now used.
	Don't bring the temp slot to an inner level than it was.	
	(assign_stack_temp): Always initialize p->rtl_expr.

	* m68k/mot3300g.h (SPACE_AFTER_L_OPTION): Deleted.

Thu Nov 10 18:50:52 1994  Kresten Krab Thorup (krab@next.com)

	* objc/list.h: Add ifndef/define for repeated inclusion.

Thu Nov 10 18:02:58 1994  Michael Meissner  <meissner@pasta.osf.org>

	* c-common.c (decl_attributes): Check for attributes with leading
	and trailing double underscores.

Thu Nov 10 17:55:07 1994  Chris Metcalf  (metcalf@catfish.lcs.mit.edu)

	* fixincludes: Make argument type const for popen and tempnam in
	stdio.h and for strdup in string.h, for OSF/1 V3.0.

	* va-alpha.h (va_arg): Add cast to void * to suppress warning.

Thu Nov 10 17:48:21 1994  Walter Misar  (hrz.th-darmstadt.de)

	* m68k/hp320.h (FUNCTION_{PRO,EPI}LOGUE): Don't define.
	(IMMEDIATE_PREFIX, REGISTER_PREFIX): Define.

Thu Nov 10 15:04:57 1994  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* m68k/crds.h (FUNCTION_{PRO,EPI}LOGUE): Add code to adjust stack
	when no frame pointer.
	* m68k.c (output_function_epilogue): Use a1 as scratch, not a0.
	* m68k/tower-as.h (FUNCTION_{PRO,EPI}LOGUE): No longer defined.
	(FUNCTION_EXTRA_EPILOGUE): Define.
	* m68k/tower.h (REGISTER_PREFIX, IMMEDIATE_PREFIX): Define.

	* i386/x-sco, i386/x-sco4 (CLIB): Add -lPW.
	(ALLOCA): Delete.

	* c-common.c ({print,scan}_char_table): Allow `L' modifier
	for integer output formats.
	(check_format_info): Treat `ll' like `q'.

	* rs6000.md (movsi): In TOC symbol case, use "la" for PowerPC.
	(movdi): Handle TOC symbol just like movsi.

	* objc-act.c (init_objc): Add missing casts to args of bcopy.
	(lang_init): Ensure line number is 0, not -1.

Tue Nov  8 07:51:53 1994  Paul Eggert  <eggert@twinsun.com>

	* cccp.c (dump_single_macro, dump_defn_1): If -traditional,
	dump macros in traditional style.  This also avoids a bogus error
	message if the macro uses traditional stringizing.

Mon Nov  7 21:28:13 1994  Michael I Bushnell  <mib@geech.gnu.ai.mit.edu>

	* protoize.c [!POSIX]: Only define O_RDONLY and O_WRONLY if not
	already defined.

Mon Nov  7 19:33:31 1994  Jim Wilson  (wilson@mole.gnu.ai.mit.edu)

	* combine.c (try_combine): Update split_code after converting MULT
	to ASHIFT.

Mon Nov  7 12:26:24 1994  Torbjorn Granlund  <tege@cygnus.com>

	* rs6000.md (DImode load-with-update matcher): Fix typo in MEM mode.
	(compare patterns): Fix several typos, SImode => CCmode.
	* sh.md (subdi3): Delete % from constraints.
	* 1750a.md (subqi3): Likewise.
	* clipper.md (subdi3): Likewise.
	* i370.md (subqi3): Likewise.
	(anonymous subqi3 matcher): Likewise.
	* i860.md (subdi3): Likewise.
	* dsp16xx.md (mulqi3): Fix typo in MULT mode.
	* elxsi.md (one_cmplsi2): Fix typo in NOT mode.

Mon Nov  7 12:47:37 1994  Ian Lance Taylor  <ian@cygnus.com>

	* m68kv4.h (ASM_IDENTIFY_GCC): Use proper definition for SGS assembler.

Mon Nov  7 11:02:25 1994  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* gcc.c (process_command): Ignore LIBRARY_PATH and LPATH if
	cross-compiler.

Sun Nov  6 07:23:37 1994  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* cross-test.c (foo): Return value for BU in range for shifts.

Sat Nov  5 14:25:36 1994  Jim Wilson  (wilson@chestnut.cygnus.com)

	* m68k.h (PREFERRED_RELOAD_CLASS): FP constants rejected by 'G'
	are OK for class FP_REGS.

Sat Nov  5 14:08:31 1994  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* calls.c (store_one_arg): Preserve any temp slots whose address
	may have been taken.

	* real.c (GET_REAL, PUT_REAL): Cast args to bcopy to char *.
	* reload1.c (reload): Likewise.
	* i386.c ({save,restore}_386_machine_status): Likewise.
	* reg-stack.c (subst_asm_stack_regs): Likewise.
	(BLOCK_NUM): Rework to avoid cast of abort to int *.
	(find_blocks): Don't use BLOCK_NUM on lhs.
	(reg_to_stack, record_arg_reg_life): Cast arg to bzero to char *.

Sat Nov  5 08:29:45 1994  Paul Eggert  <eggert@twinsun.com>

	* cccp.c (rescan): Do not preserve newlines after macro name
	if rescanning a macro expansion.  Instead, preserve them if
	not outputting marks.

Fri Nov  4 17:25:29 1994  John David Anglin  (dave@hiauly1.hia.nrc.ca)

	* vax.c: Include tree.h and VMS-specific functions #ifdef VMS_TARGET.
	* vms.h (VMS_TARGET): Define.	

Fri Nov  4 17:19:30 1994  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* bi-arity.c (main): Cast enum to char in output.
	* bc-emit.c (bc_emit_bytecode): Add missing cast.

Thu Nov  3 14:17:22 1994  Mike Stump  <mrs@cygnus.com>

	* libgcc2.c (__register_exceptions): Find max ending of a segment for
	end, not min.
	* libgcc2.c (__unwind_function): New function to support stack
	unwinding on i[34]86 for g++ exception handling.

Thu Nov  3 18:55:42 1994  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* Makefile.in (c-parse.o, c-lex.o): c-parse.h is in $(srcdir).

Thu Nov  3 18:11:56 1994  John F Carr  (jfc@mit.edu)

	* rs6000.md (movsi): New alternative for SYMBOL_REF source operand.
	* rs6000.c (print_operand): New code '*' to print TOC register number.
	* rs6000.h (EXTRA_CONSTRAINT): 'R' matches a SYMBOL_REF for TOC entry.
	(PRINT_OPERAND_PUNCT_VALID_P): Recognize '*'.
	(PREDICATE_CODES): input_operand can now match SYMBOL_REF.

Thu Nov  3 18:03:24 1994  Jason Merrill  (jason@phydeaux.cygnus.com)

	* cccp.c: TOOL_INCLUDE_DIR is not C++-aware.

Thu Nov  3 17:23:30 1994  Jim Wilson  (wilson@chestnut.cygnus.com)

	* mips.c (mips_output_external): Exclude alloca from list of
	used external functions.

Tue Nov  1 19:19:41 1994  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* Version 2.6.1 released.

Tue Nov  1 18:51:00 1994  Torbjorn Granlund  (tege@cygnus.com)

	* pa.md (add_high_const): Add missing mode for PLUS.

Tue Nov  1 18:39:53 1994  Stephen L Moshier  (moshier@world.std.com)

	* cse.c (simplify_unary_operation, case TRUNCATE): Set LV and HV.

Tue Nov  1 18:36:23 1994  Pat Rankin  (rankin@eql.caltech.edu)

	* vax.c (struct extern_list): Put code back outside of #ifdef VMS.
	(vms_check_external, vms_flush_pending_externals): Likewise.

Mon Oct 31 16:18:12 1994  Michael Meissner  <meissner@pasta.osf.org>

	* i386/i386.md (movsf, movdf, movxf): If we are moving floating
	point constants to a non-memory location that aren't 0 or 1,
	assume we need the pic register if -fpic.

Mon Oct 31 13:26:45 1994  Jim Wilson  (wilson@mole.gnu.ai.mit.edu)

	* sparc.h (GO_IF_LEGITIMATE_ADDRESS): Don't allow TFmode LO_SUM.
	* sparc.md (movtf+3): Disable pattern.

Mon Oct 31 08:11:47 1994  Doug Evans  <dje@canuck.cygnus.com>

	* expr.c (expand_expr, COND_EXPR case): Don't use original target as
	a temp if it's a volatile mem ref.  Finish previous patch (don't
	expand "X ? A & 1 : A" as "A & (X != 0)").

Mon Oct 31 08:07:09 1994  Pat Rankin  (rankin@eql.caltech.edu)

	* vax.c: Include tree.h #ifdef VMS.
	(struct extern_list): Move inside #ifdef VMS; add SIZE and IN_CONST
	fields; make `extern_head' static; add second list head.
	(vms_check_external): Move inside #ifdef VMS; give new args; maintain
	list of both pending external symbols and previously defined ones.
	(vms_flush_pending_externals): New function.
	* vax/vms.h (ASM_GLOBALIZE_LABEL): Pass new args to vms_check_external.
	(ASM_OUTPUT_EXTERNAL): Just call vms_check_external.
	(ASM_{,FINISH_}DECLARE_OBJECT_NAME, ASM_FILE_END): Define.

Mon Oct 31 08:00:59 1994  Michael Gschwind  (mike@vlsivie.tuwien.ac.at)

	* pdp11.h (TARGET_SWITCHES): Add -split and -no-split.
	(TARGET_SPLIT, TARGET_NOSPLIT): New macros.
	(TRAMPOLINE_TEMPLATE, INITIALIZE_TRAMPOLINE): Abort if -split.

Mon Oct 31 07:53:34 1994  Warner Losh  <imp@village.org>

	* i386/x-freebsd (CLIB): Add definition.

Mon Oct 31 07:49:17 1994  Jeffrey A Law  <law@snake.cs.utah.edu>

	* reorg.c (mark_set_resources): Properly handle SUBREGs.

Mon Oct 31 07:24:32 1994  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* expr.c (expand_expr, case COMPONENT_REF): Don't extract
	field from a CONSTRUCTOR if it already has a TREE_CST_RTL.
	(expand_expr, case ADDR_EXPR): Call mark_temp_addr_taken
	on the temporary made when operand needs to be stored into memory.
	* function.c (preserve_temp_slots): Preserve anything whose
	address was taken when X is zero.

Sun Oct 30 15:11:51 1994  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>

	* msdos/top.sed, i386/config-nt.sed: Update version to 2.6.1.
	* pa/t-pa-hpux: Add missing newline at end.

Sat Oct 29 21:16:29 1994  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* emit-rtl.c (operand_subword): Fix typo: HOST_BITS_PER_INT
	should be HOST_BITS_PER_WIDE_INT.

Fri Oct 28 19:13:13 1994  Andrew McCallum  (mccallum@vein.cs.rochester.edu)

	* objc/misc.c (__objc_xcalloc):  Use calloc instead malloc/bzero.

Fri Oct 28 19:07:53 1994  Michael Gschwind  (mike@vlsivie.tuwien.ac.at)

	* pdp11.h (TRAMPOLINE_SIZE): Install real implementation.
	(INITIALIZE_TRAMPOLINE, TRAMPOLINE_TEMPLATE): Likewise.

Fri Oct 28 19:01:27 1994  Craig Burley  (burley@gnu.ai.mit.edu)

	* Makefile.in (stage?-start): Add semicolon between fi and done.
  
Fri Oct 28 17:12:26 1994  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* cse.c (cse_insn): Don't record a DEST if paradoxical SUBREG
	and SRC is a SIGN_EXTEND or ZERO_EXTEND.

	* alpha.md (reload_outqi): Correctly handle scratch assignments
	for unaligned case when ADDR is a REG.

Fri Oct 28 07:55:40 1994  Michael Meissner  (meissner@osf.org)

	* i386/i386.md (adddi3): Fixup code in case operands[0] is equal
	to operands[2].

Thu Oct 27 18:58:39 1994  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* reload1.c (count_possible_groups): Fix typo in setting
	counted_for_groups.

Thu Oct 27 15:30:41 1994  Per Bothner  <bothner@kalessin.cygnus.com>

	* c-typeck.c (process_init_element):  In the case of
	[LO .. HI] = VALUE, use save_expr to only evaluate VALUE once.

Thu Oct 27 15:15:25 1994  Torbjorn Granlund  (tege@rtl.cygnus.com)

	* gcc.c (process_command): Don't forget to split -Wl arguments at
	commas.

	* gcc.c (process_command): Handle -Wl, and -Xlinker similar to -l,
	i.e., preserve their order with respect to linker input files.

Thu Oct 27 13:11:16 1994  Douglas Rupp  (drupp@cs.washington.edu)

	* configure (i[345]86-*-winnt3*): Allow any version 3.x.
	Don't use a t-winnt file and move x-winnt to config/i386.
	* i386/x-winnt: Build ld-winnt.exe only on host.
	* winnt/t-winnt: Deleted.

Thu Oct 27 13:05:16 1994  Mike Collison  (collison@chianti.sw.stratus.com)

	* reload.c (debug_reload): New function to print reload info
	set up by find_reloads.

Wed Oct 26 18:27:03 1994  David Mosberger-Tang  <davidm@piston.cs.arizona.edu>

	* alpha.h (FUNCTION_PROFILER): Use $28 instead of $27.
	(LINK_SPEC): Pass -pg to linker.
	(LIB_SPEC): Link in -lprof1 with -pg, not -lprof2.
	(STARTFILE_SPEC): USe gcrt0.o if -pg, not mcrt0.o.

Wed Oct 26 18:22:34 1994  Doug Evans  (dje@cygnus.com)

	* expr.c (expand_expr, COND_EXPR case): Don't expand
	"X ? A & 1 : A" as "A & (X != 0)".

Wed Oct 26 18:06:52 1994  Douglas Rupp  (drupp@cs.washington.edu)

	* winnt/ld.c (expand_lib, main): Fix off-by-one bugs in several
	calls to malloc.

Wed Oct 26 22:00:09 1994  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>

	* winnt/t-winnt: Remove some spurious blank lines.

Wed Oct 26 14:14:39 1994  Michael Meissner  (meissner@osf.org)

	* i386/osfrose.h (REAL_NM_FILE_NAME): Use /usr/ccs/gcc/bfd-nm
	instead of /usr/ccs/bin/nm, since the GNU nm does not output stab
	symbols by default.

Wed Oct 26 13:47:06 1994  Michael Gschwind  (mike@vlsivie.tuwien.ac.at)

	* config.sub (pdp11): New machine name.
	* configure (pdp11-*-*): New configuration.
	* pdp11.c, pdp11.h, pdp11.md, xm-pdp11.h: New files.

Wed Oct 26 07:33:40 1994  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* flow.c (find_basic_blocks): Ensure each live basic block is
	actually reachable.
	(life_analysis): Clean up handling of basic_block_drops_in.

Tue Oct 25 18:40:12 1994  Paul Eggert  <eggert@twinsun.com>

	* cccp.c (rescan): ".." no longer terminates a preprocessing
	number, since that's incompatible with the C standard.

Tue Oct 25 16:16:40 1994  Michael Dobson  (dobson@info.usuhs.mil)

	* we32k.h (CPP_PREDEFINES): Define u3b2, not u3b.

Tue Oct 25 16:15:27 1994  Jim Wilson  (wilson@cygnus.com)

	* reorg.c (fill_slots_from_thread): Update THREAD if it is split.

Mon Oct 24 00:12:46 1994  Jason Merrill  (jason@phydeaux.cygnus.com)

	* toplev.c (lang_options): Add -f{no-,}access-control.

Mon Oct 24 06:14:03 1994  Richard Earnshaw (rwe@pegasus.esprit.ec.org)

	* arm/arm.md (peepholes for call followed by branch): Disable.

Sun Oct 23 08:54:27 1994  Richard Earnshaw (rwe@pegasus.esprit.ec.org)

	* arm/x-riscix (INSTALL): Invoke install.sh with -c flag.

Fri Oct 21 00:42:08 1994  Jason Merrill  (jason@phydeaux.cygnus.com)

	* Makefile.in (LIB2FUNCS): Add _pure.

	* libgcc2.c (__pure_virtual): New function to go into vtable
	entries for pure virtual methods instead of abort.

Thu Oct 20 18:40:36 1994  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* alpha.md (define_split comparison op with power of two minus 1):
	Fix typo.

Thu Oct 20 13:14:24 1994  Jason Merrill  (jason@phydeaux.cygnus.com)

	* collect2.c (add_to_list): Check for duplicates.

	* alpha/alpha.h (LINK_SPEC): Pass -shared through; don't
	pass -init __main if -shared.
	(STARTFILE_SPEC): Wrap startfiles in %{!shared:}.
	(INIT_NAME_FORMAT): Define.
	(FINI_NAME_FORMAT): Define.
	* alpha/osf12.h (LINK_SPEC): Ditto.
	* alpha/gdb-osf12.h: #include osf12.h instead of alpha.h

	* gcc.c (STARTFILE_SPEC): Wrap startfiles in %{!shared:}.

Thu Oct 20 16:07:46 1994  Jim Wilson  (wilson@cygnus.com)

	* unroll.c (loop_iterations): Move all failure exits after the
	computation of final_value.

	* mips.md (movdf_internal2+1): Disable when TARGET_64BIT.

	* i960.c (VARARGS_STDARG_FUNCTION): New macro.
	(i960_function_name_declare, output_function_profiler,
	i960_function_epilogue, i960_output_call_insn,  i960_output_ret_insn,
	i960_reg_parm_stack_space): Use it.
	(compute_frame_size): Don't use current_function_pretend_args_size.
	(i960_function_arg_advance, i960_function_arg): Don't use parameter
	named.
	(i960_setup_incoming_varargs): No need to adjust first_reg_offset
	after setting it.  Don't save last named argument to stack.
	Don't set pretend_size.
	* i960.h (SIGNED_CHAR_SPEC): Use #if instead of ?:.
	* va-i960.h (va_start): Use builtin_arts_info instead of
	builtin_next_arg.

 	* cse.c (merge_equiv_classes, cse_insn): Call rehash_using_reg
	after insert_regs.
	(canon_hash): Don't use qty_const to compute hash code for a
	register.

Thu Oct 20 09:41:51 1994  Richard Kenner  (kenner@vlsi1.ultra.nyu)

	* stor-layout.c (variable_size): Return SIZE if it contains
	a PLACEHOLDER_EXPR.

Tue Oct 18 19:51:24 1994  Jason Merrill  (jason@phydeaux.cygnus.com)

	* collect2.c (main): Check REAL_*_FILE_NAME first.

Wed Oct 19 15:55:15 1994  David J. MacKenzie  <djm@duality.gnu.ai.mit.edu>

	* config.sub: Add licensing exception for Autoconf.

Wed Oct 19 06:43:46 1994  Michael Meissner  (meissner@osf.org)

	* i386/i386.h (FUNCTION_BLOCK_PROFILER): Don't bother preserving
	eax if -fpic, since it is a call clobbered register anyway.  Fix -fpic
	code so that it is correct.

Tue Oct 18 18:00:23 1994  Michael Meissner  (meissner@osf.org)

	* i386/i386.h (FUNCTION_BLOCK_PROFILER, BLOCK_PROFILER): Move
	macros here from osfrose, netbsd, and freebsd ports.  Remove
	assumptions that the assembler is gas.  Rewrite and fix the
	instructions produced with -fpic.

	* i386/osfrose.h (FUNCTION_BLOCK_PROFILER, BLOCK_PROFILER): Delete.
	* i386/freebsd.h (FUNCTION_BLOCK_PROFILER, BLOCK_PROFILER): Delete.
	* i386/netbsd-i386.h (FUNCTION_BLOCK_PROFILER, BLOCK_PROFILER):
	Delete.

Tue Oct 18 20:27:29 1994  Doug Evans  (dje@cygnus.com)

	* sparc.h (FRAME_POINTER_REQUIRED): Require frame pointer if
	non-leaf flat function.
	* sparc.c (sparc_frame_info): Combine members gp_sp_offset and
	fp_sp_offset into reg_offset.  All uses changed.
	(RETURN_ADDR_REGNUM): New macro.
	(RETURN_ADDR_MASK, FRAME_POINTER_MASK): New macros.
	(sparc_flat_compute_frame_info): Rename local mask to gmask.
	Only ensure reg save area is 8 byte aligned if necessary.
	(sparc_flat_save_restore): New arguments base_reg, offset, gmask,
	and fmask.  All callers changed.  No longer use %g2 to save regs
	in big stack frames.
	(sparc_flat_output_function_prologue): Delete local tsize.
	Reorder storing of previous frame pointer and return address reg to
	make it easier for gdb to identify flat functions.  Decrement %sp
	twice when saving call-saved regs in big frames.
	Count fp regs as 4 bytes in assembler comment.
	(sparc_flat_output_function_epilogue): Likewise when restoring
	call-saved regs.

Tue Oct 18 19:33:55 1994  Mike Collison  (collison@sw.stratus.com)

	* reload1.c (reload): Correctly compute group additional needs when
	the return register cannot be used as a spill register.

Tue Oct 18 16:17:26 1994  Jim Wilson  (wilson@mole.gnu.ai.mit.edu)

	* mips.h (ASM_SPEC): Pass -mcpu= option to GNU as.

Tue Oct 18 08:39:49 1994  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* flow.c (propagate_block): Call mark_used_regs to show global regs
	used by call.
	* combine.c (can_combine_p): Don't combine into CALL_INSN where
	DEST is a global reg.

	* c-decl.c (start_function): Save immediate_size_expand
	and initialize it to zero in case nested function.

	* pa.c (non_hard_reg_operand): New function.
	* pa.md (reload_{in,out}*): Replace general_operand with
	non_hard_reg_operand.

Fri Oct 14 18:35:30 1994  Jason Merrill  (jason@phydeaux.cygnus.com)

	* gcc.c (default_compilers): Treat files with an extension of .c++
	as C++ code.

Mon Oct 17 19:21:57 1994  David Edelsohn  (edelsohn@npac.syr.edu)

	* configure (rs6000-ibm-aix4.1*): New configuration.
	* rs6000/aix41.h: New file.

Mon Oct 17 19:15:14 1994  Jim Wilson  (wilson@mole.gnu.ai.mit.edu)

	* va-mips.h (va_arg): Add little endian mips3 support.

	* sparc.h (RETURN_IN_MEMORY): Return true for TCmode values.

	* README.IRIX5: Delete.
	* install.texi: Update Irix 5 debugging info.

	* mips.c (function_prologue): Only emit line number when SDB_DEBUG.

	* configure: Delete new argument, --noguess.  Default build from
	host if host specified, otherwise guess build.  Fix typo in
	setting build from host.

Mon Oct 17 15:54:56 1994  Per Bothner  <bothner@kalessin.cygnus.com>

	* calls.c (expand_call, emit_library_call, emit_library_call_value):
	Allways adjust current_function_outgoing_args_size, even #ifndef
	ACCUMULATE_OUTGOING_ARGS.  (Useful for stack overflow checking.)
	* function.c (current_function_outgoing_args_size):  Update comment.

Mon Oct 17 18:49:01 1994  Paul Eggert  <eggert@twinsun.com>

	* cccp.c (rescan): Preserve newlines after macro names at the top level
	since this is more likely to do the right thing with line numbers.

Mon Oct 17 11:31:42 1994  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* reload1.c (gen_reload): Renamed from gen_input_reload.
	(emit_reload_insns): Delete SECONDARY_MEM_NEEDED case for input
	reloads that can't happen and doesn't work.
	Fix errors in use of reload_outxx insns.
	Simplify output reload code by using gen_reload.
	* reload.h (gen_reload): Renamed from gen_input_reload.

Mon Oct 17 09:26:57 1994  Richard Earnshaw (rwe@pegasus.esprit.ec.org)

	* unroll.c (copy_loop_body, case JUMP_INSN): Don't abort if invert_exp
	fails.  Instead, redirect the jump around an unconditional branch.

Sun Oct 16 05:02:23 1994  Richard Earnshaw (rwe@pegasus.esprit.ec.org)

	* emit-rtl.c (add_insn_{before,after}): Don't abort because AFTER was
	deleted when not optimizing.

Fri Oct 14 19:26:28 1994  Jeffrey A. Law  (law@snake.cs.utah.edu)

	* pa.c (emit_move_sequence): Handle secondary reload when loading
	a constant into SAR.

Fri Oct 14 10:29:31 1994  Richard Earnshaw (rwe@pegasus.esprit.ec.org)

	* fixincludes: Fix X11/Intrinsic.h for RISCiX to remove ___type from
	XtOffset.
	Add all files that receive special attention to REQUIRED, so that
	dependent copies are done if necessary.

	* getpwd.c: Always use getwd if HAVE_GETWD is defined.
	* arm/xm-arm.h: Define HAVE_GETWD.

	* arm/x-riscix, arm/t-riscix: New files
	* configure (arm-*-riscix*): Use them.
	
Thu Oct 13 17:12:27 1994  Jim Wilson  (wilson@mole.gnu.ai.mit.edu)

	* i960.md (call, call_internal, call_value, call_value_internal):
	Use memory_operand not general_operand.

	* optabs.c (expand_fix): Correct typo with FIX/UNSIGNED_FIX
	REG_NOTES.

Thu Oct 13 10:44:32 1994  Ian Lance Taylor  (ian@cygnus.com)

	* genattrtab.c (optimize_attrs): Don't do anything if
	num_insn_ents is zero.

Wed Oct 12 19:06:48 1994  Jim Wilson  (wilson@mole.gnu.ai.mit.edu)

	* mips/mips.c (mips_expand_prologue): Handle types that need
	constructing.  Rename TYPE to PASSED_TYPE and use consistently.

Wed Oct 12 11:32:05 1994  Ian Lance Taylor  (ian@cygnus.com)

	* genattrtab.c (num_insn_ents): New static variable.
	(remove_insn_ent): Decrement num_insn_ents.
	(insert_insn_ent): Increment num_insn_ents.
	(optimize_attrs): Use xmalloc to allocate all the attr_value_list
	structures at once, rather than using alloca for each one.

Wed Oct 12 09:17:34 1994  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* optabs.c (??hf2_libfunc): Define like ??sf2_libfunc.
	(emit_float_lib_cmp): Call HFmode library functions.
	(init_optabs): Set names for HFmode comparison functions.
	* expr.h (??hf2_libfunc): Add declarations, like  ??sf2_libfunc.

Tue Oct 11 19:20:48 1994  Douglas Rupp  (drupp@cs.washington.edu)

	* winnt/ld.c (main): Pass -debug:full -debugtype:coff.
	* winnt/t-winnt: Rework rules for ld.
	* i386/config-nt.bat: Renamed from config/i386/config-winnt.bat.
	Make specific for x86, not all winnt; change filenames.
	* i386/config-nt.sed: Remove -g from CFLAGS.
	Reflect changes to t-winnt and other minor changes.
	* i386/x-winnt: Renamed from winnt/x-winnt.
	* i386/config-nt.sed: Renamed from config/winnt/top.sed.
	
Tue Oct 11 18:40:41 1994  Peter Schauer  (Peter.Schauer@regent.e-technik.tu-muenchen.de)

	* rs6000.h (ASM_DECLARE_FUNCTION_NAME): Always put out .lglobl
	for static functions.

Mon Oct 10 19:19:51 1994  Alex T. Ramos  (ramos@engr.latech.edu)

	* expr.c (convert_move): Add TImode conversions.

Mon Oct 10 18:46:44 1994  Alex Dreyzen  (alex@alex.jf.intel.com)

	* optabs.c (expand_float): Copy TEMP to TARGET when
	making recursive call and adjusting.

Mon Oct 10 07:10:25 1994  Michael Meissner  (meissner@osf.org)

	* i386/linux.h (DEFAULT_PCC_STRUCT_RETURN): Do not define as 0 if
	LINUX_ELF is defined.
	(perform.h): Include perform.h to define asm statements to use for
	libgcc1.a builds.

	* i386/linuxelf.h (DEFAULT_PCC_STRUCT_RETURN): Define as 1.
	(RETURN_IN_MEMORY): Don't define.

Sun Oct  9 11:49:20 1994  Michael Meissner  (meissner@osf.org)

	* i386/i386.md (movsf_mem): Add & constraint, so that the scratch
	register does not clobber the destination address.

Sun Oct  9 12:40:43 1994  Richard Earnshaw (rwe@pegasus.esprit.ec.org)

	* arm.md (reload_outdf): Don't call gen_addsi3 if the address is just
	a register.

Sat Oct  8 11:16:50 1994  Doug Evans  (dje@cygnus.com)

	* objc/archive.c (__objc_free): New function.
	(__objc_finish_read_root_object): Use it.

Fri Oct  7 19:23:03 1994  J.T. Conklin  (jtc@cygnus.com)

	* ginclude/stddef.h: Netware uses _SIZE_T_DEFINED_, _WCHAR_T_DEFINED_.

Fri Oct  7 12:45:43 1994  Michael Meissner  (meissner@osf.org)

	* i386/i386.c (legitimate_address_p): Disable SUBREGs as either
	the index or base register.

Fri Oct  7 08:24:44 1994  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* i386/gnu.h (CPP_PREDEFINES): Define __HURD__.

	* collect2.c (my_strerror): If HAVE_STRERROR defined, call strerror.
	* xm-gnu.h (HAVE_STRERROR): Define.

	* function.c (preserve_temp_slots): If X cannot be a temp
	slot, preserve all things whose address was taken at the
	present level.

	* function.c (assign_stack_temp): Abort if SIZE == -1.

	* expr.c (safe_from_p): If EXP has a variable size, assume safe.
	(preexpand_calls): Don't preexpand a call that returns a variable-
	sized object.

	* emit-rtl.c (add_insn_{after,before}): Fix error in last change.

Thu Oct  6 09:18:28 1994  Kresten Krab Thorup  (krab@next.com)

	Adam Fedor (fedor@hopper.colorado.edu)
	* objc/archive.c (__objc_finish_read_root_object): Delay freeing
	of back-patch list.

	Andrew McCallum (mccallum@cs.rochester.edu)
	* objc/objc.h (BOOL): Changed from char to unsigned char.

Thu Oct  6 08:17:04 1994  Stan Cox  (coxs@dg-rtp.dg.com)

	* m88k/m88k.c (emit_move_sequence): If operand1 is an invalid PIC
	 address, then legitimize it before doing anything else.

Thu Oct  6 06:54:03 1994  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* cse.c (cse_insn): Don't call force_const_mem on (const (truncate)).

	* expr.c (store_expr): Don't clobber TEMP with address.

	* reorg.c (try_merge_delay_insns): Update THREAD if it is split.

	* function.c (struct temp_slot): New field addr_taken.
	(assign_stack_temp): Initialize it.
	(mark_temp_addr_taken): New function.
	(preserve_temp_slots): Decrement level of things at same level
	but whose address has been taken.
	* expr.c (expand_expr, case ADDR_EXPR): Call mark_temp_addr_taken.

Wed Oct  5 14:17:39 1994  Jason Merrill  (jason@phydeaux.cygnus.com)

	* fold-const.c (fold, COMPONENT_REF): Don't die if the CONSTRUCTOR
	doesn't initialize the field we want.

Wed Oct  5 11:38:48 1994  Michael Meissner  (meissner@osf.org)

	* i386/i386.c (legitimize_pic_address): Changes to support
	LABEL_REF references when using -fpic.
	(output_pic_addr_const): Ditto.
	(print_operand_address): Ditto.

	* i386/i386.md (movsi insn): Changes to support LABEL_REF
	references when using -fpic.
	(movsi_lea): Name insn supporting lea instruction so it shows up
	more clearly when doing -dp.

Wed Oct  5 06:56:36 1994  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* reorg.c (try_merge_delay_insns): Update THREAD if deleting first
	insn in it.

Wed Oct  5 01:19:14 1994  Roland McGrath  <roland@churchy.gnu.ai.mit.edu>

	* configure (i[345]86-*-gnu*): Set xm_file=i386/xm-gnu.h.
	* config/i386/xm-gnu.h: New file.
	* config/xm-gnu.h: New file.
	* config/i386/gnu.h: Move #include <fcntl.h> out of here, into
	config/xm-gnu.h.

Tue Oct  4 23:19:28 1994  Michael Meissner  <meissner@pasta.osf.org>

	* protoize.c (POSIX includes): If POSIX is defined, include
	sys/wait.h to get WIFSIGNALED, WTERMSIG, WIFEXITED, and
	WEXITSTATUS.

Tue Oct  4 21:48:02 1994  Michael I Bushnell  <mib@churchy.gnu.ai.mit.edu>

	* config/i386/gnu.h: Include <fcntl.h> to get O_RDONLY definition.
	* gcc.c (O_RDONLY): Define macro iff not already defined.
	(read_specs): Second arg to open should be O_RDONLY, not constant 0.

Tue Oct  4 19:06:38 1994  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* expr.c (do_jump_for_compare): Properly scan insns when
	branch is at start of sequence.

Tue Oct  4 16:53:54 1994  Ian Lance Taylor  (ian@cygnus.com)

	* gcc.c, collect2.c, protoize.c (WIFSIGNALED): Define if not
	already defined.
	(WTERMSIG, WIFEXITED, WEXITSTATUS): Likewise.
	* gcc.c (execute): Use them.
	* collect2.c (do_wait): Likewise.
	* protoize.c (gen_aux_info_file): Likewise.

Tue Oct  4 16:38:06 1994  Michael Meissner  <meissner@pasta.osf.org>

	* i386/i386.h (RETURN_IN_MEMORY): Define so that large types such
	as complex double values get returned like structures do, and
	don't overwrite %ebx.

Tue Oct  4 15:58:21 1994  Jim Wilson  (wilson@mole.gnu.ai.mit.edu)

	* lynx-ng.h, lynx.h (PREFERRED_DEBUGGING_INFO): Add undef before
	define.

Tue Oct  4 05:12:02 1994  Richard Stallman  <rms@mole.gnu.ai.mit.edu>

	* config.sub: Translate -gnu/linux* to -linux*.

Mon Oct  3 11:43:45 1994  Ian Lance Taylor  (ian@cygnus.com)

	* config.sub: Add support for MIPS variants: mips64, mipsel,
	mips64el, mips64orion, mips64orionel, mips3*.

Sun Oct  2 18:26:34 1994  Jason Merrill  (jason@phydeaux.cygnus.com)

	* function.c (push_function_context_to): Renamed from
	push_function_context, adds argument to indicate that the new
	function is not a nested function.
	(push_function_context): Call it.
	(pop_function_context{,_from}): Similarly.

	* tree.c (save_tree_status): Add argument to indicate that the new
	function is not a nested function.
	(restore_tree_status): Ditto.

Sun Oct  2 18:05:37 1994  Doug Evans  (dje@cygnus.com)

	* configure (i[34]86-*): Change to i[345]86-*.
	(target_cpu_default): Treat i586 as an i486 (for now).

Sun Oct  2 10:25:51 1994  Richard Earnshaw (rwe@pegasus.esprit.ec.org)

	* arm.md (movsf): If reloading, create a scratch from the target for
	loading a constant into integer regs.
	(movdf): Likewise.

	Support for variants that fault on unaligned addrs:
	* arm.h (TARGET_SHORT_BY_BYTES): New macro.
	(TARGET_SWITCHES): Recognize switches -m[no-]short-load-bytes.
	(TARGET_DEFAULT): Only define if not already done so.
	(PROMOTE_MODE): Promote HImode unsigned if TARGET_SHORT_BY_BYTES.
	(SECONDARY_INPUT_RELOAD_CLASS): Need a scratch for reloading HImode if
	TARGET_SHORT_BY_BYTES.
	* arm.c (arm_reload_in_hi): New function.
	* arm.md (zero_extendhisi2, extendhisi2): Expand to suitable byte
	sequence when TARGET_SHORT_BYTES and loading a mem.
	(movhi_bytes, extendhisi2_mem): New expands.
	(movhi): Call movhi_bytes to load a short from memory if 
	TARGET_SHORT_BY_BYTES.
	(all matchers loading a short from memory): Don't match if 
	TARGET_SHORT_BY_BYTES.
	(matcher for movhi when TARGET_SHORT_BY_BYTES): New pattern to cover 
	remaining valid cases.

Sun Oct  2 08:54:30 1994  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* reg-stack.c (subst_stack_regs): Check for NOTE to see if insn was
	deleted.

	* reorg.c (fill_slots_from_thread): Update THREAD if deleting
	its first insn.

	* reg-stack.c (delete_insn_for_stacker): Don't set INSN_DELETED_P
	on NOTE_INSN_DELETED.

Sat Oct  1 20:42:33 1994  Chip Salzenberg  <chip@fin.uucp>

	* sco4.h (CPP_PREDEFINES): Remove i386, unix.
	(CPP_SPEC): Add them here, so that they're undefined if -ansi.
	Also add _i386 and _unix, which are always defined.
	* x-sco (CLIB): Add "-lmalloc".
	(ALLOCA): Define as "-lPW".
	* x-sco4 (CC, OLDCC, RCCFLAGS, CCLIBFLAGS, CLIB, ALLOCA): From x-sco.
	(X_CFLAGS): Remove.

Sat Oct  1 14:27:45 1994  Michael Meissner  (meissner@osf.org)

	* i386/i386.md (movsf_push386): Rename to movsf_push_nomove.
	(movdf_normal): Prefer to use float registers rather than general
	purpose registers.

Sat Oct  1 07:01:10 1994  Richard Earnshaw (rwe@pegasus.esprit.ec.org)

	* c-decl.c (shadow_label): Emit an error if the label is already
	declared at this label scope. 

Sat Oct  1 06:44:58 1994  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* emit-rtl.c (add_insn_{before,after}): Abort if insertion point is
	a deleted insn.
	* jump.c (jump_optimize): When deleting a jump, properly set NEXT.
	(duplicate_loop_exit_test): Don't insert NOTE_INSN_LOOP_VTOP
	before deleted insn; insert first, then delete.

	* gcc.c: Install omitted hunk from last diff.

Fri Sep 30 18:26:11 1994  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* emit-rtl.c (add_insn_after): Abort if can't find AFTER and it
	has no NEXT_INSN.
	(add_insn_before): New function.
	(emit_{insn,insns,jump_insn,call_insn,barrier,note}_before): Call it.

Fri Sep 30 17:33:41 1994  Douglas Rupp  (drupp@cs.washington.edu)

	* config.sub (windowsnt): Alias for winnt.
	(winnt): New OS name.
	* configure (extra_programs): New, like extra_parts.
	(i[34]86-*-winnt3.1): New configuration.
	* genattr.c (atoi): Remove declaration.
	* getpwd.c: #ifdef WINNT, include direct.h.
	* sdbout.c: Don't include syms.h for winnt.
	* toplev.c: Don't include times.h for winnt.
	(get_run_time): Just return zero for winnt.
	(main): Don't print memory usage for OS/2 or winnt.
	* cccp.c (main): Use DIR_SEPARATOR if defined.
	Use "Include" environment variable instead of CPATH for winnt.
	* gcc.c: Don't include sys/file.h for winnt; use process.h instead.
	(concat): Now just concats two things; all callers changed.
	(concat[346]): New functions.
	(dir_separator_str): New variable.
	(exec_prefixes, startfile_prefixes, include_prefixes): Renamed
	from same names without plural; all users changed.
	(find_a_file, process_command, do_spec_1): Use DIR_SEPARATOR.
	(find_file, is_directory, main): Likewise.
	(lookup_compiler): If OS/2, do case-independent search.
	(fix_argv): New function on winnt.
	(FIX_ARGV): New macro for some systems; use instead of argv.
	* i386/unix.h: Treat ALMOST_STDC like __STDC__.
	(AS2C): New macro.
	* i386.c (output_387_binary_op): Use AS2C instead of AS2 with
	null first arg.
	* config/winnt/config-nt.bat, config/winnt/ld.c: New files.
	* config/winnt/{[tx]-winnt, config/winnt/top.sed: New files.
	* config/winnt/winnt.h, config/winnt/xm-winnt: New files.
	* i386/winnt.h, i386/xm-winnt.h: New files.

Thu Sep 29 19:53:14 1994  Jim Wilson  (wilson@cygnus.com)

	* sparc.md (movdf+3): Handle overlapping registers in define_split.

	* gcc.c (default_compilers): Add %Z to all cpp specs.
	(n_preprocessor_options, preprocessor_options): New variables.
	(process_command): Handle -Wp option.
	(do_spec_1): Handle %Z spec.

	* i960/i960-coff.h: New file.
	* t-960bare: New file.
	* config.sub (os): Accept coff as an OS.
	* configure (i960-*-coff): New configuration.

	* expr.c (result_vector): Use INCOMING_REGNO when !savep instead
	of when savep.
	* sparc.md (call): Use struct value pattern is struct size is not
	equal to zero instead of greater than zero.
	(call+7, call+8): New patterns for untyped calls.
	(untyped_call): Revise to emit explicit rtl for all operation.
	Delete four old patterns that matched the unexpanded untyped_call
	pattern.
	(blockage): New pattern.
	(flush_register_windows): Modify from 0 to 1.
	(goto_handler_and_restore): Modify from 1 to 2.
	(flush): Modify from 2 to 3.
	* sparc.c (sparc_initialize_trampoline): FLUSH is now 3 not 2.

	* calls.c (emit_library_call): For FUNCTION_ARG_PASS_BY_REFERENCE,
	pass address through force_operand before using it.

	* i960.c (i960_setup_incoming_varargs): Store parameter registers
	at proper offset in argument block.

Thu Sep 29 16:39:32 1994  Mike Stump  <mrs@cygnus.com>

	* stmt.c (expand_return): We have to be careful of cleanups that can
	be generated when expanding the return value, as they might otherwise
	wipe out the return value.

Thu Sep 29 13:35:24 1994  Mike Stump  <mrs@cygnus.com>

	* expr.c (do_jump): Handle cleanups in TRUTH_ANDIF_EXPR and
	TRUTH_ORIF_EXPR.

Thu Sep 29 13:23:56 1994  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* gcc.c (struct option_map): Sort in alphabetical order.
	(translate_options): Ignore option once an error occurs.
	Fix error with reversed 'a' and 'o'.
	Give error if specified abbreviation is unambiguous.

	* c-typeck.c (convert_for_assignment): When converting object
	to union, allow converting the constant zero into a pointer
	member of the union.

Wed Sep 28 19:33:01 1994  Alex T Ramos  (ramos@engr.latech.edu)

	* machmode.def (PSImode): Widens to PDImode.
	* expr.c (convert_move): Added handling of PDImode conversions.

Wed Sep 28 19:24:17 1994  H.J. Lu  (hjl@nynexst.com)

	* configure: Don't make objc-runtime if cross-compiling gcc.
	* build-make (FIXINCLUDES): Set to Makefile.in.

Wed Sep 28 19:18:19 1994  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* function.c (trampoline_address): Add missing call to 
	round_trampoline.

Wed Sep 28 18:34:13 1994  Michael Meissner  (meissner@osf.org)

	* config/svr4.h (ESCAPES): Print \v in octal rather than as '\v',
	since some older versions of gas didn't accept it.

Wed Sep 28 14:29:20 1994  Ian Lance Taylor  (ian@cygnus.com)

	* fixincludes: Comment out loop which handles symbolic links to
	files.  It appears to not work, and to be unnecessary.

Tue Sep 27 19:27:56 1994  Matthias Pfaller  (leo@marco.de)

	* ns32k.h (ENCODE_SECTION_INFO): Only calls may go through the
	PLT. All address loads, even function address loads, have to 
	go through the GOT or function addresses will not be unique.

Tue Sep 27 19:20:12 1994  Paul Eggert  (eggert@twinsun.com)

	* cccp.c (newline_fix, name_newline_fix): Don't treat \r
	specially here; it only causes bugs.  This undoes the
	May 14 16:01:13 1990 change to newline_fix and name_newline_fix.

Tue Sep 27 19:02:55 1994  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* m88k.h (ASM_OUTPUT_SOURCE_LINE): Add missing #undef.

Tue Sep 27 18:32:17 1994  William J. Eaton  (wje@hoffman.rstnu.bcm.tmc.edu)

	* function.c (optimize_bit_field): Put any insns made by
	change_address in front of INSN.
	(expand_function_end): Don't pass DECL_INITIAL to setjmp_protect
	if it is error_mark_node.

	* genoutput.c, reload.c (n_occurrences): Make arg int, not char.
	* objc-act.c (warn_with_method): Likewise.

	* optabs.c (expand_fix): Call emit_library_call_value.

Tue Sep 27 12:39:10 1994  Mike Stump  (mrs@cygnus.com)

	* Makefile.in, libgcc2.c (L_eh): some support routines for C++.

Mon Sep 26 06:45:20 1994  Michael Meissner  (meissner@osf.org)

	* 386/i386.md (adddi3, subdi3): Rewrite to add a clobber of a
	scratch variable, so that memory/memoroy adds and subtracts can be
	done using just one scratch register.  Also, don't require op1 to
	be the same as op0.

Fri Sep 23 19:03:09 1994  Roland McGrath  <roland@churchy.gnu.ai.mit.edu>

	* config/i386/gnu.h (LIB_SPEC): Remove macro.

Fri Sep 23 16:11:26 1994  Michael Meissner  (meissner@osf.org)

	* i386/lynx-ng.h (CALL_USED_REGISTERS): Copy definition from
	i386/lynx.h that makes ebx be a call clobbered register, since
	some system calls evidently trash it.

Fri Sep 23 15:54:53 1994  Jim Wilson  (wilson@cygnus.com)

	* configure (mips-*riscos*): Changed to mips-*-riscos*.
	(mips-*-riscos*-*): Deleted.

	* cse.c (invalidate): New parameter FULL_MODE.  All callers
	changed.
	(set_nonvarying_address_components): Modify initial comment.
	(cse_insn): When call invalidate for dest, use the actual dest not
	inner_dest.

Thu Sep 22 18:56:19 1994  Torbjorn Granlund  (tege@cygnus.com)

	* expmed.c (expand_divmod): Special case for signed CEIL_DIV_EXPR
	when divisor is power of 2.

Thu Sep 22 12:28:53 1994  Jason Merrill  (jason@deneb.cygnus.com)

	* fixinc.svr4: Fix size_t, ptrdiff_t and wchar_t like fixincludes
	does.  Use extern inline rather than static inline in byteorder.h.

Thu Sep 22 12:22:03 1994  Steve Dum  (steve_dum@mentorg.com)

	* collect2.c (main): Discard the first executable once we've
	exploited it.

Thu Sep 22 11:38:34 1994  Ian Lance Taylor  (ian@cygnus.com)

	* fixincludes: Tweaks for LynxOS 2.2.2: accept spaces after # when
	removing #define void int in curses.h; change prototype of fnctl
	in fcntl.h to match POSIX.1.

Thu Sep 22 07:18:37 1994  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* configure: Consistently put specified manufacturer names ahead
	of entries with wildcard manufacturers.

	* calls.c (emit_call_1): Fix typo in last change.

Wed Sep 21 21:32:56 1994  Chris Smith  (csmith@convex.com)

	* config.guess: Add convex c3* and c4* guesses.
	* configure: Don't run fixincludes on convex.

Wed Sep 21 15:59:12 1994  Ashley Saulsbury  (ans@sics.se)

	* alpha.h (ASM_FILE_START): Write .set volatile.

Wed Sep 21 14:45:45 1994  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* calls.c (emit_call_1): Properly add a CLOBBER for sp 
	to CALL_INSN_FUNCTION_USAGE.

	* c-typeck.c (mark_addressable): Give different error if trying
	to put object with volatile fields into register; don't use DECL_NAME.

Wed Sep 21 14:02:10 1994  Jim Wilson  (wilson@cygnus.com)

	* reload1.c (eliminate_regs): Make test in LOAD_EXTEND_OP case
	more precise.

Wed Sep 21 11:34:12 1994  Ian Lance Taylor  (ian@cygnus.com)

	* fixincludes: Don't try to remove empty directories until after
	removing DONE files.

Wed Sep 21 05:52:49 1994  Uwe Seimet  (seimet@chemie.uni-kl.de)

	* m68k/atari.h (NO_{DOLLAR,DOT}_IN_LABEL): Define.

Tue Sep 20 20:06:08 1994  Doug Evans  (dje@cygnus.com)

	* final.c (asm_insn_count): Handle ASM_INPUTs too.

Tue Sep 20 19:32:10 1994  Oliver Kellogg  (okellogg@salyko.cube.net)

	* 1750a.h, 1750a.c, 1750a.md: New files, to use as1750.
	* 1750a/m1750.inc: File deleted.
	* 1750a/ms1750.inc: New file.

Tue Sep 20 17:55:50 1994  Hallvard B Furuseth  (hbf@durin.uio.no)
 
	* cccp.c (make_definition): Enable `-D' with macro arguments.

Tue Sep 20 17:49:47 1994  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* cexp.y (HOST_WIDE_INT, HOST_BITS_PER_WIDE_INT): New macros.
	(expression_value): Now HOST_WIDE_INT.
	(parse_c_expression): Now returns HOST_WIDE_INT.
	* cccp.c (eval_if_expression): Likewise.
	(do_if, do_elif): Reflect new return value of functions.

	* alpha.c (mode_mask_operand): Always return a value.

	* function.c (pop_function_context): Clear reg_renumber.

	* gcc.c (process_command): Add new switch, -dumpmachine.

Tue Sep 20 15:57:40 1994  Jim Wilson  (wilson@cygnus.com)

	* sched.c (sched_analyze_insn): Parameter loop_note type changed
	to rtx, and name changed to loop_notes.  Code adding it to
	REG_NOTES modified to account for type change.
	(sched_analyze): Variable loop_note type changed to rtx, and name
	changed to loop_notes.  Store LOOP_* REG_DEAD notes in it instead
	of LOOP_* NOTE_LINE_NUMBER.
	(schedule_block): Pass last not insn to emit_note_before call.

	* iris5.h (ASM_OUTPUT_UNDEF_FUNCTION): Define.
	(ASM_OUTPUT_EXTERNAL_LIBCALL): Define.
	(ASM_DECLARE_FUNCTION_SIZE): Define.
	* mips.c (mips_output_external): Use ASM_OUTPUT_UNDEF_FUNCTION.
	(mips_output_external_libcall): New function.
	(mips_asm_file_end): Handle ASM_OUTPUT_UNDEF_FUNCTION.
	* README.IRIX5: Update.

Tue Sep 20 14:39:37 1994  Michael Meissner  (meissner@osf.org)

	* i386/i386.h (output_move_memory): Add declaration.
	(output_move_pushmem): Ditto.

	* i386/i386.c (output_move_pushmem): New function to handle
	pushing bytes from memory onto the stack, possibily using
	temporary registers.
	(output_move_memory): New function to handle moving bytes from
	memory to memory via temporary registers.

	* i386/i386.md (movsi insn): If -fpic and the value we are moving
	is a constant pool address, emit a leal instruction instead of
	movl.
	(movsf_push): Allow pushes from memory.
	(SF, DF, XF, DI pushes): Move most of the code to the common
	function output_move_pushmem.
	(SF, DF, XF, DI memory->memory moves): Move most of the code to
	the common function output_move_memory.
	(DI move patterns): Combine DI patterns into two, one for pushes,
	and one for everything else, so that the combiner will combine a
	load with a store into a memory->memory move.
	(untyped_call): Replace non-working code with m68k version that
	emits a regular call, then breaks the parallel moves into separate
	moves, and then issue a blockage instruction.
	(blockage): New unspec_volatile insn to block insns from being
	moved across this point.
	(untyped_return): Delete.
	(update_return): Delete.

	* objc/sendmsg.c (get_imp): Allow __inline__ on x86 platforms.

Tue Sep 20 12:21:12 1994  Ian Lance Taylor  (ian@cygnus.com)

	* fixincludes: Handle the case of a symlink to root/* from a
	subdirectory of another symlink to root/*.

Mon Sep 19 20:30:21 1994  Jason Merrill  (jason@deneb.cygnus.com)

	* fold-const.c (fold): Handle COMPONENT_REFs involving CONSTRUCTORs.

Mon Sep 19 20:25:38 1994  Will Athanasiou  (will@westford.ccur.com)

	* rs6000.md (load sf with update): Fix RTL typo.

Mon Sep 19 08:46:46 1994  Charles M. Hannum  (mycroft@duality.gnu.ai.mit.edu)

	* c-common.c (check_format_info): Enable checking of format
	specifiers using the `q' (quad) length modifier.
	(format_char_info): Add `qlen'.
	(print_char_table, scan_char_table): Add appropriate entries for
	qlen.

Sat Sep 17 12:48:57 1994  Per Bothner  (bothner@kalessin.cygnus.com)

	* stmt.c (mark_seen_cases):  Don't call fatal (or do anything
	else) if case index out of range.  Warning is given later.

Fri Sep 16 19:22:46 1994  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* global.c (global_alloc): Mark regs assigned to SCRATCH as used by
	more than just local alloc.

Thu Sep 15 14:36:59 1994  Michael Meissner  <meissner@pasta.osf.org>

	* i386/i386.c (order_regs_for_local_alloc): Instead of using
	flag_cse_follow_jumps and not leaf_function_p to determine whether
	to allocate EDX, and ECX before EAX, use whether or not a DImode
	variable was used in the compilation.  DImode variables seem to
	cause spill failures if EAX is allocated first, while smaller code
	is generated if EAX is allocated first, assuming no spill failure.

	* i386/i386.md (SF, DF, XF, and DI moves and pushes): Eliminate
	special patterns for TARGET_386 that allow direct pushes from
	memory, and instead allow direct pushes from memory as the last
	alternative in case no scratch registers could be allocated.
	(movxf_mem): Remove inadvertent !TARGET_386 condition.
	(addsi3): Allow generation of lea on 486, since the single
	instruction lea is at least as fast as the mov and add it
	replaces.
	(zero extend patterns): Replace !TARGET_486 with TARGET_386.
	(bit extracts): Ditto.

	* i386/osfrose.h (LONG_DOUBLE_TYPE_SIZE): Don't redefine to be 64
	unless NO_LONG_DOUBLE is defined.

Thu Sep 15 13:46:05 1994  Jim Wilson  (wilson@cygnus.com)

 	* expmed.c (store_split_bit_field): Use number of bits in arg not
	BITS_PER_WORD to adjust arg in BYTES_BIG_ENDIAN case.

Thu Sep 15 09:19:12 1994  Richard Earnshaw (rwe@pegasus.esprit.ec.org)

	* optabs.c (expand_binop, multi-word shifts): Generate rtl
	free of conflicts for shifts less than one word.

Thu Sep 15 05:29:58 1994  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* gcc.c: Rework last change so it's done like collect2.c.

	* cse.c (cse_around_loop): Don't invalidate SUBREG unless 
	it's a SUBREG of a REG.

	* sched.c (sched_analyze_insn): Don't set SCHED_GROUP_P for previous
	INSN a USE unless it's a USE of a REG.

Wed Sep 14 10:08:58 1994  Michael I Bushnell  <mib@churchy.gnu.ai.mit.edu>

	* gcc.c: Include <sys/errno.h> in case `errno' is really a macro
	as permitted by ANSI C.  

	* getpwd.c (GUESSPATHLEN): If there is no definition of
	MAXPATHLEN, then set GUESSPATHLEN to be 100.  (It's used
	as a starting point, not a limit, so this is harmless.)

Tue Sep 13 15:02:19 1994  Michael Meissner  <meissner@pasta.osf.org>

	* i386/i386.md (movxf_mem): Fix typo with memory/memory moves
	of XFmode variables, where the store actually did a load, ie, the
	source and destination operands were fixed.
	(fixuns_trunc patterns): Revert to the old code.
	(movdf_push486, movxf_push486, movdi_push486): If an address is
	based on the stack pointer, account for the stack pointer changing
	due to the intermediate pushes generated.

Tue Sep 13 14:11:16 1994  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* collect2.c (fatal_perror, fatal, error): Declare all args as char *.

Tue Sep 13 12:40:39 1994  Jeffrey A. Law  (snake.cs.utah.edu)

	* pa.c (emit_move_sequence): Handle secondary FP load/store
	reloads of the form (subreg (mem (plus (reg) (disp)))).
	(secondary_reload_class): A secondary register is needed to handle
	out-of-range FP loads and stores.
	* pa.md (reload_indf, reload_outdf): New expanders.
	(reload_insf, reload_outsf): Likewise.

Mon Sep 12 18:15:48 1994  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* t-pa (ADA_CFLAGS): New override.
	* pa/t-pa-hpux: New file.
	* configure (hppa*-*-hpux*): Use t-pa-hpux instead of t-libc-ok.

Mon Sep 12 14:52:17 1994  Jim Wilson  (wilson@cygnus.com)

	* function.c (assign_parms): Set RTX_UNCHANGING_P on stack_parm
	for const parameter before calling move_block_from_reg.

Mon Sep 12 14:27:58 1994  Doug Evans  (dje@cygnus.com)

	* config/fp-bit.c (FLO_union_type): Add packed attribute to `bits'.

Sat Sep 10 09:50:41 1994  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* cse.c (invalidate_for_call): Properly set IN_TABLE.

Sat Sep 10 06:46:24 1994  Bill Burton  (billb@progress.com)

	* Added improved support for Sequent DYNIX/ptx 1.x and 2.x:
	* fixinc.ptx: New file.
	* i386/seq-sysv3.h (HAVE_ATEXIT): No longer defined.
	* i386/seq2-sysv3.h: New file.
	* configure (i[34]86-sequent-ptx[12]*): New configurations.
	(i[34]86-sequent-sysv*, i[34]84-sequent-ptx): Deleted configurations.
	* config.sub (ptx): New OS; use for Sequent.

Fri Sep  9 21:48:48 1994  Paul Eggert  (eggert@twinsun.com)

	* cccp.c (rescan, handle_directive): Backslash no longer suppresses the
	specialness of the following char unless -traditional.
	(rescan): Remove backslash-newline only if at top level, since
	backslash-newline-space can be encountered during macro processing.
	(collect_expansion): Remove special hack for \# inside a #define;
	it's not compatible with the C Standard.

Thu Sep  9 17:36:03 1994  Jason Merrill  (jason@deneb.cygnus.com)
 
	* Utilize OSF/1's limited .init support.
	* alpha/alpha.h (HAS_INIT_SECTION): Define.
	(LINK_SPEC): Add '-init __main'.
	* alpha/osf12.h (LINK_SPEC): Ditto.
 
	* function.c (expand_main_function): Don't call __main if
	HAS_INIT_SECTION is defined.

Fri Sep  9 16:36:46 1994  Mike Stump  (mrs@cygnus.com)

	* tree.c (decl_function_context): Don't treat C++ member
	functions of classes declared in a function, as nested functions.

Fri Sep  9 16:10:25 1994  Steve Chamberlain  (sac@jonny.cygnus.com)

	* sh/sh.c (prepare_move_operands): Generate better DI constant 
	code.
	(fake_shift): New function.
	* sh/sh.md (ashlsi3_n, lshrsi3_n): Only recognise if fake_shift
	enabled.
	* sh/{lib1funcs.asm, ashlsi3.c, lshrsi3.c, ashrsi3.c} : New files.
	* sh/t-sh : Build new files.

Fri Sep  9 15:52:54 1994  Hallvard B Furuseth  (h.b.furuseth@usit.uio.no)

	* cccp.c: Correct unprototyped pointer args from `0' to `NULL_PTR'

Fri Sep  9 15:17:52 1994  Matthew Green  (mrg@splode.mame.mu.oz.au)

	* configure (sparc-*-netbsd): New configuration.
	* sparc/netbsd.h: New file.

Fri Sep  9 15:15:48 1994  Jim Wilson  (wilson@cygnus.com)

	* mips.md (truncdisi2): Change from define_expand to define_insn.
	(truncdihi2, truncdiqi2): Likewise.

	* sparc.h (SQRTTF2_LIBCALL): Delete.
	(INIT_TARGET_OPTABS): Define.
	(INIT_SUBTARGET_OPTABS): Define.

	* stmt.c (check_for_full_enumeration_handling): Cast malloc result
	to `unsigned char *' not `char *'.

	* dbxout.c (dbxout_symbol_location): Handle error_mark_node in
	DECL_INITIAL for C++.

	* mips.md (memory): Add missing !r4600 to first define_function_unit.

	* sparc.md (negsi2): Use register_operand not general_operand for
	output.

Fri Sep  9 14:52:58 1994  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* config/netbsd.h: Add #undef for everything we define; a few were
	missing.

	* reload.c (find_reloads, case 'p'): Operand is BASE_REG_CLASS.

Fri Sep  9 14:00:28 1994  Mike Collison  (collison@world.std.com)

	* configure (dsp16xx-*): New configuration.
	* config.sub (dsp16xx): New basic machine.
	* dsp16xx.c, dsp16xx.md, dsp16xx.h, xm-dsp16xx.h: New files.

Fri Sep  9 12:47:00 1994  Michael Meissner  (meissner@osf.org)

	* i386/i386.md (All SF, DF, XF, DI 486 push patterns): Merge the
	memory and nonmemory push patterns together.

Fri Sep  9 00:53:36 1994  Richard Stallman  <rms@mole.gnu.ai.mit.edu>

	* config.sub: Accept i586 like i386.
	Do not use SCO as a default for i386-*.

Thu Sep  8 18:49:35 1994  Steve Chamberlain  (sac@cygnus.com)

	* config/fp-bit.c (_fpmul_parts):  Perform optimized
	64bit*64bit multiply correctly.
	* sh/sh.c (synth_constant): Ensure DI mode constants get their
	high part zeroed.
	(add_constant):  Entabled constants are only identical if their
	sizes are the same.

Thu Sep  8 14:40:31 1994  Jim Wilson  (wilson@cygnus.com)

	* flow.c (mark_used_regs, case REG): Correct typo, use GET_MODE
	not GET_CODE.
	* sched.c (attach_deaths): Likewise.

Tue Sep  6 23:33:41 1994  Per Bothner  (bothner@kalessin.cygnus.com)

	* tree.c (get_set_constructor_bits, get_set_constructor_words):
	New functions.  Extract bits or words from SET_TYPE CONSTRUCTOR.
	* tree.h:  Declare above new functions.

Thu Sep  8 14:02:05 1994  Michael Meissner  (meissner@osf.org)

	* 386/i386.h (TARGET_OPTIONS): New macro to define -mreg-alloc=
	switch to allow users to override the register allocation order.
	(OVERRIDE_OPTIONS): Call the function override_options.
	(REG_ALLOC_ORDER): Define to allocate in the natural order, this
	is needed for ORDER_REGS_FOR_LOCAL_ALLOC to work.
	(ORDER_REGS_FOR_LOCAL_ALLOC): Define to call the function
	order_regs_for_local_alloc.
	(regclass_map): Move declaration to end of file.
	(i386_compare_op0, i386_compare_op1): Ditto.
	(CLASS_LIKELY_SPILLED_P): Define, return 1 for AD_REGS in addition
	to all of the single register classes, since AD_REGS is only used
	to allocate EAX:EDX.
	(override_options, order_regs_for_local_alloc): Add declarations.
	(hi_reg_name): Add declaration.
	(qi_reg_name): Ditto.
	(qi_high_reg_name): Ditto.
	(i386_reg_alloc_order): Add declaration for TARGET_OPTIONS to use.

	* i386/i386.c (i386_compare_op0, i386_compare_op1): Initialize
	with NULL_RTX.
	(i386_reg_alloc_order):  Provide global variable definition.
	(regs_allocated): Static array to note whether a register is noted
	via -mreg-alloc=<xxx>.
	(override_options): Provide checking for registers declared with
	-mreg-alloc=<xxx>.
	(order_regs_for_local_alloc): If -mreg-alloc=<xxx> was used,
	allocate registers mentioned in order, and then allocate all other
	registers in the normal register order.  If -mreg-alloc=<xxx> was
	not used, allocate registers in natural order except for non-leaf
	functions with CSE following jumps, allocate EAX after EDX and
	ECX, to allow the function return to be CSE'd, and perl 4.036's
	perly.y to be compiled without aborting due to not being able to
	find a spill register.
	(movsf, movdf, movdi): Rewrite all patterns to provide effecient
	memory to memory moves, including pushes for i386 and i486.  Fixes
	problems in compiling motif+ without optimization.
	(swapsf): Add, like swapdf and swapxf.
	(fixuns_truncsfsi2, fixuns_truncdfsi2): Use general_operand
	instead of register_operand for define_expand, since the operand
	is copied to a new pseudo register as part of the expansion.
	(fix_truncxfdi2, fix_truncdfdi2, fix_truncsfdi2): Rewrite to call
	the more primitive generator functions instead of knowing how many
	clobbers of match_scratchs they do.

	* Makefile.in (aux_output.o): Define TARGET_CPU_DEFAULT if
	specified when compiling aux_output.o to allow the machine C file
	access to this if it wants it.

Thu Sep  8 07:15:29 1994  David Edelsohn  (edelsohn@npac.syr.edu)

	* rs6000.md (movsi matcher): Merge TARGET_POWER and !TARGET_POWER
	cases.  Rationalize mnemonics.
	(movhi and movqi matchers): Likewise.
	(movsf matcher): Correct length attribute for stfs which no longer
	includes frsp.

Thu Sep  8 07:06:31 1994  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* rs6000.h (REGISTER_MOVE_COST): Fix typo in last change.

Wed Sep  7 19:31:52 1994  Paul Eggert  (eggert@twinsun.com)

	* cccp.c (handle_directive): In `#include <xxx>' directives,
	remove backslash-newline properly.  Don't allow any other newlines.

Wed Sep  7 18:11:29 1994  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* rs6000.h (REGISTER_MOVE_COST): Moving between special registers
	is expensive.

	* combine.c (simplify_comparison): Convert comparison to unsigned
	when stripping off a ZERO_EXTEND.

	* combine.c (simplify_set): Only convert IF_THEN_ELSE to logical
	expression if mode of object being compared is result mode.

Wed Sep  7 18:09:17 1994  David J. MacKenzie  (djm@geech.gnu.ai.mit.edu)

	* configure: Ignore --help, --version, --program-prefix,
	--program-suffix, --cache-file, --quiet, --silent.

Wed Sep  7 13:29:50 1994  Doug Evans  (dje@cygnus.com)

	* stmt.c (expand_asm_operands): Move test for misspelled registers
	higher so all cases caught.

Wed Sep  7 09:54:14 1994  Per Bothner  (bothner@kalessin.cygnus.com)

	* configure:  Touch Makefile.ll before appending subdir stuff.
	(Needed if there are no subdirs.)

Wed Sep  7 11:19:18 1994  Kresten Krab Thorup  (krab@akvavit.next.com)

	* objc/init.c (__objc_init_protocols): Remove assertion.
	* objc/Object.m (conformsTo:): Make lookup allways happen in
	the class object.

Tue Sep  6 17:47:39 1994  Per Bothner  (bothner@kalessin.cygnus.com)

	* configure:  Rename *-next-ns[23] to *-next-nextstep[23].
	* config.sub:  Cleanup NeXT support to emit nextstep*.

Tue Sep  6 18:38:02 1994  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* reload.c (find_reloads_address): Don't reorder the operands of a
	PLUS when fixing up index.

Tue Sep  6 18:24:50 1994  Matthias Pfaller  (leo@marco.de)

	* ns32k.md (stackadjust/push peepholes): For the adjust/push/push
	pattern one offset was wrong.
	Don't use addr for register and and MEM refs.

Tue Sep  6 11:24:06 1994  Steve Chamberlain  (sac@jonny.cygnus.com)

	* sh/sh.c (push, pop): Generate REG_NOTES.
	(synth_constant): Correct one of the patterns.
	(output_file_start): Bump version number.
	* sh/sh.h (EXIT_IGNORE_STACK): Now 1.
	* sh/sh.md (adddi3, subdi3): Simplify.
	(casesi_worker): Use TARGET_BIGTABLE.

Mon Sep  5 12:29:15 1994  Ian Lance Taylor  (ian@cygnus.com)

	* ginclude/math-68881.h: Change inline functions from static to
	extern.

	* configure (i[34]86-*-sysv4*): If --with-stabs, set tm_file to
	i386/sysv4gdb.h.
	* config/i386/sysv4gdb.h: New file; sets PREFERRED_DEBUGGING_TYPE.

Sun Sep  4 08:40:02 1994  Chris Smith  (csmith@convex.com)

	* convex.h (VTABLE_USES_MASK, VINDEX_MAX, SET_DECL_VINDEX):
	delete, no longer used.
	(target_flags): delete cexp.c hack, no longer needed.
	* convex.md (decr-and-set-cc0): fix HImode to use halfword
	insns.
	(cmpqi patterns): fix constraints not to use A regs

Sat Sep  3 14:12:11 1994  Michael Meissner  (meissner@osf.org)

	* i386/i386.md (DImode move and push insns): Eliminate movdi
	wrapper that made a DI temp register to do a memory to memory
	move because it creates too much register pressure, especially
	when not optimizing.  On the 486, allocate and use 1-2 scratch
	registers to push a DImode value.

Fri Sep  2 15:11:59 1994  Jason Merrill  (jason@deneb.cygnus.com)
 
        * c-decl.c (min_precision): Move from here.
        * c-common.c: To here.

Fri Sep  2 13:16:38 1994  Per Bothner  (bothner@kalessin.cygnus.com)

	* tree.h (maximum_field_alignment, set_alignment):  New declarations.

Fri Sep  2 14:25:36 1994  Ian Lance Taylor  (ian@cygnus.com)

	* config/svr4.h (DBX_DEBUGGING_INFO, PREFERRED_DEBUGGING_TYPE,
	DBX_BLOCKS_FUNCTION_RELATIVE, ASM_IDENTIFY_GCC,
	ASM_IDENTIFY_GCC_AFTER_SOURCE, ASM_OUTPUT_SOURCE_LINE,
	DBX_FUNCTION_FIRST): Define.  This adds support for -gstabs for
	SVR4 configurations.  -gstabs requires gas and gdb.
	* config/sparc/sol2.h (DBX_DEBUGGING_INFO,
	DBX_BLOCKS_FUNCTION_RELATIVE, ASM_IDENTIFY_GCC,
	ASM_IDENTIFY_GCC_AFTER_SOURCE, ASM_OUTPUT_SOURCE_LINE,
	DBX_FUNCTION_FIRST): Don't define.  Now defined by config/svr4.h.
	(PREFERRED_DEBUGGING_TYPE): Undefine before defining.
	* config/sparc/sysv4.h (DBX_DEBUGGING_INFO): Don't bother to
	undefine before including svr4.h.
	(ASM_OUTPUT_SOURCE_LINE): Undefine before including svr4.h.

Thu Sep  1 22:02:02 1994  Michael Meissner  (meissner@osf.org)

	* toplev.c (fatal_insn): Move most of the code from
	fatal_insns_not_found here, and add an argument to give the error
	message.
	(fatal_insn_not_found): Call fatal_insn.
	* rtl.h (fatal_insn, fatal_insn_not_found): Add prototypes.
	* genextra.c (main): Don't declare fatal_insn_not_found in
	insn-extract.c.
	* reload1.c (reload): Call fatal_insn where appropriate to print
	an error message instead of calling abort.
	(spill_failure): Ditto.
	(reload_as_needed): Ditto.
	(allocate_reload_reg): Ditto.
	(emit_reload_insns): Ditto.

Thu Sep  1 19:34:26 1994  Jason Merrill  (jason@deneb.cygnus.com)
 
        * tree.c (type_list_equal): If the types of the default arguments
        differ, the lists do not match.
 
Thu Sep  1 19:29:58 1994  Matthias Pfaller  (leo@marco.de)

	* ns32k.md (stack-adjust/push peepholes): Addresses are
	moved with "addr", not with "movd".

Thu Sep  1 19:17:55 1994  Paul Eggert  (eggert@twinsun.com)

	* cccp.c (make_definition): Don't dump core when given an
	unterminated string in a -D option.

Thu Sep  1 19:13:35 1994  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* c-typeck.c (convert_arguments): Give proper warnings when
	converting COMPLEX_TYPE; widen check to include all integral types.

Wed Aug 31 20:38:53 1994  Per Bothner  (bothner@spiff.gnu.ai.mit.edu)

	* fixproto:  Define FIX_HEADER (needed by Aug 19 change).
	Use FIX_HEADER instead of $original_dir/fix-header (twice).

Wed Aug 31 16:56:15 1994  Jason Merrill  (jason@deneb.cygnus.com)
 
        * stmt.c (warn_if_unused_value): Extend special case for casted
        MODIFY_EXPRs to apply to INIT_EXPRs as well.
 
Wed Aug 31 16:30:09 1994  Per Bothner  (bothner@kalessin.cygnus.com)

	* stor-layout.c (set_alignment):  New global.
	(layout-type):  Add support for SET_TYPE.

	* expmed.c (store_bit_field):  Semi-revert Aug 25 change:
	Make it apply only for BLKmode, not integral modes.

	* stmt.c (all_cases_count, mark_seen_cases):  New functions.
	(BITARRAY_TEST, BITARRAY_SET):  New macros.  Used (mainly by
	Chill) to check all cases are covered (for enums and ranges).
	(check_for_full_enumeration_handling):  Re-write to use the
	new functions, now that we have them.

Wed Aug 31 19:19:29 1994  Richard Earnshaw  (rwe@pegasus.esprit.ec.org)

	* combine.c (nonzero_bits, cases DIV, MOD, UDIV, UMOD): Declare
	op0_maybe_minusp and op1_maybe_minusp as HOST_WIDE_INT.

Wed Aug 31 18:54:54 1994  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* expmed.c (store_split_bit_field): Always adjust arg to 
	extract_fixed_bit_field in BYTES_BIG_ENDIAN case.

Wed Aug 31 02:49:34 1994  Roland McGrath  <roland@churchy.gnu.ai.mit.edu>

	* config/i386/gnu.h (LIB_SPEC): New macro.

Tue Aug 30 16:35:23 1994  Jason Merrill  (jason@deneb.cygnus.com)
 
        * toplev.c (lang_options): Add -W{no-,}reorder.
 
Tue Aug 30 13:55:58 1994  Jeffrey A. Law  (law@snake.cs.utah.edu)

	* combine.c (simplify_comparison, case GEU): Add missing break.

Mon Aug 29 17:50:55 1994  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* vax.md (extv, extzv): Don't use ROTL when field is outside
	boundaries of a word.

Mon Aug 29 11:43:18 1994  Kresten Krab Thorup  (krab@akvavit.next.com)

	* objc/sendmsg.c (get_imp): Don't inline on 386.

Sun Aug 28 18:56:03 1994  Andrew McCallum (mccallum@cs.rochester.edu)

	* objc/class.c (objc_get_meta_class):  New function.

Sat Aug 27 23:13:53 1994  Michael Meissner  (meissner@osf.org)

	* i386/i386.c (legitimate_address_p): If index register is either
	the arg pointer or the stack pointer, and there is no scale
	factor, swap with the base register.

	* i386/i386.h (REG_CLASS_CONTENTS): Don't allow the arg pointer
	register as an index register, since the frame could be omitted,
	and the stack pointer is not valid as an index.

	* i386/i386.md (mov*, movstrict*): Don't create pushes of memory
	values when creating insns, let the combiner create a push of a
	memory value if -m386.  In particular, pushes of byte values was
	broken because there is no pattern to recognize such a push.

Fri Aug 26 16:03:09 1994  Michael Meissner  (meissner@osf.org)

	* i386/i386.h (MASK_*): Add masks for all of the switches.
	(TARGET_*): Use appropriate MASK_* instead of a number.  Add
	-mdebug-addr switch to debug GO_IF_LEGITIMATE_ADDRESS,
	-mno-wide-multiply to turn off widening multiplies, and -mno-move
	to allow integer move insns to generate direct memory to memory
	copies, which reload will fix up.  Add TARGET_386 which is not of
	TARGET_486.
	(REG_ALLOC_ORDER): Go to the order used in 2.5.8, eax, edx, ecx, ...
	Add a comment describing the tradeoffs.
	(REG_OK*): Add strict and non-strict versions of the macros that
	are always present, and REG_OK_STRICT chooses between the two
	inner macros.
	(GO_IF_LEGIMATE_ADDRESS): Move processing to legitimate_address_p
	function.
	(LEGITIMIZE_ADDRESS): Move processing to legitimize_address
	function.
	(function declarations): Add function declarations for all extern
	functions in i386.c.

	* i386/i386.c (asm_add): Add support in case adding by 1 or -1 to
	use inc/dec.
	(various): Change TARGET_486 -> !TARGET_386.
	(legitimate_address_p): Move GO_IF_LEGITIMATE_ADDRESS processing
	here from i386.h.  Combine OSF/rose support from osfrose.h through
	the use of conditional macros.  Only recognize addresses in
	canonical formats, code adapted from the i960 port.  Add tracing
	if -mdebug-addr.
	(legitimize_address): Move LEGITIMIZE_ADDRESS here from i386.h,
	and add adaptations from the i960 port.
	(convert_387_op): Remove unused function.

	* i386/i386.md (various): Remove cast to char * of output
	functions, since i386.h now declares them all properly.  Change
	TARGET_486 tests to !TARGET_386 and !TARGET_486 to TARGET_386.
	(movsi, movstricthi, movhi, movstrictqi, movqi, movdi): Add
	define_expand wrappers to prevent memory<->memory moves from being
	generated unless -mno-move is used.  On 486's do not allow push of
	memory insns to be generated unless -mno-move.
	(movdi): For movdi patterns, add 2 (clobber (match_scratch...))
	declarations to allow memory<->memory moves with non-contigous
	registers, so that reload don't abort if it can't make a DI
	register.
	(umulsidi3, mulsidi3): Don't allow pattern if -mno-wide-multiply.
	(smultsi3_highpart, umultsi3_highpart): Add patterns to make
	division by constants generate better code.

	* i386/osfrose.h (MASK_*): Use octal to define bitmasks, not hex,
	for compatibility with i386.h.
	(NO_IMPLICIT_EXTERN_C): Define.
	(LONG_DOUBLE_TYPE_SIZE): Explicitly define to be 64 instead of
	just #undef'ing it.
	(GO_IF_LEGITIMATE_ADDRESS): Delete, merged with common i386 code.
	(ASM_FILE_END): Print -fschedule-insns and -fschedule-insns2 in
	ident string if those options are used.
	(REAL_LD_FILE_NAME): Delete.
	(ASM_OUTPUT_DOUBLE): Delete, use the common macros.
	(ASM_OUTPUT_FLOAT): Ditto.
	(ASM_OUTPUT_LONG_DOUBLE): Ditto.

Thu Aug 25 17:15:18 1994  Per Bothner  (bothner@kalessin.cygnus.com)

	* expmed.c (store_bit_field):  Always store into multi-word
	bitfields starting with low addresses.  (Old code was
	incompatible with operand_subword_force on big-endian targets.)

Thu Aug 25 18:31:20 1994  Antti Miettinen  (amiettin@ntc.nokia.com)

	* m68k/lynx.h (CALL_USED_REGS): Add d2 and d3 as call-used.

Thu Aug 25 11:30:44 1994  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* cse.c (record_jump_cond): Don't do anything if OP0 and OP1
	are already equivalent.

	* rtlanal.c (may_trap_p, case EXPR_LIST): New case.

	* c-common.c (shorten_compare): Don't issue warning if both
	operands constants and the signedness doesn't affect the 
	comparison results.

	* configure: Refine handling and error-checking of positional args.

	* print-tree.c (print_node): Print more flags for types and decls.

	* c-typeck.c (type_lists_compatible_p): Treat transparent unions
	just like unnamed ones.

Wed Aug 24 19:34:52 1994  Charles Hannum  (mycroft@duality.gnu.ai.mit.edu)

	* configure: Rearrange handling of NetBSD ports to use the standard
	`cpu-vendor-os' format.
	* config.sub: Recognize names of NetBSD ports that do not correspond
	to a CPU name.

Wed Aug 24 18:43:30 1994  Philippe De Muyter (phdm@info.ucl.ac.be)

	* print-tree.c (print_node_brief, print_node): Use assignment instead
	of initialization for aggregate local variable REAL_VALUE_TYPE d.

Wed Aug 24 18:28:52 1994  Ian Lance Taylor  (ian@cygnus.com)

	* config/svr4.h (ASM_OUTPUT_SECTION_NAME): Define.
	* config/sparc/sysv4.h (ASM_OUTPUT_SECTION_NAME): Output #alloc to
	set SHF_ALLOC in section flags.

Wed Aug 24 17:45:19 1994  Jim Wilson  (wilson@sphagnum.cygnus.com)

	* c-parse.in (parmlist_2): Give error for function with only
	ELLIPSIS as an argument.

Wed Aug 24 17:36:22 1994  H.J. Lu (hjl@nynexst.com)

	* i386/linux.h (STARTFILE_SPEC): Add %{static:-static}.

Wed Aug 24 14:34:37 1994  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* calls.c (expand_call): Check for variable-sized return value
	in proper place.

	* c-typeck.c (default_conversion): Don't substitute constant
	value if array since will return address.

	* configure (LANG_MAKEFILE): Include lang/Makefile.in in list.

	* alpha.h (EXTRA_CONSTRAINT): Add new letter, `R'.
	(ENCODE_SECTION_INFO): Don't check TREE_ASM_WRITTEN.
	(PREDICATE_COSTS): Add call_operand.
	* alpha.c (call_operand): New function.
	(output_epilog): Don't set SYMBOL_REF_FLAG of current function.
	* alpha.md (call): Rework to use macro version of jsr.
	* osf2.h (LINK_SPEC): Don't define; should never have been.

	* c-typeck.c (push_init_level): Don't blow up if construct_type
	is null (can happen with missing brace).

Wed Aug 24 10:49:35 1994  Michael Meissner  (meissner@osf.org)

	* i386/i386.h (REG_ALLOC_ORDER): Restore previous version which
	allocates edx first, then ecx, eax, ...  This is because perl
	doesn't build when the order is eax, ecx, edx...

Tue Aug 23 09:20:16 1994  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* configure: Restore old behavior of positional arguments.
	Add new argument, --noguess.
	config.guess now guesses BUILD, not HOST; HOST defaults from BUILD.
	Always compare canonical names, not user-specified names.
	Numerous minor changes in the messages output to make the
	configuration chosen clearer.

Tue Aug 23 02:01:42 1994  Richard Stallman  <rms@mole.gnu.ai.mit.edu>

	* config.sub: Move m68k-ccur handling to proper part of file.
	Canonicalize cpu type pentium into i486.  (Change it to i586 later.)

Mon Aug 22 18:41:59 1994  Steve Chamberlain  (sac@jonny.cygnus.com)

	* sh/sh.c (find_barrier):  Calculate the size of larger than
	SI moves correctly.
	(general_movsrc_operand): Allow label_refs plus const.
	(sh_function_arg_partial_nregs, sh_function_arg): Pass BLKmode
	objects in partial regs.
	* sh.h (TARGET_DEFAULT): Turn off BIGTABLE_BIT.
	(EXTRA_CONSTRAINT_Q): Allow label_refs plus const.
	(READONLY_DATA_SECTION_ASM_OP, EXTRA_SECTIONS, rdata_section):
	Delete rdata section and refs.
	* sh.md (dimode split): Don't allow a Q constraint source.

Sun Aug 21 23:15:35 1994  Jeffrey A. Law  (law@snake.cs.utah.edu)

	* pa.h (FUNCTION_ARG): Use indirect calling conventions when
	TARGET_LONG_CALLS is in effect.

Sat Aug 20 13:31:34 1994  Jim Wilson  (wilson@cygnus.com)

	* sched.c (sched_analyze_insn): Add new parameter loop_note.
	If loop_note set, then serialize on this insn.
	(sched_analyze): New variable loop_note.  Pass to
	sched_analyze_insn.  Set it if we pass a NOTE_INSN_LOOP_BEG or
	NOTE_INSN_LOOP_END.
	(unlink_notes): Don't save away NOTE_INSN_LOOP_BEG or
	NOTE_INSN_LOOP_END notes.
	(schedule_block): Generalize code that looks for magic REG_DEAD
	notes and converts them to notes.

Sat Aug 20 12:47:21 1994  Michael Meissner  (meissner@osf.org)

	* i386.h (REG_ALLOC_ORDER): Allocate eax first, then ecx, edx, and
	then do the nromal allocation order for the remaining registers.

Fri Aug 19 20:14:35 1994  Jim Wilson  (wilson@cygnus.com)

	* tree.c (build_type_variant): Only return existing type if it
	also has the same TYPE_NAME.

	* irix5.h (NO_IMPLICIT_EXTERN_C): Comment out.

Fri Aug 19 16:41:43 1994  Per Bothner  (bothner@kalessin.cygnus.com)

	* fixproto:  Use $FIX_HEADER macro instead of calling
	fix-header directly in 2nd location.

Fri Aug 19 17:34:19 1994  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* expr.c (emit_move_insn_1): Never make a no-conflict block.

	* tree.h (struct tree_type): New field transparent_union_flag.
	(struct tree_decl): New field transparent_union.
	({DECL,TYPE}_TRANSPARENT_UNION): New macros.
	* c-common.c (decl_attribute): Handle "transparent_union" attribute.
	* function.c (assign_parms): If parm is transparent union, use
	type of first field.
	* calls.c (expand_call): Likewise.
	* integrate.c (function_cannot_inline): Don't inline if any
	parm is a transparent union.

Fri Aug 19 12:01:11 1994  Ian Lance Taylor  (ian@cygnus.com)

	* fixincludes: Canonicalize ${INPUT} to avoid automounter
	problems.

Fri Aug 19 11:31:24 1994  Kresten Krab Thorup  (krab@akvavit.next.com)

	* objc-act.c (build_selector_translation_table): Reset
	current_function_decl after hack_function_prototype build it.
	(build_module_descriptor): Return constructor name from functions
	decl_rtl. 

Thu Aug 18 17:23:18 1994  Per Bothner  (bothner@spiff.gnu.ai.mit.edu)

	* README.FRESCO:  New file.  Notes about compiling the Fresco
	toolkit with g++.

Thu Aug 18 14:10:22 1994  Jim Wilson  (wilson@cygnus.com)

	* combine.c (distribute_notes, case REG_UNUSED): Ignore notes when
	from_insn != i3 only if the notes would remain as REG_UNUSED notes.

Wed Aug 17 18:31:43 1994  Holger Teutsch  (holger@hotbso.rhein-main.de)

	* clipper.h (CLIPPER_ARG_SIZE): Return size in bytes.
	(FUNCTION_ARG_ADVANCE): Fix argument alignment processing.

Wed Aug 17 18:03:54 1994  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* fx80.md (casesi_2): Operand 0 is HImode; add SIGN_EXTEND
	when adding to pc.
	(casesi): Operand 0 is HImode.
	(unnamed PC addition pattern): Add SIGN_EXTEND to add HImode
	offset to SImode PC.
	* m68k.md (tablejump): Add SIGN_EXTEND to HImode offset
	so can add to SImode PC.
	Likewise for matching pattern.
	* cse.c (fold_rtx): When folding tablejump, allow LABEL_REF
	to be in arg0; also allow other arg to be MINUS, not just be
	equivalent to it.

Mon Aug 15 19:19:11 1994  Paul Eggert  (eggert@twinsun.com)

	* cccp.c (index0): New function.
	(trigraph_pcp): Use index0 instead of index, so that a null
	byte doesn't suppress further trigraph preprocessing.

	* cccp.c (rescan, do_ident): Pass more accurate size request
	to check_expand.

	* cccp.c (main): Don't dump core if given -pcp, -MD, or -MMD
	without following arg.

Mon Aug 15 17:56:38 1994  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* stmt.c (expand_elseif): New function.

Mon Aug 15 14:16:18 1994  Ian Lance Taylor  (ian@cygnus.com)

	* configure: If the host is guessed, and the target name is a
	prefix of the host name, then use the target name as the host
	name.

Mon Aug 15 13:35:24 1994  Stan Shebs  (shebs@andros.cygnus.com)

	* m68k/m68k-coff.h: New file.

Sun Aug 14 00:28:15 1994  Andrew McCallum  (mccallum@vein.cs.rochester.edu)

	* objc/encoding.c (objc_sizeof_type): Assign from ROUND,
	don't increment.  Remove ; after while to fix infinite loop.
	Add float and double cases.
	(objc_alignof_type):  Add float and double cases.
	* objc/selector.c (): Use __objc_selector_names, not
	__objc_selector_array.
	(sel_types_match): New function.
	(sel_get_typed_uid): Use sel_types_match.  Change strcmp to !strcmp.

Sun Aug 14 21:54:29 1994  Jeffrey A. Law  (law@snake.cs.utah.edu)

	* pa.h (ASM_OUTPUT_ALIGNED_COMMON, ASM_OUTPUT_ALIGNED_LOCAL):
	Define.
	(ASM_OUTPUT_COMMON, ASM_OUTPUT_LOCAL): Delete.

	* pa.c (hppa_expand_prologue): Avoid writing outside the current
	stack boundary in code to handle large stack frames.

Sun Aug 14 18:55:51 1994  Jim Wilson  (wilson@cygnus.com)

	* unroll.c (loop_iterations): Use PREV_INSN not prev_nonnote_insn.

	* bsd-5.h (ASM_OUTPUT_NEWLINE): Delete.
	(ASM_OUTPUT_ASCII): Define.
	* mips-5.h, svr3-5.h, svr4-5.h: Likewise.
	* mips.h (ASM_OUTPUT_NEWLINE): Delete.
	(ASM_OUTPUT_ASCII): Don't use ASM_OUTPUT_NEWLINE.

	* va-mips.h (va_start): Add cast to __gnuc_va_list type.

	* flow.c (mark_used_regs): When adding REG_DEAD notes, check for
	the case where a multiple register hard reg overlaps a register
	set by the insn.
	* sched.c (attach_deaths): Likewise.
	* combine.c (distribute_notes, case REG_DEAD): Add another
	find_reg_fusage call.

	* unroll.c (calculate_giv_inc): Handle constants loaded with IOR.

Sun Aug 14 16:40:04 1994  Richard Stallman  <rms@mole.gnu.ai.mit.edu>

	* cccp.c (skip_if_group): New arg op.  All callers changed.
	If output_conditionals is true, output text of failed conditionals.
	(conditional_skip): New arg op.  All callers changed.
	(main): Handle -ifoutput option.

Sun Aug 14 05:49:29 1994  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* print-tree.c (print_node{,_brief}): Use REAL_VALUE_TO_DECIMAL
	to print REAL_CST ifdef REAL_ARITHMETIC.

	* reload1.c (count_possible_groups) Pass CLASS as arg and only
	try to find groups of that class.

	* configure: If config.guess fails and target specified, use as host. 
	Print a message when making a cross-compiler.

Sat Aug 13 17:12:30 1994  Jim Wilson  (wilson@cygnus.com)

	* configure (sparc-*-sunos4.0*): New configuration.
	* t-sunos4: Rename file to t-sunos41.
	* t-sunos40: New file.

Sat Aug 13 13:50:22 1994  Jeffrey A. Law  (law@snake.cs.utah.edu)

	* reload1.c (emit_reload_insns): Handle a secondary input reload
	which needs to use secondary memory too.

Fri Aug 12 18:53:24 1994  Ian Lance Taylor  (ian@cygnus.com)

	* mips/mips.c (override_options): If neither -mcpu= nor -mipsN was
	used, and MIPS_CPU_DEFAULT is defined, set mips_cpu to
	MIPS_CPU_DEFAULT and set mips_cpu_string to
	MIPS_CPU_STRING_DEFAULT.

Fri Aug 12 10:54:35 1994  Stan Cox  (coxs@dg-rtp.dg.com)

	* m88k/dgux.h, m88k/dguxbcs.h (ASM_SPEC,CPP_SPEC): 
	Made -pipe work for -msvr4. Added -D*_TARGET definitions.

	* m88k.c (emit_bcnd): Improved code generated by changing cmp/bbx
	instruction pair to single bcnd instruction

Fri Aug 12 07:52:20 1994  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* cse.c (set_nonvarying_address_components): If BASE is CONST_INT,
	add value to start and set BASE to const0_rtx.
	(refers_to_mem_p): Don't do it here.

	* function.c (expand_function_start): Add redundant copy to
	static_chain_incoming_rtx if SMALL_REGISTER_CLASS so inlining
	works properly.
	* integrate.c (expand_inline_function): Use single_set when
	appropriate.
	Delete insn that sets static_chain_incoming_rtx before its use.
	(subst_constants): Treat virtual reg as constant.

	* flow.c (mark_used_regs): Only show changes size if one mode is
	integral.
	* stupid.c (stupid_mark_refs): Likewise.
	* combine.c (simplify_rtx, case FLOAT_TRUNCATE): Remove
	redundant float_truncate.
	* rs6000.md (movsf): Don't truncate if not register; clean up.

	* c-decl.c (duplicate_decls): Suppress -Wredundant-decls warning
	if we have already given an error.

Thu Aug 11 18:44:25 1994  Jason Merrill  (jason@deneb.cygnus.com)

        * stmt.c (expand_anon_union_decl): Fix up the alignment and mode
        of the member VAR_DECLs.

Thu Aug 11 13:36:14 1994  Per Bothner  (bothner@kalessin.cygnus.com)

	* tree.c (stabilize_reference):  Handle COMPOUND_EXPR.

	* fix-header.c (write_rbrac):  If NO_IMPLICIT_EXTERN_C is defined,
	add extern "C" { ... } to added prototypes.  (Needed for hpux.)

Thu Aug 11 14:23:59 1994  Paul Eggert  (eggert@twinsun.com)

	* cccp.c (rescan): Fix botches with `-lint': the output buffer
	pointer was not recached properly, leading to lost output.
	Also, buffer overrun was possible.

	* cccp.c (dump_defn_1): Skip newlines and strings correctly.

Thu Aug 11 14:13:17 1994  Niklas Hallqvist  (niklas@appli.se)

	* configure (m68k-*-netbsd*): New target, like others.

Thu Aug 11 14:09:23 1994  David Mosberger-Tang  (davidm@piston.cs.arizona.edu)

      * alpha.h (FUNCTION_PROFILER):  Load global pointer from $27, not $26. e
 
Thu Aug 11 13:52:15 1994  Walter Misar  (misar@rbg.informatik.th-darmstadt.de)

	* m68k/hp320.h (NO_DOT_IN_LABEL): Define if HPUX_ASM.

Thu Aug 11 13:12:12 1994  David Mosberger-Tang  (davidm@cs.arizona.edu)

	* alpha.h (BLOCK_PROFILER): Use $26 and $27 instead of $0 and $1.

Thu Aug 11 13:09:36 1994  Antti Miettinen  (amiettin@trshp.trs.ntc.nokia.com)

	* config/lynx.h (ASM_OUTPUT_SOURCE_LINE): Call assemble_name.

Thu Aug 11 12:57:22 1994  Stephen L Moshier  (moshier@world.std.com)

	* expr.c (expand_builtin): Relegate sin and cos to ffast-math.

Thu Aug 11 12:45:20 1994  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* flow.c (find_auto_inc): Ensure that all proposed changes to
	insns are valid before commiting to the auto-inc.

	* calls.c (expand_call): Ensure we call force_operand on
	structure_value_addr.

	* configure: Use config.guess to get default value for host,
	not target.

Thu Aug 11 12:43:24 1994  Robert Wilhelm  (Robert.Wilhelm@physik.tu-muenchen.de)

	* Makefile.in (mostlyclean): Add missing -f.

Tue Aug  9 02:02:07 1994  Jeffrey A. Law  (law@snake.cs.utah.edu)

	* pa.md (default set high): Do not accept function label arithmetic
	as a valid operand.
	(default lo_sum): Likewise.
	* pa.c (hppa_legitimize_address): Do nothing with function label
	arithmetic.
	(emit_move_sequence): Split up function label arithmetic so that
	function's address is loaded first, then constant part is added to
	the function's address.
	(is_function_label_plus_const): New function.

Mon Aug  8 19:57:05 1994  Matthias Pfaller  (leo@marco.de)

	* ns32k.md (all patterns that use ins/inss and ext/exts):
	Disallow use of these instructions when -mnobitfield is
	specified.
	* ns32k.h (TARGET_BITFIELD): New macro.
	(TARGET_SWITCHES): Support for TARGET_BITFIELD.
	* ns32k/netbsd.h (TARGET_DEFAULT): Added -mnobitfield.
	(CPP_PREDEFINES): Added -Dpc532.
	(WCHAR_{TYPE, UNSIGNED, TYPE_SIZE}): Changed to match new definition
	in NetBSD 1.0.
	* ns32k.c (print_operand_address): A patch for 2.5.8 ended up at the
	wrong place.  Moved.

Mon Aug  8 19:42:09 1994  Paul Eggert  (eggert@twinsun.com)

	* cccp.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)'.

Mon Aug  8 16:32:37 1994  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* fix-header.c (write_rbrac): Set up to use fixed headers
	if __USE_FIXED_HEADERS__ is defined.

	* reload1.c (emit_reload_insns): Always clear new_spill_reg_store.

	* reload.c (find_reloads): Force reload for paradoxical SUBREG
	of MEM if BYTES_BIG_ENDIAN.

	* m68k/hp320.h (READONLY_DATA_SECTION): Remove definition.

	* function.c (expand_function_start): Only use
	static_chain_incoming_rtx once if it is a REG and we 
	have SMALL_REGISTER_CLASSES.

	* local-alloc.c (find_free_reg): Fix typo in last change.
	* rs6000.h (CLASS_CANNOT_CHANGE_SIZE): New macro.

Sun Aug  7 08:54:42 1994  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* regs.h (reg_changes_size): Add declaration.
	* flow.c (reg_changes_size): New variable.
	(allocate_for_life_analysis): Allocate and initialize it.
	(mark_used_regs, case SUBREG): Set it.
	* local-alloc.c (qty_changes_size): New variable.
	(alloc_qty{,_for_scratch}, update_qty_class): Set it.
	(local_alloc): Allocate it.
	(find_free_reg): If CLASS_CANNOT_CHANGE_SIZE, avoid its registers
	if qty_changes_size.
	* global.c (find_reg) If CLASS_CANNOT_CHANGE_SIZE, avoid its
	registers if reg_changes_size.
	* stupid.c (regs_change_size): New variable.
	(stupid_life_analysis): Alloc, init and pass it to stupid_free_reg.
	(stupid_mark_regs): Set it.
	(stupid_find_reg): New arg, CHANGES_SIZE; avoid regs
	in CLASS_CANNOT_CHANGE_SIZE if defined and CHANGES_SIZE nonzero.
	* reload.c (push_reload): Make test in LOAD_EXTEND_OP case more
	precise; handle CLASS_CANNOT_CHANGE_SIZE.
	(find_relods): When setting force_reloads, make LOAD_EXTEND_OP
	case more precise.
	* alpha.h (CLASS_CANNOT_CHANGE_SIZE): New macro.

	* reload1.c (eliminate_regs, case SUBREG): Add USE of pseudo
	so we don't improperly delete an output reload.

Fri Aug  5 15:08:39 1994  Jason Merrill  (jason@deneb.cygnus.com)

        * expr.c (expand_expr, COND_EXPR case): Use truthvalue_conversion
        to make the condition for running cleanups acceptable to
        invert_truthvalue.

Fri Aug  5 12:29:42 1994  Jim Wilson  (wilson@cygnus.com)

	* expmed.c (expand_mult): Accept DImode for synth_mult only if
	CONST_DOUBLE_HIGH is zero.  Reject negative values for synth_mult
	if the mode is larger than HOST_BITS_PER_INT.  Don't do the
	negate_variant if the mode is larger than HOST_BITS_PER_INT.

Fri Aug  5 12:23:17 1994  Stephen L Moshier  (moshier@world.std.com)

	* gbl-ctors.h (DO_GLOBAL_CTORS_BODY): Use long instead of
	HOST_WIDE_INT.

Fri Aug  5 12:18:18 1994  Kaveh R. Ghazi  (ghazi@caip.rutgers.edu)

	* configure: In subdirectories, make link to include directory.
	* Makefile.in (distclean): Delete it.

Thu Aug  4 17:21:02 1994  Jason Merrill  (jason@deneb.cygnus.com)

        * expr.c (defer_cleanups_to): Put back line which was mistakenly
        removed.

Wed Aug  3 21:37:31 1994  Doug Evans  (dje@cygnus.com)

	* sparc.c (v9 sparc_builtin_saveregs): Save quadword fp regs on
	16 byte boundaries.  Handle non-zero number of named fp args.
	* va-sparc.h (v9 va_start): Pass an arg to __builtin_next_arg.
	(v9 va_arg): Advance over float's.

Wed Aug  3 11:10:32 1994  Ian Lance Taylor  (ian@mole.gnu.ai.mit.edu)

	* fixincludes: Changes for glibc.  In the main loop, don't fix
	files which contain the string ``This file is part of the GNU C
	Library''.  Don't include <stdarg.h> in <stdio.h> if <stdio.h>
	contains the string ``__need___va_list''.  In <stdio.h>, don't
	change GNUC_VA_LIST to GNUC_DUMMY_VA_LIST.  Don't add extern "C"
	to <assert.h> if it contains the string ``__BEGIN_DECLS''.  Don't
	add multiple inclusion protection to <time.h> or <sys/time.h> if
	they contain the string ``#ifndef''.

Tue Aug  2 18:38:46 1994  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* cse.c (simplify_unary_operation): Clean up some mode and
	size checks with CONST_DOUBLEs; TRUNCATE should do nothing.

	* combine.c (subst_prev_insn): Remove variable and all uses.

Tue Aug  2 14:42:29 1994  Doug Evans  (dje@canuck.cygnus.com)

	* sparc.h (V9_SWITCHES): Add -mmedlow, -mmedany.
	(TARGET_OPTIONS): Delete.
	(CONDITIONAL_REGISTER_USAGE): Don't unfix %g4 if -mmedany.
	* sparc.c (sparc_code_model): Delete.
	(sparc_override_options): Code model flags only useable with v9.

	* sparc.h (enum reg_class): New values EXTRA_FP_REGS,
	GENERAL_OR_EXTRA_FP_REGS for the v9 case.
	(REG_CLASS_NAMES): Likewise.
	(REG_CLASS_CONTENTS): Likewise.
	(REGNO_REG_CLASS): Handle EXTRA_FP_REGS.
	(REG_CLASS_FROM_LETTER): Likewise, as `e'.
	Treat `e' like `f' in v8 case.
	(FP_REG_CLASS_P): New macro.
	(PREFERRED_RELOAD_CLASS): Use it.
	(SECONDARY_INPUT_RELOAD_CLASS, SECONDARY_OUTPUT_RELOAD_CLASS,
	SECONDARY_MEMORY_NEEDED, CLASS_MAX_NREGS, REGISTER_MOVE_COST):
	Likewise.
	* sparc.md (all DF/TFmode patterns): Use `e' in contraint field
	instead of `f'.

Mon Aug  1 20:05:51 1994  Roland McGrath  <roland@churchy.gnu.ai.mit.edu>

	* config/i386/gnu.h: New file.
	* configure (i[34]86-*-gnu*): Deal with this on its own, not like
	i[34]86-*-mach*.  Use i386/gnu.h and t-libc-ok; set gnu_ld and
	gas, and disable fixincludes.

Mon Aug  1 19:27:44 1994  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* tree.c (permanent_allocation): When freeing to
	momentary_function_firstobj, set momentary_firstobj to be
	the next available location (i.e., momentary_function_firstobj).

Mon Aug  1 18:52:40 1994  Chris Arthur  (csa@gnu.ai.mit.edu)

	* stddef.h: Handle _BSD_WCHAR_T_ like _WCHAR_T_, since
	at least BSD/386 1.1 uses the former instead of the latter.
	If _BSD_RUNE_T_ is defined, then define rune_t when we define
	wchar_t.  Test definedness of _GCC_SIZE_T as well as
	_GCC_SIZE_T_; likewise for _GCC_PTRDIFF_T and _GCC_WCHAR_T.

Mon Aug  1 05:20:44 1994  Jeffrey A. Law  (law@snake.cs.utah.edu)

	* pa-ghpux.h, pa-hpux.h (LINK_SPEC): Any -g argument implies
	static linking.

Sun Jul 31 17:19:37 1994  Jason Merrill  (jason@deneb.cygnus.com)

        * integrate.c (expand_inline_function): Don't fall down trying to
        pass things by invisible reference.

Sun Jul 31 06:56:46 1994  Pat Rankin  (rankin@eql.caltech.edu)

	* cccp.c (my_strerror): New function.
	(error_from_errno, perror_with_name): Use it.

Sat Jul 30 12:59:01 1994  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* fold-const.c (fold_truthop): Apply masks to constants.

	* print-tree.c (print_node{,_brief}): Use correct printf code to
	print INTEGER_CST if HOST_WIDE_INT is wider than int.

	* expmed.c ({store,extract}_bit_field): Don't use bitfield insn
	if OP0 is register and bitfield spans it.

	* m88k.c (arith64_operand): Integer CONST_DOUBLE is not DImode.
	* sparc.c (reg_or_0_operand): Likewise.
	* ns32k.c, pa.c (print_operand): Likewise.
	* fx80.h, gmicro.h, ns32/{genix,merlin}.h (PRINT_OPERAND): Likewise.
	* m68k/crds.h, m68k/news.h, pyr.h (PRINT_OPERAND): Likewise.

	* alpha.h (CASE_VECTOR_PC_RELATIVE): Define.
	(ASM_OUTPUT_ADDR_VEC_ELT): Abort.
	(ASM_OUTPUT_ADDR_DIFF_ELT): Now what used to be previous definition.
	* alpha.md (tablejump): Rework to look like normal add but verify
	that label is for next insn and is tablejump; look for ADDR_DIFF_ELT.
	* cse.c (fold_rtx, case MEM): Surround TRUNCATE for jump table
	entry with a CONST.
	(fold_rtx, case '1'): Handle operand 0 of a CONST.
	(fold_rtx, case PLUS): Handle (const (minus (label_ref) (label_ref))).

Fri Jul 29 19:27:17 1994  Lee Iverson  (leei@ai.sri.com)

	* c-decl.c (finish_decl): Preserve initialializer if iterator.

Fri Jul 29 19:07:23 1994  Hallvard B Furuseth  (h.b.furuseth@usit.uio.no)

	* libgcc2.c: Add declaration of ctime.
	* bc-emit.c (bc_sym_write): Change %d to %lu in printf calls.
	* fix-header.c (write_{l,r}brac): Specify return type of int.
	* tree.c (change_main_variant): Return type now void.
	* varasm.c (bc_output_constructor): Return type now rtx.

Fri Jul 29 18:33:48 1994  Ken Duda  (kjd@cache.crc.ricoh.com)

	* c-typeck.c (build_unary_op, case *INCREMENT_EXPR):
	Add size in bytes, not value of sizeof.

Fri Jul 29 17:36:38 1994  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* function.c (expand_function_start): Initialize VALUE_ADDRESS.

	* romp.md (tst?f): Use CONST0_RTX instead of incorrect call
	to immed_real_const_1.

	* expr.c (move_block_to_reg): Do nothing if NREGS == 0.

Fri Jul 29 17:17:18 1994  Tom Tromey  (tromey@busco.lanl.gov)

	* cccp.c (special_symbol, do_xifdef): Don't access value.defn
	of a T_CONST.

Thu Jul 28 17:19:32 1994  Jason Merrill  (jason@deneb.cygnus.com)

        * gbl-ctors.h (DO_GLOBAL_CTORS_BODY): Reverse order of execution
        of constuctor lists.
        * config/svr3.h (DO_GLOBAL_CTORS_BODY): Ditto.

        * libgcc2.c (__do_global_dtors): Reverse order of execution of
        destructor lists.

Thu Jul 28 19:56:30 1994  Jim Pendergraft  (jimp@dg-rtp.dg.com)

	* dwarfout.c (output_decl, case FUNCTION_DECL): Corrected
	and simplified code that determined when to generate
	varargs or ANSI stdargs variable length parameter list
	DWARF information.

Thu Jul 28 19:38:57 1994  Andreas Schwab  (schwab@issan.informatik.uni-dortmund.de)

	* m68k.md (extv, extzv): In patterns that will use movb and
	movw, ensure size is 8 or 16.

Thu Jul 28 19:28:31 1994  David Robinson  (drtr@mail.ast.cam.ac.uk)

	* expr.c (expand_expr, case CONJ_EXPR): Use correct mode for
	parts of a complex expression.

	* optabs.c (expand_binop, case MULT [complex]) Fix typo.

Thu Jul 28 19:21:38 1994  Uwe Seimet  (seimet@chemie.uni-kl.de)

	* am68k/atari.h (FUNCTION_VALUE): New override.

Thu Jul 28 17:27:38 1994  Paul Eggert  (eggert@twinsun.com)

	* Makefile.in (c-lex.o, distdir-start):
	Depend on $(srcdir)/c-gperf.h, not c-gperf.h.

Thu Jul 28 15:14:33 1994  Oliver Kellogg  (okellogg@salyko.cube.net)

	* m1750.inc (DNR.M): Add missing macro.

Thu Jul 28 13:02:56 1994  Kresten Krab Thorup  (krab@akvavit)

	* objc/misc.c (__objc_xcalloc): Remove declaration of bzero.

Thu Jul 28 07:29:52 1994  Markus Wild  (mw@eunet.ch)

	* c-common.c (decl_attributes): Correct string check for "format"
	to include unsigned and signed char.

Thu Jul 28 07:11:36 1994  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* reload1.c (compare_spill_regs): Simplify and return zero if
	registers are the same.

	* c-decl.c (finish_struct): Don't look at alignment of error_mark_node.

	* combine.c (try_combine): Don't make a MULT if none of the insns
	in our input had one.

Wed Jul 27 19:06:53 1994  R Bowler  (rbowler@cix.compulink.co.uk)

	* i370/mvs.h (ASM_OUTPUT_ASCII): Fix bug when first character
	of string constant is single quote.

Wed Jul 27 22:44:32 1994  Jason Merrill  (jason@deneb.cygnus.com)
  
        * m68k/next.h: #undef PCC_STATIC_STRUCT_RETURN.

        * alpha/alpha.h: #define NO_IMPLICIT_EXTERN_C.

Wed Jul 27 14:06:37 1994  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* expmed.c (expand_mult): Properly set ADD_TARGET for add_variant.

	* alpha.h (INITIAL_ELIMINATION_OFFSET): Properly compute offset
	between	AP and SP when get_frame_size and
	current_function_pretend_args_size are not a multiple of 16 bytes.

	* expmed.c (expand_divmod): Don't make REG_NOTE if last insn's
	destination isn't QUOTIENT.

Tue Jul 26 19:45:54 1994  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* expr.c (expand_expr, case ARRAY_REF): Don't fold L"foo"[2].

Tue Jul 26 14:10:52 1994  Per Bothner  (bothner@kalessin.cygnus.com)

	* config.sub:  Refer to NeXT's operating system as nextstep.

Tue Jul 26 13:50:37 1994  Jim Wilson  (wilson@cygnus.com)

	* c-typeck.c (process_init_element): Do not call push_init_level
	if the value is error_mark_node.

	* iris5.h (NO_IMPLICIT_EXTERN_C): Define.

Mon Jul 25 00:20:36 1994  Chris Arthur  (csa@gnu.ai.mit.edu)

	* configure (canon_target): add cases to recognize BSD/386
	specifically, so we can use a tm_file that will cause __bsdi__
	to get defined (since emacs, among other things, needs it).

	* config/i386/bsd386.h: New.  Use 386bsd.h, and just override
	CPP_PREDEFINES (add -Dbsdi) and WCHAR stuff.

Sat Jul 23 16:30:12 1994  Kaveh R. Ghazi  (ghazi@caip.rutgers.edu)

	* fixinc.svr4: Change i860 in #if to __i860__, as with other CPUs.

Fri Jul 22 14:33:59 1994  Doug Evans  (dje@cygnus.com)

	* h8300.md (andhi3, iorhi3, xorhi3): Change constraint on
	operand 2 from `i' to `n'.

Fri Jul 22 09:30:39 1994  DJ Delorie  (dj@ctron.com)

	* configure.bat: move code to config/msdos/* (simplification)

	* config/msdos/configure.bat [new file]: moved most processing
	here so that as things get more complicated with the language
	breakouts, the top directory won't get too messy.  Sed script
	broken out to simplify processing and avoid quoting errors.
	* config/msdos/top.sed [new file]: sed script to change Makefile.in
	to Makefile in top directory (currently used for cp directory also)
	sed commands changed to handle language breakout

	* gcc.c (pexecute): use spawn*() for djgpp to ensure that quotes
	are properly preserved.  Response file code left for 16-bit
	compilers, which can't handle the long command lines that gcc
	may generate.

	* config/i386/go32.h: define NO_IMPLICIT_EXTERN_C.

Thu Jul 21 23:19:03 1994  Steve Chamberlain  (sac@wombat.gnu.ai.mit.edu)

        * sh/sh.h (TARGET_SWITCHES, PACKSTRUCT_BIT, STRUCTURE_SIZE_BOUNDARY):
        parse and handle new option.
        (LEGITIMATE_CONSTANT_P): LABEL_REFs are no longer illegal.
        (WCHAR_TYPE, WCHAR_TYPE_SIZE): New definitions.
        (HANDLE_PRAGMA): Has return.

        * sh/sh.c (add_function, seen_function): Experimental code to
        generate bsrs.
        (handle_pragma): Return final char.
        (expand_acall): Handle TARGET_BSR.
        (general_movdst_operand, general_movsrc_operand): Allow ok
        autoinc/dec.
        (bsr_operand): New function.
        (fixit): Need to fix LABEL_REFs.

        * sh/sh.md (addc): Simplify.
        (adddi3, subdi3, negdi3): Use operand_subword.
        (subc, negc): New pattern.
        (shifts): Fix constraints.

Thu Jul 21 17:59:43 1994  Jim Wilson  (wilson@cygnus.com)

	* objc-act.c (build_module_descriptor): Don't set DECL_EXTERNAL on
	current_function_decl.

	* combine.c (simplify_rtx): For (not (xor X C)) generate new rtx
	instead of modifying old rtx.

	* c-decl.c (start_function): If old_decl is NULL, then set it to
	the implicit decl if any.  Delete superfluous test from warn missing
	prototypes code.  For warn missing declarations code, only warn if
	previous decl is implicit.

Thu Jul 21 17:47:05 1994  Paul Eggert  (eggert@twinsun.com)

	* fold-const.c (fold): Don't fold X-X to 0 if X is floating point
	and !flag_fast_math.

Thu Jul 21 02:07:45 1994  Charles Levert  (charles@comm.polymtl.ca)

	* Makefile.in (stmp-multilib): Rework to handle make -n.
	(stmp-multilib-sub): New target.

Tue Jul 19 23:14:42 1994  Larry Jones  (larry.jones@sdrc.com)

	* configure (i[34]86-*-isc*): Treat isc4 like isc3.
	Remove references to nonexistant files and add extra_parts
	when needed.
	(i[34]86-*-solaris2*): Remove reference to nonexistant
	t-sco and use extra_parts instead.
	(i[34]86-*-sysv*, i860-*-sysv3*, m68k-*-sysv3*, m68k-ncr-sysv*):
	Replace t-svr3 with extra_parts.

Tue Jul 19 20:31:34 1994  Doug Evans  (dje@cygnus.com)

	* configure (find lang subdirs loop): Try to work around an
	apparent bug in bash 1.12 on linux.

	* Makefile.in (clean): Remove multilib build dirs.

	* h8300.c (print_operand, default case): Handle SFmode regs.

Mon Jul 18 22:02:53 1994  Jim Wilson  (wilson@cygnus.com)

	* sparc.c (call_operand): Use symbolic_operand not CONSTANT_P.
	(call_operand_address): Likewise.
	* sparc.md (call*): Use symbolic_operand not immediate_operand.
	Use 's' constraint not 'i' constraint.

	* toplev.c (rest_of_compilation): Clear DECL_ABSTRACT_ORIGIN if
	clear DECL_INLINE.

	* global.c (find_reg): Store divide results in temporary variables.

	* gcc.c (process_command): When have -BstageN option, pass include
	not stageN/../include to preprocessor.

Mon Jul 18 21:58:27 1994  Torbjorn Granlund  (tege@tiny.cygnus.com)

	* loop.c (move_movables): Aviod lossage when CALL_INSN_FUNCTION_USAGE
	is NULL.

Mon Jul 18 20:53:54 1994  Ian Lance Taylor  (ian@cygnus.com)

	* fixincludes: Rework required loop to avoid crash on decstation.

Thu Jul 14 09:42:23 1994  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* Version 2.6.0 released.

	* explow.c (force_reg): Don't make a REG_EQUAL note for an insn
	that doesn't set TEMP.

Wed Jul 13 17:00:35 1994  Torbjorn Granlund  (tege@rtl.cygnus.com)

	* expmed.c (expand_divmod, case CEIL_DIV_EXPR):
	Handle emit_store_flag returning 0.

Wed Jul 13 16:35:57 1994  Jim Wilson  (wilson@cygnus.com)

	* expr.c (store_field): Set MEM_IN_STRUCT_P on object and
	blk_object.

Wed Jul 13 08:40:11 1994  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* Makefile.in (distdir-start): Make tmp/ginclude and copy its files.
	(distdir-finish): Don't use -f Makefile.in.
	(gcc.xtar.gz): Add --best.

	* fold-const.c (decode_field_reference): Merge operand of
	a BIT_AND_EXPR with the mask made from the description of the field.

	* fold-const.c (fold, case MULT_EXPR): Remove last change.

Wed Jul 13 07:12:32 1994  Torbjorn Granlund  (tege@adder.cygnus.com)

	* xm-pa.h, xm-pahpux.h, xm-pahiux.h (USE_C_ALLOCA): Define.

Wed Jul 13 03:30:36 1994  Jason Merrill  (jason@deneb.cygnus.com)

        * tree.h (TYPE_NEEDS_CONSTRUCTING): New macro.
        (tree_type): Add needs_constructing_flag.
        * function.c (assign_parms): If TYPE_NEEDS_CONSTRUCTING, pass by
        invisible reference.
        * calls.c (expand_call): Ditto.

Wed Jul 13 06:49:05 1994  Simon Cooper  (scooper@hardees.rutgers.edu)

	* objc/Object.m: Include stdarg.h before stdio.h.

Tue Jul 12 21:31:59 1994  Jim Wilson  (wilson@cygnus.com)

	* c-decl.c (pushdecl): Don't call lookup_name_current_level_global
	when traditional.  When doing checks against
	IDENTIFIER_LIMBO_VALUE, also do check against
	INDENTIFIER_GLOBAL_VALUE when traditional.

	* final.c (getpwd): Declare.

Tue Jul 12 16:24:10 1994  Jeffrey A. Law  (law@snake.cs.utah.edu)

	* pa.h (GO_IF_LEGITIMATE_ADDRESS): Only allow immediate addressing
	using 5 bits to avoid losing with FP loads and stores on page zero.

Tue Jul 12 16:20:09 1994  David Edelsohn  (edelsohn@npac.syr.edu)

	* rs6000.md (ashlsi3, lshrsi3, ashrsi3): Only output low-order five
	bits for !TARGET_POWER case.

Tue Jul 12 13:06:14 1994  Jim Wilson  (wilson@cygnus.com)

	* combine.c (record_dead_and_set_regs_1): Can only handle SUBREG
	if the register is smaller or equal to BITS_PER_WORD.

	* sparc/sysv4.h (FUNCTION_BLOCK_PROFILER, BLOCK_PROFILER): Define.

	* final.c (end_final): Store full path name in .d file not just
	the filename.

	* README.IRIX5: New file.

Tue Jul 12 10:55:14 1994  Michael Meissner  (meissner@osf.org)

	* i386/osfrose.h (CC1_SPEC): If both -pic-extern/-pic-lib and
	-pic-none, use -pic-extern win, instead of -pic-none.

	* i386/osfelf.h (CC1_SPEC): Ditto.

Tue Jul 12 09:08:06 1994  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* reload.c (find_reloads): Don't try to call force_const_mem on
	a HIGH.

	* fold-const.c (fold, case MULT_EXPR): If arg is an unsigned
	CEIL_DIV_EXPR, convert to TRUNC_DIV_EXPR of a PLUS_EXPR in some cases.

	* alpha.md (ashldi3): Update pattern for (sign_extend (ashift ..))
	to match the current canonicalization.

	* explow.c (round_push, allocate_dynamic_stack_space): Avoid
	using CEIL_DIV_EXPR; add adjustment and use TRUNC_DIV_EXPR instead.

Tue Jul 12 08:12:04 1994  Richard Earnshaw (rwe11@cl.cam.ac.uk)

	* dbxout.c (dbxout_source_file): Increment source_label_number outside
	of macro expansion.

	* arm.c (reversible_cc_register): New function.
	(final_prescan_insn): Don't try to conditionalize jumps with JUMP_CLOB
	attribute.
	* arm.h (PREDICATE_CODES): Add reversible_cc_register.
	* arm.md (matcher for SFmode inequality comparison): Use cmfe, not cfm.
	(matchers for {store-flag, not-store-flag, neg-store-flag}): Output
	if-false instruction first before if-true instruction.
	(matcher for (AND store-flag x)): Only match if reversible_cc_register.
	(matcher for (IF-THEN-ELSE reg (NOT reg))): Likewise.

	* arm.h (FRAME_POINTER_REQUIRED): Always true if the function has
	nonlocal labels.
	* arm.md ({save,restore}_stack_nonlocal): Delete.

Mon Jul 11 19:29:15 1994  Oliver Kellogg  (okellogg@salyko.cube.net)

	* machmode.def (TQFmode): New mode.
	* expr.c (convert_move): Add some conversions for TQFmode.
	* varasm.c (assemble_real): Handle TQFmode output.
	* config.sub (basic_machine): Add 1750a.
	* configure (1750a-*-*): New configuration.
	* 1750a.c, 1750a.h, 1750a.md, m1750a.inc: New files.

Mon Jul 11 18:38:42 1994  Doug Evans  (dje@cygnus.com)

	Add support for the h8/300h cpu.
	* config/h8300/lib1funcs.asm: New file.
	* h8300/t-h8300 (CROSS_LIBGCC1): Use libgcc1-asm.a.
	(LIB1ASMSRC, LIB1ASMFUNCS, LIB2FUNCS_EXTRA, MULTILIB_OPTIONS,
	MULTILIB_DIRNAMES, LIBGCC, INSTALL_LIBGCC): Define.
	(fp-bit.c): Build it.
	* h8300/h8300.h (CPP_PREDEFINES, CPP_SPEC, LIB_SPEC, TARGET_SWITCHES,
	BITS_PER_WORD, MAX_BITS_PER_WORD, UNITS_PER_WORD, MAX_UNITS_PER_WORD,
	POINTER_SIZE, PARM_BOUNDARY, BIGGEST_ALIGNMENT,
	BIGGEST_FIELD_ALIGNMENT, STACK_BOUNDARY, HARD_REGNO_NREGS,
	HARD_REGNO_MODE_OK, REG_CLASS_NAMES, REG_CLASS_CONTENTS,
	REGNO_REG_CLASS, PUSH_ROUNDING, FUNCTION_ARG_ADVANCE,
	TRAMPOLINE_TEMPLATE, TRAMPOLINE_SIZE, INITIALIZE_TRAMPOLINE,
	CONSTANT_ADDRESS, MOVE_MAX, Pmode, SIZE_TYPE, PTRDIFF_TYPE):
	Add h8/300h support.
	(LINK_SPEC, TARGET_RTL_DUMP, TARGET_H8300, TARGET_H8300H,
	REAL_ARITHMETIC, SETUP_INCOMING_VARARGS, HAVE_POST_INCREMENT,
	HAVE_PRE_DECREMENT, MAX_MOVE_MAX, NO_BUILTIN_SIZE_TYPE,
	NO_BUILTIN_PTRDIFF_TYPE, WCHAR_TYPE, WCHAR_TYPE_SIZE,
	MAX_WCHAR_TYPE_SIZE, ASM_WORD_OP, INIT_SECTION_ASM_OP,
	CTORS_SECTION_ASM_OP, DTORS_SECTION_ASM_OP, EXTRA_SECTIONS,
	EXTRA_SECTION_FUNCTIONS, ASM_OUTPUT_CONSTRUCTOR, ASM_OUTPUT_DESTRUCTOR,
	DO_GLOBAL_CTORS_BODY, DO_GLOBAL_DTORS_BODY, INIT_TARGET_OPTABS):
	Define.
	(CAN_DEBUG_WITHOUT_FP, PCC_STATIC_STRUCT_RETURN, STRUCT_VALUE_REGNUM,
	STRUCT_VALUE_INCOMING, STRUCTURE_SIZE_BOUNDARY): Undefine.
	(enum reg_class): Add h8/300h support.
	(emit_a_shift): Declare.
	(TARGET_DEFAULT): Set default to -mquickcall.
	(DOUBLE_TYPE_SIZE): Fix at 32.  DFmode support doesn't exist.
	(CALL_USED_REGISTERS, REG_ALLOC_ORDER): Swap registers 2,3 with 4,5.
	Registers 0,1 contain function result, allocate after 2,3.
	(STATIC_CHAIN_REGNUM): Use reg 4.
	(CONST_OK_FOR_LETTER_P): 'O' is ok_for_bclr, 'P' is small_power_of_two.
	(FUNCTION_PROFILER, FUNCTION_BLOCK_PROFILER, BLOCK_PROFILER): First
	attempt at an implementation.
	(CONST_COSTS): Move code into function const_costs.
	(BRANCH_COST): Set to 0.
	(NOTICE_UPDATE_CC): Move code into function notice_update_cc.
	(ASM_FILE_START): Move code into function asm_file_start.
	(ASM_FILE_END): Move code into function asm_file_end.
	(ASM_OUTPUT_DOUBLE, ASM_OUTPUT_FLOAT): Use REAL_VALUE_TO_DECIMAL.
	* h8300/h8300.c (cpu_type, names_extended, names_upper_extended,
	h8_reg_names, h8_push_ops, h8_pop_ops, h8_mov_ops, h8_push_op,
	h8_pop_op, h8_mov_op, current_function_anonymous_args, extra_pop,
	hand_list): New variables.
	(h8300_init_once, asm_file_start, asm_file_end, ok_for_bclr, o_operand,
	p_operand, call_insn_operand, jump_address_operand, bit_operand,
	eq_operator, const_costs, notice_update_cc, bit_operator,
	nshift_operator, expand_a_shift, get_shift_alg, emit_a_shift,
	fix_bit_operand): New functions.
	(shift_alg, shift_type, shift_mode): New enums.
	(shift_insn): New struct.
	(shift_n_bits, can_shift): Deleted.
	(shift_one, rotate_one): New variables.
	(WORD_REG_USED): New macro (was function word_reg_used).
	(dosize, function_prologue, function_epilogue, print_operand_address):
	Add h8/300h support.
	(small_power_of_two): Renamed from potl8.
	(potg8): Deleted.
	(general_operand_src): Fix POST_INC case.
	(general_operand_dst): Fix PRE_DEC case.
	(function_arg): 3 regs of args are passed if -mquickcall.
	4 regs of args are passed to handwritten assembler routines.
	(print_operand): New cases 'A', 'P', 'S', 'U', 'W', 'b', 'c', 'd', 'g'.
	Delete case 'O'.  Sort cases.  Add h8/300h support.
	(do_movsi): Renamed from domovsi.
	Handle reload_in_progress and reload_completed.
	(initial_offset): Renamed from io.  Add h8/300h support.
	* h8300/h8300.md (cpu): New attribute.
	(attribute length): Add h8/300h support.
	(attribute cc): New value `cbit'.
	(all anonymous insns): Give them names.
	(move insns): Add h8/300h support.
	(tstqi, tsthi): Use btst insn if able.
	(arithmetic insns): Add h8/300h support.
	(boolean insns): Likewise.
	(negate insns): Likewise.
	(branch insns): Likewise.
	(call_value): Use call_insn_operand for operand 1.
	(shift insns): Completely rewritten.  Add h8/300h support.
	(zero/sign extension insns): Add h8/300h support.
	(extv): Deleted.
	(insv, extzv): Only use for h8/300.
	(bitfield insns): Completely rewritten.
	(fancyb*): New insns for speeding up bit accesses.

	* optabs.c (init_optabs): Allow target specific libcalls
	with INIT_TARGET_OPTABS.

Mon Jul 11 18:32:42 1994  Steve Chamberlain  (sac@cygnus.com)

	* config/fp-bit.c: New file.  Provides simple fp emulation library.

Mon Jul 11 18:27:42 1994  Ian Lance Taylor  (ian@cygnus.com)

	* Makefile.in (libgcc1-asm.a): New target for building libgcc1.a
	in cross compilers.

Mon Jul 11 17:00:45 1994  David Edelsohn  (edelsohn@npac.syr.edu)

	* rs6000.md (movsi matcher): Add nop for moving special register
	to itself for !TARGET_POWER.
	(movhi and movqi matcher): Likewise and add mtjmpr attribute.
	Separate MQ from CTR and LR target registers for TARGET_POWER.

	* powerpc.h (CPP_SPEC): Fix typo.

Mon Jul 11 16:50:29 1994  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* c-parse.in (stmt): Don't give more than one error message if a
	nested `if' has an empty body.

	* a29k.md (movqi): Call loadhi, not loadqi.

Mon Jul 11 16:46:09 1994  Jeffrey A. Law  (law@mole.gnu.ai.mit.edu)

	* pa.h (DEBUGGER_ARG_OFFSET): Define.  If no frame pointer
	is available, then adjust the offset by the size of the
	current frame.

Mon Jul 11 16:34:14 1994  Stan Shebs  (shebs@andros.cygnus.com)

 	* configure (*-*-lynxos*): Always run fixincludes, and if not using
	gas, set tm_file to lynx-ng.h.
	* config/x-lynx: Always run fixproto.
	* config/lynx.h, i386/lynx.h, m68k/lynx.h, sparc/lynx.h: Rewrite
	to work with gas producing coff files.
	* config/lynx-ng.h, i386/lynx-ng.h, m68k/lynx-ng.h,
	sparc/lynx-ng.h: New files.

Mon Jul 11 15:16:28 1994  Pat Rankin  (rankin@eql.caltech.edu)

	* make-cc1.com: Compile most of cc1plus in the `cp' subdirectory.
	* vmsconfig.com: When setting up tm.h, convert "vax/vax.h" into
	"config-vax.h" rather than "[.config.vax]vax.h" for #include so
	it will work from [.cp] subdirectory; copy vax.h to config-vax.h
	as part of configuration setup.  Also, manually include cc1plus
	in the list of buildable compilers (a temporary measure; it
	should process cp/Makefile.in like it does for primary makefile).

	* make-cc1.com: Use `=' rather than `:=' when setting up CC,
	so that `gcc' can be defined as a foreign command if necessary;
	eliminate `set symbol/scope=noGlobal' for same reason; use `='
	with all other symbols, for consistency; add explicit .obj
	extension to some lists of object files passed to the linker;
	general cleanup of the command text echoed during execution.
	* make-cccp.com: Revise to be more consistent with make-cc1.com
	for symbol setup & usage and for echoing command execution.

Mon Jul 11 15:03:23 1994  Charles Hannum  (mycroft@duality.gnu.ai.mit.edu)

	* configure: Recognize m68k-*-netbsd* and i[345]86-*-netbsd*.
	* cccp.c, collect2.c, gcc.c, protoize.c, cp/g++.c (sys_errlist)
	[bsd4_4]: Do this for __NetBSD__ also.

Mon Jul 11 14:16:28 1994  Kresten Krab Thorup  (krab@spiff.gnu.ai.mit.edu)

	* mips/mips.h (STRUCT_VALUE): Change definition from `(rtx)0' to
	just `0' so it is a valid expression for the pre-processor. 

Mon Jul 11 10:54:35 1994  Stan Cox  (coxs@dg-rtp.dg.com)

	* configure (m88k-dg-dguxbcs): New configuration.  m88k-dg-dgux
	Now builds an elf compiler.  Both targets will create bcs or elf.

	* m88k/dgux.h (ASM_SPEC,STARTFILE_SPEC,LIB_SPEC): svr4 default.

	* m88k/dguxbcs.h (ASM_SPEC,STARTFILE_SPEC,LIB_SPEC): 
	New target for svr3.

	* m88k/x-dgux, m88k/t-dgux, m88k/x-dguxbcs: 
	Changed for svr4/svr4/svr3 respectively.

	* m88k/m88k.h (TARGET_SVR3): New target switch.

Wed Jun 29 19:23:27 1994  David Mosberger-Tang  (davidm@piston.cs.arizona.edu)
  
  	* alpha.h (LIB_SPEC): If -pg, add -lprof2.

Mon Jul 11 13:17:38 1994  Ian Lance Taylor  (ian@cygnus.com)

	* combine.c (simplify_set): Only turn IF_THEN_ELSE into AND if
	MODE_INT.

Sun Jul 10 06:03:12 1994  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* reload1.c (eliminate_regs_in_insn): Handle special case of
	assignment from hard frame pointer to frame pointer (for
	nonlocal goto).
	* function.c (instantiate_virtual_regs_1): Remove last change.
	* stmt.c (expand_end_bindings): When adjusting FP, set it
	from hard_frame_pointer_rtx.

	* expr.c (expand_builtin, case BUILT_IN_FSQRT): Don't use
	asterisk in name of `errno'.

Fri Jul  8 22:07:32 1994  Jim Wilson  (wilson@cygnus.com)

	* stdarg.h: Delete include of <stdarg.h> when not gcc.
	* varargs.h: Delete include of <varargs.h> when not gcc.

Fri Jul  8 18:45:56 1994  Philippe De Muyter (phdm@info.ucl.ac.be)

	* m68k/mot3300.h (FUNCTION_EXTRA_EPILOGUE): Copy a0 to d0, not
	the other way.

Fri Jul  8 17:41:39 1994  Jim Wilson  (wilson@cygnus.com)

	* expr.c (get_inner_unaligned_p): New function.
	(expand_assignment, expand_expr): Use it.

Fri Jul  8 17:16:25 1994  Doug Evans  (dje@cygnus.com)

	* expmed.c (extract_split_bit_field): Set UNIT to BITS_PER_WORD for
	register values.
	(store_split_bit_field): Likewise.  Call operand_subword_force.

Fri Jul  8 13:48:23 1994  Mike Stump  (mrs@cygnus.com)

	* expr.c (target_temp_slot_level): New variable to keep track of
	the current stack level for temporaries created by TARGET_EXPRs.
	* expr.h (target_temp_slot_level): Declare it.
	* expr.c (expand_expr): Add code to maintain the new temporary
	stack for TARGET_EXPRs to the CLEANUP_POINT_EXPR code and change
	the allocation of temporaries for TARGET_EXPRs to be from the new
	stack, so that they may live longer, and only be reused after they
	are no longer in use.
	* function.c (assign_stack_temp): KEEP can now also be 2, to
	indicate allocation from the longer term frontend controlled
	temporary stack.
	* function.c (init_function_start): Initialize
	target_temp_slot_level to zero.

Fri Jul  8 16:52:38 1994  Jim Wilson  (wilson@cygnus.com)

	* combine.c (distribute_notes, REG_DEAD case): When check to see
	if insn uses register, also call find_regno_fusage.

	* sparc.h (SECONDARY_MEMORY_NEEDED_RTX): Call assign_stack_local
	if the frame has zero size.

Fri Jul  8 11:46:50 1994  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* varasm.c (record_constant_rtx, force_const_mem): Ensure everything
	is in saveable_obstack, not current_obstack.

	* combine.c (force_to_mode): OP_MODE must be MODE if MODE and
	mode of X are of different classes.
	(nonzero_bits, num_sign_bit_copies): Say nothing known for
	floating-point modes.

	* function.c (instantiate_virtual_regs_1, case SET):
	If DEST is virtual_stack_vars_rtx, replace with hardware
	frame pointer.

	* expr.c (expand_expr, case CONVERT_EXPR): If changing signedness
	and we have a promoted SUBREG, clear the promotion flag.

	* c-decl.c (finish_decl): Put RTL and other stuff in 
	permanent_obstack if DECL is.

	* combine.c (gen_unary): Add new arg, OP0_MODE.
	All callers changed.

Thu Jul  7 19:58:35 1994  Jason Merrill  (jason@deneb.cygnus.com)

        * varasm.c (assemble_variable): Do set TREE_ASM_WRITTEN on
        erroneous incomplete decls.

Thu Jul  7 17:59:46 1994  Joseph Arceneaux  (jla@gnu.ai.mit.edu)

	* configure (m68k-motorola-sysv*): Use mot3300g.h for gas.
	* m68k/mot3300g.h: New file.

Thu Jul  7 17:42:21 1994  Philippe De Muyter  (phdm@info.ucl.ac.be)

	* m68k/mot3300.h (FUNCTION_EXTRA_EPILOGUE): Fix typo in last change.

Thu Jul  7 17:36:26 1994  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* expmed.c (expand_mult_highpart): Build constant forms of CNST1
	in MODE or WIDE_MODE, as appropriate.

	* optabs.c (expand_binop, case DIV [complex]): Fix typo in last change.

	* alpha.md (reload_inqi): Make operand[2] be TImode and
	pass register number that differs to unaligned_loadqi.
	(reload_outqi): Change overlap in temps to unaligned_storeqi.
	* alpha.c ({un,}aligned_memory_operand): Check against
	hard_frame_pointer_rtx, not frame_pointer_rtx.

Thu Jul  7 01:39:33 1994  Doug Evans  (dje@cygnus.com)

	* combine.c (make_compound_operation, AND case): Do extraction in
	desired result mode.

	* flow.c (mark_set_1): Record explicit hard registers in their
	raw mode.
	(mark_used_regs): Likewise.
	* combine.c (distribute_notes): Likewise.

Wed Jul  6 14:45:08 1994  Pat Rankin  (rankin@eql.caltech.edu)

	* longlong.h (vax sdiv_qrnnd): Fix typo.

Wed Jul  6 19:59:12 1994  Mike Stump  (mrs@cygnus.com)

	* expr.c (expand_expr, defer_cleanups_to, expand_cleanups_to): All
	cleanups have to be protected by interim exception handling code.
	* stmt.c (expand_decl_cleanup, expand_cleanups): Ditto.
	* toplev.c (interim_eh_hook): Hook for interim exception handling.
	* toplev.c (interim_eh): Default implementation for exception
	handling that does nothing.
	* toplev.c (main): Set default for interim_eh_hook.

Wed Jul  6 17:56:37 1994  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* alpha.c (output_prolog): Start memory probing with $2.

Wed Jul  6 14:21:14 1994  Jim Wilson  (wilson@cygnus.com)

	* stmt.c (struct nesting): Add new field alt_end_label.
	(expand_start_loop): Initialize it to zero.
	(expand_end_loop): Reorder loop if find either a jump to end_label
	or a jump to alt_end_label.
	(expand_exit_loop_if_false): Set alt_end_label.

Wed Jul  6 05:07:31 1994  Richard Earnshaw  (rwe11@cl.cam.ac.uk)

	* c-common.c (decl_attributes): If TREE_TYPE for the DECL is updated,
	then update TYPE as well.

	* longlong.h (arm umul_ppmm): Fix use of uninitialized register. 
	Eliminate clobbers of hard registers.

Wed Jul  6 03:22:04 1994  Torbjorn Granlund  (tege@rtl.cygnus.com)

	* expmed.c (expand_divmod): Clear out TARGET also if OP1 is a
	constant, when TARGET == OP0.

Tue Jul  5 18:58:28 1994  Torbjorn Granlund  (tege@rtl.cygnus.com)

	* Makefile.in (c-parse.y): Redirect through tmp file.
	(objc-parse.y): Likewise.
	(c-gperf.h): Likewise.
	(mostlyclean): Delete the new tmp files.

	* expmed.c (expand_divmod): Fix typo setting op1_is_pow2.
	(expand_divmod): Handle powers-of-two specifically for unsigned
	CEIL_*_EXPR.

	* longlong.h: Really fix the test for _IBMR2.  Change test of
	__powerpc__ to _ARCH_PPC.

Tue Jul  5 17:00:19 1994  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* combine.c (try_combine): Don't check for replacing
	arg of function here.
	(can_combine_p): Do it here.

	* expr.c (expand_increment): If pre-incrementing a promoted
	variable, don't adjust OP0 since the result won't be used.

	* jump.c (duplicate_loop_exit_test): Handle SUBREG in SET_DEST
	of loop exit test statements.

	* combine.c (try_combine): If I2DEST was used in I2SRC, it isn't
	unused just because there is no SET for I2 anymore.

Mon Jul  4 11:15:13 1994  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* rs6000.h (RS6000_OUTPUT_BASENAME): Always call assembler_name
	and pass the actual symbol name.

	* varasm.c (assemble_name): Call STRIP_NAME_ENCODING.

	* cse.c (canon_hash, exp_equiv_p): Refer to string in SYMBOL_REF
	with XSTR, not XEXP.

Sat Jul  2 18:53:19 1994  Jim Wilson  (wilson@cygnus.com)

	* mips.md (smuldi3_highpart, smuldi3_highpart_internal,
	umuldi3_highpart, umuldi3_highpart_internal): New patterns.

	* unroll.c (loop_iterations): Only use REG_EQUAL note value if it
	is constant.

	* dbxout.c (dbxout_type_methods): Enable debugging info for
	template classes.

	* c-lex.c (yylex): Reject imaginary numbers when pedantic.

	* c-decl.c (duplicate_decls): When make void* match char*, set
	DECL_IN_SYSTEM_HEADER.

	* Makefile.in (clean): Delete LIB2FUNCS_EXTRA.

	* alpha.h (FUNCTION_PROFILER, FUNCTION_BLOCK_PROFILER,
	BLOCK_PROFILER): Use multiple fputs/fprintf calls instead of ANSI
	C concatenated strings.
	(PREDICATE_CODES): Add cint8_operand.

	* gcc.c (DEFAULT_WORD_SWITCH_TAKES_ARG): Add -isystem.

Sat Jul  2 09:34:20 1994  Torbjorn Granlund  (tege@rtl.cygnus.com)

	* expmed.c (expand_divmod): Always return gen_lowpart (mode, ...).

Fri Jul  1 19:28:39 1994  Jeffrey A. Law  (law@snake.cs.utah.edu)

	* reorg.c (make_return_insns): Make sure redirecting a jump to
	a RETURN insn does not invalidate the delay slots of the jump.

Fri Jul  1 16:32:58 1994  Richard Earnshaw (rwe11@cl.cam.ac.uk)

	* longlong.h: (arm umul_ppmm): Fix typos in last change.  Mark
	hard-coded registers with "%|".

Fri Jul  1 10:08:47 1994  Jason Merrill  (jason@deneb.cygnus.com)

	* toplev.c (compile_file): Pass through static consts and inlines
	multiple times in case they reference each other.

Fri Jul  1 07:41:19 1994  Torbjorn Granlund  (tege@tiny.cygnus.com)

	* longlong.h: Test for _AM29K and _IBMR2, not ___AM29K__
	and ___IBMR2__.
	(arm umul_ppmm): New definition.
	(clipper umul_ppmm, smul_ppmm, __umulsidi3): New definitions.
	(hppa count_leading_zeros): New definition.
	(i960 umul_ppmm, __umulsidi3): New definitions.
	(mc68000 umul_ppmm): Use %. before size suffixes.
	(mc88110 umul_ppmm, udiv_qrnnd): Rewrite,
	(mc88000): Get UMUL_TIME and UDIV_TIME right.
	(mips): Get UMUL_TIME right.
	(ns32000 umul_ppmm): New definition.
	(ns32000 udiv_qrnnd): Rename from bogus div_qrnnd, rewrite.
	(powerpc umul_ppmm, smul_ppmm): New definitions.
	(_IBMR2/powerpc add_ssaaaa, sub_ddmmss): Improve.
	(pyr umul_ppmm): Fix typo.
	(sparc add_ssaaaa, sub_ddmmss): Match constant 0 for all inputs.
	(vax sdiv_qrnnd): New definition.

	* expmed.c (expand_divmod): Put OP0 in a register when computing
	remainder, or when OP1 is constant.

Fri Jul  1 06:46:09 1994  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* jump.c (jump_optimize): Don't convert if (foo) x++ into an
	add of an scc unless X has no side effects and can't trap.

	* c-parse.in (initelt): The equal sign is optional when
	positioning to a single element of an array.

	* c-typeck.c (push_init_level): If not at "unfilled" position,
	set constructor_incremental to 0; likewise for range.

	* xm-alpha.h: If GNUC, include alloca.h, else declare alloca.

	* m68k/mot3300.h (FUNCTION_EXTRA_EPILOGUE): New macro.

	* expmed.c (expand_divmod): Don't set REG_NOTES unless we generated
	a quotient.

Thu Jun 30 18:25:52 1994  David Edelsohn (edelsohn@npac.syr.edu)

	* gcc.c (do_spec_1, case 'P'): Don't add underscores to macros
	starting with '_[A-Z]'.

Thu Jun 30 18:16:36 1994  Will Athanasiou  (will@guardian.westford.ccur.com)

	* m68k.md (umulsi3_highpart, smulsi3_highpart): Fix constraint
	for operand 0 in define_insn.

Thu Jun 30 16:07:33 1994  Kaveh R. Ghazi  (ghazi@noc.rutgers.edu)

	* fixincludes: Put wrappers around <time.h> and <sys/time.h> to
	avoid multiple inclusion errors on m88k-tektronix-sysv3.

Thu Jun 30 12:08:48 1994  Kresten Krab Thorup  (krab@spiff.gnu.ai.mit.edu)

	* objc-act.c, objc/init.c (OBJC_VERSION): Incremented to 6.

	* objc/sendmsg.c (INVISIBLE_STRUCT_RETURN): New macro.
	(__objc_block_forward): Declare depending on the above.

	* objc/class.c (objc_next_class):  New function.
	* objc/objc-api.h (objc_next_class):  New function.

	* objc-act.c (get_proto_encoding, build_typed_selector_reference):
	New fucnctions. (UTAG_PROTOCOL): New define.
	(objc_selector_template, flag_typed_selectors): New variables.
	(objc_init): set flag_typed_selectors if -fgnu-runtime.
	(synth_module_prologue): Change declaration of
	_OBJC_SELECTOR_TABLE when flag_typed_selectors is non-null.
	(build_module_descriptor): Make sure the generated constructor
	function is declared public.
	(build_selector): Only cast to SEL when not doing typed selectors.
	(build_selector_translation_table): Rewrite initialization.
	(build_tmp_function_decl): Make up new name when called, since it
	may now be called multiple times.
	(hack_method_prototype): Use init_function_start to reinit args
	machinery.  Also set current_function_decl before calling
	assign_parms.
	(generate_protocols):  Don't generate encoding twice.
	(build_selector_template): New function.
	(build_method_list_template): Generate (void*)0 as first element,
	not (int)0.
	(build_message_expr): move the call to build_selector_reference 
	towards the end, where we have determined the function prototype.

	* objc/Object.h, objc/Object.m (read:, write:, streamVersion:):
	Un-disable for alpha.  (forward::, performv::): Declare and fix to
	return retval_t. 
	* objc/archive.c: Completely rewritten to handle 64 bit longs and
	pointers. 
	* objc/class.c (class_pose_as): Rewritten.
	* objc/encoding.c: use new ROUND macro for alignment rounding.
	* objc/init.c, objc/selector.c, objc/sendmsg.c: Rewritten to
	handle new selectors.

Thu Jun 30 07:49:50 1994  Richard Earnshaw (rwe11@cl.cam.ac.uk)

	* arm.h (INITIAL_ELIMINATION_OFFSET): Check frame_pointer_needed when
	eliminating the arg pointer into the stack pointer.

Thu Jun 30 06:25:50 1994  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* c-common.c (c_build_type_variant): Remove last change; instead,
	copy TYPE if not in old obstack.

Wed Jun 29 21:51:52 1994  Jason Merrill  (jason@deneb.cygnus.com)

	* toplev.c (lang_options): Add -W{no-,}non-virtual-dtor.

Wed Jun 29 19:23:27 1994  David Mosberger-Tang  (davidm@piston.cs.arizona.edu)

	* final.c (end_final,profile_function): Profiling variables are
	size of pointer, not int.
	* alpha.h (LIB_SPEC): If -pg, add -lprof2.
	(STARTFILE_SPEC, {FUNCTION,BLOCK,FUNCTION_BLOCK}_PROFILER): New macros.

Wed Jun 29 15:52:45 1994  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* loop.c (basic_induction_var, case REG): Allow previous
	insn to set a SUBREG of X.

	* alpha.c (alpha_sa_size): Round size to 16-byte boundary.
	(add_long_const): Add new arg, TEMP_REG.
	(output_{pro,epi}log): Rework to put save area between outgoing
	args and local variables.
	* alpha.h (FRAME_POINTER_REGNUM): Now register 63.
	(HARD_FRAME_POINTER_REGNUM): New macro.
	(CONDITIONAL_REGISTER_USAGE, REG_CLASS_CONTENTS, REGNO_REG_CLASS):
	Show register 63 is not an FP register.
	(REGHNO_OK_FOR_BASE_P, REG_OK_FOR_BASE_P, REGISTER_NAMES): Likewise.
	(ALPHA_ROUND): New macro.
	(STARTING_FRAME_OFFSET, ELIMINABLE_REGS, INITIAL_ELIMINATION_OFFSET):
	Modify to reflect save area between outgoing args and local vars.
	* alpha.md: Add new pattern for double-add when have
	reg + frame pointer.
	Slight changes to all such patterns and add define_splits for them.

	* global.c (global_alloc): Make a more accurate attempt to see
	if the frame pointer will be used.
	If it is, show HARD_FRAME_POINTER_REGNUM used if its not
	the same as FRAME_POINTER_REGNUM.
	* reload1.c (reload): Can't eliminate if frame pointer needed
	and TO is stack pointer.
	Spill HARD_FRAME_POINTER_REGNUM if not FRAME_POINTER_REGNUM
	and frame pointer is needed.
	(spill_hard_reg): If CANT_ELIMINATE, set regs_ever_live;
	no longer done by callers.	

	* a29k.md (movqi): Add missing `DONE'.

Wed Jun 29 15:44:18 1994  Doug Evans  (dje@canuck.cygnus.com)

	* sparc/sparc.h	(CPP_SPEC): Split up v9/non-v9 stuff.
	Move -Acpu and -Amachine from here.
	(CPP_PREDEFINES): To here.
	(NO_BUILTIN_PTRDIFF_TYPE): Undefine.
	(NO_BUILTIN_SIZE_TYPE): Likewise.
	(PTRDIFF_TYPE): Split up v9/non-v9 definitions.
	(SIZE_TYPE): Likewise.
	* sparc/sp64-elf: (PTRDIFF_TYPE): Remove dependence on POINTER_SIZE.
	(SIZE_TYPE): Likewise.

Wed Jun 29 15:28:17 1994  Michael Meissner  (meissner@osf.org)

	* cccp.c (collect_expansion): Always put 1 space after the macro
	expansion in ANSI mode to fix regression from June 24th.

Tue Jun 28 22:41:52 1994  Doug Evans  (dje@cygnus.com)

	* combine.c (simplify_set): Evaluate HAVE_conditional_move at runtime.

Tue Jun 28 20:27:08 1994  Torbjorn Granlund  (tege@adder.cygnus.com)

	* optab.c (expand_binop): Convert OP0 to mode for library calls.

	Changes to optimize division-by-constants, and make ceil and floor
	rounding work correctly:
	* expmed.c (expand_mult): Generalize to call synth_mult also
	for OP1 - 1.
	(ceil_log2): New function.
	(choose_multiplier): New function.
	(invert_mod2n): New function.
	(expand_mult_highpart_adjust): New function.
	(expand_mult_highpart): New function.
	(EXACT_POWER_OF_2_OR_ZERO_P): New macro.
	(expand_divmod): Almost completely rewritten.
	(expand_shift): Don't truncate immediate shift count, it doesn't work
	for types smaller than int.
	* expr.h (smul_highpart_optab, umul_highpart_optab): New variables.
	* genopinit.c (optabs): Add [us]mul_highpart_optab.
	* optabs.c (smul_highpart_optab, umul_highpart_optab): New variables.
	(expand_binop): Handle [us]mul_highpart_optab as commutative.
	(init_optabs): Initialize [us]mul_highpart_optab.
	* fold-const.c (div_and_round_double): Make it globally accessible.
	* a29k.md (smulsi3_highpart, umulsi3_highpart): New patterns.
	* alpha.md (umuldi3_highpart): New expander and matcher.
	* alpha.c (cint8_operand): New predicate.
	* m68k.md (umulsi3_highpart, const_umulsi3_highpart):
	New expander and matcher.
	(smulsi3_highpart, const_smulsi3_highpart): Likewise.

Tue Jun 28 13:42:10 1994  Jim Wilson  (wilson@cygnus.com)

	* sol2.h (CPP_SPEC): Handle -msupersparc.
	* sparc.c (cpu_type, sparc_cpu_type): Rename to arch_type and
	sparc_arch_type.  Fix all users.
	(supersparc_adjust_cost): New function.
	* sparc.h (cpu_type, sparc_cpu_type): Rename to arch_type and
	sparc_arch_type.
	(CPP_SPEC): Handle -msupersparc.
	(MASK_SUPERSPARC, TARGET_SUPERSPARC): New macros.
	(TARGET_SWITCHES): Add -msupersparc and -mcypress.
	(ADJUST_COST): New macro.
	* sparc.md (cpu attribute): Rename to arch attribute.  Add a new
	cpu attribute.  Fix all users.
	(type attribute): Add ialu, shift, imul, fpdivs, and fpdivd.
	Delete fpdiv.
	(function units): Add Cypress and Supersparc versions of each.
	(addsi3, subsi3, andsi3, iorsi3, xorsi3): Add ialu type attribute.
	(mulsi3): Add imul type attribute.
	(divtf3, divdf3): Use fpdivd not fpdiv type attribute.
	(divsf3); Use fpdivs not fpdiv type attribute.
	(ashlsi3, ashrsi3, lshrsi3): Add shift type attribute.

	* i960.md (andsi3+6): Replace bad clrbit pattern with two working
	ones.

Tue Jun 28 13:31:31 1994  Uwe Seimet  (seimet@iris1.chemie.uni-kl.de)

	* configure (m68k-atari-sysv4*): New configuration.
	* m68k/atari.h, m68k/xm-atari.h: New files.

Tue Jun 28 12:41:32 1994  Jeffrey A. Law  (law@snake.cs.utah.edu)

	* pa.md (define_split for (plus (reg) (large_constant))): Treat
	large_constant as signed.

Tue Jun 28 05:46:55 1994  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* reload1.c (eliminate_regs_in_insn): When checking for moves
	and adds, use single_set.

	* reload1.c (reloads_conflict): Handle R1_TYPE of RELOAD_OTHER.

	* expr.c (do_jump, case BIT_AND_EXPR): Only narrow to a type
	that corresponds to a mode.

Tue Jun 28 05:41:29 1994  Will R. Athanasiou (will@westford.ccur.com)

	* rs6000.h (MEMORY_MOVE_COST): Make processor-dependent.
	* rs6000.md (movsf): Emit frsp if storing to memory and not PowerPC.
	(movsf matcher): Remove explicit frsp.
	(store sf with update): Likewise.
	* rs6000.c: Include ctype.h.

Tue Jun 28 05:40:44 1994  Mike Collison  (collison@chianti.sw.stratus.com)

	* real.c: Treat HFmode like SFmode, for now.

Mon Jun 27 19:16:49 1994  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* optabs.c (expand_binop, multi-words shifts and rotates):
	Fix errors in last change.

Mon Jun 27 11:29:18 1994  Richard Earnshaw (rwe11@cl.cam.ac.uk)

	* arm.c: Include "expr.h".
	(arm_fpu): New variable.
	(arm_gen_movstrqi): Fix typo.
	* arm.h: (enum floating_point_type): New enumeration type.
	(arm_fpu): New declaration.
	* arm.md: (function_unit fpa): Add more accurate scheduling
	information.
	(all floating point patterns): Add more detailed instruction type
	information to attributes.
	* riscix.h: (STARTFILE_SPEC,SIZE_TYPE,PTRDIFF_TYPE): Fix typos.
	(ASM_FINAL_SPEC): Only reject -mbsd and -mxopen when -pedantic.

Sun Jun 26 05:37:26 1994  Pat Rankin  (rankin@eql.caltech.edu)

	* toplev.c (v_message_with_decl): Avoid fwrite for stderr; mixing
	it with fprintf and fputs can cause strange results under VMS.

Sat Jun 25 06:07:56 1994  Richard Earnshaw (rwe11@cl.cam.ac.uk)

	* combine.c (distribute_notes, case REG_DEAD): If a call uses a
	hard reg, then this is where it dies.

Fri Jun 24 19:09:33 1994  Chip Salzenberg  (chip@fin.uucp)

	* cccp.c (create_definition): Eliminate whitespace before and
	after macro definitions.

Fri Jun 24 16:19:27 1994  Philippe De Muyter  (phdm@info.ucl.ac.be)

	* c-decl.c (lang_decode_option): Set warn_bad_function_cast
	for -Wbad-function-cast.
	* c-typeck.c (build_c_cast): Issue a warning for non-matching cast
	from a function call (like malloc without proto).
	* c-tree.h: Declare warn_bad_function_cast.
	* toplev.c (lang_options): Add -W[no]-bad-function-cast.

Fri Jun 24 16:09:12 1994  Pat Rankin  (rankin@eql.caltech.edu)

	* vax.h (ASM_IDENTIFY_LANGUAGE): New macro.

Fri Jun 24 15:36:37 1994  Richard Earnshaw  (rwe11@cl.cam.ac.uk)

	* jump.c (jump_optimize): If we reverse "if (foo) bar else break;"
	and there follows a NOTE_INSN_LOOP_END, move the note before "bar".

	* arm.md (movstrsi): Delete.
	(movstrqi): New expand.
	* arm.h (arm_gen_movstrqi): New function.

Fri Jun 24 14:43:46 1994  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* alpha.c (alpha_builtin_saveregs): Fix typo in computing value
	for __base.

	* vax.md (zero_extract patterns): Don't allow constants in
	the first operand of ZERO_EXTRACT since the recognizer
	function forces them to match the mode of the match_operand.

	* c-typeck.c (decl_constant_value): Test for const and
	not iterator.
	(default_conversion, digest_init): Remove redundant checks
	before calling decl_constant_value.
	(convert_for_assignment): See if RHS has a constant value.

	* m68k.md (ashrsi3, lshrsh3): Remove patterns using bfext[su].

	* reg-stack.c (goto_block_pat): Ignore undefined label.

Thu Jun 23 22:07:42 1994  Doug Evans  (dje@cygnus.com)

	* sparc/sp64-elf.h (LINK_SPEC): Fix typo.
	(PTRDIFF_TYPE): Likewise.

Thu Jun 23 19:15:36 1994  Jason Merrill  (jason@deneb.cygnus.com)

	* tree.h (TREE_SYMBOL_REFERENCED): New macro.
	* varasm.c (assemble_name): Set TREE_SYMBOL_REFERENCED on the
	identifier for `name'.
	* toplev.c (compile_file): Use TREE_SYMBOL_REFERENCED instead of
	TREE_USED and TREE_ADDRESSABLE where appropriate.

Thu Jun 23 19:06:05 1994  Randy Wright  (rwright@dhostwo.convex.com)

	* cse.c (simplify_unary_operation, case UNSIGNED_FLOAT): Add
	missing cast to unsigned.

Thu Jun 23 19:00:18 1994  David Edelsohn  (edelsohn@npac.syr.edu)

	* rs6000.md (fix_truncdfsi2, movsf, movdi): Use assign_stack_temp.
	(mulsidi3): Add earlyclobber constraint modifier to PowerPC
	version and !TARGET_POWERPC64 to final condition.

	* rs6000.h (CPP_PREDEFINES): Define _POWER (alias for _IBMR2).
	(CPP_SPEC): New macro.
	* powerpc.h (ASM_SPEC): Use PowerPC mode, not 601 mode.
	(CPP_SPEC): New macro.
	(TARGET_DEFAULT): Generate pure PowerPC code, not 601-specific.

Thu Jun 23 18:09:23 1994  Pat Rankin  (rankin@eql.caltech.edu)

	* vax.h (CPP_PREDEFINES): Add `__vax__'.
	* vax/vms.h (CPP_PREDEFINES): Add `__vax__', `__vms__', and `__VMS__';
	update __GNUC_MINOR__ to 6.

Thu Jun 23 17:59:41 1994  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* toplev.c (compile_file): Don't try to write function if we
	didn't save insns for it.

	* reload.c (find_reloads): Don't rejecting non-const due to value
	of PREFERRED_RELOAD_CLASS if no regs were valid for alternative.

Thu Jun 23 17:45:55 1994  Matthias Pfaller  (leo@marco.de)

	* ns32k.c (output_move_double): If the dest is register pair and both
	regs are used in src address, use ADDR to compute src address, not
	ADDD, which throws away scaled index.

Thu Jun 23 17:40:06 1994  Craig Burley  (burley@gnu.ai.mit.edu)

	* c-decl.c (clear_binding_level): Add missing fields in initializer.
	(c_decode_option): Correct misspelling of -fno-dollars-in-identifiers.

Thu Jun 23 13:47:23 1994  Ian Lance Taylor  (ian@cygnus.com)

	* fixincludes: Fix return type of sbrk in <unistd.h> on Alpha
	OSF/1 V2.0.  Also, redirect grep errors to /dev/null in <assert.h>
	fix.

Thu Jun 23 12:08:23 1994  Richard Earnshaw (rwe11@cl.cam.ac.uk)

	* arm.c: Include tree.h.
	(const_ok_for_arm): Add fast return for 0 or just one non-zero bit.
	(const_ok_for_op, arm_split_constant): New functions.
	(arm_rtx_costs, reg_or_int_operand): New functions.
	(shift_operator): Accept ROTATERT.
	(multi_register_push): New function.
	(shift_op): Don't abort if a constant is outside the acceptable range,
	but convert the whole shift expression into something legal.  If the
	shift is zero, then return NULL.
	(output_return_instruction): Output a call to abort if the function is
	volatile.
	(arm_volatile_func): New function.
	(get_prologue_size): Remove all adjustments for insns that are now
	output as rtx.
	(output_func_prologue): Remove all code that outputs instructions,
	just print a few comments.
	(output_func_epilogue): Output a call to abort if a volatile function
	tries to return.
	(emit_multi_reg_push): New function.
	(arm_expand_prologue): New function.  Don't bother to push call-saved
	regs if we will never return.
	(arm_print_operand, case 'S'): If shift_op returns NULL, then no shift
	is required.
	* arm.h (TARGET_WHEN_DEBUGGING): Delete.
	(MODES_TIEABLE_P): All modes of the same class are tieable.
	(CONST_OK_FOR_LETTER_P): Add 'M' for constants valid in a shift.
	(FUNCTION_PROFILER): Don't call arm_increase_location.
	(INITIAL_ELIMINATION_OFFSET): Call saved regs are no-longer pushed for
	functions that don't return.
	(LEGITIMIZE_ADDRESS): Push constants that will never be legitimate -- 
	symbols and labels -- into registers.  Handle DImode better.
	(DEFAULT_SIGNED_CHAR): Use unsigned unless already defined.
	(RTX_COSTS): Call arm_rtx_costs.
	(ADDRESS_COST): Since most operations have the same rtx cost, make the
	more complex addresses cheaper.
	(PREDICATE_CODES): Add ROTATERT to shift_operator; and new predicates
	for reg_or_int_operand and multi_register_push.
	(DBX_CONTIN_LENGTH): Only define if not already done.
	(PRINT_OPERAND_ADDRESS): Let arm_print operand output the ", " for
	shifts.
	* arm.md (addsi3, subsi3, andsi3, iorsi3, ashlsi3, ashrsi3, lshrsi3,
	rotrsi3): Rewrite as expand patterns.
	(rotlsi3): New expand.
	(matchers, and split patterns for above): New.
	(all patterns with shifts): Let arm_print_operand output the ", "
	before a shift if it is needed.
	(zero_extendqihi2): Delete.
	(zero_extendqisi2): Expand to (and ...) if not memory.
	(movsi): Call arm_split_constant to generate a constant.
	(movqi): Only force a MEM into a register if not reloading.
	(movsf, movdf): If loading a non-immediate floating point value, or
	loading and floating point immediate into integer regs, push the
	constant straight into the pool.
	(movdf): Get rid of the scratch register.
	(reload_outdf): Rewrite to expand to the two required insns.
	(matcher for movdf): Remove alternative that used scratch register for
	storing.
	(movxf): rewrite as expand.
	(matcher for movxf): Recognize even when XFmode code is disabled, so
	that prologue insns can be generated.
	(Matcher for reversed conditional jump): Don't match if the mode of the
	CC register is not reversible.
	(prologue): New expand.
	(matcher for multi_register_push insn): New.
	* riscix.h: Delete some dead code.
	(STARTFILE_SPEC): Look in the correct places for start files.
	(LIB_SPEC): Define.
	(LINK_SPEC): Define.
	(TARGET_WHEN_DEBUGGING): Delete.
	(DEFAULT_SIGNED_CHAR): Set to unsigned.
	(SIZE_TYPE, PTRDIFF_TYPE, TARGET_EDOM): Define.
	* rix-gas.h (DBX_CONTIN_LENGTH): Set to 80.
	(DEFAULT_GDB_EXTENSIONS, DBX_NO_XREFS): Don't try to pander to dbx, it
	is just to broken to use.

Wed Jun 22 20:13:03 1994  Will Athanasiou  (will@westford.ccur.com)

	* configure (m68k-ccur-rtu): New configuration.
	* config.sub (m68k-ccur): New system.
	* protoize.c: Include <dirent.h>, not <sys/dir.h> on Concurrent.
	* ccur-GAS.h, x-ccur: New files.

Wed Jun 22 18:49:17 1994  Walter Misar  (misar@rbg.informatik.th-darmstadt.de)

	* m68k/hp320.h (LINK_SPEC): New macro.

Wed Jun 22 18:43:51 1994  Ian Lance Taylor  (ian@cygnus.com)

	* configure: For target alpha-*-*, if using gas, set
	target_cpu_default to 4.
	* config/alpha/alpha.h (TARGET_SWITCHES): Include
	TARGET_CPU_DEFAULT in default value.
	(TARGET_CPU_DEFAULT): Define as 0 if not already defined.
	(ASM_FINAL_SPEC): Include TARGET_CPU_DEFAULT in test for which
	version to define.

Wed Jun 22 18:15:41 1994  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* loop.c (strength_reduce): When replacing DEST_ADDR givs, make
	sure resulting insn is valid.

	* optabs.c (expand_binop): New variable next_methods; pass to
	most recursive calls when trying to avoid libcalls.
	Always check for a return value of zero in recursive calls.
	(expand_float): Ensure TARGET has proper mode.
	Pass OPTAB_LIB_WIDEN to expand_binop calls.

Tue Jun 21 14:35:38 1994  Doug Evans  (dje@cygnus.com)

	* cccp.c (skip_to_end_of_comment): Catch unterminated comments.

Sat Jun 18 17:49:41 1994  Jason Merrill  (jason@deneb.cygnus.com)

	* fixproto: Move hacking of assert.h from here.
	* fixincludes: To here.

Sat Jun 18 16:42:31 1994  Jim Wilson  (wilson@cygnus.com)

	* c-typeck.c (process_init_element): For fieldtype, don't access
	TYPE_MAIN_VARIANT field if the type is error_mark_node.

	* jump.c (duplicate_loop_exit_test): Initialize copy to zero.
	Emit jump to end lable if copy is still zero.

	* mips.md (truncdisi2): Change from define_insn to define_expand.
	(truncdihi2, truncdiqi2, extendsidi2): Likewise.
	(extendsidi2_internal): New pattern.

	* loop.c (move_movables): Copy CALL_INSN_FUNCTION_USAGE field.

	* sdbout.c (sdbout_one_type): Use DECL_ASSEMBLER_NAME if
	DECL_LANG_SPECIFIC is set.  Use DECL_ASSEMBLER_NAME not
	DECL_NAME for child_type that is a template type.
	(sdbout_symbol): Use DECL_ASSEMBLER_NAME if DECL_LANG_SPECIFIC
	is set.

Sat Jun 18 16:39:03 1994  Kung Hsu  (kung@mexican.cygnus.com)

	* dbxout.c (dbxout_symbol): Replace DECL_IGNORED_P with
	TYPE_DECL_SUPPRESS_DEBUG.

Sat Jun 18 10:21:44 1994  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* expmed.c (expand_shift): Don't try extzv for lshr.

	* vax.md (lshrsi3): New define_expand.

	* optabs.c: Pass NULL_RTX for TARGET in calls to expand_{un,bin}op.
	(expand_float): Use expand_shift instead of expand_binop.

Fri Jun 17 15:05:58 1994  Ian Lance Taylor  (ian@cygnus.com)

	* fixincludes: Correct math.h on Lynx handling again.

Fri Jun 17 10:52:41 1994  Richard Earnshaw  (rwe11@cl.cam.ac.uk)

	* cse.c (simplify_binary_operation, case MINUS): Check mode of op0,
	instead of op1, before calling plus_constant.

Fri Jun 17 01:42:37 1994  Jeffrey A. Law  (law@snake.cs.utah.edu)

	* pa.h (DEBUGGER_AUTO_OFFSET): Define.  If no frame pointer
	is available, then adjust the offset by the size of the current
	frame.

Thu Jun 16 16:35:12 1994  Jason Merrill  (jason@deneb.cygnus.com)

	* tree.h (DECL_DEFER_OUTPUT): New macro.
	* toplev.c (compile_file): Unset DECL_DEFER_OUTPUT on decls
	considered at end of file.
	* integrate.c (output_inline_function): Unset DECL_DEFER_OUTPUT on
	fndecl.
	* toplev.c (rest_of_compilation): Also postpone compilation of
	inlines with DECL_DEFER_OUTPUT set.
	(compile_file): Always emit postponed inlines if
	-fkeep-inline-functions.

Thu Jun 16 11:00:14 1994  Ian Lance Taylor  (ian@cygnus.com)

	* fixincludes: Fix argument type for ffs in <string.h> on Alpha
	OSF/1 V2.0.

Thu Jun 16 06:49:03 1994  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* reload1.c (reload_reg_free_p, case RELOAD_OTHER): Allowed
	to conflict with RELOAD_FOR_OTHER_ADDRESS.

	* cse.c (set_nonvarying_address_components): Rework and also
	handle an AND used for non-aligned accesses.

Thu Jun 16 06:36:49 1994  Chip Salzenberg  (chip@fin.uucp)

	* i386.h (REG_ALLOC_ORDER): Prefer registers listed in
	CALL_USED_REGISTERS.

Wed Jun 15 20:45:14 1994  Jason Merrill  (jason@deneb.cygnus.com)

	* tree.h (TREE_NO_UNUSED_WARNING): Note that this can be applied
	to COMPOUND_EXPRs, too.

	* stmt.c (warn_if_unused_value): Handle TREE_NO_UNUSED_WARNING for
	COMPOUND_EXPRs, too.

Wed Jun 15 20:35:21 1994  David Edelsohn  (edelsohn@npac.syr.edu)

	* rs6000.md (divsi3): Fix divide by 2^N with compare RTL.

	* rs6000.md (maxsf3, minsf3, maxdf3, mindf3): Fix predicate of
	define_split.
	(muldi3): Fix predicate.
	(movdf matcher): Allow update and indexed for lfd instruction.

Wed Jun 15 19:24:23 1994  Doug Evans  (dje@cygnus.com)

	* dbxout.c (dbxout_type): Fix call to bzero.

Wed Jun 15 19:20:34 1994  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* cse.c (simplify_unary_operation): Fix typo in last change.

Wed Jun 15 15:20:54 1994  Per Bothner  (bothner@cygnus.com)

	* dbxout.c (dbxout_range_type):  Handle the case that an array
	range is neither an integer nor a sub-range.  (In Pascal or
	Chill it could be a Boolean, character, or enumeral type.)

Wed Jun 15 04:00:42 1994  Ian Lance Taylor  (ian@cygnus.com)

	* genmultilib: New shell script to generate multiple library
	information.
	* Makefile.in (multilib.h, stmp-multilib, install-multilib): New
	targets.
	(gcc.o): Depend on multilib.h.
	(clean): Remove multilib.h and tmpmultilib*.
	* gcc.c: Include multilib.h.
	(print_multi_lib, print_multi_directory, multilib_select,
	multilib_dir): New static variables.
	(option_map): Added --print-multi-lib and --print-multi-directory.
	(set_spec): Get multilib_select from specs file.
	(process_command): Dump multilib_select into specs file.  Handle
	-print-multi-lib and -print-multi-directory.
	(do_spec_1): Try multilib_dir for %D case.
	(find_file): Try multilib_dir.
	(main): Call set_multilib_dir.  Handle print_multi_lib and
	print_multi_directory.
	(used_arg, set_multilib_dir, print_multilib_info): New functions.
	* configure (sparc-*-sunos4*): Use target fragment sparc/t-sunos4.
	* sparc/t-sunos4: New file.

Wed Jun 15 03:54:32 1994  Doug Evans  (dje@cygnus.com)

	Add support for the SPARC V9 cpu.
	* configure (sparc64-*-aout): New target.
	(sparc64-*-elf): New target.
	* config.sub (sparc64): New cpu.
	(aout, elf): New os's.
	* genconfig.c (main): Allow targets to override HAVE_conditional_move.
	* jump.c (jump_optimize): Use it at run-time.
	* sparc/t-sp64: New file.
	* sparc/sp64-aout.h: New file.
	* sparc/sp64-elf.h: New file.
	* sparc/sysv4.h (ASM_OUTPUT_CASE_LABEL): Handle 64 bit pointers.
	* sparc/sparc.h (cpu_type): New enum.
	(CPP_PREDEFINES,CPP_SPEC): Add v9 support.
	(NO_BUILTIN_PTRDIFF_TYPE, NO_BUILTIN_SIZE_TYPE, MAX_WCHAR_TYPE_SIZE,
	SHORT_TYPE_SIZE, INT_TYPE_SIZE, LONG_TYPE_SIZE, LONG_LONG_TYPE_SIZE,
	FLOAT_TYPE_SIZE, DOUBLE_TYPE_SIZE, MAX_INT_TYPE_SIZE,
	MAX_LONG_TYPE_SIZE): Define.
	(PTRDIFF_TYPE, SIZE_TYPE, BITS_PER_WORD, MAX_BITS_PER_WORD,
	UNITS_PER_WORD, MAX_UNITS_PER_WORD, LONG_DOUBLE_TYPE_SIZE,
	POINTER_SIZE, PARM_BOUNDARY, STACK_BOUNDARY, SPARC_STACK_ALIGN,
	EMPTY_FIELD_BOUNDARY, BIGGEST_ALIGNMENT, FIRST_PSEUDO_REGISTER,
	FIXED_REGISTERS, CALL_USED_REGISTERS, CONDITIONAL_REGISTER_USAGE):
	Add v9 support.
	(sparc_override_options, sparc_code_model): Declare.
	(OVERRIDE_OPTIONS): Call it.
	(MASK_*): Define bits set by target flags.
	(TARGET_*): Use them.
	({MASK,TARGET}_{V9,INT64,LONG64,PTR64,ENV32,STACK_BIAS,
	MEDLOW,MEDANY,FULLANY}): Define.
	(MEDANY_BASE_REG): Define.
	(V9_SWITCHES, TARGET_OPTIONS): Define.
	(TARGET_SWITCHES, TARGET_DEFAULT): Use MASK_*.
	(SPARC_STACK_BIAS, SECONDARY_MEMORY_NEEDED_MODE): Define.
	(SECONDARY_MEMORY_NEEDED): Simplify.
	(hard_regno_mode_class, sparc_mode_class, sparc_cpu_type): Declare.
	(REG_PARM_STACK_SPACE): Do not define if v9.
	(HARD_REGNO_NREGS, HARD_REGNO_MODE_OK, MODES_TIEABLE_P,
	RETURN_IN_MEMORY, STRUCT_VALUE, STRUCT_VALUE_INCOMING, reg_class,
	REG_CLASS_NAMES, REG_CLASS_CONTENTS, REGNO_REG_CLASS, REG_ALLOC_ORDER,
	REG_LEAF_ALLOC_ORDER, LEAF_REGISTERS, REG_CLASS_FROM_LETTER,
	CLASS_MAX_NREGS, STARTING_FRAME_OFFSET, FIRST_PARM_OFFSET,
	BASE_RETURN_VALUE_REG, BASE_OUTGOING_VALUE_REG, BASE_PASSING_ARG_REG,
	BASE_INCOMING_ARG_REG, FUNCTION_ARG_REGNO_P): Add v9 support.
	(sparc_arg_class): New enum (v9 only).
	(sparc_args): New struct to record v9 arguments.
	(CUMULATIVE_ARGS): Use it (v9 only).
	(GET_SPARC_ARG_CLASS): Define.
	(sparc_arg_count, sparc_n_named_args): Declare.
	(PASS_IN_REG_P): Define.
	(ROUND_REG, ROUND_ADVANCE, INIT_CUMULATIVE_ARGS, FUNCTION_ARG_ADVANCE,
	FUNCTION_ARG, FUNCTION_INCOMING_ARG, FUNCTION_ARG_PARTIAL_NREGS,
	FUNCTION_ARG_PASS_BY_REFERENCE, FUNCTION_ARG_CALLEE_COPIES):
	Add v9 support.
	(sparc64_init_expanders, sparc64_fpconv_stack_temp): Declare.
	(INIT_EXPANDERS): Define (v9 only).
	(gen_v9_scc, output_v9branch): Declare.
	(HAVE_conditional_move): Define.
	(FUNCTION_PROFILER, FUNCTION_BLOCK_PROFILER, BLOCK_PROFILER,
	DYNAMIC_CHAIN_ADDRESS, RETURN_ADDR_RTX, REGNO_OK_FOR_FP_P,
	REG_OK_FOR_INDEX_P, REG_OK_FOR_BASE_P, EXTRA_CONSTRAINT,
	CASE_VECTOR_MODE, Pmode, EXTRA_CC_MODES, EXTRA_CC_NAMES,
	SELECT_CC_MODE, REGISTER_NAMES): Add v9 support.
	(REGNO_OK_FOR_CCFP_P): Define.
	(sparc_initialize_trampoline, sparc64_initialize_trampoline): Declare.
	(INITIALIZE_TRAMPOLINE): Call them.
	(ENCODE_SECTION_INFO): Mark functions in v9.
	(RTX_COSTS): Assume MULT costs the same for v9 as v8.
	(ASM_LONGLONG, ASM_FLOAT): Define.
	(ASM_OUTPUT_ADDR_VEC_ELT, ASM_OUTPUT_ADDR_DIFF_ELT): Add v9 support.
	* sparc/sparc.c (SKIP_CALLERS_UNIMP_P): Define.
	(sparc_cpu_type, sparc_arg_count, sparc_n_named_args,
	frame_base_offset, fpconv_stack_temp): New globals.
	(leaf_reg_remap): Add additional registers for v9.
	(sparc_override_options, sparc64_init_expanders,
	sparc64_fpconv_stack_temp, intreg_operand, ccfp_reg_operand,
	data_segment_operand, text_segment_operand, v9_regcmp_op,
	arith11_operand, arith10_operand, arith11_double_operand,
	arith10_double_operand, gen_v9_scc, emit_v9_brxx_insn,
	sparc_init_modes, build_big_number, output_v9branch,
	sparc_initialize_trampoline, sparc64_initialize_trampoline):
	New functions.
	(arith_double_operand, gen_compare_reg, finalize_pic,
	emit_move_sequence, mem_aligned_8, output_move_double,
	output_move_quad, output_fp_move_double, output_fp_move_quad,
	output_block_move, save_regs, restore_regs): Add v9 support.
	(sparc_mode_class): New enum.
	(*_MODES): Redefine to use it.
	(hard_32bit_mode_classes): Renamed from hard_regno_mode_ok.
	(hard_regno_mode_classes, hard_64bit_mode_classes, 
	sparc_mode_class): New globals.
	(num_gfregs): Renamed from num_fregs.
	(compute_frame_size): Add v9 support.  Simplify calculations.
	(output_function_prologue): Call build_big_number to compute stack
	size in %g1, then adjust %sp.
	Fix saving of call saved registers.  Handle new v9 registers.
	(output_function_epilogue): Fix restoration of call saved registers.
	Handle new v9 registers.
	Use SKIP_CALLERS_UNIMP_P to see if unimp insn is at return address.
	(sparc_builtin_saveregs): Define v9 version.
	(output_cbranch): New argument fp_cond_reg.  All callers changed.
	Add v9 support.
	(output_return): Use SKIP_CALLERS_UNIMP_P.
	(print_operand): New codes '_', '@', 'C', 'D'.
	(output_double_int): Handle LABEL_REF and MINUS for v9.
	Use ASM_LONGLONG if assembler can handle it.
	* sparc/sparc.md (cpu): New attribute.
	(type attribute): New value cmove (conditional moves).
	(cmpdi): New pattern for v9.
	(seq*, sne*): Add v9 support.
	(sgt,slt,sge,sle): Explicitly restrict operand 0 to the integer
	registers.  Try emitting a conditional move for v9.
	(sgtu,sltu,sgeu,sleu): Likewise.
	(comparison insns): Add v9 versions.
	(scc insns): Add DImode versions for v9.
	(beq, bne, bgt, blt, bge, ble): If comparing DImode with 0 on v9,
	use brxx insns.  Use emit_jump_insn, not emit_insn, as the latter
	mishandles brxx insns.
	(branch insns): Update calls to output_cbranch.
	Add v9 versions to support multiple floating point condition code regs.
	Add v9 versions to support brxx insns.
	(lo_sum, high, pic): Add v9 support.
	(symbolic move patterns): Disable for v9.
	(DImode, DFmode, TFmode moves): Add v9 support.
	(conditional move insns): Define for v9.
	(zero_extendqidi2, extendqidi2, zero_extendhidi2, extendhidi2,
	zero_extendsidi2, extendsidi2, floatdisf2, floatdidf2, floatditf2,
	fix_truncsfdi2, fix_truncdfdi2, fix_trunctfdi2, muldi3, divdi3,
	udivdi3, ashldi3, ashrdi3, lshrdi3, ffsdi2): New patterns for v9.
	(bitfield compare insn): Add DImode version for v9.
	(adddi3, subdi3, negdi2, anddi3, iordi3, xordi3, one_cmpldi2,
	mixed mode fp mult insns, negdf2, negtf2, absdf2, abstf2, tablejump,
	call, call_value, untyped_call, untyped_return, indirect_jump,
	flush_register_windows, flush): Add v9 support.
	(ldd peep holes): Disable for v9.
	(set/compare peep hole): Define DImode version for v9.
	(sign extend/compare peep hole): Likewise.
	(return peep holes): Add v9 support.
	(call/jump peep holes): Add v9 support.
	* ginclude/va-sparc.h: Add v9 support.

Tue Jun 14 22:44:52 1994  Michael Meissner  (meissner@osf.org)

	* config/i386/i386.h (reg_class): Add AD_REGS that match %eax and
	%edx to allow %eax:%edx to be specified as one DI register.
	(REG_CLASS_NAMES): Ditto.
	(REG_CLASS_CONTENTS): Ditto.
	(REG_CLASS_FROM_LETTER): 'A' specifies AD_REGS.

	* config/i386/i386.md (umulqihi3): Name the insn with the standard
	name.
	(mulqihi3, umulsidi3, mulsidi3): Add new widening multiply
	patterns.

Tue Jun 14 22:25:16 1994  Torbjorn Granlund  (tege@adder.cygnus.com)

	* fold-const.c (encode, decode): Use 4 HOST_WIDE_INTs for encoded
	value with HOST_BITS_PER_WIDE_INT/2 bits in each.
	(LOWPART, HIGHPART): New macros.
	(BASE): Move definition outside of div_and_round_double.
	(add_double, mul_double, lshift_double, rshift_double): Rewrite.
	(lrotate_double): Use LOWPART, HIGHPART, and BASE.
	(rrotate_double): Likewise.
	(div_and_round_double): Major changes to code for general case.
	Now it actually produces non-garbage results for large operands.
	(div_and_round_double): Simplify condition for special code used when
	divisor < BASE.
	(const_binop): Delete special cases for multiplying by 0, 1, 2, 4, 8.
	(fold, case *_DIV_EXPR): Don't try to optimize for overflow.
	* machmode.h (MAX_SHORTS): Deleted.

	* m68k.md: Trivial simplification of many patterns.
	(subsi3): Don't handle CONST_INT for operand 2.
	(ashiftrt, op2 > 8): New pattern.
	(lshiftrt, op2 > 8): New pattern.

	* a29k.md (logical patterns): Tune to give better code for immediate
	values.
	* a29k.c (cmplsrcb_operand): New predicate.
	* a29k.h (PREDICATE_CODES): Add cmplsrcb_operand.

Tue Jun 14 17:52:10 1994  Tor Egge  (tegge@flipper.pvv.unit.no)

	* m88k/sysv3.h (DO_GLOBAL_CTORS_BODY): Call __builtin_alloca 
	with a non-zero argument, forcing a frame pointer to be needed.

Tue Jun 14 17:37:41 1994  Mike Collison  (collison@sw.stratus.com)

	* reload.h (RELOAD_FOR_OPADDR_ADDR): New reload class.
	* reload.c (find_reloads): Change secondary reloads of class
	RELOAD_FOR_OPERAND_ADDRESS to RELOAD_FOR_OPADDR_ADDR.
	* reload1.c (reload): Process and accumulate needs for
	RELOAD_FOR_OPADDR_ADDR reloads.
	When determining if needs are nongroup needs, ignore
	inactive or optional reloads.
	(reload_reg_used_in_op_addr_reload): New variable to indicate
	when reloads of class RELOAD_FOR_OPADDR_ADDR are in use.
	(mark_reload_reg_in_use, clear_reload_reg_in_use):
	Process reloads of class RELOAD_FOR_OPADDR_ADDR.
	(reload_reg_free_p, reload_reg_free_before_p, reloads_conflict):
	Likewise.
	(choose_reload_regs): Support RELOAD_FOR_OPADDR_ADDR reloads.
	(emit_reload_insns): Output RELOAD_FOR_OPADDR_ADDR reloads.

Tue Jun 14 17:29:53 1994  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* cccp.c, toplev.c, tree.c, print-tree.c, fold-const.c:
	Cast pointer operands to bzero, bcopy, and bcmp to (char *).
	* function.c, stmt.c, expmed.c, varasm.c, emit-rtl.c: Likewise.
	* dbxout.c, integrate.c, jump.c, real.h, calls.c, cse.c: Likewise.
	* loop.c, unroll.c, flow.c, stupid.c, combine.c, regclass.c: Likewise.
	* local-alloc.c, global.c, reload.c, reload1.c, sched.c: Likewise.
	* genattrtab.c, bc-emit.c, gcc.c, collect2.c: Likewise.

	* c-decl.c (min_precision): New function.
	(finish_enum): Rewrite code to determine precision required
	for enumeral type.

	* cse.c (simplify_unary_operation): Correctly and consistently
	handle CONST_INT cases for FLOAT and UNSIGNED_FLOAT.

	* xm-alpha.h (sbrk): Don't declare here.

	* alpha.h (CONST_COSTS, case CONST_INT): Fix typo.

	* tree.c (staticp, case FUNCTION_DECL): A nested function isn't static.

	* i386/linux.h (STARTFILE_SPEC): Don't force -static for -g.

	* gcc.c (find_a_file): Try EXECUTABLE_SUFFIX first, then file
	without the suffix.

	* jump.c (jump_optimize): Don't delete dead insn if it has a
	REG_RETVAL note.

	* fix-header.c (xstrdup): Renamed from strdup.
	(check_protection): Call xstrdup, not strdup.

Tue Jun 14 17:26:08 1994  David Edelsohn  (edelsohn@npac.syr.edu)

	* rs6000.h (TARGET_SWITCHES): Remove -mpowerpc64 and -mno-powerpc64.
	* rs6000.c (rs6000_override_options): Remove MPC620 cpu variants.

	* rs6000.c (output_prolog): Fix error in loading size of large
	stack frames.

Tue Jun 14 17:24:09 1994  Chip Salzenberg  (chip@fin.uucp)

	* reload1.c (reload_as_needed): Clear spill_reg_store at start.
	(emit_reload_insns): Omit erroneous predicate of reload
	deletion -- reload_spill_index is not indexed by regno.

Tue Jun 14 15:59:55 1994  Ian Lance Taylor  (ian@cygnus.com)

	* fixincludes: Wrap assert.h in extern "C" { } to avoid problem on
	HP/UX, which uses NO_IMPLICIT_EXTERN_C.  Also fix 12 May 94
	change.

Tue Jun 14 15:12:50 1994  Jeffrey A. Law  (law@snake.cs.utah.edu)

	* jump.c (condjump_in_parallel_p): New function to detect
	conditional jumps within PARALLEL insns.
	(jump_optimize): Allow for some simple optimizations involving
	conditional jumps within PARALLEL insns.
	* reorg.c (get_jump_flags): Handle conditional jumps in PARALLEL
	insns.
	(get_branch_condition, fill_simple_delay_slots): Likewise.
	(fill_eager_delay_slots, relax_delay_slots, dbr_schedule): Likewise.

	* pa-osf.h (SIZE_TYPE): Define as "long unsigned int" to be
	compatable with system include files.
	* pa1-osf.h (SIZE_TYPE): Likewise.

	* pa1-osf.h (WCHAR_TYPE): Define as "short unsigned int".
	(WCHAR_TYPE_SIZE): Define as 16 bits.

	* pa.c (output_arg_descriptor): Restore old behavior for SImode
	USE insns of FP registers (used by untyped call support).

Mon Jun  6 09:15:43 1994  Richard Earnshaw (rwe11@cl.cam.ac.uk)

	* arm.c (arm_reload_out_hi): Rewrite.  Add support for processors
	running in big-endian mode.
	(fp_immediate_constant): Fix typo in argument declaration.
	* arm.h (PROMOTE_MODE): Promote HImode integers as signed.
	(BYTES_BIG_ENDIAN): Allow OS description to override default.
	(LOAD_EXTEND_OP): When big-endian, HImode loads are sign extended.
	* arm.md (storehi_bigend): New expansion pattern.
	(storeinthi): Rework to generate better code, add big-endian support.
	(movhi): Add support for processors running in big-endian mode.
	(movhi_bigend): New expansion pattern.
	(matcher for movhi): Remove incorrect alternative for storing HImode to
	memory.  Only match when little endian.
	(matcher for big-endian movhi): New pattern.
	(matchers/peepholes for extended pre/post increment HImode loads): Only
	match when little-endian.
	(matcher for operating on adjacent memory locations): Load operation
	into arith operands.
	(peepholes for extended pre-increment byte loads): New patterns.

Sat Jun  4 21:06:29 1994  Kaveh R. Ghazi  (ghazi@noc.rutgers.edu)

	* sys-types.h (__gnuc_va_list): Use instead of va_list.
	* sys-protos.h (*): Use __gnuc_va_list, not va_list.

Sat Jun  4 07:19:39 1994  Richard Earnshaw (rwe11@cl.cam.ac.uk)

	* arm.c (print_multi_reg, output_call, output_call_mem,
	output_mov_long_double_fpu_from_arm,
	output_mov_long_double_arm_from_fpu,
	output_mov_double_fpu_from_arm, output_mov_double_arm_from_fpu,
	output_return_instruction, output_func_{prologue,epilogue},
	arm_print_operand, output_load_symbol):  Print the register prefix
	before each register name.
	(output_func_prologue, output_lcomm_directive):  Output the target
	dependent comment char for asm comments.
	* arm.h (FUNCTION_PROFILER): Delete duplicate definition.
	(FUNCTION_PROFILER, TRAMPOLINE_TEMPLATE, ASM_FILE_START,
	ASM_OUTPUT_REG_{PUSH,POP}, PRINT_OPERAND_ADDRESS):  Output register
	prefix before any explicit register name.
	(ASM_OUTPUT_LONG_DOUBLE, ASM_OUTPUT_DOUBLE, ASM_OUTPUT_FLOAT,
	ASM_OUTPUT_COMMON): Output the target dependent comment char.
	(ASM_FILE_START): Output register alias for r10.
	(REGISTER_NAMES): Output "r9" now for r9, not "rfp".
	(ADDITIONAL_REGISTER_NAMES): New macro.
	* arm.md (all patterns explicitly mentioning register names): Output
	the target dependent prefix before the register name.
	(all patterns with asm comments): Output the target dependent comment
	character.

Fri Jun  3 18:14:07 1994  Doug Evans  (dje@cygnus.com)

	* c-common.c (decl_attributes): Fix section attributes.
	* varasm.c (make_decl_rtl): If section attribute is being ignored,
	really ignore it.

Fri Jun  3 15:53:57 1994  Torbjorn Granlund  (tege@adder.cygnus.com)

	* pa.h (FP_REGNO_P): New macro for intra file usage.
	(REGNO_OK_FOR_FP_P): Use FP_REGNO_P.
	(FUNCTION_VALUE_REGNO_P): Revert last change.
	* pa.md (mulsi3): Use MATCH_DUP for op3, not MATCH_OPERAND.

	* pa.h 	(CONDITIONAL_REGISTER_USAGE): Partially revert last changes;
	Make non-existing 1.0 fp regs fixed, including odd-numbered regs.
	(enum reg_class): Get rid of SNAKE_FP_REGS, GENERAL_OR_SNAKE_FP_REGS,
	and NON_SHIFT_REGS.
	(REG_CLASS_NAMES): Likewise.
	(REG_CLASS_CONTENTS): Likewise.
	(REGNO_REG_CLASS): Likewise.
	(HARD_REGNO_MODE_OK): Corresponding changes.  Don't force 1.0 fpregs
	to even regno here; fixed_regs does the job better.
	(FP_REG_CLASS_P): Get rid of SNAKE_FP_REGS.
	(REG_CLASS_FROM_LETTER, case 'z'): Deleted.
	(HARD_REGNO_NREGS): Partially revert last change.
	(CLASS_MAX_NREGS): Partially revert last change.
	* pa.md (globally): Delete 'x' constraint or change it to 'f',
	as apropriate.

Fri Jun  3 09:18:55 1994  Richard Earnshaw (rwe11@cl.cam.ac.uk)

	* arm.h (CONST_OK_FOR_LETTER_P): Only allow constants that are valid
	when inverted for 'K'.  Only allow constants that are valid when
	negated for 'L'.
	* arm.md (all patterns): Update instruction generation to reflect new
	meanings of constraints 'K' and 'L'.  Use output type 'B' to
	generate an inverted constant.  Use output type 'N' to generate a
	negated floating point constant.

Thu Jun  2 22:43:58 1994  Jeffrey A. Law  (law@snake.cs.utah.edu)

	 * pa.h (TARGET_SWITCHES): Enable TARGET_LONG_CALLS when
	TARGET_PORTABLE_RUNTIME is enabled.
	* pa.c (output_call): If TARGET_LONG_CALLS is enabled, then emit
	an inline long-call sequence.
	* pa.md (millicode define_delay): Disable delay slots if
	TARGET_LONG_CALLS.
	(call_internal_reg, call_value_internal_reg): If TARGET_LONG_CALLS
	is enabled, then emit an inline long-call sequence.  Fix length
	computation for TARGET_LONG_CALLS.
	(millicode calls): Fix length computation for TARGET_LONG_CALLS.

	* pa.h (ASM_DECLARE_FUNCTION_NAME): Fix typo.

Thu Jun  2 18:28:07 1994  Jason Merrill  (jason@deneb.cygnus.com)

	* stmt.c (expand_end_bindings): Don't bother emitting cleanups
	after a barrier.

Thu Jun  2 18:10:36 1994  Stephen L Moshier  (moshier@world.std.com)

	* libgcc2.c (__floatdisf):  Protect against double-rounding error.

Thu Jun  2 17:47:54 1994  David Edelsohn  (edelsohn@npac.syr.edu)

	* rs6000.h (MASK_PPCFPX): Delete.
	(MASK_PPC_GPOPT, MASK_PPC_GFXOPT, TARGET_PPC_GPOPT, TARGET_PPC_GFXOPT):
	New Macros.
	(TARGET_SWITCHES): Remove -mpowerpc-fpx; add -mpowerpc-gpopt
	and -mpowerpc-gfxopt.
	* rs6000.c (processor_target_table): Use new macros.
	* rs6000.md (define_function_unit): Remove ppc604 from sqrt list.
	(divsi3, udivsi3): Remove spaces from PowerPC output templates.
	(sqrtsf2, maxsf3, minsf3, sqrtdf2, maxdf3, mindf3): Use new macros.
	(floatdidf2, fix_truncdfdi2, ffsdi2, muldi3): New patterns.
	({s,u}muldi3_highpart, divdi3, udivdi3, rotldi3): Likewise.
	(movdi): Handle moves between FPRs and GPRs.
	(scc insn): Correct swapped compare and delayed_compare attributes.

Thu Jun  2 14:45:04 1994  Richard Earnshaw (rwe11@cl.cam.ac.uk)

	* arm.c (arm_condition_code): Move to start of file.
	(const_pool_offset): Correct typo.
	(fp_const_from_val): New function.
	(all instruction generators): mark position where conditionalization
	should be with '%?'.
	(output_move_double): Use new '%m' output type to simplify load/store
	multiple generation.
	(shift_instr): Delete.
	(shift_op): New function.
	(output_arithmetic): Delete.
	(output_arithmetic_with_shift): Delete.
	(output_arithmetic_with_immediate_multiply): Delete.
	(output_shifted_move): Delete.
	(output_shift_compare): Delete.
	(arm_print_operand): New function.
	* arm.h (output_func_{prologue,epilogue}): Change declarations from
	output_{prologue,epilogue}.
	(arm_output_llc, arithmetic_instr,
	 output_arithmetic_with_immediate_mulitply,
	 output_arithmetic_with_shift, shift_instr): Delete function
	definitions.
	(ASM_OUTPUT_OPCODE): Delete.
	(PRINT_OPERAND): Call arm_print_operand, instead of doing it directly.
	(ARM_COMMENT_CHAR): New macro.
	(ARM_REG_PREFIX): New macro.
	(ARM_SIGN_EXTEND): New macro.
	(PRINT_OPERAND_ADDRESS): Delete variable 'shift'.  Change type of
	variable 'offset' to HOST_WIDE_INT.  Use arm_print_operand to handle
	shifts in addresses.
	* arm.md (all output patterns): Use new capabilities of
	arm_print_operand to simplify output sequences.  Mark position of
	condition code with '%?'.

	* riscix.h (ASM_FINAL_SPEC [CROSS_COMPILE]): Correct typo.

Thu Jun  2 08:14:00 1994  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* c-common.c (c_build_type_variant): Don't change TYPE_MAIN_VARIANT
	of new type.

	* expr.c (expand_expr, case ADDR_EXPR): If result is ignored,
	just return const0_rtx.

Wed Jun  1 13:52:01 1994  Jason Merrill  (jason@deneb.cygnus.com)

	* i386/sco4.h: #define NO_IMPLICIT_EXTERN_C.

Wed Jun  1 04:55:06 1994  Richard Earnshaw (rwe11@cl.cam.ac.uk)

	* arm.c: General tidy up.
	#include <string.h>.
	Declare some prototypes.
	(output_memory_reference_mode): Change type to enum machine_mode.
	(arm_const_nmoves): Delete.
	(adjacent_mem_locations, {load,store}_multiple_operation): Explicitly
	declare to return int.
	({load,store}_multiple_operation): Change type of 'count', 'base' and
	'i' to HOST_WIDE_INT.
	(output_add_immediate): Change type of 'n' to HOST_WIDE_INT.
	(output_multi_immediate): Change type of Argument 'n' to
	HOST_WIDE_INT, if wider than 32 bits, mask out the high bits.
	(output_arithmetic_with_immediate_multiply): Change type of 'shift'
	to HOST_WIDE_INT.
	(output_func_{prologue,epilogue}): Renamed from
	output_{prologue,epilogue}.  Check all registers to see if they are
	live, but only push/pop them if they are not in call_used_regs.
	* arm.h: Delete some dead code.
	(FUNCTION_{PROLOGUE,EPILOGUE}): Call output_func_{prologue,epilogue}.
	(INITIAL_ELIMINATION_OFFSET): Inspect all registers, but only add
	those that are not in call_used_regs.
	(GO_IF_LEGITIMATE_INDEX): Change type of variable 'range' to
	HOST_WIDE_INT; change type of variable 'code' to enum rtx_code.
	(REVERSIBLE_CC_MODE): New macro.

	* arm.c (const_pool_offset): New function.
	(get_prologue_size): New function.
	(output_func_prologue): Eliminate variable code_size.
	(output_func_epilogue): Only call arm_increase_location when
	optimizing; also add the size of the function just compiled, and the
	size of the prologue.
	(arm_output_asm_insn): Delete.  All callers changed to use
	output_asm_insn.
	(arm_output_llc): Delete.
	(output_load_symbol): New first parameter 'insn'.  Rewrite so that
	assembler can detect whether we made a mistake.
	* arm.h (arm_output_asm_insn): Delete declaration.
	(EXTRA_CONSTAINT): New constraint 'R' to match a constant pool label.
	Make constraint 'S' never match when not optimizing.
	(CONSTANT_ADDRESS_P): Only accept symbols marked with SYMBOL_REF_FLAG
	when optimizing.
	(ENCODE_SECTION_INFO): Don't mark any symbols when not optimizing.
	(ASM_OUTPUT_REG_{PUSH,POP}: Don't call arm_increase_location.
	(ASM_OUTPUT_ADDR_VEC_ELT): Likewise.
	* arm.md (all insn and peephole patterns): Rewrite without using
	arm_output_asm_insn.
	(matcher for movsi): New alternative to load symbol directly into a
	register.  Add new parameter in call to output_load_symbol.

	* arm.md (all patterns): Length attribute now describes length in
	bytes.
	* arm.c (short_branch): Convert length calculations to bytes.

Tue May 31 20:35:39 1994  Torbjorn Granlund  (tege@adder.cygnus.com)

	* pa.c (emit_move_sequence): Add missing argument to symbolic_operand.
	(output_block_move): Prefer addl to add.
	(print_operand): Print fp regs with L suffix when appropriate.
	(output_arg_descriptor): Rewrite to accomodate new convention for
	USE information.

	* pa.h (SECONDARY_MEMORY_NEEDED): Simplify.
	(ADDITIONAL_REGISTER_NAMES): Define.
	(CONDITIONAL_REGISTER_USAGE): Make PIC_OFFSET_TABLE_REGNUM fixed
	again.

	Changes to combine fp registers for 1.0 and 1.1 architectures.
	(Make explicit clobbers of fp registers work.)
	* pa.h (FIRST_PSEUDO_REGISTER): Now 89.
	(FIXED_REGISTERS): Delete 1.0 fp registers,
	(CALL_USED_REGISTERS): Likewise.
	(CONDITIONAL_REGISTER_USAGE): Almost deleted.
	(REG_ALLOC_ORDER): Update register numbers.
	(HARD_REGNO_NREGS): Delete special case for 1.0 fp registers.
	(HARD_REGNO_MODE_OK): Rewrite.  Don't allow use of odd fp registers
	(enum reg_class): Delete HI_SNAKE_FP_REGS and FP_OR_SNAKE_FP_REGS.
	(REG_CLASS_NAMES): Corresponding change.
	(REG_CLASS_CONTENTS): Delete HI_SNAKE_FP_REGS and
	FP_OR_SNAKE_FP_REGS.  Make SNAKE_FP_REGS class contain all fp
	registers.  Update all values for changed register numbering.
	(REGNO_REG_CLASS): Corresponding changes.
	(REG_CLASS_FROM_LETTER): Delete 'y'.
	(FP_REG_CLASS_P): No longer test HI_SNAKE_FP_REGS.
	(CLASS_MAX_NREGS): Delete special case for 1.1 fp registers.
	(FUNCTION_VALUE): Remove TARGET_SNAKE conditionals.
	(LIBCALL_VALUE): Likewise.
	(FUNCTION_ARG_REGNO_P): Likewise.
	(FUNCTION_VALUE_REGNO_P): Likewise.  Add registers 29 and 33.
	(FUNCTION_ARG): Remove TARGET_SNAKE conditionals.  Update register
	numbers.
	(REGNO_OK_FOR_FP_P): Update register number.
	(REGISTER_NAMES): Delete special entries for 1.0 fp registers.
	(DBX_REGISTER_NUMBER): Likewise.
	* pa.c (compute_frame_size): Update for changed register numbers.
	Simplify loops over general registers to stop at register 4.
	(hppa_expand_prologue): Likewise.
	(hppa_expand_epilogue): Likewise.

Tue May 31 19:32:18 1994  Jim Wilson  (wilson@cygnus.com)

	* mips.md (movesi_unaligned, movsi_ulw, movsi_usw): Delete.
	(extv, extzv, insv, movsi_ulw, movsi_usw): New patterns.

	* dbxout.c (dbxout_type): Always emit cross-references if
	use_gnu_debug_info_extensions set.

	* final.c (output_source_line): Call xcoffout_source_line.
	* xcoffout.c (xcoff_lastfile): New variable.
	(ABS_OR_RELATIVE_LINENO, ASM_OUTPUT_SOURCE_LINE): Define here.
	(xcoffout_source_file, xcoffout_source_line): New functions.
	(xcoffout_declare_function): Use xcoffout_source_file.
	* xcoffout.h (xcoff_lastfile): Declare.
	(DBX_OUTPUT_MAIN_SOURCE_FILENAME): Clean up.  Set xcoff_lastfile.
	(ABS_OR_RELATIVE_LINENO, ASM_OUTPUT_SOURCE_LINE): Delete here.
	(DBX_OUTPUT_SOURCE_FILENAME): Delete.

	* unroll.c (copy_loop_body): Copy CALL_INSN_FUNCTION_USAGE field.

	* sparc.h (ASM_SPEC): Don't pass -k when -pg or -p given.
	(OVERRIDE_OPTIONS): Warn when disabling -fpic.

	* mips-tdump.c (print_global_hdr): Remove "l" from printf format
	for flags.
	(print_sym_hdr): Add missing "l" to printf formats.
	(print_symbol, print_file_desc): Likewise.

	* i960.h (PUT_SDB_TYPE): Adjust value for compatibility with GNU960
	toolchain.

	* sparc.h (LIB_SPEC): Don't link in /usr/lib/bb_link.o with -a.
	(CONDITIONAL_REGISTER_USAGE): When -a, make %g1 and %g2 fixed.

	* mips/iris5gas.h, mips/iris5gdb.h: New files.
	* configure (mips-sgi-irix5): Use iris5gas.h and iris5gdb.h.

Tue May 31 19:21:44 1994  Torbjorn Granlund  (tege@adder.cygnus.com)

	* pa.md (movsi matcher): Use ldi for moving of 0 to a reg.
	(movhi matcher): Likewise.
	(movqi matcher): Likewise.
	(many patterns): Prefer addl to add, and shNaddl to shNadd.
	(define_split for (plus (reg) (large_constant))): Cleanup.
	(divsi3): Use match_dup for operand 3, not match_operand.
	(udivsi3): Likewise.
	(modsi3): Likewise.
	(umodsi3): Likewise.

Tue May 31 19:15:31 1994  Doug Evans  (dje@cygnus.com)

	* toplev.c (v_pedwarn_with_decl): Don't even issue warnings from
	pedantic errors in system header files.

Tue May 31 17:16:41 1994  David Edelsohn  (edelsohn@npac.syr.edu)

	* rs6000.md (extendqidi2, extendqisi2, extendqihi2): Remove
	non-existent lba instruction.
	(ashrdi3): Undo previous change.

Tue May 31 12:30:00 1994  Jason Merrill  (jason@deneb.cygnus.com)

	* toplev.c (lang_options): Add -f{no-,}implicit-templates.
	(compile_file): Don't output SDB debugging info for
	externals.

Tue May 31 07:20:18 1994  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* stmt.c (expand_asm_operands): Make MEM with BLKmode for clobber
	of "memory".
	* loop.c (note_addr_stored): A SET or CLOBBER of a BLKmode MEM means
	that all memory is clobbered.

Mon May 30 14:01:48 1994  Doug Evans  (dje@cygnus.com)

	* gcc.c (default_compilers): Pass -MG to cpp if present.
	(option_map): New option --print-missing-file-dependencies/-MG.
	* cccp.c (print_deps_missing_files): New global.
	(main): New argument -MG.  Treat missing include files as
	generated files and output dependencies for them.

Mon May 30 10:42:14 1994  Frederic Pierresteguy  (F.Pierresteguy@frcl.bull.fr)

	* m68k/dpx2cdbx.h (PREFERRED_DEBUGGING_TYPE): Define as SDB_DEBUG.
	* m68k/dpx2g.h: Disable code that manages gcc.ifile.

Mon May 30 10:35:49 1994  Stephen L Moshier  (moshier@world.std.com)

	* optabs.c (expand_float):  Avoid double-rounding when float is 
	is narrower than int.
	* real.c (significand_size): New function.
	* real.h (significand_size): Declare.

Sun May 29 15:58:21 1994  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* jump.c (jump_optimize): When deleting unneeded stack adjusts
	or mem-mem copies, use delete_computation.

	* combine.c (force_to_mode): NEXT_SELECT is true for NEG.
	Only exit quickly if X is narrower than MODE and MASK has all
	bits in X's mode set.
	(force_to_mode, case SUBREG): Don't check for WORD_REGISTER_OPERATIONS.
	(force_to_mode, case NEG): Special-case test for low-order bit.

	* rtlanal.c (volatile_insn_p): Call ourselves in recursive scan.

Sat May 28 19:03:23 1994  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* c-parse.in (init, compstmt, stmt, all_iter_stmt_with_decl):
	If the lookahead token is a constant and we need to pop the
	momentary obstack, don't free it.

	* stmt.c (expand_end_case): Have INDEX_TYPE track conversions done
	to INDEX_EXPR.

Sat May 28 06:25:40 1994  Torbjorn Granlund  (tege@adder.cygnus.com)

	* pa.md (call): Force address into register in non-symbol case.
	(call_value): Likewise.

Fri May 27 19:29:30 1994  Doug Evans  (dje@cygnus.com)

	* toplev.c (compile_file): Call init_regs after `word_mode' is valid.
	* regclass.c (init_reg_modes): If choose_hard_reg_mode can't find a
	valid mode, fall back to word_mode.

	* expr.c (use_reg): Fix recording of USE information.
	(use_regs): Likewise.
	Delete argument `reg'.  All callers changed.
	* expr.h (use_regs): Update prototype.
	* calls.c (expand_call): Update call to use_regs.  Call use_reg
	if parm is wholly in registers.

	* configure: If compiling in separate dir, add subdirs to .gdbinit.

Fri May 27 18:18:23 1994  David Edelsohn  (edelsohn@npac.syr.edu)

	* rs6000.md (zero_extendqidi2, zero_extendhidi2): Use rldicl
	instruction.
	* rs6000.h (RTX_COSTS): Update PPC603 and PPC604 values.

Fri May 27 17:56:07 1994  Douglas Rupp (drupp@cs.washington.edu)

	* i386/xm-dos.h (DIR_SEPARATOR): New macro.

Fri May 27 17:45:08 1994  Holger Teutsch  (teutsch@ffm-iw.Degussa.DE)

	* clipper.h (PCC_STATIC_STRUCT_RETURN): No longer defined.

Fri May 27 17:36:53 1994  Pat Rankin  (rankin@eql.caltech.edu)

	* make-l2.com: Update to handle `ginclude' subdirectory
	when compiling libgcc2.

Fri May 27 17:30:37 1994  Matthias Pfaller  (leo@marco.de)
	
	* ns32k.c (print_operand_address): print_operand_address
	creates PLUS-rtls for internal use, so it has to handle them.

Fri May 27 16:13:53 1994  Chris Torek  (torek@elf.bsdi.com)

	* function.c (assign_parms): Set REG_USERVAR_P when parm
	is passed by invisible reference but can live in register.

Fri May 27 06:03:11 1994  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* reload.c (find_reloads): Revert to old code and change secondary
	reloads to RELOAD_FOR_OPERAND_ADDRESS too.

	* combine.c (try_combine): Don't make complemented XOR for
	constant out of range.

	* alpha.c (or_operand): Renamed from ior_operand.
	* alpha.h (PREDICATE_CODES): Likewise.
	* alpha.md (iordi3): Likewise.
	(xordi3): Use or_operand and add second alternative.
	(eqv): Only accept registers.

	* expr.c (expand_expr, case CONSTRUCTOR): If constant and large
	enough for memcpy to be used, build constructor into static memory.

	* alpha.md: Add define_split for sign-extended PLUS of a MULT
	of an SImode comparison.

	* combine.c (simplify_comparison): Narrow comparison for AND's
	that are ZERO_EXTENDs.
	Can widen for all comparisons if inputs are both sign extended.

	* reload1.c (reload_as_needed): Update spill_reg_order once we sort
	spill_regs.

	* alpha.md: Add define_split for sign-extended PLUS of an SImode
	comparison; change comparison to DImode.

	* stmt.c (expand_end_case): Use old type of INDEX_EXPR when making
	a constant.

	* local-alloc.c (requires_inout): Renamed from requires_inout_p and
	returns number of alternatives that require a match.
	(block_alloc): Use new function and handle case where all
	alternatives have some operand that must match operand 0.

	* local-alloc.c (qty_phys_num{,_copy}_sugg): New variables.
	(qty_phys_has{,_copy}_sugg): Deleted.
	(qty_sugg_compare{,_1}): New functions.
	(local_alloc): Allocate and init new vars instead of deleted ones.
	(block_alloc): Update and use new vars.
	Order quantities using new functions when allocating quantities
	with suggested registers.
	(combine_regs, find_free_reg): Use new vars to count number
	of suggestions.

Thu May 26 11:55:44 1994  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* jump.c (jump_optimize): When looking for an `if' statement
	that takes two insns to compute a result using a temporary,
	allow the temporary to be a SUBREG.

	* combine.c (simplify_comparison): Call CANONICALIZE_COMPARISON,
	if defined.
	* alpha.h (CANONICALIZE_COMPARISON): New macro.

	* combine.c (simplify_if_then_else): Don't make (mult (cond))
	in simple case; leave as IF_THEN_ELSE instead.

	* expmed.c (expand_divmod): Correctly set CAN_CLOBBER_OP0 when we've
	converted OP0 to COMPUTE_MODE.

Thu May 26 11:41:58 1994  Ian Lance Taylor  (ian@cygnus.com)

	* fixincludes: Protect bool in curses.h with #ifndef __cplusplus,
	since g++ now defines bool as a basic type.

	* fixinc.svr4: Protect definition of __P used in Solaris math.h
	and floatingpoint.h to avoid future fixproto conflicts.

	* Makefile.in (stmp-fixinc): Don't pass ${srcdir} argument to
	$(FIXINCLUDES); no longer needed, and always problematical for
	binary only installations.
	* fixincludes: Remove initialization of ${SRCDIR}.  Don't
	explicitly copy over multimedia/audio_errno.h; should be handled
	by Oct 11, 1993 change.
	* fixinc.svr4: Remove initialization of ${SRCDIR}.
	* fixinc.sco, fixinc.dgux: Likewise.

Fri May 20 12:48:24 1994  Jim Wilson  (wilson@cygnus.com)

	* stmt.c (expand_exit_loop_if_false): Emit conditional jump around
	unconditional loop exit instead of conditional loop exit.

	* rs6000.c (output_prolog): Use multiple fputs calls instead of
	one call with multiple strings.

	* iris4.h (STARTFILE_SPEC, LIB_SPEC): Define.

	* xcoffout.c (MAKE_LINE_SAFE): Delete.
	(ASM_OUTPUT_LBB, ASM_OUTPUT_LBE): Don't use MAKE_LINE_SAFE.

Fri May 20 01:18:30 1994  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* config.sub (basic_machine): Accept cxux*.

Thu May 19 19:12:41 1994  Mike Stump  (mrs@cygnus.com)

	* calls.c (expand_call): Only destroy temps here, if -fshort-temps
	is given.

Thu May 19 19:07:59 1994  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* config.sub: Fix unrecognized os error message.

Thu May 19 17:46:55 1994  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* reload1.c (emit_reload_insns): When seeing if an equivalent
	register can have it's output reload deleted, check for REG_DEAD
	notes for reload_in instead of calling dead_or_set_p.

Thu May 19 16:38:32 1994  Stephen L Moshier  (moshier@world.std.com)

	* emit-rtl.c (operand_subword): Fix arg of REAL_VALUE_TO_TARGET_SINGLE
	and .._DOUBLE.  Permit float subword extraction when host's word
	width is wider than target's.

Thu May 19 15:09:21 1994  Ian Lance Taylor  (ian@cygnus.com)

	* fixincludes: Make OSF/1 getopt.h fix work on AIX also.

Wed May 18 15:34:10 1994  Jason Merrill  (jason@deneb.cygnus.com)

	* fixincludes: Add forward declaration of struct exception to
	SunOS 4 math.h.

Wed May 18 12:46:46 1994  Per Bothner  (bothner@kalessin.cygnus.com)

	* stor-layout.c (layout_decl):  Allow any integral types
	for bit fields.  (Specifically, C++ now has a 'bool' type.)

Wed May 18 16:32:40 1994  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* reload1.c (compare_spill_regs): Fix typo in declaration.

Wed May 18 10:39:00 1994  Brendan Kehoe  (brendan@lisa.cygnus.com)

	* fixinc.svr4: Avoid the SVR4 typedef of bool in curses.h when
	compiling for C++, since g++ now supports it as an official typename.

Tue May 17 18:06:32 1994  Matthias Pfaller  (leo@marco.de)

	* ns32k.md: Don't use the extsd/extd instructions on the ns32532.

Tue May 17 17:44:38 1994  Pat Rankin  (rankin@eql.caltech.edu)

	* make-cc1.com (CFLAGS): Separate include file handling; for
	stage 1, CFLAGS1 is appended to CFLAGS, otherwise CFLAGS2.

Tue May 17 16:35:22 1994  Jason Merrill  (jason@deneb.cygnus.com)

	* convert.c (convert_to_real): Accept boolean values.

	* config/m68k/hp320.h: #define NO_IMPLICIT_EXTERN_C

Tue May 17 15:52:05 1994  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* libgcc2.c (__umoddi3): Correct type of variable `w'.

	* combine.c (simplify_set): Move call to make_field_assignment
	to end; if SRC or DEST is a (clobber (const_int 0)), return it.
	(force_to_mode): If X is a CALL, just return it.

	* reload.c (find_reloads): Properly account for cost when
	constant is forced to memory to ensure same alternative chosen later.

Tue May 17 11:30:19 1994  Richard Earnshaw  (rwe11@cl.cam.ac.uk)

	* combine.c (simplify_set): Use rtx_equal_p to compare cc_use and its
	setter.
	(make_extraction): Don't put a subreg around a register if it is 
	already in the correct mode.

	* reload1.c (compare_spill_regs): New function.
	(reload_as_needed): Sort the spilled regs.
	(allocate_reload_reg): If we have group needs and failure would be
	fatal, do not try to do round-robin allocation of the spill regs.

Mon May 16 18:58:10 1994  David Edelsohn  (edelsohn@npac.syr.edu)

	* rs6000.md (zero_extendqidi2): Fix omission of TARGET_POWERPC64
	test in previous change.

Mon May 16 14:59:25 1994  Per Bothner  (bothner@cygnus.com)

	* dbxout.c (dbxout_type):  When emitting an ENUMERAL_TYPE, if
	the precision is different from the default precision (perhaps
	because of -fshort-enums), write out the precision.

Mon May 16 17:44:49 1994  Stephen L Moshier  (moshier@world.std.com)

	* real.c (ereal_from_int, ereal_to_int, etarsingle):  Correct
	signed/unsigned discrepancies.
	(ereal_from_double): Avoid "right shift count too big" warning
	in previous change.
	* final.c (split_double): Fix arg of REAL_VALUE_TO_TARGET_DOUBLE.

	* real.h (REAL_VALUE_FROM_TARGET_SINGLE, .._DOUBLE):  Change
	arg from long to HOST_WIDE_INT.
	* real.c (ereal_from_float, .._double): Likewise, and unpack
	the HOST_WIDE_INTs.

Mon May 16 16:16:32 1994  Richard Earnshaw  (rwe11@cl.cam.ac.uk)

	* flow.c (try_pre_increment_1): Don't try to create a pre-increment
	expression if the register dies in the succeeding insn.

	* expr.c: Use #ifdef TARGET_EDOM, not #if.

	* expr.c (convert_move): When {zero,sign}_extending, allow a wider
	intermediate than to_mode if truncation is a no-op.

Mon May 16 11:49:28 1994  Doug Evans  (dje@cygnus.com)

	* m68k/apollo68.h (REGISTER_PREFIX_MD): Delete.

Mon May 16 08:11:57 1994  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* rs6000.c (rs6000_convert_preincs): Delete.
	* rs6000.h (FINAL_PRESCAN_INSN): Delete.

	* c-typeck.c (initializer_constant_valid_p): Rework to use
	precision, not size.
	Allow conversions from integer to pointer if int is wide enough.

	* c-decl.c (finish_enum): Handle VALUES being an ERROR_MARK.

	* rs6000.md: Replace bogus "andil" opcode with rlinm.

Sat May 14 21:26:05 1994  Doug Evans  (dje@cygnus.com)

	* hard-reg-set.h (GO_IF_HARD_REG_EQUAL): Fix typo.

	* jump.c (find_cross_jump): Two CALL_INSNs only compare equal if
	their CALL_INSN_FUNCTION_USAGEs are the same as well.

	* stupid.c (stupid_life_analysis): Make sure a function result reg
	is still live if it contains an argument.

Fri May 13 22:17:48 1994  Doug Evans  (dje@cygnus.com)

	* reorg.c (mark_referenced_resources): Fix typo.

Fri May 13 18:54:38 1994  Jason Merrill  (jason@deneb.cygnus.com)

	* integrate.c (integrate_decl_tree): Use copy_node to make a copy
	of the decl.  Also call copy_lang_decl to copy the
	language-specific bits.
	* tree.h: Declare copy_lang_decl.
	* c-decl.c (copy_lang_decl): No-op function that will never
	actually be called.

Fri May 13 15:12:20 1994  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* cse.c (cse_insn): Correctly check for two modes being the
	same number of words.

Fri May 13 05:03:51 1994  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* c-parse.in (enumlist): Add error alternative.

Thu May 12 23:25:38 1994  Jason Merrill  (jason@deneb.cygnus.com)

	* c-common.c (truthvalue_conversion): If expr is a BIT_AND_EXPR
	where one of the operands is integer_onep, just return expr.

Thu May 12 20:08:49 1994  Mike Stump  (mrs@cygnus.com)

	Fixup lifetime of temporaries.

	* calls.c (expand_call): Only destroy temporaries at the end
	of function calls, if flag_short_temps is set.
	* expr.c (safe_from_p, expand_expr): Handle CLEANUP_POINT_EXPRs.
	* expr.c (expand_expr): Improve handling of temporaries inside
	COND_EXPRs, cures call to sorry.
	* expr.c (defer_cleanups_to): New routine to handle the deferral
	of cleanups.
	* flags.h (flag_short_temps): New flag, to allow better control
	over the lifetime of temporaries.
	* toplev.c (flag_short_temps, lang_options): Ditto.
	* tree.def (CLEANUP_POINT_EXPR): Add, to allow better control over 
	the lifetime of temporaries.

Thu May 12 19:33:54 1994  David Edelsohn  (edelsohn@npac.syr.edu)

	* rs6000.md (function units): Numerous cycle count change.
	(zero_extendqidi2, extendqidi2, zero_extendhidi2): New patterns.
	(extendhidi2, zero_extendsidi2, extendsidi2): Likewise.
	(zero_extendqisi2, zero_extendqihi2, zero_extendhisi2): Use
	andil/andi instead of rlinm/rlwinm.
	(zero_extendqihi2): Add condition register variants.
	(extendqisi2, extendqihi2): Use extsb for PowerPC.
	(adddi3, subdi3, negdi2, ashrdi3): Emulate only if !TARGET_POWERPC64.
	(movdf, movdi, movti): New PowerPC64 versions.
	(load/store with update): New PowerPC64 patterns.

Thu May 12 18:50:55 1994  Stephen L Moshier  (moshier@world.std.com)

	* real.c (m16m): Change first arg to int; all callers changed.

Thu May 12 18:46:26 1994  Bill Cox  (bill@cygnus.com)

	* fixincludes: Add definition of DBL_MAX to math.h for Lynx math.h.
	Correct return type of strlen in Lynx string.h.
	Delete definition of 'void' as 'int' from Lynx curses.h.

Thu May 12 18:11:33 1994  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* reload.c (find_reloads): Don't change a secondary reload
	to RELOAD_FOR_OPERAND_ADDRESS.

	* function.c (assign_parms): Fix typo in previous change.

Thu May 12 15:48:54 1994  Stephen R. van den Berg  (berg@pool.informatik.rwth-aachen.de)

	* c-common.c (decl_attributes): Revert to identifiers for
	mode attributes.
	* libgcc2.c: Likewise.

Thu May 12 15:41:38 1994  Pat Rankin  (rankin@eql.caltech.edu)

	* vax/xm-vms.h (lookup_name_current_level_global): New macro.

Wed May 11 17:44:47 1994  Jim Wilson  (wilson@cygnus.com)

	* cse.c (cse_insn): Set src_eqv if the dest is a STRICT_LOW_PART.

	* expmed.c (store_fixed_bit_field): Delete code to handle
	MODE_FLOAT values here.
	(store_bit_field): Put it here instead.

Wed May 11 16:18:21 1994  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* a29k.c (a29k_clobbers_to): New function.
	* a29k.md (clobbers_to): Deleted.
	(call_internal, call_value_internal): New patterns.
	(call, call_value): Just call new patterns and a29k_clobbers_to.

	* stor-layout.c (layout_type): Use POINTER_SIZE, instead of width
	of Pmode, when appropriate.

	* calls.c (emit_call_1): Put new function usage data at end of
	any data already there.
	* expr.c (expand_builtin_apply): Likewise.

	* sched.c (sched_analyze_insn): Fix typo in last change.

Wed May 11 14:45:12 1994  Doug Evans  (dje@cygnus.com)

	* configure: Fix handing case of no language subdirs.

Wed May 11 12:11:40 1994  Ian Lance Taylor  (ian@cygnus.com)

	* fixincludes: Don't recursively search symlinks to `.'.

Tue May 10 17:49:57 1994  Stephen R. van den Berg  (berg@pool.informatik.rwth-aachen.de)

	* configure: Include stage4 in the list.

	* gcc.c (process_command): Kludge in stageN/../include instead of
	include.

Mon May  9 21:04:19 1994  Jim Wilson  (wilson@cygnus.com)

	* sparc.h (*TF*_LIBCALL): Delete `*' from libcall name.

Mon May  9 18:42:10 1994  Matthias Pfaller  (leo@marco.de)

	* ns32k.c (output_move_dconst): Fix errors on ranges.

Mon May  9 18:33:16 1994  Chris Torek  (torek@bsdi.com)

	* gcc.c (delete_if_ordinary): New function.
	(delete_temp_files, delete_failure_queue): Call it.

Sat May  7 12:12:58 1994  Andreas Neubacher  (aneubach@risc.uni-linz.ac.at)

	* i386/seq-sysv3.h (LIB_SPEC): Support -fshared-data.
	(CPP_SPEC): Set _SEQUENT_ to 1.
	(SHARED_SECTION_ASM_OP, ASM_OUTPUT_SHARED_COMMON): Supply new macros.
	(SHARED_BSS_SECTION_ASM_OP, BSS_SECTION_FUNCTION): Likewise.

Sat May  7 10:09:49 1994  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* reorg.c (mark_{referenced,set}_resources): Fix typos in last change.

	* reload1.c (emit_reload_insns): Don't try to delete output reload
	if there isn't one.

	* i386.h (REG_ALLOC_ORDER): New macro.

	* sched.c (sched_analyze_insn, attach_deaths_insn): Look at
	CALL_INSN_FUNCTION_USAGE.

	* reload1.c (choose_reload_regs): Remove previous change.

Fri May  6 20:32:22 1994  Doug Evans  (dje@canuck.cygnus.com)

	* sparc.c (leaf_reg_backmap): Delete.
	(sparc_flat_compute_frame_size): Renamed from
	sparc_frw_compute_frame_size.  All callers changed.
	(sparc_flat_save_restore): Likewise.
	(sparc_flat_output_function_prologue): Likewise.
	Delete decl of call_used_regs.
	Delete reference to frame_base_name, use frame pointer explicitly.
	Print prologue end marker.
	(sparc_flat_output_function_epilogue): Likewise (renaming).
	Delete decls of asm_out_data_file, asm_out_file, call_used_regs.
	Print epilogue start marker.
	(sparc_flat_epilogue_delay_slots): Likewise (renaming).
	(sparc_flat_eligible_for_epilogue_delay): Likewise.
	* sparc.h (TARGET_FRW): Add note saying this option is deprecated.
	(TARGET_FLAT): Renamed from TARGET_FRW_COMPAT.
	(TARGET_SWITCHES): Delete references to -mfrw, -mfrw-compat.
	Add -mflat.
	(CONDITIONAL_REGISTER_USAGE): If -mflat, fix %i7, rename "%fp"
	to "%i7", and make %g7 a global_reg.
	(FRAME_POINTER_REQUIRED): Handle -mflat.
	(INITIAL_FRAME_POINTER_OFFSET): Likewise.
	(ARG_POINTER_REGNUM): Explicitly say it's the frame pointer.
	(LEAF_REGISTERS): Make %g7 not a leaf register.
	(leaf_reg_backmap): Delete.
	(LEAF_REG_BACKMAP): Likewise.
	(FUNCTION_PROLOGUE): Handle -mflat.
	(FUNCTION_EPILOGUE): Likewise.
	(DELAY_SLOTS_FOR_EPILOGUE): Likewise.
	(ELIGIBLE_FOR_EPILOGUE_DELAY): Likewise.

Fri May  6 14:05:00 1994  Stephen R. van den Berg  (berg@pool.informatik.rwth-aachen.de)

	* tree.h (TYPE_ATTRIBUTES): New macro.
	(struct tree_type): attributes, new field.
	(precision): Move this field up for better alignment.
	(attribute_list_{equal,contained}): Prototype for new functions.
	(build_type_attribute_variant): Prototype for new function.
	* c-parse.in: Rewrite attribute parsing; update the expected
	conflicts and state numbers.
	* tree.c (TYPE_HASH): Move definition to top of file.
	(make_node): Add support for SET_DEFAULT_TYPE_ATTRIBUTES.
	(build_type_attribute_variant): New function.
	(type_hash_lookup): Check if the attributes match.
	(attribute_list_{equal,contained}): New functions.
	* c-typeck.c (common_type): Add attribute merging.
	(comp_types): Use COMP_TYPE_ATTRIBUTES macro.
	* print-tree.c (print_node): Print attributes.
	* c-common.c (decl_attributes): Move the attribute
	recognition and rejection here from c-parse.in.
	(decl_attributes): Use VALID_MACHINE_ATTRIBUTE macro.

	* regclass.c (init_reg_sets_1): Eliminate several permanent
	call_fixed_regs.

	* rtl.def (CALL_INSN): Define new CALL_INSN_FUNCTION_USAGE field.
	* rtl.h (CALL_INSN_FUNCTION_USAGE): New macro.
	(find_reg{,no}_fusage): Prototype for new function.
	* rtlanal.c (reg_used_between_p): Check usage exprs on CALL_INSNs.
	(reg_referenced_between_p, reg_set_p, dead_or_set_regno_p): Likewise.
	(find_reg{,no}_fusage): New functions.
	* combine.c (try_combine): Restrict combining on CALL_INSNs.
	(distribute_{notes,links}): Look at CALL_INSN_FUNCTION_USAGE.
	* cse.c (cse_insn): Invalidate CLOBBERed registers.
	(count_reg_usage): Count registers in USE rtls on CALL_INSNs.
	* emit-rtl.c (make_call_insn_raw): New function.
	(emit_call_insn{,_before}): Use make_call_insn_raw.
	* calls.c (prepare_call_address, emit_call_1, expand_call): Change
	from USE and CLOBBER insns to using CALL_INSN_FUNCTION_USAGE.
	(emit_library_call{,_value}): Likewise.
	* expr.c (use_regs, expand_builtin_apply): Likewise.
	* expr.h (use_regs): Likewise.
	* flow.c (flow_analysis, find_basic_blocks): Likewise.
	* caller-save.c (insert_save_restore): Likewise.
	* function.c (fixup_var_refs_insns): Likewise.
	* jump.c (find_cross_jump, get_label_{before,after}): Likewise.
	* reload1.c (emit_reload_insns): Likewise.
	* reorg.c (mark_referenced_resources, mark_set_resources): Likewise.
	* integrate.c (save_for_inline_copying, expand_inline_function):
	Copy CALL_INSN_FUNCTION_USAGE field.
	* reload1.c (choose_reload_regs): Ban filled argument registers.
	* caller-save.c (save_call_clobbered_regs): CALL_INSN_FUNCTION_USAGE
	requires a sharper liveliness check.
	* flow.c (propagate_block): Mark all registers mentioned in USE
	usage expressions on a CALL_INSN as used.
	* jump.c (find_cross_jump): If STACK_REGS is defined two
	CALL_INSNs only compare equal if their USE usage rtls are
	the same as well.
	* stupid.c (stupid_life_analysis): Check the usage information
	on CALL_INSNs.

	* function.c (assign_parms): Spread out the REG_EQUIV notes
	on CONCATs.

Fri May  6 12:43:10 1994  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* reload.c (find_reloads): Ignore alternatives that will
	not be reloadable due to PREFERRED_RELOAD_CLASS.

	* explow.c (allocate_dynamic_stack_space): Just return
	virtual_stack_dynamic_rtx if asking for zero bytes.
	Set current_function_calls_alloca here and also record new
	stack level for nonlocal gotos.
	* expr.c (expand_builtin, case BUILT_IN_ALLOCA): Don't
	set current_function_calls_alloca here nor record new
	stack level for nonlocal gotos.
	* stmt.c (expand_decl): Likewise.

	* function.c (assign_parms): Use expr_size when appropriate.

	* c-typeck.c (comptypes): An enum type is compatible with type of
	same signedness as well as precision.

	* alpha.h (CONST_COSTS): Revise all costs.
	* alpha.md (addsi3, subsi3): Add define_expand to make 
	adddi3/subdi3; old pattern is now anonymous.

	* combine.c (simplify_rtx, case MULT): Don't convert MULT to
	shift here.
	(simplify_logical, case IOR): Convert back to PLUS if valid and
	it will combine with another PLUS.
	(extract_left_shift): New function.
	(make_compound_operation, case ASHIFTRT): Simplify by calling it.
	(force_to_mode): Don't ignore if X is a SUBREG.
	(force_to_mode, case AND): Try to turn unchecked bits on
	instead of just off and see which is cheaper.

Fri May  6 11:22:23 1994  Ian Lance Taylor  (ian@cygnus.com)

	* Makefile.in (libgcc1.a, libgcc2.a): Don't ignore errors in for
	loops over $(LIB[12]FUNCS_EXTRA).

Fri May  6 06:14:56 1994  Mike Stump  (mrs@cygnus.com)

	* expr.c (expand_cleanups_to): Tell expand_expr that we are going
	to ignore the result of the cleanup.

Thu May  5 17:45:02 1994  Stan Shebs  (shebs@andros.cygnus.com)

	* gcc.c (do_spec_1): If -save-temps, always clear the deletion flag.

Thu May  5 13:39:35 1994  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* combine.c (simplify_rtx, case SUBREG): Don't call force_to_mode.
	(simplify_set): Call force_to_mode here.

	* m68k.md (movhi): Simplify code involving jump-table
	reference.
	(load_address): Handle case of jump-table reference; output
	required label.

Thu May  5 12:28:16 1994  Ian Lance Taylor  (ian@cygnus.com)

	* cccp.c (main): Include source file name in dependency output.

Wed May  4 18:45:07 1994  Doug Evans  (dje@cygnus.com)

	* config.sub: Remove duplicate -freebsd* entry.

Wed May  4 18:03:34 1994  Jason Merrill  (jason@deneb.cygnus.com)

	* cccp.c (special_symbol): Don't copy simple strings, use wchar_type.
	(main): Setup wchar_type for C++ if needed.
	(initialize_builtins): Use wchar_type.

Wed May  4 17:19:34 1994  Mike Collison  (collison@sw.stratus.com)

	* reload.c (push_secondary_reload): Use TYPE for secondary type
	if it is RELOAD_FOR_{INPUT,OUTPUT}_ADDRESS.

Wed May  4 16:35:49 1994  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* configure (i386-gnu): New, same as i386-mach.

	* global.c (find_reg): When looking for locally-allocated hard
	regs to reclaim, use REG_ALLOC_ORDER to find least used.

	* reload1.c (emit_reload_insns): Add another way to delete an
	output reload.

	* reload1.c (reload, reload_as_needed): Check for use of return
	register with reg_referenced_p, not reg_mentioned_p.

Wed May  4 14:23:51 1994  Jim Wilson  (wilson@cygnus.com)

	* mips.c (override_options): Delete TARGET_LLONG128 references.
	* mips.h (MASK_LLONG128, TARGET_LLONG128): Delete.
	(TARGET_SWITCHES): Delete -mlonglong128 option.
	(LONG_LONG_TYPE_SIZE): Delete TARGET_LLONG128 reference.

	* mips/bsd-4.h, mips/bsd-5.h, mips/news4.h, mips/news5.h,
	mips/nws3250v4.h, mips/svr3-4.h, mips/svr3-5.h, mips/svr4-4.h,
	mips/svr4-5.h (CPP_SPEC): Delete.
	* mips/dec-bsd.h (CPP_SPEC): Define __SIZE_TYPE__,
	__PTRDIFF_TYPE__, and __mips.
	(SIZE_TYPE): Delete.
	* mips/dec-osf1.h (PTRDIFF_TYPE): Delete.
	(CPP_SPEC): Define, overriding ultrix.h version.
	* mips/iris5.h (CPP_SPEC): Define __SIZE_TYPE__, __PTRDIFF_TYPE__,
	and __mips.
	* mips/osfrose.h (CPP_SPEC): Define __PTRDIFF_TYPE__ and __mips.
	(PTRDIFF_TYPE): Delete.
	(SIZE_TYPE): Define.
	(SET_ASM_OP): Define.
	* config/mips/ultrix.h (CPP_SPEC): Delete.
	(SIZE_TYPE): Delete.

Tue May  3 19:04:43 1994  Jason Merrill (jason@deneb.cygnus.com)

	* Makefile.in (stamp-objlist): Depend on OBJS and BC_OBJS so that
	subdir makes will know to re-link.

Mon May  2 16:05:05 1994  Per Bothner  (bothner@kalessin.cygnus.com)

	* toplev.c (compile_file):  If static consts haven't been written
	out yet, don't do it just because TREE_USED is set (if we're
	optimizing).  (This wins for C++, which uses static consts a lot.)

Mon May  2 16:42:59 1994  Jim Wilson  (wilson@cygnus.com)

	* stmt.c (expand_end_case): Make sure gen_casesi operands are
	valid by passing them through copy_to_mode_reg if necessary.
	* mips.md (casesi): Delete force_reg calls.

	* ns32k.c (output_move_double): Always use split_double for the
	CNSTOP case.

	* gcc.c (translate_options): For options that take an argument,
	don't skip the argument if it doesn't exist.

	* c-decl.c (pushdecl): Use lookup_name_current_level_global instead
	of lookup_name for extern references.  Don't return duplicate decl
	if it came from the global binding level, and there exists a
	conflicting decl in an intervening block.
	(lookup_name_current_level_global); New function.
	* c-tree.h (lookup_name_current_level_global): Declare.

	* sys-protos.h (read, write): Last parm is size_t not unsigned int.

	* unroll.c (remap_split_bivs): New function.
	(unroll_loop): When remapping split bivs in the last instruction,
	handle JUMP_INSNs in addition to INSNs.

Mon May  2 12:53:57 1994  Jason Merrill  (jason@deneb.cygnus.com)

	* config/nextstep.h (INCLUDE_DEFAULTS): Add cxx_aware field.
	* config/vax/xm-vms.h (INCLUDE_DEFAULTS): Ditto.

Fri Apr 29 18:30:38 1994  Kung Hsu  (kung@cygnus.com)

	* tree.h (TYPE_DECL_SUPPRESS_DEBUG): new macro to support
	suppressing of detail type infos into stabs.
	* dbxout.c (dbxout_type): check the above flag to generate cross
	reference in stabs.

Fri Apr 29 01:01:45 1994  Doug Evans  (dje@cygnus.com)

	* Makefile.in (stamp-objlist): New target.

Thu Apr 28 22:17:15 1994  Doug Evans  (dje@cygnus.com)

	* Makefile.in (USE_ALLOCA): Rearrange "'s.
	(FLAGS_TO_PASS): Delete CLIB, MALLOC, OBSTACK.

Thu Apr 28 19:04:17 1994  Jim Wilson  (wilson@cygnus.com)

	* stmt.c (expand_end_case): Correct test for sign extending
	unsigned constant index when creating index_expr.

	* cccp.c (macroexpand): Use start_line for line number of the new
	instack level pushed at the end.

Thu Apr 28 18:59:17 1994  Mike Stump  (mrs@cygnus.com)

	* stmt.c: Remove old exception handling support from the backend.

Thu Apr 28 18:59:53 1994  Torbjorn Granlund  (tege@adder.cygnus.com)

	* sparc.c (arith_double_operand): Modify to accept all possible constants.
	* sparc.md (adddi3, subdi3, anddi3, iordi3, xordi3): Corresponding changes.
	(one_cmpldi3): Don't allow constants for operand 1.

Thu Apr 28 18:10:18 1994  David Edelsohn  (edelsohn@npac.syr.edu)

	* rs6000.md (addsi3): Prefer add without carry instructions and
	flag input operands as commutative for condition register variant.
	(subsi3): Define PowerPC patterns using subtract without carry.
	(numerous): Flag input operands as commutative for condition
	register variant.
	(mov* matchers): Use mr instruction in ! TARGET_POWERPC case as
	well and mr. in condition register variant.
	* rs6000.c (output_prolog): Use mr, lis, and li instructions.
	Use subf instruction if TARGET_POWERPC.
	(output_epilog): Use cal/addi instruction.

Thu Apr 28 12:48:59 1994  Andreas Neubacher  (aneubach@risc.uni-linz.ac.at)

	* i386/seq-sysv3.h (SHARED_SECTION_ASM_OP): Defined.

Thu Apr 28 12:40:28 1994  Doug Evans  (dje@cygnus.com)

	* expr.c (expand_builtin): Fix typo in previous patch
	(allow __builtin_next_arg in varargs functions).

Tue Apr 26 16:31:44 1994  Per Bothner  (bothner@cygnus.com)

	* tree.h (AGGREGATE_TYPE_P):  New macro.
	* calls.c, expr.c, function.c, stmt.c, varasm.c:  Use
	new macro AGGREGATE_TYPE_P.

Mon Apr 25 18:45:28 1994  John Hassey  (hassey@dg-rtp.dg.com)

	* varasm.c (copy_constant, case CONSTRUCTOR): Fix typo; copied list
	was placed on old CONSTRUCTOR, not new one.

Mon Apr 25 15:04:53 1994  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* c-decl.c (grokdeclarator): Never warn about `long long' in
	system header.

	* c-decl.c (finish_decl): Redo last change.

	* Makefile.in (*compare*): Add missing semicolons.

Mon Apr 25 15:02:31 1994  Doug Evans  (dje@cygnus.com)

	* configure (m68k-hp-hpux): t-hp320g no longer needed as of gas 2.1.
	* m68k/t-hp320g: Deleted.

Mon Apr 25 14:23:18 1994  Poul-Henning Kamp  (phk@login.dkuug.dk)

	* config.sub, configure: Recognize FreeBSD.
	* i386/freebsd.h, x-freebsd: New files.
	* i386/x-freebsd: New file.
	* i386.h (TARGET_NO_FANCY_MATH_387): New option.
	* i386.md (TARGET_NO_FANCY_MATH_387): Implement new option.
	* ginclude/stdarg.h, ginclude/stddef.h, ginclude/varargs.h:
	Recognize __FreeBSD__.
	* gcc.c (link_command_spec): Add -Z argument for ZMAGIC's on FreeBSD.
	
Mon Apr 25 14:08:26 1994  Doug Evans  (dje@cygnus.com)

	* configure (language search loop): Correct test for no languages.
	(CC): Use single quotes to avoid shell expansion of $(CC).

Mon Apr 25 13:10:07 1994  Andreas Stolcke  (stolcke@icsi.berkeley.edu)

	* Makefile.in (install-common): Install EXTRA_PARTS with
	INSTALL_DATA, not INSTALL_PROGRAM.

Mon Apr 25 06:34:00 1994  Stephen L Moshier  (moshier@world.std.com)

	* fold-const.c (fold-convert): Use assignment, instead of
	initializing, aggregate local variable REAL_VALUE_TYPE.

Sun Apr 24 11:17:20 1994  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* reorg.c (redirect_with_delay_list_safe_p): Fix off-by-one error.

	* real.c (etoe53, etoe24): Make all occurrences static.

	* emit-rtl.c (try_split): Don't try to recursively split deleted insn.

	* rs6000.md (movti): Adjust constraints to avoid impossible reload.

	* expr.c (expand_expr, case SAVE_EXPR): Fix error in last change.

Sat Apr 23 06:45:50 1994  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* reload1.c (reloads_conflict, case RELOAD_FOR_OUTPUT): Fix typo.

Fri Apr 22 18:43:08 1994  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* configure (alpha-dec-osf): Fix typo.

Fri Apr 22 15:02:22 1994  Hallvard B Furuseth  (h.b.furuseth@usit.uio.no)

	* gcc.c (handle_braces, check_live_switch): Refine previous change.

Fri Apr 22 03:27:26 1994  Doug Evans  (dje@cygnus.com)

	* configure: Sort machines.

	* Language directory reorganization.
	* configure: Auto-configure each language subdirectory by looking
	for */config-lang.in.
	Add language makefile fragments (Make-lang.in) to top level makefile,
	and hook them in via lang.* targets.
	Configure each language subdirectory.  On hosts that support them,
	create stage[123] symlinks in each subdirectory.
	If there is a configure script in the subdirectory, run it.
	* Makefile.in (LANGUAGES): Remove c++.
	(SUBDIRS): New variable.
	(LEX, LEXFLAGS): Ditto.
	(MAKEOVERRIDES): Ditto.
	(COMPILERS): Remove cc1plus.
	(LANG_MAKEFILES, LANG_STAGESTUFF, LANG_DIFF_EXCLUDES, FLAGS_TO_PASS):
	New variables.
	(CPLUS_OBJS, CPLUS_TREE_H, C++, c++, g++, g++-cross, cc1plus,
	cp-*.o, g++.o, gplus.info): Deleted.
	(STAGESTUFF): Remove g++, g++-cross, cc1plus.  Add $(LANG_STAGESTUFF).
	(Makefile): Depend on $(LANG_MAKEFILES).
	(####language hooks, ####language fragments): New spots for sed
	to insert things.
	(all.cross, all.build, start.encap, rest.encap, info, dvi,
	install-normal, install-common, install-info, install-man,
	uninstall, distdir, mostlyclean, clean, distclean, extraclean,
	realclean, stage1, stage2, stage3, stage4): Depend on lang.foo.
	(mostlyclean, clean, distclean, extraclean, realclean): Clean as
	much of the language subdirectories as we can.
	(install-common):  Remove g++ installation.
	(install-man): Remove g++.1 installation.
	(uninstall): Remove g++ reference.
	(TAGS): Remove cp-parse.? reference.
	(distdir): Ditto.
	(distdir-start, distdir-finish): New targets.
	(diff): Remove cp-parse.? reference.  Add $(LANG_DIFF_EXCLUDES).
	(compare, compare3, gnucompare, gnucompare3): Compare language
	subdirectories too.
	(stage1-start, stage2-start, stage3-start, stage4-start): New targets.
	Ensure stage subdirectory exists before processing language
	dependent part.
	* cp/Makefile.in: New file, makefile for c++ subdirectory.
	* cp/Make-lang.in: New file, c++ language makefile fragment.
	This file provides c++ specific support to the top level makefile via
	several well defined targets: c++.all.build, c++.all.cross,
	c++.start.encap, c++.rest.encap, c++.info, c++.dvi,
	c++.install-normal, c++.install-common, c++.install-info,
	c++.install-man, c++.uninstall, c++.distdir, c++.mostlyclean,
	c++.clean, c++.distclean, c++.extraclean, c++.realclean,
	c++.stage1, c++.stage2, c++.stage3, c++.stage4.
	* cp/config-lang.in: New file, defines language name and other
	configuration parameters for the c++ language: compilers, stagestuff,
	and diff_excludes.
	* g++.c: Move into cp subdirectory.
	* g++.1: Ditto.
	* g++int.texi: Ditto.
	* cp-*: Ditto, remove "cp-" prefix except for cp-tree.h.

Thu Apr 21 15:47:01 1994  Jim Wilson  (wilson@cygnus.com)

	* sparc.c (mem_aligned_8): Don't assume addresses with
	MEM_IN_STRUCT_P set are 8 byte aligned.

	* iris5.h (CPP_SPEC): Define _LANGUAGE_C for Objective C also.

	* unroll.c (find_splittable_givs): Share dest_reg for multiple
	address givs within a single instruction.
	(copy_loop_body): Only update psuedo-reg for shared giv once.

	* sparc.c (sparc_type_code): Don't put more than 30 bits of info
	into the variable qualifiers.

	* expr.c (store_expr): Don't check the TYPE_MODE of an ERROR_MARK.

Thu Apr 21 15:34:11 1994  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* calls.c (calls_function_1): A language-specific code must
	be assumed to call a function and also call alloca.
	Check for inlined functions that call alloca.

	* reload1.c (reload): Clear forbidden_regs earlier.
	(new_spill_reg): Mention in error message that asm clauses can also 
	cause the compiler to run out of spill regs.
	(scan_paradoxical_regs): If SMALL_REGISTER_CLASSES, forbid
	hard regs used in explicit user variables.

	* combine.c (can_combine_p, combinable_i3pat, try_combine): Allow
	combination involving hard regs if the hard reg is a user variable.

	* gcc.c (default_compilers): If -E and the file is (e.g.) x.s,
	don't run the assembler; similarly for .i, .ii, .adb, etc.

	* Cleanups related to adding prototypes to many declarations.
	* rtl.h: If TREE_CODE undefined, make an incomplete union for tree.
	(STDIO_PROTO): Define here if not already defined.
	(read_rtx): Use STDIO_PROTO.
	(output_constant_def, immed_real_const): Use "union tree_node *".
	(immed_real_const_1): Move declaration to real.h.
	(rtx_to_tree_code): Supply prototype.
	* tree.h: If RTX_CODE undefined, make an incomplete struct for rtx.
	Add some missing declarations of functions in stmt.c.
	(STDIO_PROTO): Define here if not already defined.
	* real.h: Add prototypes to declarations of functions in real.c.
	(immed_real_const_1): Move declaration from rtl.h.
	* output.h: Add missing declarations of functions in final.c.
	(STDIO_PROTO): Don't define here.
	* c-tree.h (STDIO_PROTO): Likewise.
	* reload.h (PROTO, STDIO_PROTO): Likewise.
	* bi-opcode.c (main): Don't write overly-long line.
	* cse.c, emit-rtl.c: Use CONST_DOUBLE_FROM_REAL_VALUE macro for immed
	real_const_1.
	* expmed.c: Add prototypes for static functions.
	* expr.c (bc_expand_expr): Call expand_decl and expand_decl_init,
	not the bc_ versions.
	* final.c: Include stdio.h and ctype.h early.
	Add prototypes for static functions.
	* function.c: Add prototypes for static functions.
	(bc_expand_function_end, expand_function_end): Call new
	expand_fixups instead of old fixup_gotos.
	* global.c, local-alloc.c: Add prototypes for static functions.
	* integrate.c: Likewise.
	Use CONST_DOUBLE_FROM_REAL_VALUE macro for immed_real_const_1.
	* optabs.c: Likewise.
	* real.c: Make most functions static and add prototypes for
	all static functions.
	(GET_REAL, PUT_REAL): Cast parameter to proper pointer type in
	some cases; use unsigned array.
	* stmt.c: Add prototypes for static functions.
	(expand_fixups): New function.
	(fixup_gotos): Now static.
	Don't call bc_fixup_gotos with wrong type (but now probably wrong
	value).
	(bc_*): Now static.
	(expand_exit_loop_if_false): Call bc_expand_goto_internal with
	proper null pointer.
	(expand_decl_init): Call bc_expand_decl_init if writing bytecode.
	
Thu Apr 21 14:21:56 1994  Ian Lance Taylor  (ian@cygnus.com)

	Support taking the address of a text segment symbol when using
	MIPS -membedded-pic.
	* mips.h (embedded_pic_fnaddr_rtx): Declare.
	(embedded_pic_offset): Declare.
	(mips_finalize_pic): Declare.
	(FINALIZE_PIC): Define.
	(GO_IF_LEGITIMATE_ADDRESS): When using -membedded-pic, reject
	combining an embedded PIC text reference with a register.
	(ENCODE_SECTION_INFO): Under -membedded-pic set SYMBOL_REF_FLAG to
	0 for text segment symbols, 1 for data segment symbols.
	* mips.c (embedded_pic_fnaddr_rtx): New variable.
	(embedded_pic_offset): New function.
	(mips_finalize_pic): New function.
	(mips_select_section): When using -membedded-pic and not using
	-fwritable-strings, put strings in the text section, not the read
	only data section.
	* mips.md (movsi): When using -membedded-pic, add special code
	when loading a symbol directly to use an offset from the start of
	the current function.
	(get_fnaddr): New insn to get address of current function.

Wed Apr 20 19:38:38 1994  Doug Evans  (dje@cygnus.com)

	* regclass.c (init_reg_sets_1): Make static.
	(init_reg_modes): New function.
	(init_regs): Likewise.
	* toplev.c (compile_file): Call init_regs after init_rtl.
	(main): Delete call to init_reg_sets_1.

Wed Apr 20 15:06:35 1994  Steve Chamberlain  (sac@cygnus.com)

	* sh.c (REG_ODD): Allow DIs and DFs into odd registers.
	(print_operand): New command char '@', change nop insn.
	(synth_constant): Don't allocate temp reg during reload.
	(expand_block_move): Don't expand if TARGET_SMALLCODE.
	(prepare_split_double_ops): Deleted.
	(howshift, multcosts): Work out costs exactly.
	(dump_table): Emit a label before the align.
	(hi_const): TARGET_SHORTADDR makes more things HI consts.
	(machine_dependent_reorg): Look through SUBREGS.
	(from_compare): Get better code when relational args are loaded
	into regs now.
	(expand_acall): Cope with TARGET_BSR.
	(general_movdst_operand): Don't allow illegal autoincs.
	(mac_operand): New function.
	(sh_function_arg, sh_function_partial_nregs): From sh.h
	* sh.h (PARANOID_BIT, RETR2_BIT, CONSTLEN0_BIT, BSR_BIT,
	SHORTADDR_BIT, TARGET_PARANOID, TARGET_RETR2, TARGET_CONSTLEN0,
	TARGET_BSR, TARGET_SHORTADDR, TARGET_SWITCHES):  New options.
	(OVERRIDE_OPTIONS): No function_cse when TARGET_BSR.
	(FIRST_RET_REG): Depends on TARGET_RETR2.
	(FUNCTION_ARG, FUNCTION_ARG_PARTIAL_NREGS): Moved to sh.c
	(HAVE_POST_INCREMENT, HAVE_PRE_DECREMENT): Define.
	(MODE_DISP_OK_8): Define.
	(REG_OK_FOR_PRE_POST_P): Allow a pseudoreg.
	(GO_IF_LEGITIMATE_ADDRESS): Allow DI addressing modes.
	(MOVE_RATIO): Depends on TARGET_SMALLCODE.
	* sh.md (interrupt_function): New attr.
	(define_delay): Account for interrupt functions.
	(addc): Describe pattern better.
	(adddi3): Expanded better.
	(peepholes): Deleted many obsolete patterns.
	
Wed Apr 20 13:37:58 1994  Jason Merrill  (jason@deneb.cygnus.com)

	* expr.c (expand_expr): Don't force ignore when expanding the
	subexpression of a WITH_CLEANUP_EXPR.  Don't check ignore when
	deciding whether or not to expand the cleanup for a TARGET_EXPR.

Wed Apr 20 12:20:16 1994  Doug Evans  (dje@cygnus.com)

	* h8300/h8300.h (RTX_COSTS): Remove LSHIFT.
	* h8300/h8300.md (lshrhi3_eight): Fix name.
	(lshrhi3): Use it.
	* i860/i860.c (safe_insn_src_p): Remove LSHIFT.
	(single_insn_src_p): Likewise.
	* i960/i960.c (i960_expr_alignment): Remove LSHIFT.
	* sh/sh.c (output_shift, ASHIFTRT case): Do opposite shift as ASHIFT.
	Delete LSHIFT case.
	* sh/sh.h (RTX_COSTS): Remove LSHIFT, add LSHIFTRT.
	* spur/spur.md (lshlsi3): Delete.

Wed Apr 20 06:40:15 1994  Philippe De Muyter  (phdm@info.ucl.ac.be)

	* c-lex.c (check_newline): Avoid unreachable statement when
	HANDLE_SYSV_PRAGMA defined.

Wed Apr 20 01:52:24 1994  Steve Chamberlain  (sac@mole.gnu.ai.mit.edu)

	* flow.c (find_auto_inc, try_pre_increment): Make sure
	that insertion of autoinc addressing mode would yield a valid
	instructon.

Tue Apr 19 23:41:14 1994  Doug Evans  (dje@cygnus.com)

	* Makefile.in (expr.o): Depend on regs.h.
	* rtl.h (choose_hard_reg_mode): Declare.
	* regs.h (reg_raw_mode): Declare.
	* caller-save.c (choose_hard_reg_mode): Delete from here.
	* regclass.c (choose_hard_reg_mode): Define here.
	(reg_raw_mode): Define.
	(init_reg_sets_1): Initialize reg_raw_mode.
	* expr.c: #include regs.h.
	(use_regs): Use reg_raw_mode.
	* reload1.c (emit_reload_insns): Record additional spill registers
	in their intrinsic mode.
	* combine.c (move_deaths): Record death information of remaining
	registers in their intrinsic mode.
	* sched.c (attach_deaths): Create partial register dead notes using
	register's intrinsic mode.

Tue Apr 19 21:40:57 1994  Mike Stump  (mrs@cygnus.com)

	* toplev.c (lang_options): Add -fhandle-signatures for C++
	frontend.

Tue Apr 19 19:00:30 1994  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* cccp.c (do_error): Don't terminate.

Tue Apr 19 17:48:41 1994  Hallvard B Furuseth  (hbf@durin.uio.no)

	* gcc.c: Add new options -print-file-name= and -print-prog-name=.

	* gcc.c (struct switchstr): New field LIVE_COND.
	(process_command): Initialize it.
	(check_live_switch): New function.
	(handle_braces): Call it.

Mon Apr 18 19:22:25 1994  Lee Iverson  (leei@ai.sri.com)

	* mips.h (RTX_COSTS): Remove LSHIFT.

Mon Apr 18 17:56:22 1994  Philippe De Muyter  (phdm@info.ucl.ac.be)

	* c-decl.c (duplicate_decls): Always warn when const declaration
	follows non-const one for variables.

Mon Apr 18 16:38:30 1994  Stephen R. van den Berg  (berg@pool.informatik.rwth-aachen.de)

	* calls.c (prepare_call_address): New arg REG_PARM_SEEN.
	All callers changed.
	(expand_call): Pre-load args if small reg classes and reg parms.
	* expr.h (prepare_call_address): Extend prototype.
	* expr.c (expand_builtin_apply): Pass new arg to prepare_call_address.

Mon Apr 18 14:53:14 1994  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* fold-const.c (const_binop): If arg is NaN, just return it
	(fold_convert): Handle NaN in real->int and real->real cases.

	* c-lex.c (yylex): If FP value is NaN, use value of zero.

	* expr.h (PROMOTE_MODE): Don't supply default here.
	(promote_mode): Add declaration.
	* explow.c (promote_mode): New function.
	* calls.c (expand_call): Use it.
	* function.c (assign_parms, promoted_input_arg, expand_function_start):
	Likewise.
	* expr.c (expand_expr, case VAR_DECL, SAVE_EXPR): Likewise.
	* stmt.c (expand_value_return, expand_decl): Likewise.

Mon Apr 18 11:36:04 1994  Jason Merrill  (jason@deneb.cygnus.com)

	* Makefile.in (LIB2FUNCS): Change _op_vec_delete to _op_vec_del.
	* libgcc2.c: Ditto.

Mon Apr 18 11:19:07 1994  Jeffrey A. Law  (law@snake.cs.utah.edu)

	* reorg.c (redirect_with_delay_list_safe_p): New function,
	similar to redirect_with_delay_slots_safe_p.
	(fill_slots_from_thread): Do not redirect a jump if doing
	so would invalidate the delay list for the jump.

Mon Apr 18 03:09:30 1994  Doug Evans  (dje@cygnus.com)

	* scan-types.sh: Fix program's name in error message.
	Rename dummy.c to avoid collisions in parallel makes.

Sun Apr 17 18:29:00 1994  David Edelsohn  (edelsohn@npac.syr.edu)

	* rs6000.h (PROCESSOR_COMMON, PROCESSOR_POWER, PROCESSOR_POWERPC):
	New macros.
	* rs6000.c (processor_target_table): Change "all" to "common".
	Add "power" and "powerpc" generic processors.  Explicitly turn off
	new mnemonics for all members of the POWER architecture family.

Sun Apr 17 10:04:18 1994  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* tree.h (DECL_PRINT_NAME): Deleted.
	(struct tree_decl): Field print_name deleted.

Sun Apr 17 06:59:58 1994  Pat Rankin  (rankin@eql.caltech.edu)

	* vax.h (RTX_COSTS), vax.c (vax_rtx_cost): Remove LSHIFT case.

Sun Apr 17 01:15:27 1994  Jeffrey A. Law  (law@snake.cs.utah.edu)

	* function.c (locate_and_pad_parm): For ARGS_GROW_DOWNWARD,
	Round sizetree for both upward and downward padding, nuke
	the (now unnecessary) call to pad_below for arg_size_ptr.

Sat Apr 16 21:05:40 1994  David Edelsohn  (edelsohn@npac.syr.edu)

	* rs6000.md (one_cmplsi2): Always use nor instruction;
	remove extraneous minus sign from condition register set constraint.

Sat Apr 16 17:12:40 1994  Philippe De Muyter  (phdm@info.ucl.ac.be)

	* m68k.c (print_operand): 'x' and 'y' mode letters only
	if SUPPORT_SUN_FPA.
	(print_operand_address): If (new) ASM_OUTPUT_CASE_FETCH defined,
	use it to emit the address for the insn before a tablejump.
	* m68k/mot3300.h (FUNCTION_ARG_PADDING, FUNCTION_PROLOGUE): Deleted.
	(FUNCTION_EPILOGUE, PRINT_OPERAND, PRINT_OPERAND_ADDRESS): Deleted.
	(SGS_SWITCH_TABLES, ASM_OUTPUT_CASE_END): Deleted.
	(ASM_OUTPUT_FLOAT_OPERAND, ASM_OUTPUT_DOUBLE_OPERAND): Deleted.
	(SGS_NO_LI, ASM_OUTPUT_CASE_FETCH, ASM_RETURN_CASE_JUMP): Defined.

	* configure (header_files): Use ${srcdir} instead of $(srcdir).

Sat Apr 16 16:51:15 1994  DJ Delorie  (dj@ctron.com)

	* objc/makefile.dos (OBJC_O): Add encoding.o.

Sat Apr 16 16:38:32 1994  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* c-lex.c (yylex): Turn off overflow flag when fixing up large
	traditional hex constants.

	* c-decl.c (finish_decl): If asmspec_tree, clear DECL_BUILT_IN
	for function and DECL_RTL always.

Wed Apr 13 13:08:10 1994  Per Bothner  (bothner@cygnus.com)

	* toplev.c (compile_file):  Never warn about unused static consts,
	since it is reasonable to have those in header files.

Wed Apr 13 12:25:21 1994  Jason Merrill  (jason@deneb.cygnus.com)

	* varasm.c (contains_pointers_p): When examining a RECORD_TYPE,
	only look at the FIELD_DECLs.

Tue Apr 12 18:14:42 1994  Jason Merrill  (jason@deneb.cygnus.com)

	* Makefile.in (LIB2FUNCS): Add _op_vec_{delete,new}.

	* libgcc2.c (__builtin_vec_{delete,new}): New functions per the
	latest C++ working paper.
	(__default_new_handler): No longer static.
	(__set_new_handler): Lose.
  
	* cccp.c: Don't implicitly wrap LOCAL_INCLUDE_DIR.
	(struct default_include): Add cxx_aware field.
	(include_defaults_array): Ditto.
	(main): Use cxx_aware field.

Tue Apr 12 16:13:10 1994  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* config.sub (next): Fix typo in m68k-next-ns3 alternative.

Tue Apr 12 07:41:17 1994  Michael Meissner  (meissner@osf.org)

	* i386/i386.c (notice_update_cc): Remove LSHIFT case, since there
	is no LSHIFT rtl code any more.

	* halfpic.h (NO_STDIO_H): Do not include stdio.h if this is defined.

Mon Apr 11 17:24:46 1994  Philippe De Muyter  (phdm@info.ucl.ac.be)

	* scan.c (get_token): Correctly increment lineno after
	encountering #ident (or other #-directive).

Mon Apr 11 13:22:51 1994  Jim Wilson  (wilson@cygnus.com)

	* reorg.c (try_merge_delay_insns): Account for resources set/used
	by a filled insn before trying to simplify insns in delay slots.

	* x-iris, x-iris3, x-mips, x-sony, x-sysv (OLDCC): Change -XNh1500
	to -XNh2000.

	* c-decl.c (finish_decl): Don't preserve initializer if it is
	error_mark_node.

	* reorg.c (try_merge_delay_insns): Move next_trial update
	immediately after the try_split call.

	* mips.c (mips_select_rtx_section, mips_select_section): New
	functions.  Prefer rdata when TARGET_EMBEDDED_DATA, and prefer
	sdata otherwise.
	* mips.h (MASK_EMBEDDED_DATA, TARGET_EMBEDDED_DATA): New macros.
	(TARGET_SWITCHED): Add new option -membedded-data.
	(SELECT_RTX_SECTION, SELECT_SECTION): Call function in mips.c.

	* Makefile.in (all.cross, rest.encap): Delete objc-runtime and
	SYSCALLS.c.X.
	(OBJC, OBJECTIVE-C): Add objc-runtime.
	(proto): Add SYSCALLS.c.X.
	(libgcc2.ready, libobjc.a, sublibobjc.a, SYSCALLS.c.X): Add
	dependence on stmp-int-hdrs.

	* cccp.c (rescan): Don't look for C++ // comment before directive.
	Handle \-newline inside a C++ // comment.
	(skip_if_group): Likewise.
	(handle_directive): Also handle C++ // comment after #.  Point
	ip->bufp after the comment start before calling
	skip_to_end_of_comment.
	(validate_else): Handle \-newline inside a C++ // comment.
	(skip_to_end_of_comment, macarg1, discard_comments): Likewise.

	* varasm.c (immed_double_const): Sign-extend constants when they
	have the most significant bit set for the target.

Mon Apr 11 06:20:56 1994  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* reload1.c (reload): When accumulating needs, use nested
	structures to simplify and speed up the code.

	* alpha.md (compare define_split): Fix bugs in last addition.

	* calls.c (expand_call, emit_library_call{,_value}, store_one_arg):
	Use convert_modes instead of convert_to_mode.

	* tree.h (frame_size): Now a union.
	(DECL_ALIGN, DECL_FRAME_SIZE, DECL_FUNCTION_CODE): Access proper
	field of frame_size union.
	(DECL_SET_FUNCTION_CODE): Simplified; retained for compatibility.
	* c-decl.c (duplicate_decls, pushdecl, builtin_function):
	Use DECL_FUNCTION_CODE instead of DECL_SET_FUNCTION_CODE.

Mon Apr 11 05:50:26 1994  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* mips-tfile.c (update_headers): Do not copy stStatic symbols that
	result from internal labels.

Sun Apr 10 07:13:24 1994  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* rtl.def (LSHIFT): Deleted.
	* combine.c, cse.c, function.c: No longer handle LSHIFT.
	* genattrtab.c, loop.c, reload1.c: Likewise.
	* expr.h (lshl_optab): Deleted.
	* optabs.c (lshl_optab): Deleted.
	(expand_binop, init_optabs): No longer reference it.
	* genopinit.c, expmed.c (expand_shift): Likewise.

	* arm.c, arm.h, arm.md: Remove references to LSHIFT and lshlsi3.
	* clipper.h, clipper.md, convex.h, convex.md, elxsi.md: Likewise.
	* fx80.h, fx80.md, gmicro.md, i370.md: Likewise.
	* m68k.c, m68k.h, m68k.md, m88k.c, m88k.md, ns32k.md: Likewise.
	* rs6000.md, tahoe.md: Likewise.

	* combine.c (simplify_shift_count, case EQ): LSHIFT should be
	LSHIFTRT.

Sun Apr 10 04:48:37 1994  Jeffrey A. Law  (law@snake.cs.utah.edu)

	* pa-ghiux.h (LIB_SPEC): Remove last change until we've got the
	go ahead from HP to distribute /usr/lib/end.o.
	* pa-ghpux.h, pa-hiux.h, pa-ghiux.h: Likewise.

Sat Apr  9 15:06:22 1994  Christian Kranz  (kranz@sent5.uni-duisburg.de)

	* config.sub: Add ns* as operating systems; default to ns2 for NeXT.
	* configure (m68k-next-ns2*): New configuration.
	* libgcc2.c: Include <mach.h>, not <mach/mach.h> for NeXTStep 2.1.
	* config/nextstep21.h, m68k/next21.h: New files.

Sat Apr  9 10:56:06 1994  Randy Wright  (rwright@convex.com)

	* combine.c (force_to_mode, case ROTATE): Don't assume
	simplify_binary_operation always returns CONST_INT.
	(simplify_shift_const, case IOR, PLUS): Likewise.

Sat Apr  9 09:13:10 1994  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* i386/sequent.h (STRUCT_VALUE{,_INCOMING,_REGNUM}):
	Redefine for calling conventions of native cc.

Sat Apr  9 08:25:43 1994  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* rs6000.h (FINAL_PRESCAN_INSN): Define.
	* rs6000.c (rs6000_convert_preincs): New function.

	* i386.md (mulhi3): Use SImode for MULT RTL.

	* fold-const.c (fold): Avoid exponential work when simplifying
	conditional expressions; don't recurse twice if ARG1 is constant.

	* function.c (unitialized_vars_warning, setjmp_args_warning):
	Reword warning to be less ambiguous.

	* c-typeck.c (convert_arguments): Truncate and reextend
	for PROMOTE_PROTOTYPES so we can give error on overflow.

	* reload1.c (reload_conflicts): Rewrite to clean up and fix
	numerous bugs; move to later in file.

	* c-decl.c (duplicate_decls): Put new type in same obstack as
	old ones, or permanent if old ones in different obstacks.

Fri Apr  8 18:18:18 1994  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* fold-const.c (fold, case GT_EXPR): Simplify X < (1 << Y)
	into X >> Y == 0.

Fri Apr  8 11:23:51 1994  Ian Lance Taylor  (ian@cygnus.com)

	Add support for -membedded-pic to MIPS backend, to create
	genuinely position independent code without using a global offset
	table.  Requires GNU as and ld.
	* mips.h (MASK_EMBEDDED_PIC): Define.
	(TARGET_EMBEDDED_PIC): Define.
	(TARGET_SWITCHES): Add embedded-pic and no-embedded-pic.
	(ASM_SPEC): Pass -membedded-pic to assembler.
	(ASM_OUTPUT_ADDR_DIFF_ELT): If TARGET_EMBEDDED_PIC output a
	difference, rather than using .gpword.
	(ASM_OUTPUT_CASE_LABEL): Define.
	* mips.md (casesi, casesi_internal): New instructions, used only
	for TARGET_EMBEDDED_PIC.
	* mips.c (override_options): For TARGET_EMBEDDED_PIC warn
	if -mabicalls or -G were used, and set flag_pic and
	mips_section_threshold.
	(print_operand): Handle 'S' by printing a label with a leading LS.

Thu Apr  7 22:20:09 1994  Jim Wilson  (wilson@mole.gnu.ai.mit.edu)

	* calls.c (emit_library_call_value): Move is_const set after ifdef.

Wed Apr  6 21:34:17 1994  Pat Rankin  (rankin@eql.caltech.edu)

	* expr.c (expand_builtin, case BUILT_IN_NEXT_ARG): Test whether
	an argunment has been passed to __builtin_next_arg; warn if not.

Wed Apr  6 17:28:44 1994  Per Bothner  (bothner@kalessin.cygnus.com)

	* toplev.c (lang_options):  Add -f[no-]vtable-thunks (for C++).

Wed Apr  6 15:35:42 1994  Jim Wilson  (wilson@cygnus.com)

	* cccp.c (discard_comments): Replace comments with a single space.

	* Makefile.in (USER_H): Add $(srcdir)/ before every ginclude use.

	* calls.c (emit_library_call_value): New variable is_const.  Clear
	it for functions that return an aggregate in memory.

	* configure (header_files): Prepend $(srcdir)/ginclude/ to each
	element before substituting into the Makefile.  Delete ginclude/
	at each point where we set header_files.

	* c-decl.c (finish_decl): Correct typo in use of tree_int_cst_sgn.

Wed Apr  6 07:39:47 1994  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* alpha.md: Add define_split to simplify "(unsigned) x > 0xffffff".

	* toplev.c (lang_options): Group and alphabetize some options.

Wed Apr  6 07:03:13 1994  Stephen R. van den Berg  (berg@pool.informatik.rwth-aachen.de)

	* function.c (push_function_context): Use current_function_varargs.
	(pop_function_context): Likewise.
	(assign_parms): Respect current_function_varargs.
	Save args_so_far in any case.
	* expr.c (expand_builtin): Allow builtin_next_arg for varargs
	functions as well.
	* function.h (struct function): New field for current_function_varargs.
	* integrate.c (function_cannot_inline_p): Use current_function_varargs.
	* va-alpha.h, va-m88k.h, va-sparc.h (va_dcl): Add ... to
	set current_function_varargs.

	* c-decl.c (warn_missing_declarations): New variable.
	(c_decode_option): -Wmissing-declarations.
	(start_function): Actually do the checking.
	* toplev.c (lang_options): Add -Wmissing-declarations.

	* function.c (expand_function_start): Delay copying static chain.

	* calls.c (emit_library_call): Move the invocation of
	prepare_call_address before the assignments of the function arguments.
	(emit_library_call_value): Likewise.

	* i386.h (DEBUG_PRINT_REG): Fix printing of coprocessor regs in QImode.

Wed Apr  6 06:42:50 1994  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* mips-tfile.c (update_headers): Copy stStatic symbols from the old
	local symbol table to the new local symbol table if they did not get
	added via debugging psuedo ops.

Wed Apr  6 06:36:05 1994  Philippe De Muyter  (phdm@info.ucl.ac.be)

	* stdarg.h, varargs.h (__va_rounded_size): Round to multiple
	of sizeof (short) on sysV68.

	* m68k.c (output_function_prologue): pea/move: Fix typos.
	asm_fprintf("add%.[wl] ...): Undo previous change.

Tue Apr  5 20:05:10 1994  Doug Evans  (dje@cygnus.com)

	* gcc.c (process_command): Add "include" prefix for [foo/]stageN.

Tue Apr  5 01:22:08 1994  Jeffrey A. Law  (law@snake.cs.utah.edu)

	* pa-ghiux.h (LIB_SPEC): Link in /usr/lib/end.o
	* pa-ghpux.h, pa-hiux.h, pa-hpux.h (LIB_SPEC): Likewise.

Mon Apr  4 17:36:55 1994  Jim Wilson  (wilson@mole.gnu.ai.mit.edu)

	* final.c (final_scan_insn): Pass new arg, block num, to
	sdbout_end_block.
	* sdbout.c (sdbout_begin_block): Don't output block for function
	level scope unless MIPS_DEBUGGING_INFO is defined.
	(sdbout_end_block): Likewise.  Add new parameter n for the block
	number.

	* calls.c (expand_call): If PCC_STATIC_STRUCT_RETURN defined, mark
	function as addressable same time as we clear is_integrable.

Mon Apr  4 17:11:17 1994  Jason Merrill  (jason@deneb.cygnus.com)

	* Makefile.in (xsys-protos.h): Undefine __*_TYPE when
	preprocessing fixtmp.c.
	* fixincludes: Fix ptrdiff_t and wchar_t in system headers like we
	do size_t.
	* scan-types.sh: Use __WCHAR_TYPE__, __PTRDIFF_TYPE__, and
	__SIZE_TYPE__.  Still deduce size_t so that it can be used for
	ssize_t if necessary.
	* stddef.h (wchar_t): Always define as __WCHAR_TYPE__.
	* cccp.c (special_symbol, case T_WCHAR_TYPE): Output "__wchar_t"
	for C++.

Sat Apr  2 08:14:02 1994  Michael Meissner  (meissner@osf.org)

	* i386/osfrose.h (FUNCTION_PROLOGUE, FUNCTION_PROFILER): Correct
	code for -fpic ELF case.

Fri Apr  1 17:33:35 1994  Jason Merrill  (jason@deneb.cygnus.com)

	* fixproto: Add strncpy, strpbrk, strrchr, strspn, strstr, strtok
	and strxfrm to the required list for string.h.

Fri Apr  1 01:05:53 1994  Jim Wilson  (wilson@cygnus.com)

	* configure: Change math-68881.h to ginclude/math-68881.h.
	(EXTRA_HEADERS): Use | not / in sed command.
	* math-68881.h, math-3300.h: Move to ginclude directory.

	* libgcc2.c: Modify all uses of __attribute__ mode to use new
	syntax.

	* Makefile.in (USER_H): Files in ginclude now.  Add stdarg.h,
	stddef.h, varargs.h.
	(all.cross, rest.encap): Move LIBGCC after stmp-headers.  Add
	objc-runtime, and SYSCALLS.c.X.
	(for-bootstrap): Delete.
	(OBJC, OBJECTIVE-C): Delete objc-runtime.
	(proto): Delete SYSCALLS.c.X.
	(*.o): Delete gvarargs.h dependencies.
	(stmp-int-hdrs): Delete gvarargs.h, gstdarg.h, gstddef.h deps, and
	code to copy them.

	* bc-emit.c: Change <gvarargs.h> to <varargs.h>.
	* enquire.c, libgcc2.c, sys-types.h: Change "gstddef.h" to <stddef.h>.
	* gcc.c: Change "gstdarg.h" to <stdarg.h> and "gvarargs.h" to
	<varargs.h>.
	* objc/Object.m: Change "gstdarg.h" to <stdarg.h>.
	* objc/runtime.h, scan-types.sh: Change "gstddef.h" to <stddef.h>.
	Change "gstdarg.h" to <stdarg.h>.
	* objc/hash.h, objc/objc.h, objc/sarry.h: Delete use of IN_GCC to
	control stddef.h/gstddef.h include.
	* cccp.c (pcfinclude): Modify comment referring to gstddef.h.
	* sparc/sparc.h (CPP_PREDEFINES): Update GCC_NEW_VARARGS comment.
	* i386/x-next, m68k/x-next (libgcc2.a, stdarg.h): Delete rules.
	* fixincludes: Modify comment referring to gvarargs.h.
	* cp/Makefile.in: Modify comments that refer to gvarargs.h and
	gstddef.h.

	* gstdarg.h, gstddef.h, gvarargs.h: Move to ginclude directory
	and strip off initial `g'.
	* va-*.h, proto.h: Move to ginclude directory.

Thu Mar 31 19:49:17 1994  Jim Wilson  (wilson@cygnus.com)

	* sparc.h (SPARC_STACK_ALIGN): Use ~7 not 0xfffffff8 for portability.

	* xcoffout.h (DBX_OUTPUT_MAIN_SOURCE_FILENAME): Disable.

	* sol2.h: Delete ifdefed out section defining *_SECTION_ASM_OP
	macros.
	({CTORS,DTORS}_SECTION_ASM_OP) Delete definitions.
	* sysv4.h (INIT_SECTION_ASM_OP): Don't set the alloc flag.
	({CTORS,DTORS}_SECTION_ASM_OP): Set execinstr flag.

	* dbxout.c (dbxout_type): Re-enable debugging output for anonymous
	structures.  Change all three places that refer to xrefs to use
	exactly the same condition.

	* c-typeck.c (pop_init_level): Correct typo in use of
	tree_int_cst_sgn.

	* mips.c (mips_rtx_classify, md_register_operand,
	fpsw_register_operand, cmp2_op, uns_cmp_op, fcmp_op): Delete.
	(mips_const_double_ok, mips_fill_delay_slot, output_block_move,
	print_operand, function_epilogue): Don't treat gas differently
	than native assembler.
	(equality_op, cmp_op): Delete use of classify_op.
	(override_options): Delete uses of mips_rtx_classify.
	(final_prescan_insn): Simplify based on other changes.
	* mips.h (mips_rtx_classify, cmp2_op, fcmp_op,
	fpsw_register_operand, md_register_operand, uns_cmp_op,
	classify_op, additive_op, divmod_op, unsigned_op, CLASS_*_OP,
	NOTICE_UPDATE_CC): Delete.
	(RTX_COSTS): Use different numbers for R3000/R6000/R4000.
	(REGISTER_MOVE_COST): Use cost of 2 within same register class, 4
	for FP to GR copy, 6 otherwise.
	(ADJUST_COST): Give anti and output dependencies zero cost.
	(PREDICATE_CODES): Delete obsolete functions from list.
	* mips.md (addsi3_internal): Don't output subtract.
	(subsi3_internal): Don't output add.
	(smulsi3_highpart, umulsi3_highpart): Add missing third operand to
	mips_move_1word call.

Thu Mar 31 12:09:42 1994  Ian Lance Taylor  (ian@cygnus.com)

	* longlong.h: Change RS/6000 macros to use PowerPC mnemonics when
	using -mnew-mnemonics.

Wed Mar 30 17:37:16 1994  Frederic Pierresteguy (F.Pierresteguy@frcl.bull.fr)

	* m68k/dpx2.h (NO_ASM_FMOVECR): Defined.
	* m68k.c (standard_68881_constant_p): Return 0 if NO_ASM_FMOVECR
	defined.

	* configure: Add case for rs6000-bull-bosx.

Wed Mar 30 17:31:24 1994  Matthias Pfaller  (leo@marco.de)

	* ns32k.c (global_symbolic_reference_mentioned_p): New  parameter F.
	(print_operand_address): When generating pic baseregisters are
	only allowed if offset is CONST_INT. For {SYMBOL,LABEL}_REF
	a indexregister has to be used instead. (sb) is no longer
	emitted for constant absolute addresses.
	(output_move_double): Use CONSTANT_P instead of CONSTANT_ADDRESS_P.
	* ns32k.h (FUNCTION_PROLOGUE): use __GLOBAL_OFFSET_TABLE_,
	not _GLOBAL_OFFSET_TABLE_.
	(LEGITIMATE_CONSTANT_P, LEGITIMATE_PIC_OPERAND_P): Use
	LEGITIMATE_PIC_OPERAND_P, not LEGITIMATE_CONSTANT_P,
	to set current_function_uses_pic_offset_table.
	(INDIRECTABLE_1_ADDRESS_P): Baseregisters are not legal
	for {LABEL,SYMBOL}_REFS when emitting pic.
	(GO_IF_INDEXABLE_ADDRESS): INDIRECTABLE_1_ADDRESSes are indexable too.
	* ns32k/netbsd.h, ns32k/xm-netbsd.h:  New files.
	* configure (ns32k-pc532-netbsd*): New case, to use new files.

Wed Mar 30 16:39:24 1994  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* reload1.c (reload): Fix typo in previous change.

	* gcc.c (process_command, case 'B'): If name is "stageN/",
	add "include" to system include prefix.

	* bc-emit.c, calls.c, combine.c, emit-rtl.c, final.c, g++.c:
	Include <stdarg.h> instead of "gstdarg.h"; similarly for varargs.
	* genattrtab.c, mips-tfile.c, protoize.c, toplev.c, tree.c: Likewise.

	* fold-const.c (strip_compound_expr): New function.
	(fold): Call it; avoid exponential work when simplifying
	binary op over a COND_EXPR.

	* cse.c (cse_insn): Add missing definition of var TEM; clean up
	shadowed uses.

	* sparc.c (sparc_type_code): Revise so it supports non-C types.

Wed Mar 30 14:52:26 1994  Jim Wilson  (wilson@mole.gnu.ai.mit.edu)

	* xm-alpha.h (string.h): Don't include when inhibit_libc is defined.

Wed Mar 30 10:37:51 1994  Stan Coxs  (coxs@dg-rtp.dg.com)

	* m88k.md (movdf): Do not consider extended registers when doing
	define_split. 

Wed Mar 30 01:49:06 1994  Torbjorn Granlund  (tege@cygnus.com)

	* config/m68k/m68k.c (output_move_double): Use `%.' where appropriate.

Tue Mar 29 10:46:18 1994  Jeffrey A. Law  (law@snake.cs.utah.edu)

	* pa.h (ASM_OUTPUT_LABEL): TARGET_GAS no longer needs trailing colons.
	(ASM_OUTPUT_INTERNAL_LABEL, ASM_OUTPUT_COMMON): Likewise.

	* pa.h (TARGET_PORTABLE_RUNTIME): Define.
	(TARGET_SWITCHES): Add -mportable-runtime and -mno-portable-runtime.
	(CUMULATIVE_ARGS): Now a "struct hppa_args" rathern than an int.
	All references changed.
	(INIT_CUMULATIVE_ARGS): Also initialize nargs_prototype.
	(INIT_CUMULATIVE_INCOMING_ARGS): Define.
	(FUNCTION_ARG_ADVANCE): Decrement nargs_prototype for each arg seen.
	(FUNCTION_ARG): Handle TARGET_PORTABLE_RUNTIME.
	(ASM_DECLARE_FUNCTION_NAME): Explicitly disallow argument relocations
	for TARGET_PORTABLE_RUNTIME.
	(ASM_OUTPUT_INT): Do not use a P% prefix for function references
	if TARGET_PORTABLE_RUNTIME.

	* pa.md (high and lo_sum for function addresses): Provide alternate
	definitions for TARGET_PORTABLE_RUNTIME.

	* pa.c (output_arg_descriptor): Explicitly disallow argument
	relocations for TARGET_PORTABLE_RUNTIME.

Tue Mar 29 07:45:44 1994  Chris Smith  (csmith@convex.com)

	* convex.h (check_float_value): fix return type in extern.

Mon Mar 28 18:36:56 1994  Philippe De Muyter  (phdm@info.ucl.ac.be)

	* m68k/mot3300.h (ASM_IDENTIFY_GCC): Define to be non-null.

Sun Mar 27 20:26:36 1994  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* c-parse.in (attrib): Handle string args as expressions,
	merging the two rules.  `mode' attribute now takes a string arg.
	Delete the rule for an identifier as arg.
	* c-common.c (decl_attributes): `mode' attribute now takes string arg.

Sun Mar 27 14:42:39 1994  Doug Evans  (dje@cygnus.com)

	* c-parse.in (attrib): Back out last patch.

Fri Mar 25 17:52:44 1994  Walter Misar  (misar@rbg.informatik.th-darmstadt.de)

	* m68k.md (movsi): New strategy for moving small constants into dregs,
	if it can't be done with moveq. 
	* m68k.h (CONST_COSTS): Reflect the change in m68k.md.

Fri Mar 25 14:30:47 1994  Philippe De Muyter  (phdm@info.ucl.ac.be)

	* m68k.md (call): If (new) MOTOROLA_BSR defined, try to emit 'bsr'.
	* m68k/mot3300.h (MOTOROLA_BSR): Defined.

	* m68k.c (output_function_prologue): Use link.w on 68040;
	emit pea fp + movl sp,fp instead of linkw 0 for 68040.

Fri Mar 25 14:21:06 1994  Jim Meyering  (meyering@idefix.comco.com)

	* bc-emit.c (bc_emit_bytecode): Remove decl of unused variable NPUSHES.
	(bc_emit_instruction): Remove decl of unused variable LITERAL.
	* c-aux-info.c (gen_decl): Remove decl of unused variable.
	* c-common.c (truthvalue_conversion): Remove decl of unused CODE.
	* c-decl.c (push_parm_decl): Move decl of unused variable OLDDECL
	into #if 0 block.
	(finish_enum): Remove decls of unused variables I and TEMPORARY.
	* c-parse.in (primary): Remove decl of unused variable CONTEXT.
	* c-typeck.c (convert_arguments): Remove decls of unused variables.
	* collect2.c (putenv): Remove decl of unused variable STR_LEN.
	(main): Remove decls of unused variables LEN and CLEN.
	* combine.c (try_combine): Remove decls of unused variables.
	(subst): Remove decls of unused variables ORIG_CODE.
	(simplify_if_then_else): Remove decl of unused variable C2.
	(make_compound_operation): Remove decl of unused variable COUNT.
	(known_cond): Remove decl of unused variable NEW.
	(make_field_assignment): Remove decl of unused variable OURDEST.
	(simplify_and_const_int): Remove decls of unused variables.
	(simplify_shift_const): Remove decl of unused variable INNER.
	* cse.c (cse_insn): Remove decl of unused variable TEM.
	* dbxout.c (dbxout_symbol): Remove decls of unused variables.
	* emit-rtl.c (reset_used_flags): Remove decl of unused variable.
	(gen_sequence): Remove decl of unused variable NEWVEC.
	* enquire.c (f_rep): Remove decl of unused variable F1.
	* final.c (output_source_line): Remove decl of unused variable.
	* fix-header.c (read_scan_file): Remove decl of unused variable RPTR.
	(write_rbrac): Remove decl of unused variable PARTIAL.
	(main): Likewise.
	* g++.c (main): Remove decl of unused variable FN.
	* genattr.c (main): Remove decl of unused variable MAX_ISSUE_TIME.
	* genattrtab.c (expand_units): Remove decl of unused variable.
	* genrecog.c (break_out_subroutines): Remove decl of unused variable.
	* global.c (global_conflicts): Move decl of unused variable I into
	#if 0 block.
	* integrate.c (save_for_inline_nocopy): Remove decls of unused vars.
	(expand_inline_function): Remove two block-scope decls of unused
	variable COPY.
	* jump.c (invert_jump): Remove decl of unused variable OLABEL.
	* loop.c (init_loop): Remove decls of unused variables.
	(loop_optimize): Remove decl of unused variable END.
	(combine_movables): Remove decls of unused variables.
	(check_final_value): Remove decl of unused variable TEM.
	(check_dbra_loop): Remove decls of unused variables.
	(maybe_eliminate_biv): Remove decls of unused variables SET and V.
	* reload.c (find_reloads_address): Remove two block-scope decls of
	unused variable OLDREF.
	* rtl.c (read_rtx): Remove decl of unused variable STRINGBUFSIZE.
	* scan.c (get_token): Remove decl of unused variable QUOTE.
	(get_token): Remove unused label AGAIN.
	* sched.c (clear_units): Remove decl of unused variable UNIT.
	(actual_hazard_this_instance): Remove decl of unused variable I.
	(actual_hazard): Remove two block-scope decls of unused variable BEST.
	(sched_analyze_1): Remove decls of unused variables OFFSET and BIT.
	(sched_analyze): Remove decl of unused variable DEST.
	(sched_note_set): Remove decl of unused variable J.
	(create_reg_dead_note): Remove decl of unused variable BACKLINK.
	(new_sometimes_live): Remove decl of unused variable I.
	(schedule_block): Remove decls of unused variables LAST_NOTE and REGNO.
	(schedule_insns): Remove decls of unused variables I and INSNS.
	* sdbout.c (sdbout_symbol): Remove decl of unused variable LETTER.
	(sdbout_type): Remove decl of unused variable TEM.
	* toplev.c (compile_file): Remove unused label.
	* tree.c (stabilize_reference_1): Remove decl of unused variable.
	* unroll.c (unroll_loop): Remove decl of unused variable V.
	(precondition_loop_p): Remove decls of unused variables.
	(final_giv_value): Remove decl of unused variable CODE.

Fri Mar 25 13:40:05 1994  Jeffrey A. Law  (law@snake.cs.utah.edu)

	* pa.h (DBX_REGISTER_NUMBER): Fix numerous bugs in handling
	of FP registers and the SAR register.

Fri Mar 25 12:46:56 1994  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* i386.md (movhi, movqi): Properly recognize unsigned forms of -1
	for dec[bw] insns.

	* expr.c (expand_expr, case ADDR_EXPR): Return const0_rtx if
	taking address of an ERROR_MARK; also do some minor cleanup.

	* calls.c (expand_call): Don't require both -W and -Winline to say
	that call can't be inlined.
	Warn if inlining is tried but fails.

	* cccp.c (for_lint): Variable renamed from `lint'.

	* expr.c (expand_expr, case ABS_EXPR): Compare with 0 of proper mode.

	* fold-const.c (fold, case *_DIV_EXPR): Correct result when
	product of constants overflows.

	* alpha.c (output_prolog): Correctly compute floating-reg save
	area offset.

	* stmt.c (init_stmt_for_function): Clear stack_block_stack.

	* reload1.c (reload): Fix error in last change; only check
	against group reloads and check all reloads.

Thu Mar 24 13:19:43 1994  Doug Evans  (dje@cygnus.com)

	* toplev.c (v_pedwarn_with_decl): Don't cause compilation to fail
	from pedantic errors in system header files.

Thu Mar 24 03:01:05 1994  Frederic Pierresteguy  (F.Pierresteguy@frcl.bull.fr)

	* config.sub: Add case for Bull dpx20.

	* config/m68k/dpx2.h (CPP_PREDEFINES): Fix typo.

Wed Mar 23 17:29:56 1994  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* reload1.c (reload): Fix error in last change; compute MODE before
	it's used.

	* loop.c (get_condition): Exit if we don't recognize SET_SRC of 
	a SET that modifies OP0.

	* combine.c (simplify_rtx, case FLOAT_TRUNCATE): Simplify
	case of (float_truncate (abs (float_extend X))).

Wed Mar 23 17:20:54 1994  Jim Wilson  (wilson@cygnus.com)

	* dbxout.c (dbxout_parms): For parameter living in psuedo-reg that
	was optimized away, use declared type instead of passed type.

	* mips.c (mips_asm_file_start): Add comment on TARGET_GP_OPT code.

	* c-decl.c (init_decl_processing): Change builtin_next_arg type so
	that it accepts any parameter instead of none.
	* cp/decl.c (init_decl_processing): Likewise.
	* expr.c (expand_builtin, BUILT_IN_NEXT_ARG case): Verify that
	parameter is last named argument.
	* gstdarg.h (va_start): Pass LASTARG as a parameter to
	builtin_next_arg.
	* va-h8300.h, va-i860.h, va-i960.h, va-mips.h, va-sparc.h
	(va_start): Likewise.
	* va-alpha.h (va_start): Add call to builtin_next_arg.
	* va-clipper.h, va-m88k.h, va-pa.h, va-sparc.h (va_start):
	Likewise.

Tue Mar 22 18:57:54 1994  Jim Wilson  (wilson@cygnus.com)

	* iris5.h (MIPS_DEFAULT_GVALUE): Define to zero.
	* mips.c (pic_address_needs_scratch): New function.
	(override_options): Set flag_pic when TARGET_ABICALLS.
	* mips.h (GO_IF_LEGITIMATE_ADDRESS): Also pretend that we have REG
	plus CONST_INT addresses by deleting an else.
	(CONSTANT_ADDRESS_P): When pic, don't accept addresses which are
	symbol_ref plus a large integer.
	(LEGITIMATE_PIC_OPERAND_P): Likewise.
	(LEGITIMIZE_ADDRESS): When pic, convert addresses which are
	symbol_reg plus a large integer, to reg plus a large integer.
	(ASM_OUTPUT_ADDR_DIFF_ELT): Use .gpword instead of subtracting
	labels.
	* mips.md (movsi): Add special handling for constants which are
	illegal addresses when pic.
	(tablejump_internal1, tablejump_internal2): Emit .cpadd when
	TARGET_ABICALLS.  Adjust length to include .cpadd.

	* mips.h (TRAMPOLINE_TEMPLATE): Add `move $25,$3' for when
	TARGET_ABICALLS.  Delete padding for 64 bit case.  Adjust offsets.
	(TRAMPOLINE_SIZE): Increase from 9 to 10 words for 32 bit case.
	(INITIALIZE_TRAMPOLINE): Increase offsets by 4 bytes for 32 bit case.

Tue Mar 22 15:46:42 1994  Michael Meissner  (meissner@osf.org)

	* i386/osfrose.h (HANDLE_PRAGMA_WEAK): Define in terms of
	TARGET_ELF.
	(ASM_OUTPUT_DEF): Provide a definition.

Mon Mar 21 15:56:58 1994  Per Bothner  (bothner@cygnus.com)

	* fix-header.c:  Make sstring buf extern (rather than "common").
 
Mon Mar 21 17:45:56 1994  Doug Evans  (dje@cygnus.com)

	* configure: Accept and ignore --without-*.

Mon Mar 21 17:05:25 1994  Jim Wilson  (wilson@cygnus.com)

	* dbxout.c (source_label_number): New variable.
	(dbxout_source_file): Use it.  Output an Ltext label.

	* c-decl.c (duplicate_decls): When pedantic, warn when any static
	declaraction follows a non-static.

	* sparc.md (seq, sne, sgt, slt, sge, sle): Add support
	for !TARGET_HARD_QUAD.

Mon Mar 21 16:59:02 1994  Mike Collison  (collison@chianti.sw.stratus.com)

	* reload1.c (reload): More accurately compute nongroup needs.
	(reloads_conflict): New function.

Mon Mar 21 16:21:07 1994  Doug Evans  (dje@cygnus.com)

	* libgcc2.c (__builtin_saveregs): Fix return type.

Mon Mar 21 07:37:13 1994  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* function.c (preserve_temp_slots): If argument is REG, see if it
	is address of a temp slot we know about.
	* expr.c (expand_expr, case ADDR_EXPR): Update temp slot address
	if we put it in a register; mark result as pointer.

	* cse.c (FIXED_REGNO_P): Treate global regs as fixed.
	(CHEAP_REGNO): Renamed from CHEAP_REG.
	(CHEAP_REG): New macro; user var in hard reg is cheap.
	(COST): Pass RTL to CHEAP_REG, not regno.
	(rtx_cost, case REG): Likewise.

Sun Mar 20 19:38:44 1994  Stephen L Moshier  (moshier@world.std.com)

	* m68k/news.h (PRINT_OPERAND): Print float infinity
	and NaN's as +/-99e999.

Sun Mar 20 17:42:09 1994  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* mips-tfile.c (update_headers): Align symbol table sections,
	using ALIGN_SYMTABLE_OFFSET. Provide a default definition which
	does no alignment.
	* alpha.h (ALIGN_SYMTABLE_OFFSET): New macro.

Sun Mar 20 06:38:41 1994  Richard Earnshaw (rwe11@cl.cam.ac.uk)

	* emit_rtl.c (try_split): Rename third parameter as LAST.
	Recursively call try_split for each new insn created.

	* combine.c (mark_used_regs_combine): Correct typo.

Sun Mar 20 06:28:23 1994  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* vax.h (CHECK_FLOAT_VALUE): Add missing continuation character.
	* tree.c (build_real): Add `overflow' var; pass to CHECK_FLOAT_VALUE.

Sat Mar 19 17:44:14 1994  Jim Wilson  (wilson@cygnus.com)

	* expr.c (expand_expr, case ABS_EXPR): Fix typo in last change.

Sat Mar 19 17:13:47 1994  Richard Earnshaw (rwe11@cl.cam.ac.uk)

	* combine.c (newpat_used_regs): New variable.
	(mark_used_regs_combine): New function.
	(try_combine): Use them.
	(reg_dead_at_p): Registers marked in newpat_used_regs must always be 
	considered to be live.

Sat Mar 19 06:29:38 1994  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* c-parse.in (attrib): Use `identifier' instead of `IDENTIFIER'
	since names that are (e.g.) typedef names are still OK.

	* m68k/next.h (GO_IF_INDEXABLE_BASE): Make compatible with m68k.h.

	* genoutput.c (output_epilogue, insn_names): Write correct names
	for patterns before first named pattern.

	* nextstep.h (SELECT_SECTION): Fix typo (arg names) in last change.

	* c-decl.c (grokdeclarator): Use signed version of `sizetype' for
	type of array index.

Sat Mar 19 06:25:39 1994  Stephen L Moshier  (moshier@world.std.com)

	* fold-const.c (const_binop): Avoid initialized aggregate
	local variables, for antique compilers.

Fri Mar 18 18:43:28 1994  Jim Wilson  (wilson@cygnus.com)

	* i386/osfrose.h (SELECT_SECTION): Variables go in readonly data
	only if the initializer is constant.
	* i386/svr3gas.h, m88k/m88k.h, mips/mips.h, nexstep.h,
	rs6000/rs6000.h, sparc/sparc.h, svr3.h, svr4.h, vax/vms.h
	(SELECT_SECTION): Likewise.
	* varasm.c (assemble_variable): Likewise.

Fri Mar 18 17:54:12 1994  David Edelsohn  (edelsohn@npac.syr.edu)

	* rs6000.md (divmodsi4, udivsi3, divsi3, udivmodsi4): Add AIX
	common-mode cases.
	(mulh_call, mull_call, divss_call, divus_call, quoss_call, quous_call):
	AIX common-mode call patterns.
	(ashlsi3): More TARGET_POWERPC to ! TARGET_POWER changes.
	(addsf3, subsf3, mulsf3, divsf3, etc.): Change TARGET_POWER
	to ! TARGET_POWERPC.
	(fix_truncdfsi2): Use POWER/2 and PowerPC FP convert instruction.
	(fpcvtsi): New pattern.
	(mulsidi3): Add AIX common-mode case, add imul attribute to POWER
	pattern, add PowerPC pattern, flag input operands as commutative.
	(smulsi3_highpart): Add AIX common-mode case.
	(movsi matcher): Add mtjmpr attribute to ! TARGET_POWER case.
	(movsf): Clean up load from memory or integer register test.
	(movdi matcher): Add FP register support.

	* rs6000.c (common_mode_defined): New variable.
	(output_prolog): Define external common-mode calls.

	* rs6000.h (HARD_REGNO_MODE_OK): Allow DImode in FP registers.
	(CONDITIONAL_REGISTER_USAGE): Delete ppcas mention from comment.
	(RTX_COSTS): Costs based upon processor_type enum.

Fri Mar 18 17:53:35 1994  Torbjorn Granlund  (tege@cygnus.com)

	* rs6000.md (smulsi3_highpart): New patterns.
	(umulsi3_highpart_power): New pattern.

Fri Mar 18 15:26:56 1994  Jim Wilson  (wilson@cygnus.com)

	* sol2.h (SELECT_RTX_SECTION): Delete.
	* sysv4.h (SELECT_RTX_SECTION): Add.
	(ASM_SPEC): Pass -K to assembler when PIC.

	* cccp.c (before_system, last_before_system): New variables.
	(main): Handle -isystem option.  Insert -isystem directories in
	search chain at first_system_include.
	* gcc.c (include_prefix): New variable.
	(process_command): Add path/include to include_prefix when see a
	-Bpath option.
	(do_spec_1, case 'I'): Pass include_prefix directories to cpp with
	the -isystem option.

	* loop.c (scan_loop): New variable loop_depth.	Increment and
	decrement on LOOP_BEG and LOOP_END notes.  Only use LOOP_VTOP note
	if loop_depth is zero.
	(strength_reduce): Likewise.

	* sparc/sparc.h (FIXUNS_TRUNCTFSI2_LIBCALL): Define.
	* optabs.c (init_optabs): Use FIXUNS_TRUNCTFSI2_LIBCALL macro.

Thu Mar 17 13:13:46 1994  Per Bothner  (bothner@kalessin.cygnus.com)

	* stor-layout.c (layout_type, case BOOLEAN_TYPE):
	Set TREE_UNSIGNED unless TYPE_MIN_VALUE is negative.

Thu Mar 17 18:36:34 1994  Jim Wilson  (wilson@cygnus.com)

	* c-common.c (shorten_compare): When simplify compare against
	zero, check for restype_ptr unsigned instead of primop0 unsigned.

	* calls.c (expand_call): Undo Feb 27 change.  Set nregs to -1 for
	normal case.

Thu Mar 17 17:43:28 1994  Ian Lance Taylor  (ian@cygnus.com)

	* fixinc.svr4: Define BYTE_ORDER in <sys/byteorder.h> as on
	UnixWare 1.1.

Thu Mar 17 06:02:24 1994  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* stor-layout.c (layout_type, case INTEGER_TYPE): Properly test for
	nonnegative lower bound.

Wed Mar 16 12:41:19 1994  Ian Lance Taylor  (ian@cygnus.com)

	* tree.c (build_nt, build_parse_node): Don't declare last
	parameter to be register, since it is used in VA_START, which
	may take its address.
	* genattrtab.c (attr_printf): Likewise.

Wed Mar 16 12:00:40 1994  Jeffrey A. Law  (law@snake.cs.utah.edu)

	* pa.h (INITIALIZE_TRAMPOLINE): Do not mask off high
	bits of address passed to icacheflush.

	* pa.h (WCHAR_TYPE): Use "unsigned int" by default.
	(WCHAR_TYPE_SIZE): Change appropriately.
	* pa-ghiux.h, pa-ghpux.h, pa-gux7.h, pa-hiux.h, pa-hpux.h,
	pa-hpux7.h (WCHAR_TYPE): Delete definition.
	(WCHAR_TYPE_SIZE): Likewise.
	* pa-osf.h (WCHAR_TYPE): Override appropriately for OSF1.
	(WCHAR_TYPE_SIZE): Likewise.

	* pa.md (DImode lo_sum): Add earlyclobber for alternative one.

	* pa.h (ASM_OUTPUT_ADDR_DIFF_ELT): Rewrite to match
	ASM_OUTPUT_ADDR_VEC_ELT which is PIC-safe.

Wed Mar 16 09:07:34 1994  Matthias Pfaller  (leo@marco.de)

	* ns32k.c (global_symbolic_reference_mentioned_p): Recurse only
	if GET_CODE (op) == CONST.

	* ns32k.h (FUNCTION_PROLOGUE): Load sb through r0 if TARGET_REGPARM
	is false.

Wed Mar 16 06:57:45 1994  Richard Kenner  (kenner@vlsi1.ultra.nyu)

	* emit-rtl.c (gen_lowpart_common, gen_highpart, operand_subword):
	Test input against RTX for FP, AP, and SP, not same register number.

	* expr.c (expand_expr): Update comments and fix formatting.
	(expand_expr, case VAR_DECL, STRING_CST, CONSTRUCTOR): If
	flag_force_addr, put address in register unless REG.
	(expand_expr, case CONSTRUCTOR, CONVERT_EXPR): Make TARGET with
	TMODE, if specified.
	(expand_expr, case IN_EXPR): Clean up.  Allow INDEX to be an
	unsigned type.  Always evaluate SET and INDEX in case of side effects.
	(expand_expr, case CONVERT_EXPR): Use convert_modes to handle consts.
	(expand_expr, case ABS_EXPR): Simplify processing of COMPLEX.
	Compare with zero word-by-word if required.
	(expand_expr, case ABS_EXPR, MIN_EXPR, COND_EXPR): Don't use TARGET
	if not MODE.
	(expand_expr, case TRUTH_*_EXPR): Modes of input and output must agree.
	(expand_expr, case CONJ_EXPR): Remove redundant def of MODE.

	* stor-layout.c (layout_record): If the place where we were going
	to put a field changed, lay it out again.

Tue Mar 15 07:53:36 1994  Paul A Vixie  (paul@vix.com)

	* Makefile.in (stmp-fixproto): Add missing "-" in front of "if".
	(install-headers-tar, gcc.xtar): Use "-" in front of tar options.

Mon Mar 14 16:28:16 1994  Paul Eggert  (eggert@twinsun.com)

	* fixincludes: Insert newlines just before the end of 'sed'
	command strings if the last 'sed' command is 'a' or 'i';
	BSDI 1.1 'sed' needs this.

Mon Mar 14 15:46:29 1994  Ian Lance Taylor  (ian@cygnus.com)

	* fixinc.svr4: Don't name variables in mmap prototype.

Mon Mar 14 15:16:38 1994  Doug Evans  (dje@cygnus.com)

	* objc/Makefile (*.o): Add explicit dependencies for Sun's VPATH.

Mon Mar 14 05:11:42 1994  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* function.c (assign_parms, expand_function_start): Properly
	set MEM_IN_STRUCT_P for DECL_RTL of function result.

	* c-decl.c (grokdeclarator): Convert to sizetype when manipulating
	size of array and use care to avoid mixed-type operations.

	* expr.c (expand_expr): Don't call bc_expand_expr
	if EXPAND_INITIALIZER.
	* bc-optab.c (bc_expand_{binary,unary}_operation): Add missing
	args to call to expand_expr.
	* stmt.c (bc_expand_start_cond): Set exit_label if not EXITFLAG.
	(bc_expand_end_bindings): Only define exit_label if set.
	Don't pop nesting_stack.
	* varasm.c (output_constant_def): Do hashing and make label
	even if bytecode.
	* bc-emit.c (bc_seg_write): Don't make unaligned reference to
	seg->data.
	* toplev.c (compile_file): Call bc_write_file here and pass
	asm_out_file, not stdout.
	(main): Don't call bc_write_file here.
	Fix wording on error if -fbytecode specified on unsupported target.

	* fold-const.c (fold, associate): If -ffast-math, associate FP mults.
	(fold, case RDIV_EXPR): Split case; ignore division by 1.
	If -ffast-math, convert to multply by reciprocal.
	(fold, case *_DIV_EXPR): Simplify A/C1/C2.

	* tree.h (tree_int_cst_sgn): New declaration.
	* tree.c (tree_int_cst_sgn): New function.
	* c-decl.c (finish_{decl,struct,enum}): Call it.
	* c-typeck.c (build_binary_op, pop_init_level): Likewise.
	(output_pending_init_elements): Likewise.
	* expr.c (expand_builtin, case BUILT_IN_RETURN_ADDRESS): Likewise.
	* fold-const.c (fold): Likewise.
	(fold, case *_DIV_EXPR): Add missing conversion.
	* convert.c (convert_to_integer): Convert integer_one_node to
	proper type before tree_int_cst_lt call.

Sun Mar 13 06:46:13 1994  Wolfgang Stukenbrock (wgstuken@immd4.informatik.uni-erlangen.de)

	* gcc.c (do_spec_1): Don't duplicate a macro starting with '__'.

Sun Mar 13 05:54:00 1994  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* convert.c (convert_to_integer): When changing type of truthvalue
	operation, change types of inputs too.
	* c-common.c (TRUTH_*_EXPR): Convert to integer_type_node.

	* tree.c: Include setjmp.h.
	(build_real_from_int_cst): Propagate overflow flags and
	establish float handler.
	(build_complex): Propagate overflow flags.
	* cse.c (simplify_binary_operation): Protect real_value_truncate
	inside handler.
	* fold-const.c (force_fit_value): Operate on REAL_CST as well.
	(real_value_truncate): Don't use its own handler.
	(const_binop): Set overflow on FP error and call force_fit_type.
	(fold_convert): Likewise.
	* c-common.c (constant_expression_warning, overflow_warning):
	Handle REAL_CST and COMPLEX_CST.
	* convex.h, convex.c, fx80.h, tahoe.h, vax.h, vax.c: Add OVERFLOW
	operand to CHECK_FLOAT_VALUE.

	* jump.c (rtx_equal_for_thread_p): Correct error in previous
	change; add missing arg in recursive call.

Sat Mar 12 19:42:03 1994  H.J. Lu  (hjl@nynexst.com)

	* configure (gxx-include-dir): Replacement for gxx-prefix.
	* Makefile.in (gxx_include_dir): Likewise, for gxx_prefix.

	* i386/linux.h (NO_IMPLICIT_EXTERN_C): Defined.

Sat Mar 12 07:42:12 1994  Paul Eggert  (eggert@twinsun.com)

	* Makefile.in (stmp-fixproto): Work around a `make' bug in BSDI 1.1.

Sat Mar 12 07:38:08 1994  Klaus Kaempf  (kkaempf@didymus.rmi.de)

	* bi-run.h: Properly test BYTES_BIG_ENDIAN.
	* bytecode.h: Likewise for WORDS_BIG_ENDIAN.

	* cccp.c (do_include, hack-vms_include_specification): Change handling
	of '#include filename' to be compatible with VAX-C.

	* genemit.c (gen_exp): Added \n to printf to shorten line for VAX-C.

Sat Mar 12 06:42:38 1994  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* expr.h (emit_float_lib_cmp): Add declaration here.
	* optabs.c: Don't define emit_float_lib_cmp now that no longer static.

	* jump.c: Add prototypes for static functions.
	(jump_optimize, delete_insn): Use GET_RTX_CLASS to test for insns.
	(mark_jump_label): Delete dead code.
	(delete_computation, redirect_tablejump): No longer static.

Fri Mar 11 14:40:40 1994  Jim Wilson  (wilson@cygnus.com)

	* lite.h (TARGET_DEFAULT): Use parentheses.
	* sparc.h (TARGET_HARD_QUAD): New macro.
	(TARGET_SWITCHES): Add hard-quad-float, soft-quad-float.
	(TARGET_DEFAULT): Use parentheses.
	({ADDTF3,SUBTF3,MULTF3,DIVTF3,SQRTTF2,FLOATSITF2,FIX_TRUNCTFSI2,
	EXTENDSFTF2,TRUNCTFSF2,EXTENDDFTF2,TRUNCTFDF2,EQTF2,NETF2,GTTF2,
	GETF2,LTTF2,LETF2}_LIBCALL): New macros.
	* sparc.md (sleu+4, sleu+7, extendsftf2, extenddftf2, trunctfsf2,
	trunctfdf2, floatsitf2, fix_trunctfsi2, addtf3, subtf3, multf3,
	divtf3, sqrttf2): Disable when -msoft-quad-float.
	(beq, bne, bgt, blt, bge, ble): When -msoft-quad-float, account
	for return value of SPARC ABI routines that differs from libgcc.
	* flow.c (libcall_dead_p): Fail not abort for libcall that returns
	value via invisible pointer.
	* optabs.c (emit_float_lib_cmp): Make non static.
	(init_optabs): Use {ADDTF3,SUBTF3,MULTF3,DIVTF3,SQRTTF2,FLOATSITF2,
	FIX_TRUNCTFSI2,EXTENDSFTF2,TRUNCTFSF2,EXTENDDFTF2,TRUNCTFDF2,EQTF2,
	NETF2,GTTF2,GETF2,LTTF2,LETF2}_LIBCALL macros.

	* sparc/sparc.h (STARTING_FRAME_OFFSET): Depend on
	LONG_DOUBLE_TYPE_SIZE.

Fri Mar 11 08:01:54 1994  Stephen R. van den Berg  (berg@pool.informatik.rwth-aachen.de)

	* rtl.h, tree.h, g++.c, gcc.c (PVPROTO): New macro.
	* combine.c, expr.h, rtl.h, tree.h, gcc.c: Use it for varargs protos..
	* genattrtab.c, mips-tfile.c, output.h, toplev.c: Likewise.

Fri Mar 11 07:21:36 1994  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* emit-rtl.c (copy_rtx_if_shared, case LABEL_REF): Can't share.
	* jump.c (jump_optimize): Delete REG_LABEL note if label no
	longer in insn.

	* c-decl.c (finish_decl): When preserving an initializer, ensure
	its type is on a good obstack.

Thu Mar 10 15:32:42 1994  Mike Collison  (collison@sw.stratus.com)

	* reload1.c (emit_reload_insns): When clearing reg_last_reload_reg,
	clear all hard regs in reload_out.

Thu Mar 10 15:23:10 1994  Hallvard B Furuseth  (hbf@durin.uio.no)

	* collect2.c (dup2): Catch `dup' failure.  Return correct value.

Thu Mar 10 15:18:08 1994  Richard Earnshaw  (rwe11@cl.cam.ac.uk)

	* gcc.c ([__MSDOS__]): Use #ifdef, not #if.
	* collect2.c ([__MSDOS__]): Likewise.

Thu Mar 10 15:03:01 1994  Paul Eggert  (eggert@twinsun.com)

	* cccp.c (main, finclude, check_precompiled): When safe_read
	returns a partial buffer, this means EOF has been reached;
	don't try to read any more.

Wed Mar  9 18:47:29 1994  Paul Eggert  (eggert@twinsun.com)

	* real.c (target_negative): -0 counts as negative.

Wed Mar  9 15:32:01 1994  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* m68k.md (movqi): Disable special-case of stack push if operand
	one is an address register.

	* c-typeck.c (pointer_int_sum): Multiplication should be
	done signed.
	(pointer_diff): Likewise the division.
	* fold-const.c (fold, case MULT_EXPR): Simplify MULT_EXPR of an
	EXACT_DIV_EXPR with the same divisor as our multiplicand.

	* jump.c (rtx_equal_for_thread_p): Commutative operations
	are identical if the operands match in the opposite order.
	* sched.c (rtx_equal_for_memref_p): Likewise.

Wed Mar  9 12:07:29 1994  Richard Earnshaw (rwe11@cl.cam.ac.uk)

	* cse.c (simplify_relational_operation): Fix typos; use
	 ARG_POINTER_REGNUM and FRAME_POINTER_REGNUM in condtionals.

Tue Mar  8 16:12:07 1994  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* explow.c (break_out_memory_refs): Don't call mark_reg_pointer
	here.
	(memory_address): Call it here if X changed and is now a REG
	or REG + CONST_INT.

Tue Mar  8 15:57:29 1994  Jim Wilson  (wilson@cygnus.com)

	* c-decl.c (finish_decl): When saving/discarding initializers,
	don't check TREE_PERMANENT and TREE_STATIC.
	(finish_decl, finish_function): Pass new argument to
	permanent_allocation.
	* cp/decl.c (finish_function): Likewise.	
	* cp/decl2.c (write_vtable_entries, finish_file): Likewise.
	* toplev.c (compile_file): Likewise.
	* function.h (struct function): Add momentary_function_firstobj
	field.
	* tree.c (momentary_function_firstobj): New variable.
	(init_obstack): Set it.
	(save_tree_status): Save it and set it.
	(restore_tree_status): Use it and restore it.
	(permanent_allocation): New parameter function_end.  Clear
	momentary_obstack to momentary_function_firstobj if true.
	(preserve_initializer): Set base field of every momentary
	level on the momentary stack to new momentary_firstobj.
	(pop_momentary): Only free back to previous base.
	* tree.h (permanent_allocation): Add prototype.

Mon Mar  7 20:10:56 1994  Jim Wilson  (wilson@cygnus.com)

	* iris4gl.h: Rewrite.  Include iris4loser.h not iris4-gdb.h.
	Define PREFERRED_DEBUGGING_TYPE not ASM_SPEC.

	* bsd-4.h (LINK_SPEC): Do not depend on gas.  Don't interpret -EB
	and -EL options, but do pass them.
	* bsd-5.h (LINK_SPEC): Likewise.
	* decl-osf1.h (LINK_SPEC): Likewise.
	* iris5.h (LINK_SPEC): Likewise.
	* mips-5.h (LINK_SPEC): Likewise.
	* mips.h (LINK_SPEC): Likewise.
	* svr3-4.h (LINK_SPEC): Likewise.
	* svr3-5.h (LINK_SPEC): Likewise.
	* svr4-4.h (LINK_SPEC): Likewise.
	* svr4-5.h (LINK_SPEC): Likewise.

	* dec-bsd.h (LINK_SPEC): Pass all normal linker options to gld.
	(ASM_SPEC): Pass all normal assembler options to gas.
	* osfrose.h (LINK_SPEC): Likewise.
	(ASM_SPEC): Likewise.

	* mips.h (ASM_SPEC): Make definition depend on whether or
	not the default assembler is gas.  Pass all normal assembler
	options to gas.  
	* iris4loser.h (ASM_SPEC): Likewise.  Pass -O0 if the assembler is
	not gas.

	* iris3.h (ASM_SPEC, LINK_SPEC): Delete.
	* news4.h (ASM_SPEC, LINK_SPEC): Delete.
	* news5.h (LINK_SPEC): Delete.
	* nws3250v4.h (ASM_SPEC, LINK_SPEC): Delete.
	* ultrix.h (ASM_SPEC, LINK_SPEC): Delete.

	* mips.h (ASM_FINAL_SPEC): Cross compiling does not presume gas.

	* osfrose.h (SIZE_TYPE): Delete.
	(MAX_WCHAR_TYPE_SIZE): Define.

	* calls.c (expand_call): For pcc_struct_value case, set
	MEM_IN_STRUCT_P correctly on target.

	* Makefile.in (mostlyclean): Don't explicitly delete ld.

Mon Mar  7 20:06:38 1994  Ian Lance Taylor  (ian@cygnus.com)

	* mips-tdump.c (print_symbol): The index field of a global symbol
	is the symbol table index of the corresponding local symbol, not
	an index into the aux table.
	(print_file_desc): Print out size of line number information
	rather than repeating line number count.  The cbLineOffset field
	of a PDR is relative to the cbLineOffset field of the FDR.  Also,
	when computing line_end of the last PDR, use cbLineOffset, not
	ilineBase.

Mon Mar  7 17:42:35 1994  H.J. Lu (hjl@nynexst.com)

	* Makefile.in (gxx_prefix):  New; default to $(libdir).
	(GPLUSPLUS_INCLUDE_DIR): Change to $(gxx_prefix)/g++-include.
	* configure (gxx_prefix): New; default to $(libdir).

	* i386/linux.h (GPLUSPLUS_INCLUDE_DIR): Deleted.
	(STARTFILE_SPEC): Remove "-nojump".

Mon Mar  7 17:06:08 1994  Stephen R. van den Berg  (berg@pool.informatik.rwth-aachen.de)

	* i386/xm-linux.h (malloc): Remove disabled code.

Mon Mar  7 13:27:09 1994  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* cccp.c (no_record_file): New variable.
	(main): Set it for -imacros and -include files.
	(do_endif): Don't call record_control_macro for -include or -imacros
	files or files included from -imacros.

Sun Mar  6 21:48:51 1994  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* config.sub: Accept freebsd as OS.

Sun Mar  6 14:40:00 1994  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* stupid.c: Add prototypes for static functions.
	(last_{jump,label}_suid): Deleted; all uses deleted.
	(reg_crosses_blocks): Likewise.
	(stupid_life_analysis): Only allocate MAX_SUID entries
	of after_insn_hard_regs.
	Use GET_RTX_CLASS when possible.
	Initialize all of reg_renumber.
	Use reg_alternate_class when reg not available in preferred class.
	(stupid_find_reg): Delete argument CROSSES_BLOCKS.

	* stupid.c (stupid_mark_refs): If setting reg_where_dead, set
	regs_live so we don't later clobber it.

	* recog.c (constrain_operands): Properly handle '#' in constraint.

	* combine.c (subst): Split into five functions.
	(simplify_{rtx,if_then_else,set,logical}): New functions.

Sun Mar  6 13:12:48 1994  James Van Artsdalen  (james at bigtex.cactus.org)

	* reg-stack.c (find_blocks): Undo previous change to block
	delineation algorithm.
	(reg_to_stack): Make algorithm identical to that in find_blocks.

Sat Mar  5 16:27:58 1994  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* genattrtab.c (attr_printf): Remove `register' from decl of FMT.
	* tree.c (build_nt, build_parse_node): Remove `register' from decl
	of CODE.

	* reload.c (get_secondary_mem): Call SECONDARY_MEMORY_NEEDED_MODE
	if it is defined.
	* alpha.h (SECONDARY_MEMORY_NEEDED_MODE): New macro.
	* alpha.c (output_{pro,epi}log): Round var size to quadword boundary.

	* alpha.md (unaligned_{load,store}hi): Clear low bit of
	address before using as operand to extwl, mskwl, and inswl.
	(movhi, reload_inhi, reload_outhi): Pass extra scratch value.

Fri Mar  4 17:16:23 1994  Leonard Norrgard  (vinsci@nic.funet.fi)

	* c-lex.c: Delete gperf-generated source from here.
	* c-gperf.h: New file; contains just gperf output.
	* Makefile.in (c-gperf.h): New rule.
	(c-lex.o): Depends on c-gperf.h.
	(realclean): Delete c-gperf.h.
	(distdir): Build c-gperf.h.
	(diff): Omit differences in c-gperf.h.

Fri Mar  4 06:35:26 1994  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* svr4.h, m88k.h (ASM_FINISH_DECLARE_OBJECT): Set
	size_directive_output to 1.

	* reload1.c (emit_reload_insns): Don't call gen_input_reload if
	src and dest are identical.

Thu Mar  3 15:32:55 1994  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* alpha.md (mskXl): Add missing NOT in patterns.

	* t-m88k: Remove added realclean rule.

See ChangeLog.8 for earlier changes.
