Wed Dec 31 18:40:26 1997  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>

	* stmt.c (expand_asm_operands): Treat ASM with no outputs as volatile.

Wed Dec 31 08:03:45 1997  Paul Eggert  <eggert@twinsun.com>

	* toplev.c (flag_verbose_asm): Default to 0, not 1.

	* i386/bsd386.h (ASM_COMMENT_START): Define to " #".

Tue Dec 30 17:38:55 1997  Jim Wilson  <wilson@cygnus.com>

	* unroll.c (find_splittable_givs): Handle givs with
	dest_reg created by loop.

Tue Dec 30 14:21:33 1997  Ian Lance Taylor  <ian@cygnus.com>

	* svr4.h (LINK_SPEC): Never specify -h.
	* ptx4.h (LINK_SPEC): Likewise.
	* rs6000/sysv4.h (LINK_SPEC): Likewise.
	* sparc/sol2.h (LINK_SPEC): Likewise.

Tue Dec 30 06:15:23 1997  Philippe De Muyter  <phdm@macqel.be>

	* libgcc2.c (_eh_compat): Do not include stdlib.h, but provide a
	private extern declaration for malloc.

Mon Dec 29 06:56:41 1997  Laurent Guerby <guerby@gnat.com>

	* Makefile.in (stmp-int-hdrs): Add "touch".

Sun Dec 28 19:36:05 1997  Stephen L Moshier  <moshier@mediaone.net>

	* mips.h (CACHE_FLUSH_FUNC): New, defaults to _flush_cache.
	(INITIALIZE_TRAMPOLINE): Use it.
	* mips/ultrix.h (CACHE_FLUSH_FUNC): Define as cacheflush.
	* mips/news4.h (CACHE_FLUSH_FUNC): Likewise.

Sun Dec 28 08:19:13 1997  Paul Eggert  <eggert@twinsun.com>

	* arm.c: Don't include assert.h.
	* i960.c: Likewise.
	(i960_arg_size_and_align): Rewrite to avoid assert.
	* m88k.c: Don't include assert.h.
	(expand_block_move): Rewrite to avoid assert.
	* except.c: Don't include assert.h.
	(scan_region): Rewrite to avoid assert.
	(save_eh_status, restore_eh_status, scan_region): Don't bother
	testing whether pointer is null.
	* dwarfout.c, dwarf2out.c: Do not include assert.h.
	(assert): New macro, since we can't use system assert.

Sat Dec 27 19:08:17 1997  Stephen L Moshier  <moshier@mediaone.net>

    * mips/ultrix.h (DWARF2_UNWIND_INFO): Define as 0.

Fri Dec 26 05:57:06 1997  Philippe De Muyter  <phdm@macqel.be>

	* m68k/mot3300.h (FINALIZE_TRAMPOLINE): Macro defined.
	* libgcc2.c (__clear_insn_cache): New sysV68-specific helper function
	for trampolines.

Thu Dec 25 15:22:43 1997  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>

	* rs6000.c (function_arg_padding): All aggregates pad upward.

Wed Dec 24 18:05:13 1997  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>

	* sparc.c: Add prototypes for static functions.
	(check_pic): Check for form of pic_pc_rtx, not it itself.
	(pic_setup_code): New function, from finalize_pic.
	(finalize_pic): Call pic_setup_code and insert after nonlocal_receiver.
	* sparc.md (nonlocal_goto_receiver): New pattern.

Tue Dec 23 05:54:38 1997  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>

	* expr.c (expand_builtin_setjmp): Call builtin_setjmp_receiver.
	* mips.md (builtin_setjmp_receiver): New pattern.

	* crtstuff.c (__do_global_ctors_aux): Add missing call to
	FORCE_INIT_SECTION_ALIGN and go back to text section.
	* i386/sol2.h (FORCE_INIT_SECTION_ALIGN): Remove loop.

	* expr.c (do_store_flag): For shift, get bit count using tree_pow2.

Tue Dec 23 05:21:18 1997  Paul Eggert  <eggert@twinsun.com>

	* genattrtab.c (main): Check HAVE_{G,S}ETRLIMIT too.

Mon Dec 22 19:30:59 1997  Michael P. Hayes  <michaelh@ongaonga.chch.cri.nz>

	* sdbout.c (plain_type_1): Add missing checks for named types "char"
	and "int" and check for int by size first.

Mon Dec 22 19:13:58 1997  Manfred Hollstein  <manfred@s-direktnet.de>

	* m68k/xm-mot3300.h (ADD_MISSING_{POSIX,XOPEN}): Define.
	* m88k/xm-sysv3.h: Likewise.

	* configure.in (getrlimit, setrlimit): Call AC_CHECK_FUNCS.
	* cccp.c (main): Check HAVE_{G,S}ETRLIMIT in addition to RLIMIT_STACK.
	* toplev.c (main): Likewise.
	
	* fixincludes (target_canonical): New variable.
	(size_t): Add support for Motorola's stdlib.h which fails to provide
	a definition for size_t.
	(str{len,spn,cspn} return value): Handle different layout on sysV88.
	(fabs/hypot): Provide a fake for hypot which is broken on
	m88k-motorola-sysv3; emit a prototype for fabs on m88k-motorola-sysv3.

	* m68k/mot3300.h (ASM_BYTE_OP): Don't include '\t' in  definition.
	(ASM_OUTPUT_ASCII): Prefix ASM_BYTE_OP by one single '\t'.

Mon Dec 22 19:05:49 1997  Richard Henderson  <rth@cygnus.com>

        * sparc.md (jump): Don't use the annul bit around an empty loop.

Mon Dec 22 18:52:56 1997  Robert Lipe <robertl@dgii.com>

	* i386/x-sco5 (CLIB) Deleted.
	(ALLOCA) Added.
	* i386/xm-sco5.h (USE_C_ALLOCA) Added.

Mon Dec 22 18:42:16 1997  Philippe De Muyter  <phdm@macqel.be>

	* m68k/mot3300Mcrt0.S (mcount): Function removed.
	(__stop_monitor): New function.
	* m68k/mot3300-crt0.S (__stop_monitor): New (empty) function.
	(mcount, mcount%, monitor): Common symbols removed.
	* m68k/mot3300.h (FUNCTION_PROFILER): USE_GAS and !USE_GAS versions
	fixed and merged.
	(EXIT_BODY): Always call __stop_monitor without tricky tests.

Mon Dec 22 18:35:05 1997  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* objc/Make-lang.in (runtime-info.h, libobjc_entry.o): Create in
	build directory.
	(libobjc.a): Update dependency list.
	(libobjc.dll): Likewise.  Use libobjc_entry.o from build directory.
	(objc/sendmsg.o): Add -Iobjc to find runtime-info.h.
	(objc.mostlyclean): Remove runtime-info.h.

Mon Dec 22 18:27:47 1997  Paul Eggert  <eggert@twinsun.com>

	* libgcc2.c (_eh_compat): New section.
	* Makefile.in (LIB2FUNCS): Add _eh_compat.

Mon Dec 22 17:52:37 1997  Marcus G. Daniels  <mgd@wijiji.santafe.edu>

	* objc/init.c (_objc_load_callback): Don't initialize.

Sun Dec 21 15:06:00 1997  Paul Eggert  <eggert@twinsun.com>

	* mips/xm-iris5.h (HAVE_INTTYPES_H): Force undefined.

Sun Dec 21 14:51:51 1997  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>

	* dwarf2out.c (add_bound_info, case COMPONENT_REF): New case.

Sun Dec 14 06:49:05 1997  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>

	* expr.c (expand_expr, case PLACEHOLDER_EXPR): Use placeholder_list 
	expression in preference to any other if correct type.

	* i386.h (INITIAL_ELIMINATION_OFFSET): Correctly test for PIC
	register used.

Sat Dec 13 06:11:32 1997  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>

	* frame.h (__register_frame_info_table): Fix typo in declaration.

Fri Dec 12 07:55:18 1997  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>

	* function.c (purge_addressof_1): For (mem (address (mem ...)),
	when collapsing, preserve mode of outer MEM.

	* frame.c (__register_frame_info): Renamed from __register_frame.
	(__register_frame_info_table, __deregister_frame_info): Similarly.
	* frame.h (__{,de}register_frame_info): Likewise.
	(__register_frame_info_table): New declaration.
	* crtstuff.c (__do_global_dtors{,_aux}): Rename __deregister_frame.
	(frame_dummy, __do_global_ctors): Likewise for __register_frame.
	* collect2.c (write_c_file_{stat,glob}): Rename __register_frame
	to __register_frame_info and similarly for __deregister_frame and
	__register_frame_table.

	* sched.c (remove_dependencies): Set RTX_INTEGRATED_P on dependency
	we delete.  Properly update prev for multiple consecutive deletions.
	(priority): Skip deleted dependence.

	* integrate.c (initialize_for_inline): In DECL_RTL of a PARM_DECL,
	look inside a (mem (addressof (mem ...))).

Fri Dec 12 05:49:58 1997  Paul Eggert  <eggert@twinsun.com>

	* collect2.c (write_c_file_glob):
	Allocate initial frame object in static storage and pass its address.

Thu Dec 11 18:01:31 1997  Philippe De Muyter  <phdm@macqel.be>

	* acconfig.h (NEED_DECLARATION_GETENV): Define slot added.

Thu Dec 11 17:54:23 1997  Paul Eggert  <eggert@twinsun.com>

	* crtstuff.c (__do_global_ctors): Fix typo in last change.

Wed Dec 10 18:38:28 1997  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
 
        * libgcc2.c (__bb_exit_func): Fix test of return value of fopen.

Wed Dec 10 07:07:37 1997  Bernd Schmidt <crux@starsky.Informatik.RWTH-Aachen.DE>
	* combine.c (simplify_rtx, case ABS): Don't get confused by a
	VOIDmode operand.

Tue Dec  9 17:44:14 1997  David Edelsohn  <edelsohn@mhpcc.edu>

	* rs6000.h (FUNCTION_ARG_PADDING): Define.
	* rs6000.c (function_arg_padding): New function.

Tue Dec  9 08:53:56 1997  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>

	* integrate.c (save_for_inline_copying): Make a new reg_parm_stack_loc.

Mon Dec  8 19:23:58 1997  Pat Rankin  <rankin@eql.caltech.edu>

	* toplev.c (get_run_time): [#if VMS] Cast arg in times call.

	* vax/xm-vms.h (HAVE_UNISTD_H): Define for DEC C.
	* make-cccp.com [CC]: Add /Prefix=All for DEC C.

Mon Dec  8 08:09:17 1997  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>

	* stmt.c (expand_decl_cleanup_no_eh): Properly return a value.

	* fold-const.c (fold_convert): Don't flag overflow when converting
	pointer to integer.

Sun Dec  7 09:42:05 1997  Pat Rankin  <rankin@eql.caltech.edu>

	* make-gcc.com (@make-l2): Pass along any command line arguments.
	* make-l2.com: Add latent support to compile cp/inc/* if `cc1plus'
	is specified [currently disabled].
	* make-cc1.com: When building with GNU C, use -O2.
	* make-cccp.com: Likewise.

Sun Dec  7 06:56:48 1997  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>

	* crtstuff.c (__do_global_ctors): Add missing arg to __register_frame.

	* collect2.c (write_c_file_stat): Fix error in last change;
	use __SIZE_TYPE__, not size_t.

Sun Dec  7 05:50:43 1997  Paul Eggert  <eggert@twinsun.com>

	* cccp.c (strings.h): Fix misspelling of `include' introduced
	in last change to this file.

Sat Dec  6 18:54:11 1997  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>

	* alpha/vms.h (CPP_PREDEFINES): Remove redundant setting
	of GCC version and unneeded setting of __VMS_VER.

Fri Dec  5 07:24:36 1997  Richard Stallman  <rms@gnu.org>

	* sparc/linux64.h (TARGET_VERSION): Write "GNU/Linux".
	* sparc/linux.h, sparc/linux-aout.h, rs6000/linux.h: Likewise.
	* m68k/linux.h, arm/linux.h, alpha/{linux,elf}.h: Likewise.
	* listing: Change linux to gnu-linux.

Fri Dec  5 06:23:22 1997  Paul Eggert  <eggert@twinsun.com>

	Alter C startup code so that it doesn't invoke malloc on Solaris.
	* frame.h (struct object): Decl moved here from frame.c.
	* frame.c (struct object): Move decl to frame.h.
	("frame.h"): Include after <stddef.h>, so that size_t is defined.
	(__register_frame, __register_frame_table, __deregister_frame):
	It's now the caller's responsibility to allocate storage for object.
	* crtstuff.c (frame_dummy), collect2.c (write_c_file_stat):
	Allocate initial frame object in static storage and pass its address.
	* crtstuff.c (<stddef.h>, "frame.h"): Include.
	* Makefile.in ($(T)crtbegin.o, $(T)crtend.o, stamp-crtS):
	Depend on defaults.h and frame.h.

	* Makefile.in (RTL_H, TREE_H): Add gansidecl.h.
	(DEMANGLE_H): New macro.  All dependencies on demangle.h
	changed to $(DEMANGLE_H).
	(RECOG_H): Likewise.
	(libgcc2.a, stmp-multilib): Add dependencies on frame.h, gansidecl.h.
	(collect.o): Add dependency on gansidecl.h.
	(gcc.o, choose-temp.o, pexecute.o, prefix.o): Likewise.
	(obstack.o, choose-temp.o, pexecute.o): Add dependency on $(CONFIG_H).

Fri Dec  5 06:20:06 1997  Dean Deaver <deaver@amt.tay1.dec.com>

	* arm.md (casesi_internal):  Add USE of label.

Fri Dec  5 05:59:44 1997  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>

	* configure.in (sys/times.h): Check for this instead of times.h.
	* cpplib.c, toplev.c: Properly test for and include sys/times.h.

Thu Dec  4 12:30:40 1997  J"orn Rennecke <amylaar@cygnus.co.uk>

	* sh.c (final_prescan_insn): Use local label prefix when emitting
	.uses pseudo-ops.

Thu Dec  4 07:00:48 1997  Richard Earnshaw <rearnsha@arm.com>

	* arm.c (arm_finalize_pic): Use an offset of 4 when adjusting the
	GOT address.

Thu Dec  4 06:58:32 1997  Dean Deaver  <deaver@amt.tay1.dec.com>

	* genoutput.c (scan_operands): Treat format of "u" like "e".

Thu Dec  4 06:28:33 1997  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>

	* msdos/top.sed, winnt/config-nt.sed: Change version to 2.8.0.

	* stmt.c (pushcase_range): Clean up handling of "infinite" values.

Wed Dec  3 09:03:35 1997  Bernd Schmidt  <crux@ohara.Informatik.RWTH-Aachen.DE>

	* i386.c (notice_update_cc): Remove bogus Pentium GCC code.

Wed Dec  3 08:46:32 1997  Paul Eggert  <eggert@twinsun.com>

	* arm.h (CPP_ARCH_DEFAULT_SPEC): Fix misspelling: `TARGET_CPU_DEFUALT'.
	(TARGET_SWITCHES): Fix misspelling: `no-apcs-rentrant'.
	* pa.c (override_options): Fix misspelling: `compatable'.
	* enquire.c (main): Fix misspelling in diagnostic: `mallocatable'.
	* gcov.c (function_summary): Fix misspelling in diagnostic: `funcion'.
	* objc/thr-decosf1.c (__objc_thread_id): Fix misspelling in code:
	`pthread_getuniqe_np'.

	* tahoe.c (extensible_operand): Renamed from extendable_operand.
	All callers changed.
	* dwarf2.h (enum dwarf_discrim_list): Renamed from dwarf_descrim_list.
	* dwarf2out.c: Fix misspellings in forward static function
	declarations: `add_AT_setion_offset', `add_sibling_atttributes'.
	* dwarfout.c: Fix misspellings in forward static function
	declarations: `langauge_attribute', `geneate_new_sfname_entry'.
	* stmt.c, tree.h (start_cleanup_deferral):
	Renamed from start_cleanup_deferal.
	(end_cleanup_deferral): Renamed from end_cleanup_deferal.
	* toplev.c (rest_of_compilation): Rename local var from
	inlineable to inlinable.

Wed Dec  3 06:17:03 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* stmt.c (expand_decl_cleanup): Update thisblock after eh_region_start.

Wed Dec  3 06:06:38 1997  Jim Wilson  <wilson@cygnus.com>

	* dwarf2out.c (gen_type_die, case POINTER_TYPE): See TREE_ASM_WRITTEN
	before the recursive call.

Wed Dec  3 05:57:29 1997  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>

	* configure.in (AC_HEADER_{STDC,TIME}): Add calls.
	(AC_CHECK_HEADERS): Add fcntl.h times.h, sys/times.h,
	sys/resource.h, and sys/param.h.
	(getenv): Check if need declaration.
	* cccp.c: Remove obsolete ways of including headers and use autoconf
	symbols instead.
	Include gansidecl.h; remove things defined there.
	See if getenv needs to be declared.
	* cpplib.c: Likewise.
	* cexp.y: Use autoconf symbols to select what include files are needed.
	* genattrtab.c, toplev.c: Likewise.

Tue Dec  2 21:44:25 1997  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>

	* reload1.c (reload): Make copy of MEM before setting
	req_equiv_mem if the address is a PLUS.

Tue Dec  2 07:03:47 1997  Pat Rankin  <rankin@eql.caltech.edu>

	* vax/xm-vms.h (STDC_HEADERS, HAVE_STDLIB, HAVE_STRING): Define.
	(mesg_implicit_function_declaration): New macro.

	* make-l2.com: Compile libgcc2.c with `-fexceptions' specified.

Mon Dec  1 17:44:59 1997  Jeffrey A Law  (law@cygnus.com)

	* dwarf2out.c (output_call_frame_info): Use ASM_OUTPUT_ASCII to
	output ASCII by default; only use ASM_OUTPUT_DWARF_STRING if
	flag_debug_asm is on.
	(output_die, output_pubnames, output_line_info): Likewise.

Mon Dec  1 17:15:30 1997  Philip Blundell  <pb@nexus.co.uk>

	* arm/linux.h (SUBTARGET_CPU_DEFAULT): Define  instead
	of TARGET_CPU_DEFAULT.

Mon Dec  1 16:51:23 1997  J.J. van der Heijden <J.J.vanderHeijden@student.utwente.nl>

	* i386/mingw32.h (MATH_LIBRARY): Set to "-lcrtdll".

Mon Dec  1 16:46:57 1997  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>

	* c-aux-info.c: Add prototypes for static functions.
	* c-lex.c, emit-rtl.c, rtl.c, xcoffout.c: Likewise.

	* i386.h (TARGET_SWITCHES): Add entries for "windows" and "dll".

Mon Dec  1 16:42:20 1997  Jim Wilson  <wilson@cygnus.com>

	* mips.md (fix_trunc{dfsi,sfsi,dfsi}2): Add '*' in operand 3.

Sun Nov 30 20:25:59 1997  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>

	* expr.c (get_inner_reference): For ARRAY_REF, if need
	WITH_RECORD_EXPR, make it with the ARRAY_REF as exp.

	* expr.c (store_constructor): Use TARGET, not EXP, for
	WITH_RECORD_EXPR when offset has a placeholder.

Sun Nov 30 11:19:00 1997  J.J. van der Heijden <J.J.vanderHeijden@student.utwente.nl>

        * objc/Make-lang.in (libobjc.dll): Rename -dll flag to -mdll.

Sun Nov 30 08:42:29 1997  Bruno Haible  <bruno@linuix.mathematik.uni-karlsruhe.de>

	* stmt.c (expand_end_bindings): Cleanups and incoming gotos are
	not incompatible.

Sun Nov 30 05:45:06 1997  Michael P. Hayes  <michaelh@ongaonga.chch.cri.nz>

	* jump.c (jump_optimize): Use find_insert_position in two more places.

Sat Nov 29 13:47:40 1997  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>

	* alpha/vms.h (HAVE_STRERROR, HAVE_{LIMITS,STDDEF,TIME}_H): Define. 

Sat Nov 29 08:29:47 1997  J.J.van der Heijden <J.J.vanderHeijden@student.utwente.nl>

	* configure.in: Add check for kill.
	* gcc.c: Define kill as raise if not HAVE_KILL.

Sat Nov 29 06:18:08 1997  Michael P. Hayes  <michaelh@ongaonga.chch.cri.nz>

	* jump.c (find_insert_position): New function.
	(jump_optimize): Use it when making new copy of insn after test.

Sat Nov 29 05:54:57 1997  Douglas Rupp  <rupp@gnat.com>

	* alpha/vms.h (BIGGEST_ALIGNMENT, ENCODE_SECTION_INFO): No longer
	override.

Sat Nov 29 05:43:37 1997  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>

	* getpwd.c (getpwd, [VMS]): Only add extra arg if VMS.

	* alpha/xm-vms.h (HAVE_VPRINTF, HAVE_PUTENV): Define.

	* cccp.c (index, rindex): Add conditional defs to strchr and strrchr.s
	* cpplib.c: Likewise.
	* gcov.c: Include gansidecl.h.

Fri Nov 28 21:17:51 1997  H.J. Lu  (hjl@gnu.ai.mit.edu)

	* objc/objc-act.c: Include "output.h".

	* objc/Make-lang.in (objc-parse.o, objc-act.o): Also depend on
	$(srcdir)/output.h.

	* objc/Object.m (+conformsTo:): Surround assignment with parentheses.

	* objc/archive.c, objc/class.c, objc/encoding.c: Finish prototyping.
	* objc/init.c, objc/objc-act.c, objc/objc-api.h: Likewise.
	* objc/runtime.h, objc/sendmsg.c: Likewise.

Fri Nov 28 19:15:53 1997  Mark Kettenis <kettenis@phys.uva.nl>

	* objc/thr-posix.c (__objc_mutex_allocate): Allocate
	mutex type instead of assuming it fits in a void * type.
	(__objc_mutex_deallocate): Free mutex type.
	(__objc_mutex_lock): Pass mutex type instead of pointer to it.
	(__objc_mutex_{try,un}lock): Likewise.
	(__objc_condition_allocate): Allocate condition type instead
	of assuming it fits in a void * type.
	(__objc_condition_deallocate): Free condition type.
	(__objc_condition_wait): Pass condition type instead of pointer to it.
	(__objc_condition_{broadcast,signal}): Likewise.

Fri Nov 28 17:07:25 1997  David Edelsohn  <edelsohn@mhpcc.edu>

	* rs6000.c (function_arg_partial_nregs): Undo 11/26 change.

Fri Nov 28 12:34:03 1997  Scott Christley  <scottc@net-community.com>

	* objc/Make-lang.in (runtime-info.h): Add comment in file.

	* objc/selector.c: Replace all occurences of sarray_get
	with sarray_get_safe.
	* objc/sendmsg.c: Likewise.

	* protoize.c (include_defaults): Add component element as in cccp.c.
	* nextstep.h (INCLUDE_DEFAULTS): Add component element.
	(ASM_COMMENT_START): Correct assembly comment string.
	* objc/Make-lang.in (objc/{NXConstStr,Object,Protocol,linking):
	Compile with GNU runtime.

Fri Nov 28 12:27:50 1997  Ovidiu Predescu <ovidiu@net-community.com>

	Generate platform information required by ObjC runtime.
	* toplev.c (lang_options): New ObjC specific compiler flag.
	* objc/Make-lang.in: Add target to generate runtime-info.h file.
	* objc/objc-act.c (print_struct_values): New variable.
	(generate_struct_by_value_array): New function.
	(lang_init): Call generate_struct_by_value_array if requested.
	(lang_decode_option): Check for new compiler flag.s
	* objc/sendmsg.c (__objc_get_forward_imp): Check size of type
	for determining proper forwarding function.

Fri Nov 28 05:58:30 1997  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>

	* regclass.c (record_address_regs): Use REG_OK_FOR_{INDEX,BASE},
	not the REGNO versions.

Thu Nov 27 16:28:04 1997  Scott Snyder  <snyder@d0sgif.fnal.gov>

	* dwarf2out.c (outout_call_frame_info): Ensure info has proper
	alignment.

	* libgcc2.c (__throw): Initialize HANDLER.

Thu Nov 27 16:23:25 1997  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* tree.h, rtl.h: See if need declarations for free.
	* tree.c, bc-optab.c: Get the declaration of free from stdlib.h.

Thu Nov 27 07:21:54 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* except.h: Add outer_context_label_stack.
	* except.c: Likewise.
	(expand_start_all_catch): Push the outer_context for the try block
 	onto outer_context_label_stack.
	(expand_end_all_catch): Use it and pop it.

	* except.c (expand_start_all_catch): One more do_pending_stack_adjust.

	* expr.c (preexpand_calls): Don't look past a TRY_CATCH_EXPR.

Thu Nov 27 07:15:10 1997  Michael Meissner  <meissner@cygnus.com>

	* rs6000.c (SMALL_DATA_REG): Register to use for small data relocs.
	(print_operand{,_address}): Use SMALL_DATA_REG for register involved in
	small data relocations.

	* rs6000/linux.h (LINK_SPEC): Pass -dynamic-linker /lib/ld.so.1 if
	-dynamic linker is not used.

	* rs6000.md (call insns): For local calls, use @local suffix under
	System V; don't use @plt under Solaris.

Wed Nov 26 15:12:32 1997  Jeffrey A Law  (law@cygnus.com)

	* Makefile.in (LIBGCC2_CFLAGS): Add -fexceptions.

	* toplev.c (flag_exceptions): Default value is 2.
	(compile_file): If flag_exceptions still has the value 2, then
	set it to 0.

Wed Nov 26 14:58:42 1997  Michael Meissner  <meissner@cygnus.com>

	* rs6000.c (output_function_profiler): Put label address in r0, and
	store LR in 4(sp) for System V/eabi.

	* rs6000.h (ASM_OUTPUT_REG_{PUSH,POP}): Keep stack aligned to 16
	byte boundary, and maintain stack backchain.

	(Originally from Geoffrey Keating)
	* rs6000.c (function_arg): Excess floating point arguments don't
	go into GPR registers after exhausting FP registers under the
	System V.4 ABI.
	(function_arg_partial_nregs): Likewise.

	* rs6000.md (call insns): If -fPIC or -mrelocatable, add @plt
	suffix to calls.

Wed Nov 26 14:09:01 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* dwarfout.c (output_type): If finalizing, write out nested types 
	of types we've already written.

	* toplev.c (main): Complain about -gdwarfn.

Wed Nov 26 12:37:56 1997  J.J. van der Heijden <J.J.vanderHeijden@student.utwente.nl>

	* mingw32.h (PATH_SEPARATOR): Moved to xm-mingw32.h
	* xm-mingw32.h (PATH_SEPARATOR): Moved here from mingw32.h.

	* getpwd.c (getpwd): Use VMS implementation of _WIN32 unless cygwin32.

Wed Nov 26 12:26:44 1997  John Hassey  <hassey@dg-rtp.dg.com>

	* m88k/dgux.h (ASM_CPU_SPEC) : No whitespace allowed.

	* m88k.h (SUPPORTS_ONE_ONLY) : Must be svr4.

	* i386/dgux.h (ASM_OUTPUT_ALIGN): Deleted.

	* i386/dgux.c (output_file_start) : Changed ix86_isa_string
	to ix86_arch_string.

	* cplus-dem.c (fancy_abort): Added.

Wed Nov 26 06:07:50 1997  Richard Earnshaw <rearnsha@arm.com>

	* arm/coff.h (TARGET_DEFAULT): Add ARM_FLAG_APCS_32 to defaults.

	* configure.in (arm*-*-*): Recognize --with-cpu for ARM processors.

Wed Nov 26 05:05:36 1997  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>

	* libgcc2.c (inhibit_libc): Define #ifdef CROSS_COMPILE.

	* mips/xm-iris6.h (malloc, realloc, calloc): No longer declare.
	(USG): Define here.
	(xm-iris5.h): No longer include; just include xm-mips.h.

	* mips-tfile.c (parse_def): Properly recognize bitfield and
	count array dimensions.

	* protoize.c: Remove declarations of void, exit, and free.

	* i386/mingw32.h (LINK_SPEC, STARTFILE_SPEC): Change -dll to -mdll.

	* configure.in: Check for sys/file.h.
	* gcc.c (sys/file.h): Include if HAVE_SYS_FILE_H.

	* configure.in: Only give error on bad --with-cpu value for target.

Sat Nov 22 19:21:55 1997  Philippe De Muyter  <phdm@macqel.be>

	* dwarf2out.c (CIE_LENGTH_LABEL, FDE_LENGTH_LABEL): New macros.
	(ASM_OUTPUT_DWARF_VALUE4): New macro.
	(ASM_OUTPUT_DEFINE_LABEL_DIFFERENCE_SYMBOL): Define if SET_ASM_OP is
	defined.
	(output_call_frame_info): Don't output forward label differences
	if ASM_OUTPUT_DEFINE_LABEL_DIFFERENCE_SYMBOL is defined.
	Substitute instead simple label and define this label later to be
	difference of desired labels after they have been defined.
	* m68k/mot3300.h (SET_ASM_OP): Define when not using gas.

	* gcc.c (process_command): Don't take address of function fatal when
	calling lang_specific_driver.

Sat Nov 22 17:08:03 1997  J. Kean Johnston  <jkj@sco.com>

	* i386/sco5.h (SELECT_RTX_SECTION): Redefine to work with -fpic.
	(LIBGCC_SPEC, LIB_SPEC): Link with correct libgcc.a.
	(HAVE_ATEXIT): Define.

Sat Nov 22 12:20:22 1997  Richard Earnshaw <rearnsha@arm.com>

	* arm.md (movsfcc{,_hard}_insn): Specify mode for all alternatives.

Sat Nov 22 06:56:16 1997  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>

	* function.c (instantiate_decl): Only ignore ADDRESSOF if arg is REG.

	* configure.in: Check for functions before checking which need decls.
	(bcopy, bzero, bcmp, index, rindex): Add checks.
	(vax-*-sysv*): Fix typo in setting of xm_file.
	* aclocal.m4: Add conditional definitions of index and rindex.
	* gansidecl.h (bcopy, bzero, bcmp, index, rindex): If don't
	have one of these, define macro to use ANSI form.
	* pa/xm-pahpux.h (bcopy, bzero, bcmp, rindex, index): No longer define.
	* mips/xm-sysv.h, xm-m88k.h, m68k/xm-plexus.h: Likewise.
	* m68k/xm-mot3300.h, m68k/xm-m68kv.h, m68k/xm-hp320.h: Likewise.
	* winnt/xm-winnt.h, vax/xm-vms.h, m68k/xm-3b1.h: Likewise.
	* i386/xm-os2.h, i386/xm-mingw32.h, alpha/xm-vms.h: Likewise.
	* xm-svr4.h, xm-svr3.h: Likewise.
	* clipper/xm-clix.h: Likewise.
 	(TARGET_MEM_FUNCTIONS): Define here.
	* xm-linux.h (bcmp, bcopy, bzero, index, rindex): No longer undefine.
	* xm-convex.h (bcopy, bzero): No longer define.
	* vax/xm-vaxv.h, sparc/xm-pbd.h, mips/xm-iris{3,4,5}.h: Likewise.
	* m68k/xm-crds.h, m68k/xm-altos3068.h, i386/xm-sun.h: Likewise.
	* i386/xm-osf.h, i386/xm-aix.h, xm-i370.h, ns32k/xm-genix.h: Likewise.

Sat Nov 22 06:46:26 1997  Paul Eggert  <eggert@twinsun.com>

	* c-typeck.c, collect2.c, cpplib.c, dwarfout.c, gcov.c, protoize.c:
	Don't include <strings.h> unless there's no <string.h>.

Fri Nov 21 06:46:50 1997  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>

	* configure.in (i[3456]86-*-freebsd{,elf}*): Delete i386/xm-freebsd.h.
	* xm-freebsd.h, i386/xm-freebsd.h: Deleted.

	* i386/xm-cygwin32.h (HAVE_RUSAGE, HAVE_FILE_H): Deleted.
	* i386/xm-mingw32.h, rs6000/xm-cygwin32.h: Likewise.

	* xm-std32.h: New file, so far unused.

Fri Nov 21 05:50:54 1997  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* m68k.c (legitimize_pic_address): Make sure pic register marked used.

	* dwarf2out.c (output_call_frame_info): Call app_enable and
	app_disable if flag_debug_asm, not if flag_verbose_asm.

Thu Nov 20 16:37:36 1997  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>

	* expr.c (expand_builtin_apply): Fix typo in last change.

	* expr.c (expand_assignment): If assigning to readonly field,
	mark rtx as unchanging.

	* configure.in: Add checks for functions putenv, popen, and vprintf.
	(i[3456]86-*-netbsd*): No longer need i386/xm-netbsd.h.
	(i860-alliant-*): No longer need i860/xm-fx2800.h.
	(m68k-ncr-sysv*): Use xm-svr3.h instead of m68k/xm-tower.h.
	(m68k-sun-sunos*): No longer need m68k/xm-sun3.h.
	(m68k-*-netbsd*): No longer need m68k/xm-netbsd.h.
	(mips-dec-netbsd*): No longer need mips/xm-netbsd.h.
	(ns32k-pc532-netbsd*): No longer need ns32k/xm-netbsd.h.
	(sparc-*-netbsd*): No longer need sparc/xm-netbsd.h.
	(vax-*-netbsd*): No longer need config/xm-netbsd.h.
	* arm/xm-netbsd.h: No longer include xm-netbsd.h.
	* xm-linux.h (HAVE_VPRINTF, HAVE_POPEN, HAVE_PUTENV): Deleted.
	* xm-mips.h (HAVE_VPRINTF, HAVE_PUTENV): Deleted.
	* i386/xm-osf.h, xm-arm.h, xm-alpha.h: Likewise.
	* xm-sparc.h (HAVE_POPEN): Deleted.
	* xm-sh.h (HAVE_VPRINTF): Deleted.
	* mips/xm-iris4.h, mips/xm-iris5.h, xm-m88k.h: Likewise.
	* m68k/xm-crds.h, m68k/xm-atari.h, m68k/xm-amix.h: Likewise.
	* xm-svr3.h, xm-svr4.h, i386/xm-mingw32.h: Likewise.
	* i386/xm-os2.h (HAVE_PUTENV): Deleted.
	* i386/xm-dos.h, i386/xm-aix.h: Likewise.
	* arm/xm-netbsd.h (HAVE_VPRINTF, HAVE_STRERROR): No longer
 	need undefine.
	* xm-netbsd.h, i386/xm-netbsd.h, m68k/xm-netbsd.h: Deleted.
	* mips/xm-netbsd.h, ns32k/xm-netbsd.h, sparc/xm-netbsd.h: Likewise.
	* i860/xm-fx2800.h, m68k/xm-sun3.h, m68k/xm-tower.h: Likewise.

Thu Nov 20 16:04:24 1997  Richard Earnshaw <rearnsha@arm.com>

	* explow.c (plus_constant_wide, case MEM): If about to call 
	force_const_mem, generate the rtl in a saveable obstack.

	* arm.md (movhi): Pass the full MEM to storeinthi, storehi and
	storehi_bigend.
	(storeinthi, storehi, storehi_bigend): Be more conservative about
	when not to force a PLUS or MINUS into a REG.  Use change_address
	to create new MEMs.

Wed Nov 19 15:16:04 1997  Ulrich Drepper  <drepper@cygnus.com>

	* c-common.c (print_char_table): Add a and A to float formats.
	(scan_char_table): Likewise.
	(check_format_info): Recognize `a' as allocate flag only if used
	in correct context.

Wed Nov 19 12:56:54 1997  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* configure.in: Fix check for <inttypes.h>.

Tue Nov 18 19:27:01 1997  J"orn Rennecke <amylaar@cygnus.co.uk>

	* sh.md (attribute "type"): Add nil.
	(movsi_ie): y/y alternative is type nil.
	(movsf_ie): Replace ry/yr/X alternative by r/y/X , y/r/X and y/y/X.
	(movsf_ie+1): Delete.

Tue Nov 18 18:38:41 1997  Paul Eggert  <eggert@twinsun.com>

	* cccp.c (warn_undef): Now static.
	(eval_if_expression): Don't warn about undefined preprocessor symbols
	in system headers.
	* cexp.y (parse_c_expression):
	Now takes new arg specifying whether to warn
	about undefined preprocessor symbols.
	(warn_undef): Now local and static; independent of warn_undef in cccp.c
	(yylex): `register' -> `register int', needed for C9X.

	The following changes are only if TEST_EXP_READER is defined:
	(expression_signedp): New var.
	(start): Set expression_signedp to signedness of expression.
	(print_unsigned_host_wide_int): New function.
	(main): Use it to print value of expression, instead of hoping that
	`long' is long enough.  Print "u" after unsigned values.

Tue Nov 18 18:33:30 1997  Jim Wilson  <wilson@cygnus.com>

	* mips.c (save_restore_insns): If gp_offset or fp_offset are
	large_int, emit two insns instead of one splitable insn.
	* dwarf2out.c (dwarf2out_frame_debug): When set cfa_store_offset
	from cfa_temp_value, use cfa_offset.  Add assert checking that
	cfa_reg is SP.

Tue Nov 18 09:11:58 1997  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>

	* fold-const.c (div_and_round_double): Return overflow for
	divide-by-zero instead of aborting.

	* tree.c (substitute_in_expr, case TREE_LIST): Fix two typos.

Tue Nov 18 05:03:52 1997  Jeffrey A Law  <law@cygnus.com>

	* arm.c (output_move_double): Allocate 3 entries in otherops array.

Tue Nov 18 02:41:01 1997  Paul Eggert  <eggert@twinsun.com>

	* cccp.c (quote_string_for_make): New function.
        (deps_output): Use it to fix bug with file name quoting in -M output.

Mon Nov 17 13:28:33 1997  Philip Blundell  <Philip.Blundell@pobox.com>

	* arm/lib1funcs.asm (__div0): Provide GNU/Linux implementation.
	* arm/t-linux (LIB1ASMFUNCS): Use it.

Mon Nov 17 09:13:59 1997  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* function.c (purge_addressof_1): Make copy when substituting argument
	of ADDRESSOF.
	(fixup_var_refs_1): Likewise.

	* m68k.c: Include tree.h.

Mon Nov 17 09:01:05 1997  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>

	* getpwd.c (getpwd, [VMS]): Add extra arg of 0 to getcwd call.

	* alpha/vms.h ({OPTIMIZATION,OVERRIDE}_OPTIONS): Delete, for now.
	* alpha/xm-vms.h (DIR_SEPARATOR, PATH_SEPARATOR): Delete.

Mon Nov 17 08:52:45 1997  Richard Earnshaw  <rearnsha@arm.com>

	* function.c (fixup_stack_1): Also fix-up refs via ARG_POINTER_REGNUM.

	* configure.in (arm-*-netbsd*): Doesn't need collect2.

Mon Nov 17 08:50:01 1997  Stephen L Moshier  <moshier@world.std.com>

	* i386/isc.h (DWARF2_UNWIND_INFO): Define as 0.

Mon Nov 17 08:42:28 1997  Michael P. Hayes  <michaelh@ongaonga.chch.cri.nz>

	* flow.c (propagate_block): Look for pre-inc/dec within PARALLEL.

Mon Nov 17 03:14:46 1997  Paul Eggert  <eggert@twinsun.com>

	* cpplib.c (file_size_and_mode): Remove.
	(finclude): Don't assume long and off_t are same size or that
	mode_t fits in int.
	* cccp.c: (main, finclude, check_precompiled): Don't assume size_t
	and off_t are same size.
	* gcov.c (read_files): Don't assume off_t and unsigned are same size.

Sun Nov 16 18:56:40 1997  Scott Christley  <scottc@net-community.com>

	* objc/objc-act.c (objc_demangle): New function.
	(objc_printable_name): New function.
	(init_objc): Change default function.

	* expr.c (expand_builtin_apply): Prefer nonlocal over block.

Sun Nov 16 18:10:13 1997  Fila Kolodny  <fila@ibi.com>

	* i370.c (i370_function_prolog): New function from i370.h.
	* i370.h (FUNCTION_PROLOG): Just call i370_function_prolog.

Sun Nov 16 08:40:35 1997  Bruno Haible  <bruno@linuix.mathematik.uni-karlsruhe.de>

	* calls.c (expand_call, store_one_arg): Don't pass QImode arguments
	to emit_library_call. 
	* expr.c (emit_push_insn, expand_assignment, store_expr): Likewise.
	(expand_expr, expand_builtin): Likewise.
	* function.c (put_var_into_stack, assign_parms): Likewise.
	* alpha.c (alpha_builtin_saveregs): Likewise.
	* clipper.c (clipper_builtin_saveregs): Likewise.
	* m88k.c (m88k_builtin_saveregs): Likewise.
	* pa.c (hppa_builtin_saveregs): Likewise.
	* sparc.c (sparc_builtin_saveregs): Likewise.

Sun Nov 16 07:39:08 1997  Paul Eggert  <eggert@twinsun.com>

	* real.h (REAL_VALUES_IDENTICAL): New macro.
	* expr.c (is_zeros_p): Don't consider -0.0 to be all zeros.
	* fold-const.c (operand_equal_p): Don't consider -0.0 identical to 0.0.
	* tree.c (simple_cst_equal): Likewise.
	* varasm.c (immed_real_const_1): Use new REAL_VALUES_IDENTICAL macro.

Sun Nov 16 07:29:12 1997  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>

	* acconfig.h (NEED_DECLARATION_{,R}INDEX): New cases.
	* configure.in: See if need declarations for index and rindex.
	* c-typeck.c, collect2.c, cpplib.c, dwarfout.c, gcov.c, protoize.c:
	Include stdlib.h, string.h, and strings.h, if they exist.
	Only declare index and rindex if needed.
	* collect2.c: Only declare free if needed.

	* regclass.c (record_address_regs): Refine choice of index and base
	when have sum of two regs, one of which is a hard reg.

Sun Nov 16 07:07:45 1997  Robert Lipe (robertl@dgii.com)

	* i386/sco5.h (ASM_OUTPUT_ALIGNED_BSS): Define as in sysv4 and linux
	(HAVE_ATEXIT): No longer define.  This confused ELF destructors.
	(DBX_DEBUGGING_INFO): Define.

Sat Nov 15 09:55:11 1997  Richard Earnshaw (rearnsha@arm.com)

	* arm.h (GO_IF_LEGITIMATE_ADDRESS): Don't accept MINUS (until reload
	knows what to do with it).

Thu Nov 13 11:07:41 1997  Michael Meissner  <meissner@cygnus.com>

	* rs6000.c (num_insns_constant): Use REAL_VALUE_FROM_CONST_DOUBLE to
	pick apart floating point values, instead of using CONST_DOUBLE_LOW
	and CONST_DOUBLE_HIGH.

	* rs6000.md (define_splits for DF constants): Use the appropriate
	REAL_VALUE_* interface to pick apart DF floating point constants in
	a machine independent fashion.

Thu Nov 13 07:30:53 1997  Richard Earnshaw (rearnsha@arm.com)

	* arm/netbsd.h (LINK_SPEC): Redefine -- pass -X.

	* arm.md (movsicc_insn): Add extra reload alternatives for better 
	register tying.
	(movsfcc_hard_insn, movsfcc_soft_insn, movdfcc_insn): Likewise.

Mon Nov 10 19:32:14 1997  Doug Evans  <dje@cygnus.com>

	* sparc.md (mov[sdt]f_const_insn): Fix condition to match what
	instruction can handle.

Mon Nov 10 03:02:19 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* stmt.c (expand_decl_cleanup_no_eh): New fn.

	* except.c (expand_leftover_cleanups): do_pending_stack_adjust.

Sun Nov  9 14:34:47 1997  David Edelsohn  <edelsohn@mhpcc.edu>

	* rs6000.md (lshrdi3_power): Delete '&' from first alternative and
	swap instruction order.
	
Sun Nov  9 09:51:08 1997  Michael P. Hayes  <michaelh@ongaonga.chch.cri.nz>

	* machmode.def (QCmode, HCmode): New modes.

Sun Nov  9 09:24:21 1997  J"orn Rennecke <amylaar@cygnus.co.uk>

	* combine.c (sets_function_arg_p): New function.
	(combinable_i3pat): Check if combining with any but the first
	argument register setting insn for a function call.

	* a29k.h (ELIGIBLE_FOR_EPILOGUE_DELAY): Avoid sheduling load from
	stack slot.

Sun Nov  9 09:17:53 1997  Richard Earnshaw (rearnsha@arm.com)

	* loop.c (strength_reduce): If initial value of BIV is equivalent to
	a constant, record that as initial value.
	(check_dbra_loop): Don't reverse loop if initial value isn't CONST_INT.

Sun Nov  9 09:12:41 1997  Tristan Gingold  <gingold@haendel.enst.fr>

	* expr.c (emit_push_insn): Avoid infinite recursion
	when -fcheck-memory-usage.
  
Sun Nov  9 08:03:42 1997  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>

	* cse.c (simplify_binary_operation): Fix error in last change.

Sun Nov  9 07:56:31 1997  Pat Rankin  <rankin@eql.caltech.edu>

	* vmsconfig.com [version.opt]: Parse version string more robustly.
	[@variable@]: Discard configure tokens when using Makefile.in.
	[libgcc2-cxx.list]: Generate this new file for CXX_LIB2FUNCS.
	[cp/input.c]: Suppress it as workaround to avoid linker warning.
	[objc-parse.y]: Now lives in the objc subdirectory.
	* make-cc1.com [objc-parse.{c,y}]: Ditto.
	* make-cccp.com [prefix.c]: Compile additional source file.

	* cccp.c (VMS_freopen, VMS_fopen, VMS_open, VMS_fstat): Call
	corresponding library routine specified via its ordinary name
	rather than with a decc$ prefix.  (Reverses Oct 19 change.)

	* cccp.c, cexp.y [HOST_WIDE_INT]: Manually splice long lines
	of avoid backslash+newline continuation on #if directives.

Sun Nov  9 01:54:54 1997  Jeffrey A Law  (law@cygnus.com)

	* local-alloc.c (block_alloc): Don't lose if two SCRATCH expressions
	are shared.

Sat Nov  8 23:01:37 1997  Michael P. Hayes  <michaelh@ongaonga.chch.cri.nz>

	* cse.c (simplify_binary_operation): Don't simplify divide by zero
	for targets that don't support a representation of INFINITY.

Sat Nov  8 22:37:29 1997  Richard Earnshaw  <rearnsha@arm.com>

	* Makefile.in (cse.o): Depend on expr.h.
	* cse.c: Include expr.h.
	(fold_rtx, case MEM): For ADDRESSOF, create new MEM.

Sat Nov  8 19:27:56 1997  J"orn Rennecke <amylaar@cygnus.co.uk>

	* expr.c (expand_increment): When enqueing a postincrement for a MEM,
	use copy_to_reg if address is not a general_operand.

Sat Nov  8 18:39:56 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* libgcc2.c (L_eh): Define __eh_pc here.
	Replace __eh_type with generic pointer __eh_info.

Sat Nov  8 07:03:47 1997  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>

	* alpha.h (SECONDARY_OUTPUT_RELOAD_CLASS): If FLOAT_REGS,
	need secondary reload for QImode and HImode even if BWX.

	* expmed.c (store_split_bit_field): Force ADDRESSOF into register.

	* cse.c (fold_rtx, case ADDRESSOF): New case (that does nothing).

	* function.c (fixup_var_refs_1, case ADDRESSSOF): Check that
	new value is valid for insn.

	* stor-layout.c (get_best_mode): Refine test for field within
	unit to work properly for negative positions.

	* print-rtl.c (print_inline_rtx): Save and restore sawclose and indent.

	* reload.c (find_replacement): If PLUS, MINUS, or MULT, see if
	either arg contains a replacement.

Fri Nov  7 10:22:24 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* frame.c (add_fdes, count_fdes): Go back to checking pc_begin for
 	linked once FDEs.

Fri Nov  7 06:50:57 1997  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>

	* alpha.h (FUNCTION_VALUE): Take into account promotion of pointers.

	* unroll.c (back_branch_in_range_p): Refine check for INSN at loop end.

Wed Nov  5 18:17:50 1997  Paul Eggert  <eggert@twinsun.com>

	* fixinc.svr4: Replace `__STDC__ - 0 == 1'
	with `defined (__STRICT_ANSI__)'.

Tue Nov  4 18:32:44 1997  Jim Wilson  <wilson@cygnus.com>

	* mips.md (insv, extzv, extv): Add change_address call.
	(movsi_ulw, movsi_usw): Change QImode to BLKmode in pattern.
	* mips.c (mips_expand_epilogue): Emit blockage insn before call to
	save_restore_insns if no FP and GP will be restored.

	* acconfig.h (HAVE_INTTYPES_H): Undef.
	* configure.in (inttypes.h): Check for conflicts between sys/types.h
	and inttypes.h, and verify that intmax_t is defined.
	* mips/x-iris (CC, OPT, OLDCC): Comment out.
	* mips/x-iris3: Likewise.

Tue Nov  4 17:28:31 1997  Doug Evans  <dje@cygnus.com>

	* c-lex.c (MULTIBYTE_CHARS): #undef if cross compiling.
	(yylex): Record wide strings using target endianness, not host.

Tue Nov  4 16:18:19 1997  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>

	* Makefile.in (distdir-start): Add dependency on $(srcdir)/config.in.

Tue Nov  4 06:14:30 1997  Paul Eggert  <eggert@twinsun.com>

	* c-lex.c (yylex): Don't warn about constants like
	9223372036854775807 and 18446744073709551615U on an L32LL64 host
	unless pedantic.

Mon Nov  3 18:42:44 1997  Jim Wilson  <wilson@cygnus.com>

	* i386.c (load_pic_register): Call prologue_get_pc_and_set_got.
	* i386.md (prologue_{set_got,get_pc}): Add UNSPEC_VOLATILE to pattern.
	(prologue_get_pc_and_set_got): New pattern.

Mon Nov  3 13:42:21 1997  Paul Eggert  <eggert@twinsun.com>

	* cccp.c, cpplib.c (compare_defs): Don't complain about arg name
	respellings unless pedantic.
	* cpplib.c (compare_defs): Accept pfile as new arg.
	All callers changed.

Fri Oct 31 07:10:09 1997  Jeffrey A Law  (law@cygnus.com)

	* global.c (global_alloc): Free the conflict matrix after
	reload has finished.

Thu Oct 30 17:30:42 1997  Doug Evans  <dje@cygnus.com>

	* configure.in (sparc-*-elf*): Use sparc/elf.h, sparc/t-elf.
	Set extra_parts.
	(sparc*-*-*): Recognize --with-cpu=v9.
	* sparc/elf.h: New file.
	* sparc/t-elf: New file.

Thu Oct 30 16:36:17 1997  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>

	* stmt.c (expand_asm_operand): If error in matching constraint,
	don't emit asm.

Thu Oct 30 12:21:06 1997  J"orn Rennecke <amylaar@cygnus.co.uk>

	* va-sh.h (__va_arg_sh1): Define.
	(va_arg): Use it.
	SH3E doesn't use any integer registers for subsequent arguments
	once a non-float value was passed in the stack.
	* sh.c (machine_dependent_reorg): If optimizing, put explicit
	alignment in front label for ADDR_DIFF_VEC.
	* sh.h (PASS_IN_REG_P): Fix SH3E case.
	(ADJUST_INSN_LENGTH): If not optimizing, add two extra bytes length.

Tue Oct 28 21:09:25 1997  Jim Wilson  <wilson@cygnus.com>

	* m68k.md (btst patterns): Add 5200 support.

1997-10-28  Brendan Kehoe  <brendan@cygnus.com>

	* global.c (global_alloc): Use xmalloc instead of alloca for
	CONFLICTS, since max_allocno * allocno_row_words alone can be more
	than 2.5Mb sometimes.

Tue Oct 28 15:06:44 1997  J"orn Rennecke <amylaar@cygnus.co.uk>

	* sh/elf.h (PREFERRED_DEBUGGING_TYPE): Undefine before including
	svr4.h.

Tue Oct 28 10:19:01 1997  Jason Merrill  <jason@yorick.cygnus.com>

	From Brendan:
	* dwarf2out.c (output_call_frame_info): Use l1 instead of ".".

Mon Oct 27 16:01:14 1997  Jeffrey A Law  (law@cygnus.com)

	* mn10300.h (GO_IF_LEGITIMATE_ADDRESS): Disable reg+reg.

Mon Oct 27 16:11:52 1997  J"orn Rennecke <amylaar@cygnus.co.uk>

	* sh.c (machine_dependent_reorg): When -flag_delayed_branches,
	put an use_sfunc_addr before each sfunc.
	* sh.md (use_sfunc_addr, dummy_jump): New insns.
	(casesi): For TARGET_SH2, emit a dummy_jump after LAB.

Mon Oct 27 11:49:43 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* dwarf2.h: Remove dwarf2out prototypes.
	* tree.h: And put them here.
	* m68k.c, i386.c: Don't include dwarf2.h.

Mon Oct 27 00:02:13 1997  Paul Eggert  <eggert@twinsun.com>

	Remap include files with header.gcc only if user or configuration
	file specifies "-remap".

	* cccp.c (remap): New var.
	(main): Set it if user specifies "-remap".
	(open_include_file): Remap only if `remap' is nonzero.

	* cpplib.h (struct cpp_options): New member `remap'.
	* cpplib.c (cpp_options_init): Set remap to 0.
	(open_include_file): Remap only if `remap' is nonzero.
	(cpp_handle_options): Set remap if user specifies "-remap".

	* i386/cygwin32.h, rs6000/cygwin32.h (CPP_SPEC): Define with -remap.

Sun Oct 26 11:41:49 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* dwarf2out.c (output_call_frame_info): The CIE pointer is now a 32
 	bit PC-relative offset.  The exception range table pointer is now in
 	the CIE.
	* frame.c (dwarf_cie, dwarf_fde): Rename CIE_pointer to CIE_delta.
	(count_fdes, add_fdes, get_cie): Adjust.
	(cie_info, extract_cie_info, __frame_state_for): Adjust eh_ptr uses.

	From H.J. Lu:
	* frame.c (count_fdes, add_fdes): Skip linked once FDE entries.

Sat Oct 25 20:29:39 1997  Alexandre Oliva  <oliva@dcc.unicamp.br>

	* Makefile.in (float.h-nat): If float.h is to be empty, ensure it is.

Sat Oct 25 20:16:52 1997  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* prefix.c: Use stdarg.h only ifdef __STDC__.  Otherwise,
	use varargs.h.  Wrap header with <>, not "".

Sat Oct 25 20:10:57 1997  Robert Lipe (robertl@dgii.com)

	* i386/sco5.h (EH_FRAME_SECTION_ASM_OP{,_ELF,_COFF}): Define.
	(DWARF2_UNWIND_INFO): Likewise.
	(EXTRA_SECTIONS): Add in_eh.

Sat Oct 25 12:20:58 1997  Jeffrey A Law  (law@cygnus.com)

	* mn10300.h (TARGET_SWITCHES): Add -mmult-bug and -mno-mult-bug.
	(TARGET_MULT_BUG): Define.
	(TARGET_DEFAULT): Default to TARGET_MULT_BUG.
	* mn10300.md (mulsi3): Handle TARGET_MULT_BUG.

Fri Oct 24 15:43:57 1997  Michael Meissner  <meissner@cygnus.com>

	* rs6000.c (toplevel): Move include stdio.h before config.h.

	(Patch from H.J. Lu, Aug 27, 1997)
	* rs6000/linux.h (DEFAULT_VTABLE_THUNKS): New; defined as 1.

	(Patch from Jeff Law, Oct 22, 1997)
	* rs6000.c (struct machine_function): Add pic_offset_table_rtx.
	(rs6000_{save,restore}_machine_status): Save/restore it.

	* rs6000.md (movsi_got_internal_mem): New pattern to work around
	case where GOT value did not get a register.
	(movsi_got_internal_mem splitter): Split above pattern.

	(Patch from Geoffrey Keating, Oct 21, 1997)
	* rs6000.c (rs6000_stack_info): Avoid creating a stack
	frame under System V ABI if we only need to save the LR.

	(Patch from Joel Sherrill, Sep 1, 1997)
	* rs6000/sysv4.h (SUBTARGET_SWITCHES): Add new macro
	EXTRA_SUBTARGET_SWITCHES, which defaults to nothing.

	(Patch from Geoffrey Keating, Oct 20, 1997)
	* rs6000/t-ppccomm (CRTSTUFF_T_CFLAGS{,_S}): Add -msdata=none
	switch.

Fri Oct 24 15:25:50 1997  Doug Evans  <dje@cygnus.com>

	* sparc.h (ASM_SPEC): Delete.

Fri Oct 24 13:16:24 1997  Jeffrey A Law  (law@cygnus.com)

	* mn10200.c (indirect_memory_operand): Delete unused function.
	* mn10200.h (EXTRA_CONSTRAINT): Handle 'R'.
	* mn10200.md (bset, bclr insns): Handle output in a reg too.

	* mn10300.c (symbolic_operand, legitimize_address): New functions.
	* mn10300.h (LEGITIMIZE_ADDRESS): Call legitimize_address.
	(GO_IF_LEGITIMATE_ADDRESS): Don't allow base + symbolic.

Thu Oct 23 08:03:59 1997  J"orn Rennecke <amylaar@cygnus.co.uk>

	* dbxout.c (dbxout_start_new_source_file): Use output_quoted_string
	for FILENAME.

Tue Oct 21 16:18:13 1997  Paul Eggert  <eggert@twinsun.com>

	* winnt/win-nt.h (CPP_SPEC): Remove reference to obsolete
	option -lang-c-c++-comments.

Tue Oct 21 10:00:20 1997  Jeffrey A Law  (law@cygnus.com)

	* mn10300.md (movqi, movhi): Avoid using address registers as
	destinations unless absolutely necessary.

	* mn10200.c (expand_prologue): Fix typo.

	* mn10200.h (GO_IF_LEGITIMATE_ADDRESS): Do not allow indexed addresses.
	* mn10200.md (neghi2): Provide an alternative which works if
	the input and output register are the same.

	* mn10300.c (print_operand): Handle 'S'.
	* mn10300.md (ashlsi3, lshrsi3, ashrsi3): Use %S for
	shift amount in last alternative

	* mn10300.c (expand_epilogue): Rework to handle register restores
	in "ret" and "retf" instructions correctly.

Tue Oct 21 07:35:19 1997  Richard Earnshaw  (rearnsha@arm.com)

	* arm.md (insv): Avoid writing result into a paradoxical subreg.

Tue Oct 21 07:12:28 1997  J"orn Rennecke <amylaar@cygnus.co.uk>

	* sh/elf.h (PREFERRED_DEBUGGING_TYPE): Don't redefine.

Mon Oct 20 12:04:04 1997  Nick Clifton  <nickc@cygnus.com>

	* v850.h (CPP_SPEC): Define __v850__.
	(CPP_PREDEFINES): Do not define __v850__.
	
	* xm-v850.h: Use __v850 rather than __v850__ to identify v850 port.
	
Mon Oct 20 17:29:55 1997  Doug Evans  <dje@cygnus.com>

	* sparc.h (SPARC_V9,SPARC_ARCH64): Delete.
	(DEFAULT_ARCH32_P): New macro.
	(TARGET_ARCH{32,64}): Allow compile time or runtime selection.
	(enum cmodel): Declare.
	(sparc_cmodel_string,sparc_cmodel): Declare.
	(SPARC_DEFAULT_CMODEL): Provide default.
	(TARGET_{MEDLOW,MEDANY}): Renamed to TARGET_CM_{MEDLOW,MEDANY}.
	(TARGET_FULLANY): Deleted.
	(TARGET_CM_MEDMID): New macro.
	(CPP_CPU_DEFAULT_SPEC): Renamed from CPP_DEFAULT_SPEC.
	(ASM_CPU_DEFAULT_SPEC): Renamed from ASM_DEFAULT_SPEC.
	(CPP_PREDEFINES): Take out stuff now handled by %(cpp_arch).
	(CPP_SPEC): Rewrite.
	(CPP_ARCH{,32,64,_DEFAULT}_SPEC): New macros.
	(CPP_{ENDIAN,SUBTARGET}_SPEC): New macros.
	(ASM_ARCH{,32,64,_DEFAULT}_SPEC): New macros.
	(ASM_SPEC): Add %(asm_arch).
	(EXTRA_SPECS): Rename cpp_default to cpp_cpu_default.
	Rename asm_default to asm_cpu_default.
	Add cpp_arch32, cpp_arch64, cpp_arch_default, cpp_arch, cpp_endian,
	cpp_subtarget, asm_arch32, asm_arch64, asm_arch_default, asm_arch.
	(NO_BUILTIN_{PTRDIFF,SIZE}_TYPE): Define ifdef SPARC_BI_ARCH.
	({PTRDIFF,SIZE}_TYPE): Provide 32 and 64 bit values.
	(MASK_INT64,MASK_LONG64): Delete.
	(MASK_ARCH64): Renamed to MASK_64BIT.
	(MASK_{MEDLOW,MEDANY,FULLANY,CODE_MODEL}): Delete.
	(EMBMEDANY_BASE_REG): Renamed from MEDANY_BASE_REG.
	(TARGET_SWITCHES): Always provide 64 bit options.
	(ARCH64_SWITCHES): Delete.
	(TARGET_OPTIONS): New option -mcmodel=.
	(INT_TYPE_SIZE): Always 32.
	(MAX_LONG_TYPE_SIZE): Define ifdef SPARC_BI_ARCH.
	(INIT_EXPANDERS): sparc64_init_expanders renamed to sparc_init_....
	(FUNCTION_{,BLOCK_}PROFILER): Delete TARGET_EMBMEDANY support.
	(PRINT_OPERAND_PUNCT_VALID_P): Add '_'.
	* sparc/linux-aout.h (CPP_PREDEFINES): Take out stuff handled by
	CPP_SPEC.
	(CPP_SUBTARGET_SPEC): Renamed from CPP_SPEC.
	* sparc/linux.h: Likewise.
	* sparc/linux64.h (SPARC_V9,SPARC_ARCH64): Delete.
	(ASM_CPU_DEFAULT_SPEC): Renamed from ASM_DEFAULT_SPEC.
	(TARGET_DEFAULT): Delete MASK_LONG64, MASK_MEDANY, add MASK_64BIT.
	(SPARC_DEFAULT_CMODEL): Define.
	(CPP_PREDEFINES): Take out stuff handled by CPP_SPEC.
	(CPP_SUBTARGET_SPEC): Renamed from CPP_SPEC.
	(LONG_DOUBLE_TYPE_SIZE): Define.
	(ASM_SPEC): Add %(asm_arch).
	* sparc/sol2.h (CPP_PREDEFINES): Take out stuff handled by CPP_SPEC.
	(CPP_SUBTARGET_SPEC): Renamed from CPP_SPEC.
	(TARGET_CPU_DEFAULT): Add ultrasparc case.
	* sparc/sp64-aout.h (SPARC_V9,SPARC_ARCH64): Delete.
	(TARGET_DEFAULT): MASK_ARCH64 renamed to MASK_64BIT.
	(SPARC_DEFAULT_CMODEL): Define.
	* sparc/sp64-elf.h (SPARC_V9,SPARC_ARCH64): Delete.
	(TARGET_DEFAULT): MASK_ARCH64 renamed to MASK_64BIT.  Delete
	MASK_LONG64, MASK_MEDANY.
	(SPARC_DEFAULT_CMODEL): Define.
	(CPP_PREDEFINES): Delete.
	(CPP_SUBTARGET_SPEC): Renamed from CPP_SPEC.
	(ASM_SPEC): Add %(asm_arch).
	(LONG_DOUBLE_TYPE_SIZE): Define.
	(DWARF2_DEBUGGING_INFO): Define.
	* sparc/splet.h (CPP_SPEC): Delete.
	* sparc/sysv4.h (CPP_PREDEFINES): Take out stuff handled by CPP_SPEC.
	(FUNCTION_BLOCK_PROFILER): Delete TARGET_EMBMEDANY support.
	(BLOCK_PROFILER): Likewise.
	* sparc.c (sparc_cmodel_string,sparc_cmodel): New globals.
	(sparc_override_options): Handle code model selection.
	(sparc_init_expanders): Renamed from sparc64_init_expanders.
	* sparc.md: TARGET_<code_model> renamed to TARGET_CM_....
	TARGET_MEDANY renamed to TARGET_CM_EMBMEDANY.
	(sethi_di_embmedany_{data,text}): Renamed from sethi_di_medany_....
	(sethi_di_fullany): Delete.

Mon Oct 20 17:20:17 1997  Jim Wilson  <wilson@cygnus.com>

	* mips.c (compute_frame_size): Not a leaf function if profile_flag set.

Sun Oct 19 17:46:02 1997  Douglas Rupp  <rupp@gnat.com>

	* cccp.c (OBJECT_SUFFIX): Add default definition.
	(main): Use OBJECT_SUFFIX.
	(VMS_{freopen,fopen,open}): Use instead of using macro on
	unprefixed name.
	(VMS_fstat): Use decc$fstat explicitly, not via macro.
	
Sun Oct 19 09:07:38 1997  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>

	* prefix.c (get_key_value): Initialize prefix to null.
	* Makefile.in (prefix.o): Properly pass in prefix.

	* objc/Make-lang.in (objc.distdir): Make the objc directory.
	* Makefile.in (distdir-start): No longer depend on objc-parse.[cy].
	Don't copy objc files here.
	(TAGS): Don't delete objc-parse.y

	* i386/mingw32.h (LIB_SPEC): Add -ladvapi32.
	(STARTFILE_SPEC): If -dll, use dllcrt1.o.
	(INCOMING_RETURN_ADDR_RTX): Undefine.
	
	* Makefile.in (float.h-nat): Avoid using /dev/null for input,
	since it's not present on all systems.

	* prefix.c : New file.
	* Makefile.in (xgcc, cccp, cppmain, fix-header): Add prefix.o.
	(prefix.o): New rule.
	* cccp.c (update_path): Add extern definition.
	(struct default_include): New field `component'.
	(default_include): Add initializer for new field to all entries.
	(new_include_prefix): Take new arg and call update_path;
	all callers changed.
	Add trailing "." before doing stat of file.
	* cpplib.c (update_path): Add extern definition.
	(struct default_include): New field `component'.
	(default_include): Add initializer for new field to all entries.
	(cpp_start_read): Call update_path.
	* gcc.c (upate_path): Add extern definition.
	(find_a_file): For MS-DOS-based, consider a drive spec as absolute.
	(add_prefix): New arg component and pass to update_path;
	all callers changed.
	* netbsd.h (INCLUDE_DEFAULTS): Add `component' to values.
	* i386/freebsd.h, mips/netbsd.h, winnt/win-nt.h: Likewise.
	* i386/mingw32 (STANDARD_INCLUDE_COMPONENT): New macro.
	* vax/vms.h (INCLUDE_DEFAULTS): New macro.
	* vax/xm-vms.h (INCLUDE_DEFAULTS): Delete from here.

	* sparc/sol2.h (WIDEST_HARDWARE_FP_SIZE): New macro.

	* i386.c (ix86_prologue): Conditionalize Dwarf2 calls 
	on #ifdef INCOMING_RETURN_ADDR_RTX.
	* i386.md (allocate_stack): Fix incorrect operand number.

	* alpha.c (vmskrunch): Deleted.
	(output_prolog, VMS): Use alloca for entry_label and don't
	truncate to 64 characters.
	* alpha/vms.h (vmskrunch): No longer define.
	(ENCODE_SECTION_INFO): No longer call vmskrunch.
	(ASM_DECLARE_FUNCTION_NAME): No longer override.

	* toplev.c (output_quoted_string): Call new OUTPUT_QUOTED_STRING macro.
	* i386/mingw32.h (OUTPUT_QUOTED_STRING): New macro.

	* stmt.c (using_eh_for_cleanups_p): New variable.
	(using_eh_for_cleanups): New function.
	(expand_decl_cleanup): Don't call expand_eh_region_start_tree
	unless using EH for cleanups.

	* function.c (purge_addressof_1): When dealing with a
	bare (address (mem)), verify that what's inside is valid in insn.
	(instantiate_virtual_regs_1, case ADDRESSOF): If have MEM, just
	do instantiation inside and leave alone here.

	* fold-const.c (fold, case COND_EXPR): Allow creation
	of {MIN,MAX}_EXPR, but preserve info on orginal comparison code.

	* function.h (restore_tree_status): Update prototype.

	* cse.c (cse_basic_block): Flush the hash table every 1,000 insns.

Sat Oct 18 13:48:14 1997  J"orn Rennecke <amylaar@cygnus.co.uk>

	* longlong.h (count_leading_zeros): Add missing casts to USItype.

Sat Oct 18 13:35:09 1997  Marc Lehmann (pcg@goof.com)

	* toplev.c (main): Don't execute "ps" under MSDOS.

Sat Oct 18 13:26:42 1997  Richard Earnshaw  (rearnsha@arm.com)

	* function.c (instantiate_virtual_regs): Don't instantiate the 
	stack slots for the parm registers until after the insns have had
	their virtuals instantiated.

	 * varargs.h (va_arg): For ARM systems, definition is endian-dependent.
	 * stdarg.h (va_arg): Likewise.

Sat Oct 18 11:23:04 1997  Nick Clifton  <nickc@cygnus.com>

	* final.c (end_final): Use ASM_OUTPUT_ALIGNED_DECL_LOCAL if defined.
	* varasm.c (assemble_static_space): Likewise.
	(assemble_variable): Use ASM_OUTPUT_ALIGNED_DECL_{COMMON,LOCAL} if def.

Sat Oct 18 11:02:19 1997  Doug Evans  <dje@canuck.cygnus.com>

	* expr.c (use_group_regs): Don't call use_reg unless REG.

Sat Oct 18 10:39:22 1997  Jim Wilson  <wilson@cygnus.com>

	* cse.c (simplify_ternary_operation, case IF_THEN_ELSE): Collapse
	redundant conditional moves to single operand.

	* expmed.c (extract_bit_field): Don't make flag_force_mem disable
	extzv for memory operands.

Sat Oct 18 09:58:44 1997  Jeffrey A Law  <law@cygnus.com>

	* ptx4.h: Fix typo.

	* integrate.c (save_for_inline_copying): Avoid undefined pointer
	operations.
	(expand_inline_function): Likewise.
	
Sat Oct 18 09:49:46 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* tree.c (restore_tree_status): Also free up temporary storage
	when we finish a toplevel function.
	(dump_tree_statistics): Print stats for backend obstacks.

	* libgcc2.c (__throw): Don't copy the return address.
	* dwarf2out.c (expand_builtin_dwarf_reg_size): Ignore return address.

	* tree.c (expr_tree_cons, build_expr_list, expralloc): New fns.
	* tree.h: Declare them.

	* except.c (exceptions_via_longjmp): Initialize to 2 (uninitialized).
	* toplev.c (main): Initialize exceptions_via_longjmp.

	* tree.c: Add extra_inline_obstacks.
	(save_tree_status): Use it.
	(restore_tree_status): If this is a toplevel inline obstack and we
	didn't want to save anything on it, recycle it.
	(print_inline_obstack_statistics): New fn.
	* function.c (pop_function_context_from): Pass context to 
	restore_tree_status.

Sat Oct 18 09:45:22 1997  Michael Meissner  <meissner@cygnus.com>

	* profile.c (get_file_function_name): Remove declaration.
	* c-lang.c (finish_file): Likewise.

Sat Oct 18 09:35:40 1997  Tristan Gingold  <gingold@messiaen.enst.fr>

	* expr.c (expand_assignment): If -fcheck-memory-usage, add call to
	chkr_check_addr if size not zero.
	(expand_expr, case COMPONENT_REF): Likewise.
	(expand_builtin): If -fcheck_memory-usage, check memory usage
	of operands for strlen, strcpy, and memcpy or don't use builtins
	for memcmp and strcmp.
	* expr.h (chkr_check_str_libfunc): Declare.
	* optabs.c (chkr_check_str_libfunc): New variable.
	(init_optabs): Initialize it.

Sat Oct 18 09:29:21 1997  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* i386/cygwin32.h (ASM_COMMENT_START): Redefine.

Sat Oct 18 09:23:54 1997  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* frame.c (__frame_state_for): Execute the FDE insns until the
	current pc value is strictly bigger than the target pc value.

	* expr.c (expand_expr, case TARGET_EXPR): If target and slot has
	no DECL_RTL, then call mark_addressable again for the slot after
	we give it RTL.

Sat Oct 18 08:58:36 1997  Manfred Hollstein  (manfred@lts.sel.alcatel.de)

	* m88k/dolph.h (INITIALIZE_TRAMPOLINE): Delete here.
	* m88k/sysv3.h (INITIALIZE_TRAMPOLINE): Unconditionally define.
	* libgcc2.c (__enable_execute_stack): Check for __sysV88__ not
	__DOLPHIN__.

	* m68k/mot3300.h (ASM_OUTPUT_ALIGN): Accept any alignment.
	* dwarf2out.c (output_call_frame_info): Call app_enable and
	app_disable to let GNU as accept the generated comments.

	* m88k.c (m88k_begin_prologue): Remove superfluous backslash.

Sat Oct 18 08:50:04 1997  Philippe De Muyter  <phdm@info.ucl.ac.be>

	* flow.c (print_rtl_with_bb): Cast alloca return values.

Sat Oct 18 08:47:46 1997  Douglas Rupp  <rupp@gnat.com>

	* alpha/vms.h (LITERALS_SECTION_ASM_OP, ASM_OUTPUT_DEF): 
	(EXTRA_SECTION_FUNCTIONS): Add literals_section.
	(EXTRA_SECTIONS): Include in_literals.

Sat Oct 18 08:40:55 1997  Nick Burrett  <nick.burrett@btinternet.com>

	* cpplib.c: (initialize_builtins): Cast all string constants for the
	function install, to type U_CHAR *.
	(eval_if_expression): Likewise.
	* cppexp.c: (cpp_lex): Cast string, for cpp_lookup, to type U_CHAR *.

Sat Oct 18 08:38:13 1997  Ken Raeburn  <raeburn@cygnus.com>

	* c-lex.c (check_newline) At `skipline', flush nextchar as well.

Sat Oct 18 08:17:13 1997  Paul Russell  <Paul.Russell@RustCorp.com.au>

	* input.h (struct file_stack): Added indent_level.
	* c-lex.c (check_newline): Add {}-count & balance warning.

Sat Oct 18 06:54:39 1997  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>

	* regclass.c (record_address_regs, case PLUS): Refine how to choose
	which is base and index.

	* alpha.h (FUNCTION_VALUE): Use word_mode only for integral types,
	not types with integral modes.

	* final.c (alter_cond): Properly conditionalize forward decl.

	* tree.h (SAVE_EXPR_NOPLACEHOLDER): New flag.
	* tree.c (contains_placeholder_p, case SAVE_EXPR): Avoid
	checking each SAVE_EXPR more than once.

	* rs6000.md (nonlocal_goto_receiver): Don't test pool size.

	* i386.c (load_pic_register): New function.
	(ix86_prologue): Code to load PIC register moved to new function.
	Don't emit blockage if not generating RTL.
	* i386.md (nolocal_goto_receiver): New pattern.

	* i386.c: Major cleanup, mostly reformatting.
	Include dwarf2.h.
	Remove many spurious casts.
	(ix86_{pro,epi}logue): Use proper mode for SET rtx.

Fri Oct 17 17:13:42 1997  David S. Miller  <davem@tanya.rutgers.edu>

	* sparc/linux64.h (LINK_SPEC): Dynamic linker is ld-linux64.so.2.
	* sparc.h (FUNCTION_PROFILER): Fix format string when TARGET_MEDANY.
	* sparc.c (output_double_int): Output DI mode values
	correctly when HOST_BITS_PER_WIDE_INT is 64.
	(output_fp_move_quad): If TARGET_V9 and not TARGET_HARD_QUAD, use
	fmovd so it works if a quad float ends up in one of the upper 32
	float regs.
	* sparc.md (pic_{lo_sum,sethi}_di): New patterns for PIC support
	on sparc64.

Fri Oct 17 16:27:07 1997  Doug Evans  <dje@cygnus.com>

	* sparc/sp64-elf.h (TARGET_DEFAULT): Delete MASK_STACK_BIAS.
	* sparc.h (PROMOTE_MODE): Promote small ints if arch64.
	(PROMOTE_FUNCTION_ARGS,PROMOTE_FUNCTION_RETURN): Define.
	(SPARC_FIRST_FP_REG, SPARC_FP_REG_P): New macros.
	(SPARC_{OUTGOING,INCOMING}_INT_ARG_FIRST): New macros.
	(SPARC_FP_ARG_FIRST): New macro.
	(CONDITIONAL_REGISTER_USAGE): All v9 fp regs are volatile now.
	(REG_ALLOC_ORDER,REG_LEAF_ALLOC_ORDER): Reorganize fp regs.
	(NPARM_REGS): There are 32 fp argument registers now.
	(FUNCTION_ARG_REGNO_P): Likewise.
	(FIRST_PARM_OFFSET): Update to new v9 abi.
	(REG_PARM_STACK_SPACE): Define for arch64.
	(enum sparc_arg_class): Delete.
	(sparc_arg_count,sparc_n_named_args): Delete.
	(struct sparc_args): Redefine and use for arch32 as well as arch64.
	(GET_SPARC_ARG_CLASS,ROUND_REG,ROUND_ADVANCE): Delete.
	(FUNCTION_ARG_ADVANCE): Rewrite.
	(FUNCTION_ARG,FUNCTION_INCOMING_ARG): Rewrite.
	(FUNCTION_ARG_{PARTIAL_NREGS,PASS_BY_REFERENCE}): Rewrite.
	(FUNCTION_ARG_CALLEE_COPIES): Delete.
	(FUNCTION_ARG_{PADDING,BOUNDARY}): Define.
	(STRICT_ARGUMENT_NAMING): Define.
	(doublemove_string): Declare.
	* sparc.c (sparc_arg_count,sparc_n_named_args): Delete.
	(single_move_string): Use GEN_INT, and HOST_WIDE_INT.
	(doublemove_string): New function.
	(output_move_quad): Clean up some of the arch64 support.
	(compute_frame_size): Add REG_PARM_STACK_SPACE if arch64.
	Don't add 8 bytes of reserved space if arch64.
	(sparc_builtin_saveregs): Combine arch32/arch64 versions.
	(init_cumulative_args): New function.
	(function_arg_slotno): New static function.
	(function_arg,function_arg_partial_nregs): New functions.
	(function_arg_{pass_by_reference,advance}): New functions.
	(function_arg_padding): New function.
	* ginclude/va-sparc.h: Rewrite v9 support.

Fri Oct 17 13:21:45 EDT 1997  Philip Blundell  <pb@nexus.co.uk>

	* arm/netbsd.h (TYPE_OPERAND_FMT): use % not @ to avoid
	problems with comments.

Fri Oct 17 13:00:38 EDT 1997  Richard Earnshaw  (rearnsha@arm.com)

	* arm/aout.h (ASM_OUTPUT_LABEL): Define in place of ARM_OUTPUT_LABEL.
	* arm/aof.h (ASM_OUTPUT_LABEL): Likewise.
	* arm.h (ASM_OUTPUT_LABEL): Delete.
	(ASM_OUTPUT_INTERNAL_LABEL): Call ASM_OUTPUT_LABEL directly.
	* arm.c (arm_asm_output_label): Delete.

	* arm/aout.h (ASM_OUTPUT_ALIGNED_LOCAL): Do what is needed inline.
	* arm.c (output_lcomm_directive): Delete.

	* arm.h (PUSH_ROUNDING): Delete; this is not what happens.
	(ACCUMULATE_OUTGOING_ARGS): Define.
	(PROMOTE_FUNCTION_ARGS): Define.
	(INITIAL_ELIMINATION_OFFSET): Take current_function_outgoing_args_size
	into account.
	* arm.c (use_return_insn, output_func_epilogue,
	arm_expand_prologue): Likewise.

	* arm.c (const_ok_for_arm): If HOST_WIDE_INT more than 32 bits,
	insist high bits are all zero  or all one.
	(output_move_double): Handle case where CONST_INT is more than 32 bits.

	* arm.c (load_multiple_sequence): Support SUBREG of MEM.
	(store_multiple_sequence): Likewise.

	* arm.c (arm_gen_load_multiple): New args UNCHANGING_P and IN_STRUCT_P.
	Use them if we create any new MEMs; all callers changed.
	(arm_gen_store_multiple): Likewise.
	(arm_gen_movstrqi): Preserve RTX_UNCHANGING_P and MEM_IN_STRUCT_P
	on any MEMs created.

	* arm.h (ASM_OUTPUT_MI_THUNK): Use branch instruction to jump to label.
	(RETURN_ADDR_RTX): Use NULL_RTX rather than casting zero.
	(output_move_double): Correct typo in prototype.

	* arm.md (movsfcc): If not TARGET_HARD_FLOAT, ensure operand[3] valid.

	* arm/netbsd.h (CPP_PREDEFINES): Always predefine __arm__.
	* arm/xm-netbsd.h (SYS_SIGLIST_DECLARED, HAVE_STRERROR): Define these.

	* arm/t-netbsd (CROSS_LIBGCC1, LIB1ASMSRC, LIB1ASMFUNCS) Don't define
	these any more.
	* configure.in (arm-*-netbsd*): Pick up t-netbsd before arm/t-netbsd.

Thu Oct 16 19:31:22 1997  Jim Wilson  <wilson@cygnus.com>

	* v850.c (ep_memory_offset): New function.
	(ep_memory_operand, substitute_ep_register, v850_reorg): Call it.

	* v850.h (CONST_OK_FOR_*): Add and correct comments.
	(CONSTANT_ADDRESS_P): Add comment.
	(EXTRA_CONSTRAINT): Define 'U'.
	* v850.md: Add comments on bit field instructions.
	(addsi3): Delete &r/r/r alternative.  Add r/r/U alternative.
	(lshrsi3): Use N not J constraint.

	* v850.md (v850_tst1+1): New define_split for tst1 instruction.

	* v850.c (reg_or_0_operand): Call register_operand.
	(reg_or_int5_operand): Likewise.
	* v850.h (MASK_BIG_SWITCH, TARGET_BIG_SWITCH): New macros.
	(TARGET_SWITCHES): Add "big-switch".
	(ASM_OUTPUT_ADDR_VEC_ELT, ASM_OUTPUT_ADDR_DIFF_ELT, CASE_VECTOR_MODE,
	ASM_OUTPUT_BEFORE_BASE_LABEL): Add support for TARGET_BIG_SWITCH.
	(CASE_DROPS_THROUGH): Comment out.
	(CASE_VECTOR_PC_RELATIVE, JUMP_TABLES_IN_TEXT_SECTION): Define.
	* v850.md (cmpsi): Delete compare mode.
	(casesi): New pattern.

	* v850.h (CONST_OK_FOR_N): Delete redundant compare against zero.
	* v850.md (ashlsi3): Use SImode not QImode for shift count.
	(lshrsi3): Likewise.

	* v850.c (print_operand): Add 'c', 'C', and 'z' support.  Delete
	unreachable switch statement after 'b' support.  Remove "b" from
	strings for 'b' support.
	* v850.md (branch_normal, branch_invert): Change %b to b%b.

Thu Oct 16 13:08:45 1997  Doug Evans  <dje@cygnus.com>

	* configure.in (sparc-*-elf*): New target.

Wed Oct 15 22:30:37 1997  J"orn Rennecke <amylaar@cygnus.co.uk>

	* h8300.h (REG_CLASS_CONTENTS): AP is a general register.
	(REG_OK_FOR_BASE_P, ! REG_OK_STRICT case): Reject special registers.

Wed Oct 15 22:00:57 1997  J"orn Rennecke <amylaar@cygnus.co.uk>

	* sh.md (movhi+1): Add x/r alternative.

	* sh/elf.h (HANDLE_SYSV_PRAGMA): Undefine.

	* va-sh.h (va_arg): Fix big endian bugs for small integers.

Wed Oct 15 21:34:45 1997  David Edelsohn  <edelsohn@mhpcc.edu>

	* rs6000.md (udivsi3, divsi3): Split into MQ and non-MQ cases for
	PPC601.
	(umulsidi3,umulsi3_highpart): Likewise.
	(smulsi3_highpart_no_mq): Add !TARGET_POWER.

Wed Oct 15 18:45:31 1997  Doug Evans  <dje@cygnus.com>

	* sparc/t-sp64 (LIBGCC2_CFLAGS): Delete.

Wed Oct 15 17:17:33 1997  Jeffrey A Law  (law@cygnus.com)

	* pa.c (following_call): Fail if the CALL_INSN is an indirect call.

Wed Oct  1 17:52:09 1997  Douglas Rupp  <rupp@gnat.com>

        * vms.h (UNALIGNED_{SHORT,INT,DOUBLE_INT}_ASM_OP): Define.

Wed Oct  1 16:09:42 1997  Benjamin Kosnik  <bkoz@melange.gnu.ai.mit.edu>

	* fixincludes: Fix sys/param.h so that MAXINT will not be redefined
	on HPUX.
	
Wed Oct  1 08:08:21 1997  Jeffrey A Law  <law@chunks.cygnus.com>

        * cse.c (this_insn_cc0_mode): Initialize.

Wed Oct  1 07:22:12 1997  Richard Henderson  <rth@cygnus.com>

	* i386.h (RETURN_ADDR_RTX): Use FRAME arg, not ap.

Tue Sep 30 19:19:58 1997  Jim Wilson  <wilson@cygnus.com>

	* except.c (find_exception_handler_labels): Correct argument to free.

Fri Sep 26 14:06:45 1997  Mike Stump  <mrs@wrs.com>

	* c-decl.c (start_struct): Ensure that structs with forward
	declarations are in fact packed when -fpack-struct is given.

Wed Sep 24 11:31:24 1997  Mike Stump  <mrs@wrs.com>

	* stor-layout.c (layout_record): Ignore STRUCTURE_SIZE_BOUNDARY if
	packing structure.  This allows a structure with only bytes to be
	aligned on a byte boundary and have no padding on a m68k.

Tue Sep 30 11:00:00 1997  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* except.c (find_exception_handler_labels): Free LABELS when done.

Tue Sep 30 10:47:33 1997  Paul Eggert  <eggert@twinsun.com>

	* cexp.y, cppexp.c (HOST_BITS_PER_WIDE_INT):
	Define only if not already defined.

Mon Sep 29 17:55:55 1997  Gavin Koch  <gavin@cygnus.com>

	* c-decl.c (warn_implicit): Deleted.
	(warn_implicit_int, mesg_implicit_function_declaration}): New vars.
	(c_decode_option): For -Wimplicit, set both new variables.
	Add -Wimplicit-function-declarations, -Wimplicit-int,
	and -Werror-implicit-function-declaration.
	(implicitly_declare, grokdeclarator): Use new flags.
	* toplev.c (lang_options): Add new -W options.

Mon Sep 29 17:55:15 1997  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>

	* c-common.c (check_format_info): Add check for scanf into
	constant object or via constant pointer type.

Mon Sep 29 16:10:12 1997  Richard Henderson  <rth@cygnus.com>

	* alpha.md (beq): For registers and ints 0-255, use cmpeq+bne.
	(bne): Likewise for cmpeq+beq.

Mon Sep 29 15:58:22 1997  Doug Evans  <dje@cygnus.com>

	* reload1.c (reload_cse_simplify_set): Fix return values.

Mon Sep 29 08:21:35 1997  Bruno Haible  <bruno@linuix.mathematik.uni-karlsruhe.de>

	* i386.c (notice_update_cc): Use reg_overlap_mentioned_p.

Sun Sep 28 18:59:58 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* libgcc2.c (__throw): Fix thinko.

Sun Sep 28 12:00:52 1997  Mark Mitchell  <mmitchell@usa.net>

        * cplus-dem.c (demangle_template): Add new parameter.  Handle new
        template-function mangling.
        (consume_count_with_underscores): New function.
        (demangle_signature): Handle new name-mangling scheme.

Sun Sep 28 11:19:09 1997  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>

	* flow.c (print_rtl_with_bb): Reformat messages about BB boundaries.

	* calls.c: Include regs.h.
	* profile.c: Likewise.
	* Makefile.in (calls.o, profile.o): Depend on regs.h.
	* except.h (expand_builtin_dwarf_reg_size): Put in #ifdef TREE_CODE.

	* tree.h (get_file_function_name): Add decl.
	* dwarf2out.c (output_call_frame_info): Don't cast its result.

Sun Sep 28 10:58:21 1997  Manfred Hollstein  <manfred@s-direktnet.de>

	* Makefile.in (sub-makes): Pass value of LANGUAGES.

Sun Sep 28 10:52:59 1997  Ian Dall  <ian.dall@dsto.defence.gov.au>

 	* regs.h (SMALL_REGISTER_CLASSES): Default to 0.
	* calls.c (prepare_call_address, expand_call):
	Remove #if test on SMALL_REGISTER_CLASSES.
	* combine.c (can_combine_p, combinable_i3pat, try_combine): Likewise.
	* cse.c (canon_hash): Likewise.
	* function.c (expand_function_start): Likewise.
	* jump.c (jump_optimize): Likewise.
	* local-alloc.c (optimize_reg_copy_1): Likewise.
	* loop.c (scan_loop, valid_initial_value_p): Likewise.
	* profile.c (output_arc_profiler): Likewise.
	* reload.c (push_secondary_reload, push_reload): Likewise.
	(combine_reloads): Likewise.
	* reload1.c (reload, scan_paradoxical_subregs): Likewise.
	(order_regs_for_reload, reload_as_needed): Likewise.
	(choose_reload_regs): Likewise.
	(merge_assigned_reloads): Declare unconditionally.

Sat Sep 27 11:02:38 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* c-decl.c (init_decl_processing): Add __builtin_dwarf_reg_size.
	* tree.h (built_in_function): Likewise.
	* expr.c (expand_builtin): Likewise.
	* except.h: Likewise.
	* dwarf2out.c (expand_builtin_dwarf_reg_size): New fn.
	* libgcc2.c (copy_reg): New fn.
	(__throw): Use it.

Fri Sep 26 09:00:13 1997  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* frame.c (gansidecl.h): New include, for PROTO.
	* dwarf2out.c: Move inclusion of dwarf2.h down.
	(dwarf2out_cfi_label): Don't declare here.
	* dwarf2.h (dwarf2out_{do_frame,cfi_label,def_cfa}): New declarations.
	(dwarf2out_{window_save,args_size,reg_save,return_save}): Likewise.
	(dwarf2out_{return_reg,begin_prologue,end_epilogue}): Likewise.
	* m68k.c (dwarf2.h): Include.
	(output_function_prologue): Add dwarf2 support.
	* m68k.h (INCOMING_RETURN_ADDR_RTX, DWARF_FRAME_REGNUM): New macros.
	(INCOMING_FRAME_SP_OFFSET): Likewise.

	* integrate.c (copy_rtx_and_substitute, case ADDRESSOF): New case.

	* integrate.c (expand_inline_function): Make sure there is at
	least one insn that can be used as an insertion point.

Fri Sep 26 08:54:59 1997  Paul Eggert  <eggert@twinsun.com>

	* c-typeck.c (build_binary_op): Warn about comparing signed vs
	unsigned if -W is specified and -Wno-sign-compare is not.
	* c-decl.c (warn_sign_compare): Initialize to -1.
	(c_decode_option): -Wall no longer implies -Wsign-compare.

Wed Sep 24 21:34:06 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* dwarf2out.c: s/flag_verbose_asm/flag_debug_asm/

Wed Sep 24 19:17:08 1997  Doug Evans  <dje@cygnus.com>

	* sparc.md (get_pc_via_call): Renamed from get_pc_sp32.
	(get_pc_via_rdpc): Renamed from get_pc_sp64.
	* sparc.c (finalize_pic): Update call to gen_get_pc_via_call.

Wed Sep 24 18:38:22 1997  David S. Miller  <davem@tanya.rutgers.edu>

	* sparc.h (ASM_CPU_SPEC): Pass -Av9a for v8plus, ultrasparc.
	(TARGET_OPTIONS): Add -malign-loops=, -malign-jumps=,
	and -malign-functions=.
	(sparc_align_{loops,jumps,funcs}_string): Declare.
	(sparc_align_{loops,jumps,funcs}): Declare.
	(DEFAULT_SPARC_ALIGN_FUNCS): New macro.
	(FUNCTION_BOUNDARY): Use sparc_align_funcs.
	(STACK_BIAS): Define.
	(SPARC_SIMM*_P): Cast to unsigned HOST_WIDE_INT, then perform test.
	(SPARC_SETHI_P): New macro.
	(CONST_OK_FOR_LETTER_P): Use it.
	(ASM_OUTPUT_ALIGN_CODE): Define.
	(ASM_OUTPUT_LOOP_ALIGN): Define.
	* sparc.c (sparc_align_{loops,jumps,funcs}_string): New globals.
	(sparc_align_{loops,jumps,funcs}): New globals.
	(sparc_override_options): Handle -malign-loops=, -malign-jumps=,
	-malign-functions=.
	(move_operand): Use SPARC_SETHI_P.
	(arith_double_operand): Cast to unsigned HOST_WIDE_INT, then test.
	(arith11_double_operand): Likewise.
	(arith10_double_operand): Likewise.
	(finalize_pic): Finish sparc64 support.
	(emit_move_sequence): Use SPARC_SETHI_P.  Simplify low part of
	64 bit constants if able.
	(output_fp_move_quad): Don't use fmovq unless TARGET_HARD_QUAD.
	(sparc_builtin_saveregs [sparc64]): Don't save fp regs if ! TARGET_FPU.
	* sparc.md: Use GEN_INT instead of gen_rtx.
	(get_pc_sp32): Use for sparc64 as well.
	(lo_sum_di_sp{32,64}): Fix handling on 64 bit hosts.
	(sethi_di_sp64_const): Likewise.
	(movtf_cc_sp64): Check TARGET_HARD_QUAD.
	(cmp_zero_extract_sp64): Use unsigned HOST_WIDE_INT in cast.
	(ashlsi3, ashldi3, ashrsi3, ashrdi3, lshrsi3, lshrdi3): Likewise.

Wed Sep 24 08:25:28 1997  Alexandre Oliva  <oliva@dcc.unicamp.br>

	* i386.md (allocate_stack): Fix typo in last change.

Tue Sep 23 19:02:46 1997  Doug Evans  <dje@cygnus.com>

	* sparc/linux-aout.h (COMMENT_BEGIN): Delete.
	* sparc/linux.h (COMMENT_BEGIN): Likewise.
	* sparc/linux64.h (COMMENT_BEGIN): Likewise.

Tue Sep 23 14:48:18 1997  David S. Miller  <davem@tanya.rutgers.edu>

	Add sparc64 linux support.
	* configure.in (sparc64-*-linux*): Recognize.  Add sparc/xm-sparc.h
	to xm_file list on 32-bit sparc-linux.
	* sparc/xm-sp64.h: New file.
	* sparc/linux64.h: New file.
	* sparc/xm-linux.h: Include some standard headers if not inhibit_libc.
	Don't include xm-sparc.h.
	* config/xm-linux.h (HAVE_PUTENV, HAVE_ATEXIT): Define.
	* glimits.h (LONG_MAX): Handle sparc64.

Tue Sep 23 08:32:51 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* final.c (final_end_function): Also do dwarf2 thing if
 	DWARF2_DEBUGGING_INFO.
	(final_start_function): Likewise.

Tue Sep 23 06:55:40 1997  David S. Miller  <davem@tanya.rutgers.edu>

	* expmed.c (expand_divmod): If compute_mode is not same as mode,
	handle case where convert_modes causes op1 to no longer be CONST_INT.

Tue Sep 23 00:58:48 1997  Jim Wilson  <wilson@cygnus.com>

	* mips.c (save_restore_insns): Only set RTX_FRAME_RELATED_P if store_p.

Mon Sep 22 18:26:25 1997  J. Kean Johnston  <jkj@sco.com>

	* i386/sco5.h: Make ELF default file format and add -mcoff/-melf..
	(MULTILIB_DEFAULTS): Define.
	(ASM_SPEC, CPP_SPEC): Handle -mcoff.
	(STARTFILE_SPEC, ENDFILE_SPEC, LINK_SPEC): Likewise.
	(LIBGCC_SPEC): Likewise.
	(MASK_COFF, TARGET_COFF, TARGET_ELF): Define.
	(SUBTARGET_SWITCHES): Add -mcoff and -melf.
	* i386/t-sco5 (CRTSTUFF_T_CFLAGS): Add -fPIC.
	(CRTSTUFF_T_CFLAGS_S): Tweak for COFF.
	(EXTRA_PARTS, TAROUTOPTS): Delete.
	(libgcc1-elf, libgcc2-elf, libgcc-elf targets): Delete.
	(MULTILIB_OPTIONS): Define.
	(MULTILIB_DIRNAMES, MULTILIB_EXCEPTIONS): Likewise.
	(MULTILIB_MATCHE, MULTILIB_EXTRA_OPTS): Likewise.

Mon Sep 22 14:42:11 1997  Jeffrey A Law  (law@cygnus.com)

	* reg-stack.c (find_blocks): Fix thinko in last change.

Mon Sep 22 16:22:41 1997  David S. Miller  <davem@tanya.rutgers.edu>

	* combine.c (try_combine): Use NULL_RTX, not 0, in gen_rtx calls.
	* cse.c (cse_main): Likewise.
	* emit-rtl.c (gen_label_rtx): Likewise.
	* expr.c (init_expr_once): Likewise.
	* sched.c (schedule_insns): Likewise.
	* varasm.c (immed_double_const): Likewise.

	* sparc.h (INCOMING_FRAME_SP_OFFSET): Define as SPARC_STACK_BIAS.

Mon Sep 22 16:13:21 1997  H.J. Lu  (hjl@gnu.ai.mit.edu)

	* alpha/linux.h (HANDLE_SYSV_PRAGMA): Define.

Mon Sep 22 16:02:01 1997  Benjamin Kosnik  <bkoz@rhino.cygnus.com>

	* c-common.c (decl_attributes): Add support for TYPE_UNUSED on types.
	* c-decl.c (finish_decl): Set TREE_USED on decls if TREE_USED on type.
	* stmt.c (expand_end_bindings): Check DECL_NAME and DECL_ARTIFICIAL
	before unused variable warning.

Mon Sep 22 14:04:18 1997  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>

	* rtlanal.c (computed_jump_p): Fix typo in last change.

	* clipper.md (movstrsi): Use change_address instead of making new MEM.
	* dsp16xx.md (movstrqi): Likewise.
	* i370.md (movstrsi): Likewise.
	* i860.md (movstrsi): Likewise.
	* pa.md (movstrsi): Likewise.
	* mips.md (movstrsi): Fix (unused) pattern in define_expand.
	* pdp11.md (movstrhi): Likewise.

	* alpha.md (allocate_stack): Use virtual_stack_dynamic for result.
	* i386.md (allocate_stack): Likewise.
	* rs6000.md (allocate_stack): Likewise.

	* alpha.h (FLOAT_STORE_FLAG_VALUE): Different for VAX and IEEE float.

	* function.c (assign_parms): Make max_parm_reg handling more
	precise and make it agree with size of parm_reg_stack_loc.
	* integrate.c (save_for_inline_{nocopy,copying}): Remove
	redundant assignment of max_parm_reg.

	* function.c (assign_parms): Properly set RTX_UNCHANGING_P for
	copy of parm.

	* integrate.c (copy_rtx_and_substitute, case SET): Handle
	a SET_DEST of the virtual fp or ap specially and undo
	the adjustment into the local area as well.
	(mark_stores): Don't wipe out map entries for virtual fp and ap.

	* alpha.h (FLOAT_STORE_FLAG_VALUE): Different for VAX and IEEE float.

	* emit-rtl.c (gen_lowpart): Handle ADDRESSOF.

Mon Sep 22 13:35:56 1997  Doug Evans  <dje@cygnus.com>

	* rtlanal.c (replace_regs): Fix up lossage in last patch.

Sun Sep 21 19:28:48 1997  Jeffrey A Law  (law@cygnus.com)

	* flow.c (jmp_uses_reg_or_mem): Deleted unused function.
	(find_basic_blocks): Use computed_jump_p to determine if a 
	particular JUMP_INSN is a computed jump.
	* reg-stack.c (find_blocks): Use computed_jump_p to determine
	if a particular JUMP_INSN is a computed jump.
	* rtlanal.c (jmp_uses_reg_or_mem): New function.
	(computed_jump_p): Likewise.
	* rtl.h (computed_jump_p): Declare.
	* genattrtab.c (pc_rtx): Define and initialize.

	* cse.c (simplify_relational_operation): Set h0u just like h0s.
	Similarly for h1u and h1s.

Sun Sep 21 14:13:31 1997  Doug Evans  <dje@cygnus.com>

	* function.c (instantiate_virtual_regs): Fix thinko in last patch.

Sun Sep 21 10:33:26 1997  Paul Eggert  <eggert@twinsun.com>

	* cccp.c, cpplib.c (special_symbol): If STDC_0_IN_SYSTEM_HEADERS
	is defined, expand __STDC__ to 0 in system headers.
	* i386/sol2.h, rs6000/sol2.h, sparc/sol2.h:
	(STDC_0_IN_SYSTEM_HEADERS): New macro.
	(CPP_SPEC): Remove -D__STDC__=0; it's no longer needed.

	* fixinc.math (_MATH_H_WRAPPER):  Define at the end of the
	wrapper, not the start, so that if #include_next gets another
	instance of the wrapper, this will follow the #include_next
	chain until we arrive at the real <math.h>.

	* fixproto (subdirs_made):  New var, to keep track of which
	subdirectories we've made (in reverse order).  At the end,
	attempt to rmdir them all, so that we don't create any empty
	directories.

Sun Sep 21 10:02:07 1997  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>

	* pa.c (move_operand): Respect -mdisable-indexing.
	* pa.h (GO_IF_LEGITIMATE_ADDRESS): Likewise.

Sun Sep 21 09:29:23 1997  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* function.c (purge_addressof_1): Don't convert (MEM (ADDRESSOF (REG)))
	to (SUBREG (REG)) on big endian machines.
	Don't fall through to substitute the inner (REG) unchanged
	when the above conversion cannot be validated.

Sat Sep 20 16:22:06 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* frame.c (__deregister_frame): Properly check for initialized object.

	* function.c (instantiate_virtual_regs): Instantiate 
	parm_reg_stack_locs.

Sat Sep 20 03:07:54 1997  Doug Evans  <dje@cygnus.com>

	* sparc/sysv4.h (ASM_COMMENT_START): Delete.
	* sparc.h (ASM_COMMENT_START): Define.
	* sparc.c (output_function_prologue): Use it.
	(sparc_flat_output_function_{epi,pro}logue): Likewise.

Fri Sep 19 19:43:09 1997  Jeffrey A Law  (law@cygnus.com)

	* loop.c (strength_reduce): Fix typo.

	* m68k/xm-mot3300.h (alloca): Properly declare if __STDC__.
	* mips.h, xm-rs6000.h, rs6000/xm-sysv4.h: Likewise.

Fri Sep 19 20:10:30 1997  Doug Evans  <dje@cygnus.com>

	* rtl.h (find_use_as_address): Delete accidentally added decl.

Fri Sep 19 08:36:16 1997  J"orn Rennecke <amylaar@cygnus.co.uk>

	* jump.c (thread_jumps): Check can_reverse_comparison_p before
	threading a reversed-condition jump.

Fri Sep 19 08:16:12 1997  Andrew M. Bishop <amb@gedanken.demon.co.uk>.

	* Add support for new -dI option for cxref,
	* cccp.c (dump_includes): New variable.
	(struct directive, directive_table): Remove members angle_brackets,
	traditional_comments, pass_thru; all code using struct directive
	now uses `type' member instead.
	(IS_INCLUDE_DIRECTIVE_TYPE): New macro.
	(main, handle_directive): Add support for new -dI option.
	(do_ident): Avoid unnecessary alloca.
	(do_pragma): Avoid unnecessary comparison to newline.

	* cpplib.h (struct cpp_options): New member dump_includes.
	* cpplib.c (struct directive, directive_table): Remove members
	traditional_comments, pass_thru; all code using struct directive
	now uses `type' member instead.
	(IS_INCLUDE_DIRECTIVE_TYPE): New macro.
	(handle_directive, cpp_handle_options): Add support for new -dI option.

Fri Sep 19 07:57:19 1997  Pat Rankin  <rankin@eql.caltech.edu>

	* vax/xm-vms.h (expand_builtin_{extract,set}_return_addr): New macros.

Fri Sep 19 07:47:29 1997  Nick Burrett  <n.a.burrett@btinternet.com>

	* cpplib.c (pcstring_used, pcfinclude): Delete unused declarations.
	(check_preconditions, print_containing_files, pipe_closed): Likewise.
	(dump_defn_1, dump_arg_n, make_undef): Likewise.
	(trigraph_pcp): Pre-process out decl.
	(quote_string): Cast CPP_PWRITTEN macro to char * for sprintf.
	(output_line_command): Likewise.
	(macro_expand): Likewise.
	(do_line): Cast atoi argument to char *.
	* genattrtab.c (simplify_by_alternatives): Pre-process out decl.
	* genpeep.c (gen_exp): Remove decl.

Fri Sep 19 07:29:40 1997  Bernd Schmidt  <crux@Pool.Informatik.RWTH-Aachen.DE>

	* enquire.c (basic): Elminate dangling else warning.
	* except.h (struct function, save_eh_status, restore_eh_status):
	Don't declare.
	* expr.c (clear_storage): Don't return without a value.
	* function.h ({save,restore}_machine_status): Add proper prototype.
	({save,restore}_{tree,eh,stmt,expr,emit,storage}_status): Declare.
	* real.h (real_value_truncate): Add proper prototype.
	(target_isnan, target_isinf, target_negative, debug_real): Declare.
	(assemble_real): Likewise.
	* recog.c (strict_memory_address_p, memory_address_p): Don't declare.
	(find_single_use_1): Add prototype.
	* recog.h (init_recog, init_recog_no_volatile): Declare.
	(check_asm_operands, constrain_operands, memory_address_p): Likewise.
	(strict_memory_address_p, validate_replace_rtx): Likewise.
	(reg_fits_class_p, find_single_use, general_operand): Likewise.
	(address_operand, register_operand, scratch_operand): Likewise.
	(immediate_operand, const_int_operand, const_double_operand): Likewise.
	(nonimmediate_operand, nonmemory_operand, push_operand): Likewise.
	(memory_operand, indirect_operand, mode_independent_operand): Likewise.
	(comparison_operator, offsettable_{,nonstrict_}memref_p): Likewise.
	(offsettable_address_p, mode_dependent_address_p, recog): Likewise.
	(add_clobbers): Likewise.
	* reload.h (strict_memory_address_p): Don't declare here.
	* rtl.h (struct rtvec_def): Make num_elem an integer.
	(PUT_NUM_ELEM): Delete cast to unsigned.
	(rtx_unstable_p, rtx_varies_p, reg_mentioned_p): Declare.
	(reg_{referenced,used_between,referenced_between}_p: Likewise.
	({reg_set,modified,no_labels}_between_p, modified_in_p): Likewise.
	(reg_set_p, refers_to_regno_p, reg_overlap_mentioned_p): Likewise.
	(note_stores, rtx_equal_p, dead_or_set{,_regno}_p): Likewise.
	(remove_note, side_effects_p, volatile_{refs,insn}_p): Likewise.
	(may_trap_p, inequality_comparison_p): Likewise.
	* rtlanal.c (note_stores, reg_set_p): Don't declare.
	(rtx_addr_can_trap_p): Add prototype, make static.
	(reg_set_p_1): Add declaration for parameter pat.
	* emit-rtl.c: Include recog.h.
	* integrate.c: Likewise.
	* jump.c: Likewise.
	* unroll.c: Likewise.
	* Makefile.in (emit-rtl.o, integrate.o, jump.o, unroll.o): Depend
	on recog.h.
	
Fri Sep 19 06:52:22 1997  Paul Eggert  <eggert@twinsun.com>

	* enquire.c (SYS_FLOAT_H_WRAP): New macro.
	Include "float.h" if SYS_FLOAT_H_WRAP is nonzero.
	(f_define): New argument `req'.
	(main): Output `#include_next <float.h>' if wrapping float.h.
	(i_define, f_define): Don't output anything if wrapping float.h
	and if the system defn is already correct.  Put other value tests
	inside `#ifdef VERIFY'.
	(UNDEFINED): New macro.
	(I_MAX, I_MIN, U_MAX, F_RADIX, F_MANT_DIG, F_DIG, F_ROUNDS):
	Define even if VERIFY isn't defined, because SYS_FLOAT_H_WRAP may need
	these values.  Give them the value UNDEFINED if not already defined.
	(F_EPSILON, F_MIN_EXP, F_MIN, F_MIN_10_EXP, F_MAX_EXP): Likewise.
	(F_MAX, F_MAX_10_EXP): Likewise.
	(FPROP): Prefer system float.h definition of F_ROUNDS.
	Pass system values to f_define.
	* Makefile.in (FLOAT_H_TEST): New var.
	(float.h-nat): Make it empty if we can use the system float.h without
	change.
	(enquire.o): Define SYS_FLOAT_H_WRAP=1 if we can build a wrapper
	around the system <float.h>.  Remove include/float.h before compiling.
	(stmp-headers): Remove include/float.h if we would just be installing
	an empty file (which is a placeholder that stands for no file).

	* fix-header.c: Don't munge headers for POSIX and XOPEN,
	as this is too error-prone.
	(ADD_MISSING_POSIX, ADD_MISSING_XOPEN): New macros, normally undefed.
	(POSIX1_SYMBOL, POSIX2_SYMBOL): Now 0 unless ADD_MISSING_POSIX.
	(XOPEN_SYMBOL, XOPEN_EXTENDED_SYMBOL): Now 0 unless ADD_MISSING_XOPEN.
	(main): Ignore symbols whose flags are 0.

Thu Sep 18 10:43:07 1997  Nick Clifton  <nickc@cygnus.com>
 
	* v850.c (compute_register_save_size): Correct register number.
	* v850.md (save_interrupt, return_interrupt): Likewise.
	* v850/lib1funcs.asm (save_interrupt): Likewise.
	(return_interrupt): Use stack pointer, not element pointer.

Thu Sep 18 14:22:22 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* final.c (final_scan_insn): Hand BARRIERs to dwarf2 code.
	* dwarf2out.c (dwarf2out_frame_debug): Pass the whole insn along.
	(dwarf2out_stack_adjust): A BARRIER resets the args space to 0.

	* except.c (end_eh_unwinder): Subtract 1 from return address.
	* libgcc2.c (__throw): Likewise.
	(find_exception_handler): Don't change PC here.  Compare end with >.

Thu Sep 18 14:01:20 1997  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* configure.in: Make sure to create the stage* and include
	symbolic links in each subdirectory.

Thu Sep 18 13:20:37 1997  J"orn Rennecke <amylaar@cygnus.co.uk>

	* sh/lib1funcs.asm (LOCAL): Define.
	(whole file): Use it.

Thu Sep 18 09:52:24 1997  Benjamin Kosnik  <bkoz@beauty.cygnus.com>

	* collect2.c (collect_execute): Specify name of new file when
	redirecting stdout/stderr.

Thu Sep 18 01:47:06 1997  Jeffrey A Law  (law@cygnus.com)

	* pa.md (reload_peepholes): Don't allow addresses with side
	effects for the memory operand.

Wed Sep 17 18:19:53 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* libgcc2.c (find_exception_handler): Subtract one from our PC when
 	looking for a handler, to avoid hitting the beginning of the next
 	region.

	* except.c (expand_builtin_set_return_addr_reg): Use force_operand.

Wed Sep 17 18:23:09 1997  Jeffrey A Law  (law@cygnus.com)

	* mips/abi64.h (LONG_MAX_SPEC): Define.
	* mips.h (LONG_MAX_SPEC): Define.
	(CPP_SPEC): Include long_max_spec.
	(EXTRA_SPECS): Include long_max_spec.

Wed Sep 17 14:17:26 1997  Paul Eggert  <eggert@twinsun.com>

	* configure.in (AC_CHECK_HEADERS): Add inttypes.h, limits.h.
	({sparc,i[3456]86,powerpcle}-*-solaris2*): Use fixinc.math.

	* fixinc.math (PWDCMD, ORIGDIR, LINKS): Remove.
	Remove duplicate test for missing $1.
	Don't cd to $INPUT.
	Build wrapper around system <math.h> instead of copying it;
	this is better if the system <math.h> is updated later by a software
	patch or upgrade.

	* cccp.c (HAVE_STDLIB_H, HAVE_UNISTD_H):
	Do not define any more; now autoconfed.
	<limits.h>: Include if HAVE_LIMITS_H.
	(HOST_BITS_PER_WIDE_INT): Remove.
	(HOST_WIDE_INT): Use intmax_t or long long if available.
	(pcfinclude): Use size_t, not HOST_WIDE_INT, for cast from pointer;
	this is less likely to annoy the compiler.

	* cexp.y (HAVE_STDLIB_H): Do not define any more; now autoconfed.
	<limits.h>: Include if HAVE_LIMITS_H.
	(HOST_WIDE_INT): Use intmax_t or long long if available.
	(unsigned_HOST_WIDE_INT, CHAR_BIT): New macros.
	(HOST_BITS_PER_WIDE_INT): Define in terms of CHAR_BIT and sizeof.
	(MAX_CHAR_TYPE_MASK, MAX_CHAR_TYPE_MASK): Rewrite so that we don't use
	HOST_BITS_PER_WIDE_INT in a preprocessor expression, since it now
	uses sizeof.

	* cppexp.c: <limits.h>: Include if HAVE_LIMITS_H.
	(HOST_WIDE_INT): Use intmax_t or long long if available.
	(CHAR_BIT): New macro.
	(HOST_BITS_PER_WIDE_INT): Define in terms of CHAR_BIT and sizeof.
	* cpplib.c: <limits.h>: Include if HAVE_LIMITS_H.
	(HOST_WIDE_INT): Use intmax_t or long long if available.
	(HOST_BITS_PER_WIDE_INT): Remove.

Wed Sep 17 14:11:38 1997  Jeffrey A Law  (law@cygnus.com)

	* v850.c (construct_save_jarl): Fix thinko in last change.

Wed Sep 17 15:04:19 1997  Doug Evans  <dje@cygnus.com>

	* sparc/sysv4.h (ASM_OUTPUT_{FLOAT,DOUBLE,LONG_DOUBLE}): Delete,
	use sparc.h's copies.
	* sparc.h (ASM_OUTPUT_{FLOAT,DOUBLE,LONG_DOUBLE}): Print ascii form
	as well.

Wed Sep 17 14:08:20 1997  Nick Burrett  <nick.burrett@btinternet.com>

	* explow.c (allocate_dynamic_stack_space): Make allocate_stack
	pass 'target' as an extra operand.
	* expr.c (expand_builtin_apply): Use allocate_dynamic_stack_space
	to push a block of memory onto the stack.
	* alpha.md (allocate_stack): Alter in accordance with new operand.
	* i386.md (allocate_stack): Likewise.
	* rs6000.md (allocate_stack): Likewise.

Wed Sep 17 13:34:43 1997  Robert Lipe  <robertl@dgii.com>

	* i386/xm-sco5.h (sys_siglist, SYS_SYGLIST_DECLARED): Define.

Wed Sep 17 13:27:05 1997  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>

	* Makefile.in (native): Correct dependency to auto-config.h from
 	config.h.

Tue Sep 16 10:02:02 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* libgcc2.c (find_exception_handler): Not found is -1.

	* integrate.c (expand_inline_function): Move expand_start_bindings
	after expanding the arguments.

	* i386.c (ix86_prologue): Pass SYMBOL_REF to
	gen_prologue_{get_pc,set_got}.
	* i386.md (prologue_set_got, prologue_get_pc): Adjust.

Tue Sep 16 07:33:15 1997  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>

	* fold-const.c (make_range): Correctly handle cases of converting
	from unsigned to signed type.

	* function.c (flush_addressof): New function.

	* combine.c (num_sign_bit_copies): If asking about wider mode,
	treat like paradoxical subreg.

Tue Sep 16 00:26:52 1997  Jeffrey A Law  (law@cygnus.com)

	* cse.c (simplify_relational_operation): If MODE specifies mode wider
	than HOST_WIDE_INT, high word of CONST_INT is derived from sign bit
	of low word.

Tue Sep 16 00:13:20 1997  Nick Clifton  <nickc@cygnus.com>

	* v850.c ({register,pattern}_is_ok_for_epilogue): New functions.
	(construct_{save,restore}_jr, pattern_is_ok_for_prologue): Likewise.
	* v850.h (pattern_is_ok_for_{pro,epi}logue): New predicates.
	(register_is_ok_for_epilogue): Likewise.
	* v850.md: Replace prologue and epilogue patterns with a
	match_parallel pattern.
	* v850.c (output_move_single_unsigned): Cope with zero
	extending and moving between registers at the same time.

Mon Sep 15 22:02:46 1997  Jeffrey A Law  (law@cygnus.com)

	* fixinc.math: New file to fix math.h on some systems.
	* configure.in (*-*-freebsd*, *-*-netbsd*): Use fixinc.math on these
	systems.
   
Mon Sep 15 18:58:36 1997  J"orn Rennecke <amylaar@cygnus.co.uk>

	* sched.c (update_flow_info) When looking if to set found_split_dest
	or found_orig_dest, look at all parts of a PARALLEL.

	* sh.md (casesi_0): Reduce functionality, exclude insns from
	mova onwards.  Changed expander caller.
	(casesi_worker_0): New insn.
	(casesi_worker_0+[12]): New define_splits.
	(casesi_worker): Need no gen_* function.
	(casesi): Use casesi_worker_0 instead of casesi_worker.
	* sched.c (update_flow_info): Don't pass SCRATCH to dead_or_set_p.

Mon Sep 15 11:43:38 1997  Jason Merrill  <jason@yorick.cygnus.com>

	Support dwarf2 unwinding on PUSH_ROUNDING targets like the x86.
	* dwarf2.h: Add DW_CFA_GNU_args_size.
	* frame.c (execute_cfa_insn): Likewise.
	* dwarf2out.c (dwarf_cfi_name, output_cfi): Likewise.
	(dwarf2out_args_size, dwarf2out_stack_adjust): New fns.
	(dwarf2out_frame_debug): If this isn't a prologue or epilogue
	insn, hand it off to dwarf2out_stack_adjust.
	(dwarf2out_begin_prologue): Initialize args_size.
	* frame.h (struct frame_state): Add args_size.
	* libgcc2.c (__throw): Use args_size.
	* final.c (final_scan_insn): If we push args, hand off all insns
	to dwarf2out_frame_debug.
	* defaults.h (DWARF2_UNWIND_INFO): OK for !ACCUMULATE_OUTGOING_ARGS.

	* dwarf2out.c (dwarf2out_frame_debug): Fix typo.
	Handle epilogue restore of SP from FP.
	* emit-rtl.c (gen_sequence): Still generate a sequence if the 
	lone insn has RTX_FRAME_RELATED_P set.

	* frame.c (extract_cie_info): Handle "e" augmentation.
	* dwarf2out.c (ASM_OUTPUT_DWARF_*): Provide definitions in the
 	absence of UNALIGNED_*_ASM_OP.
	(UNALIGNED_*_ASM_OP): Only provide defaults if OBJECT_FORMAT_ELF.
	(output_call_frame_info): Use "e" instead of "z" for augmentation.
	Don't emit augmentation fields length.
	(dwarf2out_do_frame): Move outside of #ifdefs.
	* defaults.h (DWARF2_UNWIND_INFO): Don't require unaligned data
	opcodes.

	* sparc.h (UNALIGNED_INT_ASM_OP et al): Don't define here after all.
	* sparc/sysv4.h (UNALIGNED_INT_ASM_OP): Define here.
	* sparc/sunos4.h (DWARF2_UNWIND_INFO): Define to 0.
	* sparc/sun4gas.h: New file.
	* configure.in: Use sun4gas.h if SunOS 4 --with-gnu-as.

	* collect2.c (write_c_file_stat, write_c_file_glob): Declare 
	__register_frame_table and __deregister_frame.

Mon Sep 15 19:04:34 1997  Brendan Kehoe  <brendan@cygnus.com>

	* except.c (find_exception_handler_labels): Use xmalloc instead of
	alloca, since MAX_LABELNO - MIN_LABELNO can be more than 1 million
	in some cases.

Sat Sep 13 23:13:51 1997  Paul Eggert  <eggert@twinsun.com>

	* cpplib.h (PARAMS): Fix misspelling of __STDC__.
	(cpp_get_token): Arg is cpp_reader *, not struct parse_marker *.

	* cpplib.c (cpp_fatal, cpp_file_line_for_message): New decls.
	(ppp_hash_cleanup, cpp_message, cpp_print_containing_files): Likewise.
	(copy_rest_of_line): Fix typo that prevented recognition of
	C++ style comments.
	(output_line_command, special_symbol): Use %ld for long, not %d.

	* cppexp.c (xrealloc): Declare first arg as void *, not char *.
	(cpp_lex): Cast 2nd arg of cpp_parse_escape from const char ** to
	char **.

Fri Sep 12 16:54:04 1997  Doug Evans  <dje@cygnus.com>

	* bitmap.h (bitmap_print): Don't use STDIO_PROTO.

Fri Sep 12 13:49:58 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* except.h: Prototype dwarf2 hooks.
	* expr.c: Adjust.

Thu Sep 11 18:36:51 1997  Jim Wilson  <wilson@cygnus.com>

	* local-alloc.c (contains_replace_regs): New function.
	(update_equiv_regs): When adding a REG_EQUIV note for a set of a MEM,
	verify that there is no existing REG_EQUIV note, and add a call to
	contains_place_regs.

	* m68k.h (MACHINE_STATE_{SAVE,RESTORE}): Add __HPUX_ASM__ versions.

Wed Sep 10 21:49:38 1997  Michael Meissner  <meissner@cygnus.com>

	* toplev.c (rest_of_compilation): For passes starting with
	flow_analysis, use print_rtl_with_bb instead of print_rtl.
	* print-rtl.c (print_rtl_single): Print a single rtl value to a
	file.
	* flow.c (print_rtl_with_bb): Print which insns start and end
	basic blocks.  For the start of a basic block, also print the live
	information.
	* bitmap.h (EXECUTE_IF_AND_IN_BITMAP): New macro, to iterate over
	two bitmaps ANDed together.
	(bitmap_print): Declare.
	* bitmap.c (function_obstack): Don't declare any more.
	(bitmap_obstack): Obstack for allocating links from.
	(bitmap_obstack_init): New static to say whether to initialize
	bitmap_obstack.
	(bitmap_element_allocate): Use bitmap_obstack to allocate from.
	(bitmap_release_memory): Free all memory allocated from
	bitmap_obstack.
	(toplevel): Conditionally include stdlib.h.
        (free): Provide a declaration if NEED_DECLARATION_FREE.

	* basic-block.h (EXECUTE_IF_AND_IN_REG_SET): New macro, invoke
	EXECUTE_IF_AND_IN_BITMAP.

Wed Sep 10 17:53:33 1997  J"orn Rennecke <amylaar@cygnus.co.uk>

	* sh.c (addr_diff_vec_adjust): Properly propagate considered
	address changes through alignments.

Wed Sep 10 13:10:52 1997  Per Bothner  <bothner@cygnus.com>

	* stor-layout.c (layout_type):  Simplify special BOOLEAN_TYPE handling.

Wed Sep 10 12:59:57 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* expr.c (expand_builtin): Only support __builtin_dwarf_fp_regnum()
	if DWARF2_UNWIND_INFO.

Wed Sep 10 15:43:10 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* cplus-dem.c (demangle_fund_type): Change "complex" to "__complex".

Wed Sep 10 11:13:53 1997  Paul Eggert  <eggert@twinsun.com>

	Handle `extern int errno;' correctly when fixing <errno.h>.
	* fix-header.c (recognized_extern): Use name_length when comparing.
	* scan-decls.c (scan_decls): Don't ignore the first CPP_NAME in a
 	declaration, so that we see the `extern' in `extern int errno;'.

Wed Sep 10 11:49:20 1997  Jason Merrill  <jason@yorick.cygnus.com>

	Add support for exception handling using DWARF 2 frame unwind info.
	* libgcc2.c (get_reg, put_reg, get_return_addr, put_return_addr,
	next_stack_level, in_reg_window): Helper fns.
	(__throw): Implement for DWARF2_UNWIND_INFO.

	* expr.c (expand_builtin): Handle builtins used by __throw.
	* tree.h (enum built_in_function): Add builtins used by __throw.
	* c-decl.c (init_decl_processing): Declare builtins used by __throw.
	* dwarf2out.c (expand_builtin_dwarf_fp_regnum): Used by __throw.
	* except.c (expand_builtin_unwind_init): Hook for dwarf2 __throw.
	(expand_builtin_extract_return_addr): Likewise.
	(expand_builtin_frob_return_addr): Likewise.
	(expand_builtin_set_return_addr_reg): Likewise.
	(expand_builtin_eh_stub): Likewise.
	(expand_builtin_set_eh_regs): Likewise.
	(eh_regs): Choose two call-clobbered registers for passing back values.

	* frame.c, frame.h: New files for parsing dwarf 2 frame info.
	* Makefile.in (LIB2ADD): New variable.  Add $(srcdir)/frame.c.
	(libgcc2.a): Use it instead of $(LIB2FUNCS_EXTRA) $(LANG_LIB2FUNCS)
	(stmp-multilib): Likewise.
	($(T)crtbegin.o, $(T)crtend.o): Add -fno-exceptions.

	* except.c: #include "defaults.h".
	(exceptions_via_longjmp): Default depends on DWARF2_UNWIND_INFO.
	(emit_throw): Don't defeat assemble_external if DWARF2_UNWIND_INFO.
	(register_exception_table_p): New fn.
	(start_eh_unwinder): Don't do anything if DWARF2_UNWIND_INFO.
	(end_eh_unwinder): Likewise.

	* crtstuff.c: Wrap .eh_frame section, use EH_FRAME_SECTION_ASM_OP, 
	call __register_frame and __deregister_frame as needed.
	* varasm.c (eh_frame_section): New fn if EH_FRAME_SECTION_ASM_OP.
	* dwarf2out.c (EH_FRAME_SECTION): Now a function-like macro.  Check
	EH_FRAME_SECTION_ASM_OP.
	* sparc/sysv4.h (EH_FRAME_SECTION_ASM_OP): Define.
	* mips/iris6.h: (EH_FRAME_SECTION_ASM_OP): Define.
	(LINK_SPEC): Add __EH_FRAME_BEGIN__ to hidden symbols.

	* dwarf2out.c (output_call_frame_info): If no support for
 	EXCEPTION_SECTION, mark the start of the frame info with a
 	collectable tag.
	* collect2.c (frame_tables): New list.
	(is_ctor_dtor): Recognise frame entries.
	(scan_prog_file): Likewise.
	(main): Pass -fno-exceptions to sub-compile.  Also do collection
	if there are any frame entries.
	(write_c_file_stat): Call __register_frame_table and
 	__deregister_frame as needed.
	(write_c_file_glob): Likewise.

	* defaults.h (DWARF2_UNWIND_INFO): Default to 1 if supported.  
	Also require unaligned reloc support.
	* sparc.h (UNALIGNED_SHORT_ASM_OP, UNALIGNED_INT_ASM_OP,
 	UNALIGNED_DOUBLE_INT_ASM_OP): Define here.
	* sparc/sysv4.h: Not here.

	* toplev.c (compile_file): Call dwarf2out_frame_{init,finish}.
	* dwarf2out.c (dwarf2out_init): Don't call dwarf2out_frame_init.
	(dwarf2out_finish): Don't call dwarf2out_frame_finish.

	* libgcc2.c (L_eh): Reorganize, moving code shared by different
	EH implementations to the top.
	(find_exception_handler): Split out.  Start from 0.  Compare against
	end with >=.
	(__find_first_exception_table_match): Use it.
	* except.c (output_exception_table): Don't do anything if there's
	no table.  Don't output a first entry of zeroes.
	(eh_outer_context): Adjust properly.
	(add_eh_table_entry): Use xrealloc.
	* toplev.c (compile_file): Just call output_exception_table.

Wed Sep 10 11:49:20 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* varasm.c (save_varasm_status): Take the target function context.
	* function.c (push_function_context_to): Pass it in.

	* rtl.def (ADDRESSOF): Add new field for original regno.
	* function.c (put_reg_into_stack and callers): Add original_regno
 	argument.
	(gen_mem_addressof): Remember the original regno.
	* rtl.def (INLINE_HEADER): Add new field for parm_reg_stack_loc.
	* rtl.h (PARMREG_STACK_LOC): New macro.
	(ADDRESSOF_REGNO): New macro.
	* emit-rtl.c (gen_inline_header_rtx): Add parm_reg_stack_loc.
	* function.c (max_parm_reg, parm_reg_stack_loc): No longer static.
	(assign_parms): Allocate parm_reg_stack_loc on saveable obstack.
	* integrate.c (output_inline_function): Set max_parm_reg and
 	parm_reg_stack_loc from inline header.
	(initialize_for_inline): Pass in parm_reg_stack_loc.

Wed Sep 10  11:30:36 1997  Stan Cox  <coxs@dg-rtp.dg.com>

	* i386.c (override_options): Don't set TARGET_SCHEDULE_PROLOGUE
	(ix86_expand_prologue, ix86_expand_epilogue): Emit rtl by default.
	
Wed Sep 10  11:30:36 1997  Jason Merrill  <jason@cygnus.com>
	
	* i386.c (ix86_prologue): Add dwarf2 support for !do_rtl case.

Wed Sep 10 08:48:44 1997  Jeffrey A Law  (law@cygnus.com)

	* xm-m88k.h (USG): Only define if it hasn't already been defined.

	* i386.h (CPP_CPU_DEFAULT): Avoid using #elif.

	* expr.c (do_jump_by_parts_equality_rtx): Don't clobber the
	source operand when performing an IOR of the parts.

	* expr.c (emit_block_move): Always return a value.

	* expr.c (clear_storage): Use CONST0_RTX instead of const0_rtx.
	when clearing non-BLKmode data.

	* final.c (shorten_branches): Remove last change for ADDR_VEC
	alignment computation.   During first pass, assume worst
	possible alignment for ADDR_VEC and ADDR_VEC_DIFF insns.

Wed Sep 10 09:33:19 1997  Kamil Iskra  <iskra@student.uci.agh.edu.pl>

	* explow.c (emit_stack_save, emit_stack_restore): Correctly
	handle HAVE_{save,restore}_stack_* evaluating to 0.

Wed Sep 10 09:27:45 1997  Weiwen Liu  <liu@hepvms.physics.yale.edu>

	* Makefile.in (sdbout.o): Add dependency on insn-config.h.

Wed Sep 10 09:24:56 1997  Nick Burrett  <n.a.burrett@btinternet.com>

	* sched.c (birthing_insn_p): Rename prototype decl from birthing_insn.
	* final.c (leaf_renumber_regs, alter_cond): Declare prototype only
	if LEAF_REGISTERS is defined.
	* reload1.c (merge_assigned_reloads): Declare prototype only if
	SMALL_REGISTER_CLASSES is defined.
	* loop.c (replace_call_address): Pre-process out prototype decl.
	* real.c (dectoe, etodec, todec): Declare proto if DEC is defined
	(ibmtoe, etoibm, toibm): Declare proto if IBM is defined

Wed Sep 10 09:13:51 1997  Manfred Hollstein  <manfred@s-direktnet.de>

	* configure.in (out_file): Emit definition to config.status.

Wed Sep 10 08:37:56 1997  J"orn Rennecke <amylaar@cygnus.co.uk>

	* final.c (shorten_branches): Fix alignment calculation.
	Don't count the lengths of deleted instructions.

Wed Sep 10 08:34:11 1997  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* cpplib.c (cpp_start_read): Make known_suffixes static.

Wed Sep 10 08:27:05 1997  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* m68k.c (print_operand_address) [MOTOROLA]: When compiling
	with -fpic (not -fPIC) force the GOT offset to 16 bits.

Wed Sep 10 08:22:51 1997  Christian Iseli  <chris@lslsun.epfl.ch>

	* expr.c (convert_move): Add missing use of trunctqtf2.

Wed Sep 10 08:17:10 1997  Torbjorn Granlund  <tege@pdc.kth..se>

	* except.c (eh_outer_context): Do masking using expand_and.

Wed Sep 10 07:52:21 1997  Joel Sherrill  <joel@OARcorp.com>

        * pa/rtems.h (subtarget_switches): Removed -mrtems subtarget_switch.
        * configure.in (sh*-*-rtems*): New target.
        * sh.h (TARGET_SWITCHES: Call SUBTARGET_SWITCHES.
	(SUBTARGET_SWITCHES): Provide default definition.

Wed Sep 10 06:33:47 1997  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>

	* i386/mingw32.h ({LIB,LINK}_SPEC): Check for -mwindows, not -windows.

	* alpha/vms.h (ASM_OUTPUT_SECTION): Clear NAME if overlaid.

	* c-parse.in (unary_expr): Test DECL_C_BIT_FIELD, not DECL_BIT_FIELD.
	* c-typeck.c (default_conversion): Likewise.

	* tree.c (contains_placeholder_p, substitute_in_expr):
	Handle placeholders inside args of CALL_EXPR (and hence in TREE_LIST).

	* expr.c (expand_expr, case PLACEHOLDER_EXPR): Check all
	expressions in placeholder_list.

Tue Sep  9 18:10:30 1997  Doug Evans  <dje@cygnus.com>

	Add port done awhile ago for the ARC cpu.
	* arc.h, arc.c, arc.md, t-arc, xm-arc.h: New files.
	* arc/initfini.c, arc/lib1funcs.asm: New files.
	* ginclude/va-arc.h: New file.
	* ginclude/stdarg.h: Include va-arc.h ifdef __arc__.
	* ginclude/varargs.h: Likewise.
	* Makefile.in (USER_H): Add va-arc.h.
	* configure.in (arc-*-elf*): Recognize.
	* longlong.h: Add ARC support.

Tue Sep  9 01:30:37 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* mips.h (DWARF_FRAME_REGNUM): Use the same numbering regardless of
	write_symbols.

Mon Sep  8 15:15:11 1997  Nick Clifton  <nickc@cygnus.com>

	* v850.h (ASM_SPEC): Pass on target processor.
	(CPP_PREDEFINES): Only define if not already specified.
	(TARGET_VERSION): Only define if not already specified.
	(MASK_CPU, MASK_V850, MASK_DEFAULT): Bits to specify target
	processor. 
	(EXTRA_SWITCHES): Extra entries in the switches array.
	(TARGET_DEFAULT): Set default target processor.

Tue Sep  9 09:50:02 1997  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>

	* configure.in (alpha*-*-*): Support pca56 and ev6.

	* varasm.c (named_section): Set in section after writing directive.
	* dwarf2out.c (output_call_frame_info): Call named_section.

Mon Sep  8 16:32:43 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* mips.c (function_prologue): Set up the CFA when ABI_32.

	* sparc.c (save_regs): Check dwarf2out_do_frame instead of DWARF2_DEBUG
	for dwarf2 unwind info.
	(output_function_prologue, sparc_flat_output_function_prologue): Same.

	* final.c (final_end_function): Check dwarf2out_do_frame instead
 	of DWARF2_DEBUG for dwarf2 unwind info.
	(final_scan_insn): Likewise.
	(final_start_function): Likewise.  Initialize dwarf2 frame debug here.
	(final): Not here.

	* expr.c (expand_builtin_return_addr): Only SETUP_FRAME_ADDRESSES if
	count > 0.

	* varasm.c (exception_section): Check EXCEPTION_SECTION first.

Mon Sep  8 14:58:07 1997  Jim Wilson  <wilson@cygnus.com>

	* toplev.c (main): Change #elif to #else/#ifdef

	* i386/t-sol2 (TARGET_LIBGCC2_CFLAGS): Define to -fPIC.

Mon Sep  8 08:45:19 1997  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>

	* alpha.h (processor_type): Add EV6.
	({TARGET,MASK}_BWX): Renamed from _BYTE_OPS.
	({TARGET,MASK}_{CIX,MAX}): New macros.
	(MASK_CPU_EV5): Change bit number.
	(MASK_CPU_EV6, {TARGET,MASK}_SUPPORT_ARCH): New macros.
	(TARGET_OPTIONS): Rename "byte" to "bwx" and add "cix" and "max".
	(MINIMUM_ATOMIC_ALIGNMENT): Rename TARGET_BYTE_OPS to TARGET_BWX.
	(SECONDARY_{INPUT,OUTPUT}_RELOAD_CLASS, ASM_FILE_START): Likewise.
	(SECONDARY_MEMORY_NEEDED): Not needed if CIX.
	(ASM_FILE_START): Only write if TARGET_SUPPORT_ARCH.
	Add "pca56" and "ev6".
	* alpha.c (input_operand): Rename TARGET_BYTE_OPS to TARGET_BWX.
	(override_options): Likewise; also add new CPU types and subset flags.
	* alpha.md: Rename TARGET_BYTE_OPS to TARGET_BWX.
 	(cpu attr): Add "ev6".
	(ev5 function units): Use for ev6 as well, for now.
	(ffsdi2): New define_expand and define_insn, for TARGET_CIX.
	(sqrt[sd]f2): New patterns, for TARGET_CIX.
	(s{min,max}[qh]i3): New patterns, for TARGET_MAX.
	(movsi): Use ldf/lsf when appropriate, instead of lds/sts.
	(mov[sd]i): Add use of ftio/itof for TARGET_CIX.
	* configure.in (alpha*-dec-osf*): Set MASK_SUPPORT_ARCH for >= 4.0B.
	Rename MASK_BYTE_OPS to MASK_BWX.

	* i386/mingw32.h (STANDARD_INCLUDE_DIR): New macros.
	(STARTFILE_SPEC, PATH_SEPARATOR): Likewise.

	* configure.in (AC_PROG_LN_S): Remove; unneeded.
	(*cygwin32*, *mingw32*): Default prefix to /usr.
	(symbolic_link): Set to "cp -p" if no "ln -s"; add AC_SUBST.
	(configure.lang call): Change remaining use of config.h to auto-conf.h.

	* Makefile.in (LN): Add new symbol.
	(FLAGS_TO_PASS): Pass it down.
	(stage[1-4]-start): Use $(LN), not "ln -s".

	* mips.h (flag_omit_frame_pointer, frame_pointer_needed, optimize):
	Remove declarations: no longer needed.
	* pyr.md: Remove unneeded declarations of `optimize'.
	* h8300.md: Likewise.
	* sparc.c (dwarf2out_cfi_label): Add declaration.
	(save_regs, output_function_prologue): Remove cast for it.
	(sparc_flat_{save_restore,output_function_prologue): Likewise.
	({save,restore}_regs): No longer inline.

Mon Sep  8 03:08:35 1997  Jim Wilson  <wilson@cygnus.com>

	* i960.h (LINK_SPEC): Handle -mjX and -mrp switches.

	* mips.md (nonlocal_goto_receiver): Define.

	* unroll.c (calculate_giv_inc): Handle increment with code PLUS.

	* alpha.h (PREFERRED_RELOAD_CLASS): Return NO_REGS if NO_REGS
	is passed in.
	* emit-rtl.c (gen_lowpart_common): Add code to convert CONST_INT to
	SFmode for 64 bit hosts.

	* profile.c (output_arc_profiler): Verify next_insert_after is an
	INSN before and after skipping a stack pop.  Check next_insert_after
	for non NULL before deferencing it.
	(output_func_start_profiler): Set DECL_EXTERNAL to zero.

	* va-mips.h: Add _VA_MIPS_H_ENUM ifdef/define/endif.

	* m68k.md (iorsi_zexthi_ashl16): Disable.

	* varasm.c (mark_constants): Don't look inside CONST_DOUBLEs.

Sun Sep  7 18:30:46 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* dwarf2out.c (dwarf2out_frame_debug): Assume that in a PARALLEL
 	prologue insn, only the first elt is significant.
	(output_call_frame_info): For exception handling, always use 4-byte
 	fields as specified by the dwarf2 spec.
	Don't skip trivial FDEs.

Sun Sep  7 03:35:28 1997  Paul Eggert  <eggert@twinsun.com>

	* fix-header.c (std_include_table): Remove bogus entry for popen
	under stdio.h with ANSI_SYMBOL.  popen is a POSIX2_SYMBOL.

Fri Sep  5 17:19:58 1997  J"orn Rennecke <amylaar@cygnus.co.uk>

	* sh.md (movsf_ie+1): Typo fix.

Fri Sep  5 10:08:44 1997  Jeffrey A Law  (law@cygnus.com)

	* v850: New directory for v850 port.
	* v850/lib1funcs.asm: New file.
	* t-v850, v850.c, v850.h, v850.md, xm-v850.h: New files.
	* ginclude/va-v850.h: New file.
	* varargs.h, stdarg.h: Include va-mn10200.h.
	* configure.in (mn10200-*-*): New target.
	* Makefile.in (USER_H): Add va-mn10200.h. 

	* xm-svr4.h (SYS_SIGLIST_DECLARED): Define.
	* mips/xm-news.h (SYS_SIGLIST_DECLARED): Define.
	* mips/xm-sysv4.h (SYS_SIGLIST_DECLARED): Define.

Fri Sep  5 03:50:15 1997  David Edelsohn  <edelsohn@mhpcc.edu>

	* rs6000.md (fma patterns): Extend previous -mno-fused-madd
	patch to DFmode patterns inadvertently omitted.

Thu Sep  4 20:06:02 1997  Christian Kuehnke  <Christian.Kuehnke@arbi.Informatik.Uni-Oldenburg.DE>

	* sparc.md: Add ultrasparc scheduling support.
	* sparc.h (RTX_COSTS): For MULT give v9 a cost of 25 insns.

Wed Sep  3 20:56:24 1997  J"orn Rennecke <amylaar@cygnus.co.uk>

	* sh.h (UNALIGNED_SHORT_ASM_OP, UNALIGNED_INT_ASM_OP): Define.

Wed Sep  3 20:52:07 1997  Joel Sherrill  <joel@OARcorp.com>

	* sh/rtems.h: New file.

Wed Sep 3  17:30:36 1997  Stan Cox  <coxs@dg-rtp.dg.com>

	* reg-stack.c (subst_stack_regs): Pop the stack register for a
	computed goto which sets the same stack register.

Wed Sep 3  17:30:36 1997  Jim Wilson  <wilson@cygnus.com>

	* i386.c (ix86_expand_epilogue): Emit blockage instruction when pic.
	
Wed Sep  3 11:25:19 1997  Jeffrey A Law  (law@cygnus.com)

	* pa.md (reload peepholes): Fix typo in last change.

Wed Sep  3 03:02:02 1997  J"orn Rennecke <amylaar@cygnus.co.uk>

	* sh.md (movsi_ie): Move t/r alternative after r/r alternative.

Tue Sep  2 18:41:55 1997  Jeffrey A Law  (law@cygnus.com)

	* cccp.c (sys_errlist): Remove special 4.4bsd declaration.
	* collect2.c (sys_errlist): Likewise.
	* cpplib.c (sys_errlist): Likewise.
	* gcc.c (sys_errlist): Likewise.
	* protoize.c (sys_errlist): Likewise.
	* configure.in: Check for strerror.
	* xm-freebsd.h (HAVE_STRERROR): Remove definition.
	* xm-gnu.h (HAVE_STRERROR): Likewise.
	* xm-linux.h (HAVE_STRERROR): Likewise.
	* xm-netbsd.h (HAVE_STRERROR): Likewise.
	* alpha/xm-linux.h (HAVE_STRERROR): Likewise.
	* i386/xm-bsd386.h (HAVE_STRERROR): Likewise.
	* i386/xm-cygwin32.h (HAVE_STRERROR): Likewise.
	* i386/xm-dos.h (HAVE_STRERROR): Likewise.
	* i386/xm-mingw32.h (HAVE_STRERROR): Likewise.
	* pa/xm-pa.h (HAVE_STRERROR): Likewise.
	* pa/xm-papro.h (HAVE_STRERROR): Likewise.
	* rs6000/xm-cygwin32.h (HAVE_STRERROR): Likewise.
	* rs6000/xm-sysv4.h (HAVE_STRERROR): Likewise.

	* collect2.c (SYS_SIGLIST_DECLARED): Renamed from
	DONT_DECLARE_SYS_SIGLIST.
	* mips-tfile.c (SYS_SIGLIST_DECLARED): Likewise.
	* xm-linux.h (DONT_DECLARE_SYS_SIGLIST): Delete definition.
	* xm-freebsd.h (DONT_DECLARE_SYS_SIGLIST): Likewise.
	* alpha/xm-linux.h (DONT_DECLARE_SYS_SIGLIST): Delete definition.
	* i386/xm-bsd386.h (DONT_DECLARE_SYS_SIGLIST): Likewise.
	* i386/xm-sysv4.h (DONT_DECLARE_SYS_SIGLIST): Likewise.
	* mips/xm-sysv4.h (DONT_DECLARE_SYS_SIGLIST): Likewise.
	* rs6000/xm-sysv4.h (DONT_DECLARE_SYS_SIGLIST): Likewise.
	* sparc/xm-sol2.h (DONT_DECLARE_SYS_SIGLIST): Likewise.
	* configure.in: Check for sys_siglist declaration.

	* Makefile.in (libgcc2.a): Add missing "else true" clause.
	(stage{1,2,3,4}-start): Likewise.

	* mn10200.h (INITIALIZE_TRAMPOLINE): PC relative instructions
	are relative to the next instruction, not the current instruction.

Tue Sep  2 14:15:32 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* toplev.c (xrealloc): Handle null ptr.

Tue Sep  2 13:42:38 1997  Paul N. Hilfinger  <hilfingr@CS.Berkeley.EDU>

	* fixincludes: Permits spaces between # and define.  Discard C++
 	comments in sys/pci.h on HP/UX 10.20.

Tue Sep  2 09:28:31 1997  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>

	* rs6000.h (ROUND_TYPE_ALIGN): Don't blow up if no fields in record.

Tue Sep  2 00:19:01 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* expr.c (expand_expr, case COND_EXPR): It's OK to merge two
 	SAVE_EXPRs.

Mon Sep  1 23:36:45 1997  Jeffrey A Law  (law@cygnus.com)

	* pa.c (restore_unscaled_index_insn_codes): New function.
	(record_unscaled_index_insn_codes): Likewise.
	(output_function_prologue): Call restore_unscaled_index_insn_codes.
	(output_function_epilogue): Free memory for unscaled_index_insn_codes.
	(pa_reorg): Call record_unscaled_index_insn_codes.

Mon Sep  1 14:46:09 1997  J"orn Rennecke <amylaar@cygnus.co.uk>

	* sh.md (casesi_jump_1, casesi_jump2): Generate expanders.
	(casesi_jump): Delete.
	(casesi) Use gen_casesi_jump_1 and gen_casesi_jump2 instead of
	gen_casesi_jump.

Mon Sep  1 14:36:36 1997  Paul Eggert  <eggert@twinsun.com>

	* sparc/sol2.h (CPP_SPEC): Add -D__STDC__=0 unless -ansi
	or -traditional, for compatibility with Sun's practice.
	* i386/sol2.h (CPP_SPEC), rs6000/sol2.h (CPP_SPEC): Likewise.
	* configure.in ({sparc,i[3456]86,powerpcle}-*-solaris2*):
	Set fixincludes=Makefile.in.

Mon Sep  1 14:08:23 1997  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* Makefile.in (config.status): Depend on version.c.

Mon Sep  1 13:48:02 1997  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>

	* acconfig.h: Remove include of config2.h.
	* configure.in: Build auto-config.h, not config.h, from autoconf data.
	Add auto-conf.h in front of all other host_xm_file entries.
	Make config.h, not config2.h, from host_xm_file.
	* Makefile.in (auto-config.h): New rule; was config.h.
	(distclean): Remove auto-config.h, not config2.h.

	* expr.c (do_jump_by_parts_equality_rtx): Try to do by IOR of
	all the words.

Mon Sep  1 13:07:36 1997  Bob Manson  <manson@charmed.cygnus.com>

	* sparc/t-vxsparc (TARGET_LIBGCC2_CFLAGS): New definition.
	(LIBGCC2_CFLAGS): Deleted.
	* m68k/t-vxworks68: Likewise.
	* i960/t-vxworks960: Likewise.
	* a29k/t-vx29k: Likewise.

Sun Aug 31 17:12:27 1997   Paul Eggert  <eggert@twinsun.com>

	* real.c (EMULONG): Correct typo in spelling of HOST_BITS_PER_LONGLONG.

Fri Aug 29 16:13:51 1997  Jeffrey A Law  (law@cygnus.com)

	* mips.md (movstrsi_internal[23]): Set insn type to "store" to
	get more accurate schedules.

	* pa.md (reload_peepholes): Make sure operand is a REG before
	examining REGNO.  Allow general registers too.

Thu Aug 28 12:34:56 1997  Doug Evans  <dje@seba.cygnus.com>

	* reload1.c (reload_cse_no_longer_dead): Don't pass incremented regno
	to SET_HARD_REG_BIT, it can be evaluated twice.

Wed Aug 27 20:15:53 1997  J"orn Rennecke <amylaar@cygnus.co.uk>

	* sh/elf.h: (LINK_SPEC): Use shlelf.
	(USER_LABEL_PREFIX, LOCAL_LABEL_PREFIX, ASM_FILE_START): Redefine.
	* sh/lib1funcs.asm (___ashrsi3, ___ashlsi3, ___lshrsi3):
	Truncate shift count.  Use braf if not SH1.
	* sh.c (sfunc_uses_reg): No longer static.
	Check for SImode inside the USE.
	(shiftcosts, expand_ashiftrt, shl_sext_kind): 
	Use SH_DYNAMIC_SHIFT_COST.
	(sh_dynamicalize_shift_p, output_branchy_insn): New functions.
	(output_ieee_ccmpeq, mova_p, cache_align_p, fixup_aligns): Likewise.
	(branch_offset, short_cbranch_p, med_branch_p): Likewise.
	(braf_branch_p, align_length, fixup_addr_diff_vecs): Likewise.
	(addr_diff_vec_adjust, get_dest_uid, gen_far_branch): Likewise.
	(split_branches, regs_used, gen_block_redirect): Likewise.
	(from_compare): Can't compare non-zero DImode constant directly.
	Emit special code for TARGET_SH3E floating point with code == GE.
	Force 0.0 into a register for SH3E.
	(print_operand): Add ','.
	Emit the actual comparison instruction.
	(sh_builtin_saveregs): Save floating point registers in order that
	allows pre-decrement.
	(find_barrier): New arguments num_mova and mova.  Changed caller.
	When rewinding to before a mova, also restore the last found barrier.
	Branch is now known to be shortened.
	Prefer barriers where no new alignment is needed.
	More generic alignment for cache lines.
	Add checks for pieces of code that use more table space than their
	own size.
	Fix up the barrier we return so that the alignment will always be
	after the table.
	Remove limit adjustments for table alignment.
	Handle PARALLELs correctly.
	(machine_dependent_reorg): Add extra pass to split insns.
	Don't scan instructions twice for broken moves.
	Calculate insn length, call fixup_addr_diff_vecs.
	Call split_branches.
	Add alignment for loops and after BARRIERs.
	Initialize max_uid_before_fixup_addr_diff_vecs.
	Advance mdep_reorg_phase.
	Clear insn_addresses.
	(output_far_jump): Use braf and/or pre-allocated scratch register
	when possible.
	(expand_ashiftrt): Truncate shift count.
	(push_regs): Push PR last.
	(sh_expand_epilogue): Pop PR first.
	(code_for_indirect_jump_scratch, mdep_reorg_phase): New variables.
	(uid_align, uid_align_max): Likewise.
	(max_uid_before_fixup_addr_diff_vecs, sh_addr_diff_vec_mode): Likewise.
	(braf_label_ref_operand): New predicate.
	(initial_elimination_offset): calculate offset from
	RETURN_ADDRESS_POINTER_REGNUM starting with total_saved_regs_space.
	(output_branch): Expect out-of-range condbranches to have been split.
	* sh.md (rotlsi3_16): Named insn.
	(rotlsi3): Rewritten to use superoptimizer patterns.
	(adddi3, subdi3, ashrsi2_16, ashrsi2_31): Always split.
	(movsi_i, movsi_ie): replace t/z alternative with t/r alternative.
	Use pcload_si and load_si insn types.
	(adddi3+1, subdi3+1, ashrsi2_16+1, ashrsi2_31+1) New define_splits.
	(addc, subc, ashlsi_c): New insns.
	(attribute "type"): New values dyn_shift, load_si, pcload_si, fmove,
	jump_ind, arith3 and arith3b.
	(function_unit "fp"): Take fmove into account.
	(function_unit "int"): Uses one cycle for !dyn_shift.
	(function_unit "memory"): Special case for load_si and pcload_si.
	(attribute "in_delay_slot): handle pcload_si.
	(cmpgtdi_t, cmpgedi_t, cmpgeudi_t, cmpgtudi_t): Type arith3.
	(cmpsi+1, cmpeqdi_t) Type arith3b.
	(movsf_ie, alternatives f/fGH/X, f/y/X, y/f/X): Type fmove.
	(extendsidi2): Delete.
	(cmpeqsi_t-2): Delete. (Redundant with movt.)
	(*rotlhi3_8) Name.
	(iorsi3, rotlsi3_1, rotlsi3_31, rotlsi3_16, (*rotlhi3_8): Type arith.
	(ashlsi3_k, ashlhi3_ki, ashrsi2_16, ashrsi2_31, lshrsi3_m): Likewise.
	(lshrsi3_k, lshrhi3_m, lshrhi3_k, ashldi3_k, lshrdi3_k): Likewise.
	(ashrdi3_k, xtrct_left, xtrct_right, dect, mova, movt): Likewise.
	(movt): Likewise.
	(ashlsi3_d, ashrsi3_d, lshrsi3_d): Type dyn_shift.
	(indirect_jump_scratch, *casesi_jump_1, *casesi_jump_2): Type jump_ind.
	(ashlsi3, ashlsi3_n, lshrsi3, lshrsi3_n): Use sh_dynamicalize_shift_p.
	(movsf_ie+1, movsf_ie+2): Exchange.
	(cmpeqdi_t-1, cmpeqdi_t, cmpgtdi_t, cmpgedi_t): New insns.
	(cmpgeudi_t, cmpgtudi_t, movsi_i_lowpart, ieee_ccmpeqsf_t): Likewise.
	(cmpdi, movnegt): New define_expands.
	(movsi_ie): Add y,y alternative.
	(sge): Use it for ! TARGET_IEEE.  Use special code for TARGET_IEEE.
	(sle): Use sge.
	(align_4, casesi_jump): Now define_expand.
	(casesi_0, addr_diff_vec_adjust, align_log): New patterns.
	(*casesi_jump_[12]): Likewise.
	(casesi): Use casesi_0 and casesi_jump.
	(casesi_worker): Depends on the mode used for the table.
	(define_delay for cbranches):  Test TARGET_SH2.
	Changed all callers of from_compare.
	(attribute "length"): Take use of braf and scratch registers into
	account.
	(indirect_jump_scratch, block_branch_redirect): New patterns.
	(jump): Call output_far_jump for any jump larger than 4 bytes.
	(inverse_branch_true, inverse_branch_false): Remove.
	(bne, blt, ble, bltu, bleu): Canonicalize.
	(attribute "cpu"): Remove "sh0" alternative.
	* sh.h (ADJUST_COST): Lower cost of non-address sfunc dependencies.
	Adjust cost of load_si / pcload_si insns when not used for call.
	(enum reg_class): Move GENERAL_REGS after FPUL_REGS.
	(REG_CLASS_NAMES, REG_CLASS_CONTENTS): Likewise.
	(REGISTER_MOVE_COST): Add costs for fpul <-> mac, pr moves.
	Fix to match default cost in regclass.  Move to T reg not costly.
	When checking for GENERAL_REGS, check for R0_REGS too.
	(INITIALIZE_TRAMPOLINE): Include code for constant parts.
	(SHIFT_COUNT_TRUNCATED): Not true for TARGET_SH3.
	(CPP_SPEC): Define __sh1__ if no specific cpu is selected.
	(FUNCTION_BOUNDARY): Align to cache line boundary.
	(optimize, sh_addr_diff_vec_mode, machine_dependent_reorg): Declare.
	(addr_diff_vec_adjust, code_for_indirect_jump_scratch): Declare.
	(short_cbranch_p, med_branch_p, braf_branch_p, align_length): Declare.
	(output_ieee_ccmpeq, output_branchy_insn, sfunc_uses_reg): Declare.
	(ASM_OUTPUT_ADDR_DIFF_ELT): Depends on sh_addr_diff_vec_mode.
	(PREDICATE_CODES): Add braf_label_ref_operand and register_operand.
	(IEEE_BIT, TAGET_IEEE, LOCAL_LABEL_PREFIX, ASSEMBLER_DIALECT): Define.
	(CACHE_LOG, enum mdep_reorg_phase_e, TRAMPOLINE_ALIGNMENT): Define.
	(SH_DYNAMIC_SHIFT_COST): Define.
	(TARGET_SWITCHES): Remove -m0 entry.  Add -mieee, -mno-ieee.
	(OVERRIDE_OPTIONS): sh_cpu defaults to CPU_SH1.
	Initialize sh_addr_diff_vec_mode.
	(REG_ALLOC_ORDER): Move FP0 behind FP7.
	Move all FP registers in front of the general registers.
	(SECONDARY_OUTPUT_RELOAD_CLASS): Add case for MAC_REGS / PR_REGS.
	When checking for GENERAL_REGS, check for R0_REGS too.
	Fix direction of compares to {FIR,LA}ST_FP_REG.
	(SECONDARY_INPUT_RELOAD_CLASS): check for fp_one_operand.
	(ASM_OUTPUT_ALIGN_CODE, ASM_OUTPUT_LOOP_ALIGN, SH0_BIT): Delete.
	(TARGET_SH0, PUSH_ROUNDING, TRAMPOLINE_TEMPLATE): Delete.
	(TRAMPOLINE_ALIGN): Delete.
	(processor_type): Remove PROCESSOR_SH0.
	(ADJUST_INSN_LENGTH): Remove check for preceding BARRIER.
	Adjust ADDR_DIFF_VECs.  Add code for alignment instructions.
	Check if insn needing a delay slot is already inside a SEQUENCE.

	* va-sh.h (__va_rounded_size): Delete.
	(__LITTLE_ENDIAN_P, __SCALAR_TYPE, __PASS_AS_FLOAT): Define.
	(va_arg): Unify big and little endian code.
	Optimization for small integers.

	From Fred Fish:
	* sh.h (INITIAL_ELIMINATION_OFFSET): Proper bracketing.
	(REGNO_REG_CLASS, PREFERRED_RELOAD_CLASS): Likewise.
	(SECONDARY_{OUTPUT,INPUT}_RELOAD_CLASS, LIBCALL_VALUE): Likewise.
	(ROUND_ADVANCE, FUNCTION_ARG, FUNCTION_ARG_PARTIAL_NREGS): Likewise.
	(FUNCTION_PROFILE, FUNCTION_EPILOGUE, RETURN_ADDR_RTX): Likewise.
	(REGNO_OK_FOR_INDEX_P, EXTRA_CONSTRAINT_Q, MODE_DISP_OK_4): Likewise.
	(GO_IF_LEGITIMATE_{INDEX,ADDRES}, LEGITIMIZE_ADDRESS): Likewise.
	(CONST_COSTS, REGISTER_MOVE_COST, ASM_OUTPUT_CONSTRUCTOR): Likewise.
	(ASM_OUTPUT_CONSTRUCTOR, ASM_OUTPUT_DESTRUCTOR): Likewise.
	(ASM_OUTPUT_REG_PUSH, ASM_OUTPUT_REG_POP, ASM_OUTPUT_LABEL): Likewise.
	(ASM_OUTPUT_ALIGN),  ASM_DECLARE_FUNCTION_NAME): Likewise.
	(ASM_GLOBALIZE_LABEL, ASM_OUTPUT_CASE_LABEL): Likewise.
	(ASM_OUTPUT_ADDR_DIFF_ELT, ASM_OUTPUT_ADDR_VEC_ELT) Likewise.
	(ASM_OUTPUT_DOUBLE, ASM_OUTPUT_FLOAT, ASM_OUTPUT_INT): Likewise.
	(ASM_OUTPUT_SHORT, ASM_OUTPUT_CHAR, ASM_OUTPUT_BYTE): Likewise.
	(ASM_OUTPUT_SKIP, FINAL_PRESCAN_INSN, PRINT_OPERAND): Likewise.
	(PRINT_OPERAND_ADDRESS, HANDLE_PRAGMA, ADJUST_INSN_LENGTH): Likewise.
	(PROMOTE_MODE): Likewise.
	(ASM_GENERATE_INTERNAL_LABEL): Use LOCAL_LABEL_PREFIX.
	(ASM_OUTPUT_INTERNAL_LABEL): Use %L.
	* sh/elf.h: (ASM_OUTPUT_LABELREF): Use %U.
	(ASM_GENERATE_INTERNAL_LABEL): Use LOCAL_LABEL_PREFIX.
	(ASM_OUTPUT_INTERNAL_LABEL, ASM_OUTPUT_SOURCE_LINE): Use %L.

Wed Aug 27 16:42:21 1997  Bob Manson  (manson@cygnus.com)

	* t-h8300 (TARGET_LIBGCC2_CFLAGS): New definit.
	(LIBGCC2_CFLAGS): Deleted.
	* t-mn10200: Likewise.

Wed Aug 27 17:10:51 1997  Jim Wilson  <wilson@cygnus.com>

	* m68k.md (iorsi3_internal): Readd ! TARGET_5200 check lost in
	last change.

Wed Aug 27 15:19:55 1997  J"orn Rennecke <amylaar@cygnus.co.uk>

	* dwarfout.c (dwarfout_start_new_source_file): Strip leading '*'s
	from label names.

Wed Aug 27 14:33:38 1997  Jim Wilson  <wilson@cygnus.com>

	* reload.c (find_reloads, case '0'): Reject matching a non-offsettable
	address where an offsettable address is required.

Wed Aug 27 10:38:32 1997  Jeffrey A Law  (law@cygnus.com)

	* reorg.c (dbr_schedule): Allow current_function_return_rtx
	to be something other than a REG.
	* function.c (expand_function_end): Fix current_function_return_rtx
	if it was a pseudo.

	* t-freebsd (USER_H): Include EXTRA_HEADERS and LANG_EXTRA_HEADERS.
	* x-netbsd: Likewise
	* x-dgux (USER_H): Include EXTRA_HEADERS and LANG_EXTRA_HEADERS
	(INSTALL_HEADERS): Delete.
	* x-dguxbcs: Likewise.
	* x-hp3bsd44: Likewise
	* x-pa: Likewise.

Wed Aug 27 07:15:58 1997  Klaus Espenlaub  <kespenla@hydra.informatik.uni-ulm.de>

	* configure.in (AC_PROG_CC, AC_PROG_MAKE_SET): Check for gcc before
	testing for flex.
 
Wed Aug 27 02:24:35 1997  Jim Wilson  <wilson@cygnus.com>

	* dwarfout.c (dwarfout_file_scope_decl, case TYPE_DECL): Check
	TYPE_DECL_IS_STUB instead of DECL_NAME.

	* Makefile.in (install-info): Don't cd into srcdir.  Add srcdir to
	filenames.  Use sed to extract base filename for install.

Wed Aug 27 01:56:18 1997  Doug Evans  <dje@seba.cygnus.com>

	* loop.c (combine_movables): Earlier insns don't match later ones.

	* c-decl.c (grokdeclarator): If array index or size calculations
	overflow, issue an error.
	* fold-const.c (int_const_binop): New static function.
	(const_binop, size_binop): Call it.

Tue Aug 26 17:51:56 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* collect2.c (main): Check SCAN_LIBRARIES instead of LDD_SUFFIX
	to decide whether to always emit init and fini handles.

Tue Aug 26 13:51:10 1997  Jim Wilson  <wilson@cygnus.com>

	* stor-layout.c (layout_record): Test DECL_PACKED instead of
	TYPE_PACKED to determine alignment.

	* combine.c (try_combine): Distribute REG_DEAD notes created for
	i3dest_killed similar to the ones created for i2dest_in_i2src
	and for i1dest_in_i1src.

Tue Aug 26 11:36:34 1997  Jeffrey A Law  (law@cygnus.com)

	* loop.c (check_final_value): Don't miss a biv increment in a
	parallel.

	* loop.c (check_dbra_loop): If the loop biv is only used
	for counting, then normalize it so that the initial
	value is zero.

Tue Aug 26 06:19:48 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* dwarfout.c (*_LABEL): Add initial '*'.

Tue Aug 26 05:27:28 1997  Richard Henderson  <rth@cygnus.com>

	* alpha/elf.h (LINK_SPEC): Conditionalize on USE_GNULIBC_1.
	* configure.in (alpha-*-linux-gnulibc1): New target.
	(alpha-*-linux-gnu*): Don't build crtbegin/end.

Mon Aug 25 19:11:38 1997  Bernd Schmidt  <crux@Pool.Informatik.RWTH-Aachen.DE>

	* reload1.c (reload_cse_simplify_operands): Fix typo.

Mon Aug 25 19:04:42 1997  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>

	* c-typeck.c (common_type): Always prefer long double to double.

Mon Aug 25 08:55:00 1997  Jeffrey A Law  (law@cygnus.com)

	* pa.c (secondary_reload_class): (mem (mem ... )) does not need
	secondary reloads.

	* pa.c (hppa_builtin_saveregs): Emit a blockage insn after the
	store of the argument registers.

Sun Aug 24 21:25:06 1997  Bernd Schmidt  <crux@Pool.Informatik.RWTH-Aachen.DE>

	* reload1.c (reload_cse_mem_conflict_p, case MEM): Also check
	for conflict with the address.

Sat Aug 23 18:43:22 1997  Jim Wilson  <wilson@cygnus.com>

	* acconfig.h (NEED_DECLARATION_CALLOC): Add.
	* configure.in: Add GCC_NEED_DECLARATION call for calloc.
	* rs6000/xm-rs6000.h (malloc, realloc, calloc, free): Delete
	declarations.

	* m68k/m68kemb.h (LIB_SPEC): Add missing comment end before it.
	* m68k/next.h (GO_IF_INDEXABLE_BASE): Fix typo in undef.
	
Sat Aug 23 00:18:22 1997  Jeffrey A Law  (law@cygnus.com)

	* pa.c (pa_reorg): Always put begin_brtab and end_brtab insns
	around branch tables.
	* pa.md (begin_brtab, end_brtab): Only emit the .begin_brtab
	and .end_brtab directives if TARGET_GAS.

Fri Aug 22 19:17:25 1997  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>

	* function.c (instantiate_virtual_regs_1, case ADDRESSOF):
	New case.
	(fix_lexical_addr): Handle (addressof (mem ...)).

Thu Aug 21 17:56:06 1997  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>

	* reload.c (push_secondary_reload): If SECONDARY_MEM_NEEDED,
	call get_secondary_mem for input before adding reload and
	for output after.
	(push_reload): Likewise.

Thu Aug 21 15:57:03 1997  Jim Wilson  <wilson@cygnus.com>

	* stmt.c (start_cleanup_deferal, end_cleanup_deferal): Test
	block_stack before dereferencing it.

Wed Aug 20 15:45:52 1997  Dave Love  <d.love@dl.ac.uk>

	* dwarf2.h (enum dwarf_call_frame_info): Remove trailing comma from
 	list.

Wed Aug 20 15:30:36 1997  Stan Cox  <coxs@dg-rtp.dg.com>

	* i386.c (ix86_prologue, ix86_epilogue): New functions.
	({function,ix86_expand}_{pro,epi}logue, ix86_expand_prologue):
	Use ix86_prologue.

Wed Aug 20 14:57:11 1997  Michael Meissner  <meissner@cygnus.com>

	* rs6000.h (ISSUE_RATE): Define instead of MACHINE_issue_rate.

Tue Aug 19 17:10:56 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* cplus-dem.c: Add 'extern' to prepends_underscore.

Tue Aug 19 15:46:30 1997  Jeffrey A Law  (law@cygnus.com)

	* mips/r3900.h (SUBTARGET_CC1_SPEC): Remove some unnecessary stuff.
	(MIPS_CPU_STRING_DEFAULT, MIPS_ISA_DEFAULT): Define.

Mon Aug 18 21:49:02 1997  Jim Wilson  <wilson@cygnus.com>

	* reload.c (find_reloads): Add code to convert RELOAD_FOR_OPADDR_ADDR
	reloads	to RELOAD_FOR_OPERAND_ADDRESS reloads.

Mon Aug 18 17:39:02 1997  Mike Meissner  <meissner@cygnus.com>

	* configure.in ({powerpc,rs6000}*-*-*, --with-cpu): Remove single
	quotes around the name.

Mon Aug 18 17:26:42 1997  Doug Evans  <dje@cygnus.com>

	* mips.md (movsi_ulw,movsi_usw,loadgp): Give unspec a mode.

Mon Aug 18 11:05:17 1997  Jeffrey A Law  (law@cygnus.com)

	* mips/r3900.h (TARGET_DEFAULT): Turn on MASK_MIPS3900.

Sun Aug 17 14:39:18 1997  Gavin Koch  (gavin@cygnus.com)

	* mips/elf.h (PREFERRED_DEBUGGING_TYPE): Only set if not already set.
	* mips.c (TARGET_{SINGLE,SOFT}_FLOAT): Make sure both aren't set.
	(PROCESSOR_R3900): Set flag from option.
	* mips.h: Add m3900 option.
	({PROCESSOR,TARGET,MASK}_R3900): Define.
	(GENERATE_{BRANCHLIKELY,MADD,MULT3): Likewise.
	(debugj,MASK_DEBUG_J): Delete to make room for m3900.
	(BRANCH_LIKELY_P): Redefine to include 3900.
	(GAS_ASM_SPEC,CC1_SPEC): Add m3900 option.
	(RTX_COSTS): Add 3900.
	* mips.md: Add 3900, including three op madd and mult.
	* configure.in (mipstx39{,el}-*-elf*): New cases.
	* mips/r3900.h: New file.

Fri Aug 15 07:34:12 1997  Richard Earnshaw (rearnsha@arm.com)

	* arm.md (umulsi3_highpart, smulsi3_highpart): Add extra reloading
	alternatives.

Fri Aug 15 07:34:12 1997  Torbjorn Granlund  <tege@tege.pdc.kth.se>

	* arm.md (umulsi3_highpart, smulsi3_highpart): New patterns.
	* arm.c (arm_rtx_costs, case TRUNCATE): New case.

Fri Aug 15 06:40:03 1997  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>

	* genemit.c (main): Write an include for flags.h.
	* genoutput.c (main): Likewise.

	* alpha.c (override_options): Turn off byte insns for cpu=ev4 or ev5.

	* alpha.md (allocate_stack): If stupid reg allocation, add USE
	for loop variable.
	
	* fold-const.c (fold, compare cases): Add calls to `fold' to
	previous change.

Wed Aug 13 17:32:38 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* rtl.h ({SET,}ADDRESSOF_DECL): op 1 of ADDRESSOF is now the decl.
	* function.c (put_var_into_stack, gen_mem_addressof,
	put_addressof_into_stack): Adjust.

	* expr.c (expand_expr, case TARGET_EXPR): Call mark_addressable
 	again for the slot after we give it RTL.
	(expand_expr, case VAR_DECL): Lose gen_mem_addressof case.

Wed Aug 13 17:29:25 1997  J"orn Rennecke <amylaar@cygnus.co.uk>

	* c-lex.c (check_newline): Pass finput again to HANDLE_PRAGMA.

Wed Aug 13 16:51:35 1997  Bernd Schmidt  <crux@Pool.Informatik.RWTH-Aachen.DE>

	* reload1.c (reload_cse_simplify_operands): New function.
	(reload_cse_no_longer_dead,reload_cse_delete_death_notes): Likewise.
	(no_longer_dead_regs): New static variable.
	(reload_cse_simplify_set): Now returns int.
	Don't delete death notes on previous insns, call
	reload_cse_no_longer_dead instead.
	Call validate_change with nonzero value for in_group.
	(reload_cse_noop_set_p): Don't delete death notes on previous insns,
	call reload_cse_no_longer_dead instead.
	(reload_cse_regs): Initialize no_longer_dead_regs and call
	reload_cse_delete_death_notes as appropriate.
	Call apply_change_group after calling reload_cse_simplify_set.
	Call reload_cse_simplify_set on elements of a PARALLEL.
	Call reload_cse_simplify_operands if reload_cse_simplify_set could
	not simplify things.

Wed Aug 13 16:18:42 1997  Douglas Rupp  <rupp@gnat.com>

	* vms.h (LINK_SPEC): Echo -shared, not -share, to linker.

Wed Aug 13 12:51:11 1997  Richard Stallman  <rms@psilocin.gnu.ai.mit.edu>

	* m68k.md: Add braces to clarify nesting.

Wed Aug 13 12:51:11 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* calls.c (expand_call): Use assign_temp and mark_addressable
 	instead of calling gen_mem_addressof directly.

Wed Aug 13 12:40:15 1997  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>

	* Makefile.in (install-man): Add missing $(exeext).

	* configure.in (alpha*-dec-osf*): Merge various cases;
	split off version-specific files in new case statement.
	Include osf2or3.h even for OSF1.2.

	* alpha.c (NUM_ARGS): New macro.
	(CURRENT_FUNCTION_ARGS_INFO): Deleted.
	(alpha_builtin_saveregs): Use new macro.
	(function_arg): Deleted.
	(alpha_arg_type, alpha_arg_info_reg_val): New functions.
	* vms.h (enum avms_arg_type, avms_arg_info): New types.
	(CUMULATIVE_ARGS, INIT_CUMULATIVE_ARGS): Update definitions
	to use new types.
	(SETUP_INCOMING_VARARGS): Likewise.
	(FUNCTION_ARG{,_PARTIAL_NREGS}, FUNCTION_ARG_ADVANCE): Likewise.
	Only update CUM in FUNCTION_ARG_ADVANCE.
	
Tue Aug 12 19:27:32 1997  Philippe De Muyter  <phdm@info.ucl.ac.be>

	* integrate.c (save_for_inline_copying): Use 0, not NULL_PTR,
	as initial value for real_label_map.
	(copy_for_inline): Likewise.

Tue Aug 12 16:15:36 1997  H.J. Lu  (hjl@gnu.ai.mit.edu)

	* rtl.h (BYTECODE_LABEL): Use XSTR, not XEXP.

	* calls.c (expand_calls): Properly call any_pending_cleanups.

Tue Aug 12 12:18:01 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* function.c (purge_addressof_1): Add force argument.
	(purge_addressof): If there are any ASM_OPERANDS in an insn, always
	put ADDRESSOFs into the stack.

	* function.c (setjmp_protect): See through addressof.
	(setjmp_protect_args): Likewise.
	* calls.c (expand_call): For now, only use addressof if the type
 	doesn't promote.
	* function.c (put_var_into_stack): Likewise.
	* expr.c (expand_expr): Likewise.
	* toplev.c (rest_of_compilation): Check inlineable instead of
 	DECL_INLINE.
	* function.c (purge_addressof_1): Try recognizing the insn with
	and without the SUBREG.  If it doesn't work, just put the REG into
	the stack.
	(gen_mem_addressof): Set the mode of the MEM to the mode of the type.
	(put_var_into_stack): Don't be fooled by addressof in an enclosing
	scope.

Sun Aug 10 22:19:19 1997  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>

	* explow.c (probe_stack_range): Add USE for test_addr if -O0.

Sun Aug 10 22:15:40 1997  Jason Merrill  <merrill@churchy.gnu.ai.mit.edu>

	* toplev.c (rest_of_compilation): Move purge_addressof before loop.

Sun Aug 10 15:25:51 1997  Jim Wilson  <wilson@cygnus.com>

	* toplev.c (main): In -g handling code, add code to set len.

	* sdbout.c (plain_type_1, case ARRAY_TYPE): Verify that TYPE_DOMAIN
	has integer TYPE_{MAX,MIN}_VALUE before using them.

	* alpha.md (extendqihi2): Use HImode not QImode in force_reg call.

Sun Aug 10 16:47:34 1997  Nick Burrett  <nick.burrett@btinternet.com>

	* arm/aof.h (COMMON_SECTION): New macro, define common_section.
	(EXTRA_SECTION_FUNCTIONS): Add COMMON_SECTION.
	(EXTRA_SECTIONS): Add in_common.
	(ASM_OUTPUT_COMMON): Call common_section() to indicate we've
	changed areas.

Sat Aug  9 20:04:35 1997  Jim Wilson  <wilson@cygnus.com>

	* dwarf2out.c (gen_subprogram_die): Handle redefinition of an
	extern inline function.

Sat Aug  9 13:01:06 1997  Michael Meissner  <meissner@cygnus.com>

	* rs6000/sysv4.h (*_SPEC): Add support for -mads and -myellowknife.
	Use a common crt0.o for all embedded platforms.  Use --start-group
	and --end-group instead of -( and -) to allow better cut and pasting
	when debugging the linker.  Set default start for MVME text.
	(TARGET_SWITCHES): Add -mads and -myellowknife.

Fri Aug  8 20:12:43 1997  Per Bothner  <bothner@cygnus.com>

	*  dwarf2out.c (gen_enumeration_type_die):
	Make code work for a tag name, without a TYPE_STUB_DECL.
	(gen_struct_or_union_type_die):  Likewise.

Fri Aug  8 18:10:40 1997  Marc Lehmann  <pcg@goof.com>

	* i386/go32.h (HAS_INIT_SECTION, HAVE_ATEXIT): New macros.

Fri Aug  8 17:30:22 1997  H.J. Lu  <hjl@gnu.ai.mit.edu>

        * i386.c (output_pic_addr_const, case PLUS): Emit the constant first.

Fri Aug  8 17:07:36 1997  Stan Cox  <coxs@dg-rtp.dg.com>

	* m88k.c (m88k_expand_prologue): Set MEM_IN_STRUCT_P of va_list
	template.
	
	* reg-stack.c (compare_for_stack_reg): Swap only if the source and
	destination are both on the regstack.
	(subst_stack_regs_pat): Put the destination at the top of the regstack.
	
Fri Aug  8 17:03:21 1997  Bernd Schmidt  <crux@pool.informatik.rwth-aachen.de>

        * i386.md (pop): pop increments the stack pointer.
        (prologue_set_stack_ptr): New pattern.
        * i386.c (ix86_expand_prologue): Use prologue_set_stack_ptr
	instead of subsi3. 

Fri Aug  8 17:00:36 1997  Paul Eggert  <eggert@twinsun.com>

	* gansidecl.h, halfpic.h (STDIO_PROTO): Remove.
	* bitmap.h, c-tree.h, output.h, reload.h, rtl.h (STDIO_PROTO):
	Replace with PROTO in include files.
	* bc-emit.c: Include <stdio.h> before include files that formerly
	used STDIO_PROTO.
	* bc-optab.c, c-common.c, c-decl.c, caller-save.c, calls.c: Likewise.
	* convex.c, i860.c, mips.c, spur.c, tahoe.c, emit-rtl.c: Likewise.
	* explow.c, expmed.c, expr.c, genattrtab.c, halfpic.c: Likewise.
	* jump.c, optabs.c, profile.c, recog.c, regclass.c: Likewise.
	* rtlanal.c, sdbout.c, unroll.c: Likewise.
	* genattrtab.c (main): Generate files that include <stdio.h>
	before including files that formerly used STDIO_PROTO.
	* genemit.c (main), genextract.c (main), genopinit.c (main): Likewise.
	* genoutput.c (output_prologue), genpeep.c (main): Likewise.
	* genrecog.c (main): Likewise.
	* halfpic.h (PROTO): Use "gansidecl.h" to define this instead.
	(half_pic_finish): Declare without prototype; FILE isn't defined.

	* bitmap.c, c-aux-info.c, c-lex.c: Include "config.h" first.
	* c-parse.in, c-pragma.c, 1750a.c, a29k.c, alpha.c: Likewise.
	* arm.c, clipper.c, dsp16xx.c, elxsi.c, fx80.c, gmicro.c: Likewise.
	* h8300.c, i370.c, i386.c, i386/winnt.c, i960.c: Likewise.
	* m32r.c, m68k.c, m88k.c, mn10200.c, mn10300.c, ns32k.c: Likewise.
	* pa.c, pdp11.c, pyr.c, romp.c, rs6000.c, sparc.c, vax.c: Likewise.
	* we32k.c, cppmain.c, dbxout.c, flow.c, fold-const.c: Likewise.
	* gcc.c, gcov.c, global.c, integrate.c, local-alloc.c: Likewise.
	* loop.c, mips-tdump.c, mips-tfile.c, objc-act.c: Likewise.
	* real.c, reg-stack.c, reload.c, reload1.c, reorg.c, sched.c: Likewise.
	* stupid.c, tree.c, varasm.c, xcoffout.c: Likewise.

Fri Aug  8 14:52:35 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* function.c (fixup_stack_1): Stack slots can also be relative to
 	the frame or stack pointers.

Fri Aug  8 14:13:49 1997  Richard Henderson  <richard@gnu.ai.mit.edu>

	* dwarf2out.c (reg_loc_descriptor): Fix prototype.
	(concat_loc_descriptor): New function.
	(loc_descriptor): Call it.
	(add_AT_location_description): Also elide the descriptor if both
	halves of a CONCAT are pseudos.
	(add_location_or_const_value_attribute): Recognize CONCAT too.

Fri Aug  8 06:36:29 1997  Bernd Schmidt  <crux@Pool.Informatik.RWTH-Aachen.DE>

	* c-common.c (if_stack{,_space,_pointer}): New static variables.
	(c_expand_{start_cond,start_else,end_cond}): New functions.
	* c-parse.in (compstmt_count): New static variable.
	(compstmt_start): New rule.
	(compstmt): Use new rule.
	(do_stmt_start): Update compstmt_count.
	(simple_if, stmt): Use new versions of start_cond, start_else,
	and end_cond.

Thu Aug  7 15:35:25 1997  Jim Wilson  <wilson@cygnus.com>

	* mips/iris6.h (TARGET_LONG64): Don't define here.
	* mips.c (override_options): Set MASK_LONG64 for ABI_64.
	
	* mips.c (function_prologue): Don't emit ".ent", ".frame",
	".mask", ".fmask" if flag_inhibit_size_directive is true.
	(function_epilogue): Don't emit ".end" if
	flag_inhibit_size_directive is true.

	* mips/iris6.h (STARTFILE_SPEC, LIB_SPEC): Move
	-L/usr/lib{32,64}/mips? from STARTFILE_SPEC to LIB_SPEC.

Thu Aug  7 13:14:21 1997  Torbjorn Granlund  <tege@tunnis.tmg.se>

	* fold-const.c (fold): Optimize unsigned x <= 0x7fffffff.

Thu Aug  7 12:46:31 1997  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>

	* explow.c (convert_memory_address, case LABEL_REF): Copy
	LABEL_REF_NONLOCAL_P.

	* expr.c (store_constructor): Use CONST0_RTX macro, not always
	the integer version, when clearing a register.

	* varasm.c (output_constructor): Correctly check for
	multi-word constant.

Thu Aug  7 10:04:42 1997  Douglas Rupp  <rupp@gnat.com>

	* alpha/vms-tramp.asm: New file.

	* gcc.c (execute): Don't allow -pipe on VMS.
	
	* alpha.c (vmskrunch): Don't strip off trailing digits.
	(vms_valid_decl_attribute_p): New function.
	* alpha/vms.h (TRAMPOLINE_TEMPLATE): Add another quadword of zeros.
	(TRAMPOLINE_SIZE): Now 32 bytes.
	(INITIALIZE_TRAMPOLINE): Put FNADDR at offset 16, CXT at 24.
	(DBX_DEBUGGING_INFO, ASM_FORMAT_PRIVATE_NAME): Always undefine.
	(STARTFILE_SPEC): Likewise.
	(PREFERRED_DEBUGGING_TYPE): Define to be Dwarf-2.
	(VALID_MACHINE_DECL_ATTRIBUTE, ASM_OUTPUT_SECTION{,_NAME}): New macros.
	(ASM_OUTPUT_ALIGN{,ED_COMMON}): Redefine.
	(LINK_SPEC): Pass -share and -v.
	(ENDFILE_SPEC, LIBGCC2_SPEC): Don't redefine.

Thu Aug  7 06:21:47 1997  Bernd Schmidt  <crux@Pool.Informatik.RWTH-Aachen.DE>

	* Eliminate most -Wswitch warnings.
	* c-common.c (binary_op_error): Add default case to switch.
	(shorten_compare, truthvalue_conversion): Likewise.
	* c-iterate.c (collect_iteratores): Likewise.
	* c-typeck.c (comptypes, build_component_ref): Likewise.
	(build_binary_op, lvalue_p, build_unary_op): Likewise.
	(build_modify_expr, initializer_constant_valid_p): Likewise.
	(c_expand_return): Likewise.
	* calls.c (calls_function_1): Likewise.
	* combine.c (find_split_point, simplify_rtx): Likewise.
	(simplify_if_then_else, simplify_logical): Likewise.
	(extract_left_shift, make_compound_operation, force_to_mode): Likewise.
	(known_cond, nonzero_bits, num_sign_bit_copies): Likewise.
	(merge_outer_ops, simplify_shift_const, simplify_comparison): Likewise.
	(reversible_comparison_p, mark_used_regs_combine): Likewise.
	* convert.c (convert_to_integer): Likewise.
	* cse.c (canon_hash, exp_equiv_p): Likewise.
	(set_nonvarying_address_components, canon_reg): Likewise.
	(simplify_unary_operation, simplify_plus_minus): Likewise.
	(simplify_relational_operation, fold_rtx): Likewise.
	(cse_process_note,  count_reg_usage): Likewise.
	* dbxout.c (dbxout_symbol): Likewise.
	* dwarf2out.c (lookup_cfa_1, print_die): Likewise.
	* emit_rtl.c (copy_rtx_if_shared, reset_used_flags): Likewise.
	* explow.c (plus_constant_wide, convert_memory_address): Likewise.
	(promote_mode, emit_stack_save, emit_stack_restore): Likewise.
	* expmed.c (expand_divmod, emit_store_flag): Likewise.
	* expr.c (queued_subexp_p, is_zeros_p, safe_from_p): Likewise.
	(bc_expand_expr, preexpand_calls, convert_move): Likewise.
	* final.c (get_attr_length, final_scan_insn): Likewise.
	(walk_alter_subreg, alter_cond): Likewise.
	* flow.c (jmp_uses_reg_or_mem, mark_used_regs): Likewise.
	* fold-const.c (operand_equal_p, twoval_comparison_p): Likewise.
	(eval_subst, invert_truthvalue, range_binop): Likewise.
	(make_range, fold): Likewise.
	* function.c (fixup_var_refs_1, instantiate_virtual_regs_1): Likewise.
	* genattrtab.c (attr_copy_rtx, make_canonical): Likewise.
	(encode_units_mask, simplify_test_exp): Likewise.
	(find_and_mark_used_attributes, write_test_expr): Likewise.
	(simplify_with_current_value_aux, clear_struct_flag): Likewise.
	(count_sub_rtxs, gen_insn walk_attr_value): Likewise.
	(copy_rtx_unchanging): Likewise.
	* genconfig.c (walk_insn_part): Likewise.
	* genextract.c (walk_rtx): Likewise.
	* genoutput.c (scan_operands): Likewise.
	* genpeep.c (match_rtx): Likewise.
	* genrecog.c (add_to_sequence): Likewise.
	* integrate.c (copy_for_inline, copy_rtx_and_substitute): Likewise.
	(subst_constants): Likewise.
	* jump.c (duplicate_loop_exit_test, comparison_dominates_p): Likewise.
	(mark_jump_label, rtx_renumbered_equal_p): Likewise.
	(rtx_equal_for_thread_p): Likewise.
	* local-alloc.c (memref_referenced_p): Likewise.
	* loop.c (record_excess_regs, reg_in_basic_block_p): Likewise.
	(get_condition, replace_call_address): Likewise.
	(count_nonfixed_reads, find_and_verify_loops, find_mem_givs): Likewise.
	(maybe_eliminate_biv_1, invariant_p, simplify_giv_expr): Likewise.
	* optabs.c (emit_float_lib_cmp): Likewise.
	* print-tree.c (print_node): Likewise.
	* recog.c (validate_replace_rtx_1, find_single_use_1): Likewise.
	* reload.c (subst_reg_equivs, find_reloads_address_1): Likewise.
	(refers_to_regno_for_reload_p, find_equiv_reg): Likewise.
	* reload1.c (set_label_offsets, eliminate_regs): Likewise.
	(scan_paradoxical_subregs, count_occurrences): Likewise.
	* rtl.c (copy_rtx, copy_most_rtx): Likewise.
	* rtlanal.c (rtx_varies_p, rtx_addr_can_trap_p): Likewise.
	(reg_mentioned_p, reg_referenced_p, modified_between_p): Likewise.
	(modified_in_p, refers_to_regno_p, volatile_insn_p): Likewise.
	(volatile_refs_p, side_effects_p): Likewise.
	(inequality_comparison_p, replace_regs): Likewise.
	* sched.c (sched_analyze_2): Likewise.
	* stmt.c (expand_return): Likewise.
	* tree.c (staticp, unsave_expr_now, contains_placeholder_p): Likewise.
	(substitute_in_expr, build_type_attribute_variant): Likewise.
	(simple_cst_equal): Likewise.
	* unroll.c (remap_split_bivs): Likewise.
	* varasm.c (const_hash, compare_constant_1): Likewise.
	(decode_rtx_const, output_addressed_constants): Likewise.
	(output_constant): Likewise.
	* print-tree.c (print_node): Convert switch with one case into an if.
	* sched.c (memrefs_conflict_p): Likewise.
	* genrecog.c (write_tree_1): Output default case for every switch.

	* profile.c (output_arc_profiler) [SMALL_REGISTER_CLASSES]:
	Apply PATTERN only to insns.

Thu Aug  7 06:13:20 1997  Robert Lipe  <robertl@dgii.com>

	* i386/t-sco5 (libgcc2-elf.a): Resync with Makefile.in.

Wed Aug  6 19:28:05 1997  Jim Wilson  <wilson@cygnus.com>

	* dwarf2out.c (build_abbrev_table): Use xrealloc not xmalloc.

Wed Aug  6 12:57:24 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* dwarf2out.c (output_call_frame_info): Always emit the info.
	(dwarf2out_frame_debug): We can initialize the temp reg in the
	epilogue, too.

	* rtl.def: Add ADDRESSOF.
	* rtl.h (ADDRESSOF_TYPE, SET_ADDRESSOF_TYPE): New macros.
	* Makefile.in (mostlyclean): Remove *.addressof.
	* toplev.c (rest_of_compilation): Set DECL_DEFER_OUTPUT on
 	non-nested inlines.  Run purge_addressof after CSE.
	(various): Add .addressof RTL dump file.
	* rtl.c (copy_rtx): No need to copy ADDRESSOF.
	* reload1.c (eliminate_regs): Elide ADDRESSOF.
	* recog.c (general_operand): (MEM (ADDRESSOF ())) is a valid operand.
	So is (ADDRESSOF ()).
	(memory_address_p): (ADDRESSOF ()) is a valid memory address.
	* integrate.c (expand_inline_function): If the structure_value_addr
	is an ADDRESSOF, we can use it as a constant.
	(copy_rtx_and_substitute): Copy a '0' operand over unchanged.
	* function.c (fixup_var_refs_1): Remove (ADDRESSOF (MEM ())).
	(gen_mem_addressof): New fn.
	(put_addressof_into_stack): New fn.
	(purge_addressof_1): New fn.
	(purge_addressof): New fn.
	(instantiate_decl): Don't bother looking into an ADDRESSOF.
	(put_var_into_stack): Call gen_mem_addressof for local REGs instead
	of calling put_reg_into_stack.
	* expr.c (expand_expr, case TARGET_EXPR): Put the temp in a register 
	if it will fit.
	(expand_expr, case ADDR_EXPR): Call gen_mem_addressof to take the
	address of a REG.
	* explow.c (memory_address): An ADDRESSOF is a valid memory address.
	* dwarfout.c (location_or_const_value_attribute): Handle ADDRESSOF.
	* dwarf2out.c (add_location_or_const_value_attribute): Handle
 	ADDRESSOF.
	* cse.c (FIXED_BASE_PLUS_P): Add ADDRESSOF.
	(NONZERO_BASE_PLUS_P): Add ADDRESSOF.
	(canon_hash): Ignore '0' operands.
	(find_best_addr): Don't try to replace an ADDRESSOF.
	(fold_rtx): If our address has a const equiv of an ADDRESSOF, use it.
	* calls.c (expand_call): Put the struct value in a register if
	it fits.

Tue Aug  5 16:10:45 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* mips.c (function_arg): Handle passing a struct 
	containing a double in a DFmode register without the PARALLEL.

Tue Aug  5 12:27:31 1997  Doug Evans  <dje@cygnus.com>

	* configure.in (sparc-*-solaris2): Set float_format to i128.
	* config/float-i128.h: New file.

Mon Aug  4 17:45:19 1997  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>

	* combine.c (try_combine): If have PARALLEL of independent SETs
	and have cc0, ensure insn using CC0 come first.

Mon Aug  4 15:22:41 1997  Mike Meissner  <meissner@cygnus.com>

	* rs6000/sysv4.h (JUMP_TABLES_IN_TEXT_SECTION): Undef for System V
	environments.

Mon Aug  4 12:34:41 1997  Philip Blundell  <pb@nexus.co.uk>

	* configure.in (arm-*-aout): Set tmake_file correctly.

Mon Aug  4 08:06:48 1997  Bernd Schmidt  <crux@pool.informatik.rwth-aachen.de>

	* reload.c (find_reloads_address_1): Don't pass VOIDmode for an
	integer argument of push_reload.

	* rtlanal.c (may_trap_p): Fix unintended fall-through so divisions by
	non-zero constants are handled properly.  Return 1 for FP divisions.

Mon Aug  4 06:52:20 1997  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* c-common.c (check_format_info): Store each flag character only
	once in the flag_chars array.

Sun Aug  3 21:57:31 1997  Jim Meyering  <meyering@eng.ascend.com>

	* objc/Make-lang.in (objc/*.o): Depend on $(GCC_PASSES).

Sun Aug  3 21:54:51 1997  Nick Burrett  <n.a.burrett@btinternet.com>

	* cpplib.c (cpp_start_read): Recognise suffixes 'cp' and 'c++'.

Sun Aug  3 19:18:27 1997  Ralf Baechle  <ralf@uni-koblenz.de>

	* Makefile.in (mostlyclean): Remove libgcc1-test.

Sun Aug  3 19:10:27 1997  Klaus Espenlaub  <kespenla@hydra.informatik.uni-ulm.de>

	* Makefile.in (T): Move to place where it can be overridden.
	(install_common): Fix permissions of specs and EXTRA_PARTS files.

Sun Aug  3 19:07:04 1997  Jan-Jaap van der Heijden  <J.J.vanderHeijden@student.utwente.nl>

	* gcc.c (default_compilers): Add default entries for Pascal.

Sun Aug  3 18:38:41 1997  Richard Henderson  <rth@cygnus.com>

	* alpha.c (alpha_return_addr): New function.
	(output_epilog): Zero alpha_return_addr_rtx.
	* alpha.h (RETURN_ADDR_RTX): Call alpha_return_addr.

Sun Aug  3 17:27:44 1997  H.J. Lu  (hjl@gnu.ai.mit.edu)

	* Makefile.in (INSTALL): Build in $(srcdir).

	* config/linux.h (DEFAULT_VTABLE_THUNKS): New macro.

Sun Aug  3 17:18:31 1997  Richard Earnshaw (rearnshaw@cambridge.arm.com)

	* expr.c (expand_builtin, case BUILT_IN_RETURN_ADDRESS): Emit warning
	if return address cannot be determined.

Sun Aug  3 17:04:00 1997  Bernd Schmidt  <crux@pool.informatik.rwth-aachen.de>

	* stupid.c (stupid_life_analysis): If function receives non-local
	goto, don't let any registers live across calls.

	* fold-const.c (merge_ranges): Make sure that if one range is subset
	of another, it will always be the second range.  Correct (+,-) case to
	account for this.

Sun Aug  3 16:48:30 1997  Paul Eggert  <eggert@twinsun.com>

	* c-lex.c (yylex): Remove duplicate check on high bit before
	invoking int_fits_type_p.

Sun Aug  3 16:44:41 1997  Bernd Schmidt  <crux@pool.informatik.rwth-aachen.de>

	* reload.c (find_equiv_reg): If goal is a pseudo that got memory, a
	store into memory makes it invalid.  This was handled in the single
	set case, but missing in the PARALLEL case.

Sun Aug  3 09:13:47 1997  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>

	* expr.c (store_field): Return quickly if EXP is ERROR_MARK.

	* c-typeck.c (unary_complex_lvalue): Don't warn about COMPOUND_EXPR
	or COND_EXPR if FUNCTION_TYPE.

	* alpha.h (ASM_SPEC): Add -O0.

	* expr.h (clear_storage): Now returns rtx.
	(emit_block_move): Likewise; delete duplicate declaration.
	* expr.c (clear_storage, emit_block_move): Return address of
	dest if calling memset/memcpy.
	(expand_builtin, BUILT_IN_MEM{CPY,SET}): Return value from
	clear_storage or emit_block_move if present.

	* c-decl.c (start_function): Reset immediate_size_expand on
	error return.

Sat Aug  2 18:50:43 1997  Paul Eggert  <eggert@twinsun.com>

	* tree.c (int_fits_type_p): Negative ints never fit unsigned
	types, and unsigned ints with top-bit-set never fit signed types.

Sat Aug  2 16:25:43 1997  Per Bothner  <bothner@frobnitz.gnu.ai.mit.edu>

	* Makefile.in (EXTRA_C_OBJS): Removed.
	(C_AND_OBJC_OBJS):  New.  Subsumes EXTRA_C_OBJS and OBJC_CCOMMON.
	* objc/Make-lang.in (OBJC_CCOMMON):  Removed.

Sat Aug  2 16:11:57 1997  Doug Evans  <dje@cygnus.com>

	* configure.in: Build .gdbinit for top level build dir here.
	(AC_OUTPUT): Pass oldstyle_subdirs to configure.lang.
	* configure.lang: Fix building of .gdbinit for oldstyle lang subdirs.

Sat Aug  2 13:48:15 1997  Ken Raeburn  <raeburn@cygnus.com>

	* cse.c (cse_insn): Ignore paradoxical SUBREGs unless we are
	looking for such.

Sat Aug  2 13:25:33 1997  Tristan Gingold  (gingold@email.enst.fr)

	* calls.c (expand_call): If -fcheck-memory-usage, use pseudo-register,
	check indirectly called function is executable, and set rights of
	memory for aggregate as write only.
	(store_one_arg): If -fcheck-memory-usage, set rights for pushed
	stack argument.
	* c-decl.c (init_decl_processing): Add
	__builtin_aggregate_incoming_address.
	* explow.c (expr_size): Call expand_expr with appropriate flag.
	* expr.c (expand_builtin, case BUILT_IN_AGGREGATE_INCOMING_ADDRESS):
	New case.
	(expand_assignment, expand_expr, emit_push_insn, store_expr):
	Insert calls to chkr_check_addr, chkr_set_right, and chkr_copy_bitmap
	when -fcheck-memory-usage.
	(get_push_address, get_memory_usage_from_modifier): New functions.
	* expr.h: Add expand_modifier flags.
	(chkr_*_libfunc): New decls.
	(memory_use_mode): New declaration.
	* flags.h (flag_check_memory_usage, flag_prefix_function_name): New
	declaration.
	* function.c (put_var_into_stack, assign_parms): If
	-fcheck-memory-usage, set the rights of pushed variable.
	* optabs.c (chkr_{check_addr,set_right}_libfunc): New definitions.
	(chkr_{copy_bitmap,check_exec}_libfunc): Likewise.
	(init_optabs): Initialize these chkr_*_libfunc.
	* stmt.c (expand_computed_goto): If -fcheck-memory-usage, check that
	computed address of a goto is executable.
	(expand_asm, expand_asm_operands): If -fcheck-memory-usage,
	disallow asm statments.
	* toplev.c (flag_check_memory_usage, flag_prefix_function_name): New
	variable.
	(f_options): Add `check-memory-usage' and `prefix_function_name'.
	(main): Disable `-fomit-frame-pointer' if `-fcheck-memory-usage' is set
	and the machine can't debug without the frame pointer.
	* tree.h (built_in_function): Add BUILT_IN_AGGREGATE_INCOMING_ADDRESS.
	* varasm.c (make_function_rtl, make_decl_rtl): Add a prefix when
	flag_prefix_function_name_usage is set.
	(assemble_name): Strip the CHKR_PREFIX.
	* alpha.c (alpha_builtin_saveregs): If -fcheck-memory-usage,
	set rights of saved registers.
	* clipper.c (clipper_builtin_saveregs): Likewise.
	* m88k.c (m88k_builtin_saveregs): Likewise.
	* pa.c (hppa_builtin_saveregs): Likewise.
	* sparc.c (sparc_builtin_saveregs): Likewise.

Sat Aug  2 08:01:12 1997  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>

	* c-decl.c (grokdeclarator): Give error for `long double' and
	refine text of some error messages.

	* alpha.h (FLOAT_VALUE_TYPE, INTIFY, FLOATIFY, FLOAT_ARG_TYPE): Define.
	* i860.h (FLOAT_VALUE_TYPE): Fix typo; was FLOAT_TYPE_VALLUE.

	* calls.c (store_one_arg): Allow stack_slot to be SP in
	ARGS_GROW_DOWNWARD case.

	* c-decl.c (parmlist_tags_warning): Only suppress warning on
	union if anonymous.

	* libgcc2.c (_trampoline): Rework last change; both getpagesize
 	and mprotect are in cygwin32.

	* reload1.c (reload): Add IN_ADDR to IN_ADDR_ADDR when computing
	needs since they conflict.

	* print-rtl.c (indent): Move to file level; was static in print_rtx.
	(print_inline_rtx): New function.
	* reload.c (debug_reload): Rework to make output more compact.

	* dwarfout.c (output_compile_unit_die): Add support for Pascal.
	* dwarf2out.c (gen_compile_unit_die): Likewise.

	* c-typeck.c (lvalue_p, case BIND_EXPR, RTL_EXPR): Return 1 if array.

	* Makefile.in (OBJC_OBJC): Delete from here.

	* varasm.c (compare_constant_1, case STRING_CST): Compare TYPE_MODE.
	(record_constant_1, case STRING_CST): Record TYPE_MODE.

	* tree.c (contains_this_placeholder_p): Delete.
	(contains_placeholder_p): Now contains code from above function.
	(contains_placeholder_p, case 'r'): Don't look at offset info.
	* expr.c (expand_expr, case PLACEHOLDER_EXPR): Find innermost
	matching and don't check contains_placeholder_p.

Fri Aug  1 17:15:07 1997  Per Bothner  <bothner@cygnus.com>

	* objc/objc-act.c (lang_init):  Don't check_newline #if USE_CPPLIB.
	* c-lex.c (lang_init):  Remove (recently moved here).
	* c-lang.c (lang_init):  Restore, but add #if !USE_CPPLIB.

Fri Aug  1 11:26:45 1997  Jeffrey A Law  (law@cygnus.com)

	* pa.c (pa_reorg): Explode ADDR_DIFF_VEC insns too.

Thu Jul 31 19:37:22 1997  Ian Lance Taylor  <ian@cygnus.com>

	* libgcc2.c (getpagesize): Don't compile if __CYGWIN32__.

Thu Jul 31 16:04:42 1997  Stan Cox  <coxs@dg-rtp.dg.com>

	* i386.c (output_to_reg, output_fix_trunc): Use scratch memory,
	if available, instead of dynamically extending the stack.
	(put_condition_code, print_operand): Added reverse_cc to reverse the
	comparison when $ah is accessed directly instead of using eflags

	* i386.md (*trunc*): Use scratch memory for output_fix_trunc.
	(movsicc_1, movhicc_1) Change alternative 3 to: 
	jCC L1; mov; jmp L2; L1:mov; L2:
	(movsfcc, movdfcc, movxfcc): Force constant operands to memory.
	(movsfcc_1, movdfcc_1, movxfcc_1): Change alternative 3 as above.

Thu Jul 31 16:04:42 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* i386.h (MAX_FIXED_MODE_SIZE): Define.

Thu Jul 31 16:04:42 1997   Robert Lipe <robertl@dgii.com>
	
	* i386/sco5.h (SWITCHES_NEED_SPACES) Define.
	Required by the COFF (but not ELF) linker.

Wed Jul 30 15:03:52 1997  Per Bothner  <bothner@cygnus.com>

	* demangle.h (DMGL_JAVA):  New option to request Java demangling.
	* cplus-dem.c:  Various changes to produce Java output when passed
	DMGL_JAVA.  Thus "::" becomes "." and "JArray<Foo>" becomes "Foo[]".
	(main):  Support --java and -j flags to set DMGL_JAVA.

Wed Jul 30 08:56:08 1997  Philip Blundell  <Philip.Blundell@pobox.com>

	* configure.in (arm-*-*): Replace with arm-*-aout.
	* arm/aout.h (SET_ASM_OP): Define by default.
	* arm/riscix.h (SET_ASM_OP: Undefine.
	* arm.h (CPP_SPEC): Add %(subtarget_cpp_spec).
	(SUBTARGET_CPP_SPEC): New macro.
	* arm/linux.h: Include aout.h rather than arm.h directly.
	(TARGET_CPU_DEFAULT): Define.
	({ASM,CPP}_SPEC): Remove.
	* arm/t-linux (MULTILIB_OPTIONS): Use -mapcs-NN instead of -mN.
	(LIB1ASMSRC): Use generic ARM version.
	(CROSS_LIBGCC1): Define.
	* arm/lib1funcs-linux.asm: Remove.

Tue Jul 29 17:57:47 1997  Per Bothner  <bothner@cygnus.com>

	* Add hooks for using autconf-style Makefile.in in language subdirs.
	* configure.in (all_outputs, oldstyle_subdirs):  New variables.
	Pass all_outputs to AC_OUTPUT.
	* configure.lang:  Only iterate over oldstyle_subdirs.

	* Patches to use cpplib with cc1 #if USE_CPPLIB.
	* configure.in (--enable-c-cpplib):  New option.
	(extra_c_flags, extra_c_objs):  New variables.
	* Makefile.in (EXTRA_C_OBJS):  New variable.
	(INTERNAL_CFLAGS):  Add @extra_c_flags@.
	(C_OBJS):  Add $(EXTRA_C_OBJS).
	* c-lex.c (generally):  Replace getc and ungetc by macros GETC and
	UNGETC.  Avoid explicit references to finput.
	(yy_get_token):  New function, that calls cpp_get_token.
	(init_parse):  New function - calls init_lex.
	(finish_parse):  New function (called by compile_file).
	(GET_DIRECTIVE_LINE):  New macro wrapper replaces get_directive_line.
	(lang_init):  Don't check_newline - already know main_input_filename.
	(handle_sysv_pragma):  Remove FILE* parameter.
	* toplev.c (finput):  Remove #if USE_CPPLIB.
	(compile_file):  #if USE_CPPLIB don't open input file here,
	do it in cpp_start_read.  Call init_parse instead of init_lex.
	At end, call finish_parse instead of fclose(finput).

Mon Jul 28 15:48:29 1997  Brendan Kehoe  <brendan@cygnus.com>

	* integrate.c (expand_inline_function): Use xmalloc instead of
	alloca for the LABEL_MAP.
	(save_for_inline_copying): Likewise.

Mon Jul 28 11:22:16 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* toplev.c (compile_file): Also emit any deferred TREE_PUBLIC inlines.
	(rest_of_compilation): Use decl_printable_name instead of DECL_NAME
	to identify functions in the RTL dump files.

	* dwarf2out.c (add_location_or_const_value_attribute): 
 	leaf_renumber_regs_insn.  Also eliminate_regs here.
	(add_AT_location_description): Not here.  Don't emit anything 
	for a variable that has been optimized away.
	(add_const_value_attribute): Likewise.

	* dwarfout.c (location_or_const_value_attribute):
 	leaf_renumber_regs_insn.  Also eliminate_regs here.
	(location_attribute): Not here.

	* stor-layout.c (layout_type): Fix ancient code to match ancient
	comment.  Use mode of field for one-field structs.

Sun Jul 27 12:09:02 1997  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>

	* function.c (put_var_into_stack, trampoline_address): Treat
	inline_function_decl like current_function_decl.
	* expr.c (expand_expr, case LABEL_DECL): Likewise.
	(expand_expr, case SAVE_EXPR): Handle top-level SAVE_EXPR by
	moving into current function; abort if in incorrect context.
	* fold-const.c (fold_range_test, fold): Avoid making SAVE_EXPR
	if at top level.

	* dwarfout.c (ASM_OUTPUT_SOURCE_FILENAME): Delete default value.

	* alpha.h (TARGET_SWITCHES): Add -mno-byte.

	* expr.c (get_inner_unaligned_p): Deleted.
	(expand_assignment): Remove special-case of constant array.
	(expand_expr, case ARRAY_REF): Likewise, and clean up remaining code.

	* explow.c (probe_stack_range): Do probing with loop if more
	than a small number.

Fri Jul 25 15:42:34 1997  H.J. Lu  (hjl@gnu.ai.mit.edu)

	* configure.in: Finish fixing calculation if default thread
	support is enabled.

Fri Jul 25 15:30:09 1997  Doug Evans  <dje@cygnus.com>

	* Makefile.in (native): Depend on config.h.
	(gcc.o): Depend on Makefile, not config.status.

Fri Jul 25 10:56:50 1997  Jeffrey A Law  (law@cygnus.com)

	* pa.c (pa_reorg): If TARGET_BIG_SWITCH, then do not explode
	ADDR_VEC insns.  Slightly rework code which explodes ADDR_VEC
	insns.
	* pa.h (TARGET_BIG_SWITCH): Define.
	(TARGET_SWITCHES): Add "big-switch" and "no-big-switch".
	(CASE_VECTOR_MODE): Use TI or DI depending on TARGET_BIG_SWITCH.
	(CASE_DROPS_THROUGH): Remove definition.
	(ASM_OUTPUT_ADDR_VEC_ELT): Rewrite to handle TARGET_BIG_SWITCH.
	(ASM_OUTPUT_ADDR_DIFF_ELT): Likewise.
	* pa.md (casesi): Rework to avoid some potential long branch
	problems (also makes generated code faster!).  Handle
	TARGET_BIG_SWITCH.
	(casesi0): Corresponding changes.

Fri Jul 25 08:36:47 1997  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>

	* calls.c: (expand_call): If -fstack-check and temp needed
	for arg is too large, use alloca.
	* expr.c (expand_expr, case MODIFY_EXPR): Don't preexpand calls
	if LHS is an indirect via a constant pointer.

Thu Jul 24 21:49:11 1997  Pat Rankin  <rankin@eql.caltech.edu>

	* bitmap.c (bitmap_operation): Reset CURRENT on deferred deletion.

Wed Jul 23 23:52:14 1997  Chris Smith  <csmith@convex.hp.com>

	* convex.h (CHECK_FLOAT_VALUE): Fix OVERFLOW capitalization.

Wed Jul 23 13:00:47 1997  Richard Earnshaw <rearnsha@cambridge.arm.com>

	* configure.in (arm-*-netbsd*): Fix typo setting tmake_file.

Wed Jul 23 06:39:35 1997  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>

	* configure.in (alpha*): Put quotes around MASK_GAS.

Tue Jul 22 15:24:45 1997  Brendan Kehoe  <brendan@cygnus.com>

	* tree.c (array_type_nelts): Make sure the domain of TYPE is set
	before we try to use it.

Tue Jul 22 12:26:13 1997  Doug Evans  <dje@cygnus.com>

	* sparc.c (gen_v9_scc): Handle early clobber of result.
	* sparc.md (seqdi_special): Don't clobber %xcc.
	(snedi_special, seqdi_special_trunc, snedi_special_trunc): Likewise.
	(snedi_zero, neg_snedi_zero, seqdi_zero, neg_seqdi_zero): Likewise.
 	(snedi_zero_trunc, seqdi_zero_trunc): Likewise. Renamed from ..._sp64.
	(snedi_zero_trunc_sp32, seqdi_zero_trunc_sp32): Delete.

	* Makefile.in (Makefile): Pass xmake_file, tmake_file to
	configure.frag
	(distclean): Delete Make-host, Make-target.
	* configure.in (host_overrides): Set to Make-host.
	(dep_host_xmakefile): Loop over all elements in host_make_file.
	(target_overrides): Set to Make-target.
	(dep_tmake_file):  Loop over all elements in tmake_file.
	(configure.frag): Pass dep_host_xmake_file, dep_tmake_file.
	* configure.frag: New arguments xmake_files, tmake_files.
	Build Make-host, Make-target.

Mon Jul 21 23:17:44 1997  Paul Eggert  <eggert@twinsun.com>	

	* objc/Make-lang.in, objc/Makefile.in: Comment out lines containing
	just formfeeds.

Mon Jul 21 14:05:46 1997  Doug Evans  <dje@cygnus.com>

	* Makefile.in (Makefile): Depend on config.status instead
	of configure.
	(config.status): Depend on configure.  Run config.status --recheck
	if out of date.
	(cstamp-h.in): Use echo instead of touch.

	* reload1.c (reload_cse_mem_conflict_p): Restore handling of
	(mem:BLK const0_rtx) meaning all memory is clobbered.

Mon Jul 21 06:20:10 1997  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* m68k.md (iorsi_zexthi_ashl16): Mark output operand as earlyclobber.

Sun Jul 20 06:11:30 1997  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>

	* configure.in (alpha*-*-*): Set cpu_type to alpha.
	Change "alpha-" to "alpha*-" in all entries.
	Set target_cpu_default for ev5 and ev56 systems.
	Use symbolic names for target_cpu_default.
	* alpha.c (override_options): Set default for alpha_cpu
	from TARGET_CPU_DEFAULT.
	* alpha.h (MASK_CPU_EV5): New macro.

	* tree.c (contains_placeholder_p): Call contains_this_placeholder_p.
	(contains_this_placeholder_p): Renamed from contains_placeholder_p.
	Added new arg, PL.
	Rework to make more consistent, check more codes, and avoid
	undefined fields.
	* expr.c (expand_expr, case PLACEHOLDER_EXPR): Pick outermost
	object in placeholder_list of right type without a PLACEHOLDER_EXPR.

Sat Jul 19 18:00:01 1997  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>

	* alpha.c (override_options): Allow processor of ev56 or 21164a.
	(input_operand, case MEM): Correct test involving TARGET_BYTE_OPS.
	* alpha.h (SECONDARY_{IN,OUT}PUT_RELOAD_CLASS): Don't need for
	QImode or HImode if TARGET_BYTE_OPS.
	(ASM_FILE_START): Write a .arch directive.
	(STACK_CHECK_BUILTIN): New macro.
	* alpha.md ({zero_,}extend[qh]i[dsh]i2): Rework TARGET_BYTE_OPS cases.
	(mov[hq]i): Likewise.
	(extend[qh]i[hsd]i2x): Add missing cases and fix typo in constraint.
	(reload_{in,out}[qh]i): Disable for TARGET_BYTE_OPS.

Fri Jul 18 23:24:57 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* varasm.c (make_decl_rtl): Don't use ASM_FORMAT_PRIVATE_NAME for
	local decls with TREE_PUBLIC set.
	(bc_make_decl_rtl): Likewise.

Fri Jul 18 22:16:28 1997  Doug Evans  <dje@cygnus.com>

	* configure.in: Invoke AC_CONFIG_HEADER.
	Check for string.h, strings.h, stdlib.h, time.h, unistd.h.
	Check for whether malloc/realloc/free need to be declared.
	(links): Rename config.h to config2.h.
	(AC_OUTPUT): Create cstamp-h.
	* Makefile.in (config.in,cstamp-h.in): Add rules for.
	(config.h,cstamp-h): Add rules for.
	(distclean): Delete config2.h, cstamp-h.
	(ALL_CFLAGS): Add @DEFS@.
	* aclocal.m4, acconfig.h: New files.

	* Makefile.in (distclean): Delete Make-host, Make-target.
	* configure.in (host_overrides): Set to host_xmake_file, don't create
	Make-host.
	(target_overrides): Set to tmake_file, don't create Make-target.
	(language subdir support): Keep together.

	* c-decl.c (duplicate_decls): Set DECL_ABSTRACT_ORIGIN to olddecl
	if inline function and not new definition.

	* configure.in: Don't loop trying to configure language subdirs.
	Don't pass to configure.lang variables it doesn't use.
	* configure.lang: Delete top level directory from loop.
	Delete code not useful for language subdirs.

Fri Jul 18 08:12:53 1997  Bernd Schmidt  <crux@Pool.Informatik.RWTH-Aachen.DE>

	* toplev.c (rest_of_compilation): Call reload_cse_regs here.
	* reload1.c (reload): Don't call it here.
	(reload_cse_mem_conflict_p): Remove MEM_OFFSET and MEM_MODE args.
	(reload_cse_mem_conflict_p, case MEM): Call anti_dependence.
	(reload_cse_invalidate_mem): Update call to reload_cse_mem_conflict_p.
	(reload_cse_regs): No longer static.
	Call init_alias_analysis.
	Ignore CLOBBER in a PARALLEL.

Fri Jul 18 06:44:22 1997  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* objc/Make-lang.in (objc-headers): Fix command for the new build
	directory layout, don't pass srcdir variable.
	* objc/Makefile.in (copy-headers): Use $(srcdir) from this
	makefile, not the parent's.

Thu Jul 17 16:03:03 1997  Doug Evans  <dje@cygnus.com>

	* configure.lang (EXTRA_HEADERS,EXTRA_PASSES,EXTRA_PARTS): Delete.
	(EXTRA_PROGRAMS,EXTRA_OBJS,EXTRA_GCC_OBJS,MD_DEPS): Delete.
	(version) Delete duplicate entry.
	* configure.in (merged_frags): Delete unused variable.
	(extra_headers_list): Move setting outside of subdir loop.
	(extra_headers,extra_passes): Don't pass to configure.lang.
	(extra_programs,extra_parts,extra_objs): Likewise.
	(host_extra_gcc_objs,gxx_include_dir,md_cppflags): Likewise.

Thu Jul 17 07:00:43 1997  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>

	* expr.h (STACK_CHECK_*): Provide default values.
	(probe_stack_range): New declaration.
	* flags.h (flag_stack_check): Likewise.
	* explow.c (allocate_dynamic_stack_space): Call probe_stack_range.
	(emit_stack_probe, probe_stack_range): New functions.
	* function.c (expand_function_end): If function is non-leaf and stack 
	checking is requested, emit needed probes.
	* reload1.c (reload): If checking stack, verify frame small enough.
	* stmt.c (expand_decl): If stack checking, use alloca for large vars.
	* toplev.c (flag_stack_check): New variable.
	(f_options): Add "stack-check".

	* reorg.c (mark_target_live_regs): Pass FIRST_PSEUDO_REGISTER to
	call to EXECUTE_IF_SET_IN_REG_SET.

Wed Jul 16 14:51:00 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* i960.h (ASM_OUTPUT_ALIGNED_BSS): Define.
	(ASM_OUTPUT_ALIGNED_LOCAL): Use standard method to convert ALIGN
	to power-of-two of bytes.

	* sparc.h (ASM_OUTPUT_ALIGNED_BSS): Define.
	* sparc/sysv4.h (ASM_OUTPUT_ALIGNED_BSS): Undef before definition.

Wed Jul 16 14:34:09 1997  Klaus Espenlaub  (kespenla@hydra.informatik.uni-ulm.de)

	* calls.c (emit_library_call_value): Initialize all argvec elements.

Wed Jul 16 14:31:39 1997  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>

	* global.c (global_conflicts): Pass FIRST_PSEUDO_REGISTER to
	call to EXECUTE_IF_SET_IN_REG_SET.

Wed Jul 16 10:57:03 1997  Richard Earnshaw (rearnsha@cambridge.arm.com)

	* From Rob Black (r.black@ic.ac.uk) and Mark Brinicombe
	(amb@physig.ph.kcl.ac.uk):
	* configure.in (arm-*-netbsd*): New configuration.
	* arm/netbsd.h, arm/t-netbsd, arm/xm-netbsd.h: New files.
	
Wed Jul 16 10:57:03 1997  Richard Earnshaw (rearnsha@cambridge.arm.com)

	* arm.c (tune_flags): New variable.
	(target_{cpu,fpe}_name): Delete.
	(arm_fpu_arch): New variable.
	(arm_select): Also allow -march=... to configure just the 
	architecture.
	(all_procs): Allow armv{2,2a,3,3m,4,4t} for use with -march=.
	(arm_override_options): Handle -march=, but don't let -mcpu=
	and -mtune= match the architecture names, since we can only
	tune for an implementation.  Rework selection of tuning options
	for floating point.
	(use_return_insn): Support interworking with Thumb code.
	(arm_rtx_costs): Rework multiply costs so that cost is based on
	the tune, not the architecture.
	(f_register_operand): New function.
	(output_return_instruction): Support interworking with Thumb code.
	(output_func_epilogue): Support interworking with Thumb code.
	Remove redundant calculation of code_size. Use floating-point
	load-multiples if permitted.
	(emit_sfm): New function.
	(arm_expand_prologue): Use floating-point store-multiples if 
	permitted.

	* arm.h (CPP_CPU_ARCH_SPEC): Handle -march=...
	(TARGET_OPTIONS): Add arch= and fp=.  Delete fpe=.
	(enum processor_type): Add PROCESSOR_NONE, for use in all_procs table.
	(FP_DEFAULT): Default floating point architecture for generic 
	back-end.
	(PREDICATE_CODES): Add f_register_operand.

	* arm.md (*push_fp_multi): New pattern.


Tue Jul 15 22:08:47 1997  Jim Wilson  <wilson@cygnus.com>

	* Makefile.in (exeext): Set to build_exeext not exeext.
	* configure.in (exeext): Delete redundant set and AC_SUBST call.
	Change remaining AC_SUBST to use build_exeext instead of exeext.

Tue Jul 15 15:48:25 1997  H.J. Lu  (hjl@gnu.ai.mit.edu)

	* configure.in: Fix calculation if default thread support is enabled.

Tue Jul 15 13:38:46 1997  Mike Meissner  <meissner@cygnus.com>

	* rtl.h (replace_regs): Declare.

Mon Jul 14 16:18:19 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* i960.h (ASM_OUTPUT_MI_THUNK): Define.

	* dwarf2out.c (gen_subprogram_die): Remove unreachable and redundant
 	code.

Mon Jul 14 14:22:45 1997  Jeffrey A Law  (law@cygnus.com)

	* calls.c (emit_library_call): Use right index into argvec array
	when iterating over arguments which need to be pushed on the stack.
	(emit_library_call_value): Likewise.

Mon Jul 14 08:17:41 1997  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>

	* gcc.c (convert_filename): Fix typo.

Mon Jul 14 08:10:12 1997  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* configure.in: Clear headers and lib2funcs before re-reading
	config-lang.in.

	* m68k/linux.h (LINK_SPEC): Fix last change.

Mon Jul 14 08:03:38 1997  H.J. Lu  (hjl@gnu.ai.mit.edu)

	* configure.in (sparc-*-linux-gnu{*,libc1*}): Add sparc/t-linux.
	* sparc/t-linux: New file.

	* alpha/elf.h (LINK_SPEC): Fix typo.
	* configure.in (alpha-*-linux-gnu*): Set tmake_file.
	* alpha/t-linux: New file.

Mon Jul 14 07:41:37 1997  Philippe De Muyter  <phdm@info.ucl.ac.be>

	* m68k.c (output_{and,ior,xor}si3): New functions from patterns bodies.
	* m68k.h (output_{and,ior,xor}si3): New extern declarations.
	* m68k.md (adddi3, subdi3): Allow constant operand.
	(anddi3, iordi3, xordi3): New patterns.
	({and,ior,xor}si3_internal): Use corresponding output_???si3 function.

Mon Jul 14 07:33:11 1997  Fila Kolodny  <fila@ibi.com>

	* configure.in (*-*-gnu*): Add crt{begin,end}S.o to extra_parts.

Mon Jul 14 07:26:36 1997  Craig Burley  <burley@gnu.ai.mit.edu>

	* varasm.c (assemble_variable): If low part of size
	doesn't fit in an int, variable is too large.

Mon Jul 14 06:51:37 1997  Mike Meissner  <meissner@cygnus.com>

	* bitmap.{h,c}: New files.
	* Makefile.in (OBJS): Add bitmap.o.
	(BASIC_BLOCK_H): New make variable for basic-block.h, bitmap.h.
	({flow,combine,regclass,local-alloc,reload1,reorg,sched}.o): Use
	BASIC_BLOCK_H variable instead of basic-block.h.
	* basic-block.h (*REG_SET): Delete old implementation; use bitmap.h.
	(regset_{size,bytes}): Delete.
	(regs_live_at_setjmp): Declare.
	(EXECUTE_IF_SET_AND_RESET_IN_REG_SET): Delete.
	* flow.c (init_regset_vector): Make global; don't take basic block
	times # of pseduos as argument.
	(life_analysis): Change all init_regset_vector calls.
	Use free_regset_vector to release arrays only flow uses at end.
	(allocate_for_life_analysis): Change init_regset_vector call.
	Don't set regset_{size,bytes}.
	(free_regset_vector): Call FREE_REG_SET to release any
	memory allocated by each vector.
	(propagate_block): Call FREE_REG_SET on dead/live.
	(mark_used_regs): Don't use REGSET_ELT_TYPE anymore.
	* output.h (allocate_for_life_analysis): Add declaration.
	(regno_uninitialized, regno_clobbered_at_setjmp): Likewise.
	(dump_flow_info, flow_analysis): Likewise.
	* regclass.c (init_reg_sets): Invoke INIT_ONCE_REG_SET.
	(allocate_reg_info): Invoke MAX_REGNO_REG_SET.
	(regset_release_memory): Free basic_block_live_at_start storage.
	* reorg.c (mark_target_live_regs): Delete unused variables.
	* sched.c (schedule_block): Free space associated with
	reg_pending_sets and old_live_regs.
	(schedule_insns): Free bb_{dead,live}_regs on first pass.
	(sched_analyze_insn): Use EXECUTE_IF_SET_IN_REG_SET and then clear.
	* toplev.c (rest_of_compilation): Call regset_release_memory.

Mon Jul 14 00:14:13 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* toplev.c (main): Prefer DWARF 2 or stabs with -ggdb.
	* ns32k/tek6000.h (PREFERRED_DEBUGGING_TYPE): DBX_DEBUG.
	* alpha.h (PREFERRED_DEBUGGING_TYPE): SDB_DEBUG.
	* mips.h (PREFERRED_DEBUGGING_TYPE): SDB_DEBUG.

Sun Jul 13 15:11:08 1997  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>

	* stupid.c (stupid_mark_refs): If setting reg set only in this
	insn and not referenced, make REG_UNUSED note.

Sun Jul 13 14:03:19 1997  Michael Meissner  <meissner@cygnus.com>

	* gcc.c (process_command): If -save-temps and -pipe were specified
	together, don't do -pipe.

Sun Jul 13 12:27:03 1997  Doug Evans  <dje@cygnus.com>

	* gcc.c (main): Handle blank in version_string when comparing
	with compiler_version.

Sat Jul 12 01:53:55 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* sparc.c (output_function_prologue): Fix offset from CFA.
	(sparc_flat_output_function_prologue): Likewise.

Fri Jul 11 09:49:15 1997  Jeffrey A Law  (law@cygnus.com)
	
	* mips.c (epilogue_reg_mentioned_p): Delete unused function.
	(mips_epilogue_delay_slots): Likewise.
	(function_epilogue): Greatly simplify.
	(mips_expand_epilogue): If we have a null prologue/epilogue,
	then use a normal return insn.  Emit blockage insns before
	stack pointer adjustments.
	(mips_can_use_return_insn): Renamed from simple_epilogue_p.  All
	callers changed.  Do not use return insns if $31 is live in the
	function or if generating profiling information.
	* mips.h (DELAY_SLOTS_FOR_EPILOGUE): Delete.
	(ELIGIBLE_FOR_EPILOGUE_DELAY): Likewise.
	* mips.md (return): Remove expander and change the pattern to
	look like a standard "return" insn.
	(return_internal): Show use of $31 explictly.
	(epilogue expander): Enable.

Thu Jul 10 13:04:53 1997  Doug Evans  <dje@cygnus.com>

	* cccp.c (INO_T_EQ): Return 0 for MSDOS.

	* Makefile.in (CC): Use autoconf value.

Tue Jul  8 18:08:00 1997  Jim Wilson  <wilson@cygnus.com>

	* dwarf2out.c (gen_subprogram_die): When handling declarations, test
	DECL_CONTEXT not decl_class_context before equate_decl_number_to_die.

Tue Jul  8 16:47:13 1997  Michael Meissner  <meissner@cygnus.com>

	* rs6000.md (movsi define_split): Use unsigned HOST_WIDE_INT,
	not unsigned.

Sat Jul  7 00:01:41 1997  Jim Meyering <meyering@eng.ascend.com>

	* i386/t-sol2 (crt[1in].o): Also depend on $(GCC_PASSES).

Fri Jul  4 11:45:39 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* dwarf2out.c (DWARF_CIE_HEADER_SIZE, DWARF_FDE_HEADER_SIZE,
 	size_of_cfi, size_of_fde, calc_fde_sizes, next_fde_offset,
 	cie_size): Lose.
	(ASM_OUTPUT_DWARF_STRING): Move earlier.
	(INCOMING_FRAME_SP_OFFSET): Provide default.
	(initial_return_save): Adjust for CFA offset.
	(dwarf2out_frame_debug): Lookup initial CFA offset when setting up.
	(output_call_frame_info): Use label subtraction for length fields.
  	Add pointer to exception region information in for_eh case.
	(dwarf2out_do_frame): New fn.
	(dwarf2out_frame_init): Use INCOMING_FRAME_SP_OFFSET.
	(dwarf2out_frame_finish): Don't bother emitting .debug_frame for
	non-Irix targets.  Just emit .eh_frame.
	(output_die): Refer to an FDE with label subtraction.
	* i386.h (INCOMING_FRAME_SP_OFFSET): Define.
	* defaults.h (DWARF2_UNWIND_INFO): Define if
 	INCOMING_RETURN_ADDR_RTX is provided.
	* final.c (final): Don't call dwarf2out_frame_debug unless we are
 	doing dwarf 2.

Thu Jul  3 17:37:52 1997  Jim Wilson  <wilson@cygnus.com>

	* fp-bit.c (unpack_d): Check fraction not sign to distinquish QNaN.

Wed Jul  2 09:48:03 1997  Michael Meissner  <meissner@cygnus.com>

	* loop.c (strength_reduce): Make sure register does not exceed the
	table size when looking up the last UID.

Wed Jul  2 07:47:44 1997  Nick Burrett  <n.a.burrett@btinternet.com>

	* genoutput.c (process_template): Place increment expression
	outside of putchar function call.

Wed Jul  2 06:56:52 1997  H.J. Lu  (hjl@gnu.ai.mit.edu)

	* sparc/linux.h (LIBGCC_SPEC): Removed.
	(CC1_SPEC): Add %{profile:-p}.
	({CPP,LIB,LINK}_SPEC): Choose glibc 1 or 2 depending on USE_GNULIBC_1.
	* configure.in (sparc-*-linux-gnulibc1*): New configuration.

	* configure.in (powerpc-*-linuxgnu*): Default thread_file is posix.
	Set xmake_file to x-linux.  Add extra_parts.
	* rs6000/linux.h (LINK_SPEC): Defined.

	* m68k/linux.h (LINK_SPEC): Pass -shared for -shared.
	({CPP,LINK}_SPEC): Choose for glibc 1 or 2 depending on USE_GNULIBC_1.
	* configure.in (m68k-*-linux-gnu*): Default thread_file is `posix'.
	(m68k-*-linux-gnulibc1): New configuration.

	* alpha/elf.h (LINK_SPEC): Change ld-gnu.so.1 to ld-linux.so.2.
	* configure.in (alpha-*-linux-gnu*): Default thread_file is `posix'.

Wed Jul  2 06:12:37 1997  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>

	* alpha.md (divsi3, modsi3, udivsi3): Comment out.
	(extendsfsd2_no_tp): Add alternative with output in MEM, input in REG.

	* configure.in (*-linux*): Add "-gnu" to names to match.

	* libgcc2.c (_trampoline): Add stdcall attribute to VirtualProtect
	on i386.

	* objc/objc.gperf: Renamed from gperf.

Wed Jul  2 05:42:19 1997  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* objc/Make-lang.in ($(srcdir)/objc/objc-parse.c): Fix command
	to use the right file names.

Tue Jul  1 23:25:42 1997  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>

	* reorg.c (redundant_insn): If INSN or possible match has REG_UNUSED
	note, don't have match.

Tue Jul  1 18:36:24 1997  Doug Evans  <dje@cygnus.com>

	* mips.c (mips_output_external): Don't output .extern's for
	variables in user specified sections unless they're .sbss/.sdata.

Tue Jul  1 18:30:26 1997  Jim Wilson  <wilson@cygnus.com>

	* cse.c (find_best_addr): Add missing rtx_cost arguments.

	* fp-bit.c (float_to_usi): Move code for negative numbers before code
	for infinity.  Modify infinty code to only handle positive infinities.

Tue Jul  1 11:16:41 1997  Robert Lipe  <robertl@dgii.com>

	* fixinc.sco: Restore pwd after copy.
	Convert declaration of abs in math.h to prototype.
	Fix static functions in sys/stat.h for C++.

Tue Jul  1 10:55:47 1997  Michael Meissner  <meissner@cygnus.com>

	* rs6000.md ({add,ior,xor}si3): Change to use define_expand wrapper
	and split add/ior/xor of large constants early.
	(andsi3): Remove 6/29 code to do and of large constants.
	(nor, nand, eqv, maskir): Add names to all logical define_insns.

Tue Jul  1 09:03:35 1997  Jeffrey A Law  (law@cygnus.com)

	* h8300.h (BIGGEST_FIELD_ALIGNMENT): Remove definition.
	* mips.h (BIGGEST_FIELD_ALIGNMENT): Likewise.

Mon Jun 30 14:58:00 1997  Jeffrey A Law  (law@cygnus.com)

	* sh.c (sh_expand_epilogue): Emit blockage insn before cutting
	back stack.

Sun Jun 29 11:27:07 1997  Michael Meissner  <meissner@cygnus.com>

	* rs6000.h (TARGET_FLAGS): Add -m{,no-}update to suppress
	creating load/store with update instructions, and also
	-m{,no-}fused-madd to suppress the generation of fused add and
	multiply instructions.  Move debug flags to TARGET_OPTIONS.
	(GO_IF_LEGITIMATE_ADDRESS): Don't allow PRE_{INC,DEC} if -mno-update.
	(GO_IF_MODE_DEPENDENT_ADDRESS): Ditto.
	(rs6000_debug_{name,stack,arg}): Add declarations.
	(toc_initialized): Likewise.
	(got_no_const_operand): Likewise.
	(PREDICATE_CODES): Add got_no_const_operand.
	(toc_section): Make toc_initialized a global.
	(RTX_COSTS): Set appropriate costs for add, logical operators that
	are really two instructions.
	
	* rs6000.c (rs6000_debug_{name,stack,arg}): Add definitions.
	(rs6000_override_options): Process debug flags.
	(toc_initialized): Global to say toc initialized.
	(small_data_operand): Use #if TARGET_ELF, not #ifdef TARGET_SDATA.
	(rs6000_init_expanders): Likewise.
	(SMALL_DATA_RELOC): Likewise.
	(got_no_const_operand): Recognize SYMBOL_REF and LABEL_REF.
	(rs6000_makes_calls): System V profiling doesn't count as a call.
	(rs6000_stack_info): Likewise.
	(rs6000_output_load_toc_table): Take register number argument to
	determine register to load.  Generate correct code if more than
	one toc table is done in System V due to profiling or non-local
	gotos.  If System V toc is not initialized, initialize it now.
	(rs6000_allocate_stack_space): Move code from output_prolog to
	allocate stack space.  Take -mno-update into account.
	(output_prolog): Call rs6000_allocate_stack_space.  Only set
	rs6000_pic_func_labelno if not profiling.
	(output_function_profiler): Implement System V profiling.
	(and_operand): Don't call reg_or_short_operand.
	(rs6000_finalize_pic): If not optimizing, insert a USE of the GOT
	register as the last insn.
	
	* rs6000.md (load/store update): Take -mno-update into account.
	If -msoft-float, support SF load/store with update to GPR regs.
	(allocate_stack): Take -mno-update into account.
	(add/subtract + multiply instructions): Take -mno-fused-madd into
	account.
	(nonlocal_goto_receiver): Specify register # to load.
	({add,and,ior,xor}si3): Recognize operation done with full 32 bit
	constant, splitting latter if need be.
	(andsi3 define_split): Fix up splitting andsi3 of large constant.
	({ior,xor}si3 define_split): Use GEN_INT to create integer rtx
	values.
	(movsi_got{,_internal}): Split the load of a CONST into load of
	the SYMBOL_REF/LABEL_REF and an add.
	(movsi): Know that addsi3 can handle large values now for NT.

	* sysv4.h (TARGET_SDATA): Remove explicit bit for -msdata.
	(SUBTARGET_OVERRIDE_OPTIONS): Likewise.
	(ASM_OUTPUT_ALIGNED_LOCAL): Likewise.
	(SUBTARGET_SWITCHES): Indicate -m{,no-}sdata doesn't set any flags.
	(ASM_SPEC): Only pass -m{,no-}reg-names if assembling .s/.S files.
	(CC1_SPEC): If -msdata, invoke compiler with -msdata=default.
	(PROFILE_BEFORE_PROLOGUE): Likewise.
	(RS6000_MCOUNT): Define as "_mcount".
	(toc_section): Make toc_initialized a global.

Fri Jun 27 19:01:11 1997  H.J. Lu  (hjl@gnu.ai.mit.edu)

	* config/t-linux-gnulibc1: New file.
	* configure.in (i[3456]86-*-linux*): Default thread_file is `posix'.
	(i[3456]86-*-linux*gnulibc1): New case.
	* config/linux.h (LIB_SPEC): Choose for glibc 1 or 2 depending
	on USE_GNULIBC_1.
	* i386/linux.h (CPP_SPEC, LINK_SPEC): Likewise.

Fri Jun 27 19:00:52 1997  Ralf Baechle  <ralf@waldorf-gmbh.de>

	* config/linux.h (PREFERRED_DEBUGGING_TYPE): Undefine before define.

Fri Jun 27 18:35:04 1997  Alan Modra  <alan@spri.levels.unisa.edu.au>
	
 	* configure.in: Clean up Make-{host,target,hooks} in all
	subdirs, not just '.'.
	* Makefile.in (distclean): Delete */Make-{host,target,lang,hooks}.

Fri Jun 27 18:27:11 1997  Fila Kolodny  <fila@ibi.com>

	* config/xm-gnu.h (fcntl.h): Only include if not building libgcc.a.

Fri Jun 27 18:17:44 1997  Doug Evans  <dje@cygnus.com>

	* configure.frag: Rewrite.

	* objc/Make-lang.in (OBJC_CCOMMON): Object files don't go in srcdir.
	(OBJC_OBJS): Likewise.
	(OBJC_O): Likewise.
	(objc-parse.o, objc-act.o): Fix rules.
	(objc/libobjc files): Fix rules.

Fri Jun 27 13:23:38 1997  Andrew Cagney  <cagney@tpgi.com.au>

	* fp-bit.c (float_to_si): Correct return value when Inf.

Fri Jun 27 10:47:09 1997  Scott Christley <scottc@net-community.com>

	* Makefile.in (DLLTOOL): Define.
	* objc/Make-lang.in (libobjc_entry.o, libobjc_s.a, libobjc.dll):
	New targets.
	(objc.install-normal): Install Objective-C runtime as a DLL.
	(objc.mostlyclean): Clean up files used to build DLL.
	* objc/libobjc.def: New file.
	* objc/libobjc_entry.c: New file.

	* objc/sendmsg.c (search_for_method_in_list): No longer static.

	* Makefile.in (GCC_THREAD_FILE): Renamed from OBJC_THREAD_FILE.
	* configure.lang (GCC_THREAD_FILE): Likewise.
	* configure.in (--enable-threads): New parameter.
	* objc/Make-lang.in (OBJC_THREAD_FILE): New definition.e
	* objc/config-lang.in: Print message about ObjC thread file.

	* cccp.c (INO_T_EQ): Define for Win32 but not Cygwin32.
	* i386/mingw32.h: New file.
	* i386/xm-mingw32.h: New file.
	* configure.in (i[3456]86-*-mingw32): New target.
	* protoize.c (link): Eliminate definition on Win32.

	* objc/thr-posix.c (__objc_thread_yield): Use sched_yield instead.

Fri Jun 27 10:36:41 1997  J"orn Rennecke <amylaar@cygnus.co.uk>

	* stor-layout.c (layout_record, PCC_BITFIELD_TYPE_MATTERS):
	Round up when calculating possible end address.

Wed Jun 25 19:54:29 1997  Jim Wilson  <wilson@cygnus.com>

	* unroll.c (final_giv_value): Verify that bl->initial_value is
	invariant before trying to use it.

Wed Jun 25 18:13:05 1997  Michael Meissner  <meissner@cygnus.com>

	* rs6000/sysv4.h (WCHAR_TYPE{,_SIZE}): Make wchar_t long as per
	ABI spec.

Wed Jun 25 16:56:16 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* sparc.h (INCOMING_RETURN_ADDR_RTX): Define.
	(DBX_REGISTER_NUMBER): Fix frame pointer regno for -mflat.
	* sol2.h (DBX_REGISTER_NUMBER): Likewise.
	* sparc.c (save_regs): Emit dwarf2 frame debug info.
	(output_function_prologue, sparc_flat_save_restore,
	sparc_flat_output_function_prologue): Likewise.

	* dwarf2.h (enum dwarf_call_frame_info): Add DW_CFA_GNU_window_save.
	* dwarf2out.c (dwarf_cfi_name, output_cfi): Support it.
	(dwarf2out_cfi_label): Make non-static.
	(initial_return_save): Support PLUS.
	(dwarf2out_window_save, dwarf2out_return_save, 
	dwarf2out_return_reg): New fns.

	* dwarf2out.c (SECTION_FORMAT): Use PUSHSECTION_FORMAT, if defined.
	(DEBUG_INFO_SECTION): Rename from DEBUG_SECTION.
	(DEBUG_LINE_SECTION): Rename from LINE_SECTION.
	* mips/iris6.h: Likewise.

Wed Jun 25 16:25:41 1997  Scott Christley <scottc@net-community.com>

	* Makefile.in (GCC_PASSES): Don't define with $(exeext).
	* configure.in ({cc,stage_prefix}_set_by_configure): Eliminate extra
	comma and don't pass value to configure.lang.
	* objc/Make-lang.in (objc-runtime): Add objc-headers.

	* configure.in: Execute configure.frag in a shell.

	* configure.in (cross_overrides, build_overrides): Default to
	/dev/null to help platforms where sed cannot handle empty filenames.

	* Reorganize thread implementation to make a clearly defined
	front-end/back-end interface.
	* objc/thr-{decosf1,irix,mach,os2,posix,pthreads,single}.c: Completely
	rework according to new interface.
	* objc/thr-{solaris,win32}.c: Likewise.
	* objc/thr.c: Likewise.
	* objc/thr.h: Define front-end/back-end interface functions and
	structures.

Wed Jun 25 16:14:10 1997  Ovidiu Predescu <ovidiu@net-community.com>

	* Complete implementation of +load.
	* objc/init.c (objc_send_load): New function.
	(objc_class_tree): New structure.
	(create_tree_of_subclasses_inherited_from): New function.
	(__objc_tree_insert_class): New function.
	(objc_tree_insert_class): New function.
	(objc_preorder_traverse): New function.
	(objc_postorder_traverse): New function.
	(__objc_tree_print): New function.
	(__objc_destroy_class_tree_node): New function.
	(class_is_subclass_of_class): New function.
	(__objc_exec_class): Allocate class tree list and load hash table.
	(__objc_send_message_in_list): Rewrite using hash table.
	(__objc_send_load): Remove calls to _objc_load_callback.
	(objc_send_load): Make static.  Create Tree of classes resembling
	class hierarchy for all modules.  Call __objc_send_load on all of 
	the modules in __objc_module_list.
	(__objc_create_classes_tree): New function.

	* objc/encoding.h (method_get_sizeof_arguments): Fix typo.
	* objc/objc-api.h (OBJC_ERR_BAD_STATE): New error code.
	On NeXT redefine object_copy and object_dispose to avoid
	a conflict with those defined in system library.
	* objc/selector.c (__objc_register_instance_methods_to_class): New 
	function.
	* objc/runtime.h: Likewise.  Add missing function prototypes.

Wed Jun 25 15:09:01 1997  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>

	* Makefile.in (Makefile): Execute configure.frag from srcdir.

	* Makefile.in (configure): Target is $(srcdir)/configure.

Tue Jun 24 15:18:14 1997  Jim Wilson  <wilson@cygnus.com>

	* m68k.h (LIMIT_RELOAD_CLASS): Define.

	* recog.c (constrain_operands): When checking earlyclobbers, use
	operands_match_p instead of rtx_equal_p.

	* dwarfout.c (field_byte_offset): Check for object_offset_in_bits
	greater than bitpos_int and recompute object_offset_in_bytes if true.

	* mips.md (movdi_internal): Add x/J alternative.
	(movdi_internal2): Add x/J alternative; change a/I to a/J.
	(movsi_internal1, movsi_internal2): Change x/I alternative to x/J.

Tue Jun 24 08:49:56 1997  Jeffrey A Law  (law@cygnus.com)

	* pa.h (ASM_OUTPUT_SECTION_NAME): Fix typo.

Mon Jun 23 22:48:00 1997  Jim Wilson  <wilson@cygnus.com>

	* unroll.c (find_splittable_givs): Set splittable_regs_updates to
	biv_count for reduced givs.

Mon Jun 23 10:51:53 1997  Jeffrey A Law  (law@cygnus.com)

	* mn10200.c, mn10200.h, mn10200.md: New files for mn10200 port.
	* lib1funcs.asm, divmod.c, udivmod.c, udivmodsi4.c: Likewise.
	* t-mn10200, xm-mn10200.h, va-mn10200.h: Likewise.
	* Makefile.in (USER_H): Add va-mn10200.h.
	* varargs.h, stdarg.h: Include va-mn10200.h.
	* configure.in (mn10200-*-*): New target.
	
Sun Jun 22 06:47:19 1997  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* combine.c (force_to_mode): Don't do anything for ASM_OPERANDS insn.

Sun Jun 22 06:29:28 1997  J. Kean Johnston  <jkj@sco.com>

	* ginclude/stdarg.h: Protect va_list definition from SCO headers.
	* ginclude/varargs.h: Likewise.

Sat Jun 21 20:56:23 1997  Scott Christley <scottc@net-community.com>

	* Make ObjC a front-end language.
	* Makefile.in (LANGUAGES, COMPILERS, .PHONY, stmp-int-hdrs): Remove
	specific references to ObjC compiler and source files.
	({mostly,dist,maintainer,}clean, install-normal): Likewise
	(OBJC_OBJS, OBJC, OBJECTIVE-C, cc1obj, objc-runtime): Rules deleted.
	(libobjc.a, sublibobjc.a, objc-parse.{o, c, y}): Rules deleted.
	(objc-headers, install-libobjc): Rules deleted.
	* objc/Make-lang.in: New file; from rules deleted above.
	* objc/config-lang.in: New file.
	* objc/Makefile.in: Changes to support ObjC as a front-end language;
	renamed from Makefile.in.
	* objc-act.{c,h}, objc-parse.{c,y}, objc-tree.def: Moved to objc dir.

Sat Jun 21 07:54:36 1997  Robert Lipe <robertl@dgii.com>

	* fixinc.sco (math.h): Correct the collision of "exception".

Sat Jun 21 06:51:40 1997  Peter Gerwinski  <peter@agnes.dida.physik.uni-essen.de>

	* rs6000.c (output_epilog): Name is "GNU Pascal", not all caps.

Sat Jun 21 06:29:19 1997  H.J. Lu  (hjl@gnu.ai.mit.edu)

	* gcc.c (main): Check for and read ${libdir}/gcc-lib/specs to
	override the default specs.

Fri Jun 20 17:20:15 1997  Jim Wilson  <wilson@cygnus.com>

	* mips.c (output_block_move): When loading addresses into registers,
	add checks for ABI_N32 and ABI_64.
	(mips_expand_prologue): Add check for SImode in code splitting
	tsize_rtx when it is large_int.

Fri Jun 20 09:07:31 1997  Russell King  <rmk92@ecs.soton.ac.uk>

	* configure.in (arm-*-linuxaout): New target.
	* arm/lib1funcs-linux.asm, arm/linux-gas.h: New files.
	* arm/linux.h, arm/t-linux, arm/xm-linux.h: New file.
	* xm-linux.h: Undef some macros before defining them.

Thu Jun 19 21:18:20 1997  Jim Wilson  <wilson@cygnus.com>

	* dwarf2out.c (output_line_info): Always use DW_LNE_set_address instead
	of DW_LNS_fixed_advance_pc for line number addresses.
	(size_of_line_info): Adjust size calculation as per above change.
	(text_end_label): Make it static.

Thu Jun 19 14:55:49 1997  Brendan Kehoe  <brendan@cygnus.com>

	* toplev.c (xmalloc): Only give the fatal msg if SIZE is non-zero.

Sun Apr 27 23:19:13 1997  Ulrich Drepper  <drepper@cygnus.com>

	* libgcc2.c (__eh_type):  Remove `extern' to make this a definition.

Wed Jun 18 18:10:16 1997  Per Bothner  <bothner@cygnus.com>

	* dbxout.c (dbxout_type_fields):  Skip field if DECL_IGNORED_P.

Wed Jun 18 18:04:33 1997  Mike Stump  <mrs@cygnus.com>

	* except.c (end_eh_unwinder): If we have a return instruction, we
	have to make sure we use it and don't fall off the end of the
	function in the unwinder.

Wed Jun 18 14:27:58 1997  Mike Stump  <mrs@cygnus.com>
 
	* flow.c (find_basic_blocks): Fix end case bug.
 
Tue Jun 17 18:35:57 1997  Mike Stump  <mrs@cygnus.com>

	* libgcc2.c (__eh_pcnthrow): Add support -fno-sjlj-exceptions
	-fPIC exception handling on the SPARC.
	* sparc.h (DONT_ACCESS_GBLS_AFTER_EPILOGUE): Likewise.
	* libgcc2.c (__eh_ffetmnpc): Remove.

Mon Jun 16 20:28:51 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* collect2.c (extract_string): Null-terminate.

Mon Jun 16 14:38:44 1997  Michael Meissner  <meissner@cygnus.com>

	* combine.c (set_nonzero_bits_and_sign_copies): Use REG_SET macros
	instead of doing bit operations directly.
	(try_combine,reg_dead_at_p): Ditto.
	* caller-save.c (save_call_clobbered_regs): Ditto.
	* reload1.c (reload): Ditto.
	* local-alloc.c (update_equiv_regs,block_alloc): Ditto.
	* sched.c (schedule_block): Dito.

Sun Jun 15 20:46:12 1997  Jim Wilson  <wilson@cygnus.com>

	* dwarf2out.c (dwarf2out_frame_debug): Handle IOR.
	(struct limbo_die_struct): Define.
	(TYPE_DECL_IS_STUB): Call decl_ultimate_origin if DECL_ABTRACT_ORIGIN
	is set.
	(limbo_die_count): Delete.
	(libmo_die_list): Define.
	(new_die): Add die to limbo_die_list instead of incrementing
	limbo_die_count.
	(add_AT_location_description): Renamed from add_location_attribute.
	New parameter attr_kind.
	(add_location_or_const_value_attribute, gen_subprogram_die,
	add_bound_info): Change call to add_AT_location_description.
	(add_bound_info): Add call to contains_placeholder_p.  Ignore
	MAX_EXPR and VAR_DECL.
	(add_subscript_info): Ignore the index type if it is an unnamed
	integral type.
	(scope_die_for): Move check for function-local tags after code setting
	containing_scope, and add check for non-NULL containing_scope
	(add_type_attribute): If unnamed type, use TREE_TYPE instead.
	(gen_enumeration_type_die, gen_struct_or_union_type_die): Call
	add_child_die if die_parent is NULL.
	(gen_subprogram_die): Ifdef out DW_AT_static_link code.
	(decls_for_scope): Delete decrement of limbo_die_count.
	(dwarf2out_finish): Add code to traverse the limbo_die_list, and
	call add_child_die if die_parent is NULL.  Delete limbo_die_count code.
	* mips.c (mips_expand_prologue): If tsize_rtx is large_int, emit two
	insns instead of one splitable insn, setting RTX_FRAME_RELATED_P.

Fri Jun 13 19:33:35 1997  Brendan Kehoe  <brendan@cygnus.com>

	* fixincludes: Also fix AIX NULL macro in sys/{dir,param,types}.h.

Thu Jun 12 22:53:12 1997  Jim Wilson  <wilson@cygnus.com>

	* m68k.md (mov[qhs]i): Remove pair of constraints which allow
	offsetable memory addresses to be moved to the same for TARGET_5200.

Thu Jun 12 15:33:01 1997  Jeffrey A Law  (law@cygnus.com)

	* pa.h (SELECT_RTX_SECTION): Place symbolic operands into the
	data section.

	* pa.c (emit_move_sequence): Rewrite code to handle arithmetic
	involving plabels.

Wed Jun 11 08:57:14 1997  H.J. Lu  (hjl@gnu.ai.mit.edu)

	* tree.c (unsave_expr_now): Avoid recursing into the parts of
	the tree that are RTL.

Thu Jun 12 09:43:55 1997  Jeffrey A Law  (law@cygnus.com)

	* reorg.c (emit_delay_sequence): Call set_new_first_and_last_insn
	after the new sequence insn has been spliced into the insn chain.

Wed Jun 11 23:10:49 1997  Jeffrey A Law  (law@cygnus.com)

	* mn10300.md (call, call_value): Use "call" instead of "calls"
	for calls to named functions.

Wed Jun 11 00:22:34 1997  Jim Wilson  <wilson@cygnus.com>

	* configure, configure.in: Restore changes from Feb 15 to Apr 13
	lost during conversion to autoconf.

Tue Jun 10 18:23:35 1997  Mike Stump  <mrs@cygnus.com>

	* stmt.c (expand_decl_cleanup): Avoid core dumping when exceptions
	aren't on.
	
Tue Jun 10 18:22:30 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* collect2.c (extract_string): New fn.
	(main): Use it.

Tue Jun 10 17:40:15 1997  Jim Wilson  <wilson@cygnus.com>

	* expr.c (emit_group_load): Add case using gen_lowpart. 

Tue Jun 10 17:14:58 1997  Michael Meissner  <meissner@cygnus.com>

	* rs6000.c (rs6000_override_options): If -mcpu=403, set -mstrict-align.

	* rs6000/t-ppc{,gas} (MULTILIB_EXTRA_OPTS): Build libraries with
	-mstrict-align.

	* configure.in ({powerpc,rs6000}*-*-*): Add embedded targets to
	--with-cpu=n support.

Tue Jun 10 07:06:12 1997  H.J. Lu  (hjl@gnu.ai.mit.edu)

	* flow.c (mark_used_regs): Fix typo in Jun 4 change.

Mon Jun  9 20:26:26 1997  Jim Wilson  <wilson@cygnus.com>

	* Makefile.in (MAYBE_USE_COLLECT2): Renamed from MAYBE_USE_COLLECT.

Mon Jun  9 19:42:21 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* fold-const.c (fold): Don't do COND_EXPR -> MIN_EXPR folding if it
	loses information that might be needed by a later use as an lvalue.

Mon Jun  9 19:10:50 1997  Alexandre Oliva <oliva@dcc.unicamp.br>

	* configure.in: Don't override a user's setting for prefix
	on platforms that use the native prefix.

Mon Jun  9 19:00:49 1997  Brendan Kehoe  <brendan@melange.gnu.ai.mit.edu>

	* integrate.c (expand_inline_function): Use the mode of FNDECL's
	result rtl, not the result type itself, in setting ARRIVING_MODE.

	* reload1.c (reload): Use xmalloc instead of alloca for the label
	offsets in OFFSETS_AT and OFFSETS_KNOWN_AT.

Mon Jun  9 15:16:52 1997  Mike Stump  <mrs@cygnus.com>

	* flow.c (find_basic_blocks): Eliminate more dead code, enables
	dead throws to be eliminated.

Mon Jun  9 17:15:50 1997  Stephen L Moshier  <moshier@world.std.com>

	* alpha.c (check_float_value):  Underflow and overflow constants
	are different for FLOAT_VAX and default targets.

Mon Jun  9 16:48:21 1997  Scott Christley <scottc@net-community.com>

	* Makefile.in (Makefile): Process language fragments.
	* configure.frag: New file.
	* configure.in: Move language fragment processing to configure.lang.e

	* Makefile.in (GCC_PASSES): Prevent all compilers from being
	built when only the C compiler is needed.

	* configure.in (cross_overrides, build_overrides): Use absolute
	path to GCC top-level source directory.

	* configure.in: Save target alias for language directories.

	* configure.in (with-gxx-include-dir): New parameter for
	setting the g++ header file directory.
	* Makefile.in (gxx_include_dir): Use autoconf variable.

	* configure.in: Add parameter for setting local prefix.

	* configure.lang: New file.
	* configure.in: Move language subdirectory Makefile processing
	into configure.lang.

Mon Jun  9 16:44:47 1997  Jim Wilson  <wilson@cygnus.com>

	* sched.c (attach_deaths): Fix typo in Jun 4 change.

Mon Jun  9 15:13:00 1997  Marc Lehmann  (pcg@goof.com)

	* varasm.c (assemble_end_function): Switch back to function
	section after outputting constant pool.

Mon Jun  9 14:47:22 1997  Paul Eggert  <eggert@twinsun.com>

	* tree.c (change_main_variant): Remove unused function.
	(build_array_type): Remove obsolete references to
	change_main_variant.
	* c-decl.c (complete_array_type): Likewise.

	* c-common.c (c_build_type_variant): Don't futz with main type
	variant of array since C Standard requires main type variant of
	array-of-const also be array-of-const.

	* Makefile.in: Comment out lines containing just formfeeds.

	* Makefile.in (distclean): Remove config.bak.
	(maintainer-clean): Output warning.
	Do not remove `configure'.

Mon Jun  9 14:44:17 1997  J.T. Conklin  <jtc@netbsd.org>

	* configure.in (*-*-netbsd): Restore changes of Apr 13th lost in
	autoconf conversion: tmake_file now t-netbsd; delete xmake_file.

Mon Jun  9 14:39:29 1997  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>

	* expr.c (expand_builtin, case BUILT_IN_FRAME_ADDRESS):
	Use correct function name in error message.

	* Makefile.in (diff): Exclude bi-parser.h.

	* i386.h (CC1_CPU_SPEC): Renamed, was CC1_SPEC.
	(CC1_SPEC): New macro.
	(EXTRA_SPECS): Add "cc1_cpu".
	* i386/linux.h (CC1_SPEC): New macro.

Mon Jun  9 13:23:06 1997  Philippe De Muyter  <phdm@info.ucl.ac.be>

	* m68k/next.h (TARGET_DEFAULT): Use MASK_68040,
	not MASK_68040_ALSO.
	* m68k/mot3300.h, m68k/ccur-GAS.h (TARGET_DEFAULT): Likewise.

	* m68k.h (MACHINE_STATE_{SAVE,RESTORE}): Test #ifdef __mcf52000__,
	not if (TARGET_52000); fixed for mc68000 case.

	* m68k/mot3300.h (CPP_SPEC): Define __mc68020__ if no -m[c]68000
	command-line option given.

Mon Jun  9 09:19:17 1997  H.J. Lu  (hjl@gnu.ai.mit.edu)

	* Makefile.in (target_alias): Substitute with target_alias.

	* final.c (final_scan_insn): Use single_set to check cc_status.flags.

Mon Jun  9 09:09:07 1997  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* c-common.c (check_format_info): Correct handling of the 'a' flag
	which adds another pointer level.

Sun Jun  8 00:34:25 1997  Jeffrey A Law  (law@cygnus.com)

	* pa.md (conditional branch insns): Get length right for branches
	to targets which can not be reached with a "bl" instruction.
	* pa.c (output_cbranch): Handle branches to targets which can not
	be reached with a "bl" instruction.

        * pa.md (alternate dbra pattern): Remove incorrect pattern.

Sat Jun  7 23:30:25 1997  Jeffrey A Law  (law@cygnus.com)

	* pa.c (struct defer_plab): Renamed to struct deferred_plabel.
	Remove "symbol" field and replace with "name" field.
	(output_function_epilogue): Don't output deferred plabels here.
	(output_deferred_labels): New function.  Output them here instead.
	(output_call): Rewrite long call support.
	* pa.h (ASM_FILE_END): Define.
	(LEGITIMATE_CONSTANT_P): Never accept a function_label_operand.
	* pa.md (HIGH and LO_SUM of function address): Remove patterns.

Fri Jun  6 16:09:04 1997  Mike Stump  <mrs@cygnus.com>

	* libgcc2.c (__eh_ffetmnpc): Add support for machines that cannot
	access globals after throw's epilogue when -fno-sjlj-exceptions is
	used.
	* rs6000.c (DONT_ACCESS_GBLS_AFTER_EPILOGUE): Likewise.
	* mips.h (DONT_ACCESS_GBLS_AFTER_EPILOGUE): Likewise.
	(INITIAL_ELIMINATION_OFFSET): Fix RETURN_ADDRESS_POINTER_REGNUM
	for 64 bit words, with 32 bit pointers and variable endianness.

Fri Jun  6 17:27:58 1997  Mike Meissner  <meissner@cygnus.com>

	* regclass.c (allocate_reg_info): Fix off by one error.

Fri Jun  6 17:17:41 1997  Doug Evans  <dje@cygnus.com>

	* basic-block.h (EXECUTE_IF_SET_IN_REG_SET): Fix setting of scan_rs_.
	(EXECUTE_IF_SET_AND_RESET_IN_REG_SET): Likewise.
	(EXECUTE_IF_AND_IN_REG_SET): Likewise.
	(EXECUTE_IF_AND_COMPL_IN_REG_SET): Likewise.

Fri Jun  6 15:42:59 1997  Stan Cox  <coxs@dg-rtp.dg.com>

	* i386.c (notice_cc_update): Set CC_FCOMI is this is a float compare.

Fri Jun  6 15:12:38 1997  Jim Wilson  <wilson@cygnus.com>

	* basic-block.h (REG_SET_TO_HARD_REG_SET): Fix typo.

	* sched.c (update_flow_info): When add extra REG_DEAD note for original
	dest, handle case where last insn both uses and sets dest.

Thu Jun  5 22:19:36 1997  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* fixinc.irix: Add declaration of __vfork to unistd.h.

	* i960/vx960-coff.h (CPP_SPEC): Always define CPU, even if they
	use -ansi; the VxWorks headers assume it's always present.
	* sparc/vxsparc.h (CPP_SPEC): Define, adding the CPU definition to
	what came from sparc.h.
	(CPP_PREDEFINES): Don't define it here.

Thu Jun  5 13:40:33 1997  Mike Meissner  <meissner@cygnus.com>

	* basic-block.c (OBSTACK_ALLOC_REG_SET): Rename from
	OBALLOC_REG_SET.  Add obstack pointer parameter.

	* flow.c (function_obstack): Add declaration.
	(life_analysis): Don't allocate the space to hold to vector of
	regsets here.
	(init_regset_vector): Add pointer parameter and delete space
	paramter.  Use OBSTACK_ALLOC_REG_SET to allocate.  Change callers.
	(propagate_block): Use ALLOCA_REG_SET instead of bare alloca.

	* sched.c (schedule_block): Fix typo in yesterday's changes.
	* reorg.c (mark_target_live_regs): Ditto.

Thu Jun  5 09:44:49 1997  Jeffrey A Law  (law@cygnus.com)

	* sh.c (trap_exit, sp_switch): New variables.
	(print_operand, case '@'): If trap_exit is nonzero, then use
	a trapa instead of an rte/rts to exit the current function.
	(sh_expand_prologue): Switch stacks at function entry as needed.
	(sh_expand_epilogue): Similarly at function exit.
	(function_epilogue): Clear trap_exit and sp_switch too.
	(sh_valid_machine_decl_attribute): New function.
	* sh.h (VALID_MACHINE_DECL_ATTRIBUTE): Define.
	(sp_switch): Declare.
	* sh.md (sp_switch_1, sp_switch_2): New named patterns.

Wed Jun  4 18:11:14 1997  Michael Meissner  <meissner@cygnus.com>

	* basic-block.h (REGSET_ELT_BITS): Make this explicitly unsigned, so
	that division and modulus of REGSET_ELT_BITS uses a pure shift.
	(*_REG_SET): New macros to abstract the register set interface.

	* caller-save.c (save_call_clobbered_regs): Use new *_REG_SET
	macros.
	* flow.c (life_analysis,propagate_block,insn_dead_p): Ditto.
	(regno_uninitialized,regno_clobbered_at_setjmp,mark_set_1): Ditto.
	(mark_used_regs,dump_flow_info,global_conflicts): Ditto.
	global.c (mark_elimination): Ditto.
	* reorg.c (mark_target_live_regs): Ditto.
	* sched.c (sched_{analyze_{1,insn},note_set}): Ditto.
	(birthing_insn_p,attach_deaths,unlink_notes,schedule_block): Ditto.

	* sched.c (sometimes structure): Delete offset, bit fields, replace
	with regno.
	(new_sometimes_live): Take regno argument, not offset and bit.
	Change all callers.

Tue Jun  3 19:18:36 1997  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* fixincludes: Fix AIX NULL macro use of void*.

Tue Jun  3 15:21:04 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* sparc.h (ASM_OUTPUT_MI_THUNK): Handle -fpic.

Mon Jun  2 16:53:53 1997  Michael Meissner  <meissner@cygnus.com>

	* loop.c (n_times_{set,used}): Make type int, not short.
	(scan_loop): n_times{set,used} are now int pointers.

	* sched.c (sched_reg_n_deaths): Remove unused variable.
	(struct sometimes): Make fields int sized, not short.
	(schedule_insns): Don't set sched_reg_n_deaths, nobody uses it.

	* regclass.c (allocate_reg_info): Allocate space for reg_renumber,
	but don't set unless new argument RENUMBER_P is set.  If this is first
	call for function and we need to grow space, use free/xmalloc instead
	of realloc since we will be initializing the whole array.  If number
	of registers is < 0, just free up space.
	(reg_scan): Update allocate_reg_info call.
	* regs.h (allocate_reg_info): Change prototype.
	* flow.c (allocate_for_life_analysis): Update allocate_reg_info call.
	* local-alloc.c (local_alloc): Call allocate_reg_info to allocate
	and initialize the reg_renumber array.
	* stupid.c (stupid_life_analysis): Likewise.

Mon Jun  2 14:50:06 1997  Dave Miller  <davem@jenolan.rutgers.edu>

	* sparc.md (v9 eq/ne cond move patterns): Add early clobber
	constraint to destination.

Fri May 30 11:00:44 1997  Michael Meissner  <meissner@cygnus.com>

	* regs.h (reg_info): New structure to group the arrays indexed by
	register number created by reg_scan and flow_analysis that are
	globally visiable.
	(reg_n_info): Pointer to the register information array.
	(reg_n_{refs,sets,deaths,calls_crossed}): Delete variables.
	(reg_changes_size): Likewise.
	(REG_N_{REFS,SETS,DEATHS,CALLS_CROSSED}): New macros to reference
	reg_n_info.
	(REG_{CHANGES_SIZE,{FIRST,LAST,LAST_NOTE}_UID}): Likewise.
	(allocate_reg_info): Add declaration.

	* basic-block.h (reg_basic_block): Delete.
	(REG_BASIC_BLOCK): Use reg_n_info structure.

	* caller-save.c: Change all references to the above arrays to use
	the corresponding macro to access the reg_n_info array.
	* combine.c, cse.c, flow.c, global.c, jump.c, local-alloc.c: Likewise.
	* loop.c, regclass.c, reload1.c, sched.c, stupid.c, unroll.c: Likewise.

	* regclass.c (allocate_reg_info): New function to allocate the
	reg_info array and initialize the appropriate fields.
	(reg_scan): Call it.
	* flow.c (allocate_for_life_analysis): Call allocate_reg_info to do
	the actual allocation.

Thu May 29 15:42:59 1997  Stan Cox  <coxs@dg-rtp.dg.com>

	* i386.md (movsfcc_1, movdfcc_1, movxfcc_1): Use singlemove_string
	for float conditional move when destination and operands all differ.
	
	* i386.h (ASM_OUTPUT_REG_{PUSH,POP}): add %% before register name.

	* go32.h (ASM_OUTPUT_ALIGN): Use .p2align, not byte alignments. 

Wed May 28 20:44:00 1997  Mike Stump  <mrs@cygnus.com>

	* except.c (push_eh_entry): Eliminate start of exception region
	label, as it isn't used.  Rename end_label to outer_context.
	(expand_eh_region_start_for_decl): Likewise.
	(expand_leftover_cleanups): Likewise.
	(expand_start_all_catch): Likewise.
	* except.h (eh_entry): Likewise.
	* except.c (expand_eh_region_end): Likewise.  Jump around the nop
	that we insert, so that we can optimize it away, if it is unused,
	also so that flow analysis can tell if we fall through to the end
	of a function or not so that it can know if a function that returns
	a value, in fact does or not.

Wed May 28 10:50:09 1997  Jeffrey A Law  (law@cygnus.com)

	* pa.md (jump): Handle out of range unconditional jump
	when not optimizing.

Thu May 22 00:57:07 1997  Jeffrey A Law  (law@cygnus.com)

	* reload1.c (reload_cse_record_set): Ignore values for SREG if
	their mode is narrower than DEST_MODE.

	* pa.h (DFMODE_RETURN_STRING): Define.
	(SFMODE_RETURN_STRING): Likewise.
	(ASM_DECLARE_FUNCTION_NAME): Use them.

Wed May 21 23:32:02 1997  Jeffrey A Law  (law@cygnus.com)

	* mn10300.md (reload_insi): Handle SUBREG properly.

Tue May 20 22:32:13 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* dwarf2out.c (dwarf2out_def_cfa): Set cfa_reg at the top.

Tue May 20 16:57:50 1997  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* cplus-dem.c (do_type): Handle `J'.
	(demangle_fund_type): Print "complex" for it.

Mon May 19 21:01:53 1997  Jim Wilson  <wilson@cygnus.com>

	* m68k.c (output_move_qimode): Add coldfire support.
	* m68k.h (PUSH_ROUNDING): Add coldfire support.
	* m68k.md (scc{,0}_di, seq, sne, sgt, sgtu, slt, sltu, sge, sgeu,
	sle, sleu): Add coldfire support.

Mon May 19 17:53:34 1997  Mike Meissner  <meissner@cygnus.com>

	* rs6000.c: (rs6000_pic_func_labelno): New variable.
	(rs6000_output_load_toc_table): Use it.
	(output_prolog): Store current value.

Sun May 18 16:32:08 1997  Michael Meissner  <meissner@cygnus.com>

	* dbxcoff.h (ASM_OUTPUT_SOURCE_LINE): Use macros
	ASM_{GENERATE,OUTPUT}_INTERNAL_LABEL to create/output line
	number label.

Sun May 18 13:55:12 1997  John Vickers (john@rhizik.demon.co.uk)

        * m68k.h (TARGET_SWITCHES): Add new target name, cpu32.

Sun May 18 13:50:10 1997  Pat Rankin  <rankin@eql.caltech.edu>

	* cccp.c (VMS_write, VMS_read): Delete.
	(safe_write): If MAX_WRITE_LEN is defined, limit
	incremental write attempts to that amount.
	(safe_read): Analogous situation for MAX_READ_LEN.
	* cpplib.c (safe_read): Likewise.
	* vax/xm-vms.h (MAX_WRITE_LEN, MAX_READ_LEN): Define.

	* vax/xm-vms.h (get_dynamic_handler_chain_libfunc): New macro.
	(protect_cleanup_actions_with_terminate): New macro.

Sun May 18 08:50:25 1997  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* m68k/linux.h (ASM_COMMENT_START): Define.
	* m68k/linux-aout.h (ASM_COMMENT_START): Define.

	* reload1.c (reload_cse_regno_equal_p): Check for value using more
	than one register on a big endian machine.

Sun May 18 08:39:59 1997  Vince Del Vecchio  <vdelvecc@spd.analog.com>

	* loop.c (maybe_eliminate_biv_1): In (set (cc0) <biv>) case,
	swap compare operands when mult_val < 0 in one additional place.

Sun May 18 08:33:30 1997  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>

	* dwarf2out.c (ASM_COMMENT_START): Add default definition.

	* Makefile.in (maintainer-claean): Delete configure.

Sun May 18 08:31:59 1997  Scott Christley <scottc@net-community.com>

	* configure.in: New file.
	* Makefile.in: Change to utilize autoconf variables.
	* configure: Now an output file.

Sun May 18 07:48:31 1997  J.T. Conklin  <jtc@netbsd.org>

	* m68k.md (mov[qhs]i,movstrict[qs]i, mulsi3): Use 'Q' constraint
	for TARGET_5200.
	* m68k.h (EXTRA_CONSTRAINT): New macro. 

	* m68k.h (TARGET_SWITCHES): Add 68020-60.
	Mask out bits which indicate a particular processor when a different
	processor is selected.
	(MASK_68040_ALSO): Remove.
	(MASK_68040): Change to be a single bit.

	* m68k.h (TARGET_ALIGN_INT, MASK_ALIGN_INT): New macros.
	(BIGGEST_ALIGNMENT): Determine according to TARGET_ALIGN_INT.
	(TARGET_SWITCHES): Add align-int and no-align-int.

	* m68k.md (mov[qhs]i}): Add pair of constraints which allow
	offsetable memory addresses to be moved to the same for TARGET_5200.

	* m68k.c (output_move_strict{hi,qi}): New functions.
	* m68k.h (output_move_strict{hi,qi}): Declare.
	* m68k.md (movstrict*): Changed into define_expands.
	Split insns into m68k and coldfire specific versions with appropriate
 	constraints.

Sun May 18 07:26:40 1997  Philippe De Muyter  <phdm@info.ucl.ac.be>

	* libgcc2.c (atexit): Cast malloc and realloc calls.

Sat May 17 16:26:51 1997  Bernd Schmidt  <crux@Pool.Informatik.RWTH-Aachen.DE>

	* final.c (profile_function): Call function_section, not
	text_section.

Sat May 17 16:01:00 1997  Philippe De Muyter  <phdm@info.ucl.ac.be>

	* cse.c (notreg_cost): New function, extracted from COST macro.
	(COST): Use notreg_cost.

Sat May 17 15:13:23 1997  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>

	* cse.c (cse_insn): Don't record a SRC that's a MEM and the same
	as a REG_EQUIV note if DEST is set more than once.

Fri May 16 14:50:57 1997  Jeffrey A Law  (law@cygnus.com)

	* pa.c (output_move_double): Handle loading a general register
	from a scaled indexed memory address.
	* pa.md (movdf, movdi): Allow scaled loads into general registers.

Fri May 16 13:31:08 1997  Mike Stump  <mrs@cygnus.com>

	* rs6000.c (rs6000_stack_info): Only do eabi setup for "main",
	when main is the global main, not some nested routine that
	happens to be called main.

Thu May 15 17:19:50 1997  Mike Stump  <mrs@cygnus.com>

	* except.c (expand_start_all_catch): If the machine needs to
	perform any actions at the start of an expcetion handler that
	hasn't already been done, use gen_exception_receiver to emit it.
	(expand_leftover_cleanups): Likewise.
	* alpha.md (exception_receiver): Use it.
	* pa.h (exception_receiver): Use it.

Thu May 15 08:36:59 1997  Jeffrey A Law  (law@cygnus.com)

	* dbxout.c (dbxout_function_end): Don't subtract one from
	the end of function scoping stab.

Wed May 14 23:27:09 1997  Jeffrey A Law  (law@cygnus.com)

	* mn10300.md (adddi3, subdi3): Remove expanders and patterns.

Wed May 14 18:51:35 1997  Mike Stump  <mrs@cygnus.com>

	* function.c (expand_function_end): Make sure we finish off any
	leftover exception handlers.

Tue May 13 14:07:01 1997  Mike Stump  <mrs@cygnus.com>

	* expr.c (expand_builtin_setjmp): Remove setting of
	current_function_has_nonlocal_goto, as this isn't a goto.

Tue May 13 14:47:40 1997  Richard Earnshaw (rearnsha@cambridge.arm.com)

	* arm.h (CPP_SPEC): Fix typo invoking cpp_endian.
	* arm/t-semi (LIB2FUNCS_EXTRA): Build fp-bit.c when compiling
	with -msoft-float.
	* arm.c: Add prototypes for all static functions.
	(output_multi_immediate, int_log2): Make static.

	* arm.h (*_SPEC): Remove all references to mle/mbe.
	* arm/coff.h (MULTILIB_DEFAULTS): Likewise.
	* arm/t-bare (MULTILIB_OPTIONS): Change options mbe/mle to mbig-endian
	and mlittle-endian.
	(MULTILIB_MATCHES): Nothing matches that matters.

Mon May 12 20:42:20 1997  Mike Stump  <mrs@cygnus.com>

	* except.c (expand_start_all_catch): If need nonlocal_goto_receiver,
	add one at the start of exception handler.
	(expand_leftover_cleanups): Likewise.

Mon May 12 17:36:28 1997  Jeffrey A Law  (law@cygnus.com)

	* mips.c (move_operand): Accept any general operand after reload
	has started.

Fri May  9 14:29:33 1997  Jeffrey A Law  (law@cygnus.com)

	* mn10300.md (udivmodhi4, divmodhi4): Remove expander, give
	corresponding pattern [u]divmodhir4 name.  Clear MDR register
	in the udivmodhi4 pattern itself.
	(clear_mdr): Delete pattern.

Thu May  8 18:20:30 1997 Richard Earnshaw (rearnshaw@cambridge.arm.com)

	* arm/aout.h (ASM_OUTPUT_LONG_DOUBLE): Delete call to 
	arm_increase_location.
	(ASM_OUTPUT_{DOUBLE,FLOAT,INT,SHORT,CHAR,BYTE,ASCII,SKIP}): Likewise.
	(ASM_OUTPUT_ALIGN): Delete all code refering to arm_text_location.

	* arm.c (arm_increase_location, get_prologue_size): Delete.
	(arm_naked_function_p): Add declaration.
	(arm_pic_register): Define.
	(all_procs): Delete entries for arm{60,620,70,7d,7di,700i,710c}; add
	entries for arm{7m,7500fe,8}, strongarm and strongarm110.
	(arm_override_options): Rework so that configure can properly set
	the default processor type. Add a warning that PIC code is not yet 
	supported.
	(legitimate_pic_operand_p, legitimize_pic_address): New functions.
	(is_pic, arm_finalize_pic): New functions.
	(arm_adjust_cost): New function.
	(const_pool_offset, arm_backwards_branch, short_branch): Delete.
	(arm_insn_not_targeted): Delete.
	(add_constant): If generating AOF syntax, then handle pic specially.
	(output_ascii_pseudo_op): Delete calls to arm_increase_location.
	(function_really_clobbers_lr): Calls followed by a barrier don't
	clobber the link register.
	(output_func_prologue): Handle AOF syntax pic code.
	(output_func_epilogue): Handle cases where lr_save_eliminated is set.
	Delete call to arm_increase_location.
	(arm_asm_output_label): Simplify, since we no-longer need to cache the
	label's address.
	(aof_pic_entry): New function to keep track of pic symbols.
	(aof_dump_pic_table): New function.

	* arm.h (TARGET_CPU_arm*, TARGET_CPU_strongarm*, TARGET_CPU_generic):
	define.
	(CPP_ARCH_DEFAULT_SPEC): Set up based on setting of TARGET_CPU_DEFAULT.
	(CPP_SPEC): Split up into sub-rule calls.
	(CPP_CPU_SPEC): Add default definition.
	(CPP_APCS_PC_SPEC, CPP_APCS_PC_DEFAULT_SPEC): Add definitions.
	(CPP_FLOAT_SPEC, CPP_FLOAT_DEFAULT_SPEC): Add definitions.
	(CPP_ENDIAN_SPEC, CPP_ENDIAN_DEFAULT_SPEC): Add definitions.
	(CC1_SPEC): Map legacy -m[236] onto -mcpu=.. and -mapcs-{26,32} as
	appropriate. Similarly for -mbe and -mle to -m{big,little}-endian.
	(EXTRA_SPECS): Define.
	(enum processor_type): New types for arm8 and strongarm.
	(CONDITIONAL_REGISTER_USAGE): Handle flag_pic.
	(LEGITIMIZE_ADDRESS): Likewise.
	(ADJUST_COST): Define.
	(PIC_OFFSET_TABLE_REGNUM): Define.
	(FINALIZE_PIC): Define.
	(LEGITIMATE_PIC_OPERAND_P): Define.
	(OUTPUT_INT_ADDR_CONST): Define.
	(ASM_OUTPUT_MI_THUNK): Delete calls to arm_increase_location.
	(MASK_RETURN_ADDR): Use TARGET_APCS_32 not TARGET_6.

	* arm.md (attr cpu): Add new cpu types for arm8 and strongarm.
	(attr ldsched): New attribute, set if processor has a load_delay slot.
	(function_unit core): Rework to handle load delay slots.
	(function_unit loader): New function unit.
	(movsi): Handle pic.
	(pic_load_addr): New expand.
	(*pic_load_addr_based_insn, pic_add_dot_plus_eight): New patterns.
	(peepholes to cause flow to return to a label after a function call):
	Delete, these have been disabled for a while now.

	* arm/riscix.h (CPP_SPEC): Rewrite using new sub-components.
	(SUBTARGET_CPU_DEFAULT): Set to TARGET_CPU_arm2.
	* arm/riscix1-1.h (CPP_SPEC): Rewrite using new sub-components.
	(SUBTARGET_CPU_DEFAULT): Set to TARGET_CPU_arm2.
	* arm/semi.h: (CPP_SPEC): Delete.
	(PROCESSOR_DEFAULT): Delete.
	(CPP_APCS_PC_DEFAULT_SPEC): Define.
	* arm/semiaof.h (CPP_SPEC): Delete.
	(CPP_APCS_PC_DEFAULT_SPEC): Define.
	* arm/t-semi (LIBGCC1_TEST): Don't build it.
	(MULTILIB_{OPTIONS,DIRNAMES,EXCEPTIONS}): Build a suitable set of
	cross libraries.
	(LIBGCC): Set to stmp-multilib.
	(INSTALL_LIBGCC): Set to install-multilib.

Thu May  8 15:20:46 1997  Stan Cox  <coxs@dg-rtp.dg.com>

	* i386.c (output_float_compare): For pentiumpro use fcomip
	followed by a float stack pop for "compare;pop;pop" cases.

Thu May  8 13:20:20 1997  Chris Torek  <torek@elf.bsdi.com>

	* fold-const.c (fold, truth_andor): Disable optimization for 
	side effects on RHS.

Wed May  7 15:43:57 1997  Mike Stump  <mrs@cygnus.com>

	* except.c (start_dynamic_handler): Fix so we can use __builtin_setjmp,
	and default to using __builtin_setjmp instead of setjmp.
	* expr.c (expand_builtin_setjmp): New routine, split out from
	existing inline code from expand_builtin.
	(expand_builtin): Split out code into expand_builtin_setjmp.
	* expr.h (expand_builtin_setjmp): Add declaration.
	* libgcc2.c (__sjthrow): Default to using __builtin_setjmp instead
	of setjmp.
	(__sjpopnthrow): Likewise.
	* optabs.c (init_optabs): Likewise.

Wed May  7 18:01:24 1997  Samuel Figueroa  <Samuel_Figueroa@next.com>

	* rs6000.md (insv): Only combine insert with shift if
	remaining source bits >= destination field size.

Tue May  6 15:48:52 1997  Jason Merrill  <jason@gerbil.cygnus.com>

	* dwarf2out.c (dwarf2out_begin_prologue): Increment
 	current_funcdef_number here.
	(dwarf2out_end_epilogue): Not here.

Mon May  5 18:52:32 1997  Jeffrey A Law  (law@cygnus.com)

	* h8300.c (notice_update_cc): Use CC_SET_ZN and CC_SET_ZNV.
	(shift_one, shift_two): Set CC_NO_CARRY as needed.  Remove
	references to CC_OVERFLOW_0.
	(emit_a_shift): Similarly.
	* h8300.h (CC_OVERFLOW_0): Remove.
	* h8300.md: Use set_zn and set_znv for cc0 tracking.
	(bCC): Restore the comparison is CC_OVERFLOW_UNUSABLE is set and
	the comparison needs the overflow bits.

	* mn10300.c (notice_update_cc): Use CC_SET_ZN and CC_SET_ZNV.
	* mn10300.h (CC_NO_CARRY): Define.
	* mn10300.md: Use "set_zn" and "set_znv" to more accurately
	describe cc0 status.

Fri May  2 17:00:33 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* dwarf2out.c: Reorganize, moving .debug_frame support to the top
	of the file, and compile it if INCOMING_RETURN_ADDR_RTX is defined
	even if DWARF2_DEBUGGING_INFO isn't.
	(EH_FRAME_SECTION): New macro.
	(output_call_frame_info): Handle .eh_frame variant.
	(dwarf2out_def_cfa): Update cfa_*{reg,offset}.
	(dwarf2out_frame_debug): Move cfa_*{reg,offset} to file scope.
	(dwarf2out_end_epilogue): Increment current_funcdef_number here.
	(dwarf2out_decl): Not here.
	(dwarf2out_frame_init, dwarf2out_frame_finish): New fns.
	(dwarf2out_init, dwarf2out_finish): Call them.
	(output_die): Add missing 'case 8:'
	(dwarf2out_decl): Revert other context_die = NULL change.
	(add_bound_info): Restore default case.

Fri May  2 15:30:16 1997  Doug Evans  <dje@seba.cygnus.com>

	* m32r.h (LIT_NAME_P): New macro.
	(SMALL_NAME_P): Use it.
	(ASM_OUTPUT_ALIGNED_COMMON): Don't output to scommon if -msdata=none.
	* m32r.c (addr24_operand): Handle literals.
	(m32r_output_function_prologue): Use IMMEDIATE_PREFIX.
	(m32r_output_function_epilogue): Likewise.  Use shorter add insn if
	able.

Fri May  2 14:40:44 1997  David Edelsohn  <edelsohn@mhpcc.edu>

	* rs6000.h (RS6000_ALIGN): Macro renamed from ALIGN.
	* rs6000.c (rs6000_stack_info): Use it.

Fri May  2 14:15:54 1997  Ian Lance Taylor  <ian@cygnus.com>

	* reload1.c (reload_cse_noop_set_p): When checking the values
	equivalent to sreg, make sure the mode is right.

Fri May  2 12:53:03 1997  Jeffrey A Law  (law@cygnus.com)

	* reload1.c (reload_cse_invalidate_regno): Properly set
	the mode for invalidate_regno_rtx.

Thu May  1 14:57:35 1997  Jeffrey A Law  (law@cygnus.com)

	* pa.md (call_internal_symref): Fix typo.

Thu May  1 14:44:17 1997  Jim Wilson  <wilson@cygnus.com>

	* mips.c (mips_asm_file_start): Use new macro TARGET_FILE_SWITCHING.
	(mips_asm_file_end): Likewise.
	* mips.h (TARGET_FILE_SWITCHING): Define.
	(NO_DBX_FUNCTION_END): Define.

Thu May  1 09:08:40 1997  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* m68k.c (output_addsi3): Replace "\\;" by "\n\t" in
	assembler templates.

Thu May  1 09:00:42 1997  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>

	* integrate.c (subst_constants, case SUBREG): Cancel changes once
	done with result.

Wed Apr 30 19:45:56 1997  Jim Wilson  <wilson@cygnus.com>

	* mips.c (override_options): Set mips_split_addresses only if
	TARGET_SPLIT_ADDRESSES is set.
	* mips.h (MASK_SPLIT_ADDR, TARGET_SPLIT_ADDRESSES): New macros.
	(TARGET_SWITCHES): Add -msplit-addresses, -mno-split-addresses.
	* configure (mips*-*-ecoff*, mips*-*-elf*): Set MASK_SPLIT_ADDR
	bit in target_cpu_default2.

	* flags.h (current_function_is_thunk): Add extern to declaration.

	* dbxout.c (dbxout_function): Test NO_DBX_FUNCTION_END at run time
	instead of compile time.

	* unroll.c (set_dominates_use): In second loop, add check for copy_end.

	* mips.md (paradoxical_extendhidi2, paradoxical_extendqidi2): New
	patterns.

Wed Apr 30 02:23:24 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* output.h (named_section): Add reloc argument.
	(DECL_READONLY_SECTION): New macro.
	* varasm.c (named_section): Add reloc argument, pass it to
 	ASM_OUTPUT_SECTION_NAME.
	(UNIQUE_SECTION, UNIQUE_SECTION_P): Provide defaults.
	(function_section): Pass reloc argument to named_section.
	(variable_section, exception_section): Likewise.
	(output_constant_def_contents): Likewise.
	(assemble_start_function): Use UNIQUE_SECTION_P.  UNIQUE_SECTION is
 	now a statement.
	(assemble_variable): Likewise.
	* mips/iris6.h (ASM_OUTPUT_SECTION_NAME): Add reloc arg,
 	use DECL_READONLY_SECTION.
	* psos.h, ptx4.h, a29k.h, alpha/elf.h, arm/coff.h, h8300.h: Likewise.
	* i386/go32.h, i386/sco5.h, m68k/coff.h, mips/elf64.h: Likewise.
	* mips/netbsd.h, pa.h, rs6000/sysv4.h, sh.h, sparc/sysv4.h: Likewise.
	* config/svr4.h	(SELECT_SECTION): Use DECL_READONLY_SECTION.
	(ASM_OUTPUT_SECTION_NAME): Likewise, add reloc argument.
	(MAKE_DECL_ONE_ONLY): Just set DECL_WEAK.
	(UNIQUE_SECTION, UNIQUE_SECTION_P): Define.
	* i386/cygwin32.h (UNIQUE_SECTION_P): Define.
	(SUPPORTS_ONE_ONLY): Define.
	(MAKE_DECL_ONE_ONLY): Lose.
	(ASM_OUTPUT_SECTION_NAME): Add reloc arg, use DECL_READONLY_SECTION.
	* i386/winnt.c (i386_pe_unique_section): Add reloc arg, 
	use DECL_READONLY_SECTION.

	* mips/iris6.h (CTORS_SECTION_ASM_OP): Change aligment based on ABI.
	(DTORS_SECTION_ASM_OP): Likewise.

Tue Apr 29 16:08:07 1997  Jeffrey A Law  (law@cygnus.com)

	* pa/lib1funcs.asm (divnorm, modnorm, exitdiv): Fix code to
	negate SImode values.

Tue Apr 29 12:54:14 1997  Mike Stump  <mrs@cygnus.com>

	* except.c (expand_eh_region_start_tree): Add DECL argument so we
 	can better track why the region was made for error reporting.
	* except.h (expand_eh_region_start_tree): Likewise.
	* tree.h (expand_dhc_cleanup): Likewise.
	(expand_dcc_cleanup): Likewise.
	* except.c (expand_eh_region_start_for_decl): New routine.
	* except.h (expand_eh_region_start_for_decl): Likewise.
	* stmt.c (expand_decl_cleanup): Add DECL to call of
	expand_eh_region_start_tree.
	(expand_dcc_cleanup): Likewise.
	(expand_dhc_cleanup): Likewise.
	(expand_start_case): Switches introduce conditional contexts.
	(expand_start_case_dummy): Likewise.
	(expand_start_case_dummy): Likewise.
	(expand_end_case): Likewise.

Tue Apr 29 11:45:09 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* dwarf2out.c (dwarf2out_decl): Undo earlier change.
	(constant_size): Likewise.
	(gen_subprogram_die): Handle NULL context_die.

	* mips/iris6.h (ASM_OUTPUT_CONSTRUCTOR): Fix for -mabi=64.
	(ASM_OUTPUT_DESTRUCTOR): Likewise.

Mon Apr 28 09:10:19 1997  Jeffrey A Law  (law@cygnus.com)

	* h8300.c (push_order, pop_order): Add missing initializer entries.

Fri Apr 25 19:39:43 1997  J"orn Rennecke <amylaar@cygnus.co.uk>

	* h8300.c (output_adds_subs): Check for adding 0.

Fri Apr 25 14:52:31 1997  Jim Wilson  <wilson@cygnus.com>

	* configure (i[3456]86-*-freebsdelf*, i[3456]86-*-freebsd*): Use
	t-freebsd instead of x-freebsd.
	* i386/t-freebsd: Renamed from x-freebsd.

Fri Apr 25 12:16:20 1997  Stan Cox  <coxs@dg-rtp.dg.com>

	* go32.h (DBX_*): Use definitions from config/dbxcoff.h instead.

Fri Apr 25 11:55:54 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* i386/cygwin32.h (MULTIPLE_SYMBOL_SPACES): Define.

Thu Apr 24 18:32:56 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* i386/winnt.c (i386_pe_unique_section): New fn.
	* i386/cygwin32.h (UNIQUE_SECTION): Define.
	(MAKE_DECL_ONE_ONLY): Define.
	(ASM_OUTPUT_SECTION_NAME): Support DECL_ONE_ONLY.

	* c-decl.c (implicitly_declare): Don't set DECL_ARTIFICIAL.

Thu Apr 24 17:11:23 1997  Jim Wilson  <wilson@cygnus.com>

	* m68k.h (MACHINE_STATE_SAVE, MACHINE_STATE_RESTORE): Add
	TARGET_5200 support.

Thu Apr 24 16:39:25 1997  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>

	* stmt.c (pushcase_range): Check for null range first.

Wed Apr 23 23:06:28 1997  Ian Lance Taylor  <ian@cygnus.com>

	* reload1.c (reload_cse_record_set): Use push_operand to check for
 	changes to the stack pointer.

Wed Apr 23 19:56:01 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* calls.c (expand_call): If we're in a thunk, pass through invisible
 	references instead of making a copy.
	* flags.h: Add current_function_is_thunk.
	* function.c: Likewise.
	(init_function_start): Initialize it.
	(push_function_context_to): Save it.
	(pop_function_context_from): Restore it.
	* function.h (struct function): Add is_thunk.

Wed Apr 23 17:47:25 1997  Jeffrey A Law  (law@cygnus.com)

	* mn10300.c (secondary_reload_class): Handle more cases where we
	need secondary reloads.
	(impossible_plus_operand): Accept anything that involves addition
	of the stack pointer.
	* mn10300.md (reload_insi): Always load the stack pointer into
	the destination (which is always an address register).
	* mn10300.h (STORE_FLAG_VALUE): Remove definition.
	* xm-mn10300.h: Declare malloc, realloc, calloc and free.

Wed Apr 23 14:28:30 1997  Mike Stump  <mrs@cygnus.com>

	* expr.h (sjthrow_libfunc): Add support for setjmp/longjmp based
	exception handling.
	({sjpopnthrow,terminate,setjmp,longjmp}_libfunc): Likewise.
	(get_dynamic_handler_chain_libfunc): Likewise.
	* expr.c (expand_expr, case TRY_CATCH_EXPR): Likewise.
	(expand_expr, case POPD{C,H}C_EXPR): Likewise.
	* stmt.c (mark_block_as_eh_region): Likewise.
	(mark_block_as_not_eh_region): Likewise.
	(is_eh_region, conditional_contex, expand_start_bindings): Likewise.
	(expand_end_bindings, expand_{decl,dcc,dhc}_cleanup): Likewise.
	(expand_cleanups): Likewise.
	* tree.h (mark_block_as_eh_region): Likewise.
	(mark_block_as_not_eh_region, is_eh_region): Likewise.
	conditional_context, expand_dhc_cleanup): Likewise.
	* except.c (exception_via_longjmp): Likewise.
	(protect_cleanup_actions_with_terminate): Likewise.
	(current_function_d{h,c}c, add_partial_entry): Likewise.
	(get_dynamic_{handler,cleanup}_chain): Likewise.
	(start_dynamic_{cleanup, handler}): Likewise.
	(expand_eh_region_start{,_tree}, expand_eh_region_end): Likewise.
	(emit_throw, expand_leftover_cleanups): Likewise.
	(expand_{start,end}_all_catch, protect_with_terminate): Likewise.
	({start,end}_eh_unwinder, init_eh_for_function): Likewise.
	({save,restore}_eh_status, exception_optimize): Likewise.
	* optabs.c ({sjthrow,sjpopnthrow,terminate,setjmp}_libfunc): Likewise.
	({longjmp,get_dynamic_handler_chain}_libfunc): Likewise.
	(init_optabs): Likewise.
	* except.h: Likewise.
	* libgcc2.c (__default_terminate): Likewise.
	(__terminate, __get_dynamic_handler_chain, __sjthrow): Likewise.
	(__sjpopnthrow): Likewise.
	* toplev.c (f_options): Likewise.
	* tree.def (TRY_CATCH_EXPR, POPDHC_EXPR, POPDCC_EXPR): Likewise.
	* pa.h (JMP_BUF_SIZE): Define.
	* sparc.h (JMP_BUF_SIZE): Define.

	* expr.h (cleanups_this_call): Transform uses of cleanups_this_call
	into uses of the cleanups managed by the block code
	(expand_start_bindings and friends).  Remove defer_cleanups_to and
	expand_cleanups_to, and use start_cleanup_deferal and
	end_cleanup_deferal instead.  Add exception_region,
	target_temp_slot_level, conditional_code,
	last_unconditional_cleanup and cleanup_ptr to struct nesting to
	facilitate conditional cleanups.
	* expr.c (cleanups_this_call, init_expr): Likewise.
	({save,restore}_expr_status, store_expr): Likewise.
	(expand_expr, {defer,expand}_cleanups_to): Likewise.
	(do_jump, case TRUTH_{AND,OR}IF_EXPR): Likewise.
	(do_jump, case COND_EXPR): Likewise.
	* stmt.c (struct nesting): Likewise.
	(expand_return, expand_start_bindings, expand_end_bindings): Likewise.
	(expand_cleanups, {start,end}_cleanup_deferal): Likewise.	
	* tree.h (start_cleanup_deferal): Likewise.
	(end_cleanup_deferal): Likewise.
	* calls.c (expand_call): Likewise.
	* function.h (struct function): Likewise.
	* except.c (asynchronous_exceptions): Support
	-fasynchronous_exceptions.
	(can_throw): Likewise.
	* toplev.c (f_options): Likewise.

	* flags.h (flag_short_temps): Remove support for short temps.
	* calls.c (expand_call): Likewise.
	* toplev.c (flag_short_temps): Likewise.

	* stmt.c (expand_start_target_temps): Add for convenience.
	(expand_end_target_temps): Likewise.
	* except.c (jumpif{,not}_rtx): Likewise.

	* stmt.c: Remove all traces of empty_cleanup_list.

Wed Apr 23 17:26:40 1997  Ian Lance Taylor  <ian@cygnus.com>

	* reload1.c (reload_cse_mem_conflict_p): Don't assume that a
	SUBREG can not conflict with a MEM.

Wed Apr 23 09:48:58 1997  Oliver Kellogg  (oliver.kellogg@space.otn.dasa.de)

	* 1750a.md (cmphi): Fixed when next CC user is unsigned.
	(mov[hq]i-[23]): New patterns for mem-indirect moves.
	(movhf,movtqf): Corrected.
	* 1750a.c (memop_valid): Memory indirection now valid.
	(nonindirect_operand): Remove.
	(print_operand): Fix the 'J' output modifier.
	* 1750a.h (FRAME_POINTER_REQUIRED): Not required.
	(INITIAL_FRAME_POINTER_OFFSET,FIX_FRAME_POINTER_ADDRESS): Undefine.
	(FUNCTION_PROLOGUE,FUNCTION_EPILOGUE): Honor -fomit-frame-pointer.
	(ELIMINABLE_REGS,CAN_ELIMINATE,INITIAL_ELIMINATION_OFFSET): Defined.
	(PREFERRED_RELOAD_CLASS): Corrected.
	(CONST_COSTS,ADDRESS_COST,REGISTER_MOVE_COST,MEMORY_MOVE_COST):
	Slight adjustments.
	(ASM_APP_ON,ASM_APP_OFF): Corrected.
	* ms1750.inc (DUCR.M,DUC.M): Defined.

Wed Apr 23 09:41:35 1997  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* reload.c (push_reload): Fix last arg of call to find_dummy_reload.

Wed Apr 23 09:29:14 1997  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>

	* configure (i[3456]86-next-*, m68k-next-nextstep{2,3}*):
	Remove out_file and add extra_objs.
	* config/nextstep.c: Add includes for config.h, stdio.h, and flags.h.
	* {i386,m68k}/t-next (nextstep.o): New rule.
	* m68k/next.h: Remove include of machmode.h.
	* {i386,m68k}/next.c: Files deleted.

Tue Apr 22 20:45:29 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* sparc.h (DBX_CONTIN_LENGTH): Shrink to 1000.

Tue Apr 22 18:21:20 1997  Jim Wilson  <wilson@cygnus.com>

	* dwarf2out.c (gen_variable_dir):  Add test for DW_AT_declaration to
	the old_die if statement, and delete assertion for it.
	(decl_ultimate_origin): Remove last change.

Tue Apr 22 10:22:27 1997  Jeffrey A Law  (law@cygnus.com)

	* mn10300.c (expand_prologue): End the current sequence before
	counting the tst insns in the current function.  Start a new
	one before emitting any prologue instructions.

	* mn10300.h (REGISTER_MOVE_COST): Bump up cost of moves in the
	same class.

	* mn10300.md (untyped_call): New expander.

Mon Apr 21 16:30:21 1997  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>

	* cse.c (fold_rtx, case PLUS): When seeing if negative of constant
	is around, make sure not dealing with largest negative.

Mon Apr 21 13:57:53 1997  Jim Wilson  <wilson@cygnus.com>

	* mips/t-ecoff: Set TARGET_LIBGCC2_CFLAGS instead of LIBGCC2_CFLAGS.

	* m68k.c (output_addsi3): New function.  From addsi3 pattern.
	* m68k.h (output_addsi3): Add declaration.
	* m68k.md (movqi+2): Add address registers.
	(movxf+1): Disable for TARGET_5200.
	(movxf+2): New pattern for TARGET_5200.
	(addsi3): Add define_expand.  Move code to output_addsi3.
	(addsi3_internal): Renamed from addsi3.  Disable for TARGET_5200.
	(addsi3_5200): New pattern for TARGET_5200.

Sun Apr 20 10:45:35 1997  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>

	* fold-const.c (operand_equal_p): Constants are not equal if there
	has been an overflow.

	* toplev.c (compile_file): Shorten "branch-probabilities" in
 	output of times.

	* alpha/vms.h (MOD[SD]I3_LIBCALL): Call ots$rem, not ots$mod.
	(DWARF2_DEBUGGING_INFO): Define.

	* alpha.c (alpha_need_linkage): Call get_identifier.

	* rs6000.c (rs6000_output_load_toc_table): New function.
	(output_prolog): Call it instead of doing it directly.
	* rs6000.md (nonlocal_goto_receiver): New pattern.

	* dwarf2out.c: Major cleanup; mostly reformatting.
	Include expr.h.
	Undefine inline ifndef __GNUC__; never define to include static.
	Add "static" to header of all inlined functions.
	Add declarations for all static functions, with prototypes.
	(addr_const_to_string): Use HOST_WIDE_INT_PRINT_* macros.
	(add_AT_*, new_{die,loc_descr,cfi): Don't check for xmalloc
	returning zero.
	(modified_type_die): Add missing parm on recursive call.
	({reg,based}_loc_descriptor): Add missing arg to call to new_loc_descr.
	(add_const_value_attribute): Use REAL_VALUE_TYPE for fp calculations.
	(output_call_frame_info): Add missing arg to output_cfi call.
	(dwarf2out_def_cfa): Local variable OLD_REG must be unsigned long.
	* Makefile.in (dwarf2out.o): Includes expr.h.
	
	* dwarf2out.c: Cast first arg in all calls to bzero to char *.
	(decl_ultimate_origin): Return NULL if equal to decl.
	(constant_size): Never return more than 4.
	(value_format, case 8): New case.
	(dwarf2out_frame_debug): Use HARD_FRAME_POINTER_REGNUM.
	(based_loc_descr): Likewise.
	(add_bound_info): Delete default case.
	Add cases for CONVERT_EXPR and NON_LVALUE_EXPR; treat like NOP_EXPR.
	Change NOP_EXPR to recursive call.
	(add_type_attribute): Ignore unnamed subtype of integral or FP.
	(gen_subprogram_die): Use reg_loc_descriptor.
	(dwarf2out_decl): Ignore nested functions.

	* fix-header.c, protoize.c, gcov.c: Use symbolic codes for exit.

	* final.c (profile_function): Only call ASM_OUTPUT_REG_{PUSH,POP}
	if defined.

	* expr.c ({move,clear}_by_pieces_1, expand_assignment): Ensure
	we have unshared rtx before changing flags.
	(store_{constructor,field}): Likewise.
	(expand_expr, case COMPONENT_REF): Likewise.
	(store_expr): Check if TEMP and TARGET are same with rtx_equal_p.

	* emit-rtl.c (change_address, init_emit): Delete forward references.
	(rtl_obstack, stack_depth, max_stack_depth): Delete extern decls.

Fri Apr 18 18:25:52 1997  Jim Wilson  <wilson@cygnus.com>

	* function.c (instantiate_decls): For DECL_INCOMING_RTL, use max
	of type size and mode size in instantiate_decl call.

	* fixincludes (sys/lc_core.h): Fix OSF1/4.x namespace pollution.

Wed Apr 16 19:36:53 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* dwarf2out.c (add_bound_info): Use a DIE instead of a location
	expression for variable bounds.  Trust a MEM rtx even when
	optimizing.
	(DWARF_FRAME_RETURN_COLUMN): Default to FIRST_PSEUDO_REGISTER.

	* expr.c (expand_expr, case RTL_EXPR): If there is no sequence,
 	don't set it to const0_rtx.
	* tree.c (array_type_nelts): Don't return any SAVE_EXPRs.

Mon Apr 14 18:12:57 1997  David Edelsohn  <edelsohn@mhpcc.edu>

	* rs6000.h (RS6000_ITRUNC, RS6000_UITRUNC): Prepend underscores.
	(RS6000_MCOUNT): New macro.
	(ASM_FILE_START): Use RS6000_MCOUNT.
	* rs6000.c (output_function_profiler): Use RS6000_MCOUNT.
	* rs6000/aix31.h (RS6000_{ITRUNC,UITRUNC,MCOUNT}): New macros.

Mon Apr 14 14:37:27 1997  Jeffrey A Law  (law@cygnus.com)

	* mn10300.c (can_use_return_insn): Include outgoing argument
	area in size computation.
	(expand_prologue): Likewise.  No longer diddle with sequences.
	Put register saves just before outgoing argument area.
	(expand_epilogue): Similarly.
	(impossible_plus_operand): New function.
	* mn10300.h (FRAME_POINTER_REQUIRED): Never require a frame pointer.
	(ACCUMULATE_OUTGOING_ARGS, OUTGOING_REG_PARM_STACK_SPACE): Define.
	(impossible_plus_operand): Declare.
	* mn10300.md (reload_insi): New expander to handle pathological
	reload cases.
	(addsi3): Fix CC status.

	* mn10300.h (FUNCTION_VALUE): Return addresses in $a0.
	(FUNCTION_VALUE_REGNO_P): Corresponding changes.
	* mn10300.md (call_value_internal): Allow output to be in an
	address register.

	* calls.c (emit_library_call): Handle saving of stack slots when
	ACCUMULATE_OUTGOING_ARGS is defined.
	(emit_library_call_value): Likewise.

Mon Apr 14 14:48:15 1997  Jim Wilson  <wilson@cygnus.com>

	* sh.md (xtrct_left, xtrct_right): New patterns.

	* combine.c (get_last_value_validate): New argument insn.
	Add check for memory reference clobbered by later store.
	(record_value_for_reg, get_last_values): Pass in new argument.

Mon Apr 14 14:03:18 1997  Mike Meissner  <meissner@cygnus.com>

	* configure (powerpc --with-cpu=x): Add embedded powerpcs and 604e.

	* rs6000.c (rs6000_override_options): Recognize -mcpu=801, -mcpu=823,
	and -mcpu=604e.

Sun Apr 13 18:43:16 1997  Ian Lance Taylor  <ian@cygnus.com>

	* reload1.c (invalidate_regno_rtx): New static variable.
	(reload_cse_invalidate_regno): Check whether any earlier registers
	have a multi-register value which includes the register we are
	invalidating.
	(reload_cse_regs): Initialize invalidate_regno_rtx.

	* reload1.c (reload_cse_record_set): When setting reg_values for a
	copy from one register to another, use gen_lowpart_common to
	adjust the value correctly if the mode changes.

Sun Apr 13 17:24:48 1997  Doug Evans  <dje@cygnus.com>

	* expr.c (move_block_from_reg): Try using integral mov operation first.

	* calls.c (expand_call): When copying unaligned values into a register,
	zero out the register first rather than emitting a clobber.

	* integrate.c (copy_rtx_and_substitute): If FRAME_GROWS_DOWNWARD
	and regno == VIRTUAL_STACK_VARS_REGNUM,	round size of stack slot up
	before calling assign_stack_temp.

Sun Apr 13 15:29:38 1997  Ulrich Drepper  <drepper@cygnus.com>

	* enquire.c (fake_f_rep): Add missing element name in cast.

Sun Apr 13 15:20:05 1997  J"orn Rennecke <amylaar@cygnus.co.uk>

	* stor-layout.c (layout_record, PCC_BITFIELD_TYPE_MATTERS):
	Fix sign bug in last change.

Sun Apr 13 15:03:38 1997  J.T. Conklin  <jtc@netbsd.org>
	
	* m68k.md (movstricthi): Remove extraneous comparisons.

	* configure (*-*-netbsd): tmake_file now t-netbsd; delete xmake_file.
	* config/t-netbsd: New file.
	* config/x-netbsd: Removed.

Sun Apr 13 14:51:25 1997  Richard Earnshaw (rearnsha@armltd.co.uk)

	* cse.c (canon_reg, cse_insn): Don't examine insn_n_dups if
	recog_memoized fails to find a match.

Sun Apr 13 14:17:26 1997  Ian Lance Taylor  <ian@cygnus.com>

	* reload1.c (reload_cse_noop_set_p): Add insn parameter.  Change
	all callers.  If deleting the instruction, remove any earlier
	REG_DEAD note for DREG.
	(reload_cse_simplify_set): If simplifying, remove any earlier
	REG_DEAD note for the new source register.

Sun Apr 13 14:12:08 1997  Pat Rankin  <rankin@eql.caltech.edu>

	* libgcc2 (L_bb, L_exit): Use 0 rather than NULL for null pointers.

Sun Apr 13 12:53:03 1997  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* m68k/linux.h (ASM_SPEC): Define.
	(STRUCT_VALUE_REGNUM, STATIC_CHAIN_REGNUM, INITIALIZE_TRAMPOLINE):
	Remove definitions, undoing the change of Mar 20 1996. 

	* m68k.c (output_move_qimode): Optimize pushing one byte if source
	operand does not use stack pointer.

	* m68k.md (rotl[shq]i3, rotl[hq]i3+1): Don't directly modify operand.

	* m68k.md (tstdi): Add missing parallel around the pattern.

Sun Apr 13 12:51:00 1997  Paul Eggert  <eggert@twinsun.com>

	* cccp.c, cpplib.c (do_include): Diagnose #import and
	#include_next if pedantic and if not in a system header.
	(do_warning): #warning now causes an error if -pedantic-errors
	is given; this is needed since #warning isn't ANSI.

	* toplev.c (lang_options): Add -Wundef, -Wno-undef.
	* c-decl.c (c_decode_option): Ignore -Wundef, -Wno-undef.

	* cccp.c, cexp.y (warn_undef): New variable.
	* cpplib.h (struct cpp_options): New member warn_undef.
	(CPP_WARN_UNDEF): New macro.

	* cccp.c (main), cpplib.c (cpp_handle_options): Set warn_undef
	from -Wundef and -Wno-undef.

	* cppexp.c (cpp_lex) New arg skip_evaluation.
	(cpp_parse_expr): Pass skip_evaluation to cpp_lex.
	Abort if cpp_lex returns NAME.

	* cexp.y (exp), cppexp.c (cpp_lex): Optionally warn about undefined
	identifiers that evaluate to 0.

Sun Apr 13 11:43:16 1997  Joel Sherrill  <joel@OARcorp.com>

        * configure (hppa1.1-*-rtems*): New target.
        * mips/rtems.h: New file.

Sun Apr 13 09:48:26 1997  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>

	* gcov.c (print_usage, open_files): Use FATAL_EXIT_CODE.
	* collect2.c (fatal_perror, fatal, collect_wait): Likewise.

	* sparc.c (eligible_for_delay_slot): Clean up and make to agree
	precisely with patterns in MD file.
	* sparc.md (*return_addsi): Change condition to exclude both ints.
	(*return_adddi): Likewise.
	(*return_subsi): New pattern.

	* recog.c (validate_replace_rtx_1, case MINUS): New case.
	
Sun Apr 13 08:20:24 1997  Thomas Bushnell  <thomas@gnu.ai.mit.edu>

	* i386/gnu.h (TARGET_VERSION): Redefine.

Sun Apr 13 08:15:31 1997  Bernd Schmidt  <crux@Pool.Informatik.RWTH-Aachen.DE>

	* c-typeck.c (lookup_field): Don't recurse unless FIELD is
	a RECORD_TYPE or UNION_TYPE.

	* final.c (profile_function): Save the static chain register
	around the call to the profiler function.

	* loop.c (invariant_p, case REG): Pointers into frame are not
	invariants if function has nonlocal gotos.
	* reload1.c (reload): If function has nonlocal label, mark all
	caller-saved regs as used.

Fri Apr 11 16:49:06 1997  Doug Evans  <dje@seba.cygnus.com>

	* m32r.h (REG_ALLOC_ORDER): Restore to original setting.

	* m32r.h (UPPER16_P): Fix calculation.
	* m32r.c (two_insn_const_operand): New function.
	(m32r_print_operand): Handle 'X'.
	* m32r.md (movsi): Tweak.
	(*movsi_insn): Output hex value of constants too.
	(movsi define_split): Add.
	(andsi3,orsi3,xorsi3): Output hex value of constants too.

Thu Apr 10 18:39:33 1997  Jim Wilson  <wilson@cygnus.com>

	* sh.md (sne): Modified to use negc instead of xor.
	(sne+1): New define_split for new sne pattern.
	* sh.c (output_stack_adjust): Reorganize code for readability.
	If size is negative, negate and subtract it instead of adding it.

Wed Apr  9 13:51:07 1997  J"orn Rennecke <amylaar@cygnus.co.uk>

	* sh.c (output_stack_adjust): When splitting an adjustment into two
	parts, make sure the stack is aligned at all times.

Tue Apr  8 12:34:38 1997  Jeffrey A Law  (law@cygnus.com)

	* mn10300.h (RETURN_ADDR_RTX): Define.

Mon Apr  7 19:19:57 1997  Jeffrey A Law  (law@cygnus.com)

	* mn10300.c (count_tst_insns): New function.
	(expand_prologue): Load zero into data and/or address registers
	if any are free and the function has optimizable tst insns.
	(output_tst): If a suitable register is known to have the
	value zero, use it instead of searching for a suitable register.
	* mn10300.h (zero_dreg, zero_areg): Declare.
	(FRAME_POINTER_NEEDED): Frame pointers are not needed if the
	outgoing argument size is zero.
	* mn10300.md (movXX): Optimize loading zero into an address
	register if possible.  Optimize loading a DF/DI mode value
	into an address register from a constant memory address.
	(addsi3): Provide alternative which doesn't require a matching
	inout operand.
	(return): Optimize consecutive return instructions.

Mon Apr  7 17:30:35 1997  J"orn Rennecke <amylaar@cygnus.co.uk>

	* mips/iris5.h (SUBTARGET_CC1_SPEC): Define.
	(LINK_SPEC, STARTFILE_SPEC): Support -static.
	* mips/iris6.h (SUBTARGET_CC1_SPEC): Define.
	(STARTFILE_SPEC, LINK_SPEC): Support -static.
	* mips.h: (SUBTARGET_CC1_SPEC): Define.
	(CC1_SPEC): Add subtarget_cc1_spec.
	(EXTRA_SPECS): Add subtarget_cc1_spec.

Sun Apr  6 12:24:53 1997  Richard Earnshaw (rearnsha@armltd.co.uk)

	* arm.md (incscc): Use a match_operand with cc_register to match
	the condition code register.
	(decscc, *condbranch, *condbranch_reversed, *mov_scc): Likewise.
	(*mov_negscc, *mov_notscc, *cond_return): Likewise.
	(*cond_return_inverted, *ior_scc, *cond_move): Likewise.
	(insv): New expand.
	(andsi_notsi_si): Renamed from *andsi_notsi_si.
	(andsi_not_shiftsi_si): New insn.
	(*minmax_arithsi): Don't match this insn if operand1 is an
	eliminable register.
	({sin,cos}*): Delete, since the ARM always emulates these its
	faster to call a library function.
	(movsicc, *movsicc_insn): Make operand0 an s_register_operand,
	and operand3 an arm_not_operand.  Use cc_register to match the
	condition code register.
	(mov[sd]fcc*): Make operand[0,2] s_register_operands, and operand3
	the nonmemory_operand.  Use cc_register to match the condition
	code register.
	(*ifcompare_plus_move): Move before *ifcompare_arith_move.  Just do
	a split for the output.
	(*ifcompare_move_plus): Similarly, but relative
	to *ifcompare_move_arith.
	(*if_plus_move, *if_move_plus): New patterns.
	(*ifcompare_arith_arith): Simplify the alternatives down to just one,
	and split the insn before output.
	(*if_arith_arith, *if_arith_move, *if_move_arith): New patterns.
	(*ifcompare_move_not, *ifcompare_not_move): Simplify and split the
	insn before output.
	(*if_move_not, *if_not_move): New patterns.
	(*ifcompare_shift_move, *ifcompare_move_shift): Simplify and split the
	insn before output.
	(*if_shift_move, *if_move_shift): New patterns.
	(*ifcompare_shift_shift): Simplify and split the insn before output.
	(*if_shift_shift): New pattern.
	(*ifcompare_not_arith, *ifcompare_arith_not): Simplify and split the
	insn before output.
	(*if_not_arith, *if_arith_not): New patterns.
	(*ifcompare_neg_move, *ifcompare_move_neg): Simplify and split the
	insn before output.
	(*if_neg_move, *if_move_neg): New patterns.

Sat Apr  5 20:17:43 1997  Michael Meissner  <meissner@cygnus.com>

	* rs6000/sol-ci.asm (_environ): Don't make _envrion a common
	variable, the lastest assembler doesn't let common variables also
	be a weak symbol.

Fri Apr  4 18:30:12 1997  Jim Wilson  <wilson@cygnus.com>

	* rs6000.md (adddi3): Use non_short_cint_operand instead of
	non_add_cint_operand.

Thu Apr  3 15:08:39 1997  Jeffrey A Law  (law@cygnus.com)

	* mn10300.c (can_use_return_insn): Add size of fixed stack space
	for function calls into the size of the frame.
	(expand_prologue, expand_epilogue): Likewise.
	(initial_offset): Corresponding changes..
	* mn10300.h (OUTGOING_REG_PARM_STACK_SPACE): No longer define.
	(STACK_POINTER_OFFSET): Define.
	* mn10300.md (call, call_value expanders): Don't adjust the stack
	pointer here anymore.

	* mn10300.md (ashlsi3): Remove some alternatives which are no longer
	needed or desired.

Thu Apr  3 15:06:53 1997  Jim Wilson  <wilson@cygnus.com>

	* local-alloc.c (no_conflict_p): Reject sequences with foreign insns.

	* combine.c (move_deaths): Handle partial REG_DEAD note for
	multi-reg hard register.

	* function.c (expand_function_start): Emit queue after expanding
	each dynamic parameter type.

	* mips.c (mips_move_2words): Add SIGN_EXTEND support for SYMBOL_REF,
	LABEL_REF, and CONST operands.

	* dwarf2out.c: Delete comment referring to README.DWARF.

Wed Apr  2 17:21:23 1997  Jim Wilson  <wilson@cygnus.com>

	* rs6000.md (ashrdi3_power): Mark alternative 0 as early_clobber
	output.

	* rs6000.md (abssi3_nopower define_split): Switch operands of MINUS.
	(nabssi3_nopower define_split): Likewise.

Tue Apr  1 19:30:01 1997  Mike Stump  <mrs@cygnus.com>
	
	* libgcc2.c (find_exception_table): Fix to logic to deal with
	functions that are in their own section, such as template
	instantiations, that cause overlapping EH tables.

Tue Apr  1 17:16:22 1997  Jeffrey A Law  (law@cygnus.com)

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

	* ginclude/stdarg.h: Include va-mn10300.h.
	* ginclude/varargs.h: Likewise.
	* ginclude/va-mn10300.h: New file.
	* mn10300.c (expand_prologue): If current_function_varargs is nonzero,
	flush d0/d1 back into stack.
	(mn10300_builtin_saveregs): New function.
	(function_arg, function_arg_partial_nregs): New functions.
	(initial_offset): Tweak now that the RP save area is allocated
	and deallocated around each call again.
	* mn10300.h (FIRST_PARM_OFFSET): Now 4.
	(FRAME_POINTER_REQUIRED): Require frame pointer for all non-leaf fcns.
	(REG_PARM_STACK_SPACE): Now 8 bytes.
	(FUNCTION_ARG_REGNO_P): Update for new parameter passing conventions.
	(CUMULATIVE_ARGS, INIT_CUMULATIVE_ARGS): Likewise.
	(FUNCTION_ARG_ADVANCE, FUNCTION_ARG): Likewise.
	(FUNCTION_ARG_PARTIAL_NREGS): Likewise.
	(TRAMPOLINE_TEMPLATE): Don't clobber d0 anymore.
	(TRAMPOLINE_SIZE, INITIALIZE_TRAMPOLINE): Corresponding changes.
	(EXPAND_BUILTIN_SAVEREGS): Define.
	* mn10300.md (call, call_value patterns): Allocate and deallocate
	stack slot for return pointer around each call.

	* mn10300.h (RTX_COSTS): Refine.
	(CASE_VALUES_THRESHHOLD, NO_FUNCTION_CSE): Likewise.
	* mn10300.c (output_tst): New function.
	* mn10300.md (movdi, movdf): Improve code to load constants into regs.
	(tst insns): Use output_tst to optimize some cases.  Add versions to
	encourage more zero extensions instead of sign extensions of HImode
	and QImode values.
	(divsi3, udivsi3): Remove patterns.  Replaced by...
	(divmodsi4, udivmodsi4): New expanders/patterns.
	(andsi3): Optimize "and" operations with certain constants.

Tue Apr  1 09:14:29 1997  J"orn Rennecke <amylaar@cygnus.co.uk>

	* sh.h: (ADJUST_COSTS): Define.

Fri Mar 28 17:46:13 1997  Jim Wilson  <wilson@cygnus.com>

	* Makefile.in (LANGUAGES): Add gcov.
	(OBJS): Add profile.o.
	(STAGESTUFF): Add gcov.
	(profile.o, gcov.o, gcov): Add rules to build them.
	(install-common): Install gcov.
	* combine.c (distribute_notes): Handle REG_BR_PROB and REG_EXEC_COUNT
	REG_NOTES.
	* sparc.h (OVERRIDE_OPTIONS): Check profile_arc_flag.
	* final.c (LONG_TYPE_SIZE): Define.
	(count_instrumented_arcs): New variable.
	(end_final, profile_after_prologue, leaf_function_p): Add support
	for profile_arc_flag.
	(add_bb): Only call CC_STATUS_INIT if HAVE_cc0.
	* flags.h (profile_arc_flag, flag_test_coverage,
	flag_branch_probabilities): Declare.
	* function.c (expand_function_end): Output NOTE_REPEATED_LINE_NUMBER
	for last line of function.
	* integrate.c (expand_inline_function): Output
	NOTE_REPEATED_LINE_NUMBER after inlined call.
	* jump.c (jump_optimize, follow_jumps, mark_jump_label): Disable some
 	optimizations when flag_test_coverage and there is a line number note
 	in the way.
	(invert_jump): Add REG_BR_PROB when flag_branch_probabililties.
	* libgcc2.c (__bb_exit_func): Support gcov style output.
	* reorg.c (mostly_true_jump): Use REG_BR_PROB notes when
	flag_branch_probabilities.
	* rtl.c (note_insn_name): Add NOTE_REPEATED_LINE_NUMBER.
	(reg_note_name): Add REG_BR_PROB and REG_EXEC_COUNT.
	* rtl.h (enum reg_note): Add REG_BR_PROB and REG_EXEC_COUNT.
	(REG_BR_PROB_BASE): Define.
	(NOTE_REPEATED_LINE_NUMBER): Define.
	* sched.c (update_flow_info): Handle REG_EXEC_COUNT and REG_BR_PROB
	notes.
	* toplev.c (branch_prob_dump, profile_arc_flag, flag_test_coverage,
	flag_branch_probabilities, branch_prob_dump_file, branch_prob_time):
	New variables.
	(f_options): Add profile-arcs, test-coverage, and
	branch-probabilities.
	(compile_file): Set branch_prob_time.  Pass flag_test_coverage to
	init_emit_once.  Handle branch_prob_dump.  Call init_branch_prob.
	Call end_branch_prob. Call output_func_start_profiler.
	(rest_of_compilation): Handle branch_prob_dump.  Call new
	branch_prob pass.
	(main): Set branch_prob_dump.
	* gcov.c, profile.c, gcov-io.h, gcov.texi: New files.

Thu Mar 27 16:52:52 1997  Stan Cox  <coxs@dg-rtp.dg.com>

	* i386.h (CPP_CPU_DEFAULT): Define if TARGET_CPU_DEFAULT is not set.
	* i386.h (STACK_BOUNDARY): Define to always be 32.

	From J"orn Rennecke <amylaar@cygnus.co.uk>
	* i386.md: (zero_extendhisi2+[12]): Use true_regnum instead of
	REGNO for operand 0.  
	(zero_extendqisi2+3): Use reg_overlap_mentioned_p instead of REGNO
 	comparison; use true_regnum instead of REGNO for rtx generation.

Wed Mar 26 12:34:21 1997  Ian Lance Taylor  <ian@cygnus.com>

	* reload1.c (reload): Call reload_cse_regs.
	(reg_values): New static variable.
	(reload_cse_invalidate_regno): New static function.
	(reload_cse_mem_conflict_p): New static function.
	(reload_cse_invalidate_mem): New static function.
	(reload_cse_invalidate_rtx): New static function.
	(reload_cse_regs): New static function.
	(reload_cse_regno_equal_p): New static function.
	(reload_cse_noop_set_p): New static function.
	(reload_cse_simplify_set): New static function.
	(reload_cse_check_clobbered): New static variable.
	(reload_cse_check_src): New static variable.
	(reload_cse_check_clobber): New static function.
	(reload_cse_record_set): New static function.

Wed Mar 26 07:34:06 1997  Ulrich Drepper  <drepper@cygnus.com>

	* ginclude/stdarg.h (__va_copy): New definition.

Tue Mar 25 13:43:36 1997  Michael Meissner  <meissner@cygnus.com>

	* gcc.c (init_spec): If -v, print out that the default spec values
	were being used.  Fix prototype to reflect no arguments.
	(set_spec): If specs has not been set, set it up with the default
	specs.
	(read_specs): Move to later in the file so that startfile_prefixes
	has been declared.  Process "%include <file>" to include another
	specs file, aborting if the file can't be found.  Process
	"%include_noerr <file>: to include another specs file, giving no
	error if the file can't be found.  Process "%rename var1 var2" to
	rename a specs variable.  Take new argument that indicates whether
	we are processing the main file.  Only process % commands if this
	is not the main specs file.  Change callers.
	(main): Do not call init_spec if a specs file was found.
	(set_spec,read_specs,do_spec_1): If DEBUG_SPECS is defined, print
	debug information.
	
Tue Mar 25 14:43:58 1997  Doug Evans  <dje@cygnus.com>

	* expr.c (emit_push_insn): Delete emission of CLOBBER
	when doing partial push, no longer necessary.

	* c-decl.c (grokdeclarator): Pedwarn qualified void function return
	type.

Tue Mar 25 14:28:15 1997  Richard Earnshaw (rearnsha@armltd.co.uk)

	* reload.c (find_dummy_reload): New parameter earlyclobber.  If set
	then don't use IN for the reload if it also appears elsewhere in
	the insn.  All callers changed.

Tue Mar 25 13:20:18 1997  J.T. Conklin	<jtc@cygnus.com>

	* m68k/lb1sf68.asm (udivsi3): Fix hunk from previous patch that
	did not apply correctly.

	* m68k.md (tablejump): Use extl to explicitly sign extend
	index registeron TARGET_5200.
	* m68k/{apollo68.h,coff.h,linux.h,mot3300.h,pbb.h}
	(ASM_RETURN_CASE_JUMP): Likewise.

	* m68k.md (mulsi3): Changed into define_expand.  Split insn into
 	m68k and coldfire specific versions with appropriate constraints.

	* m68k.md (movqi): Disable use of address registers for 
	TARGET_5200.

	* m68k/lb1sf68.asm (__modsi3, __umodsi3): Use mulsl instruction
	instead of __mulsi3 function call on the coldfire.

	* m68k.md (bne0_di): Fix typo in last change.

	* m68k.md (xorsi3_5200): Correct constraints.

	* m68k.c (output_move_{si,hi,qi}mode): New functions.
	* m68k.h (output_move_{si,hi,qi}mode): Declare.

	* m68k.md (move{si,hi,qi,di}): Changed into define_expands.  Split
	insns into m68k and coldfire specific versions with appropriate
	constraints.

Tue Mar 25 12:18:41 1997  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>

	* Makefile.in (GCC_PASSES): Revert previous change; use cc1$(exeext).

Mon Mar 24 16:12:20 1997  Doug Evans  <dje@cygnus.com>

	* m32r/*: New files.
	* config.sub: Add m32r.
	* configure: Add m32r.
	* longlong.h: Add m32r support.
	* ginclude/{stdarg.h,varargs.h}: Add m32r support.
	* ginclude/va-m32r.h: New file.

Mon Mar 24 15:53:15 1997  Joel Sherrill <joel@OARcorp.com>

	* rs6000/rtems.h: Change to a near clone of the powerpc-eabi target.
	* configure (powerpc*-*-rtems): Move before GNU/Linux configuration.

Mon Mar 24 14:26:37 1997  Gavin Koch  <gavin@cygnus.com>

	* ginclude/va-mips.h:  For little endian, eabi, objects
	less than __va_reg_size are passed in registers.

Fri Mar 21 00:48:02 1997  Jeffrey A Law  (law@cygnus.com)

	* mn10300.c (print_operand): Handle 'N'.

	* mn10300.c (expand_epilogue): Correctly handle functions
	with large frames, but no callee register saves.

	* mn1300.md (movdf, movdi): Handle overlapping moves.

	* pa.c (compute_movstrsi_length): Handle residuals correctly.

Thu Mar 20 13:53:30 1997  Michael Meissner  <meissner@cygnus.com>

	* rs6000.c (easy_fp_constant): If -mrelocatable, consider all fp
	constants to be hard.

Mon Mar 20 13:53:30 1997  Jim Wilson  <wilson@cygnus.com>
 
	* rs6000.md (movdf/movsf define_splits): Add SUBREG support.
 
	* rs6000.c (fp_reg_or_mem_operand): Delete.
	* rs6000.h (PREDICATE_CODES): Remove fp_reg_or_mem_operand.
	(fp_reg_or_mem_operand): Delete declaration.
	* rs6000.md (movsf_hardfloat): Use nonimmediate_operand instead
	of fp_reg_or_mem_operand.

Thu Mar 20 08:52:27 1997  Jeffrey A Law  (law@cygnus.com)

	* mn10300.md (cmpsi): Handle comparing a register with
	itself by adding zero to the reg.  Z bit for such an insn is
	inverted.
	* mn10300.c (notice_update_cc): Handle CC_INVERT.

	* pa.c (emit_move_sequence): Don't lose for a secondary reload
	to the SAR register if the input is a MEM with an offset that won't
	fit in 14bits.

Wed Mar 19 17:10:44 1997  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* m68k/linux.h (ASM_OUTPUT_MI_THUNK): Define.

Wed Mar 19 16:59:34 1997  Paul Eggert  <eggert@twinsun.com>

	* cccp.c, cpplib.c (do_error, do_warning): Fix memory leak.

	* cccp.c (output_line_directive): Do not output negative line
	numbers when analyzing directives like `#line 0'.

	* cexp.y (parse_number, yylex), cccp.c (rescan), cpplib.c
	(cpp_get_token): Unless -lang-c89 is specified, allow C9X-style
	hexadecimal floating-point numbers as preprocessor numbers.
	* cccp.c (c89): New decl.
	(main): Set it to 1 if -lang-c89.
	* cpplib.h (struct cpp_options): New member c89.
	(CPP_C89): New macro.
	* cpplib.c (unsafe_chars): `p' is unsafe before `-' or `+', since it
	might generate a C9X-style hexadecimal floating-point number.
	(cpp_handle_options): Set c89 option to 1 if -lang-c89.

Tue Mar 18 17:05:57 1997  Stan Cox  <coxs@dg-rtp.dg.com>

        * i386.h (STACK_BOUNDARY): Determine according to TARGET_ALIGN_DOUBLE.
	
	* i386.c (override_options) Make the default alignment 4 for 486,
	otherwise 2.
	
	* i386/freebsd-elf.h (CPP_SPEC): Remove TARGET_CPU_DEFAULT reference.
	* i386/linux{,-aout,-oldld}.h (CPP_SPEC): Likewise.
	
	* i386/go32.h (DBX_DEBUGGING_INFO, PREFERRED_DEBUGGING_TYPE,
	NO_STAB_H, ASM_FILE_START, DBX_BLOCKS_FUNCTION_RELATIVE,
	DBX_FUNCTION_FIRST, DBX_OUTPUT_MAIN_SOURCE_FILE_END,
	ASM_OUTPUT_SOURCE_LINE): Added to support stabs.
	(ASM_OUTPUT_SECTION_NAME): Support section attribute.

Tue Mar 18 16:12:28 1997  Jim Wilson  <wilson@cygnus.com>

	* final.c (shorten_branches): Split all insns before computing insn
	lengths.
	(final_scan_insn, case default): If HAVE_ATTR_length defined, call
	abort for any insn that has a '#' output template.

	* expr.c (emit_group_load): Call operand_subword instead of creating
	an explicit SUBREG.

	* reload1.c (reload_reg_free_before_p, case
	RELOAD_FOR_OPERAND_ADDRESS): Conflicts with RELOAD_FOR_OPADDR_ADDR
	reloads.

	* configure (alpha-dec-osf[23456789]*): Use install-headers-cpio
	for osf4.

	* gcc.c (init_spec): Delete parameter.  Always initialize extra_specs.
	(process_command, main): Change all callers.

	* combine.c (if_then_else_cond): Call copy_rtx to prevent sharing.

Tue Mar 18 14:59:12 1997  Ian Lance Taylor  <ian@cygnus.com>

	* function.c (assign_parms): Add a REG_EQUIV note to the
 	instruction which copies a parameter into a pseudo-register
 	whenever there is an associated stack slot, even if the parameter
 	actually arrived in a register.

Tue Mar 18 14:24:48 1997  Doug Evans  <dje@cygnus.com>

	* configure (alpha-dec-osf[23]): Separate osf[23] case.
	* alpha.h (LIB_SPEC): -lprof1 requires -lpdf for OSF 4.
	* alpha/osf2or3.h: New file.

Tue Mar 18 11:32:10 1997  Jeffrey A Law  (law@cygnus.com)

	* m68k.c (m68k_last_compare_had_fp_operands): New variable.
	* m68k.h (m68k_last_compare_had_fp_operands): Declare it.
	* m68k.md (tst*, cmp*): Turn into define_expand/define_insn pairs.
	Keep track of whether test/compare has fp operands.
	(seq, sne, sgt, slt, sge, sle): Turn into define_expand/define_insn
	pairs.  Make expanders FAIL if TARGET_68060 and last comparison/test
	had fp operands.

Tue Mar 18 04:29:29 1997  Richard Earnshaw <rearnsha@armltd.co.uk>

	* arm.md (movhi): Handle generation of large constants during
	and after reload.

Mon Mar 17 17:30:24 1997  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* gmicro.h (RETURN_POPS_ARGS): Make sure FUNDECL is non-nil
	before we try to use it.
	* m68k.h (RETURN_POPS_ARGS): Likewise.
	* ns32k.h (RETURN_POPS_ARGS): Likewise.
	* pyr.h (RETURN_POPS_ARGS): Likewise.

Mon Mar 17 17:13:44 1997  J"orn Rennecke <amylaar@cygnus.co.uk>

	* stor-layout.c (layout_record, PCC_BITFIELD_TYPE_MATTERS):
	Only add padding if a bit field would otherwise span more units
	of alignment than its base type.

Mon Mar 17 17:03:55 1997  J.T. Conklin  <jtc@cygnus.com>

	* m68k.md (beq0_di, bne0_di, bge0_di, blt0_di): Use cmpw #0
 	instead of tstl when testing address registers on the 68000.
	
	* m68k/lb1sf68.asm: Fix prologues/epilogues to deal with the lack
 	of predecrement/postincrement addressing modes in the coldfire
	moveml instruction.

Mon Mar 17 17:00:14 1997  Scott Christley <scottc@net-community.com>

	* Fix long standing bug where first method call for a class could
	result in a garbled stack or produce an incorrect return value.
	* objc/sendmsg.c (__objc_block_return): Remove function.
	(__objc_word_return, __objc_double_return): Remove functions.
	(__objc_get_forward_imp): New function.
	(__objc_init_dispatch_tables): Install zero instead of
	__objc_init_install_dtable.
	(__objc_init_install_dtable): No longer call the method but
	allow objc_msg_lookup return it for normal execution.
	(obj_msg_lookup): Differentiate between when a method isn't
	implemented and when the dispatch table needs to be installed.
	Return the IMP when the dispatch table is installed versus
	having __objc_init_install_dtable call it.
	(get_imp): Install dispatch table if needed and return IMP
	from the newly installed dispatch table.
	(__objc_responds_to): Install dispatch table if needed before
	checking if method is implemented.

Mon Mar 17 16:29:38 1997  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>

	* tree.c (build_{index,range}_type): Ensure expressions for min
	and max value are in same obstack as type.

Mon Mar 17 15:44:18 1997  Pat Rankin  <rankin@eql.caltech.edu>

	* cccp.c [#if VMS] (O_RDONLY, O_WRONLY): Delete (redundant).
	(BSTRING): Delete (obsolete; usage occurs prior to definition).
	(do_include): Handle old VAX C style includes better.

Mon Mar 17 13:46:47 1997  Paul Eggert  <eggert@twinsun.com>

	* cexp.y, cppexp.c (parse_number): Invalid integer constants are
	errors if pedantic.
	* cexp.y (yylex): Invalid multibyte characters are errors if pedantic.
	* cppexp.c (cpp_lex): Likewise.
	* cppexp.c (cpp_parse_escape): Character constants that do not fit are
	errors if pedantic.

	* c-parse.in (expr_no_commas): Do not store temporary
	skip_evaluation increments on yacc value stack.

Sun Mar 16 19:54:49 1997  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>

	* expr.c (expand_expr, case PLACEHOLDER_EXPR): Refine which
	object is picked.

Sun Mar 16 15:45:45 1997  Jeffrey A Law  (law@cygnus.com)

	* loop.c (strength_reduce): Adjust BENEFIT appropriately if an
	autoincrement memory reference will eliminate add insns.

Sun Mar 16 08:41:40 1997  Scott Christley <scottc@net-community.com>

	* i386.md (untyped_call): Re-enable code.
	* objc/sendmsg.c (__objc_block_return): New function.
	(__objc_word_return, __objc_double_return): New functions.
	(__objc_init_install_dtable): Call appropriate return function
	based upon method type.
	* objc/thr-pthreads.c: Correct include path.

Sat Mar 15 07:58:33 1997  Scott Christley <scottc@net-community.com>

	* objc-act.c (OBJC_VERSION): Increment version.
	* objc/init.c (OBJC_VERSION): Likewise.

Sat Mar 15 07:58:00 1997  Ovidiu Predescu <ovidiu@net-community.com>

	* Implement +load.
	* objc/init.c (objc_send_load, __objc_send_load): New functions.
	(__objc_send_message_in_list): New function.
	(__objc_force_linking): New function.
	(__objc_exec_class): Don't call _objc_load_callback here.
	* objc/linking.m: New file.
	* objc/sendmsg.c (class_add_method_list): Check for the +load method
	when adding a methods list to a class.
	* objc/Makefile (OBJC_O): Add linking.m.

	* Allow methods defined in categories to override methods that are
	defined in the class implementation.
	* objc/sendmsg.c (__objc_install_methods_in_dtable): New function.
	(class_add_method_list): Don't check anymore for duplicate methods.

	* config/nextstep.h (INCLUDE_DEFAULTS): Define to something useful
	when cross-compiling.

	* The static instances list moved from the objc_module struct to 
	objc_symtab struct, at the end of defs array. This now allows the NeXT
	gdb to work with binaries generated for the GNU ObjC runtime.
	* objc-act.c (build_objc_symtab_template): Make sure
	defs in objc_symtab is a NULL terminated array.
	(init_def_list): Attach statics to end of def list.
	(init_objc_symtab): Take statics list into account.
	(init_module_descriptor, build_module_descriptor): Don't add statics.
	(generate_static_references): Indicate that statics are used.
	(finish_objc): Process statics in the beginning.
	* objc/objc-api.h (objc_module): Eliminate statics variable.
	* objc/init.c (__objc_exec_class): Access statics from their
	new place in the defs variable.

Sat Mar 15 07:29:15 1997  J"orn Rennecke <amylaar@cygnus.co.uk>

	* reload.c: Include expr.h.
	(find_reloads_address, find_reloads_address_1): New argument INSN.
	(find_reloads_address_1): Reload inside of p{re,ost}_{in,de}c
	instead of entire p{re,ost}_{in,de}c where appropriate.
	* Makefile.in (reload.o): Added expr.h to dependencies list.

Sat Mar 15 07:17:12 1997  Richard Henderson  <rth@tamu.edu>

	* reload.h (eliminate_regs): Add STORING arg.
	* reload1.c (eliminate_regs): Likewise.
	(eliminate_regs, case SET): Pass that we are storing to recursive call.
	(eliminate_regs, case SUBREG): If storing and same number of words,
	use larger mode.
	* caller-save.c, dbxout.c, dwarfout.c, dwarf2out.c, reload.c, sdbout.c:
	Change all calls to eliminate_regs.

Fri Mar 14 14:18:49 1997  Ian Lance Taylor  <ian@cygnus.com>

	* cplus-dem.c: Add prototypes for all static functions.
	(mystrstr): Make static.  Make arguments and result const.
	(cplus_match): Remove; not used.

Fri Mar 14 10:15:35 1997  Jeffrey A Law  (law@cygnus.com)

	* mn10300.c (const_costs): Remove unused function.
	* mn10300.h (CONST_COSTS): Rework to generate better code.

	* mn10300.c (print_operand): Handle 'H' and 'L' output
	modifers for high/low part of a 64bit value.
	* mn10300.h (CONST_DOUBLE_OK_FOR_LETTER_P): Handle 'G'
	(LEGITIMATE_CONSTANT_P): Allow any constant.
	* mn10300.md (movdi, movdf): Implement.
	(adddi3, subdi3): New expanders and patterns.

	* mn10300.c (print_operand): Handle 'A' modifier for an
	address which can't be simple register indirect.
	* mn10300.h (EXTRA_CONSTRAINT): Handle 'R' for bit ops.
	* mn10300.md: Add patterns to test, set and clear bitfields.

	* mn10300.c (can_use_return_insn): New function.
	(expand_epilogue): Emit a RETURN insn if possible.
	* mn10300.md (return): New pattern.

	* mn10300.h (CONST_OK_FOR_LETTER_P): Handle 'N'.
	* mn10300.md (andsi3): Catch "and 255,dn" and "and 65535,dn"
	which were not turned into zero_extend patterns.

	* mn10300.h (GO_IF_LEGITIMATE_ADDRESS): Handle symbolic
	constant as an index/base too.

	* mn10300.md (movsi): Allow SP to be loaded/saved with
	reg+d8 addresses.

	* mn10300.md (cmpsi): Allow second operand to be a constant.
	(subsi3): Likewise.

	* mn10300.md (sign extension patterns): Fix thinko when
	extending from memory.

	* mn10300.md (tst peepholes): Add peepholes for test/branch
	based on N bit being set/clear and the data value being tested dies.

Tue Mar 11 17:07:51 1997  Jeffrey A Law  (law@cygnus.com)

	* mn10300.c (expand_prologue): Rework so that eliminating
	the frame pointer produces faster/smaller code.
	(expand_epilogue): Likewise.
	(initial_offset): New function for argument pointer and frame pointer
	elimination.
	* mn10300.h (FIRST_PSEUDO_REGISTER): Bump to 10.
	(FIXED_REGISTERS): Add argument pointer register, it's a fake fixed
	register.
	(CALL_USED_REGISTERS, REG_ALLOC_ORDER): Corresponding changes.
	(REGNO_REG_CLASS, REG_CLASS_CONTENTS): Likewise.
	(REG_OK_FOR_BASE_P, REGISTER_NAMES): Likewise.
	(reg_class, REG_CLASS_NAMES): Delete unwanted DATA_OR_SP_REGS class.
	(PREFERRED_OUTPUT_RELOAD_CLASS): Define.
	(FIRST_PARM_OFFSET): No longer include register save area in
	computation.
	(STACK_POINTER_REGNUM): Is now register 9.
	(ARG_POINTER_REGNUM): Is now register 8.
	(FRAME_POINTER_REQUIRED): Refine.
	(ELIMINABLE_REGS, INITIAL_ELIMINATION_OFFSET): Define.
	(CAN_DEUG_WITHOUT_FP): Define.
	* mn10300.md (return_internal): Break into two patterns.
	
	* mn10300.h (CONST_OK_FOR_LETTER_P): Handle 'M' too.
	(REGISTER_MOVE_COST): Fix errors and refine.

	* mn10300.c (notice_update_cc): SET_ZN_C0 insns leave the
	overflow bit in an unuseable state.  Rename CC_SET to CC_TST.
	* mn10300.md (cc attributes): "set" is gone, replaced by
	"tst".  Update attributes on various insns.

	* mn10300.md: Improve sign and zero extension instructions.
	(ashlsi3): Improve.  Handle address registers too.
	(add peephole): Combine two consecutive adjustments of a register
	into a single adjustment.

Tue Mar 11 17:18:40 1997  Brendan Kehoe  <brendan@melange.gnu.ai.mit.edu>

	* cplus-dem.c (gnu_special): Call demangled_fund_type for other
	__t* symbols.

Mon Mar 10 16:10:34 1997  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>

	* emit-rtl.c (subreg_lowpart_p): Return 0 if SUBREG_REG is VOIDmode.
	* combine.c (simplify_rtx, case SUBREG): Fix direction of test when
	calling operand_subword; use inline code intead of subreg_lowpart_p.

Fri Mar  7 09:22:28 1997  Jeffrey A Law  (law@cygnus.com)

	* mn10300.c (expand_{pro,epi}logue): Rework to avoid
	unnecessary "add" operations.
	(expand_epilogue): Likewise.
	* mn10300.h (STARTING_FRAME_OFFSET): Is zero after the last
	round of prologue/epilogue changes.
	(FIRST_PARM_OFFSET): Is now 16 (-4 for REG_PARM_STACK_SPACE + 20 for
	register save area).
	(REG_PARM_STACK_SPACE): Define as 4 bytes.
	(OUTGOING_REG_PARM_STACK_SPACE): Define so caller allocates it.
	* mn10300.md (call{,_value} expander): Don't emit insns to adjust the
	stack here anymore.

	* mn10300.md (bCC patterns): Just use "bCC target".

Tue Mar  4 13:21:41 1997  Jim Wilson  <wilson@cygnus.com>

	* rs6000.md (movsi): Don't emit a USE insn for LABEL_REFs.

Thu Mar  6 16:29:13 1997  Jim Wilson  <wilson@cygnus.com>

	* dwarf2out.c (modified_type_die): Initialize item_type to NULL.
	Move equate_type_number_to_die call before use of sub_die, and move
	recursive modified_type_die calls on item_type after it.

	* dwarfout.c (root_type_1, write_modifier_bytes_1): New functions.
	(root_type): Call root_type_1.
	(write_modifier_bytes): Call write_modifier_bytes_1.
	(output_type, case POINTER_TYPE): Set TREE_ASM_WRITTEN before
	recursive call.

Wed Mar  5 14:30:49 1997  Torbjorn Granlund  <tege@quiet.matematik.su.se>

	Partially undo Jan 11 changes (nor takes only register ops):
	* mips.md (*norsi3_const, *nordi3_const): Delete bogus patterns.
	* mips.c (complemented_arith_operand): Delete function.
	(print_operand): Don't handle `e' for CONST_INT.
	* mips.h (PREDICATE_CODES): Delete complemented_arith_operand.

Tue Mar  4 16:38:13 1997  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* i386.c (i386_return_pops_args): Make sure FUNDECL is non-nil
	before we try to use it.
	* i386/{isc,next,sco,sco5,scodbx}.h (RETURN_POPS_ARGS): Likewise.

Mon Mar  3 20:17:54 1997  Gavin Koch  <gavin@cygnus.com>

	* ginclude/va-mips.h: __mips_single_float should have
	the same effect on vararg lists as __mips_soft_float.

Mon Mar  3 18:12:01 1997  Michael Meissner  <meissner@cygnus.com>

	* rs6000.h (DBX_CONTIN_LENGTH): Undo 2/26 change.

Mon Mar  3 13:08:20 1997  Jeffrey A Law  (law@cygnus.com)

	* combine.c (simplify_rtx): Do nothing with (truncate:mode) if
	mode is a partial integer mode.

Sun Mar  2 17:41:18 1997  Ulrich Drepper  <drepper@cygnus.com>

	* ginclude/varargs.h: Add definition of __va_copy.
	* va-alpha.h, va-clipper.h, va-h8300.h, va-i860.h: Likewise.
	* va-i960.h, va-m88k.h, va-mips.h, va-pa.h, va-ppc.h: Likewise.
	* va-sh.h, va-sparc.h, va-spur.h: Likewise.

Sun Mar  2 13:25:49 1997  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* c-typeck.c (process_init_element): Warn and truncate if upper
	bound of index is out of range.

Fri Feb 28 16:08:47 1997  Michael Meissner  <meissner@cygnus.com>

	* rs6000/sol-c0.c (_start): Disable loading up r13 and r2 with the
	SDA base registers for now.

	* rs6000.md (movsi): Emit a USE insn when putting the
	label of constants into the TOC, so that the constant is still
	emitted when expensive optimizations are used.

Thu Feb 27 17:54:42 1997  Karl Heuer  <kwzh@gnu.ai.mit.edu>

	* fixinc.ptx: Fix sed expression looking for <sys/types.h> in pwd.h.

Thu Feb 27 12:11:16 1997  Dennis Glatting  <dennis.glatting@plaintalk.bellevue.wa.us>

	* fixincludes: Remove more cases of __const__ from math.h on NeXT.

Wed Feb 26 14:52:27 1997  Michael Meissner  <meissner@cygnus.com>

	* reload.c (debug_reload): Remove extra argument to fprintf.
	* rs6000.c (output_toc): Make fprintf calls type correct.

	* rs6000.h (DBX_CONTIN_LENGTH): Define as 4000 to avoid AIX
	assembler line limit.

Mon Feb 24 17:56:17 1997  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* fixincludes: Fix need of prototypes for C++ in rpc/xdr.h on SunOS4.

Mon Feb 24 17:33:57 1997  Michael Meissner  <meissner@cygnus.com>

	* rs6000/xm-sysv4.h (HAVE_STRERROR): Define.

Sun Feb 23 17:18:28 1997  Jim Wilson  <wilson@cygnus.com>

	* rs6000.md (floatsidf2_loadaddr): Correct syntax for cau instruction.
	(load_multiple, store_multiple): Call change_address instead of
	creating MEM from scratch.

Thu Feb 20 16:39:15 1997  Jim Wilson  <wilson@cygnus.com>

	* unroll.c (unroll_loop): Add check for naive loop that ends with
	conditional branch that does not branch back to loop start.

	* reload1.c (reload): Move assign_stack_local call into main loop.

Thu Feb 20 11:40:46 1997  Jeffrey A Law  (law@cygnus.com)

	* pa.md (zero extension patterns): Turn into define_expand and
	define_insn pair.

Wed Feb 19 17:05:38 1997  Jeffrey A Law  (law@cygnus.com)

	* pa.c (emit_move_sequence): Don't copy 0.0 (double precision)
	directly to memory, go through a reg if reload hasn't started.
	* pa.md (main movdf pattern): Don't allow 0.0 (double precision)
	to be copied directly to memory.

	* pa/pa-hpux10.h (MD_EXEC_PREFIX): Define appropriately for hpux10.
	(MD_STARTFILE_PREFIX): Similarly.

	* pa.h (ASM_OUTPUT_SECTION_NAME): Surround the section name
	with '$' if not using GAS.

Wed Feb 19 16:43:47 1997  J"orn Rennecke <amylaar@cygnus.co.uk>

	* sched.c (schedule_insns): If there was no first scheduling pass,
	split instructions after reload.
	(update_flow_info): Tolerate some idiosyncrasies after reload.

Wed Feb 19 11:13:51 1997  Jeffrey A Law  (law@cygnus.com)

	* combine.c (find_split_point): Don't turn a SIGN_EXTEND into
	a series of shifts if either mode is a partial integer mode.

Mon Feb 17 08:06:02 1997  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* rs6000.c ({,non_}short_cint_operand): Use (unsigned HOST_WIDE_INT).
	(non_add_cint_operand, includes_rshift_p): Likewise.
	* rs6000.h (CONST_OK_FOR_LETTER_P): Likewise.
	(LEGITIMATE_ADDRESS_INTEGER_P, LEGITIMIZE_ADDRESS): Likewise.

Sun Feb 16 07:55:19 1997  J"orn Rennecke  (amylaar@cygnus.co.uk)

	* libgcc2.c (__negdi2, __lshrdi3, __ashldi3, __ashrdi3, __ffsdi2):
	Use ANSI style definition with full prototype.
	(__muldi3, __udiv_w_sdiv, __udivmoddi4, __divdi3, __moddi3) : Likewise.
	(__udivmoddi4, __udivdi3, __cmpdi2, __ucmpdi2) : Likewise.
	(__fixunstfdi, __fixtfdi, __fixunsxfdi, __fixxfdi) : Likewise.
	(__fixunsdfdi, __fixdfdi, __floatdixf, __floatditf) : Likewise.
	(__floatdidf, __floatdisf, __fixunsxfsi, __fixunsdfsi) : Likewise.
	(__gcc_bcmp, __eprintf, gopen, gclose, __bb_init_file) : Likewise.
	(__bb_init_trace_func, __clear_cache, mprotect) : Likewise.
	(__enable_execute_stack, cacheflush, exit) : Likewise.
	(find_exception_table, __find_first_exception_table_match) : Likewise.

Sun Feb 16 07:52:02 1997  Oliver Kellogg  (oliver.kellogg@space.otn.dasa.de)

	* 1750a.md (mulqihi3): Corrected.
	(tst{hf,tqf}): Simplified.
	(movqi): Removed redundant alternative.
	(addqi-3,addqi-2,addqi-1): Set/Reset Bit patterns by C. Nettleton.
	(many patterns): Introduced operand output modifiers d,t,b,B,w.
	* 1750a.c (print_operand): New operand output modifiers d,t,b,B,w.
	(simple_memory_operand): Removed.
	(one_bit_set_p, which_bit): Added from C. Nettleton's m1750 config.

Sun Feb 16 07:43:37 1997  Paul Eggert  <eggert@twinsun.com>

	* cccp.c (special_symbol): Don't treat "L" in "L'...'" as identifier.
	(check_macro_name, collect_expansion, rescan): Likewise.
	* cpplib.c (special_symbol, check_macro_name, collect_expansion):
	Likewise.

	* cexp.y (parse_c_expression): Don't check for null lexptr
	or *lexptr == 0.  If yyparse returns nonzero value, abort.

	* cexp.y (yylex): Use is_space, not is_hor_space, to find keyword end.
	(is_space): New decl.
	(is_hor_space): Removed.
	* cccp.c (is_space): Now external.
	(is_hor_space): Now static.

Sun Feb 16 04:55:11 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* toplev.c, tree.h (decl_printable_name): Change arguments.
	* c-common.c (declare_function_name): Reflect above change.
	* final.c (final_start_function): Likewise.
	* function.c (init_function_start): Likewise.
	* toplev.c (decl_name): Likewise.
	(announce_function): Likewise.
	(v_message_with_decl): Likewise.
	* dwarf2out.c (dwarf2_name): New fn, uses decl_printable_name.
	(add_pubname): Use it.
	(add_name_and_src_coords_attributes): Use it, add 
	DW_AT_MIPS_linkage_name if appropriate.
	(output_aranges): Use DW_AT_MIPS_linkage_name if present.

Sat Feb 15 18:45:30 1997  J.T. Conklin  <jtc@cygnus.com>

	* m68k.md (cmpsi): Added insn with appropriate constraints for
	TARGET_5200; changed condition of existing insn to !TARGET_5200.

Sat Feb 15 18:26:50 1997  Philippe De Muyter  <phdm@info.ucl.ac.be>

	* m68k/hp320.h (PRINT_OPERAND_FLOAT): Removed.
	(ASM_OUTPUT_{FLOAT,DOUBLE,LONG_DOUBLE}_OPERAND): Defined.
	(PRINT_OPERAND): Turned off: use default.
	* m68k/news.h (PRINT_OPERAND): Turned off: use default.
	(ASM_OUTPUT_{FLOAT,DOUBLE,LONG_DOUBLE}_OPERAND): Defined.
	* m68k/tower-as.h (PRINT_OPERAND): Turned off: use default.
	(ASM_OUTPUT_{FLOAT,DOUBLE}_OPERAND): Defined.
	* m68k/crds.h (PRINT_OPERAND): Turned off: use default.
	(ASM_OUTPUT_{FLOAT,DOUBLE}_OPERAND): Defined.
	(SGS_NO_LI,STRUCTURE_SIZE_BOUNDARY,IMMEDIATE_PREFIX): Defined.
	(NEED_PROBE): Defined instead of HAVE_probe and gen_probe.
	(FUNCTION_{PRO,EPI}LOGUE): Do not access FPA registers.
	* m68k.c (output_function_prologue): Add CRDS and MOTOROLA probe code.
	(print_operand): Do not output '.' if CRDS.

	* gcc.c (set_spec): Fix comment-in-comment typo.
	
Sat Feb 15 17:54:23 1997  H.J. Lu  (hjl@gnu.ai.mit.edu)

	* Makefile.in (COMPILERS): Moved before GCC_PASSES.
	(GCC_PASSES): Use $(COMPILERS) instead of cc1$(exeext).

Sat Feb 15 17:25:44 1997  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* gcc.c (process_command): Allocate space for terminating null.

Sat Feb 15 17:21:34 1997  Pat Rankin  <rankin@eql.caltech.edu>

	* vax.h (FUNCTION_PROLOGUE): Adjust size by STARTING_FRAME_OFFSET.
	* vax/vms.h (FUNCTION_PROLOGUE): Delete.

Sat Feb 15 08:48:14 1997  Douglas B. Rupp  (rupp@gnat.com)

	* configure: Fix setting of CC in no-symlink case.

Sat Feb 15 08:42:17 1997  Oliver Kellogg  (oliver.kellogg@space.otn.dasa.de)

	* expmed.c (expand_divmod): Prefer divmod in same mode over div
	in wider mode.

Sat Feb 15 08:27:50 1997  J"orn Rennecke  (amylaar@cygnus.co.uk)

	* fold-const.c (fold): Don't assume a nonexplicit constant cannot
	equal an explicit one.

	* i386.md (zero_extendqi[hs]i2+3): Ensure operating on REG.

Sat Feb 15 08:11:04 1997  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* configure (i[3456]86-*-solaris2*): Correct tm.h filename in
	stabs case.

	* a29k.h (STORE_FLAG_VALUE): Write so works on both 32 and 64-bit host.

Fri Feb 14 16:03:37 1997  Robert Lipe  <robertl@dgii.com>

	* i386/t-sco5 (libgcc{1,2}-elf.a): correct target dependencies.

Fri Feb 14 16:00:23 1997  H.J. Lu  <hjl@gnu.ai.mit.edu>

	* config/svr4.h (DBX_OUTPUT_MAIN_SOURCE_FILE_END): Set 
	current-section variable to text.

Wed Feb 12 16:07:34 1997  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* fixinc.irix: New file.
	* configure (mips-sgi-irix[56]): Set fixincludes to fixinc.irix.

Wed Feb 12 15:40:20 1997  Jim Wilson  <wilson@cygnus.com>

	* Makefile.in (LIBGCC2_DEBUG_CFLAGS): New macro.
	(LIBGCC2_CFLAGS): Use it.

	* dwarfout.c (output_type): Do early exit only if TYPE_CONTEXT is NULL
	or if TYPE_CONTEXT is another type (e.g. a nested type).

Tue Feb 11 15:53:51 1997  J"orn Rennecke <amylaar@cygnus.co.uk>

	* sh.c (calc_live_regs): Exclude RETURN_ADDRESS_POINTER_REGNUM.
	Need not save MACL/MACH when not live or in leaf function.

Mon Feb 10 14:46:32 1997  Jeffrey A Law  (law@cygnus.com)

	* stmt.c (group_case_nodes): Recognize more opportunities to
	group case nodes.

Sun Feb  9 14:05:48 1997  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* function.c (assign_stack_temp): Clear MEM flags from reuse.

Sat Feb  8 17:37:47 1997  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* local-alloc.c (update_equiv_regs): Fix error in last change.

Fri Feb  7 12:42:34 1997  Mike Stump  <mrs@cygnus.com>

	* pa.h (RETURN_ADDR_RTX): Fix to ignore export stubs.
	* pa.c (return_addr_rtx): Define.

Fri Feb  7 13:56:56 1997  Doug Evans  <dje@cygnus.com>

	* cse.c (invalidate_from_clobbers): Delete unnecessary test for
	(clobber nil).

	* toplev.c (main): Delete redundant settings of flag_no_inline
	and warn_inline if not optimizating.

Fri Feb  7 10:45:02 1997  Jeffrey A Law  (law@cygnus.com)

	* Makefile.in (stmp-multilib-sub): Add missing "else true"
	clauses to work around make bug on some systems.

Fri Feb  7 08:19:43 1997  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* fold-const.c (const_binop): Don't call size_int if low < 0.

	* function.c (instantiate_virtual_regs_1, case USE, CLOBBER):
	Fix error in last change.

Thu Feb  6 17:09:17 1997  Mike Stump  <mrs@cygnus.com>

	* except.c (find_exception_handler_labels): Initialize label array
	with zeroes.

Wed Feb  5 22:11:55 1997  Jeffrey A Law  (law@cygnus.com)

	* pa.md (post_ldwm): Fix typos.

Wed Feb  5 15:57:42 1997  Doug Evans  <dje@cygnus.com>

	* m68k/vxm68k.h (WCHAR_TYPE,WCHAR_TYPE_SIZE,SIZE_TYPE): Fix.
	(PTRDIFF_TYPE): Define.

Wed Feb  5 11:19:13 1997  Ian Lance Taylor  <ian@cygnus.com>

	* reload1.c (alter_reg): Don't ask assign_stack_local to round up
	to a multiple of BIGGEST_ALIGNMENT, unless a register appears in a
	paradoxical subreg.

Tue Feb  4 19:29:40 1997  Jim Wilson  <wilson@cygnus.com>

	* reload.c (find_reloads_address_1, case POST_INC): Don't use
	ADDR_TYPE here.

Tue Feb  4 12:33:45 1997  Jeffrey A Law  (law@cygnus.com)

	* flow.c (life_analysis): Delete obvious no-op moves
	which use SUBREGs.

Mon Feb  3 20:00:35 1997  Jim Wilson  <wilson@cygnus.com>

	* jump.c (find_cross_jump): Don't allow old-style and volatile asms
	to match.

Mon Feb  3 15:51:31 1997  Doug Evans  <dje@cygnus.com>

	* sparc/sol2.h (ASM_SHORT,ASM_LONG): Set to .uahalf/.uaword.
	* sparc/sysv4.h (ASM_LONG): Define.
	(ASM_OUTPUT_{FLOAT,DOUBLE,LONG_DOUBLE}): Use ASM_LONG.

Mon Feb  3 13:01:46 1997  Ian Lance Taylor  <ian@cygnus.com>

	* reload.h (enum reload_type): Add RELOAD_FOR_INPADDR_ADDRESS and
	RELOAD_FOR_OUTADDR_ADDRESS.
	* reload.c (ADDR_TYPE): New macro.
	(push_secondary_reload): Check for new reload types.
	(combine_reloads): Likewise.
	(find_reloads): Likewise.  Convert INPADDR_ADDRESS and
	OUTADDR_ADDRESS to OPADDR_ADDR.  Check OPADDR_ADDR when looking
	for merges.
	(find_reloads_address): When reloading an address, use the
	ADDR_TYPE macro to get the type of the new reload.
	(find_reloads_address_1): Likewise.
	(reload_when_needed_name): Add new reload types.
	* reload1.c (reload): Add in_addr_addr and out_addr_addr fields to
	insn_needs struct.  Use them for new reload types, and when
	computing in_max and out_max.
	(reg_used_in_inpaddr_addr): New static array.
	(reg_used_in_outaddr_addr): New static array.
	(mark_reload_reg_in_use): Handle new reload types.
	(clear_reload_reg_in_use, reload_reg_free_p): Likewise.
	(reload_reg_free_before_p, reload_reg_reaches_end_p): Likewise.
	(reloads_conflict, merge_assigned_reloads): Likewise.
	(emit_reload_insns): Likewise.
	(choose_reload_regs): Save arrays for new reload types.

Sun Feb  2 19:43:17 1997  Scott Christley <scottc@net-community.com>

	* objc/selector.c (__sel_register_typed_name): Eliminate compiler
	warnings with explicit cast.

	* Add condition mutex support to the objc runtime.
	* objc/thr-mach.c (objc_condition_{,de}allocate): New functions.
	(objc_condition_{wait,broadcast,signal}): New functions.
	* objc/thr-pthreads.c (objc_condition_{,de}allocate): New functions.
	(objc_condition_{wait,broadcast,signal}): New functions.
	* objc/thr-solaris.c (objc_condition_{,de}allocate): New functions.
	(objc_condition_{wait,broadcast,signal}): New functions.
	* objc/thr.h: Prototypes for new functions.

	* objc/init.c (__objc_runtime_mutex): Eliminate leading underscore
	from name of objc mutex and thread structures.
	* objc/runtime.h: Likewise.
	* objc/thr-{decosf1,irix,mach,os2,posix,pthreads,single}.c: Likewise.
	* objc/thr-{solaris,win32}.c: Likewise.
	* objc/thr.{c,h}: Likewise.

	* Major reorganization of objc error handling.
	* objc/Object.m (-error:): Call objc_error function instead of
	using function pointer.
	* objc/archive.c: Replace call to abort or __objc_fatal functions
	with call to objc_error function throughout the complete file.
	* objc/class.c (objc_get_class): Replace call to abort function
	with call to objc_error function.
	* objc/encoding.c (objc_sizeof_type, objc_alignof_type): Replace
	call to abort function with call to objc_error function.
	(objc_skip_typespec): Likewise.
	* objc/init.c (init_check_module_version): Replace call to
	abort function with call to objc_error function.
	* objc/misc.c (objc_verror): New function.
	(objc_fatal): Remove function.
	(objc_set_error_handler): New function.
	(_objc_error_handler): New global variable.
	(__alpha__): Remove unneeded code.
	(objc_error): Allow user specified error handler function to
	trap and handle the objc error.  Added an error code parameter
	which indicates the specific error that occured.
	(objc_malloc, objc_atomic_malloc): Replace call to objc_fatal
	function with call to objc_error function.
	(objc_valloc, objc_realloc, objc_calloc): Likewise.
	* objc/objc-api.h: Declare error handling functions and typedef
	for user specified error handler function.  Define error codes
	used by the runtime library.
	* objc/runtime.h: Remove error handling declarations.
	* objc/sendmsg.c (__objc_forward): Replace call to abort function
	with call to objc_error function.
	
Sun Feb  2 19:42:52 1997  Thomas Baier <baier@ci.tuwien.ac.at>

	* objc/hash.c (hash_delete): Step through the hash nodes
	versus using hash_next to increase efficiency.
	* objc/archive.c (__objc_finish_read_root_object): Use hash
	table instead of list.

Sun Feb  2 08:25:05 1997  Ovidiu Predescu  <ovidiu@net-community.com>

	* objc-act.c (encode_aggregate_within): New function.
	(encode_aggregate): Generates encodings for unions similar 
	to those for structs except surrounded by parenthesis instead
	of braces.

Sun Feb  2 07:15:54 1997  Mat Hostetter  (mat@lcs.mit.edu)

	* c-decl.c (start_function): Fix improper installation of last change.

Sun Feb  2 06:50:55 1997  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* m68k.c (output_scc_di): Add missing CC_STATUS_INIT.

Sun Feb  2 06:39:55 1997  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* c-typeck.c (process_init_element): When popping levels, don't
	blow up if constructor_max_index not set due to previous error.

	* combine.c (find_split_point, case SET): Fix error in last change.

Sun Feb  2 06:28:56 1997  Paul Eggert  <eggert@twinsun.com>

	* cccp.c (rescan): Insert a space after `.' as well,
	to prevent accidental token-pasting (e.g. `.x' -> `.10').

Sun Feb  2 06:08:14 1997  Oliver Kellogg  (oliver.kellogg@space.otn.dasa.de)

	* 1750a.c (modregno_adjust): Fixed case when reg_renumber invalid.

Sat Feb  1 19:11:08 1997  J.T. Conklin  <jtc@rhino.cygnus.com>

	* m68k.md (movqi): Enable use of clr and st insns on TARGET_5200.
	* m68k.c (output_move_simode_const): Likewise.

Sat Feb  1 18:54:00 1997  Douglas B. Rupp  (rupp@gnat.com)

	* gcc.c (process_command): Fix improper use of strncpy.

Fri Jan 31 15:35:08 1997  Mike Stump  <mrs@cygnus.com>

	* libgcc2.c: Remove extern for malloc and realloc.

Fri Jan 31 17:08:11 1997  Ian Lance Taylor  <ian@cygnus.com>

	* local-alloc.c (update_equiv_regs): If register which is equivalent
	to some value is only used in one place, and we can't substitute value
	for use, move register assignment to just before use.

Fri Jan 31 15:57:25 1997  Stan Cox  <coxs@dg-rtp.dg.com>

	* i386.md (idiv,imul,fpmul): Added new functional units for pentiumpro.

	* i386.c (pentiumpro_cost): Added new cost structure for pentiumpro.
	(override_options): Set ix86_cost to appropriate cost structure.

Thu Jan 30 09:34:26 1997  J.T. Conklin  <jtc@rhino.cygnus.com>

	* m68k.md (stack adjust peepholes): Use lea instead of
	add.w when adding 16 bit constants on all but TARGET_68040.

Thu Jan 30 08:58:08 1997  Ralf Baechle  <ralf@waldorf-gmbh.de>

	* function.c (TRAMPOLINE_ALIGNMENT): Provide default.
	(expand_function_end): Use TRAMPOLINE_ALIGNMENT instead
	of FUNCTION_BOUNDARY.
	* varasm.c (TRAMPOLINE_ALIGNMENT): Provide default.
	(assemble_trampoline_template): Use TRAMPOLINE_ALIGNMENT instead
	of FUNCTION_BOUNDARY.

Wed Jan 29 18:16:02 1997  J"orn Rennecke <amylaar@cygnus.co.uk>

	* sh.h (REG_CLASS_CONTENTS): Add rap to GENERAL_REGS and its
	superclasses.

	* sh.md (movsi_i, movsi_ie, movhi_i, movhi+1): Use type pcload for
	immediate operands where appropriate.
	(movsf_ie+1): Fail when loading anything but a MEM into
	a floating point reguister.

Wed Jan 29 16:00:31 1997  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* varasm.c (force_const_mem): Set MARK instead of clearing it.
	(output_constant_pool): Only mark constant pool if -O.
	Check mark flag unconditionally.
	(mark_constant_pool): Start by clearing all mark flags.

	* tree.c (copy_node): Clear TREE_ASM_WRITTEN.

	* flow.c (regno_uninitialized): Return 0 if reg is used for args.

Wed Jan 29 15:23:59 1997  Ian Lance Taylor  <ian@cygnus.com>

	* combine.c (try_combine): Clear reg_n_refs if i2dest is not
	mentioned in newi2pat.

Tue Jan 28 16:00:23 1997  Stan Cox  (coxs@dg-rtp.dg.com)

	From Robert Lipe <robertl@dgii.com> 
	* i386/sco5.h (SCO_DEFAULT_ASM_COFF): Remove bytecode stuff.
	(ASM_OUTPUT_ASCII): Use .ascii in both ELF and COFF modes.
	(ASM_OUTPUT_SECTION_NAME): Handle alternate sections for COFF.
	The OpenServer 5.0.0 assembler gives an error for section
	names over 6 characters long, so we catch the "obvious" case
	and shorten it.

	* m88k.h (ASM_OUTPUT_SECTION_NAME): Undefine; fails
	for exception sections.  The 88k ABI specifies 'section'
	instead of '.section'.

Mon Jan 27 13:32:46 1997  J"orn Rennecke <amylaar@cygnus.co.uk>

	* sh.c (shl_and_kind): Fix typo.
	* sh.md (and_shl_scratch): Fix typo for length 8.

Mon Jan 27 08:56:03 1997  Jeffrey A Law  (law@cygnus.com)

	* fixincludes (sys/time.h): Fix incorrect forward structure
	declaration on hpux10.20.

Mon Jan 27 09:05:35 1997  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* combine.c (simplify_rtx): Don't do anything with if_then_else_cond
	result if both one arm and the input are a comparison.
	(simplify_{rtx,if_then_else,logical,shift_const}): Don't
	test STORE_FLAG_VALUE with #if; properly test for just sign bit.
	(num_sign_bit_copies, if_then_else_cond): Likewise.
	* expmed.c (emit_store_flag): Properly test for STORE_FLAG_VALUE
	of just sign bit.
	* fold-const.c (fold): Don't make COND_EXPR when both expr and
	one part are comparisons.
	* a29k.h (STORE_FLAG_VALUE): Make negative.

Fri Jan 24 16:42:26 1997  Ian Lance Taylor  <ian@cygnus.com>

	* varasm.c (struct pool_constant): Add mark field.
	(force_const_mem): Clear mark field in new constant pool entry.
	(output_constant_pool): Call mark_constant_pool.
	(mark_constant_pool, mark_constants): New static functions.

Thu Jan 23 15:04:17 1997  Ian Lance Taylor  <ian@cygnus.com>

	* cse.c (COST): Get the right cost for a SUBREG of a register when
 	truncation is free.

Thu Jan 23 11:19:40 1997  Mike Stump  <mrs@cygnus.com>

	* Makefile.in (objc-headers): Don't try and install the headers if
	the objc directory has been removed.

Wed Jan 22 13:26:25 1997  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* i960.c (process_pragma): Call ungetc on the last character
	that was read by the while loop, to make sure the parser sees it.

Tue Jan 21 17:20:30 1997  Michael Meissner  <meissner@tiktok.cygnus.com>

	* rs6000.c (output_toc): Move STRIP_NAME_ENCODING to common
	code, so the test for vt's works with -mminimal-toc.

Tue Jan 21 16:03:35 1997  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* function.c (mark_all_temps_used): Set KEEP as well.

Tue Jan 21 12:16:15 1997  Doug Evans  <dje@seba.cygnus.com>

	* stor-layout.c (layout_record): Correct test for whether field spans
	its unit of alignment in case where field_size == type_align.

Mon Jan 20 20:27:54 1997  Ian Lance Taylor  <ian@cygnus.com>

	* mips.md (probe): Comment out.

Sun Jan 19 20:54:45 1997  John F. Carr  <jfc@mit.edu>

	* integrate.c (expand_inline_function): Handle a PARALLEL containing
	a RETURN the same as a RETURN.

Sun Jan 19 20:35:28 1997  Pat Rankin  <rankin@eql.caltech.edu>

	* vmsconfig.com: Change all hardcoded references of "vax" to
	use variable expansion instead.
	(arch_indx, arch): New variables.

	* vax.c (not_qsort):  Don't declare alloca.
	* vax/xm-vms.h: Declare alloca here.
	Do most of the VAX C-specific set up for DEC C.
	#if DEC C, undefine QSORT_WORKAROUND and qsort.
	* make-gcc.com, make-cccp.com, make-cc1.com:  Support building
	with GNU C vs VAX C vs DEC C from the DCL command line.

Sun Jan 19 17:20:50 1997  Oliver Kellogg  (oliver.kellogg@space.otn.dasa.de)

	* 1750a.md (movh[if]-1): Corrected.
	(movtqf-1): Deleted.
	* 1750a.c (add_1_to_mem): Deleted.
	(output_operand_address): Added output modifier 'A'.

Sun Jan 19 17:17:54 1997  Philippe De Muyter  <phdm@info.ucl.ac.be>

	* m68k.md (ashrdi_const, ashrdi3): Allow 31 as shift count.

	* m68k.h (CONST_OK_FOR_LETTER_P): Recognize 'N', 'O' and 'P'.
	* m68k.md (rotl[shq]i3, strict_low_part rotl): Allow 'N', 'O'
	or 'P' operands.

Sun Jan 19 17:09:17 1997  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* m68k.md (addsi3): Fix previous change: {add,sub}qw should
	be {add,sub}ql. For other uses of {add,sub}q don't check for address
	register and always use {add,sub}ql.

Sun Jan 19 15:05:42 1997  Peter Seebach  <seebs@solon.com>

	* c-decl.c (start_decl): Add code for -Wmain.
	(c_decode_option): Add -fhosted, -ffreestanding, and -Wmain.
	* toplev.c (lang_options): Likewise.
	* c-tree.h (warn_main, flag_hosted): New variables.

Sun Jan 19 14:35:41 1997  Alex Garthwaite  (alex@samwise.cis.upenn.edu)

	* fixinc.svr4: Fix problems with symlinks to ".".

Sun Jan 19 14:21:46 1997  Craig Burley  <burley@gnu.ai.mit.edu>

	* loop.c (check_final_value): Handle insns with no luid's.

Sun Jan 19 08:57:26 1997  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* alpha.md (arg_home): Add CLOBBER of MEM and USE of arg regs.
	* vms.h (SETUP_INCOMING_VARARGS): Delete duplicate definition.

	* toplev.c (set_float_handler): Set up signal catcher on first call
	in case a front end has disabled it.

	* cccp.c, cexp.y: #define __attribute__ to be null if 
	compiling with GCC older than 2.7, not 2.6.

	* toplev.c (main): If PREFERRED_DEBUGGING_TYPE used and set
	to NO_DEBUG, say debugging not supported.
	* mips/sni-svr4.h (PREFERRED_DEBUGGING_TYPE): Undefine.

	* i386/xm-cygwin32.h (DIR_SEPARATOR): Define.

	* explow.c (convert_memory_address, case SYMBOL_REF):
	Copy CONSTANT_POOL_ADDRESS_P.
	* integrate.c (save_constants): Make (address (const ..)) to record
	both modes.
	(copy_for_inline, copy_rtx_and_substitute, restore_constants): Use
	both modes when restoring constant pool entry for ADDRESS.

	* alpha.h (MINIMUM_ATOMIC_ALIGNMENT): New macro.

	* function.c (instantiate_virtual_regs_1, case USE, case CLOBBER):
	Properly handle case of shared MEM whose replacement is not valid.

Sat Jan 18 14:08:31 1997  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* tree.c (get_unwidened): Don't crash if FIELD_DECL not layed out.

	* varasm.c (const_hash): Treat NON_LVALUE_EXPR like CONVERT_EXPR.
	(compare_constant_1, copy_constant, bc_assemble_integer): Likewise.
	(const_hash, compare_constant_1): Use switch, not if-then-else.

Fri Jan 17 17:10:20 1997  Ian Lance Taylor  <ian@cygnus.com>

	* mips.h (STACK_POINTER_OFFSET): Don't define.

Thu Jan 16 14:51:03 1997  Bob Manson  <manson@charmed.cygnus.com>

	* cplus-dem.c: Fix indenting; note that this file also lives in
	libiberty.
	(do_type, case 'M'): Check for a template as well as a class.

Thu Jan 16 15:08:26 1997  Michael Meissner  <meissner@tiktok.cygnus.com>

	* gcc.c (cross_compile): Change to be a char * like all of the
	other specs.
	(process_command): Change how cross_compile is tested.
	(main): Likewise.
	(struct spec_list): Merge with the format used by EXTRA_SPECS.
	Add name length field to speed up repeated calls to strcmp.  Add
	flag to say spec was allocated.  Add pointer to char * so that
	static spec fields can be updated.
	(extra_specs): Use struct spec_list as type.
	(static_specs): Static list of predefined specs.
	(init_specs): New function, initialize the specs list.  Link in
	the default specs and any specs defined via EXTRA_SPECS.
	(set_spec): No longer special case predefined specs.
	(process_command,validate_all_switches): Ditto.
	(process_command): Call init_specs for -dumpspecs.
	(do_spec_1): Use name length field to avoid calling strncmp when
	it is going to fail.
	(main): Call init_spec.  Don't handle EXTRA_SPECS here.

Thu Jan 16 17:07:54 1997  Eddie C. Dost  <ecd@skynet.be>

	* configure: Add sparc-linux{,aout} support.
	* ginclude/va-sparc.h: Likewise.
	* sparc/linux.h: New file.
	* sparc/linux-aout.h: New file.
	* sparc/xm-linux.h: New file.

Thu Jan 16 16:19:13 1997  Jim Wilson  <wilson@cygnus.com>

	* configure (sparc-*-aout*): Add libgloss.h to tm_file.
	(sparclite-*-coff*): Change "= to =".

Thu Jan 16 12:53:15 CST 1997  Joel Sherrill <joel@OARcorp.com>

	* rs6000/rtems.h: Change from being sysv4 based to being eabi based.

Thu Jan 16 13:40:51 1997  Jim Wilson  <wilson@cygnus.com>

	* mips.h (LINKER_ENDIAN_SPEC): Define.
	(LINK_SPEC): Add linker_endian_spec.
	(EXTRA_SPECS): Add linker_endian_spec.

Thu Jan 16 08:02:13 1997  Jeffrey A Law  (law@cygnus.com)

	* mn10300.md (bCC, inverted bCC): Use bCC .+X instead of bCC 0f.

Wed Jan 15 14:06:28 1997  Ian Lance Taylor  <ian@cygnus.com>

	* reload.h (reload_address_base_reg_class): Declare.
	(reload_address_index_reg_class): Declare.
	* reload1.c (reload_address_base_reg_class): Define.
	(reload_address_index_reg_class): Define.
	(init_reload): Initialize reload_address_{base,index}_reg_class.
	* reload.c (find_reloads_address): Use
	reload_address_base_reg_class rather than BASE_REG_CLASS.  Use
	reload_address_index_reg_class rather than INDEX_REG_CLASS.
	(find_reloads_address_1): Likewise.

Tue Jan 14 15:26:33 1997  Ian Lance Taylor  <ian@cygnus.com>

	* reload.c (REGNO_MODE_OK_FOR_BASE_P): Define if not defined.
	(REG_MODE_OK_FOR_BASE_P): Define if not defined.
	(find_reloads_address): Use REG[NO]_MODE_OK_FOR_BASE_P rather than
	REG[NO]_OK_FOR_BASE_P.
	(find_reloads_address_1): Likewise.
	Add mode parameter; change all callers.

	* reload1.c (eliminate_regs_in_insn): Handle more cases when
	eliminating the frame pointer to the hard frame pointer.

	* varasm.c (force_const_mem): Copy a CONST_INT rtx like a CONST rtx.

	* varasm.c (assemble_end_function): Call
	output_after_function_constants.
	(after_function_constants): New static variable.
	(output_after_function_constants): New static function.
	(output_constant_def): Check CONSTANT_AFTER_FUNCTION_P.

Mon Jan 13 16:44:40 1997  David Edelsohn  <edelsohn@mhpcc.edu>

	* rs6000/aix41.h (CPP_PREDEFINES): Add -D_AIX41.

Sun Jan 12 20:54:01 1997  Jim Wilson  <wilson@cygnus.com>

	* libgloss.h (LINK_SPEC): Delete.
	(STARTFILE_SPEC): Delete spurious newline.

Sat Jan 11 00:13:03 1997  Torbjorn Granlund  <tege@quiet.matematik.su.se>

	* mips.md (norsi3, nordi3): Use canonical RTL.  Prepend `*' to pattern
	name.  Don't match immediates.
	(norsi3_const, nordi3_const): New patterns.
	(anddi3, iordi3, xordi3): Test TARGET_64BIT, not mips_isa
	in length attribute calculation.
	* mips.c (complemented_arith_operand): New function.
	(print_operand): Handle `e' for CONST_INT.
	* mips.h (PREDICATE_CODES): Add complemented_arith_operand.
	
Fri Jan 10 14:11:53 1997  David Edelsohn  <edelsohn@mhpcc.edu>

	* rs6000/aix41.h (SUBTARGET_SWITCHES): Add threads and pe.
	(CPP_SPEC): Add mpe and mthreads cases.
	(LIB_SPEC): Add mpe and mthreads cases to variant from rs6000.h.
	(STARTFILE_SPEC): Add mpe and mthreads support.

Fri Jan 10 07:12:26 1997  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* i386/cygwin32.h (LINK_SPEC): New definition.

	* Makefile.in (FLAGS_TO_PASS): Add STAGE_PREFIX, set by configure.
	* configure: Initialize exeext.
	Update STAGE_PREFIX in Makefile.

	* dwarfout.c (dwarfout_line): Push to LINE_SECTION after calling
	lookup_filename.

Thu Jan 9 12:06:04 1997  Jim Wilson  <wilson@cygnus.com>

        * i386.md (addsidi3_2): Add & to operand 0 of alternative 5.

Thu Jan 9 12:06:04 1997  Stan Cox  <coxs@dg-rtp.dg.com>

        From Linus Torvalds and Mat Hostetter:
	* i386.c (i386_sext16_if_const): Added to sign extend HImode constant.
	(i386_aligned_reg_p): Added to tell if an rtx is aligned.
	(i386_cc_probably_useless_p): Don't trust cc bits.
	* i386.h (TARGET_ZERO_EXTEND_WITH_AND): Don't do this for p6.
	* i386.md (cmpsf_ccfpeq+2): Use SImode test instruction.
	(movhi+1): Use movz instead of mov on p6.
	(addsi3): Add 128 by subtracting -128.
	(zero_extendhisi2): Use SImode move if aligned.
	({add,sub,and,ior,xor}hi3): Likewise.

Tue Jan  7 16:58:27 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* c-parse.in (extension): New rule for __extension__.
	(extdef, unary_expr, decl, component_decl): Use it.

Mon Jan  6 15:44:37 1997  Oliver Kellogg  (oliver.kellogg@space.otn.dasa.de)

	* 1750a.c: Now includes regs.h.
	({movcnt,mod}_regno_adjust): Corrected typos.
	* 1750a.md (movhi): Corrected case of moving constant to memory.

Mon Jan  6 08:00:57 1997  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* mips.h: Delete redundant definitions of compiler and library fns.

	* dwarfout.c (type_attribute): Ignore any subtype for now.

	* fold-const.c (operand_equal_p): Rework to consider two
	expressions that have embedded identical SAVE_EXPRs as
	equivalent; also handle some more cases.

Sun Jan  5 23:54:34 1997  Jeffrey A Law  (law@cygnus.com)

	* pa.md (pic_load_label): Fix test for using just an
	ldo rather than an addil;ldo sequence to load the label's
	address.

Sun Jan  5 07:26:47 1997  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* expr.c (expand_expr, case COMPONENT_REF): Fix error in last
	change: don't suppress conversion if just EXPAND_SUM.

Sat Jan  4 18:44:01 1997  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* tree.h (struct tree_decl): saved_insns.i is HOST_WIDE_INT.

	* fold-const.c (const_binop): Rework to only make constants in
	one place; always use size_int if small enough and of sizetype.
	(size_int): Call force_fit_type.
	(fold): Avoid ever changing type of input tree.

	* expr.c (get_inner_reference): Fix type error.
	(expand_expr, case COMPONENT_REF): Don't convert if modifier
	is EXPAND_CONST_ADDRESS, EXPAND_SUM, or EXPAND_INITIALIZER.
	* tree.c (staticp, case COMPONENT_REF, BIT_FIELD_REF): Not
	static if bitfield.

	* expr.c (expand_expr, case COMPONENT_REF):  If taking value
	from a CONSTRUCTOR, must mask/sign-extend if bitfield.
	(expand_builtin, case BUILT_IN_LONGJMP): Pass type, not IDENTIFIER,
	to second arg of RETURN_POPS_ARGS.

	* expr.c (expand_expr, case COND_EXPR): Add additional cases
	to "singleton" cases.
	* tree.c (integer_pow2): Mask value to width of type.
	(tree_log2): New function.

	* expmed.c (store_fixed_bit_field): If not SLOW_UNALIGNED_ACCESS,
	treat everything as maximally aligned.

	* combine.c (find_split_point, case SET): If SET_SRC is NE and
	STORE_FLAG_VALUE is -1, see if we can convert into NEG of shift.
	(force_to_mode, case NE): Make condition stricter.

	* calls.c (emit_library_call_value): Remove redundant check for
	outmode != VOIDmode.

Sat Jan  4 08:12:16 1997  J.T. Conklin  <jtc@rhino.cygnus.com>

	* Optimizations from John Vickers (john@rhizik.demon.co.uk):
	* m68k.c (output_function_{pro,epi}logue): Use addq/subq when
	adjusting stack pointer by small displacements.
	* m68k.md (addsi3, addhi3): Use two addqw (or subqw) insns when
	adding (or subtracting) small integer constants (8 < N <= 16) to
	both address and data registers.

Sat Jan  4 07:06:07 1997  Kamil Iskra  <iskra@student.uci.agh.edu.pl>

	* loop.c (basic_induction_var): Return 0 if SUBREG is not a
	promoted variable.

Sat Jan  4 06:22:36 1997  Doug Rupp  (rupp@gnat.com)

	* alpha.c (vmskrunch): Try to not chop trailing uppercase letters.
	* alpha/vms.h (ENDFILE_SPEC): Use "gnu", not "gnu_cc".

	* cccp.c (PRINTF_PROTO): Use __printf__ in __attribute__, not printf.
	* cexp.y (PRINTF_PROTO): Likewise.

Fri Jan  3 09:01:00 1997  Craig Burley  <burley@gnu.ai.mit.edu>

	* alpha.md (cmov): Fix operand numbers in case involving DF target,
	DF comparison, and SF source.

Fri Jan  3 08:19:46 1997  Paul Eggert  <eggert@twinsun.com>

	* cpplib.c (macroexpand): Delete any no-reexpansion marker following
	identifier at beginning of an argu concatenated with what precedes it.

Fri Jan  3 07:59:21 1997  Ken Rose  (rose@netcom.com)

	* reorg.c (fill_slots_from_thread): Skip moved insn in all three cases.

Fri Jan  3 07:51:44 1997  Bob Manson  <manson@cygnus.com>

	* function.c ({push,pop}_function_context_to): Save and restore
	current_function_args_info.
	* function.h (struct function): New field args_info.

Fri Jan  3 06:55:09 1997  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* jump.c (rtx_equal_for_thread_p): Return 0 for floating-point.

	* reload.c (find_reloads): If replaced a PLUS or MULT with a
	simple operand, start over again.

	* va-alpha.h: Check for __VMS__, not VMS.

Thu Jan  2 08:52:51 1997  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>

	* configure: Finish restoring change of default of objc threads to
 	"single" for Linux-based GNU systems.

Mon Dec 30 17:03:46 1996  Jeffrey A Law  (law@cygnus.com)

	* pa.c (fmpy_operands): Remove.  No longer needed.
	(combinable_add, combinable_copy, combinable_fmpy): Likewise.
	(combinable_fadd, combineable_fsub): Likewise.
	(pa_reorg): Call pa_combine_instructions.
	(pa_combine_instructions): Combine instructions to make things
	like fmpyadd and fmpysub.
	(pa_can_combine_p): Helper function for pa_combine_instructions.
	* pa.md (pa_combine_type): New attribute.  Set it appropriately
	for various insns.
	(define_delays): Use a separate define_delay for unconditional
	branches.
	(fmpyadd, fmpysub peepholes): Remove, no longer needed.
	(fmpyadd, fmpysub insns): Add variant with fadd/fsub first,
	then the fmpy.

Mon Dec 30 14:43:51 1996  Jim Wilson  <wilson@cygnus.com>

	* reg-stack.c (subst_stack_regs_pat): Set src_note explicitly, instead
	of using invalid aggregate initialization.

	* print-tree.c (print_node): Don't try to print nonexistent
	TYPE_ATTRIBUTES field of a decl node.

Mon Dec 30 10:30:25 1996  Richard Stallman  <rms@ethanol.gnu.ai.mit.edu>

	* config.sub: Handle hiuxmpp as system type.

Thu Dec 26 13:33:27 1996  Michael Meissner  <meissner@tiktok.cygnus.com>

	* rs6000.md (init_v4_pic): Explicitly set the length.

Mon Dec 23 19:39:38 1996  Jim Wilson  <wilson@cygnus.com>

	* mips.h (FUNCTION_ARG_REGNO_P): Correct for TARGET_SOFT_FLOAT and
	TARGET_FLOAT64 cases.

	* integrate.c (function_cannot_inline_p): Reject function with
	PARALLEL result.
	(expand_inline_function): Abort if function result not handled.

Sat Dec 21 04:02:46 1996  Jason Merrill  <jason@gerbil.cygnus.com>

	* mips.c (save_restore_insns): Mark large frame setup insns
	as frame-related.
	(mips_expand_prologue): Likewise.

	* dwarf2out.c (dwarf2out_frame_debug): Support MIPS large frames.
	(add_bound_info): Use default lower bounds.
	Handle simple variable bounds with a DIE ref.
	Don't generate a NULL loc descr.
	(add_subscript_info): Always add lower bound.
	(gen_formal_parameter_die): Always equate_decl_number_to_die.
	(gen_variable_die): Likewise.  Don't use the old die for automatic
	variables.

Wed Dec 18 10:23:46 1996  Jeffrey A Law  (law@cygnus.com)

	* mn10300.c (notice_update_cc): Enable this code.
	* mn10300.h (CC_OVERFLOW_UNUSABLE): Define.
	* mn10300.md (tstsi): Use "set_zn_c0" instead of "set" for cc status.
	(addsi3 pattern): Break "inc" into two different alternatives
	since "inc dn" sets cc0, but "inc an" does not.
	(multiply and divide patterns): Fix cc status.
	(bCC, inverted bCC): Restore any comparison which needs the
	overflow bits when CC_OVERFLOW_UNUSABLE is set.
	(zero and sign extensions): Fix cc status.
	(movm_store): Likewise.

Tue Dec 17 15:02:44 1996  Jim Wilson  <wilson@cygnus.com>

	* sched.c (update_flow_info): When add REG_DEAD notes for dest of
	last insn, add check for global_regs.

Tue Dec 17 11:07:26 1996  Michael Meissner  <meissner@tiktok.cygnus.com>

	* rs6000/win-nt.h (HAS_INIT_SECTION): Delete, so that __main is
	called from main.

Mon Dec 16 15:28:44 1996  Jim Wilson  <wilson@cygnus.com>

	* combine.c (nonzero_bits): Ifdef out calls to num_sign_bit_copies.
	Add dummy define/undef for num_sign_bit_copies.

	* dwarfout.c (location_or_const_value_attribute, case CONCAT): Add.

	* combine.c (simplify_comparison): Use mode_width as shift count
	only if it is less than or equal to HOST_BITS_PER_WIDE_INT.

Mon Dec 16 10:10:11 1996  Jeffrey A Law  (law@cygnus.com)

	* mn10300.c (expand_epilogue): Restore registers in the
	"ret" instruction instead of a separate movm instruction.
	Support possible stack deallocation in "ret" instruction too.
	* mn10300.md (return_internal): Use "ret" instead of "rets";
	restore registers and deallocate stack as needed.
	(load_movm): Delete unused pattern.

	* mn10300.h (SMALL_REGISTER_CLASSES): Define.

Fri Dec 13 14:46:54 1996  J"orn Rennecke <amylaar@cygnus.co.uk>

	* sh.md (dect): Rewrite pattern so that it can be combined.

Fri Dec 13 13:14:51 1996  Ian Lance Taylor  <ian@cygnus.com>

	* varasm.c (output_constant_pool): If ASM_OUTPUT_POOL_EPILOGUE is
	defined, call it.

Thu Dec 12 20:04:55 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* rtl.h (RTX_FRAME_RELATED_P): New macro.
	(struct rtx_def): Add frame_related bitfield.
	* final.c (final_scan_insn): Call dwarf2out_frame_debug.  
	Don't call dwarf2out_begin_function.
	(final): Initialize dwarf2out_frame_debug.
	* dwarf2out.c (dwarf2out_begin_function): Remove.
	(dwarf2out_init): Use INCOMING_RETURN_ADDR_RTX.
	(DWARF_CIE_DATA_ALIGNMENT): Generalize.
	(DWARF_FRAME_REGNUM): Don't add 1.
	(decode_cfi_rtl): Lose.
	(dwarf2out_def_cfa): Now takes reg and offset directly.
	(reg_save): Likewise.
	(dwarf2out_reg_save): Now takes offset.
	(initial_return_save): Grok INCOMING_RETURN_ADDR_RTX.
	Replaces dwarf2out_return_save.
	(dwarf2out_cfi_label): New fn.
	(add_fde_cfi): Use it.
	(dwarf2out_frame_debug): New fn.
	* mips.h (DWARF_FRAME_REGNUM): Tweak r31.
	(INCOMING_RETURN_ADDR_RTX): Define.
	* mips.c (mips_expand_prologue): Set RTX_FRAME_RELATED_P as needed.
	(save_restore_insns): Likewise.
	* i386.c (ix86_expand_prologue): Likewise.
	* i386.h (INCOMING_RETURN_ADDR_RTX): Define.
	(DWARF_FRAME_RETURN_COLUMN): Define.

	* dwarf2out.c (add_AT_long_long): Renamed from add_AT_double fo
	clarity.
	(print_die): Adjust.
	(add_AT_float): New fn.
	(add_const_value_attribute): Support fp values.
	(size_of_die): Use blocks for long_long and fp values.
	(value_format, output_die): Likewise.
	(output_loc_operands): Don't support DW_OP_const8?.

Thu Dec 12 19:49:09 1996  Ian Lance Taylor  <ian@cygnus.com>

	* varasm.c (CONSTANT_POOL_BEFORE_FUNCTION): Define if not
	defined.
	(assemble_start_function): Check CONSTANT_POOL_BEFORE_FUNCTION
	to decide whether to call output_constant_pool.
	(assemble_end_function): Likewise.

	* calls.c: Check SMALL_REGISTER_CLASSES at run time, not just
	compile time.
	* combine.c, cse.c, function.c, jump.c, local-alloc.c: Likewise.
	* loop.c, reload.c, reload1.c: Likewise.
	* dsp16xx.h (SMALL_REGISTER_CLASSES): Define with value.
	* h8300.h (SMALL_REGISTER_CLASSES): Likewise.
	* i386.h (SMALL_REGISTER_CLASSES): Likewise.
	* pdp11.h (SMALL_REGISTER_CLASSES): Likewise.
	* sh.h (SMALL_REGISTER_CLASSES): Likewise.

Thu Dec 12 15:25:39 1996  Michael Meissner  <meissner@tiktok.cygnus.com>

	* rs6000.md (sysv call insns): If flag_pic add @plt suffix.

	* rs6000.md (fix_truncdfsi2_store): Fix offsets > 32k.

	* rs6000/t-ppccomm: New file for common parts of embedded and
	System V target Makefile support.

	* rs6000/t-ppcos: New file for System V OS target Makefile
	support.

	* rs6000/t-solaris: Delete, merge into rs6000/t-ppcos.

	* rs6000/t-{ppc,ppcgas}: Only keep the multilib specific parts,
	moving the rest to rs6000/t-ppccomm.

	* configure (powerpc*-*-*): For embedded and System V
	configurations, add rs6000/t-ppccomm.
	For GNU/Linux and Solaris, use t-ppcos.

	* ginclude/ppc-asm.h (cr*, f*): Add new macros for register names.

	* rs6000/sol-c0.c (_start): Fix uninitialized data bug.

	* rs6000.md (init_v4_pic): Add @local to call.
	(icbi,dcbst,sync,isync): Delete PowerPC cache control insns.

	* rs6000/sysv4.h (ASM_SPEC): On explicit -mcall-solaris, pass
	-msolaris to the assembler.

	* rs6000.c (rs6000_sync_trampoline): Delete.
	(rs6000_trampoline_template): Aix & System V don't need template now.
	(rs6000_initialize_trampoline): For System V, call the function
	__trampoline_setup to set up the trampoline.

	* rs6000.h (TRAMPOLINE_TEMPLATE): Delete here.
	* rs6000/win-nt.h (TRAMPOLINE_TEMPLATE): Add it here.

	* rs6000/tramp.asm: New file, setup trampolines properly on System
	V systems, properly flushing the caches.

Thu Dec 12 10:53:10 1996  Jeffrey A Law  (law@cygnus.com)

	* reorg.c (fill_slots_from_thread): Don't call eligible_for_delay
	with an insn with asm operands.

	* expmed.c (emit_store_flag_force): Fix typos/thinkos.

Thu Dec 12 08:09:20 1996  J"orn Rennecke <amylaar@cygnus.co.uk>

	* i386.c (i386_return_pops_args): Libcalls ignore TARGET_RTD.

Thu Dec 12 07:56:03 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* tree.h (maybe_get_identifier): New declaration.

	* calls.c (emit_library_call): Don't pass VOIDmode to type_for_mode.

	* va-alpha.h: Add definitions for VMS; they differ from Unix.

	* Makefile.in (stamp-objlist): Handle first character of object 
	file being a digit.

	* 1750a.h (function_arg, {movcnt,mod}_regno_adjust): Add decls.
	(branch_or_jump): Likewise.
	(FUNCTION_ARG): Remove cast of function_arg result to rtx.
	* 1750a.md: Remove unneeded casts to char *.

Thu Dec 12 05:55:27 1996  Richard Earnshaw (rearnsha@armltd.co.uk)

	* arm.c (arm_gen_constant, case [IX]OR): Don't invert constant if
	loading into temporary.

Wed Dec 11 18:57:21 1996  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* toplev.c (rest_of_compilation): Make sure unwinder RTL is saved.

	* collect2.c (write_c_file): Wrap the ctor/dtor lists and fns
	with `extern "C" { ... }'.

Wed Dec 11 17:46:48 1996  John F. Carr  <jfc@mit.edu>

	* tree.h (tree_decl): Reorder field declarations to reduce size
	on 64 bit machines.

	* combine.c (try_combine): When splitting an insn, check for the
	new I2 setting a SUBREG.

Wed Dec 11 17:00:47 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* alpha.c (print_operand): Use HOST_WIDE_INT_PRINT_DEC instead of
	using "%ld".
	(output_prolog): Don't print useless comment for VMS.

	* alpha.c (output_prolog): SIZE is now HOST_WIDE_INT.
	* alpha.md (mov[hq]i unnamed): Split up for TARGET_BYTE_OPS and not.

	* function.c (fixup_var_refs_1, case ZERO_EXTRACT): Don't call
	fixup_memory_subreg if no longer SUBREG of MEM.

Wed Dec 11 14:10:48 1996  Jeffrey A Law  (law@cygnus.com)

	* mn10300.c: New file for Matsushita MN10300 port.
	* mn10300.h, mn10300.md, t-mn10300, xm-mn10300.h: Likewise.
	* config.sub: Recognize mn10300 as a basic machine type.
	* configure: Similarly.
	* ginclude/stdarg.h: mn10300 is little endian.
	* ginclude/varargs.h: Likewise.

Wed Dec 11 09:09:10 1996  Nagai Takayuki <nagai@ics.es.osaka-u.ac.jp>

	* libgcc2.c (cacheflush): Add SONY NEWS-OS 4.2 version.

Wed Dec 11 09:01:39 1996  J"orn Rennecke <amylaar@cygnus.co.uk>

	* calls.c (emit_library_call, emit_library_call_value):
	Don't pass an identifier node as function type for
	library functions, but rather build a function type that
	has a return type with the correct mode.
	* i386.c (i386_return_pops_args): Don't test for IDENTIFIER_NODE.
	* i386/isc.h (obsolete RETURN_POPS_ARGS): Test first argument
	for IDENTIFIER_NODE.
	* i386/next.h (RETURN_POPS_ARGS): Likewise.
	* i386/sco.h (RETURN_POPS_ARGS): Likewise.
	* i386/sco5.h (RETURN_POPS_ARGS): Likewise.
	* i386/scodbx.h (RETURN_POPS_ARGS): Likewise.
	* m68k.h (RETURN_POPS_ARGS): Likewise.
	* ns32k.h (RETURN_POPS_ARGS): Likewise.
	* pyr.h (RETURN_POPS_ARGS): Likewise.
	* gmicro.h (RETURN_POPS_ARGS): Likewise; fix typo.

Tue Dec 10 17:36:47 1996  J.T. Conklin  <jtc@rhino.cygnus.com>

	* Add optimizations from John Vickers (john@rhizik.demon.co.uk)
	* m68k.h (TARGET_CPU32): New macro.
	* m68k.md (add[hs]i3): Only use two addq.w or subq.w instructions
	when adding or subtracting constants 8 < N < 16 on TARGET_CPU32.
	Use lea instead of add.w when adding 16 bit constants to address
	registers on all but TARGET_68040.
	* m68k.c (output_function_{pro,epi}logue): Use lea instead of add.w
	when adjusting stack pointer on all but TARGET_68040.
	
Tue Dec 10 15:55:23 1996  Ian Lance Taylor  <ian@cygnus.com>

	* optabs.c (emit_unop_insn): Treat ZERO_EXTEND like SIGN_EXTEND.

Tue Dec 10 13:47:24 1996  Joern Rennecke <amylaar@cygnus.co.uk>

	* combine.c (combinable_i3pat): Bring back to sync with can_combine_p.

	* sh.h (ADJUST_INSN_LENGTH): Don't break from loop when LOOP_BEG found.
	Calculate padding in new variable pad.

Mon Dec  9 18:00:38 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* dwarf2out.c (output_uleb128): Output value in human-readable comment.
	(output_sleb128): Likewise.
	(various): Adjust.
	(output_call_frame_info): Only output info if it's interesting.
	(add_src_coords_attributes): New fn.
	(add_name_and_src_coords_attributes): Split out from here.
	(gen_enumeration_type_die): Add src coordinates.
	(gen_struct_or_union_type_die): Likewise.
	(dwarf2out_finish): Call output_call_frame_info for all targets.

Thu Dec  5 11:25:30 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* dwarf2out.c (add_pure_or_virtual_attribute): Only add 
	AT_containing_type if -g2 or higher.

	* dwarf2out.c (gen_struct_or_union_type_die): Make sure that
	the type for AT_containing_type has been generated.
	(gen_decl_die): Likewise.

	* dwarf2out.c (type_tag): Check DECL_IGNORED_P.
	(add_pure_or_virtual_attribute): Check DECL_VINDEX instead.
	(scope_die_for): Likewise.
	* dwarfout.c (type_tag): Likewise.

Wed Dec  4 22:51:38 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* dwarf2out.c (decode_cfi_rtl): Support getting a CONST_INT.
	(dwarf2out_begin_function): Adjust.
	(reg_save): Divide offset by the alignment.
	(output_cfi): Support having more than one advance_loc.
	(output_call_frame_info): Re-initialize current_label.
	(dwarf2out_begin_prologue): Initialize current_label to NULL.
	(lookup_cfa, lookup_cfa_1): New fns.
	(dwarf2out_def_cfa): Call lookup_cfa.
	(dwarf2out_finish): Don't generate CIE CFIs.
	(dwarf2out_init): Generate them here.
	(DWARF_FRAME_RETURN_COLUMN): Use PC_REGNUM.

	(add_pure_or_virtual_attribute): Note virtual context.
	(gen_formal_parameter_die): Return the die.
	(gen_formal_types_die): Set AT_artificial on `this'.
	(gen_subprogram_die): Add AT_accessibility.
	(gen_variable_die): Likewise.
	(gen_field_die): Likewise.  Don't generate location attribute for
	union members.
	(gen_struct_or_union_type_die): Note where our vtable lives.
	(gen_decl_die): Handle anonymous union fields.
	(dwarf2out_decl): Always output `bool'.

Mon Dec  2 03:55:15 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* final.c (final_end_function): Don't call dwarf2out_end_function.

	* dwarf2out.c (output_line_info): Emit special opcodes for each line
	entry, even if the line number doesn't change.
	(pend_type, output_pending_types_for_scope): New fns.
	(gen_struct_or_union_type_die): Use them to defer generating member
	dies if we're in the middle of some other context.
	(gen_type_die): Still put nested types in the right place.
	(dwarf2out_decl): Call output_pending_types_for_scope.

	* dwarf2out.c (dw_fde_struct): Replace end_prologue, begin_epilogue
	with current_label.
	(DWARF_CIE_INSN_SIZE, DWARF_CIE_SIZE): Remove.
	(DWARF_CIE_HEADER_SIZE): The size without the initial insns.
	(size_of_cfi): Revert.
	(decode_cfi_rtl, add_fde_cfi, dwarf2out_def_cfa, reg_save,
	dwarf2out_reg_save, dwarf2out_return_save): New fns.
	(dwarf2out_begin_function): Use them to generate CFIs.
	(dwarf2out_finish): Use them to generate E CFIs.  
	Don't set next_fde_offset.
	(calc_fde_sizes): Initialize cie_size.
	(output_call_frame_info): Don't generate CIE CFIs.
	(dwarf2out_end_function): Remove.

	* tree.c (maybe_get_identifier): New fn.
	* varasm.c (assemble_name): Use it instead of get_identifier.

Fri Nov 29 15:13:39 1996  Stan Cox  <coxs@dg-rtp.dg.com>

	* jump.c (jump_optimize): Don't move initialization if there is a
	label between it and the jump for if (foo) bar++ to bar += (foo !=0)
	
Wed Nov 27 16:21:14 1996  Stan Cox  <coxs@dg-rtp.dg.com>
	
	* Remove change of Oct 4.
	* i386.h (outer_function_chain): Remove.
	(current_function_calls_alloca): Remove.
	(rtx_equal_function_value_matters): Remove.
	(N_REGS_USED, N_ALLOCATABLE_REGISTERS): Remove.
	* i386.md (adddi3_1, subdi3_1): Remove.
	(adddi3, subdi3): Revert.
	(movsf, movsf_mem, movsf_normal, movdf, movdf_mem, movdf_mem+1):
	Likewise. 
	(movxf, movxf_mem, movxf_mem+1, addsidi3_1, addsidi3_2): Likewise.
	(adddi3_1, subsidi3, subdi3_1): Likewise.
	(addsidi3_1, addsidi3_2, subsidi3): Likewise.
	(addsidi3_1, addsidi3_2, adddi3, subsidi3): Disable the problem
	reload alternatives. 
	
Wed Nov 27 16:21:14 1996  J"orn Rennecke <amylaar@cygnus.co.uk>

	* i386.md (ashldi3_non_const_int, ashrdi3_non_const_int):
	Use a hidden branch to handle shifts > 32 bit.
	(lshrdi3_non_const_int): Likewise.
	(floatdixf2): Don't use unnecessary XFmode operation.

Wed Nov 27 15:23:41 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* varasm.c (assemble_variable): Don't emit DWARF.

	* toplev.c (rest_of_type_compilation): Don't emit DWARF.
	(main): Just let -gdwarf mean DWARF v1; remove -gdwarf-1.

	* dwarfout.c (decl_class_context): New fn.
	(output_global_subroutine_die): Fix declaration case.
	(output_global_variable_die): Likewise.
	(output_type): Note when we are in a class defn.  If we're a nested
	type and our context hasn't been written, do that.  Do early exit
	for nested types.
	(output_decl): Output the class context for fns and vars.
	Don't emit detailed parm info for a fn declaration.
	Use TYPE_DECL_IS_STUB, is_redundant_typedef.
	(type_ok_for_scope): Support emitting nested types later.
	(is_redundant_typedef): New fn.
	(TYPE_DECL_IS_STUB): New macro.
	(output_compile_unit_die): Check use_gnu_debug_info_extensions.
	(output_local_subroutine_die, output_global_subroutine_die,
	dwarfout_begin_function, dwarfout_end_function, dwarfout_line,
	generate_macinfo_entry, dwarfout_init, dwarfout_finish): Likewise.

	* dwarf2out.c (decl_class_context): Static.
	(lookup_type_die): Use TYPE_SYMTAB_POINTER.
	(equate_type_number_to_die): Likewise.
	(gen_subprogram_die): If we're in class context, it's a decl.
	(gen_variable_die): Likewise.
	(gen_decl_die): Output the containing type.
	(dwarf2out_init): Lose type_die_table code.

Wed Nov 27 08:30:54 1996  Brendan Kehoe  <brendan@lisa.cygnus.com>

        * Makefile.in (DRIVER_DEFINES): New macro, with the macro
        definitions for the driver.
        (gcc.o): Make rule use $(DRIVER_DEFINES).
        * gcc.c (process_command) [LANG_SPECIFIC_DRIVER]: Call
        lang_specific_driver, passing along the addr of FATAL for errors
        along with our ARGC and ARGV.

Wed Nov 27 08:21:13 1996  Philippe De Muyter  <phdm@info.ucl.ac.be>

	* m68k.md (iorsi_zexthi_ashl16): New pattern.
	(ashrsi_16): New name for old unnamed pattern.

	* objc/misc.c (stdlib.h): Define __USE_FIXED_PROTOTYPES__ before
	including stdlib.h.

Wed Nov 27 08:17:34 1996  Joern Rennecke <amylaar@cygnus.co.uk>

        * i386.md (decrement_and_branch_until_zero+[3-8]): Add missing
	CC_STATUS_INIT.
	(decrement_and_branch_until_zero+[5-8]): Delete redundant assignment.

Wed Nov 27 07:56:27 1996  J.T. Conklin  <jtc@rhino.cygnus.com>

	* m68k.md ({and,ior,xor}si3_internal): Removed !TARGET_5200 from
 	conditionals now that entire insn is disabled when !TARGET_5200.
	
Wed Nov 27 07:52:32 1996  Oliver Kellogg  <kellogg@space.otn.dasa.de>

	* 1750a.md (movhi pattern):  Fixed MEM to MEM move problem.

Tue Nov 26 14:50:54 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* expr.c (move_by_pieces): Abort only if length positive at end.
	* function.c (frame_offset, get_frame_size): Make HOST_WIDE_INT.
	* function.h (struct function): Make frame_offset be HOST_WIDE_INT.
	(get_frame_size): Add definition.
	* reload1.c (reload): Make starting_frame_size be HOST_WIDE_INT.

Mon Nov 25 16:55:14 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* dwarf2out.c (dwarf2out_finish): Don't emit call frame info
	for non-MIPS targets.
	(is_redundant_typedef): New fn.
	(modified_type_die): Refer to typedef DIEs where appropriate.
	(gen_typedef_die): Support DECL_ORIGINAL_TYPE.
	(gen_type_die): Likewise.  Use is_redundant_typedef.
	(gen_subprogram_die): Don't force a spec DIE for local class methods.

Mon Nov 25 15:09:12 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* gcc.c (handle_braces): Rework last change.

Mon Nov 25 13:49:51 1996  Jim Wilson  <wilson@cygnus.com>

	* configure (build_exeext, exeext): New variables.  Use sed to insert
	build_exeext value into Makefile exeext rule.
	(*-*-cygwin32): Set exeext.
	* i386/x-cygwin32 (exeext): Delete.
	* rs6000/x-cygwin32 (exeext): Delete.

	* dwarf.h (enum dwarf_location_atom): Add OP_MULT.
	* dwarfout.c (output_mem_loc_descriptor, case MULT): Add.
	* dwarfout2.c (mem_loc_descriptor, case MULT): Add.

	* dwarfout.c (dwarf_fund_type_name, case FT_unsigned_int64): Fix typo.

Sun Nov 24 21:42:01 1996  J.T. Conklin  <jtc@rhino.cygnus.com>

	* m68k.md (andsi3): Changed into define_expand.
	(andsi3_internal): Rename from old andsi3, changed condition
	to !TARGET_5200.
	(andsi2_5200): New insn.
	(iorsi3): Change into define_expand.
	(iorsi2_internal): Rename from old iorsi3, changed condition 
	to !TARGET_5200.
	(iorsi2_5200): New insn.
	(xorsi3): Change into define_expand.
	(xorsi2_internal): Rename from old xorsi3, changed condition 
	to !TARGET_5200.
	(xorsi2_5200): New insn.

Sun Nov 24 21:31:32 1996  John F. Carr  <jfc@mit.edu>

	* i386.h (N_ALLOCATABLE_REGISTERS): Remove extra backslash at
	end of macro definition.

	* cpplib.c (LOCAL_INCLUDE_DIR): Remove default definition.
	(include_defaults_array): Do not use LOCAL_INCLUDE_DIR or
	TOOL_INCLUDE_DIR if they are not defined.
	* cccp.c: Likewise.

	* Makefile.in (cppmain.o): New rule.

Sun Nov 24 19:14:50 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* fold-const.c (merge_ranges): In (+,-) case, if lower bounds are
	the same the result is always false.

Sun Nov 24 18:48:31 1996  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>

	* c-typeck.c (build_indirect_ref): Don't give warning for
 	dereferencing void * if evaluation is being skipped.

	* c-decl.c (poplevel): Don't call output_inline_function if
	DECL_SAVED_INSNS is not set.

	* gcc.c (give_switch): Add new arg, INCLUDE_BLANKS.
	(handle_braces): All callers changed.
	Add support for new construct: %{S*^}.

Sun Nov 24 18:44:48 1996  Paul Eggert  <eggert@twinsun.com>

	* c-parse.in (unary_expr, expr_no_commas): Increment skip_evaluation
	when analyzing an expression that is known not to be evaluated.
	(sizeof, alignof): New rules.
	* c-tree.h (skip_evaluation): New variable.
	* c-common.c (skip_evaluation): Likewise.
	(overflow_warning, unsigned_conversion_warning): Don't warn about
	potential runtime errors when skipping evaluation.
	* c-typeck.c (build_binary_op): Likewise.
	(build_conditional_expr): op1 now always nonnull.

Sun Nov 24 17:06:58 1996  Bernd Schmidt  (crux@Pool.Informatik.RWTH-Aachen.DE)

	* toplev.c (rest_of_compilation): Call regscan before each
	jump threading pass.

Sun Nov 24 16:37:18 1996  Dave Love  <d.love@dl.ac.uk>

	* configure (objc_thread_file): Set conditionally in each case so
	may be overidden with `--enable-objcthreads=posix'.
	Change GNU/Linux default to `single'.

Fri Nov 22 17:53:15 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* varasm.c (assemble_variable): Output DWARF in the third case, too.

	* dwarf2out.c (decls_for_scope): Only add DIEs with no parents to
	our scope.
	(gen_subroutine_type_die): Parm types go under the fn type DIE.

	* Makefile.in ($(T)crt{begin,end}.o): Move CRTSTUFF_T_CFLAGS after 
	general flags.

	* mips/t-iris6 (CRTSTUFF_T_CFLAGS): Define.
	* mips.c (compute_frame_size): Fix fp_save_offset.

	* dwarf2out.c (new_die): If we get a NULL parent, inc limbo_die_count.
	(decls_for_scope): Decrement limbo_die_count as appropriate.
	(dwarf2out_finish): Check for good limbo_die_count.
	(size_of_cfi): If regno too big for DW_CFA_offset, use offset_extended
	instead.
	(output_call_frame_info): Add disabled code for specifying ABI.
	(dwarf2out_begin_function): Note all saved regs.

	* dwarf2out.c (gen_subprogram_die): Have a DIE for each fn at
	toplevel.
	(scope_die_for): Only use the NULL for fns and tags.

Tue Nov 21 15:53:51 1996  Joern Rennecke <amylaar@cygnus.co.uk>

	* sh.c (output_stack_adjust): New argument TEMP.  Changed all callers. 
	If the adjust cannot be done with one, but can be done with two 
	CONST_OK_FOR_I constants, do it that way.

Thu Nov 21 14:25:55 1996  Ian Lance Taylor  <ian@cygnus.com>

	* fixincludes: Include <stdio.h> in <assert.h> even if not C++ if
	stderr needs to be defined.

Wed Nov 20 15:38:13 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* toplev.c (rest_of_type_compilation): Do output function-scope tags
	for DWARF 2.
	* c-decl.c (pushtag): Set TYPE_CONTEXT on the tag.
	* toplev.c, varasm.c: s/dwarf2out_file_scope_decl/dwarf2out_decl/g.
	* dwarf2out.c (add_prototyped_attribute): Use a value of 1.
	(gen_subprogram_die): Support AT_static_link.
	(dwarf2out_decl): Rename from dwarf2out_file_scope_decl.
	Give nested fns and tags a die_parent of NULL.
	(decls_for_scope): Fix the die_parent for nested fns and tags.
	(scope_die_for): If we get a context of NULL, just return it.

Tue Nov 19 18:21:11 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* dwarf2out.c (gen_subprogram_die): Support block extern decls.
	(gen_variable_die): Likewise.
	(gen_decl_die): Emit block extern function decls.

	* c-decl.c (implicitly_declare): Set DECL_ARTIFICIAL.

Tue Nov 19 16:50:32 1996  Michael Meissner  <meissner@tiktok.cygnus.com>

	* configure (powerpc*-{sysv,elf,eabi{,aix,sim}}): Set
	extra_headers to ppc-asm.h.
	(powerpc*-{linux,solaris,rtems,vxworks}): Likewise.
	(powerpc*-{winnt,pe,cygwin32}): Likewise.

	* rs6000/t-{ppc,ppcgas,solaris,winnt} (EXTRA_HEADERS): Don't set here.

Mon Nov 18 14:51:46 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* dwarf2out.c (DWARF_CIE_INSN_SIZE): New macro.
	(DWARF_CIE_HEADER_SIZE): Use it.
	(DWARF_FRAME_RETURN_COLUMN, DWARF_FRAME_REGNUM): New macros.
	(output_call_frame_info, dwarf2out_begin_function): Use them.  
	For the MIPS, output the first CFA insn in the CIE.
	* dwarf2.h (enum dwarf_call_reg_usage): Lose.
	(dwarf_macinfo_record_type): Fix spelling.
	* mips/mips.h (DWARF_FRAME_REGNUM, DWARF_FRAME_RETURN_COLUMN): Define.

	* dwarf2out.c (base_type_die): Just generate the DIEs as needed,
 	rather than building up some table.
	(init_base_type_table): Lose.
	(add_subscript_info): Use add_type_attribute.  Don't give an upper
	bound for an array of unknown size.
	(gen_unspecified_parameters_die): Remove DWARF-1 kludge.
	(dwarf2out_init): Lose call to init_base_type_table.
	(is_c_family, is_fortran): New fns.
	(gen_compile_unit_die): Recognize GNU F77.
	(gen_array_type_die): Use AT_declaration for an array of unknown size.
	(modified_type_die): Take TYPE_MAIN_VARIANT before passing it
	to build_type_variant, so we ignore named variants.
	(dwarf2out_file_scope_decl): Don't generate DIEs for built-in structs,
	either; they will be emitted if they are used.
	From wilson:
	(gen_array_type_die): Force the element type out first on IRIX 6.

Sun Nov 17 20:23:11 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* expr.c (get_inner_reference): Fix error in previous change.

Sat Nov 16 06:08:27 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* emit-rtl.c (operand_subword): Avoid confusion if sizeof (float)
	is less than a full word.

	* alpha.h (MASK_BYTE_OPS): Now define as 1024.
	* alpha/vms.h (TARGET_DEFAULT): Use symbolic values.

	* expr.c (get_inner_reference): Add new arg PALIGNMENT and compute it.
	(expand_assignment, do_jump): Pass new arg to get_inner_reference.
	(expand_expr, case COMPONENT_REF): Likewise.
	* fold-const.c (optimize_bit_field_compare, decode_field_reference):
	Likewise.
	* tree.h (get_inner_reference): Add new arg.

	* Add support for Alpha/VMS, mostly from
	Klaus Kaempf (kkaempf@progis.de)
	* configure (alpha-dec-vms*): New target.
	* alpha.c (override_options): Handle VAX format floating-point.
	(print_operand, case ',', '-'): New cases.
	(alpha_builtin_saveregs): Handle VMS convention.
	(alpha_sa_{mask,size}, alpha_pv_save_size, alpha_using_fp):
	New versions for VMS.
	(output_{pro,epi}logue, function_arg): Likewise.
	(direct_return): Never true on VMS.
	(check_float_value): Return 0 for VMS.
	(vmskrunch, alpha_{need,write}_linkage): New function.
	* alpha.h ({MASK,TARGET}_{OPEN_VMS,FLOAT_VAX}): New macros.
	(TARGET_SWITCHES): Add float-vax and float-ieee.
	({FUNCTION,LIBCALL}_VALUE, FUNCTION_VALUE_REGNO_P): R1 and R33
	are also return registers.
	(ASM_OUTPUT_DOUBLE): Support both floating-point formats.
	(PRINT_OPERAND_FUNCT_VALID_P): Add ',' and '-'.
	* alpha.md ({div,mod}[sd]i3): Only for VMS.
	(fp operations): Add modifiers for multiple floating-point formats.
	(call patterns): Handle new calling sequence for VMS.
	(tablejump): Make new pattern for VMS.
	(nonlocal_goto_receiver, arg_home): New patterns.
	* alpha/t-vms, alpha/vms.h, alpha/xm-vms.h: New files.

Fri Nov 15 17:38:20 1996  Doug Evans  <dje@seba.cygnus.com>

	* sdbout.c (current_file): New global.
	(PUT_SDB_SRC_FILE): New PUT_SDB_FOO macro.
	(sdbout_init): Initialize current_file ifdef MIPS_DEBUGGING_INFO.
	(sdbout_{start_new,resume_previous}_source_file): New functions.
	* toplev.c (debug_{start,end}_source_file): Call them if SDB_DEBUG.
	* mips.h (PUT_SDB_SRC_FILE): Define.

Fri Nov 15 16:11:25 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* dwarfout.c (dwarfout_line): Don't emit line number info for
	functions outside of .text.

Fri Nov 15 15:52:42 1996  Stan Cox  <coxs@dg-rtp.dg.com>

	* i386/386bsd.h (COMMENT_BEGIN): Delete.
	* i386/freebsd.h (COMMENT_BEGIN): Likewise.
	* i386/netbsd.h (COMMENT_BEGIN): Likewise.
	* i386/unix.h (COMMENT_BEGIN): Likewise.

Fri Nov 15 13:22:42 1996  Jim Wilson  <wilson@cygnus.com>

	* fold-const.c (unextend): Rewrite type conversions to avoid overflow.

Fri Nov 15 12:11:28 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* combine.c (try_combine): Properly copy an rtvec.
	* emit-rtl.c (gen_rtvec_vv): New function.
	(copy_rtx_if_shared): Call it.
	* integrate.c (copy_for_inline): Likewise.
	* reload1.c (eliminate_regs): Likewise.
	* rtl.h (gen_rtvec_vv): Declare.
	* genattrtab.c (simplify_cond): Make TESTS an array of rtunions.
	* genextract.c (main): Use loop, not bcopy, to set recog_operands
	from an rtvec.
	* rtl.c (rtvec_alloc): Clear rtwint instead of rtvec.

	* machmode.h (HOST_PTR_PRINTF): Handle char * wider than long.
	(HOST_WIDE_INT_PRINT_{DEC,UNSIGNED,HEX,DOUBLE_HEX}): New macros.
	* final.c (asm_fprintf): Use "ll" prefix for a long long HOST_WIDE_INT.
	(output_{asm_insn,addr_const}): Use HOST_WIDE_INT_PRINT_*.
	* print-tree.c (print_node{,_brief}, case INTEGER_CST): Likewise.
	* print-rtl.c (print_rtx, case 'w'): Use HOST_WIDE_INT_PRINT_DEC.

	* unroll.c (iteration_info): Fix code so that it knows iteration_var
	is a HOST_WIDE_INT, not a long.

	* fold-const.c (operand_equal_p): Do comparison with REAL_VALUES_EQUAL.
	(make_range): Properly decide when to get TREE_TYPE of arg0.
	Handle EXP being an INTEGER_CST at end.
	(fold_range_test): Handle return of 0 from make_range.
	(fold, case TRUTH_AND_EXPR): Handle first arg of 0.
	(fold, case TRUTH_OR_EXPR): Handle first arg of 1.

	* c-common.c (decl_attributes, case A_ALIAS): Add missing parens.

Fri Nov 15 06:37:54 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* fold-const.c (range_binop): Set SNG1 to zero if ARG1 is a
	not a lower or upper bound.

Thu Nov 14 23:08:25 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* flags.h (debug_info_type): Add DWARF2_DEBUG.
	* toplev.c (main): Support DWARF2_DEBUG.  Add -gdwarf-1, -gdwarf-2
 	options.  Check debug level after choosing type.
	(debug_{start,end}_source_file, debug_{define,undef}): New functions.
	(compile_file): Support dwarf2 separately from dwarf1. 
	(rest_of_type_compilation, rest_of_compilation): Likewise.
	* final.c (final_start_function): Likewise.
	(final_end_function, final_scan_insn, output_source_line): Likewise.
	* varasm.c (assemble_variable): Likewise.
	* dwarfout.c: Don't check DWARF_VERSION.
	* dwarf2out.c: s/dwarfout/dwarf2out/g.  Check DWARF2_DEBUGGING_INFO.
	* c-lex.c (check_newline): Use debug_* instead of calling *out
 	functions directly.
	* svr4.h (DWARF2_DEBUGGING_INFO): Define.
	* mips/iris6.h (PREFERRED_DEBUGGING_TYPE): DWARF2_DEBUG.
	(DWARF2_DEBUGGING_INFO): Define instead of DWARF_DEBUGGING_INFO.
	(LINK_SPEC): Pass -w through.
	* mips.h (PREFERRED_DEBUGGING_TYPE): Don't check `len'.

Thu Nov 14 17:25:47 1996  Jeffrey A Law  (law@cygnus.com)

 	* h8300.c (dosize): Don't clobber static chain reg if needed by
	current function.

Wed Nov 13 17:05:19 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* Makefile.in (stage?-start): Keep a copy of EXTRA_MULTILIB_PARTS
	in the build directory.

Tue Nov 12 23:17:17 1996  Jeffrey A Law  (law@cygnus.com)

	* pa.c (print_operand, case 'Y'): Fix comparisons to handle
	NaNs properly in all cases.

Tue Nov 12 18:47:24 1996  Jim Wilson  <wilson@cygnus.com>

	* expr.c (emit_group_store): For REG case, call gen_lowpart if
	modes are different.

Tue Nov 12 18:24:40 1996  Doug Rupp  (rupp@gnat.com)

	* gcc.c (exit): If VMS, define as __posix_exit.
	(option_map): Add define-macro and undefine-macro.

Tue Nov 12 17:55:10 1996  Torbjorn Granlund  <tege@tege.pdc.kth.se>

	* alpha.c (input_operand): If TARGET_BYTE_OPS accept HImode and QImode.
	* alpha.h (MASK_BYTE_OPS): New define.
	(TARGET_BYTE_OPS): New define.
	(TARGET_SWITCHES): Handle -mbyte.
	(LOAD_EXTEND_OP): When MODE is not SImode, return ZERO_EXTEND.
	* alpha.md (zero_extendqidi2): Handle TARGET_BYTE_OPS.
	(zero_extend{hidi,qisi,hisi}2): Likewise.
	(extendqisi2): Use extendqidi2x if TARGET_BYTE_OPS.
	(extendqidi2): Likewise.
	(extendqidi2x): New pattern.
	(extendhisi2): Use extendhidi2x if TARGET_BYTE_OPS.
	(extendhidi2): Likewise.
	(extendhidi2x): New pattern.
	(movhi): Handle TARGET_BYTE_OPS.
	(movhi matcher): Output ldwu and stw.
	(movqi): Handle TARGET_BYTE_OPS.
	(movqi matcher): Output ldbu and stb.

Tue Nov 12 16:53:37 1996  Rob Savoye  <rob@chinadoll.cygnus.com>

	* configure (hppa1.1-pro*, i960-*-coff*,m68k-*-aout*): Add libgloss.h.
	(m68k-*-coff*, mips*-*-elf*, sparc*-*-aout*, sparc*-*-coff*): Likewise.
	* config/libgloss.h: New file.

Tue Nov 12 16:21:45 1996  Joern Rennecke <amylaar@cygnus.com>

	* jump.c (jump_optimize): Fix bug in Sep 23 change.

Tue Nov 12 16:15:31 1996  Andrew Cagney  (cagney@tpgi.com.au)

	* global.c (prune_references): Add missing symmetic CONFLICTP call.

Tue Nov 12 14:34:40 1996  Philippe De Muyter  <phdm@info.ucl.ac.be>

	* m68k.c (output_function_{pro,epi}logue): Save and restore
	fp-registers only if TARGET_68881.

	* m68k/mot3300.h (ASM_OUTPUT_INTERNAL_LABEL): Prefix labels with "L%".
	(ASM_GENERATE_INTERNAL_LABEL, ASM_OUTPUT_CASE_LABEL): Likewise.
	(ASM_OUTPUT_ADDR_VEC_ELT, ASM_OUTPUT_ADDR_DIFF_ELT): Likewise.

	* m68k/mot3300.h (TARGET_DEFAULT): Use MASK_68040_ALSO, not MASK_68040.
	* m68k/next.h, m68k/ccur-GAS.h (TARGET_DEFAULT): Likewise.

	* fixproto (std_files): Add sys/socket.h.

	* m68k.md (movqi): Emit 'st' for INTVAL & 255 == 255, not INTVAL == -1.
	(seq,sne,sgt,sgtu,slt,sltu,sge,sgeu,sle,sleu): Allow "m" as operand 0.

Tue Nov 12 14:17:45 1996  Paul Eggert  <eggert@twinsun.com>

	* c-decl.c (grokdeclarator): Generate a warning if -Wimplicit,
	unless a warning was already generated by -Wreturn-type.

Tue Nov 12 14:11:02 1996  Pat Rankin  <rankin@eql.caltech.edu>

	* Make qsort callback routines conform to the ANSI/ISO standard.
	* c-decl.c (field_decl_cmp): Use `const void *' arguments.
	* global.c (allocno_compare): Likewise.
	* reload1.c (hard_reg_use_compare, compare_spill_regs): Likewise.
	(reload_reg_class_lower): Likewise.
	* stupid.c (stupid_reg_compare): Likewise.
	* local-alloc.c (qty_compare_1, qty_sugg_compare_1): Likewise.
	(QTY_CMP_PRI, QTY_CMP_SUGG): New macros.
	(qty_compare_1, qty_sugg_compare_1): Use them.

Tue Nov 12 13:20:25 1996  Jim Wilson  <wilson@cygnus.com>

	* fold-const.c (merge_ranges): In (+,-) case, treat subset specially
	if lower bounds are the same.

Tue Nov 12 13:10:01 1996  J.T. Conklin  <jtc@cygnus.com>

	* m68k.md (addsi3): If TARGET_5200, use the lea insn to add small
	constants to address registers.
	(negsi2): Change into define_expand.
	(negsi2_internal): Rename from old negsi2, changed condition
	to !TARGET_5200.
	(negsi2_5200): New insn.
	(one_cmplsi2): Change into define_expand.
	(one_cmplsi2_internal): Rename from old one_cmplsi2, changed
	condition to !TARGET_5200.
	(one_cmplsi2_5200): New insn.
	(negdi2_5200): Corrected constraints.
	(one_cmpldi2): Changed condition to !TARGET_5200.

	* m68k.c (m68k_align_loops_string, m68k_align_jumps_string): New vars.
	(m68k_align_funcs_string, m68k_align_loops): Likewise.
	(m68k_align_jumps, m68k_align_funcs): Likewise.
	(override_options): New function.
	* m68k.h (TARGET_OPTIONS): Added alignment options.
	(MAX_CODE_ALIGN, ASM_OUTPUT_LOOP_ALIGN, ASM_OUTPUT_ALIGN_CODE):
	New macros.
	(FUNCTION_BOUNDARY): Use value derrived from  m68k_align_funcs
	instead of constant.
 
	* m68k.c (output_function_{pro,epi}logue): Fix typo in last change.

Tue Nov 12 09:26:51 1996  Torbjorn Granlund  <tege@wombat.gnu.ai.mit.edu>

	* i386.md (parallel inc/dec and branch-if-zero/nonzero): Use `+' in
	constraint.

Mon Nov 11 15:12:22 1996  Jason Merrill  <jason@yorick.cygnus.com>

        * libgcc2.c: Also define WEAK_ALIAS if ASM_OUTPUT_WEAK_ALIAS.
	* mips/iris6.h (ASM_OUTPUT_WEAK_ALIAS): Define.
	* varasm.c (assemble_alias): Use ASM_OUTPUT_WEAK_ALIAS.

	* dwarf2out.c (TYPE_USED_FOR_FUNCTION): Lose.
	(gen_compile_unit_die): Only append -g with -g2 or better.
	(scope_die_for): Don't emit any type info with -g1.
	(gen_subprogram_die): Likewise.
	(gen_decl_die): Likewise.
	(dwarfout_file_scope_decl): Likewise.
	(dwarfout_init): Likewise.

	* mips/iris6.h (TYPE_ASM_OP): Define.
	(SIZE_ASM_OP): Define.
	(ASM_WEAKEN_LABEL): Define.
	(BSS_SECTION_ASM_OP): Define.
	(ASM_OUTPUT_ALIGNED_LOCAL): Don't use ASM_DECLARE_OBJECT_NAME.
	(ASM_OUTPUT_ALIGNED_BSS): Define.
	(ASM_DECLARE_OBJECT_NAME): Redefine to emit .size directive.
	(ASM_FINISH_DECLARE_OBJECT): Define.
	(ASM_OUTPUT_DEF): Don't define.

Fri Nov  8 20:38:51 1996  Jim Wilson  <wilson@cygnus.com>

	* function.c (expand_function_end): Handle BLKmode structures returned
	in registers.

Fri Nov  8 20:27:07 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* stor-layout.c (layout_record): Check for VAR_DECL instead 
	of TREE_STATIC.

	* varasm.c (assemble_variable): Do write out DWARF for 
	record-scope variables.
	* toplev.c (rest_of_type_compilation): Do write out DWARF for
 	record-scope types.

	* dwarf2out.c (gen_enumeration_type_die): Set TREE_ASM_WRITTEN on a
	complete enum type.
	(gen_struct_or_union_type_die): Don't recurse between nested classes.
	(gen_type_die): Write out nested classes by writing out their context.

Fri Nov  8 17:40:27 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* emit-rtl.c (change_address): If MEMREF isn't changing,
	return the old one.

	* expr.c (expand_assignment): Remove bogus resetting of alignment
	to inner alignment.
	(expand_expr, case COMPONENT_REF): Likewise.

Fri Nov  8 16:31:31 1996  Stan Cox  <coxs@dg-rtp.dg.com>

	* reg-stack.c (compare_for_stack_reg, subst_stack_regs_pat): 
	Add support for float conditional move.

Thu Nov  7 07:46:07 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* stor-layout.c (layout_record): Treat constant size as variable if
	it overflows.
	* fold-const.c (const_binop, case *_DIV_EXPR): Don't do special
	sizetype case if a constant overflows.
	(size_binop): Use integer_{zero,one}p instead of explicit test.
	* tree.c (integer_{zero,one,all_ones,pow2}p, real_{zero,one,two}p):
	Return 0 if TREE_CONSTANT_OVERFLOW.

Wed Nov  6 17:53:33 1996  Torbjorn Granlund  <tege@wombat.gnu.ai.mit.edu>

	* i386.md (parallel inc and branch-if-zero/nonzero): Add two
	new pattern variants.  Change incrementing pattern to use incl/jnz.

Wed Nov  6 09:46:10 1996  Stan Cox  <coxs@dg-rtp.dg.com>

	* i386.c (override_options): Set defaults for -march and -mcpu.
	(output_float_compare): Use cc_status.flags to mark if this
	comparison can be done with fcomi.
	(output_fp_cc0_set): A conditional move may be in a PARALLEL.

	* i386.h (CC_FCOMI): Define

	* i386.md (sgt,sgtu,sge,sle,bgt,blt,bge,ble): Use CC_FCOMI
	(movsicc_1,movhicc_1): Use correct size suffix.
	(movsfcc_1,movdfcc_1): Cleanup default move case.

Wed Nov  6 09:46:10 1996  J"orn Rennecke <amylaar@cygnus.co.uk>

	* i386.h (HARD_REGNO_MODE_OK): If long double isn't XFmode, can't
	allow XFmode.

Tue Nov  5 22:49:56 1996  J"orn Rennecke <amylaar@cygnus.co.uk>

	* sh.md (define_split for and_shl_scratch):
	Use rtx_equal_p on the operands to find out which alternative is used.
	* sh.c (gen_shl_and): Try to generate shorter constant for and.

Mon Nov  4 19:13:52 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* dwarf2out.c: Clean up unused variables.
	Use ASM_{GENERATE,OUTPUT}_INTERNAL_LABEL, shorten label names.
 	(loc_descriptor): Use reg_loc_descriptor.
	(TYPE_DECL_IS_STUB): New macro.
	(gen_decl_die): Use it.
	(dwarfout_file_scope_decl): Use it.

Mon Nov  4 10:23:46 1996  Michael Meissner  <meissner@tiktok.cygnus.com>

	* ginclude/va-ppc.h (__va_regsave_t,va_start,va_end): Wrap macro
	and structures inside #ifndef __VA_PPC_H__ to allow reinclusion.

	* rs6000.h (LEGITIMATE_SMALL_DATA_P): Don't allow -fpic or TARGET_TOC.
	(LEGITIMATE_LO_SUM_ADDRESS_P, LEGITIMIZE_ADDRESS): Likewise.

	* rs6000.md (movsi): Don't call elf_{high,low} if -fpic.

	* rs6000/cygwin32.h (STARTFILE_SPEC): Eliminate empty %{}.

Sun Nov  3 15:56:35 1996  Michael Meissner  <meissner@tiktok.cygnus.com>

	* rs6000/sysv4.h (TARGET_TOC): Plain -fpic does not require a TOC.
	({MINIMAL_TOC,CONST}_SECTION_ASM_OP): -fpic should be treated like
	-mrelocatable in these cases.
	(ASM_OUTPUT_INT, ASM_OUTPUT_SECTION_NAME): Likewise.
	(ASM_OUTPUT_ALIGNED_LOCAL): Use sdata_section, not sbss_section.

Fri Nov  1 19:57:13 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* dwarf2out.c (based_loc_descr): Use DBX_REGISTER_NUMBER.  The 
	"frame base" is just the frame or stack reg without an offset.
	(gen_subprogram_die): Likewise.
	(dwarfout_begin_function): Use DBX_REGISTER_NUMBER.

Fri Nov  1 09:50:05 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* fold-const.c (make_range): Don't merge unsigned case with range
	containing upper bound; instead merge just with zero and convert
	a range with no upper bound to opposite one with no lower bound.
	(merge_ranges): In (+,-) case, don't treat subset specially if
	the upper bounds are the same; fix typo in others case here.

Thu Oct 31 20:12:13 1996  Jeffrey A Law  (law@cygnus.com)

	* fold-const.c (make_range, case PLUS_EXPR): Correct
	normalization of an unsigned range that wraps around zero.

Thu Oct 31 21:06:37 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* mips/t-iris6 (EXTRA_MULTILIB_PARTS): Define.
	(EXTRA_PARTS): Don't define.

	* dwarf2out.c (gen_struct_or_union_type_die): Use AT_specification
	for nested types defined outside their containing class.  Lose 
	is_complete.
	(gen_enumeration_type_die): Lose is_complete.
	(gen_type_die): Lose is_complete.
	(add_name_and_src_coords_attributes): Tweak.
	(gen_subroutine_type_die): Use scope_die_for.
	(gen_ptr_to_mbr_type_die): Likewise.
	(gen_subprogram_die): Support AT_artificial.
	(gen_variable_die): Likewise.
	(dwarfout_file_scope_decl): Lose finalizing.

Thu Oct 31 18:43:18 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* pa.c (emit_move_sequence): Refine previous change.

Thu Oct 31 13:25:32 1996  Jim Wilson  <wilson@cygnus.com>

	* crtstuff.c: Put HAS_INIT_SECTION ifdefs around Irix6 support.

	* tree.c (decl_function_context): Handle QUAL_UNION_TYPE.

	* calls.c (expand_call): Disable special handling for const calls
	that return a PARALLEL rtx.
	* expr.c (expand_expr, case CONSTRUCTOR): Don't use a PARALLEL
	target.

Thu Oct 31 11:45:00 1996  Michael Meissner  <meissner@tiktok.cygnus.com>

	* rs6000/t-{ppcgas,ppc,solaris} (EXTRA_MULTILIB_PARTS): Add
	{e,s}crt{i,n,0}.o.
	({stmp,install}-crt): Delete, no longer used.
	({,INSTALL_}LIBGCC): Remove {stmp,install}-crt rule.

Thu Oct 31 02:49:58 1996  Torbjorn Granlund  <tege@nada.kth.se>

	* i386.md (parallel inc and branch-if-zero/nonzero):
	Check for -1, not zero.

Wed Oct 30 15:50:49 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* fold-const.c (range_binop): Strip NOPs from result and
	verify it's an INTEGER_CST.
	(make_range, case BIT_NOT_EXPR): Fix typo in constant for PLUS_EXPR.

	* stor-layout.c (layout_record): Use HOST_WIDE_INT for size.

	* stmt.c (expand_asm_operands): Disallow matching constraints
	on output and validate the numbers on inputs.

Tue Oct 29 16:21:59 1996  Michael Meissner  <meissner@tiktok.cygnus.com>

	* gcc.c (process_command,main): Process -specs=file and -specs
	file after reading the main specs file to allow the user to
	override the default.
	(DEFAULT_WORD_SWITCH_TAKES_ARG): Add specs to list.
	(option_map): Likewise.

Tue Oct 29 15:49:18 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* Makefile.in (stmp-multilib): Pass $flags to s-m-sub in 
	MULTILIB_CFLAGS.
	(stmp-multilib-sub): Build EXTRA_MULTILIB_PARTS.
	($(T)crt*.o): Add $(T), lose stamp-crt rule, use MULTILIB_CFLAGS.
	(install-multilib): Install EXTRA_MULTILIB_PARTS.

Mon Oct 28 20:09:39 1996  J"orn Rennecke <amylaar@cygnus.co.uk>

	* sh.md (shl_sext_ext): Don't accept simple left/right shift variant.
	* sh.c (EXT_SHIFT_SIGNED): New macro.
	(shl_sext_kind, gen_shl_sext): try left shift - sign extend -
	left shift - arithmetic right shift in case 2.

Mon Oct 28 14:55:42 1996  Jim Wilson  <wilson@cygnus.com>

	* configure (sh-*-*): Set float_format to sh.
	* config/float-sh.h: New file.

Mon Oct 28 14:26:08 1996  Ian Lance Taylor  <ian@cygnus.com>

	* mips/mips.h (RTX_COSTS): Add cases for SIGN_EXTEND and ZERO_EXTEND.

	* m68k/lb1sf68.asm: Change # to IMM in udivsi3 __mcf5200__.

	* combine.c (simplify_rtx): Add some optimizations for TRUNCATE.
	(expand_compound_operation): Add some optimizations for ZERO_EXTEND.

Mon Oct 28 14:11:20 1996  Gavin Koch  <gavin@cygnus.com>
        
	* varasm.c (make_decl_rtl,assemble_variable):
	Allow named sections for uninitialized variables.

Mon Oct 28 13:08:51 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* pa.c (emit_move_sequence): If reload in progress, replace
	reference to pseudo with reference to corresponding MEM.

	* c-typeck.c ({un,}signed_type): If can't do anything, call
	signed_or_unsigned_type.
	(signed_or_unsigned_type): If already right signedness, return.

Mon Oct 28 13:05:26 1996  Stephen Williams (steve@icarus.com)

	* i960.h: Add specification for -Jx types.
	* i960/t-960bare: Include multilib support for Jx types.

Mon Oct 28 10:06:00 1996  Michael Meissner  <meissner@tiktok.cygnus.com>

	* rs6000/t-{ppc{,gas},solaris} (install-crt): Depend on
	installdirs, not install-dir.

	* rs6000/sysv4.h (TARGET_TOC): -fpic does not use a TOC area.

Mon Oct 28 09:07:42 1996  J"orn Rennecke <amylaar@cygnus.co.uk>

	* reload1.c (delete_output_reload): Don't use delete_insn
	when deleting all stores into a replaced pseudo.

	* sh.md (movsf_ieq, movsf_ie): Merged the former into the latter.
	Changed matching define_split appropriately.
	(movsf): Changed appropriately.
	(reload_insf) Define.
	* sh.h (SECONDARY_INPUT_RELOAD_CLASS): Define.

Mon Oct 28 08:38:23 1996  J"orn Rennecke <amylaar@cygnus.co.uk>

	* dsp16xx.h (ASM_OUTPUT_BYTE): Adjust definition to actual type of
	VALUE, which is HOST_WIDE_INT.

Mon Oct 28 07:36:07 1996  Ulrich Drepper  <drepper@cygnus.com>

	* ginclude/stddef.h: Make sure file is processed if some of the
	known __need_* macros is defined.

Sun Oct 27 21:37:59 1996  J.T. Conklin  <jtc@cygnus.com>

	* m68k.c (output_function_prologue): Adjust SP then use movmel with
	plain address indirect mode for TARGET_5200.
	(output_function_epilogue): Disable moveml and use several movel's
	instead for TARGET_5200.
	(output_function_{pro,epi}logue): Use lea instruction to adjust
 	stack pointer for short displacements for TARGET_5200.

Sun Oct 27 15:27:45 1996  Jeffrey A Law  (law@cygnus.com)

	* fold-const.c (merge_ranges): Fix thinko/typo.

Sat Oct 26 22:07:04 1996  Ian Lance Taylor  <ian@cygnus.com>

	* expr.c (convert_modes): Before returning a const_double for a
	large unsigned value, zero extend an integer value if necessary.

Sat Oct 26 15:24:55 1996  Philippe De Muyter  <phdm@info.ucl.ac.be>

	* m68k/x-mot3300 (XCFLAGS): Disable native assembler's jump
	optimization for expr.o and cp/decl.o.

Sat Oct 26 14:04:09 1996  Ben Harris  <bjh21@cam.ac.uk>

	* m68k.c (output_function_prologue): Add REGISTER_PREFIX to stack
	probe instruction.

Sat Oct 26 13:59:05 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* explow.c (allocate_dynamic_stack_space): Delete reference to
	nonexistant macro ALLOCATE_OUTGOING_ARGS.

	* next.h (CPP_PREDEFINES): Add -D_NEXT_SOURCE.

Sat Oct 26 13:50:49 1996  Mark Mitchell  (mitchell@centerline.com)

	* configure (i486-ncr-sysv4*): Use i386/sysv4gdb if stabs and gas.

Sat Oct 26 12:20:35 1996  John F. Carr  <jfc@mit.edu>

	* configure: Support --with-cpu=* for SPARC.  Or target default
	values instead of adding them.
	* sparc.c (cpu_default): Add entries for v8 and supersparc.
	* sparc.h: Define TARGET_CPU values for v8 and supersparc.

Sat Oct 26 11:38:01 1996  Kamil Iskra  <iskra@student.uci.agh.edu.pl>

	* collect2.c (dump_file): Call fclose for opened files.

Sat Oct 26 11:29:29 1996  J"orn Rennecke  (amylaar@cygnus.co.uk)

	* jump.c (jump_optimize): Fix second error in last change.

	* svr3.h: Fix typo which makes comment text be non-comment.

Fri Oct 25 16:18:39 1996  Michael Meissner  <meissner@tiktok.cygnus.com>

	* rs6000/t-winnt (LIBGCC1): Don't build libgcc1.
	(EXTRA_PARTS): Build crti.o, crtn.o.
	(stmp-crt): Remove old multilib support.

Thu Oct 24 15:09:14 1996  Jim Wilson  <wilson@cygnus.com>

	* fold-const.c (make_range, case PLUS_EXPR): Normalize an unsigned
	range that wraps around 0.

Thu Oct 24 14:37:17 1996  Ian Lance Taylor  <ian@cygnus.com>

	* mips.md: Change predicates for 64 bit arithmetic operations
	so that they accept sign extended registers as operands.
	(extendsidi2): Accept hi or lo as input.
	* mips.c (movdi_operand, se_register_operand,
	se_reg_or_0_operand, se_uns_arith_operand, se_arith_operand,
	se_nonmemory_operand, se_nonimmediate_operand): New functions.
	(mips_move_2words): Handle a SIGN_EXTEND source.
	(print_operand): Handle a SIGN_EXTEND operand.
	(mips_secondary_reload_class): Handle a SIGN_EXTEND rtx.
	* mips.h: Declare new mips.c functions.
	(PREDICATE_CODES): Add new functions.

Thu Oct 24 07:41:14 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* fold-const.c (make_range, comparison cases): When making range
	for unsigned to merge in, use full range.

	* stor-layout.c (GET_MODE_ALIGNMENT): Delete definition; duplicate.

Thu Oct 24 07:28:53 1996  J"orn Rennecke <amylaar@cygnus.co.uk>

	* reload1.c (emit_reload_insns): Check for second_reloadreg
	in SECONDARY_OUTPUT_RELOAD_CLASS / PRESERVE_DEATH_INFO_REGNO_P case.

Wed Oct 23 14:27:43 1996  Mike Stump  <mrs@cygnus.com>

	* crtstuff.c (__do_global_dtors_aux): Allow finalization code to
	be run more than once.
	* libgcc2.c (__do_global_dtors): Ditto.
	
Wed Oct 23 20:42:23 1996  Joern Rennecke <amylaar@cygnus.co.uk>

	* sh.c (dump_table): handle SFmode and DFmode.
	(broken_move): handle simple PARALLEL.
	(machine_dependent_reorg, pc-relative move generation): Likewise.
	* sh.h (CONST_DOUBLE_OK_FOR_LETTER_P): always true for 'F' .
	(LEGITIMATE_CONSTANT_P): accept SFmode and DFmode.
	* sh.md (movdf_k, movsf_i, movsf_ie): new alternative for
	pc-relative load.
	(movsf_ieq): new define_insn with matching define_split.
	(movsf): use it where appropriate.
	(consttable_sf, consttable_df): new define_insns.

Wed Oct 23 17:48:32 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* svr4.h (MAKE_DECL_ONE_ONLY): Fix typo in use of macro parameter.

Wed Oct 23 17:46:13 1996  Pat Rankin  <rankin@eql.caltech.edu>

	* cexp.y (yylex): Cast string literal to U_CHAR* for lookup() call.

Wed Oct 23 14:50:04 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* stmt.c (expand_return): Expand cleanups.  Make sure we get pseudo
	and provide target in non-BLKmode case.  Get proper return type of fn.

Wed Oct 23 14:16:06 1996  Ian Lance Taylor  <ian@cygnus.com>

	* reload.c (find_reloads): Handle any unary operator.
	* recog.c (constrain_operands): Likewise.

	* mips.md: Remove extendsidi2 define_expand. 
	Rename extendsidi2_internal define_insn to extendsidi2, and add a
	register to register case.

Wed Oct 23 14:08:31 1996  Jim Wilson  <wilson@cygnus.com>

	* a29k.c (a29k_makes_calls): New global variable.
	(compute_regstack_size, a29k_compute_reg_names): New functions.
	(output_prolog): Much code moved to two new functions.
	Use a29k_makes_calls instead of makes_calls.
	* a29k.h (ASM_DECLARE_FUNCTION_NAME): Call a29k_compute_reg_names.

	* calls.c (expand_call): In target code, move PARALLEL case above
	target != case.

	* mips.c (block_move_load_store, block_move_sequence): Delete.
	(block_move_loop): New parameter orig_dest.  Call change_address to
	create new MEM instead of gen_rtx.
	(expand_block_move): New local orig_dest.  Pass it to block_move_loop.
	Call change_address to create new MEM instead of gen_rtx.

Wed Oct 23 10:30:32 1996  J"orn Rennecke <amylaar@cygnus.co.uk>

	* loop.c (combine_givs): When combining a DEST_REG giv with its
	only use, always set the benefit of the combined giv to that of
	the DEST_REG giv.

	* emit-rtl (gen_lowpart_common): When converting a floating
	point value into an integer, use WORD as (first) word.

	* combine.c (can_combine_p): When SMALL_REGISTER_CLASSES is defined,
	avoid substituting a return register into I3.

	* optabs.c (emit_libcall_block): Before adding an REG_EQUAL note,
	check that it will really apply to a single instruction.
	(expand_binop, expand_fix): Likewise.

Wed Oct 23 10:20:52 1996  Stephen L Moshier  (moshier@world.std.com)

	* real.c (exact_real_inverse): New function, if REAL_ARITHMETIC.
	* fold-const.c (exact_real_inverse): Likewise, if no REAL_ARITHMETIC.
	(fold, case RDIV_EXPR): Turn divide by constant into multiplication
	by the reciprocal, if optimizing and result is exact.
	* real.h (exact_real_inverse): Declare.

Wed Oct 23 00:12:52 1996  Torbjorn Granlund  <tege@nada.kth.se>

	* expr.h (emit_store_flag_force): Declare.

Tue Oct 22 18:32:20 1996  Jim Wilson  <wilson@cygnus.com>

	* unroll.c (unroll_loop): Always reject loops with unbalanced blocks.

Tue Oct 22 18:27:06 1996  Ian Lance Taylor  <ian@cygnus.com>

	* config/fp-bit.c (float_to_usi): Correct thinko: avoid negative shift.
	(df_to_sf): Remember any discarded nonzero bits in the low order
	guard bit.

	* ginclude/va-mips.h: Add support for -mips1 and -msoft-float when
	using -mabi=eabi.
	* mips/abi64.h (SETUP_INCOMING_VARARGS): When MIPS EABI, handle
	TARGET_SINGLE_FLOAT or ! TARGET_FLOAT64 correctly when saving
	floating point registers to the stack.
	* mips/mips.c (mips_function_value): If TARGET_SINGLE_FLOAT, use
	GP_RETURN for floating point types larger than 4 bytes.

Tue Oct 22 09:43:49 1996  Geoffrey Noer  <noer@cygnus.com>

	* rs6000/cygwin32.h (LIB_SPEC): Add -lkernel32 all of the time,
	and {user,gdi,comdlg}32 if -mwindows.

Tue Oct 22 05:24:05 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* dwarf2out.c (scope_die_for): Don't skip lexical blocks.
	(gen_lexical_block_die): Call push_decl_scope.
	(gen_subprogram_die): Never refer to the function symbol.
	(dwarfout_begin_prologue): Likewise.

Mon Oct 21 20:22:49 1996  Torbjorn Granlund  <tege@nada.kth.se>

	* expmed.c (emit_store_flag_force): New function.
	* optabs.c (expand_binop): Use it.
	
	* expr.c (do_store_flag): Don't check if target is 0 in code
	emitting store flag as compare-branch.

Mon Oct 21 17:58:33 1996  Ian Lance Taylor  <ian@cygnus.com>

	* mips.c (override_options): Correct typo (MASK_64BIT should
	have been TARGET_64BIT).

Mon Oct 21 13:58:54 1996  Jim Wilson  <wilson@cygnus.com>

	* unroll.c (loop_comparison_code): New static variable.
	(unroll_loop): Add check for loop_comparison_code
	(loop_iterations): Set loop_comparison_code.

	* sh.c (gen_shl_sext): Add missing parameter to shl_sext_kind call.

	* mips.h (INITIAL_FRAME_POINTER_OFFSET): Delete.

	* loop.c (strength_reduce): Add check for ! bl->reversed to
	auto_inc_opt code.

Mon Oct 21 12:28:15 1996  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* jump.c (jump_optimize): Fix bug in Oct. 14 change.

Mon Oct 21 07:59:16 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* expr.c (store_expr): Disable optimization of using convert
	if exp's type is a subtype.

	* c-typeck.c (build_array_ref): If -Wchar-subscripts, also warn
	in case when pointer is being indexed.

Mon Oct 21 07:39:31 1996  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* jump.c (jump_optimize): Use emit_store_flag even if branches
	are cheap, if the store is even cheaper.

Sun Oct 20 20:01:09 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* reload1.c (reload_reg_free_p, reloads_conflict): RELOAD_OTHER
	and RELOAD_FOR_OTHER_ADDRESS conflict.

	* i386.md (ffs[sh]i2): Add missing CC_STATUS_INIT.

Fri Oct 18 13:32:13 1996  Michael Meissner  <meissner@tiktok.cygnus.com>

	* rs6000.md (float conversion insns): Generate correct code
	if the bit 15 of rs6000_fpmem_offset is non-zero.

Thu Oct 17 23:22:03 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* dwarfout.c (data_member_location_attribute): Support binfos.
	(output_inheritance_die): New fn.
	(output_type): Use it.

	* dwarf2out.c (value_format): Split out from...
	(output_value_format): Here.
	(build_abbrev_table): Use value_format.
	(size_of_locs): New fn.
	(size_of_die): Don't assume a loc needs a 2-byte length.
	(value_format, output_die): Likewise.

Thu Oct 17 14:46:14 1996  Ian Lance Taylor  <ian@cygnus.com>

	* mips.c (override_options): In 64 bit EABI mode, set TARGET_LONG64.

Thu Oct 17 11:34:51 1996  Bob Manson  <manson@cygnus.com>

	* expr.c (do_jump): Conditionalize cleanups for the COND_EXPR case,
 	similarly to the way TRUTH_ANDIF_EXPR and TRUTH_ORIF_EXPR are
 	handled.

Thu Oct 17 01:20:16 1996  Jim Wilson  <wilson@cygnus.com>

	* m68k.h (MASK_68040_ALSO): New macro.
	(TARGET_SWITCHES): Option -m68020-40 includes MASK_68040_ALSO.

Wed Oct 16 16:25:38 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* dwarf2out.c (scope_die_for): Also support decls, add asserts.
	(modified_type_die): Modified types all go under comp_unit_die.
	(add_type_attribute): Just pass context_die through.
	(various): Revert useless lookup_type_die change.
	(gen_subprogram_die): Use scope_die_for.  Call push_decl_scope.
	(gen_inlined_subroutine_die): Call push_decl_scope.
	(gen_struct_or_union_type_die): Likewise.
	(gen_decl_die): Don't call push_decl_scope.

	* mips/iris6.h (*_SPEC): Replace enumeration of !mabi= with !mabi*.
	(ASM_OUTPUT_{CON,DE}STRUCTOR): Enable.
	(STARTFILE_SPEC): Support -mips4, -shared.
	(ENDFILE_SPEC): Likewise.
	(LIB_SPEC): Support -shared, avoid warning 84.
	(LIBGCC_SPEC): Define.
	(LINK_SPEC): Support -shared, remove -woff 84.
	* mips/t-iris6 (EXTRA_PARTS): Add crtstuff.
	* crtstuff.c: Support Irix 6.
	* configure: Don't use collect2 for Irix 6.
	* libgcc2.c (__main): Don't use any of this stuff if HAS_INIT_SECTION.

Wed Oct 16 11:46:37 1996  Mike Stump  <mrs@cygnus.com>

	* elxsi.h (CHECK_FLOAT_VALUE): Removed.

Wed Oct 16 14:19:38 1996  Jim Wilson  <wilson@cygnus.com>

	* iris6.h (CPP_PREDEFINES): Add -D_LONGLONG.
	(CPP_SPECS): Remove -D_LONGLONG.

Wed Oct 16 03:34:42 1996  Torbjorn Granlund  <tege@nada.kth.se>

	* i386.md (parallel inc/dec and branch-if-zero/nonzero): New patterns.

Tue Oct 15 22:28:11 1996  Ian Lance Taylor  <ian@cygnus.com>

	* mips.h (enum mips_abi_type): Add ABI_EABI.
	(CPP_SPEC): Define __mips_soft_float if -msoft-float, and
	__mips_eabi if -mabi=eabi.
	(INITIAL_ELIMINATION_OFFSET, CUMULATIVE_ARGS,
	GO_IF_LEGITIMATE_ADDRESS, CONSTANT_ADDRESS_P, LEGITIMATE_CONSTANT,
	LEGITIMIZE_ADDRESS): Add support for MIPS EABI.
	* mips/abi64.h (STACK_BOUNDARY, MIPS_STACK_ALIGN,
	FUNCTION_ARG_PADDING, RETURN_IN_MEMORY, SETUP_INCOMING_VARARGS):
	Add support for MIPS EABI.
	(FUNCTION_ARG_PASS_BY_REFERENCE): Define.
	(FUNCTION_ARG_CALLEE_COPIES): Define.
	* mips.c (mips_const_double_ok, function_arg_advance,
	function_arg, function_arg_partial_nregs, override_options,
	compute_frame_size): Add support for MIPS EABI.
	(function_arg_pass_by_reference): New function.
	* ginclude/va-mips.h: Add support for MIPS EABI.

Tue Oct 15 19:10:08 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* toplev.c (rest_of_type_compilation): Don't write out
	DWARF for function-scope types yet.
	(compile_file): Do send vars with no RTL to the DWARF code.

Tue Oct 15 17:54:43 1996  Doug Evans  <dje@cygnus.com>

	* loop.c (strength_reduce): Avoid taking PATTERN of a label.

Tue Oct 15 16:52:33 1996  Ian Lance Taylor  <ian@cygnus.com>

	* mips/iris6.h: (SUBTARGET_CPP_SIZE_SPEC): Define.
	(SUBTARGET_CPP_SPEC): Remove definitions of __SIZE_TYPE__ and
	__PTRDIFF_TYPE__, now in SUBTARGET_CPP_SIZE_SPEC.

Tue Oct 15 11:19:17 1996  Lee Iverson  <leei@Canada.AI.SRI.COM>

	* mips.h (CPP_SPEC): Restore -D_LANGUAGE_C for Objective C.

Mon Oct 14 18:03:35 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* dwarf2out.c (gen_decl_die): Do generate dies for classes with -g1.
	(dwarfout_file_scope_decl): Likewise.

Mon Oct 14 16:31:44 1996  Joern Rennecke <amylaar@cygnus.co.uk>

	* jump.c (jump_optimize): Check for if (...) { x = a; goto l; } x = b;

Mon Oct 14 14:19:49 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* dwarf2out.c (modified_type_die): Don't bother with AT_address_class.
	(add_data_member_location_attribute): Handle getting a binfo.
	(add_location_or_const_value_attribute): Handle a decl with no RTL.
	(add_pure_or_virtual_attribute): Add AT_vtable_elem_location.
	(add_name_and_src_coords_attributes): Only use DECL_ASSEMBLER_NAME 
	for staticp things.
	(gen_subprogram_die): Set up AT_inline for abstract decls.
	(gen_inheritance_die): New fn.
	(gen_member_die): Also emit info for base classes.

Sat Oct 12 00:07:00 1996  Doug Evans  <dje@cygnus.com>

	* fold-const.c (make_range): Handle NULL operand 0 like in BIND_EXPRs.

Fri Oct 11 15:42:22 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* toplev.c (rest_of_compilation): If we did a
 	save_for_inline_copying, reset DECL_ABSTRACT_ORIGIN for the
 	function when we're done.

	* toplev.c (main): DWARF works with C++ now.

	* dwarf2out.c (gen_subprogram_die): Disable MIPS_AT_has_inline
 	support for now.

Fri Oct 11 14:31:10 1996  Torbjorn Granlund  <tege@nada.kth.se>

	* dwarfout.c: (output_bound_representation): Fix typo in prototype.

Fri Oct 11 12:19:21 1996  Ian Lance Taylor  <ian@cygnus.com>

	* mips.h ({,SUBTARGET_}MIPS_AS_ASM_SPEC): Define.
	({GAS,TARGET,SUBTARGET}_ASM_SPEC): Define.
	(SUBTARGET_ASM_{OPTIMIZING,DEBUGGING}_SPEC): Define.
	(ASM_SPEC): Rewrite to use above specs.
	(SUBTARGET_CPP{,_SIZE}_SPEC): Define.
	(CPP_SPEC): Use above specs.  Don't define _LANGUAGE_C if C++ or
	Objective C.
	({,SUBTARGET_}EXTRA_SPECS): Define.
	* mips/dec-bsd.h ({CPP,ASM}_SPEC): Don't define.
	* mips/dec-osf1.h (CPP_SPEC): Don't define.
	(SUBTARGET_CPP_SIZE_SPEC): Define.
	* mips/elf64.h (CPP_SPEC): Don't define.
	(SUBTARGET_CPP_SPEC): Define.
	* mips/gnu.h (TARGET_DEFAULT): Define.
	(ASM_SPEC): Don't define.
	* mips/iris3.h (CPP_SPEC): Don't define.
	(SUBTARGET_CPP_SPEC): Define.
	* mips/iris4loser.h (ASM_SPEC): Don't define.
	(SUBTARGET_MIPS_AS_ASM_SPEC): Define.
	(SUBTARGET_ASM_OPTIMIZING_SPEC): Define.
	* mips/iris5.h (CPP_SPEC): Don't define.
	(SUBTARGET_CPP_SPEC): Define.
	* mips/iris6.h ({CPP,ASM}_SPEC): Don't define.
	(SUBTARGET_{CPP,ASM,MIPS_AS_ASM,ASM_DEBUGGING}_SPEC): Define.
	* mips/netbsd.h ({CPP,ASM}_SPEC): Don't define.
	(SUBTARGET_CPP_SPEC): Define.
	* mips/osfrose.h ({CPP,ASM,ASM_FINAL}_SPEC): Don't define.
	(SUBTARGET_CPP{,_SIZE}_SPEC): Define.
	* mips/sni-svr4.h (CPP_SPEC): Don't define.
	(SUBTARGET_CPP_SIZE_SPEC): Define.

Thu Oct 10 17:58:49 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* mips/iris6.h (ASM_OUTPUT_SECTION_NAME): Define.
	(DWARF_OFFSET_SIZE): Define.

	* dwarf2out.c (most everywhere): Support SGI/MIPS -mabi=64 by fixing
 	code which assumed pointers are 4 bytes long, parameterizing many
	sizes on DWARF_OFFSET_SIZE and using DELTA instead of DELTA4,
 	DATA instead of DATA4, FORM_ref instead of FORM_ref4.
	(DWARF_ROUND, UNALIGNED_DOUBLE_INT_ASM_OP): New macros.
	(UNALIGNED_WORD_ASM_OP, ASM_OUTPUT_DWARF_DELTA): Likewise.
	(ASM_OUTPUT_DWARF_DATA, DW_FORM_data, DW_FORM_ref): New macros.
	(gen_variable_die): Only equate_decl_number_to_die if
	decl is TREE_STATIC.
	(get_AT): Fix thinko.

	* dwarf2out.c (constant_size): New fn.
	(size_of_die): Use it instead of assuming 4 bytes.
	(output_value_format, output_die): Likewise.
	(build_abbrev_table): Need new abbrev if size of constant differs.
	(dwarf_attr_name): Add new SGI/MIPS extensions.
	(gen_subprogram_die): Support DW_AT_MIPS_has_inlines.
	(gen_inlined_subroutine_die): Likewise.

Thu Oct 10 16:38:58 1996  Ian Lance Taylor  <ian@cygnus.com>

	* mips.md (mov[sd]fcc): Use register_operand, not reg_or_0_operand,
	for source predicates.

Thu Oct 10 15:19:38 1996  Michael Meissner  <meissner@tiktok.cygnus.com>

	* rs6000.md (floatsidf2_load): For large stack frames, do not
	generate an illegal memory reference.
	(movdi, movdf define_splits): Fix code so that it works for either
	big or little endian hosts generating code for either big or
	little endian targets.

	(from Jim Wilson)
	* rs6000.c (rs6000_save_toc_p): Delete global variable.
	(rs6000_{save,restore}_machine_status): Do not save/restore it.
	(rs6000_init_expanders): Do not initialize it.
	(rs6000_stack_info): Always create TOC save space.

	* rs6000.md (NT indirect call insns): Do not set
	rs6000_save_toc_p.

	* rs6000.h (rs6000_save_toc_p): Delete declaration.

Wed Oct  9 18:06:54 1996  Ian Lance Taylor  <ian@cygnus.com>

	* mips.h (EMPTY_FIELD_BOUNDARY): Define as 32.
	* mips/abi64.h (EMPTY_FIELD_BOUNDARY): Don't define.

	* mips/abi64.h (TARGET_DEFAULT, TARGET_LONG64, CPP_PREDEFINES,
	CPP_SPEC): Move from here...
	* mips/iris6.h: ...to here.

Wed Oct  9 16:43:51 1996  Jim Wilson  <wilson@cygnus.com>

	* configure (i[3456]86-dg-dgux): Use install-headers-cpio.

	* expr.c (store_constructor): Delete unnecessary increment.

Wed Oct  9 16:29:22 1996  Gavin Koch <gavin@cetus.cygnus.com>

	* cccp.c (do_include): Treat ENOTDIR like ENOENT when an open fails.

Wed Oct  9 16:26:57 1996  Paul Eggert  <eggert@twinsun.com>

	* gcc.c (default_compilers): -ansi no longer implies -$ to cpp.
	* c-lex.c (yylex): Treat `$' just like `_', except issue a
	diagnostic if !dollars_in_ident or if pedantic.
	* c-decl.c (dollars_in_ident): DOLLARS_IN_IDENTIFIERS is now Boolean.
	(c_decode_option): -fdollars-in-identifiers is now independent
	of -ansi, of -traditional, and of DOLLARS_IN_IDENTIFIERS.
	* cexp.y (initialize_random_junk): Ignore DOLLARS_IN_IDENTIFIERS.
	* cccp.c (dollars_in_ident): Remove; replaced by is_idchar['$'].
	(main): Initialize is_idchar and is_idstart directly when given -$.
	Ignore DOLLARS_IN_IDENTIFIERS.
	(rescan): Diagnose $ in identifier if pedantic.
	(initialize_char_syntax): Assume $ is allowed in identifier;
	`main' will change this if -$ is given.
	* cpplib.h (DOLLARS_IN_IDENTIFIERS): Remove.
	* cpplib.c (cpp_options_init): Ignore DOLLARS_IN_IDENTIFIERS.
	(parse_name): Diagnose $ in identifier if pedantic.
	(cpp_handle_options): -traditional no longer messes with
	dollars_in_ident.
	* i386/dgux.h, m68k/apollo68.h (DOLLARS_IN_IDENTIFIERS): Remove.
	* m88k.h, mips.h, nextstep.h, pa.h (DOLLARS_IN_IDENTIFIERS): Remove.
	* vax/ultrix.h, vax/vms.h (DOLLARS_IN_IDENTIFIERS): Remove.
	* convex.h (OVERRIDE_OPTIONS): Don't need to set
	dollars_in_ident any more, since -ansi doesn't change it.

Wed Oct  9 07:35:47 1996  Doug Evans  <dje@cygnus.com>

	* Allow prefix attributes in more places.
	* c-parse.in: Update number of shift/reduce conflicts.
	({typed_declspecs,reserved_declspecs,declmods}_no_prefix_attr): New.
	(current_declspecs): Initialize to NULL_TREE.
	(fndef): Pass current_declspecs, not $1, to start_function.
	(old_style_parm_decls): Renamed from xdecls.
	(datadecl, declmods): Add references to new rules.
	(setspecs): Call split_specs_attrs.
	(absdcl1): Remove case with setattrs.
	* c-common.c (split_specs_attrs): New function.

Wed Oct  9 05:48:43 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* sdbout.c: Include defaults.h.
	* Makefile.in (sdbout.o): Make dependency list match included files.

	* fold-const.c (range_test): Function deleted.
	(range_binop, make_range, build_range_check): New functions.
	(merge_ranges, fold_range_test): Likewise.
	(fold_truthop): No longer call range_test.
	(fold, case TRUTH_{AND,OR}{,IF}_EXPR): Call fold_range_test.

Tue Oct  8 22:03:32 1996  Torbjorn Granlund  <tege@nada.kth.se>

	* configure: Set cpu_type for pyramid.

Tue Oct  8 21:54:04 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* final.c (final_start_function): Call dwarfout_begin_prologue.

	* dwarf2out.c (pubname_*, arange_*): New data for .debug_pubnames
 	and .debug_aranges sections.
	(add_pubname): New fn.
	(size_of_pubnames): Reimplement.
	(output_pubnames): Likewise.
	(add_arange): New fn.
	(size_of_aranges): Include function sections.
	(output_aranges): Likewise.
	(gen_variable_die): Call add_pubname.
	(add_name_and_src_coords_attributes): Use DECL_ASSEMBLER_NAME for now.
	(decl_start_label): Renamed from function_start_label.
	(gen_subprogram_die): If weak or one_only, use a local label for 
	AT_low_pc.  Call add_pubname and add_arange.
	(dwarfout_begin_prologue): New fn.  Start up FDE here. 
	(dwarfout_begin_function): Not here.
	(get_AT): Split out.  Look in specification and abstract_origin DIEs.
	(get_AT_low_pc, get_AT_string, get_AT_flag, get_AT_unsigned, 
	get_AT_hi_pc): Use it.
	(dwarfout_finish): Variables can produce pubnames, too.

Tue Oct  8 19:35:40 1996  Torbjorn Granlund  <tege@nada.kth.se>

	* m88k/dgux.h (CPP_SPEC): Avoid newline in the string.

	* final.c (final): Update insn_current_address before calling
	final_scan_insn.

Tue Oct  8 17:52:02 1996  Jim Wilson  <wilson@cygnus.com>

	* unroll.c (unroll_loops): Set local_regno only if set_dominates_use
	returns true.
	(set_dominates_use): New function.

Tue Oct  8 16:01:37 1996  Doug Evans  <dje@cygnus.com>

	* c-typeck.c (decl_constant_value): Delete test for ! TREE_PUBLIC.

Tue Oct  8 10:36:44 1996  Jeffrey A Law  (law@cygnus.com)

	* pa.c (hppa_legitimize_address): Remove test code accidentally left
	in during last change.

Mon Oct  7 19:55:02 1996  Jim Wilson  <wilson@cygnus.com>

	* sched.c (schedule_block): Before scheduling, add code to make all
	call used regs not fixed or global live when we see a CALL_INSN.
	During scheduling, change existing code to use same test.

	* varasm.c (bss_section): Delete unused parameters.

Mon Oct  7 16:24:21 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* dwarf2.h: Add new SGI/MIPS attributes.

	* dwarf2out.c (*_separate_line_info_*): Parallel line number
 	information for functions defined in sections other than .text.
	(size_of_line_info): Support it.
	(output_line_info, dwarfout_line): Likewise.
	(gen_compile_unit_die): Don't add high/low_pc or stmt_list
 	attributes here.
	(dwarfout_finish): Add them here if appropriate.
	(remove_AT): Free removed attribute properly.
	(gen_type_die): Don't assume a nested type is complete.
	(dwarfout_finish): Don't emit line info if it would be empty.

	* dwarfout.c (output_block): Don't emit a DIE for a body block.
	(output_decls_for_scope): Don't increment next_block_number for the
 	outer block.
	(output_decl): Start from the outer block, not
 	the first inner block since there can be more than one in C++.
	(type_tag): Handle C++ TYPE_NAME.
	(output_type): Fix handling of TYPE_METHODS.
	(output_decl): Don't output a DIE for artificial typedefs.

Mon Oct  7 15:47:29 1996  Michael Meissner  <meissner@tiktok.cygnus.com>

	* rs6000.md (movdi define_splits): Fix previous change to work
	on both little and big endian hosts.

Sun Oct  6 16:52:34 1996  Jeffrey A Law  (law@cygnus.com)

	* pa.h (combinable_fsub): Don't return without a value.

Sun Oct  6 14:05:39 1996  Michael Meissner  <meissner@tiktok.cygnus.com>

	* rs6000.md (mov{df,di} define_splits): Use split_double to
	properly split CONST_DOUBLEs.
	(movdi): Likewise.

Sat Oct  5 08:43:14 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* i386/cygwin32.h (LIB_SPEC): Add support for -mwindows.
	Always pass -lkernel32.
	(LIBGCC_SPEC): Don't delete.
	(STARTFILE_SPEC): Remove always-true conditionalization.
	(LONG_DOUBLE_TYPE_SIZE): Use default.

Fri Oct  4 17:22:53 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* toplev.c (rest_of_type_compilation): Don't emit DWARF for member
 	types of a type we haven't emitted yet.
	(compile_file): Still emit DWARF for pending tagged types.

	* final.c (final_scan_insn): Do emit DWARF labels for level 1 blocks.

	* dwarf2out.c (gen_subprogram_die): Start from the outer block, not
 	the first inner block since there can be more than one in C++.
	(gen_lexical_block_die): Keep track of the block depth.
	(gen_block_die): Don't emit a DIE for a body block.
	(gen_inlined_subroutine_die): Don't emit anything for an
	abstract instance.
	(decls_for_scope): Don't increment next_block_number for the
 	outer block.

Fri Oct  4 15:27:55 1996  J"orn Rennecke <amylaar@cygnus.co.uk>

	* sh.h (PRESERVE_DEATH_INFO_REGNO_P): Define.

	* sh.c (sfunc_uses_reg): New function.
	(noncall_uses_reg, machine_dependent_reorg, final_prescan_insn):
	Handle special functions like function calls for purposes of relaxing.
	(noncall_uses_reg): Added some missing cases of registers
	being used in non-call instructions.

Fri Oct  4 10:51:40 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* dwarf2out.c: Tear out backchaining brain damage.
	(remove_AT, remove_children): New functions.
	(modified_type_die): Call gen_type_die instead of backchaining.
	(gen_subprogram_die): Don't generate a new specification DIE for 
	member functions defined in the class; use the declaration DIE instead.
	(gen_struct_or_union_type_die): Support DW_AT_declaration.
	(gen_type_die): Don't set TREE_ASM_WRITTEN on incomplete structs.
	(gen_decl_die): Revert previous change; it's much simpler to emit 
	the class from rest_of_type_compilation.

Fri Oct  4 09:54:21 1996  J"orn Rennecke <amylaar@cygnus.co.uk>

	* Make sure we have enough registers for the insns we recognize.
	* i386.h (flag_omit_frame_pointer, outer_function_chain): Declare.
	(current_function_calls_alloca): Likewise
	(rtx_equal_function_value_matters): Likewise
	(N_REGS_USED, N_ALLOCATABLE_REGISTERS): Define.

	* i386.md (adddi3_1, subdi3_1): Insns renamed from adddi3 and subdi3;
	added missing earlyclobbers.
	(adddi3_1): Removed duplicates from commutativity.
	(adddi3, subdi3): New define_expands.
	(movsf, movsf_mem, movsf_normal, movdf, movdf_mem , movdf_mem+1): Take
	number of used vs. available registers into account.
	(movxf, movxf_mem, movxf_mem+1, addsidi3_1, addsidi3_2): Likewise.
	(adddi3_1, subsidi3, subdi3_1): Likewise.
	(addsidi3_1, addsidi3_2, subsidi3): Need no generate function.

	* i386.c (asm_output_function_prefix): Don't use
	ASM_DECLARE_FUNCTION_NAME if it is not defined.

Fri Oct  4 07:01:55 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* stor-layout.c (layout_decl): Don't turn off DECL_BIT_FIELD
	if DECL's alignment is less than its type.

Thu Oct  3 19:42:30 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* toplev.c (rest_of_type_compilation): Also do this for DWARF.
	(compile_file): Don't try to write out DWARF for vars with no RTL.

Thu Oct  3 18:31:28 1996  Doug Evans  <dje@cygnus.com>

	* ginclude/{stdarg.h,varargs.h}: Use #include "", not #include <>.

Wed Oct  2 17:29:53 1996  Ian Lance Taylor  <ian@cygnus.com>

	* fixincludes: Add a hack to the big sed script to work around a
	bug in the sed implementation on HP/UX 10.20.

Wed Oct  2 16:53:56 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* dwarf2out.c (modified_type_die): Don't generate redundant DIEs.
	(gen_{array,pointer,reference,ptr_to_mbr}_type_die): Likewise.
	(gen_{subroutine,string,set}_type_die): Likewise.

	* dwarf2out.c: Undo text_end_label, add_src_coords changes.
	(addr_const_to_string): Fix typos.
	(decl_class_context, get_AT_unsigned): New functions.
	(gen_subprogram_die): Only emit src coords info for a specification
	if they changed.
	(gen_variable_die): Support DW_AT_declaration and DW_AT_specification.
	(gen_decl_die): Avoid generating redundant DIEs for member functions
	and variables.

Wed Oct  2 11:22:50 1996  Jeffrey A Law  (law@cygnus.com)

	* pa.h (EXTRA_CONSTRAINT): Loosen conditions for match of
	'Q' and 'T' while reload is running.
	* pa.c (hppa_legitimize_address): Rework to generate more
	indexed and scaled indexed addressing.
	* pa.md (scaled indexed store): Add define_splits to undo
	pessimizations created by hppa_legitimize_address for integer stores.

	* pa.c (remove_useless_addtr_insns): New function.
	(pa_reorg): Delete code to remove useless add,tr insns.
	Instead call remove_useless_addtr_insns.
	(output_function_prologue): Call remove_useless_addtr_insns
	to catch any add,tr insns created by reorg.

	* pa.c (secondary_reload_class): Remove duplicate/useless code.

	* pa.h (PARSE_LDD_OUTPUT): Handle output from hpux10.20 "chatr".

Tue Oct  1 17:23:32 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* dwarf2out.c (text_end_label): New static.
	(size_of_line_info): The final entry is smaller.
	(output_aranges): Use TEXT_SECTION instead of TEXT_BEGIN_LABEL and
 	text_end_label instead of TEXT_END_LABEL.
	(gen_compile_unit_die): Likewise.
	(output_line_info): Likewise.  Use a fixed advance for the last entry.
	(dwarfout_init): Don't output starting labels.
	(dwarfout_finish): Set up text_end_label.  Don't output ending labels.

	(add_pure_or_virtual_attribute): Don't say pure virtual for now.
	(type_tag): Handle C++ TYPE_NAME.
	(gen_formal_parameter_die): Support DW_AT_artificial.
	(gen_formal_types_die): Do emit the type for 'this'.
	(gen_member_die): Fix handling of TYPE_METHODS.
	(gen_decl_die): Do output a DIE for member function declarations.
	Don't output a DIE for artificial typedefs.

	(add_member_attribute): Remove, not in DWARF-II.
	(gen_array_type_die): Remove ref to add_member_attribute.
	(gen_set_type_die, gen_entry_point_die, gen_enumeration_type_die,
 	gen_subprogram_die, gen_variable_die, gen_field_die,
 	gen_pointer_type_die, gen_reference_type_die, gen_ptr_to_mbr_type_die,
 	gen_string_type_die, gen_struct_or_union_type_die,
 	gen_subroutine_type_die, gen_typedef_die): Likewise.

	(get_AT_flag): New fn.
	(add_src_coords_attributes): Split out...
	(add_name_and_src_coords_attributes): From here.
	(gen_subprogram_die): Support DW_AT_declaration and 
	DW_AT_specification. 

	(gen_compile_unit_die): Don't emit full pathname for source file; 
	comment claimed that SGI required it, but they don't emit it either.
	Append -g to producer rather than replacing it.

Tue Oct  1 14:19:23 1996  Jim Wilson  <wilson@cygnus.com>

	* gcc.c (used_arg): When call xmalloc for mswitches, pass 1 if
	n_switches is zero.

Mon Sep 30 17:46:26 1996  J"orn Rennecke <amylaar@cygnus.co.uk>

	* sh.c (gen_shl_and, gen_shl_sext): Use gen_lowpart to
	generate rtx in the appropriate mode for zero/sign-extension.
	Don't generate a zero bit shift.
	(gen_shl_sext) Directly use gen_ashift instead of gen_ashrsi3.

Mon Sep 30 17:17:56 1996  Ian Lance Taylor  <ian@cygnus.com>

	* fixinc.svr4: In math.h, redefine exception to __math_exception
	for C++, to avoid conflict with <exception>.
	* fixincludes: Likewise.
	Fix check for class in math.h to not match fp_class.

Mon Sep 30 17:15:19 1996  Jim Wilson  <wilson@cygnus.com>

	* iris6.h (ASM_SPEC): Add -w.
	(STARTFILE_SPEC): Add mips3 to n32 pathnames.
	Add -L/usr/lib32/mips for n32 cases.
	(ENDFILE_SPEC): Add mips3 to n32 pathnames.

Mon Sep 30 13:20:31 1996  Ian Lance Taylor  <ian@cygnus.com>

	* genopinit.c (gen_insn): Look through the modes in reverse order,
	to avoid stopping early on CC when EXTRA_CC_MODES is used.

	* fixincludes: Add extern "C" to <sys/mman.h> on HP/UX.

Sun Sep 29 12:39:18 1996  Michael Meissner  <meissner@tiktok.cygnus.com>

	* c-typeck.c (pointer_diff): Do not do default conversions when
	doing the minus expression, in case restype is a short type.

Sun Sep 29 11:22:10 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* tree.c (build_complex): Add new argument, TYPE.
	* tree.h (build_complex): Likewise.
	* c-lex.c (yylex): Add new arg, TYPE, to call to build_complex.
	* fold-const.c (const_binop): Likewise.
	(fold, case CONJ_EXPR, COMPLEX_EXPR): Likewise.
	* varasm.c (copy_constant, case COMPLEX_CST): Likewise.
	* expr.c (expand_expr, case COMPONENT_REF): Don't try to directly
	load a complex.
	* recog.c (register_operand): Don't reject subreg of complex mode.
	* emit-rtl.c (mark_user_reg): New function.
	* function.c (assign_parms): Use it.
	* stmt.c (expand_decl): Likewise, and simplify code.

	* tree.c (contains_placeholder): Return 1 for PLACEHOLDER_EXPR.

	* expr.c (store_expr): memset/bzero gets ptr_mode, not Pmode.

	* stmt.c (expand_asm_operands): Fix errors in previous patches.

	* x-linux: Simplify, but ensure headers aren't changed.

	* getpwd.c: No longer include direct.h for _WIN32.

	* configure (i[3456]86-*-isc*): Remove bogus echo.
	(m68k-apple-aux*): a-ux.h renamed from aux.h.
	(CC): Escape "$" char in "no-symlink" case for bash/cygwin32 bug.

	* Makefile.in (installdirs): Renamed from install-dir.
	Create $(prefix) and $(exec_prefix) if doesn't exist.
	(install-float): Reflect new name for installdirs.
	(install-{common,info,man,libgcc,multilib,libobjc}): Likewise.
	(install-{include-dir,assert-h,collect2}): Likewise.

	* reload1.c (gen_reload): Handle SUBREG in PLUS specially too.
	Change calls to emit_move_insn to recursive calls.

	* stmt.c (fixup_gotos): When running undefined labels, if no cleanup
	actions for this block, don't clear BEFORE_JUMP.

Fri Sep 27 13:48:21 1996  Michael Meissner  <meissner@tiktok.cygnus.com>

	* c-decl.c (init_decl_processing): Create short int types before
	creating size_t in case a machine description needs to use
	unsigned short for size_t.

Fri Sep 27 12:28:54 1996  Stan Cox  <coxs@dg-rtp.dg.com>

        * gcc.c (do_spec_1): Allow -A in %[Spec].
	
	* i386.h (CPP_CPU_SPEC): New. Added for defining the submodel.

	* i386.c (asm_output_function_prefix, function_prologue,
	ix86_expand_prologue): Make the routine that sets the GOT (when pic
	is enabled) a function, to assist debugging.

	* i386.md (gen_prologue_get_pc): Call the function created above.
	(divdf3): Added. 
	
	* i386/dgux.h (CPP_PREDEFINES, CPP_SPEC): Reference CPP_CPU_SPEC.
	Use svr4 assembler directive .backalign instead of .align.  
	(align to x bytes if it takes no more than y bytes to do so.)

	* i386/{aix386ng.h,dgux.h} (CPP_SPEC): Use %[cpp_cpu].
	* i386/{freebsd-elf,gas,isc,linux-aout}.h: Likewise.
	* i386/{linux-oldld,linux,osfelf,osfrose,sco,sco4}.h: Likewise.
	* i386/{sco4dbx,sco5,sol2,sysv3}.h: Likewise.

Thu Sep 26 17:58:34 1996  Torbjorn Granlund  <tege@matematik.su.se>

	* m68k.md (mulsidi3 matcher): Change predicate const_int_operand
	to const_sint32_operand.  Get rid of bogus range condition.

Thu Sep 26 17:12:00 1996  Jim Wilson  <wilson@cygnus.com>

	* Makefile.in (stmp-int-hdrs): Don't cd to srcdir before copying
	header files to objdir.

Wed Sep 25 21:22:57 1996  Jeffrey A Law  (law@cygnus.com)

	* h8300.h (FIRST_PSEUDO_REGISTER, ARG_POINTER_REGNUM): Bump up by one.
	(FIXED_REGISTERS): Add entry for MAC register.
	(CALL_USED_REGISTERS, REG_ALLOC_ORDER): Likewise.
	(HARD_REGNO_NREGS): Handle MAC register.
	(HARD_REGNO_MODE_OK, REGNO_OK_FOR_BASE_P, REGISTER_NAMES): Likewise.
	(enum reg_class): New MAC_REGS register class.
	(REG_CLASS_CONTENTS, REGNO_REG_CLASS): Corresponding changes.
	(REG_CLASS_FROM_LETTER): Likewise.
	(REGISTER_MOVE_COST): Make copies to/from MAC register expenseive.
	(CONDITIONAL_REGISTER_USAGE): Define.
	* h8300.md (movsi_h8300hs): Renamed from movsi_h8300h.
	Handle moves to/from the MAC register.
	(mac): Two new patterns to use the mac instruction.

	* h8300.c (notice_update_cc): Fix CC_SET case.
	(restore_compare_p): Remove unused function.
	* h8300.md: Handle "set" vs "set_zn_c0" correctly.
	(bCC patterns): No longer need to call restore_compare_p.

	* h8300.c (get_shift_alg): Fix HImode ASHIFTRT by 13 or 14 bits.

Wed Sep 25 18:52:19 1996  Joern Rennecke <amylaar@cygnus.co.uk>	

	* sh.md (insv): New pattern.

Wed Sep 25 16:47:26 1996  Doug Evans  <dje@seba.cygnus.com>

	* sparc/t-sunos41 (MULTILIB_{OPTIONS,DIRNAMES,MATCHES}): Create
	multilib versions of -fpic and -fPIC.
	(TARGET_LIBGCC2_CFLAGS): Comment out.

	* sparc.c (print_operand): Handle new codes H/L.
	* sparc.md (lo_sum_di_sp32): Add little endian support.
	(adddi3_sp32,subdi3_sp32,mulsidi3_sp32,const_mulsidi3): Likewise.
	(umulsidi3_sp32,const_umulsidi3,smacdi,umacdi,anddi3_sp32): Likewise.
	(iordi3_sp32,xordi3_sp32,negdi2_sp32): Likewise.

Wed Sep 25 15:32:35 1996  Jim Wilson  <wilson@cygnus.com>

	* expmed.c (store_bit_field): Don't make flag_force_mem disable insv
	for memory operands.
	
	* function.c (instantiate_decl): Always store addr back into x.

Tue Sep 24 19:37:00 1996  Jim Wilson  <wilson@cygnus.com>

	* reload.c (push_secondary_reload): Do strip paradoxical SUBREG
	even if reload_class is CLASS_CANNOT_CHANGE_SIZE.  Change reload_mode
	to mode in SECONDARY_MEMORY_NEEDED and get_secondary_mem calls.

	* reload1.c (emit_reload_insns): For output part of RELOAD_OTHER,
	emit after RELOAD_FOR_OUTPUT, in reverse order of reload number,
	but not separately.

Tue Sep 24 18:13:07 1996  Michael Meissner  <meissner@tiktok.cygnus.com>

	* expr.c (emit_group_load): Allow target to be smaller than source.

Tue Sep 24 17:40:39 1996  Doug Evans  <dje@cygnus.com>

	* m68k/a-ux.h: Renamed from aux.h because of MSDOS.

Tue Sep 24 08:33:53 1996  David S. Miller  (davem@caip.rutgers.edu)

	* tree.c (copy_node): Fix error in last change.

Tue Sep 24 08:29:03 1996  James G. Smith  <jsmith@cygnus.co.uk>

	* gcc.c (used_arg): Fix multilib_matches parsing to not corrupt
	entry parameter.

Tue Sep 24 08:22:18 1996  J"orn Rennecke <amylaar@cygnus.co.uk>

	* loop.c (get_condition): Use rtx_equal_p to compare rtx.

Tue Sep 24 08:14:01 1996  Christian Iseli  <Christian.Iseli@lslsun.epfl.ch>

	* integrate.c (expand_inline_function): Avoid creating paradoxical
	subreg wider than BITS_PER_WORD as inlined function result.

Tue Sep 24 08:00:15 1996  Paul Eggert  <eggert@twinsun.com>

	* cccp.c (struct directive, directive_table, handle_directive):
	pass_thru now 1 for #define and 2 for #pragma.
	(handle_directive): When deciding whether to suppress comment at end
	of directive, ignore tabs and spaces after comment.  Remove redundant
	limit test.  With -dD -C, copy comment when isolating definition.
	(skip_to_end_of_comment): With -C, don't copy newline at end
	of C++ comment.

	* fixinc.ptx, fixinc.svr4, fixincludes: Insert newlines just before
	end of 'sed' command strings if last 'sed' command is 'a' or 'i'.

Tue Sep 24 07:28:58 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* toplev.c (PREFERRED_DEBUGGING_TYPE): If no debugging formats are
	supported, set to NO_DEBUG.
	(main): Don't do setting of PREFERRED_DEBUGGING_TYPE here.

Mon Sep 23 22:45:15 1996  Sean McNeil  <sean@mcneil.com>

	* rs6000/vxppc.h, sparc/vxsim.h: New files.
	* configure (powerpc-*-vxworks*, sparc-*-vxsim*): New targets.
	* objc/objc.h (BOOL): Define BOOL as int for VxWorks.

Mon Sep 23 21:23:27 1996  Klaus K"ampf  (kkaempf@progis.de)

	* explow.c (promote_mode, case REFERENCE_TYPE): New case.

Mon Sep 23 21:15:43 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* c-decl.c (finish_struct): Check PCC_BITFIELD_TYPE_MATTERS value.

	* dbxout.c (dbxout_symbol): Fix forgotten case in last change:
	check DECL_ARTIFICIAL also when using the short cut way.

Mon Sep 23 15:55:24 1996  David S. Miller  (davem@caip.rutgers.edu)

	* tree.c (copy_node): Abort if don't know size of node.

	* tree.c (build1): Clean up initialization of OBSTACK.

Mon Sep 23 15:35:33 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* Makefile.in (stmp-multilib): Depend on $(LANG_LIB2FUNCS).

	* dbxout.c (dbxout_function): Don't check DECL_SECTION_NAME before
	calling dbxout_function_end.

Mon Sep 23 14:41:12 1996  J"orn Rennecke <amylaar@cygnus.co.uk>

	* combine.c (can_combine_p): Even if SMALL_REGISTER_CLASSES,
	know lifetime not extended if all_adjacent set.

	* stmt.c (expand_asm_operands): Handle '+' constraint.
	* cse.c (fold_rtx): Fold inside ASM_OPERANDS.

	* expr.c (expand_increment): If postincrement for MEM can't use add
	directly, load address in reg and enqueue increment and store of reg.

	* loop.c (check_dbra_loop): Don't assume label must be second part of
	if_then_else in condjump.

        * jump.c (jump_optimize): In no-nop move deletion, don't test
	PRESERVE_DEATH_INFO_REGNO_P; instead test if optimization is performed.
	Check for REG_UNUSED note on to-be deleted insn before searching for
	preceding instruction to delete note from.
	If PRESERVE_DEATH_INFO_REGNO_P is true for SREG, replace INSN with USE.

	* reload1.c (reload): Initialize the previous_offset fields
	in reg_eliminate before calling setup_save_areas.

	* reload1.c (emit_reload_insns): Declare and set this_reload_insn.

	* expr.c (var_rtx): New function.
	(expand_expr, case COND_EXPR): Also use target if same as singleton.

Mon Sep 23 14:22:34 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* recog.c (constrain_operands): Don't test clobbered constraints.

	* reload1.c (emit_reload_insns): For output part of RELOAD_OTHER,
	put in front of anything previous for that output, but not separately.

Sun Sep 22 21:06:46 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* c-common.c (decl_attribtes, case A_SECTION): Allow for static
	local variable.

Sun Sep 22 11:30:27 1996  Christian Iseli  (christian.iseli@di.epfl.ch)

	* expr.c (convert_move): Replace explicit checks for FP extend ops
	with use of can_extend_p.
	Add missing tests for FP trunc operations.

Sun Sep 22 11:20:02 1996  Pat Rankin  <rankin@eql.caltech.edu>

	* dwarfout.c (DWARF_VERSION): Define as 1 if not already defined.
	* dwarf2out.c (DWARF_VERSION): Likewise.

Sun Sep 22 11:12:20 1996  Joern Rennecke <amylaar@cygnus.co.uk>

        * c-decl.c (pushdecl): Check new declaration actually conflicts before
	warning about implicit external vs. static declarations.

	* loop.c (combine_givs): Improve combining DEST_REG giv with only use.

Sun Sep 22 10:50:03 1996  Scott Christley <scottc@net-community.com>

	* Create consistent mechanism for memory allocation and release
	so that garbage collection routines can be easily subsititued
	for the ANSI standard malloc, realloc, free, etc.
	* objc/archive.c: Replace use of __objc_xmalloc and free 
	with objc_malloc and objc_free.
	* objc/hash.c: Replace use of __objc_xcalloc and free
	with objc_calloc and objc_free.
	* objc/init.c: Replace use of free with objc_free.
	* objc/misc.c (objc_malloc): Renamed from __objc_xmalloc.
	(objc_realloc): Renamed from __objc_realloc.
	(objc_atomic_malloc, objc_valloc): New functions.
	(objc_calloc): Renamed from __objc_calloc.
	(objc_free): New function.
	* objc/objc-api.h (_objc_malloc): New function pointer.
	(_objc_atomic_malloc, _objc_valloc): Likewise.
	(_objc_realloc, _objc_calloc, _objc_free): Likewise
	* objc/objc-list.h: Replace use of __obj_xmalloc and free
	with objc_malloc and objc_free.
	* objc/objects.c: Likewise.
	* objc/sarray.c: Replace use of __objc_xmalloc and free
	with objc_malloc and objc_free.
	* objc/sarray.h (__objc_xmalloc, __objc_xrealloc): Delete.
	* objc/selector.c: Replace use of __objc_xcalloc, __objc_xrealloc,
 	and __objc_xmalloc with objc_calloc, objc_realloc, and objc_malloc.
	* objc/thr-decosf1.c: Replace use of __objc_xmalloc and free
	with objc_malloc and objc_free.
	* objc/thr-irix.c, objc/thr-mach.c, objc/thr-os2.c: Likewise.
	* objc/thr-posix.c, objc/thr-pthreads, objc/thr-single: Likewise.
	* objc/thr-solaris.c, objc/thr-win32.c, objc/thr.c: Likewise.

Sun Sep 22 05:26:01 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* configure: Set up LANG_LIB2FUNCS and LANG_EXTRA_HEADERS.
	* Makefile.in (libgcc2.a): Include LANG_LIB2FUNCS.
	(USER_H): Add LANG_EXTRA_HEADERS.
	(LANG_LIB2FUNCS): New macro.
	(LANG_EXTRA_HEADERS): New macro.
	(stmp-int-hdrs): Don't hardwire ginclude.
	(stamp-objlist): Don't depend on Makefile.

Sat Sep 21 18:00:10 1996  Stephen L Moshier  (moshier@world.std.com)

	* alpha.md (alpha_swapped_comparison_operator pattern): Fix asm
	operand typo in last change.

Sat Sep 21 07:11:51 1996  J"orn Rennecke <amylaar@cygnus.co.uk>

	* defaults.h (ASM_OUTPUT_LABELREF): Provide default definition
	if not already defined.
	* 1750a.h (USER_LABEL_PREFIX): Define instead of ASM_OUTPUT_LABELREF.
	* a29k.h, alpha.h, convex.h, dsp16xx.h, elxsi.h, fx80.h: Likewise.
	* gmicro.h, h8300.h, i386/sun386.h, i860.h, i960.h, ns32k.h: Likewise.
	* pdp11.h, pyr.h, romp.h, sh.h, sparc.h, spur.h, tahoe.h: Likewise.
	* vax.h, we32k.h: Likewise.
	* i386/att.h (USER_LABEL_PREFIX): Redefine, not ASM_OUTPUT_LABELREF.
	* i386/bsd.h, i386/lynx.h, i386/sco5.h, i860/fx2800.h: Likewise.
	* m68k/3b1.h, m68k/mot3300.h, m68k/tower-as.h, m68k/tower.h: Likewise.
	* ptx4.h, sparc/pbd.h, svr3.h, svr4.h: Likewise.
	* i386/osfrose.h, m88k.h (USER_LABEL_PREFIX): Redefine.
	* nextstep.h (USER_LABEL_PREFIX): Redefine.
	(ASM_OUTPUT_LABELREF) Use USER_LABEL_PREFIX.
	* arm/aout.h, mips.h (ASM_OUTPUT_LABELREF): Delete.
	* rs6000/lynx.h (USER_LABEL_PREFIX): Undefine.
	* rs6000.h, rs6000/win-nt.h (USER_LABEL_PREFIX): Define.

Thu Sep 19 00:05:53 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* configure: Move i[3456]86-*-gnu* case after linux and don't
 	treat linux-gnu like other gnu systems.

Wed Sep 18 20:51:09 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* cplus-dem.c (demangle_template): Fix handling of address args.
	(gnu_special): Handle type_info stuff.

Wed Sep 18 17:57:55 1996  Patrik Lantto (patrik@opq.se)

	* jump.c (jump_optimize): Insert conditional move after jump
	insn instead of before. 

Wed Sep 18 17:33:36 1996  Richard Henderson  <rth@tamu.edu>

	* alpha.h (PREDICATE_CODES): Add alpha_swapped_comparison_operator.
	* alpha.c (alpha_swapped_comparison_operator): New function.
	(print_operand): Support unsigned codes for %D, %c, and %d.
	* alpha.md: Add pattern for b%c with swapped comparisons with 0.
	Delete three unnamed cmp patterns that are strict subsets of it.

	* alpha.c (alpha_emit_set_long_const): Save one instruction
	when -O2 and high word == low word.

Tue Sep 17 22:46:15 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* i386/unix.h (ASM_OUTPUT_MI_THUNK): Handle functions
	returning an aggregate.

	* varasm.c (supports_one_only): New function.
	(make_decl_one_only): Likewise.
	* svr4.h (MAKE_DECL_ONE_ONLY): Define.
	* tree.h (DECL_ONE_ONLY): New macro.

	* varasm.c (assemble_variable): Fix setting of
 	first_global_object_name.
	(assemble_start_function): Likewise.

Tue Sep 17 19:42:39 1996  Doug Evans  <dje@wabamun.cygnus.com>

	* i386/t-cygwin32 (winnt.o): Compile properly.

Tue Sep 17 15:47:20 1996  Ian Lance Taylor  <ian@cygnus.com>

	* Add support for R5000, and finish MIPS4 support.
	* mips.h (enum processor_type): Add PROCESSOR_R5000.
	(gen_conditional_move): Declare.
	(CONDITIONAL_REGISTER_USAGE): Mark ST_REGS as fixed if not
	HARD_FLOAT, or if mips_isa < 4.
	(FIRST_PSEUDO_REGISTER): Change to 76.
	(FIXED_REGISTERS): Add condition code registers.
	(CALL_USED_REGISTERS): Likewise.
	(ST_REG_LAST): Change to 74.
	(RAP_REG_NUM): Change to 75.
	(ST_REG_P): Look for any condition code register.
	(REG_CLASS_CONTENTS): Update for new condition code registers.
	(RTX_COSTS): Add cases for R5000.
	(REGISTER_MOVE_COST): Add cases for condition code registers.
	(PREDICATE_CODES): Add "const_float_1_operand".
	(EXTRA_CC_{MODES,NAME}, SELECT_CC_MODE): Remove.
	(REGISTER_NAMES): Add entries for new condition code registers.
	(DEBUG_REGISTER_NAMES): Likewise.
	(ADDITIONAL_REGISTER_NAMES): Remove FPSW_REGNUM.
	* mips.md (cpu attribute): Add R5000.
	(function units): Add cases for the R5000.
	({madd,msub,nmadd,nmsub}.d): Only available if TARGET_DOUBLE_FLOAT.
	(recip.d, recip.s, rsqrt.d, rsqrt.s): New define_insn patterns.
	(movcc): New pattern to move condition code values.
	(reload_incc, reload_out_cc): New define_expand patterns.
	(lwxc1, ldxc1, swxc1, sdxc1): Several new define_insn patterns.
	(various): Replace CC_FP with CC.
	(branch_fp_ne, branch_fp_eq): Match any condition code register.
	(branch_fp_ne_rev, branch_fp_eq_rev): Remove.
	(seq_df, slt_df, sle_df): Match any condition code register.
	(sgt_df, sge_df, seq_sf, slt_sf, sle_sf, sgt_sf, sge_sf): Likewise.
	(sne_df, sne_sf): Remove.
	(FP conditional moves): Match any condition code register.
	Require TARGET_HARD_FLOAT and, if appropriate, TARGET_DOUBLE_FLOAT.
	(movsicc): Just call gen_conditional_move.
	(movdicc, movsfcc, movdfcc): New define_expand patterns.
	* mips.c (mips_reg_names): Add condition code registers.
	(mips_sw_reg_names, mips_regno_to_class): Likewise.
	(const_float_1_operand): New function.
	(mips_move_1word): Treat CCmode as SImode.  Handle move from
	ST_REG to GR_REG if mips_isa >= 4.  Only permit move from GR_REG
	to ST_REG is mips_isa < 4.
	(gen_conditional_branch): Rewrite.  Just use CCmode, not extra
	condition modes.
	(gen_conditional_move): New function.
	(override_options): Recognize vr5000.  Look for just CCmode, not
	extra condition modes.  If mips_isa >= 4, permit CCmode in GR_REGS
	and FP_REGS.
	(print_operand): Handle %Z.
	(mips_secondary_reload_class): Require a data register to copy a
	value out of a condition code register.  Require a floating point
	register to copy a value into a condition code register.

Tue Sep 17 15:10:29 1996  Joern Rennecke <amylaar@cygnus.co.uk>

	* sh.md: New define_splits to recombine output from LEGITIMIZE_ADDRESS.
	* sh.h (LEGITIMIZE_ADDRESS): Typo fixes (x -> X).

Mon Sep 16 23:00:35 1996  Jim Wilson  <wilson@cygnus.com>

	* configure (build_broken_install): Renamed from host_broken_install.
	Set from build not host.
	(build_install_headers): Renamed from host_install_headers.  Set from
	build not host.

Mon Sep 16 22:38:55 1996  Stu Grossman  (grossman@critters.cygnus.com)

	* configure (m68k-*-coff*): Use dbx debug format by default.
	* gcc.c (link_command_spec): Move -T to end of link command line.
	* m68k/m68kemb.h (LINK_SPEC, SUBTARTGET_SWITCHES): Delete.
	(LIB_SPEC): Define to just -lc.
	(STARTFILE_SPEC): Define to empty.

Mon Sep 16 13:12:27 1996  J"orn Rennecke <amylaar@cygnus.co.uk>

	* sh.c (ext_shift_insns, ext_shift_amounts): New arrays.
	(gen_ashift_hi, gen_shifty_hi_op, shl_and_kind): New functions.
	(rtx_equal_function_value_matters): Declare.
	(shl_and_length, shl_and_src_length, gen_shl_and): New functions.
	(shl_sext_kind, shl_sext_length, gen_shl_sext): Likewise.
	* sh.md (ashlhi3_k, lshrhi3_m): New patterns.
	(lshrhi3, shl_sext_ext, shl_sext_sub):
	New insn patterns with matching define_split.
	(and_shl_scratch): Likewise, but also with unnamed variants.

Sat Sep 14 17:05:07 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* gcc.c (convert_filename): Don't start looking for '.' until
	after last directory separator.

	* i386.md (clrstrsi): Correct check for constant size.

	* Based on code by sac@cygnus.com.
	* i386/cygwin32.h (CHECK_STACK_LIMIT): Make consistent with MD file.
	* i386.c ({function,ix86_expand}_prologue): Use __alloca to allocate
	stack if desired and beyond CHECK_STACK_LIMIT in size.
	* i386.h ({MASK,TARGET}_STACK_PROBE): New macros.
	(TARGET_SWITCHES): Add -mstack-arg-probe.
	* i386.md (allocate_stack{,_worker}): New patterns.

Fri Sep 13 18:23:18 1996  Joel Sherrill <joel@OARcorp.com>

	* sparc/lb1spc.asm (.div, .rem): Fixed typo so sign is returned
	correctly.  TOPBITS was 2 and should have been 4.

Thu Sep 12 21:51:56 1996  Jim Wilson  <wilson@cygnus.com>

	* mips.md (call_value_multiple_internal0): Change from define_insn to
	define_expand.

Thu Sep 12 19:22:14 1996  Doug Evans  <dje@seba.cygnus.com>

	* sparc.md (move_pic_label_si): Operand one is label_ref now.
	* sparc.c (emit_move_sequence): Pass label_ref to
	gen_move_pic_label_si to not lose flags.

Wed Sep 11 12:10:08 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* Makefile.in (GCC_PASSES): Add $(exeext) to names.
	(FLAGS_TO_PASS): Add CLIB.
	(c-pragma.o): Add dependencies on except.h, function.h, defaults.h.

Tue Sep 10 22:25:03 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* configure (i[3456]86-*-cygwin32): Use xm-cygwin32.h and xm-i386.h.
	Set fixincludes to Makefile.in and objc_thread_file to win32.
	* i386/xm-cywin32.h: Don't include xm-i386.h.
	* i386/x-cygwin32, rs6000/x-cygwin32 (STMP_FIXPROTO, exeext): New defs.

	* gcc.c (HAVE_EXECUTABLE_SUFFIX): New macro.
	(convert_filename): New function.
	(process_command, case 'o'): Call it.
	(process_command, default case): Likewise; delete old code.

Tue Sep 10 21:08:43 1996  Torbjorn Granlund  <tege@albert.gnu.ai.mit.edu>

	* i386.md (decrement_and_branch_until_zero matcher): Fix typo.

Tue Sep 10 19:04:19 1996  Jim Wilson  <wilson@cygnus.com>

	* mips.c (mips_move_2words): Rewrite 32 bit shifts as 16 bit shifts.

Tue Sep 10 10:39:07 1996  Jeffrey A Law  (law@cygnus.com)
	
	* pa/pa-gas.h (DBX_DEBUGGING_INFO): Remove all #define
	and #undef statements related to debugging information.
	* pa/pa-hpux.h, pa-hpux7.h: Likewise
	* pa.c (override_options): Disable "-g" and issue a warning
	if it's used when !TARGET_GAS.

Mon Sep  9 17:57:49 1996  Doug Evans  <dje@wabamun.cygnus.com>

	* sparc.h ({MASK,TARGET}_FPU_SET): Define.
	(TARGET_SWITCHES): Record if -m{,no-}fpu passed.
	* sparc.c (sparc_override_options): Don't clobber explicit
	-m{,no-}fpu setting with cpu default.

Mon Sep  9 15:57:57 1996  Joel Sherrill  <joel@OARcorp.com>

        * configure (mips64orion-*-rtems*): New target.
        * mips/rtems64.h: New file.

Sat Sep  7 22:07:53 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* expr.c (store_field): If storing a record on big endian targets,
	set up so we store the high-order bits.
	(expand_expr, case COMPONENT_REF): Likewise for loads.

Thu Sep  5 14:59:47 1996  J"orn Rennecke <amylaar@cygnus.co.uk>

	* sh.h (LEGITIMIZE_ADDRESS): Define nonempty.

Thu Sep  5 10:43:36 1996  Jeffrey A Law  (law@cygnus.com)

	* pa.md (mov{si,di,sf}): Handle 'R' constraints as needed.

Wed Sep  4 17:13:28 1996  Bob Manson  <manson@charmed.cygnus.com>

	* except.c: (add_partial_entry): New routine.
	(expand_start_try_stmts): Moved from cp/except.c.
	(expand_start_all_catch): Move functionality of expand_end_try_stmts
	here.

Wed Sep  4 12:30:02 1996  Mike Stump  <mrs@cygnus.com>

	* except.c (emit_unwinder): Ensure CLOBBER and USE insns come last,
	if present.

Tue Sep  3 12:01:43 1996  Ian Lance Taylor  <ian@cygnus.com>

	* configure (sh-*-elf*): New target.
	* sh/elf.h: New file.

Fri Aug 30 17:52:26 1996  Jim Wilson  <wilson@cygnus.com>

	* dwarf2out.c (gen_formal_types_die): Delete extra argument from
	gen_type_die call.

Fri Aug 30 15:40:40 1996  James G. Smith  <jsmith@cygnus.co.uk>

	* mips/elf64.h: Allow MULTILIB_DEFAULTS to be defined
	before this file is included.

Fri Aug 30 15:00:06 1996  Stan Cox  <coxs@dg-rtp.dg.com>

	* i386.md: (movsicc,movhicc): Allow reload from memory.
	
	* i386.c (override_options): Don't thread the prologue if profiling.

Fri Aug 30 15:00:06 1996  James Hawtin  <cgjwh@sunrise.co.uk>
	
	* i386/t-sol2 (gcrt1.o): Added for profiling Solaris 2
	* i386/sol2.h (STARTFILE_SPEC): New.
	* i386/gmon-sol2.c, i386/sol2-gc1.asm: New files.
	
Thu Aug 29 22:08:03 1996  Jim Wilson  <wilson@cygnus.com>

	* except.c (add_eh_table_entry): Multiply realloc size by sizeof int.

Thu Aug 29 15:15:31 1996  Jeffrey A Law  (law@cygnus.com)

	* pa.md (fcmp patterns): Don't try to eliminate useless add,tr
	insns here.
	* pa.c (pa_reorg): Do elimination of useless add,tr insns here instead.
	(print_operand, case 'y'): Remove this code.

Wed Aug 28 16:19:34 1996  Doug Evans  <dje@cygnus.com>

	* toplev.c (print_single_switch): Ultrix fprintf returns 0 for success.

	* toplev.c (main): Rewrite -g parsing.

Mon Aug 26 16:15:49 1996  Fred Fish  <fnf@cygnus.com>

	* Makefile.in (objc-parse.y): Fix typo in name of temp file.

Mon Aug 26 14:08:37 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* function.c (mark_all_temps_used): Fix error in last change.

Sun Aug 25 22:27:19 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* function.c (mark_all_temps_used): New function.

Fri Aug 23 11:34:57 1996  Michael Meissner  <meissner@tiktok.cygnus.com>

	* rs6000/sysv4.h (SUBTARGET_OVERRIDE_OPTIONS): Fixes to make -fPIC
	really the same as -mrelocatable.
	(ASM_SPEC): Pass -K PIC to the assembler if -fpic/-fPIC.

	* rs6000/sol2.h (ASM_CPU_SPEC): Remove passing -K PIC to the
	assembler if -fpic/-fPIC.

	* bi-{arity,opcode,opname}.c (fancy_abort): Define, so that
	-Dabort=fancy_abort works again.

Thu Aug 22 11:39:34 1996  Michael Meissner  <meissner@tiktok.cygnus.com>

	* rs6000/t-ppcgas ({stmp,install}-crt): Only build and install the
	eabi ecrt[in].o object files in eabi multilib directories, only
	build and install the solaris scrt[in0].o object files in solaris
	directories.
	(MULTILIB_MATCHES): Remove matches for solaris, linux to other
	switches.

Tue Aug 20 18:49:55 1996  Michael Meissner  <meissner@tiktok.cygnus.com>

	* rs6000/sysv4.h (ASM_OUTPUT_SECTION_NAME): If -mrelocatable or
	-mrelocatable-lib, don't make read-only sections.

Mon Aug 19 18:42:13 1996  Doug Evans  <dje@cygnus.com>

	* sparc.h ({MASK,TARGET}_LITTLE_ENDIAN): Define.
	(LIBGCC2_WORDS_BIG_ENDIAN): Add little endian support.
	* sparc/sp64-elf.h ({CPP,ASM,LINK}_SPEC): Add little endian support.
	(SUBTARGET_SWITCHES): Recognize -m{big,little}-endian.
	({BYTES,WORDS}_BIG_ENDIAN): Likewise.
	* sparc/splet.h (SUBTARGET_SWITCHES): Recognize -m{big,little}-endian.
	({CPP,ASM,LINK}_SPEC): Add little endian support.
	({BYTES,WORDS}_BIG_ENDIAN): Likewise.
	* sparc/t-splet (MULTILIB_{OPTIONS,DIRNAMES}): Likewise.

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

Sat Aug 17 15:23:39 1996  Geoffrey Noer  <noer@cygnus.com>

	* i386/cygwin32.h (CPP_PREDEFINES): Define _WIN32, not WIN32.
	Define only __CYGWIN32__, not CYGWIN32 or __CYGWIN32.
	* rs6000/cygwin32.h (CPP_PREDEFINES): Likewise.
	* cccp.c (absolute_filename): Drive specifiers make the pathname
	absolute in cygwin32.
	* choose-temp.c: Delete !defined(_WIN32) condition when including
	sys/file.h (NO_SYS_FILE_H is still used).
	* gcc.c: Change ifndef _WIN32 to ifndef NO_SYS_FILE_H when deciding
	whether to include sys/file.h.
	(execute): -pipe is supported for cygwin32.
	* getopt.c: Change win32 test from WIN32 to _WIN32.
	* pexecute.c: Update test for win32 (&& ! cygwin32).
	* protoize.c: Likewise.
	(kill): Delete decl.
	* toplev.c: Update test for win32 (&& ! cygwin32).
	* ginclude/stdarg.h: Change __WIN32__ to _WIN32.
	* ginclude/varargs.h: Likewise.
	* ginclude/va-ppc.h: Likewise.

Fri Aug 16 16:02:09 1996  Michael Meissner  <meissner@tiktok.cygnus.com>

	* rs6000.c (rs6000_got_register): Make sure pic_offset_table_rtx
	allocated, even if current_function_uses_pic_offset_table set.

Fri Aug 16 15:56:04 1996  J. Kean Johnston  <hug@netcom.com>

	* i386/sco5.h (CLASS_LIKELY_SPILLED_P): Deleted.
	(STARTFILE_SPEC): Insert crtbegin.o in correct place, and correct
	versions of values-X?.o.
	(SWITCH_TAKES_ARG): Extend DEFAULT_SWITCH_TAKES_ARG, not replace.
	(CPP_SPEC): Add -Di386, and correctly include extra directories.
	Define HAVE_ATEXIT in ELF mode for global destructors.

Thu Aug 15 16:42:44 1996  Doug Evans  <dje@cygnus.com>

	* sparc.c (label_ref_operand): New function.
	(emit_move_sequence): Pass label_ref to gen_move_label_di to not
	lose flags.
	* sparc.md (move_label_di): Operand one is label_ref now.
	* genattrtab.c (write_test_expr): Allow label_ref in match_dup.

	* sys-protos.h (gethostid): Make return type `int' ifdef __alpha__.
	* gen-protos.c: Delete support for SYS_PROTO_OVERRIDES.
	* alpha.h (SYS_PROTO_OVERRIDES): Delete.

Thu Aug 15 17:36:09 1996  Mike Stump  <mrs@cygnus.com>

	* libgcc2.c (__throw): New routine.
	(__eh_pc): New data object for exception handling.

	* except.c (eh_saved_pc): New object so we can call
	assemble_external.
	(expand_internal_throw_indirect): Call assemble_external for __eh_pc.
	(end_eh_unwinder): Likewise.
	(init_eh): Initialize eh_saved_pc.

Thu Aug 15 13:02:42 1996  Mike Stump  <mrs@cygnus.com>

	* arm.h (RETURN_ADDR_RTX): Define.

	* expr.c (expand_builtin_return_addr): Fix order of parameters.

Wed Aug 14 19:48:00 1996  Torbjorn Granlund  <tege@spiff.gnu.ai.mit.edu>

	* stmt.c (expand_return): In code for doing scc with jumps,
	stick to default handling if we have corresponding scc pattern.

Wed Aug 14 10:31:28 1996  Jeffrey A Law  (law@cygnus.com)

	* pa.c (override_options): Treat TARGET_FAST_INDIRECT_CALLS
	just like TARGET_NO_SPACE_REGS.
	(output_millicode_call): Likewise.
	* pa.h (TARGET_FAST_INDIRECT_CALLS): Define.
	(TARGET_SWITCHES): Add "fast-indirect-calls".
	* pa.md (TARGET_FAST_INDIRECT_CALLS): Treat just like
	TARGET_NO_SPACE_REGS in various call/millicode call patterns.

	* pa.c (print_operand): Use the right comparison operator
	for reversed EQ and NE comparisons.

	* pa.h (OUTPUT_MI_THUNK): Define.

Wed Aug 14 11:40:49 1996  Michael Meissner  <meissner@tiktok.cygnus.com>

	* ginclude/va-ppc.h: Add Windows NT support.
	* ginclude/{varargs,stdarg}.h: For PowerPC Windows NT, include
	va-ppc.h, instead of using the default handling.

Tue Aug 13 18:30:10 1996  Ian Lance Taylor  <ian@cygnus.com>

	* fixincludes: Remove duplicate volatile from sig_atomic_t in AIX
	sys/signal.h

Tue Aug 13 16:51:37 1996  Jim Wilson  <wilson@cygnus.com>

	* i960-coff.h (LIB_SPEC): Undef.

	* sh.h (PROFILE_BEFORE_PROLOGUE): Define.

Tue Aug 13 11:36:02 1996  Michael Meissner  <meissner@tiktok.cygnus.com>

	* gcc.c (set_spec,process_command): Dump and load the compiler
	version number in the specs file.

	* rs6000.c (output_toc): Fix last change, so that it doesn't use
	an uninitialized variable if -mminimal-toc.
	(output_prolog): Increment probe_labelno after last use.

	* rs6000/t-ppcgas (MULTILIB_*): Build far fewer multilib
	libraries.  Build all libraries with -mrelocatable-lib and
	-mno-eabi.  Build special GNU/Linux and Solaris libraries.
	* rs6000/eabi{,aix,le}.h (MULTILIB_DEFAULTS): Adapt to changes in
	t-ppcgas.
	* rs6000/(linux,sol2,sysv4,sysv4le).h (MULTILIB_DEFAULTS): Likewise.

Tue Aug 13 11:36:02 1996  Jeffrey A Law  (law@cygnus.com)

	* rs6000.c (handle_mac_pragma): Initialize "psize".

Mon Aug 12 18:14:35 1996  Jim Wilson  <wilson@cygnus.com>

	* gcc.c (used_arg): Initialize cnt to zero.

Mon Aug 12 14:03:16 1996  Jim Wilson  <wilson@cygnus.com>

	From Mike Stump:
	* sh.c (regno_reg_class): Change entry 23 from NO_REGS to GENERAL_REGS.
	(initial_elimination_offset): New variable live_regs_mask.  Add
	code to handle RETURN_ADDRESS_POINTER_REGNUM.
	* sh.h (RAP_REG, RETURN_ADDRESS_POINTER_REGNUM): Define.
	(ELIMINABLE_REGS): Add RETURN_ADDRESS_POINTER_REGNUM support.
	(RETURN_ADDR_RTX): Define.
	(REGISTER_NAMES): Add rap.

	* iris5.h (DOLLARS_IN_IDENTIFIERS): Undefine.

	* m68kemb.h (LIB_SPEC): Always emit -lc.

Mon Aug 12 12:30:25 1996  Michael Meissner  <meissner@tiktok.cygnus.com>

	* rs6000.c (rs6000_got_register): Test variable
	current_function_uses_pic_offset_table to see whether or not a GOT
	register has been created already.

	* Makefile.in (multilib.h): Move to stamp-mlib.
	(stamp-mlib): Use move-if-change to conditionally update
	multilib.h.  Pass MULTILIB_EXTRA_OPTS to genmultilib.
	(STAGESTUFF): Add stamp-mlib.
	(mostlyclean): Delete tmp-mlib.h.

	* genmultilib: Take fifth argument for options to all multilib builds.
	Restructure output so we pass synonym switches and extra arguments
	separately, and not exponentially slow down genmultilib.

	* gcc.c (toplevel): Rearrange multilib support so we support passing
	synonyms separately from normal switches.  Add support for passing
	additional switches for all multilib builds.  Dump and restore value
	of MULTILIB_DEFAULTS.
	(setspec, process_command, main): Likewise.
	(used_arg,default_arg,print_multilib_info): Likewise.

Mon Aug 12 07:46:47 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* expr.c (expand_builtin, case BUILT_IN_SETJMP): Add test
	and call for nonlocal_goto_receiver pattern.
	* stmt.c (expand_end_bindings): Likewise.

	* stmt.c (expand_asm_operands): Fix off-by-one error when
	scanning constraints.

Sun Aug 11 22:48:02 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* expr.c (store_expr): Handle COND_EXPR cleanups like expand_expr.

Sun Aug 11 22:42:36 1996  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* optabs.c (expand_abs): When OP0 and TARGET are the same
	pseudo register, it is safe to use TARGET.

	* local-alloc.c (reg_equiv_replace): New variable.
	(update_equiv_regs): Set reg_equiv_replacement for all REG_EQUIV
	notes encountered or generated.

Sun Aug 11 22:27:14 1996  Scott Christley <scottc@net-community.com>

	* objc/hash.c (hash_is_key_in_hash): Function somehow got lost.

Sun Aug 11 21:43:15 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* ginclude/stddef.h (__need_wint_t): Move #undef to right place.

Sun Aug 11 17:46:22 1996  J"orn Rennecke <amylaar@cygnus.co.uk>

	* c-decl.c (finish_struct): If pedantic, also warn if struct/union
	has no named members.

Sun Aug 11 17:32:52 1996  Joel Sherrill <joel@OARcorp.com>

	* i386/rtems.h: Renamed from i386/i386-rtems.h
	* i960/rtems.h: Renamed from i960/i960-rtems.h
	* m68k/rtems.h: Renamed from m68k/m68k-rtems.h
	* rs6000/rtems.h: Renamed from rs6000/powerpc-rtems.h
	* sparc/rtems.h: Renamed from sparc/sparc-rtems.h
	* config/t-rtems: New file.
	* configure (i386-*-rtems*): Added t-rtems to tmake_file.
	Renamed i386/i386-rtems.h to i386/rtems.h.
	(i960-*-rtems*): Added t-rtems to tmake_file.
	Renamed i960/i960-rtems.h to i960/rtems.h.
	Added original tm.h file and dbxcoff.h.
	(m68k-*-rtems*): Added t-rtems to tmake_file.
	Renamed m68k/m68k-rtems.h to m68k/rtems.h.
	(powerpc-*-rtems*): Added t-rtems to tmake_file.
	Renamed rs6000/powerpc-rtems.h to rs6000/rtems.h.
	(sparc-*-rtems*): Added t-rtems to tmake_file.
	Renamed sparc/sparc-rtems.h to sparc/rtems.h.

Fri Aug  9 16:05:13 1996  Stan Cox  <coxs@dg-rtp.dg.com>

	* i386.md: (untyped_call) Avoid SIGFPE.

	* i386.c (output_float_compare): Don't try to initialize
	aggregate local variable; use assignment statements instead.

	* i386.h (RTX_COSTS): rtx_cost should pass two parameters.
	
	* i386/go32.h (ASM_OUTPUT_SECTION_NAME): New.

Fri Aug  9 16:00:11 1996  Jim Wilson  <wilson@cygnus.com>

	* winnt.c (gen_stdcall_suffix): Round parameter size to PARM_BOUNDARY.

Thu Aug  8 17:42:35 1996  Michael Meissner  <meissner@tiktok.cygnus.com>

	* rs6000.c (output_toc): If we are emitting a reference to a
	vtable, don't put in the section name, just use the symbol.

Wed Aug  7 19:03:36 1996  Jim Wilson  <wilson@cygnus.com>

	* sh.md (casesi_jump): New pattern.
	(casesi): Generate RTL to match it.

Wed Aug  7 14:10:07 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* ginclude/stddef.h (NULL): Use __null for G++.

Tue Aug  6 17:37:53 1996  Michael Meissner  <meissner@tiktok.cygnus.com>

	* rs6000/sysv4.h (STACK_BOUNDARY): Always define as 64.
	(ABI_STACK_BOUNDARY): Define as 64/128 based on the -mno-eabi
	switch.

	* rs6000.c (rs6000_stack_info): Use ABI_STACK_BOUNDARY, not
	STACK_BOUNDARY.  Define ABI_STACK_BOUNDARY as STACK_BOUNDARY #ifndef.

Tue Aug  6 14:29:43 1996  Doug Evans  <dje@fallis.cygnus.com>

	* gen-protos.c (overrides): New static local.
	(add_hash,parse_fn_proto): New static functions.
	(main): Add prototypes from SYS_PROTO_OVERRIDES to hash table before
	parsing sys-protos.h.  Reserve entry 0 in std_protos.
	* alpha.h (SYS_PROTO_OVERRIDES): Define.

Mon Aug  5 16:53:36 1996  Doug Evans  <dje@fallis.cygnus.com>

	* sparc/t-splet (MULTILIB_OPTIONS): Add mbroken-saverestore.
	(MULTILIB_DIRNAMES): Add brknsave.

	* stor-layout.c (layout_record): Correct overflow test for 0 sized
	fields.

Mon Aug  5 16:12:19 1996  Jim Wilson  <wilson@cygnus.com>

	* alpha.c (alpha_output_filename): When emitting stabs, don't
	disable them if using GNU as.
	(alpha_output_lineno): Likewise, when not using GNU as.

	* sh.c (arith_reg_operand): Reject SUBREG of an invalid hard reg.

	* sparc/lite.h (aoutos.h): Don't include it.
	* configure (sparclite-*-aout*): Add aoutos.h to tm_file.

Sat Aug  3 23:13:55 1996  Jeffrey A Law  (law@cygnus.com)

	* combine.c (rtx_equal_for_field_assignment_p): Check for
	get_last_value returning (CLOBBER (CONST_INT 0)).

Sat Aug  3 20:19:14 1996  Jim Wilson  <wilson@cygnus.com>

	* i960.md (subsi3+1): Handle case where first operand is constant
	but second operand is not.

	* m68k/vxm68k.h (WCHAR_TYPE_SIZE): Undef, then define to 16.

Fri Aug  2 15:46:19 1996  Jeffrey A Law  (law@cygnus.com)

	* pa/pa-hpux.h (LINK_SPEC): Don't link in PA1.1 specific
	libraries when creating shared libraries.
	* pa/pa-hpux9.h, pa/pa-hpux10.h: Likewise.

Fri Aug  2 13:36:42 1996  Stan Cox  <coxs@dg-rtp.dg.com>

	* i386.c (output_float_compare): fcomi should be followed by the
	correct conditional jump instead of fcom/pfstsw/and/jne
	(override_options): Added -mbranch-cost to set BRANCH_COST.
	
	* i386.md (sgt+1,slt+1,sge+1,sle+1,bgt+1,blt+1,bge+1,ble+1,bleu+4)
	Added TARGET_CMOVE check for fcomi.
	(movsicc_1+1,movhicc_1+1): Added to handle the general case.
	
	* i386.h (i386_branch_cost, i386_branch_cost_string): Added.

Fri Aug  2 11:53:55 1996  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* sparc/vxsparc.h (CPP_PREDEFINES): Add `-DCPU=SPARC'.

Thu Aug  1 23:56:01 1996  Jeffrey A Law  (law@cygnus.com)

	* pa.h (ASM_OUTPUT_INT): Remove all hacks for exception table.

Thu Aug  1 10:08:14 1996  Torbjorn Granlund  <tege@spiff.gnu.ai.mit.edu>

	* m68k.h (RTX_COSTS, case PLUS): Get operand order right.

Wed Jul 31 15:06:46 1996  Doug Evans  <dje@cygnus.com>

	* sparc.md (negtf2,abstf2): Fix v9 case.

Wed Jul 31 09:49:25 1996  Jeffrey A Law  (law@cygnus.com)

	* pa.h (ASM_OUTPUT_INT): Use an 'E%' prefix for items in
	the exception table if TARGET_GAS && ! TARGET_PORTABLE_RUNTIME.

Tue Jul 30 15:37:31 1996  Jim Wilson  <wilson@cygnus.com>

	* i386/cygwin32.h (dbxcoff.h): Include.
	(DBX_DEBUGGING_INFO, SDB_DEBUGGING_INFO, PREFERRED_DEBUGGING_TYPE):
	Move definitions before include of dbxcoff.h.
	(ASM_OUTPUT_SOURCE_LINE, DBX_OUTPUT_MAIN_SOURCE_FILE_END): Delete.
	(DBX_BLOCKS_FUNCTION_RELATIVE, DBX_FUNCTION_FIRST): Delete.

Tue Jul 30 15:03:53 1996  Torbjorn Granlund  <tege@spiff.gnu.ai.mit.edu>

	* i960.md (eq reg (const_int 0)): New pattern.

Tue Jul 30 11:15:44 1996  Jeffrey A Law  (law@cygnus.com)

	* pa.h (RETURN_ADDR_RTX): Offset is -20 from the frame, not +20!

Mon Jul 29 12:16:17 1996  Jeffrey A Law  (law@cygnus.com)

	* pa.h (GO_IF_LEGITIMATE_ADDRESS): Fix thinko in last change.

Fri Jul 26 18:19:47 1996  Doug Evans  <dje@cygnus.com>

	* dwarfout.c (output_bound_representation): Fix typo.

Thu Jul 25 16:00:10 1996  Mike Stump  <mrs@cygnus.com>

	* expr.c (do_jump, case TRUTH_ORIF_EXPR): Ensure end of an
	exception region comes after its start.
	(do_jump, case TRUTH_ANDIF_EXPR): Likewise.

Thu Jul 25 13:36:42 1996  Stan Cox  <coxs@equinox>

	* i386.c (output_float_compare): Added support for Pentium Pro
	fcomi instruction which sets EFLAGS instead of FPU Status Word.

Wed Jul 24 21:48:08 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* cse.c (canon_hash, cse_insn): MEM is not unchanging if it is
	in the frame (since the temp slot might be reused).

Wed Jul 24 17:34:06 1996  J"orn Rennecke (amylaar@cygnus.com)

	* sh.md (branch_true, branch_false, inverse_branch_true): Express
	tests of the T bit as comparisons against zero, rather than one.
	(inverse_branch_false, beq, bne, bgt, blt, ble, bge, bgtu): Likewise.
	(bltu, bgeu, bleu, casesi): Likewise.

Wed Jul 24 15:58:06 1996  Stan Cox  <coxs@dg-rtp.dg.com>

	* i386.md: (mov{sf,df,xf}cc{,_1}): New patterns for P6 FP cmove.
	* i386.c (put_condition_code, print_operand, output_fp_cc0_set):
	Support fcmov suffixes.

Wed Jul 24 10:53:38 1996  Jeffrey A Law  (law@cygnus.com)

	* pa.c (move_operand): Relax "mode" test.  Allow scaled
	indexed addressing modes.
	(output_fp_move_double): Tweak output strings to work with updated
	'F' and 'M' output modifiers.
	(print_operand): Collapse 'F' and 'M' into a single hunk of code.
	For auto-increment modes output "s,ma" and "s,mb".
	For scaled indexing modes output "x,s"
	For other addresses, output nothing for 'M' and "s" for 'F'.
	* pa.h (EXTRA_CONSTRAINT): Don't accept scaled indexed addresses
	for 'Q' and 'T'.  Do accept scaled indexed addresses for 'R'.
	(GO_IF_LEGITIMATE_ADDRESS): Accept scaled indexed addresses
	for SFmode and DFmode.
	* pa.md: Remove all scaled indexed load patterns.
	(movsi patterns): Accept scaled indexed addresses in some
	cases.  Update output strings for updated 'M' and 'F' output modifiers.
	(movhi, movqi, movsf, movdf, movdi patterns): Likewise.

Tue Jul 23 23:10:41 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* tree.h (struct tree_int_cst): Add field for TREE_CST_RTL.
	* varasm.c (decode_addr_const, output_constant_def): AllowINTEGER_CST.

Tue Jul 23 16:42:09 1996  Jim Wilson  <wilson@cygnus.com>

	* sh.c (reg_unused_after): Handle JUMP_INSN inside a sequence.

Tue Jul 23 16:33:25 1996  Mike Stump  <mrs@cygnus.com>

	* Make exception handling work better when optimizations are on.
	* except.c, except.h: New files.
	* Makefile.in (OBJS): Add except.o.
	(except.o): Add.
	(stmt.o, final.o): Add except.h.
	* rtl.c (note_insn_name): Add NOTE_INSN_EH_REGION_{BEG,END}.
	* rtl.h: Likewise.
	* arm.h (MASK_RETURN_ADDR): Define.
	* pa.h (MASK_RETURN_ADDR, RETURN_ADDR_RTX): New macros.
	* sparc.h (DOESNT_NEED_UNWINDER): Define if not doing a flat function.
	* mips.h (RETURN_ADDR_RTX): Improve.
	* vax.h (RETURN_ADDR_RTX): Improve.
	* toplev.c (rest_of_compilation): Use find_handler_labels.
	(main, interim_eh{,_hook}): Remove interim_eh_hook support.
	(flag_exceptions): New flag; also add to table.
	(compile_file): Emit the exception table in the backend now.
	* final.c (final_scan_insn): Support ASM_OUTPUT_EH_REGION_{BEG,END}.
	(final_scan_insn): Redo handler labels, implement
	NOTE_INSN_EH_REGION_BEG and NOTE_INSN_EH_REGION_END and use them
	instead of CODE_LABELs.
	(final): Add call to check_handler_labels.
	* libgcc2.c (L_eh): Add support for EH_TABLE_LOOKUP.
	* sparc.md (return): Add a reference to the return address register.
	* flow.c (find_basic_blocks): Add support for handler_labels.
	* loop.c (find_and_verify_loops): Likewise.
	* jump.c (jump_optimize): Likewise.
	Add call to check_handler_labels.  Add call to exception_optimize.
	* sched.c (sched_analyze): Smuggle exception region notes around.
	(unlink_notes, reemit_notes, schedule_block): Likewise.
	(sched_analyze): Add extra element since we remove two at a time.
	* integrate.c (save_for_inline_copying): Add support for exception
	regions.
	(expand_inline_function): Likewise.
	(function_cannot_inline_p): Don't inline functions that have EH
	regions before NOTE_INSN_FUNCTION_BEG.
	(finish_inline): Use FIRST_FUNCTION_INSN, not NEXT_INSN.
	* function.c (expand_start_all_catch): New function.
	* function.h: Add exception handling support information.
	* expr.c (expand_expr, {defer,expand}_cleanups_to, do_jump): Transform
	interim_eh_hook into calls to expand_ehregion_{start,end}.
	* stmt.c (expand_{decl_cleanup,cleanups}): Likewise.
	(init_stmt_for_function): Call init_eh.
	(save_stmt_status): Call save_eh_status.
	(restore_stmt_status): Call restore_eh_status.
	* expr.h (throw_libfunc): Add.
	* optabs.c (throw_libfunc): Initialize.
	* print-rtl.c (print_rtx): Add support for exception regions.
	* rs6000.c (EXCEPTION_SECTION): Define.
	* output.h (exception_section): Declare.
	* varasm.c (exception_section): Define.
	* i386.c, i960.c, rs6000.c: Include except.h for function.h.
	* c-pragma.c, emit-rtl.c, expr.c, final.c, flow.c: Include except.h.
	* function.c, integrate.c, jump.c, loop.c, objc-act.c: Likewise.
	* stmt.c, stor-layout.c, toplev.c, tree.c, varasm.c: Likewise.
	
Tue Jul 23 12:32:54 1996  Michael Meissner  <meissner@tiktok.cygnus.com>

	* rs6000.c (rs6000_replace_regno): Set pic_offset_table_rtx so
	that other phases will use the PIC register instead of the
	placeholder.

	* rs6000.md (movsi_got*): Eliminate -fPIC code, keep -fpic code.
	(movsi): Only call movsi_got if -fpic, not -fPIC.

	* sysv4.h (OVERRIDE_OPTIONS): Improve error messages.  Always set
	-msdata=data by default, even if -fpic/-fPIC/-mrelocatable.  Treat
	-fPIC the same as -mrelocatable-lib and vica versa.

	* t-ppcgas: (MULTILIB_*): Use -mreloctable-lib, instead of
	-mrelocatable.  Map Solaris into mcall-sysv-noeabi case.  Build
	-mrelocatable-lib libraries under non-eabi case.  When linking, if
	-fpic, -fPIC, or -shared, link in the -mrelocatable-lib libraries.

Mon Jul 22 19:34:20 1996  Jim Wilson  <wilson@cygnus.com>

	* iris6.h (ASM_SPEC): Change {% to %{.

	* dwarf2out.c (output_call_frame_info): Change FDE CIE offset to
	be section name rather than 0.
	(gen_subprogram_die): Only emit DW_AT_external if origin is NULL.
	Only call equate_decl_number_to_die if origin is NULL.
	(dwarfout_begin_function): In code that computes offset of frame
	pointer, change 4 to UNITS_PER_WORD.

	* combine.c (undo_all): Clear previous_undos field.

Mon Jul 22 19:10:45 1996  Ian Lance Taylor  <ian@cygnus.com>

	* configure: Don't change target_alias to target in Makefile.

Sat Jul 20 09:28:38 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* dwarfout.c (output_bound_representation): Treat default case
	as variable bounds, then look inside for SAVE_EXPR.

	* mips.h (INITIALIZE_TRAMPOLINE): Use `_flush_cache'; flush data
	cache too.

Sat Jul 20 09:24:13 1996  Marco Walther  (Marco.Walther@mch.sni.de).

	* configure (mips-sni-sysv4): New target.
	* mips/sni-gas.h, mips/sni-svr4.h, mips/x-sni-svr4: New files.

Fri Jul 19 17:44:13 1996  Stan Coxs  <coxs@dg-rtp.dg.com>

	* i386.md: (leave): Clobbers esp and ebp.

	* i386.h: (TARGET_USE_Q_REG): Support inline strlen on PentiumPro

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

	* m68k/t-m68kbare (MULTILIB_OPTIONS): Add m5200.
	(MULTILIB_EXCEPTIONS): Define.
	* m68k/lb1sf68.asm: Add MCF5200 support.
	* m68k.md (adddi_sexthishl32): Set condition to !TARGET_5200.
	(subdi_sexthishl32, ashrdi3, ashrhi3): Likewise.
	(negdi2): Change into define_expand.
	(negdi2_internal): Rename from old negdi2; condition now !TARGET_5200.
	(negdi2_5200): New insn.
	* m68k.c (output_function_prologue): Don't use add.w if TARGET_5200.
	(output_function_epilogue): Likewise.

	* m68k.md (movqi): Remove complex cases which move between address reg
	and memory; rely on secondary reloads instead.

Fri Jul 19 12:22:50 1996  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* fixproto (std_files): Add utime.h.

Fri Jul 19 10:59:46 1996  Jeffrey A Law  (law@cygnus.com)

	* m68k/m68kemb.h: Remove '\' at EOF.

Fri Jul 19 09:59:00 1996  Joel Sherrill <joel@OARcorp.com>

	* m68k/coff.h (STARTFILE_SPEC): Add #undef before definition.

Fri Jul 19 09:44:45 1996  J.T. Conklin  <jtc@rtl.cygnus.com>

	* m68k.h (LEGITIMATE_INDEX_P): Coldfire does not have scale
	by 8 addressing modes.

	* m68k-none.h: Use MASK_* macros instead of explicit constants.

Fri Jul 19 09:08:53 1996  Philippe De Muyter  <phdm@info.ucl.ac.be>

	* m68k.md (negdi2): Undo last change: don't apply neg to address regs.

Fri Jul 19 09:03:01 1996  Robert Wilhelm  (rwilhelm@Physik.TU-Muenchen.DE)

	* toplev.c (main): Correct typo in error message.

Thu Jul 18 20:29:33 1996  Jim Wilson  <wilson@cygnus.com>

	* Makefile.in (OBJS): Add dwarf2out.o.
	(dwarf2out.o): New rule.
	* dwarf2.h, dwarf2out.c: New files.
	* dwarfout.c: Check DWARF_VERSION macro.

	* mips/iris6.h (DWARF_DEBUGGING_INFO, PREFERRED_DEBUGGING_TYPE):
	Move after header files are included.
	(iris5.h): Include instead of iris5gas.h.
	(MACHINE_TYPE): Change 5.x to 6.x.
	(DEBUG_SECTION, LINE_SECTION): Add debug_ to name, fix attributes.
	(SFNAMES_SECTION, SRCINFO_SECTION, MACINFO_SECTION, PUBNAMES_SECTION,
	ARANGES_SECTION): Fix attributes.
	(DWARF_VERSION, MIPS_DEBUGGING_INFO, ASM_DECLARE_FUNCTION_NAME,
	ASM_DECLARE_FUNCTION_SIZE, FUNCTION_NAME_ALREADY_DECLARED,
	FRAME_SECTION, ABBREV_SECTION): Define.
	(DBX_DEBUGGING_INFO, SDB_DEBUGGING_INFO, MIPS_DEBUGGING_INFO,
	DWARF_DEBUGGING_INFO, PREFERRED_DEBUGGING_INFO): Delete undefs at
	end of file.
	* mips.c (function_{pro,epi}logue): Use FUNCTION_NAME_ALREADY_DECLARED.

Thu Jul 18 19:24:19 1996  David Mosberger-Tang  <davidm@azstarnet.com>

	* alpha/elf.h (INT_ASM_OP): Change from ".long" to ".quad".

Thu Jul 18 19:20:58 1996  Ulrich Drepper  <drepper@myware.rz.uni-karlsruhe.de>

	* stddef.h: Undefine __need_wint_t.

Thu Jul 18 19:06:35 1996  J.T. Conklin  <jtc@hippo.cygnus.com>

	* longlong.h (mc680x0): Define umul_ppmm, udiv_qrnnd, sdiv_qrnnd
	for the '020, '030, '040, and '332.  Define count_leading_zeros
	for the '020, '030, '040, and '060.

	* m68k.md: Add TARGET_5200 to conditions which determine whether
	the extbl instruction is emitted.
	(mulsi3): Enable pattern with TARGET_5200.

	* m68k.md (add patterns): Don't use two addqw instructions when
	adding small (8 < N <= 16) integers to address registers on 68040.

Thu Jul 18 18:06:15 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* configure: Write target_alias in Makefile.
	(i[3456]86-*-sco3.2v4*): Set truncate_target.
	* Makefile.in (target_alias): New and used for all current uses
	of `target'.

Thu Jul 18 17:46:02 1996  Dave Love  <d.love@dl.ac.uk>

	* gcc.c (default_compilers): Extra Fortran extensions.

Wed Jul 17 10:28:10 1996  Torbjorn Granlund  <tege@spiff.gnu.ai.mit.edu>

	* expmed.c (expand_mult_highpart): Revert last change.

Tue Jul 16 12:51:59 1996  Doug Evans  <dje@cygnus.com>

	* sparc/sparc-rtems.h: #include "sparc/sparc-aout.h" -> sparc/aout.h.

Mon Jul 15 14:42:06 1996  Jim Wilson  <wilson@cygnus.com>

	* mips/iris6.h (LINK_SPEC): Add -woff 84.

Fri Jul 12 17:34:01 1996  Michael Meissner  <meissner@tiktok.cygnus.com>

	* rs6000/eabi.asm (__eabi): Convert pointers in the Global Offset
	Table if -mrelocatable.  Move loops into separate subroutines for
	ease of debugging.  Reorganize code somewhat.

	* rs6000/rs6000.c (small_data_operand): Allow small data under
	Solaris.

	* rs6000/sol-c0.c (_start): Initialize r13 to point to the small
	data operand.

	* rs6000/sol-c{i,n}.asm (_init, _fini): Enable shared library
	support.

	* rs6000/sysv4.h (SUBTARGET_OVERRIDE_OPTIONS): Default to
	-msdata=data, even if -fpic or -mrelocatable.  Allow -mrelocatable
	and -mno-eabi.
	(CPP_SYSV_SPEC): If -fpic, define __PIC__ and __pic__ to 1.  If
	-fPIC, define them to 2.
	(CPP_ENDIAN_SPEC): Push definition of macros for specific endian
	targets to new specs.
	(CPP_ENDIAN_DEFAULT_SPEC): Define to use CPP_ENDIAN_BIG_SPEC.
	(CPP_ENDIAN_{LITTLE,BIG,SOLARIS}_SPEC): New specs for little
	endian mode, big endian mode, and Solaris, which can't define
	_LITTLE_ENDIAN.  Define __LITTLE_ENDIAN__ in all cases for little
	endian systems.  Define __BIG_ENDIAN__ in all cases for big endian
	systems.
	(SUBTARGET_EXTRA_SPECS): Add new specs.

	* rs6000/{eabile,sysv4le}.h (CPP_ENDIAN_DEFAULT_SPEC): Define to
	use CPP_ENDIAN_LITTLE_SPEC.

	* rs6000/sol2.h (CPP_ENDIAN_LITTLE_SPEC): Define as
	CPP_ENDIAN_SOLARIS_SPEC so that _LITTLE_ENDIAN is not define.

Fri Jul 12 17:34:01 1996  David Edelsohn  <edelsohn@mhpcc.edu>

	* rs6000.c (function_arg): Add IBM AIX XL compiler broken FP arg
	passing compatibility mode.
	* rs6000.h (TARGET_XL_CALL): Define default.
	* aix3newas.h (TARGET_XL_CALL, SUBTARGET_SWITCHES): Define.
	* aix41.h (TARGET_XL_CALL, SUBTARGET_SWITCHES): Define.

Fri Jul 12 15:04:43 1996  Doug Evans  <dje@cygnus.com>

	* arm.h (ASM_OUTPUT_MI_THUNK): Handle fns returning structures.

	* ptx4.h ({ASM,LINK}_SPEC): %{V} %{v:%{!V:-V}} -> %{v:-V}.
	* svr4.h ({ASM,LINK}_SPEC): Likewise.
	* dsp16xx/dsp16xx.h ({ASM,LINK}_SPEC): Likewise.
	* i386/dgux.h (LINK_SPEC): Likewise.
	* i386/sol2.h (LINK_SPEC): Likewise.
	* m88k/dgux.h ({LINK,ASM_CPU}_SPEC): Likewise.
	* sparc/sol2.h ({ASM,LINK}_SPEC): Likewise.
	* sparc/sp64-elf.h ({ASM,LINK}_SPEC): Likewise.
	* sparc/sysv4.h (ASM_SPEC): Likewise.

Thu Jul 11 17:29:33 1996  Michael Meissner  <meissner@tiktok.cygnus.com>

	* rs6000.h (GOT_TOC_REGNUM): New macro for r2, which is used as a
	marker for the GOT/TOC register to be allocated later.
	(MACHINE_DEPENDENT_REORG): Call rs6000_reorg.
	(rs6000_reorg): Add declaration.

	* rs6000.c (rs6000_got_register): Return REG 2, not a pseudo
	register in order to work with inlined functions.
	(rs6000_replace_regno): New function to replace a register with a
	new pseudo register.
	(rs6000_finalize_pic): Loop through all insns, replacing any
	GOT_TOC_REGNUM registers with new pseudo register, and adding
	initialization of GOT register if it was created.
	(rs6000_reorg): New function to check whether the GOT_TOC register
	marker was removed.

Thu Jul 11 10:12:50 1996  Jeffrey A Law  (law@cygnus.com)

	* h8300.h (OK_FOR_U): If generating H8/S code, accept
	SYMBOL_REF and SYMBOL_REF + CONST_INT.

	* h8300.c ({shift,rotate}_one): Emit tabs between opcode and
	operands to be consistent with the rest of the compiler.
	(shift_two, rotate_two): Define.
	(get_shift_alg): Accept new argument "assembler2_p" for
	rotate/shift by two insns.  All callers changed.  Rework
	to generate more efficient code on the H8/300, H8/300H, and H8/S.
	Try to simplify somewhat.
	(emit_a_shift): Use shift-by-two insns when they're available.
	Emit tabs between opcode and operands to be consistent with
	the rest of the compiler.

Wed Jul 10 19:32:17 1996  Jim Wilson  <wilson@cygnus.com>

	* mips/iris6.h (ASM_SPEC): Correct typos in Jun 18 change.

Wed Jul 10 18:56:38 1996  Ian Lance Taylor  <ian@cygnus.com>

	* sh.c (machine_dependent_reorg): When looking for instruction that
	sets register in LOG_LINKS, skip link if REG_NOTE_KIND is not zero.

Wed Jul 10 15:02:18 1996  Michael Meissner  <meissner@tiktok.cygnus.com>

	* rs6000.c (rs6000_got_register): New function to return a pseudo
	register to hold the pic register.  Abort if reload is in progress
	or done.
	(num_insns_constant): Allow SFmode and DFmode.

	* rs6000.h (CONST_DOUBLE_OK_FOR_LETTER_P): Redo 'G' so that it
	means a constant that takes exactly two insns.
	(rs6000_got_register): Add declaration.

	* rs6000.md (movsi_got): Move setup of pic register to
	rs6000_got_register.
	(movsf): If -msoft-float, don't force constants to memory.
	(mov{sf,df} insns): If soft floating point, allow any constant to
	be loaded.  Add define_splits that allow the 604 to use both
	integer units for loading constants.  Make sure insn length is
	correct.

Tue Jul  9 17:05:10 1996  Michael Meissner  <meissner@tiktok.cygnus.com>

	* rs6000.c (easy_fp_constant): All FP constants are considered
	hard for -fpic and hardware floating point, so that the GOT
	register is created.

Tue Jul  9 15:21:27 1996  Jim Wilson  <wilson@cygnus.com>

	* x-iris6 (FIXPROTO_DEFINES): Add -D_SGI_SOURCE.

Mon Jul  8 18:00:33 1996  Jim Wilson  <wilson@cygnus.com>

	* sh.h (enum reg_class): Add new class GENERAL_FP_REGS.
	(REG_CLASS_NAMES, REG_CLASS_CONTENTS): Likewise.

	* cse.c (note_mem_written): Varying structure memory access with
	AND address can alias scalars.
	* sched.c ({true,anti,output}_dependence): Likewise.

	* sh.c (calc_live_regs): For pragma_interrupt case, exclude call
	clobbered regs that are fixed, explicitly add MACH_REG and MACL_REG.

	* calls.c (expand_call): For assign_stack_temp call in PARALLEL case,
	get mode from type instead of using BLKmode.
	* function.c (aggregate_value_p): If hard_function_value returns
	a non-REG, then return 0.

	* mips.c (function_arg): Add explicit checks for FIELD_DECLs.
	(mips_function_value): Add explicit checks for FIELD_DECLs, and save
	them in the array FIELDS.  When returning structure with 1 float field,
	enclose it in a PARALLEL and set the PARALLEL mode correctly.
	* mips.md (call_value): Call gen_call_value_multiple_internal0
	only if there are multiple return values.  Strip the PARALLEL off
	if there is only one return value.

Mon Jul  8 16:27:33 1996  Jeffrey A. Law  <law@cygnus.com>

	* First cut at support for the H8/S.
	* h8300.c (h8300_init_once): Handle the H8/S (treat it
	like the H8/300H).
	(dosize, adds_subs_operand, one_insn_adds_subs_operand): Likewise.
	(output_adds_subs, const_costs, print_operand): Likewise.
	(output_simode_bld, h8300_adjust_insn_length): Likewise.
	(push_order, pop_order): Reverse.
	(function_prologue): Try to use ldm.l and stm.l insns
	on the H8/S.  Minor cleanups.
	(function_epilogue): Likewise.
	(asm_file_start): Emit ".h8300s" when compiling for the H8/S.
	* h8300/h8300.h (CPP_SPEC): Handle the H8/S.
	(TARGET_H8300S): New target.
	(TARGET_SWITCHES): Add "-ms" and "-mno-s".
	(BITS_PER_WORD): Handle the H8/S (treat it like the H8/300H).
	(UNITS_PER_WORD, POINTER_SIZE, PARM_BOUNDARY): Likewise.
	(BIGGEST_ALIGNMENT, BIGGEST_FIELD_ALIGNMENT): Likewise.
	(INITIALIZE_TRAMPOLINE, MOVE_MAX, Pmode): Likewise.
	* h8300.md: Handle H8/S just like H8/300H
	throughout the entire file.
	* t-h8300 (MULTILIB_OPTIONS): Build "-ms" libraries too.
	(MULTILIB_DIRNAMES): Put H8/S libraries in "h8300s" directory.
	* h8300/lib1funcs.asm: Emit ".h8300s" pseudo-op when generating
	h8300s object files.  Otherwise treat the H8/S just like the H8/300H.
	* ginclude/stdarg.h: Handle the H8/S.
	* ginclude/varargs.h: Likewise.

Mon Jul  8 14:50:58 1996  Doug Evans  <dje@cygnus.com>

	* sparc/sol2.h (LINK_SPEC): Don't pass `-z text' if
	-shared -mimpure-text.

Sun Jul  7 18:03:46 1996  Torbjorn Granlund  <tege@noisy.tmg.se>

	* m68k/lb1sf68.asm (__udivsi3): Use faster tstw instead of btst.

Thu Jul  4 11:44:39 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* expr.c (get_inner_reference): Delete using alternate mode for
	bitfield; we don't make bitfields anymore if not needed.

Wed Jul  3 18:23:17 1996  Stephen L Moshier  (moshier@world.std.com)

	* c-common.c (record_function_format): Define as static.
	
	* collect2.c (at SUNOS4_SHARED_LIBRARIES): Fix reference to unistd.h.

Wed Jul  3 17:35:20 1996  Gavin Koch  <gavin@cygnus.com>

        * c-typeck.c (default_conversion): Add bitfield promotions.
                
Wed Jul  3 17:09:22 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* gcc.c (default_compilers): Add null entries for languages we
	heard of.
	(main): If found one of those entries, say compiler not installed.

Wed Jul  3 12:52:53 1996  Jeffrey A. Law  <law@cygnus.com>

	* pa.c (fmpy_operands): Define.
	(combinable_{fmpy,add,fsub}): New function.
	* pa.md (parallel_addb, parallel_movb): New patterns.
	(fmpyadd, fmpysub): New patterns.

	* pa.c (fmpy{add,sub}operands): Tighten checks.  Allow SFmode.

Tue Jul  2 18:57:15 1996  Jeffrey A. Law  <law@cygnus.com>

	* pa.c (ireg_or_int5_operand): New function.
	(output_parallel_movb, output_parallel_addb): Likewise.
	(combinable_copy, combinable_add, following_call): Likewise.
	(pa_adjust_insn_length): Handle parallel unconditional branches.
	(output_movb): Handle case were destination is %sar.
	* pa.h: Declare new functions.
	* pa.md (parallel_branch): New "type" attribute.
	(delay slot descriptions): Don't allow "parallel_branches" in
	delay slots.  Fill "parallel_branches" like "branch" insns.
	(movb patterns): Handle %sar as destination register.

	* expr.c (compare): If function pointers need canonicalization
	before comparisons, canonicalize them.
	(do_store_flag): Do not use an sCC insn for a function pointer
	comparison if function pointers need canonicalization before
	comparing.

Tue Jul  2 17:56:37 1996  Michael Meissner  <meissner@tiktok.cygnus.com>

	* rs6000/sysv4.h ({START,END}FILE_LINUX_SPEC): If -mnewlib is not
	used, use the crtbegin/crtend that 2.7.2 used.

Sat Jun 29 07:10:02 1996  Michael Meissner  <meissner@tiktok.cygnus.com>

	* rs6000.h (INIT_EXPANDERS): Define, call rs6000_init_expanders.
	(RS6000_VARARGS_OFFSET): fpmem area no longer next to outgoing
	argument area.
	(STARTING_FRAME_OFFSET, STACK_DYNAMIC_OFFSET): Likewise.
	(frame_pointer_needed): Add external declaration.
	(rs6000_{save,restore}_machine_status): Ditto.
	(rs6000_init_expanders): Likewise.

	* rs6000.c (rs6000_{save,restore}_machine_status): New functions
	to save and restore the globals needed on a per function basis.
	(rs6000_init_expanders): Initialize globals needed on a per
	function basis, and set up so the above save/restore functions are
	called when processing nested functions.
	(output_epilog): Don't initialize per function globals here.
	(rs6000_stack_info): Change where fpmem save area is to below local
	variables, and not just below the outgoing argument area.

	* rs6000.md (floatsidf2*, fix_truncdfsi2*): Rewrite conversion
	routines to track new location of the fpmem save area.  Allocate a
	new base register temp for the routines in case the stack frame is
	more than 32k in size.

Sat Jun 29 05:44:37 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* explow.c (convert_memory_address, case PLUS): Fix error in
	last change.

Fri Jun 28 23:30:48 1996  Jeffrey A. Law  <law@cygnus.com>

	* reload1.c (choose_reload_regs): Properly mark spill registers
	as in use for inherited reloads.

Fri Jun 28 18:37:20 1996  Stephen L Moshier  <moshier@world.std.com>

	* objc/sarray.c (ifdef __alpha__): Don't declare `free'.
	* objc/thr-decosf1.c (objc_thread_id): Use pthread_getunique_np
	to obtain a thread ID value.
	(objc_mutex_allocate): Cast mutex->owner to _objc_thread_t.
	(objc_mutex_{deallocate,unlock}): Likewise.
	(objc_mutex_{try,un,}lock):  Declare thread_id as _objc_thread_t.

	* real.c (asctoeg): `0.0eX' is zero, regardless of the exponent X.

Fri Jun 28 18:33:13 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* vax.md (rotl): Remove extraneous `$'.

	* combine.c (previous_num_undos): Deleted variable.
	(MAX_UNDO): Deleted macro.
	(struct undo): New field, next.
	(struct undobuf): Deleted num_undos and undo.
	New fields undos, frees, and previous_undos.
	(SUBST, SUBST_INT): Rework to allocate memory and chain undo entries.
	(combine_instructions): Initialize undobuf.{undos,previous_undos},
	not undobuf.num_undo and previous_num_undos.
	(try_combine): Likewise.
	(undo_all, gen_rtx_combine): Rework to use new data structures.

Fri Jun 28 16:48:25 1996  Scott Christley <scottc@net-community.com>

	* objc/sendmsg.c (__objc_block_forward): New function.
	(get_imp, objc_msg_lookup): Use different forwarding function
	when the returning a floating point value.

Fri Jun 28 16:25:25 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* configure: Allow multiple makefile frags.
	(i[3456]86-*-linux*oldld*): Add i386/t-crtstuff as target frag.
	(i[3456]86-*-linux*aout*, i[3456]86-*-linux*): Likewise.
	(m68k-*-linux*aout*): Add t-linux-aout as target frag.
	(m68k-*-linux*): Add t-linux as target frag.
	* Makefile.in (Makefile): xmake_file and tmake_file now already
	contain the $(srcdir)/config prefix.

	* config/t-linux (BOOT_CFLAGS): Removed, no longer necessary.
	(CRTSTUFF_T_CFLAGS): Don't define.
	(CRTSTUFF_T_CFLAGS_S): Define this instead.
	* config/t-linux-aout (BOOT_CFLAGS): Removed.
	* m68k/t-linux: Remove variables now in t-linux.

Fri Jun 28 15:06:05 1996  John F. Carr  <jfc@mit.edu>

	* alpha.c (alpha_emit_conditional_move): Emit correct code when
	incoming comparison code is NE.

Fri Jun 28 14:35:45 1996  J.T. Conklin  <jtc@hippo.cygnus.com>

	* c-decl.c (init_decl_processing): Register __builtin_memset 
	and memset as builtin functions.
	* expr.c (expand_builtin, case BUILTIN_MEMSET): Open code memset
	where val == 0.

Fri Jun 28 14:10:03 1996  Richard Henderson  <rth@tamu.edu>

	* alpha/linux.h (FUNCTION_PROFILER): _mcount has non-standard linkage.
	* alpha/elf.h (LINK_SPEC): Bring emulation name into sync
	with Cygnus snapshot.

	* alpha.h ({MASK,TARGET}_BUILD_CONSTANTS): New macros.
	(TARGET_SWITCHES): New target option build-constants.
	* alpha.c (alpha_emit_set_long_const): New function.
	* alpha.md (movdi): Call it.
	* expmed.c (expand_mult_highpart): Use op1 not wide_op1 in
	expansion of mul_highpart.
	
	* alpha.c (output_{pro,epi}log): Flag_inhibit_size_directive
	should supress .ent, .end, and accompanying directives.
	(alpha_output_lineno): Fix polarity on GAS test.
	* alpha.h (NO_DBX_FUNCTION_END): New macro.
	* dbxout.c (dbxout_function): Respect NO_DBX_FUNCTION_END.
	* alpha/elf.h: New file.
	* alpha/linux.h (INITIALIZE_TRAMPOLINE): New definition.
	* alpha/xm-linux.h (HAVE_STRERROR): Define.
	* configure (alpha*-linux*ecoff*): New target, was alpha-*-linux*.
	(alpha-*-linux*): Use elf.h.
	* crtstuff.c (init_dummy): Only i386-linux (at most)
	needs ___brk_addr hack.
	
Thu Jun 27 20:23:30 1996  Jon Buller  (jonb@metronet.com)

	* ns32k.c (split_di): New; from i386.c.
	* ns32k.md (adddi3, subdi3, negdi3): New patterns.

Thu Jun 27 19:42:50 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* combine.c (force_to_mode, case NE): Fix typo and logical error.
	(simplify_comparison): Don't swap args if op1 is CONST_INT.

Thu Jun 27 18:49:35 1996  Jim Wilson  <wilson@cygnus.com>

	* expmed.c (extract_bit_field): Check TRULY_NOOP_TRUNCATION before
	making a SUBREG of a REG.

Thu Jun 27 11:03:59 1996  Ian Lance Taylor  <ian@cygnus.com>

	* mips.h (CC1_SPEC): Put spaces between the -mips* cases.
	* mips/osfrose.h (CC1_SPEC): Likewise.

	* sh.c (output_branch): Don't call ADJUST_INSN_LENGTH if insn is
	inside sequence.

Wed Jun 26 19:09:43 1996  Jeffrey A. Law  <law@cygnus.com>

	* pa.h (CMP_PSI): Delete.
	(FUNCTION_POINTER_COMPARISON_MODE): Likewise.
	* pa.md (cmppsi): Delete expander.
	(canonicalize_funcptr_for_compare): Renamed from plabel_dereference,
	turned into an expander + anonymous pattern.

Tue Jun 25 22:36:11 1996  Doug Evans  <dje@seba.cygnus.com>

	* gcc.c (PEXECUTE_VERBOSE): Define.
	(execute): Pass PEXECUTE_VERBOSE to pexecute if -v.

Tue Jun 25 12:23:54 1996  Michael Meissner  <meissner@tiktok.cygnus.com>

	* rs6000.h (FINALIZE_PIC): Define to call rs6000_finalize_pic.
	(rs6000_finalize_pic): Add declaration.
	(svr4_traceback): Delete unused declaration.

	* rs6000.md (movsi_got): Don't emit gen_init_v4_pic insn.
	(V.4 call insns): Do not use @plt for PIC calls.

	* rs6000.c (print_operand_address): Handle LABEL_REF just like
	SYMBOL_REF.
	(rs6000_finalize_pic): Define, emit the gen_init_v4_pic insn
	before all other insns if needed for V.4 PIC calls.

	* eabi-ci.asm (_GLOBAL_OFFSET_TABLE_): Do not provide a default
	definition, since it interferes with the linker generated version.

Tue Jun 25 01:17:50 1996  Jeffrey A. Law  <law@cygnsu.com>

	* h8300.c (function_prologue): Update "monitor" prologues.
	(function_epilogue): Similarly.

	* pa.h (PARSE_LDD_OUTPUT): Handle dynamic libraries that are
	loaded "statically".

Mon Jun 24 19:48:36 1996  Joel Sherrill  <joel@merlin.gcs.redstone.army.mil>

	* configure ({i386,i960,m68k,powerpc,sparc}-rtems): New targets.
	* i386/go32-rtems.h, i386/i386-rtems.h: New files.
	* i960/i960-rtems.h: New file.
	* m68k/m68k-rtems.h: New file.
	* rs6000/powerpc-rtems.h: New file.
	* sparc/sparc-rtems.h: New file.

Mon Jun 24 23:09:22 1996  Paul Eggert  <eggert@twinsun.com>

	* cccp.c: (create_definition): Diagnose `#define #' only once.

Mon Jun 24 11:42:58 1996  Jim Wilson  <wilson@cygnus.com>

	* i386/cygwin32.h, rs6000/cygwin32.h (CPP_PREDEFINES): For consistency,
	change to define WIN32, WINNT, and CYGWIN32.

Mon Jun 24 10:46:50 1996  Michael Meissner  <meissner@tiktok.cygnus.com>

	* rs6000.md (floatsidf2*): Move the xor of the argument into the
	define_insn, since it confuses inline function expands.

Fri Jun 21 20:40:17 1996  Jim Wilson  <wilson@cygnus.com>

	* mips.md (call_internal1, call_value_internal1): Delete obsolete code.
	(call_internal2, call_value_internal2, call_value_multiple_internal2):
	Delete obsolete code.  Explicitly load SYMBOL_REF into register.
	(call_value): Change Pmode to SImode in gen_call_value_internal0 call.

Thu Jun 20 12:20:33 1996  Michael Meissner  <meissner@tiktok.cygnus.com>

	* configure (*-aix*): If building a cross compiler, use t-xnewas
	instead of t-newas.

	* rs6000.c (num_insns_constant_wide): Fix typo if HOST_WIDE_INT
	has more than 32 bits.

Wed Jun 19 17:50:33 1996  Richard Henderson  <richard@atheist.tamu.edu>

	* combine.c (move_deaths): New parameter maybe_kill_insn.
	Don't move note if reg killed by maybe_kill_insn.
	(try_combine): Pass new arg to move_deaths.
	
Wed Jun 19 10:44:47 1996  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* toplev.c (flag_keep_static_consts): Define.
	(f_options): Add "keep-static-consts" entry.
	(compile_file): Check it in addition to !optimize for emitting
	static const variables.

Tue Jun 18 23:37:20 1996  Doug Evans  <dje@cygnus.com>

	* i386/cygwin32.h (ASM_OUTPUT_SOURCE_LINE): Local symbols begin with L.

Tue Jun 18 12:00:11 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* varasm.c (asm_output_aligned_bss): Don't emit a skip of size 0.

Tue Jun 18 06:24:28 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* integrate.c (expand_inline_function): Add missing call to
	force_operand when getting structure_value_addr into reg.

	* alpha.c (override_options): Allow EV4/5 or 21064/21164 for cpu.
	Clean up handling of floating-point options.
	* alpha.h (TARGET_SWITCHES): Have all -mieee options turn
	on MASK_IEEE_CONFORMANT.
	(TARGET_DEFAULT): Use symbolic value.
	* alpha.md: When not involving named pattern, update condition
	to include alpha_tp != ALPHA_TP_INSN.
	Don't do float_extend as part of other pattern when ALPHA_TP_INSN.
	(extendsfsd2): Split into two patterns, depending on 
	value of alpha_tp.

	* mips/iris6.h (ASM_SPEC): Treat -o32 as -32 and -n64 same as -64.
	* mips.c (override_options): Likewise.	

	* genattrtab.c (fatal): Declare A1 and A2 as char *.

	* function.c (find_temp_slot_from_address): Check for overlap
	from BASE_OFFSET if X is PLUS of virtual_stack_vars_rtx and const.

	* flow.c (flow_analysis): Fix typo in last change.

	* expr.c (expand_builtin, case BUILT_IN_{SET,LONG}JMP): Properly
	handle case when ptr_mode != Pmode.

	* combine.c (try_combine): Don't use split if dest of new I2
	is used between I2 and I3.

	* c-typeck.c (pointer_int_sum): Convert integer to both signedness
	and precision of sizetype.
	* explow.c (convert_memory_address, case PLUS, MULT): Don't commute
	operation with extension if not adding small integer.

	* Makefile.in (BOOT_LANGUAGES): New variable.
	(bootstrap): Use it to select languages for stage1.
	* configure (extra_host_objs): New variable.
	Separate files needed for target and host and concatenate list.
	(extra_gcc_objs): Use setting for host, not target.
	(objc_thread_file): Start with it as null, then don't include "thr-".
	Print name of file after others and in same format.
	(alpha-*-winnt*, i[3456]86-*-winnt): oldnames.o is in extra_host_objs.
	(all_boot_languages): New variable.
	Set from boot_language variable in config-lang.in.
	Defines value of BOOT_LANGUAGES in Makefile.
	(Makefile): Set target to the canonical form of target.

Mon Jun 17 22:37:07 1996  Mike Meissner  <meissner@rtl.cygnus.com>

	* rs6000/win-nt.h (ASM_DECLARE_FUNCTION_NAME): Put function
	descriptor in .reldata, not .text.

Mon Jun 17 16:05:34 1996  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* ginclude/stddef.h (wint_t): Don't wrap with #ifndef __cplusplus.

Mon Jun 17 15:03:20 1996  Jim Wilson  <wilson@cygnus.com>

	* mips.c (mips_split_addresses): New variable.
	(simple_memory_operand): Add comment about mode check.  Add check
	for LO_SUM.
	(call_insn_operand): OP is now an addresses instead of a MEM.
	(move_operand, mips_check_split): New functions.
	(mips_count_memory_refs): Add check for LO_SUM.
	(mips_move_1word): Add HIGH support.
	(mips_address_cost): Delete check for HIGH.
	(output_block_move): Handle LO_SUM addresses.
	(override_options): Set mips_split_addresses.
	(print_operand_address): Add LO_SUM support.
	* mips.h (mips_split_addresses, mips_check_split, move_operand):
	New declarations
	(GO_IF_LEGITIMATE_ADDRESS): Reject constant addresses when
	mips_split_addresses is TRUE.  Add LO_SUM support.
	(LEGITIMIZE_ADDRESS): Add LO_SUM support.
	(PREDICATE_CODES): Modify call_insn_operand support.  Add
	move_operand.
	* mips.md (memory): Change r4100/r4300 support.
	(imuldiv): Add r4300 support.
	(high, low): New patterns.
	(movsi, movdi): Add LO_SUM support.
	(movsi_internal1, movsi_internal2): Use move_operand instead of
	general_operand.
	(movstrsi_internal, movstrsi_internal2): Delete R constraint.
	(call, call_value): Pass address instead of MEM to call_insn_operand.
	Call gen_call_{value_}internal0 instead of internal1.
	(call_internal0, call_value_internal0, call_multiple_internal0):
	New patterns.
	(call_internal1, call_internal2, call_value_internal1,
	call_value_internal2, call_value_multiple_internal2): Add explicit
	MEM before target address.

Sun Jun 16 23:05:16 1996  Jeffrey A. Law  <law@cygnus.com>

	* configure (hppa*-hp-hpux10*): Use new pa-hpux10 configuration file.
	(hppa*-hp-hpux*): Use hpux9 configuration files by default.
	* pa/pa-hpux10.h: New file.
	* pa/pa-ghpux9.h: Deleted.  No longer used.

Sat Jun 15 04:35:51 1996  Roland McGrath  <roland@delasyd.gnu.ai.mit.edu>

	* i386/gnu.h (LINK_SPEC): Remove -rpath /lib/ option.
	Ignore -ibcs option.

Thu Jun 13 14:49:41 1996  Jim Wilson  <wilson@cygnus.com>

	* gen-protos.c (main): Change argv[i] to argv[0][i].

Thu Jun 13 10:46:24 1996  Doug Evans  <dje@cygnus.com>

	* gcc.c (pfatal_pexecute): Delete code to check errno < sys_nerr.

Wed Jun 12 21:47:10 1996  Eliot Dresselhaus  <dresselh@rft30.nas.nasa.gov>

	* alpha.c (alpha_cpu, alpha_cpu_string): New variables.
	(override_options): Process -mcpu= value.
	(alpha_adjust_cost): Handle adjustments for EV5.
	* alpha.h (enum processor_type): New enum.
	(alpha_cpu, alpha_cpu_string): New declarations.
	(target_options): Add "cpu=".
	(RTX_COSTS): Adjust values for EV5.
	* alpha.md: Add scheduling rules for EV5.

Tue Jun 11 17:51:03 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* c-common.c (check_format_info): Change text of message about use
	of `0' with precision.

Tue Jun 11 15:14:10 1996  Stan Cox  <coxs@dg-rtp.dg.com>

	* i386.h (TARGET_SCHEDULE_PROLOGUE): New. Allows prologue to
	be emitted as asm or rtl.

	* i386.c (function_prologue): Emit prologue as asm.
	(override_options): Don't emit rtl for prologue if -fpic.

Tue Jun 11 14:41:01 1996  Michael Meissner  <meissner@tiktok.cygnus.com>

	* rs6000/eabi.asm (__eabi): Fix normal code so that it properly
	loads up r2/r13 if needed again.

	* rs6000/sysv4.h (CPP_ENDIAN_SPEC): Call cpp_endian_default, not
	cpp_endian_default_spec.

Mon Jun 10 15:10:56 1996  Jeffrey A. Law  <law@cygnus.com>

	* local-alloc.c (update_equiv_regs): Ignore insns that read or
	write registers that are likely to be spilled.

	* pa.h (cmp_type): Add CMP_PSI.
	(FUNCTION_POINTER_COMPARISON_MODE): Define.
	* pa.md (cmppsi): New expander.
	(plabel_dereference): New pattern

Mon Jun 10 14:56:14 1996  Michael Meissner  <meissner@tiktok.cygnus.com>

	* rs6000/sol2.h (SKIP_ASM_OP): Delete, Solaris accepts .space,
	like rest of PowerPC V4 ports.

	* rs6000/sysv4.h (ASM_OUTPUT_ALIGNED_LOCAL): Emit .lcomm if not
	using the .sbss area.  If using the .sbss area, put out
	appropriate .size directive.

Mon Jun 10 14:53:38 1996  Doug Evans  <dje@cygnus.com>

	* Move fork/exec/wait handling into file of its own.
	* pexecute.c: New file.
	* Makefile.in (pexecute.o): Add rule.
	(xgcc): Link in pexecute.o.
	(protoize,unprotoize): Likewise.
	* gcc.c (_WIN32): Don't include process.h or declare spawnv{,p}.
	(pexecute,pwait): Add prototypes.
	(PEXECUTE_{FIRST,LAST,SEARCH}): Define.
	(execv,execvp): Delete decls.
	(perror_exec): Delete.
	(pfatal_pexecute): New function.
	(pexecute support): Delete.
	(execute): -pipe not supported if _WIN32 or OS2.
	Update call to pexecute.  Fatal error if pexecute fails.  Call pwait.
	* protoize.c: Include gansidecl.h.
	(my_execvp): Delete.
	(choose_temp_base,pexecute,pwait): Declare.
	(PEXECUTE_{FIRST,LAST,SEARCH}): Define.
	(execvp): Delete decl.
	(usage): Fix typo.
	(gen_aux_info_file): Rewrite to use pexecute/pwait.

	* gcc.c (do_spec_1): Allow leading text in version string.
	Delete support for default minor number = 0.

Mon Jun 10 11:49:53 1996  Scott Christley <scottc@net-community.com>

	* objc/Makefile (libobjc.a): Don't delete the library.

	* objc/thr.h (objc_set_thread_callback): New function.
	(objc_thread_callback): Typedef for the hook function.
	* objc/thr.c (__objc_thread_detach_function): Clear thread storage.
	Call the thread hook function when first becoming multi-threaded.
	(objc_set_thread_callback): New function.

	* objc/selector.c (__sel_register_typed_name): Additional parameter
	that indicates whether name and type parameters are constant or not.
	* objc/runtime.h (__sel_register_typed_name): Likewise.
	* objc/init.c (__sel_register_typed_name): Likewise.

	* objc/init.c (__objc_init_protocols): Need to unlock mutex.

Mon Jun 10 11:44:44 1996  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* sparc/t-sol2 (gmon.o): Depend on stmp-int-hdrs.
	(crt1.o, crti.o, crtn.o, gcrt1.o): Depend on $(GCC_PASSES).

Mon Jun 10 11:29:46 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* flow.c (flow_analysis, find_basic_blocks): Ignore
	nonlocal_label_list for CALL_INSN that has a REG_RETVAL.

	* c-common.c (decl_attributes, case A_T_UNION): Don't look at fields
	of union if there aren't any.

Sat Jun  8 22:13:33 1996  Stan Cox <coxs@dg-rtp.dg.com>

	* i386.c (ix86_expand_prologue): Keep pic register load ahead
	of reference which may use a pic register.

Sat Jun  8 22:13:33 1996  Jim Wilson <wilson@cygnus.com>

	* i386.md (strlensi_unroll4, strlensi_unroll5): Use + not =& for
	constraint for input/output operand 2.

Sat Jun  8 22:13:33 1996  J"orn Rennecke (amylaar@meolyon.hanse.de)

	* i386.h (CONST_COSTS): Even integer constants have a cost.
	(RTX_COSTS): Take costs of subexpressions into account.
	If a multiply is actually a shift, use the cost of the shift.
	* i386/unix.h (SHIFT_DOUBLE_OMITS_COUNT): New macro.
	* i386/{gas, next, seq-gas}.h (SHIFT_DOUBLE_OMITS_COUNT): Redefine
	as zero.
	* i386.c (print_operand): new letter 's'.

Sat Jun  8 15:13:33 1996  Jim Wilson  <wilson@cygnus.com>

	* mips.c (override_options): Add vr4100 and vr4300 support.
	* mips.h (enum processor_type): Likewise.
	(MASK_4300_MUL_FIX, TARGET_4300_MUL_FIX): New macros.
	(TARGET_SWITCHES): Add -mfix4300 option.
	* mips.md (cpu, memory, imuldiv, adder, mult, divide): Add
	vr4100 and vr4300 support.
	(muldf3, mulsf3): Add vr4300 support.
	(muldf3_internal, muldf_r4300, mulsf3_internal, mulsf_r4300): New
	patterns.

Sat Jun  8 14:35:23 1996  David Edelsohn  <edelsohn@mhpcc.edu>

	* toplev.c (main): Re-enable -gxcoff+.

Sat Jun  8 14:20:14 1996  J.T. Conklin  <jtc@rtl.cygnus.com>

	* m68k/lb1sf68.asm (__{eq,ne,gt,lt,ge,le}{df,sf}2): Removed
 	extraneous comments, constants, labels, etc.

	* m68k/altos3068.h (TARGET_DEFAULT): Use MASK_* macros
 	instead of explicit constants in definitions or conditionals.
	* m68k/{apollo68, aux, ccur-GAS, dpx2, hp320, hp3bsd}.h: Likewise.
	* m68k/{hp3bsd44, isi-nfp, isi, linux-aout, linux}.h): Likewise.
	* m68k/{lynx-ng, lynx, m68k-none, m68k-psos, m68kv4}.h): Likewise.
	* m68k/{mot3300, netbsd, news, next, pbb, plexus, sun2o4}.h): Likewise.
	* m68k/{sun3, sun3n, tower}.h): Likewise.

Sat Jun  8 13:55:23 1996  Matthias Pfaller  (leo@marco.de)

	* ns32k.md (define_insns for ffs[qhs]i2): Deleted.
	(define_expand for ffssi2): New pattern.

Sat Jun  8 13:44:14 1996  Stephen L Moshier  (moshier@world.std.com)

	* reload.c (find_equiv_reg): Set need_stable_sp if GOAL is the
	stack pointer.

Sat Jun  8 13:36:05 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* function.c (fixup_var_refs_1, case SIGN_EXTEND): Handle
	paradoxical SUBREGs as first operand.
	(fixup_var_regs_1, case SET): Handle paradoxical SUBREGs as
	first operand of a ZERO_EXTRACT in SET_DEST.

	* c-common.c (enum attrs): Add A_FORMAT_ARG.
	(init_attribute): Initialize it.
	(decl_attributes, case A_FORMAT): Clean up error messages.
	(decl_attributes, case A_FORMAT_ARG): New case.
	(struct international_format_info): New structure and typedef.
	(international_format_list): New variable.
	(record_international_format): New function.
	(init_format_info): Call it for gettext, dcgettext, and dcgettext.
	(check_format_info): See if format arg is call to
	internationalization function.

Fri Jun  7 20:04:40 1996  Jim Wilson  <wilson@cygnus.com>

	* gcc.c (MULTILIB_SELECT): Delete definition.
	(multilib_select): Delete static initializer.
	(multilib_obstack, multilib_raw): New global variables.
	(multilib.h): Include inside multilib_raw definition.
	(main): Set multilib_select from multilib_raw.
	* genmultilib: Change output to be a sequence of short strings
	separated by commas rather than a single long macro definition.

	* cse.c (simplify_binary_operation, case MULT): Check for case
	where width is larger than HOST_BITS_PER_WIDE_INT, and upper most
	bit is set.  We can not generate a simple shift in this case.

	* gsyms.h (enum sdb_type): Add T_LNGDBL if EXTENDED_SDB_BASIC_TYPES.
	(enum sdb_masks): Add EXTENDED_SDB_BASIC_TYPES masks.
	* sdbout.c (gsyms.h): Include if CROSS_COMPILE is defined.
	(plain_type_1): Use TYPE_PRECISION instead of TYPE_SIZE.
	Add check for LONG_DOUBLE_TYPE_SIZE if EXTENDED_SDB_BASIC_TYPES.
	* i960.h (EXTENDED_SDB_BASIC_TYPES): Define.
	(PUT_SDB_TYPE): Delete now unnecessary shifting and masking.

	* i960.h (i960_output_move_{double,quad}): Declare.

Fri Jun  7 19:22:09 1996  Scott Christley <scottc@net-community.com>

	* Makefile.in (OBJC_THREAD_FILE): New variable.
	* configure (objc_thread_file): Set new variable to appropriate
	values based upon target operating system; default is `thr-single'.
	* objc/Makefile (OBJC_THREAD_FILE): Add target and dependency.
	(thr.o): Remove OS specific thread files as dependencies.
	* objc/thr-decosf1.c: Now compiles as a separate source file, so
	include appropriate Objective-C headers.
	* objc/thr-{mach,os2,posix,irix,single,solaris,win32}.c: Likewise.
	* objc/thr.c: Remove inclusion of source files.
	* objc/thr.h (__objc_thread_exit_status): Declare global variable.
	* objc/thr-pthreads.c: New file.

Fri Jun  7 19:04:04 1996  J.T. Conklin  <jtc@rtl.cygnus.com>

 	* m68k.h (TARGET_SWITCHES): Treat -m68302 like -m68000 and -m68332
	like -m68020; remove -mno-68302 and -mno-68332.

Fri Jun  7 12:06:12 1996  Per Bothner  <bothner@deneb.cygnus.com>

	* expr.c (safe_from_p):  Allow Chill-style variable-sized arrays.

Thu Jun  6 23:11:11 1996  Jeffrey A. Law  <law@cygnus.com>

	* h8300.c (h8300_monitor_function_p): New function.
	(h8300_os_task_function_p): Likewise.
	(os_task, monitor): Variables to note if the current
	function is an os_task or monitor.
	(function_prologue): Set monitor and/or os_task as needed.  Handle
	os_task and monitor functions.
	(function_epilogue): Clear monitor and os_task.  Handle os_task and
	monitor functions.
	(h8300_valid_machine_decl_attribute): Accept "OS_Task" and
	"monitor".

Thu Jun  6 20:01:54 1996  Per Bothner  <bothner@cygnus.com>

	* gen-protos.c (progname):  New variable (needed by cppalloc.c).
	(main):  Set progname.

	* cpplib.h (struct parse_file):  Removed.
	(CPP_FATAL_LIMIT, CPP_FATAL_ERRORS, CPP_OUT_BUFFER):  New macros.
	* cpphash.c (cpp_lookup):  Change struct parse_file -> cpp_reader.

	* cpplib.c (init_parse_option):  Renamed to cpp_options_init.
	(push_parse_file):  Renamed to ...
	(cpp_start_read):  Change to return 1 on success, 0 on failure.
	(init_parse_file):  Renamed to cpp_reader_init.
	* cppmain.c (main):  Use CPP_SET_WRITTEN and cpp_fatal.
	Use renamed function names, and return protocols.
	* fix-header.c (read_scan_file):  Likewise.

	* cpperror.c (cpp_message):  Generalize for "fatal" errors.
	(cpp_fatal):  New function (just calls cpp_message).
	* cpplib.c (cpp_start_read, cpp_handle_options, cpp_finish,
	parse_goto_mark, parse_move_mark):  Use cpp_fatal rather than fatal.

	* fix-header.c (check_macro_names):  Fix struct parse_file->cpp_reader.
	* cpplib.c (newline_fix):  Remove unused function.

Thu Jun  6 19:47:26 1996  Jim Wilson  <wilson@cygnus.com>

	Changes to support parameters and return values in multiple
	non-contiguous locations.
	* calls.c (expand_call): Handle NIL in PARALLEL.  Handle PARALLEL
	parameter in REG.  Handle PARALLEL return value in VALREG.
	(emit_library_call, emit_library_call_value): Abort for PARALLEL.
	(store_one_arg): Delete code for handling EXPR_LIST.
	* expr.c (emit_group_load, emit_group_store): New functions.
	(use_group_regs): New function.
	(emit_push_insn): Handle PARALLEL parameter in REG.
	(expand_assignment): Handle PARALLEL to_rtx.
	(store_expr): Handle PARALLEL target.
	* expr.h (emit_group_load, emit_group_store, use_group_regs): New
	declarations.
	* function.c (assign_parms): Handle PARALLEL parameter in ENTRY_PARM.
	* stmt.c (expand_value_return): Handle PARALLEL return_reg.

	* mips/abi64.h (TYPE_DEPENDENT_REG): Delete.
	* mips.c (function_arg): Return PARALLEL for structure with
	aligned double fields.
	(type_dependent_reg): Delete.
	(mips_function_value): Return PARALLEL for structure
	with two floating point fields.
	* mips/mips.md (call_value): Handle PARALLEL in operands[0].
	(call_value_multiple_internal2): New pattern.
	* pa.h (FUNCTION_ARG): General PARALLEL instead of EXPR_LIST.
	* rs6000.c (init_cumulative_args): Change EXPR_LIST to PARALLEL
	in comments.
	(function_arg): Generate PARALLEL instead of EXPR_LIST.

Thu Jun  6 18:21:27 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* function.c (assign_parms): Tighten up code that makes REG_EQUIV
	notes for parms.

	* fold-const.c (fold): Don't do anything with evaluated SAVE_EXPR.

Thu Jun  6 17:54:07 1996  J.T. Conklin  <jtc@cygnus.com>

	* m68k.h (TARGET_SWITCHES): Group all floating point options.
	When an fp option is selected, unset bits used for other mutually
	exclusive fp options.
	(OVERRIDE_OPTIONS): Remove special case for SUPPORT_SUN_FPA;
	bits used for 68881 and SKY are now cleared by TARGET_SWITCHES.

	* m68k.md (movsi_const0, movhi): Favor clr with TARGET_5200.
	(add[qhs]3): Don't use two addqw/subqw insns to add small integers to
	an address register with TARGET_68060.
	(stack push peephole): Use moveq.l with TARGET_5200 (when appropriate).

	* m68k.h (MASK_5200, TARGET_5200): New macros.
	(TARGET_SWITCHES): Add "m5200".
	(LEGITIMATE_INDEX_P): Add TARGET_5200 to conditional expression.
	* m68k.c (const_method): Do not synthesize long constants
 	with byte or word operations with TARGET_5200.
	* m68k.md: Disable byte and word arithmetic, rotate, integer
 	divide, dbcc, etc. insns for TARGET_5200.
	* m68k-none.h: (CPU_FPU_SPEC, CPP_SPEC, ASM_SPEC): Support m5200.

Thu Jun  6 17:32:32 1996  Paul Eggert  <eggert@twinsun.com>

	* fixproto (subdirs): Work around Solaris 2.5
	/usr/xpgr/bin/sed problem with \+\+.

Thu Jun  6 15:06:27 1996  Jim Wilson  <wilson@cygnus.com>

	* c-decl.c (grokdeclarator): Call pop_obstacks after creating
	TYPE_DECL.

	* loop.c (strength_reduce): If HAVE_cc0 defined, disable auto_inc_opt
	if it would put an insn between a cc0 setter/user pair.

Thu Jun  6 13:06:54 1996  Michael Meissner  <meissner@tiktok.cygnus.com>

	* rs6000/sysv4.h (LIBGCC2_WORDS_BIG_ENDIAN): If __sun__ is
	defined, treat that as little endian.

Wed Jun  5 20:04:53 1996  Jim Wilson  <wilson@cygnus.com>

	* i960.h (ROUND_TYPE_ALIGN): Add check for TYPE_PACKED.

	* sh.h (SHORT_IMMEDIATES_SIGN_EXTEND): Define.
	* sh.md (branch_true): Add comment about T-bit compares.

Tue Jun  4 23:08:34 1996  Per Bothner  <bothner@deneb.cygnus.com>

	* cpplib.h, cpplib.c:  Remove support for !STATIC_BUFFERS.
	* cpplib.h:  Use unsigned char rather than U_CHAR.
	* cpplib.h (cpp_reader):  Add destructor #ifdef __cplusplus.
	(cpp_cleanup):  New prototype.
	* cpplib.c (special_symbol, do_once, do_include, cpp_get_token):
	Compare cpp_buffer against CPP_NULL_BUFFER, not NULL.

	* cpplib.c (dump_special_to_buffer):  New function.
	(initialize_builtins):  Use it.

Wed Jun  5 19:10:22 1996  Jeffrey A. Law  <law@cygnus.com>

	* pa/pa.h (TEXT_SPACE_P): Fix thinko in last change.

Wed Jun  5 16:25:51 1996  Michael Meissner  <meissner@tiktok.cygnus.com>

	* rs6000.h (ASM_DEFAULT_SPEC): Default to "", not -mpwr.

	* sysv4.h (SUBTARGET_SWITCHES): Add -mshlib.
	(LINK_PATH_SPEC): Add -compat-bsd support from Solaris.
	(LINK_SPEC): Eliminate %{b} and %{G}, since they conflict with GCC
	switches.  Defer shared library support to LINK_SHLIB_SPEC.  Defer
	target selection to LINK_TARGET_SPEC.
	(LINK_SHLIB_SPEC): Provide two different versions, depending on
	whether shared libraries are default or not.  Make shared
	libraries not default until linker is fixed.
	(LINK_OS_*_SPEC): New specs for OS specific linker switches.
	(SUBTARGET_EXTRA_SPECS): Add new specs.

	* {sol2,sysv4}.h (LINK_SPEC): Move Solaris link into general link spec.

	* {sysv4,sysv4le,eabile}.h (LINK_TARGET_SPEC): Only pass -oformat
	to the linker if the user is changing the default endian format.

	* {sol2,linux,eabisim,eabilesim}.h (LINK_OS_DEFAULT_SPEC): Define
	to use the appropriate OS link spec.

Wed Jun  5 16:35:10 1996  Ian Lance Taylor  <ian@cygnus.com>

	* ginclude/stddef.h: Fix typo: TYPE_ptrdiff_t to _TYPE_ptrdiff_t.

Wed Jun  5 15:52:57 1996  Per Bothner  <bothner@kalessin.cygnus.com>

	* varasm.c (output_constructor):  Handle RANGE_EXPR in array index.

Wed Jun  5 13:45:54 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* sparc.md (*call_{address,symbolic}_struct_value_sp32): Allow
	operand 2 to be const0_rtx.

Tue Jun  4 16:43:44 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* varasm.c (make_decl_rtl): Don't update DECL_ASSEMBLER_NAME for
 	local statics.

	* c-decl.c (start_decl): Always set DECL_COMMON on statics.
	* varasm.c (assemble_variable): Only treat vars with DECL_COMMON
 	as common.

Tue Jun  4 14:55:49 1996  Jeffrey A. Law  <law@cygnus.com>

	* pa.c (reloc_needed): New function.
	* pa.h (TEXT_SPACE_P): Variables/constants with initializers
	requiring relocs never live in the text space.

Tue Jun  4 14:10:46 1996  Ian Lance Taylor  <ian@cygnus.com>

	* sh.c (fp_zero_operand): Do not accept minus zero.

	* sh.h (ASM_OUTPUT_LOOP_ALIGN): Define.
	(ASM_OUTPUT_ALIGN_CODE): Define.
	(ADJUST_INSN_LENGTH): Add in bytes that may be added by
	alignment.
	* sh.c (output_branch): Run ADJUST_INSN_LENGTH in reverse to get
	correct length.  Just call abort rather than returning "bad".
	(find_barrier): Adjust limits for possible alignment.

Tue Jun  4 09:35:05 1996  Michael Meissner  <meissner@tiktok.cygnus.com>

	* rs6000/t-solaris: New target config file for PowerPC Solaris
	without gas.

	* rs6000/t-ppc: Eliminate all multilib varients except for
	software floating point.

	* configure (powerpcle-*-solaris*): If not --with-gnu-as, use
	t-solaris, not t-ppc.

	* rs6000/sol2.h (MULTILIB_DEFAULTS): Add correct defaults for
	Solaris.

	* rs6000/sysv4.h (ASM_OUTPUT_SECTION_NAME): Clone from svr4.h, omit
	@progbits, since Solaris assembler doesn't like it.
	(LIB_SOLARIS_SPEC): If -msolaris-cclib, add libabi.a.
	({START,END}FILE_SOLARIS_SPEC): If -msolaris-cclib, use explicit
	pathnames for the Solaris compiler start/end files.
	(ASM_SPEC): Pass -mno-regnames to the assembler.

Mon Jun  3 19:40:10 1996  Jim Wilson  <wilson@cygnus.com>

	* mips/abi64.h (CPP_SPEC): Make -mabi=n32 the default.
	* mips/iris6.h (MIPS_ISA_DEFAULT, MIPS_ABI_DEFAULT, MULTILIB_DEFAULTS,
	ASM_SPEC, STARTFILE_SPEC, ENDFILE_SPEC, LINK_SPEC): Likewise.
	* mips.md (tablejump_internal4+1): Fix typo in condition.
	* mips/x-iris6 (CC, OLDCC): Define to be `cc -32'.

Mon Jun  3 07:57:35 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* tree.def ([LR]SHIFT_EXPR): Remove `a' from printed names.

	* sparc.md (call): Mask unimp operand to 12 bits, just like Sun.

	* expr.c (store_field): Fix typo in last change; update TARGET addr.

	* c-decl.c (start_struct): Set TYPE_PACKED from flag_pack_struct.
	(start_enum): Likewise but from flag_short_enums.
	(finish_enum): Test TYPE_PACKED, not flag_short_enums.
	* stor-layout.c (layout_decl): Test DECL_PACKED and TYPE_PACKED
	instead of flag_pack_struct.
	(layout_record): Likewise.

Sun Jun  2 19:41:14 1996  Jim Wilson  <wilson@cygnus.com>

	* mips.md (tablejump_internal3, tablejump_internal4): New patterns.
	(tablejump): Use them for PIC code.

Fri May 31 17:26:53 1996  Stan Cox  <coxs@dg-rtp.dg.com>

	* i386.c (ix86_expand_epilogue): Don't generate references to an
	exposed vacated stack.
	* i386.md (epilogue_set_stack_ptr): New.

Fri May 31 15:07:49 1996  Jim Wilson  <wilson@cygnus.com>

	* mips/abi64.h: Add -mabi=n32 support.
	(ABI_64BIT): Delete.
	(TARGET_LONG64, CPP_SPEC, STACK_BOUNDARY, MIPS_STACK_ALIGN,
	GP_ARG_LAST, FP_ARG_LAST, SUBTARGET_CONDITIONAL_REGISTER_USAGE,
	MAX_ARGS_IN_REGISTER, FUNCTION_ARG_PADDING, RETURN_IN_MEMORY,
	SETUP_INCOMING_VARARGS): Modify.
	(REG_PARM_STACK_SPACE): Ifdef out.
	(TARGET_DEFAULT, SUBTARGET_TARGET_OPTIONS): Define.
	* mips/iris6.h: Add -mabi=n32 support.
	(TARGET_DEFAULT, ASM_OUTPUT_INTERNAL_LABEL,
	ASM_GENERATE_INTERNAL_LABEL): Delete.
	(MULTILIB_DEFAULTS, ASM_SPEC, EXTRA_SECTION_FUNCTIONS,
	ASM_OUTPUT_ALIGNED_LOCAL, STARTFILE_SPEC, ENDFILE_SPEC, LINK_SPEC):
	Modify.
	(MIPS_ABI_DEFAULT, LOCAL_LABEL_PREFIX): Define.
	* mips.c: Add -mabi=n32 support.
	(mips_const_double_ok, mips_move_1word, mips_move_2words,
	function_arg, override_options, mips_asm_file_start,
	compute_frame_size, save_restore_insns, function_prologue,
	mips_expand_prologue, function_epilogue, mips_function_value): Modify.
	(mips_abi, mips_abi_string): Define
	* mips.h: Add -mabi=n32 support.
	(ABI_64BIT): Delete.
	(TARGET_OPTIONS, INITIAL_ELIMINATION_OFFSET, GO_IF_LEGITIMATE_ADDRESS,
	CONSTANT_ADDRESS_P, LEGITIMATE_CONSTANT_P, LEGITIMIZE_ADDRESS,
	ASM_OUTPUT_ADDR_DIFF_ELT): Modify.
	(enum mips_abi_type, SUBTARGET_TARGET_OPTIONS): Define.
	(mips_abi, mips_abi_string): Declare.
	* mips.md (jump, tablejump_internal1, tablejump_internal2): Add
	-mabi=n32 support.
	* mips/t-iris6 (MULTILIB_OPTIONS): Add -mabi=n32 support.
	* mips/xm-irix6.h (HOST_BITS_PER_LONG): Use _MIPS_SZLONG not 64.
	* ginclude/va-mips.h (va_start): Add -mabi=n32 support.

Fri May 31 14:45:30 1996  Michael Meissner  <meissner@tiktok.cygnus.com>

	* rs6000/sysv4.h (SUBTARGET_SWITCHES): Add -msolaris-cclib to use
	the Sun compiler's crt files instead of ours.
	({START,END}FILE_SOLARIS_SPEC): If -msolaris-cclib, use the Sun
	compiler's crt files instead of ours.
	(SUBTARGET_OVERRIDE_OPTIONS): Don't set -msdata=data for Solaris.
	(SBSS_SECTION_ASM_OP): For Solaris, don't use @nobits.
	(CPP_OS_SOLARIS_SPEC): Remove -Asystem(unix) and -Asystem(svr4).

	* rs6000/t-ppc{,gas} (MULTILIB*): Add Solaris specific multilibs.

	* rs6000/eabi{,le}sim.h (*_DEFAULT_SPEC): Rather than using
	duplicate definitions, just use %(...) so that there is only one
	place in the specs file where the switches are defined.
	* rs6000/{linux,sol2}.h (*_DEFAULT_SPEC): Ditto.

	* rs6000/sol2.h (CPP_PREDEFINES): Use the standard one in sysv4.h.
	(RS6000_ABI_NAME): Default is solaris.
	(ASM_OUTPUT_ALIGNED_LOCAL): Don't redefine.

	* rs6000/sol-c{i.asm,n.asm,c0.c}: Provide more things that Solaris
	needs for program startup.

Thu May 30 21:57:34 1996  Mike Stump  <mrs@cygnus.com>

	* tree.def (OFFSET_REF): Remove.
	* expr.c (expand_expr, case OFFSET_REF): Likewise.
	* tree.c (substitute_in_expr): Remove OFFSET_REF code.

Wed May 29 14:54:44 1996  Michael Meissner  <meissner@tiktok.cygnus.com>

	* rs6000/eabi.asm (__eabi): If not -mrelocatable, don't assemble
	relocatable functions, so that it can be assembled with the
	Solaris assembler.

	* rs6000/sysv4.h (CPP_SYSV_SPEC): Define _RELOCATABLE if
	-mrelocatable-lib as well as -mrelocatable.

	* rs6000.c (rs6000_file_start): New function to print some more
	information to the asm file.
	* rs6000/{sysv4,win-nt,rs6000}.h (ASM_FILE_START): Call it.

Tue May 28 15:21:24 1996  Michael Meissner  <meissner@tiktok.cygnus.com>

	* rs6000.h (FIRST_PSEUDO_REGISTER): Bump to 77.
	({FIXED,CALL_USED}_REGISTERS): Add support for fpmem pseudo register.
	(REG_ALLOC_ORDER, HARD_REGNO_{NREGS,MODE_OK}): Likewise.
	(REGISTER_MOVE_COST, reg_class,	REG_CLASS_{NAMES,CONTENTS}): Likewise.
	(REGNO_REG_CLASS, PREFERRED_RELOAD_CLASS): Likewise.
	(CLASS_{MAX_NREGS,CANNOT_CHANGE_SIZE,MAX_NREGS}): Likewise.
	(rs6000_stack, {,DEBUG_}REGISTER_NAMES): Ditto.
	(FPMEM_{REGNO_P,REGNUM}): New macros for fpmem register.
	(rs6000_fpmem_{offset,size}): New global variables.
	(RS6000_VARARGS_OFFSET): Fpmem temporary storage is located
	between outgoing arg area and varargs save area.
	(STARTING_FRAME_OFFSET, STACK_DYNAMIC_OFFSET): Likewise.
	(PREDICATE_CODES): Add fpmem_operand.
	({count_register,fpmem}_operand): Add declarations.

	* rs6000.c ({rs6000,alt}_reg_names): Add support for fpmem 'register'.
	(rs6000_fpmem_{offset,size}): New global variables.
	(fpmem_operand): Return true for fpmem registers.
	(gpc_reg_operand): The fpmem register is not general purpose.
	(includes_rshift_p): Add casts to silence warnings from Solaris
	PowerPC host compiler.
	(print_operand): Add 'v' operand type for the upper 16 bits of
	signed constants, to placate the Solaris assembler.
	({rs6000,debug}_stack_info): Add support for fpmem 'register'.
	(output_epilog): Likewise.

	* rs6000.md (addsi3,movsi,movsf,movdi): Use %v for constants with
	the upper 16 bits, to get the sign correct for PowerPC Solaris.
	(float{,uns}sidf2,fix_truncdfsi2): Rewrite to use 'register' 76
	for the memory location used to convert between float and integer.

	* sysv4.h (ASM_OUTPUT_{CON,DE}STRUCTOR): Use code laid down in
	.init and .fini for making constructors and destructors under
	Solaris.
	(ASM_SPEC): Do not pass -u to the assembler.
	(CC1_SPEC): -mrelocatable implies -meabi.

	* sol2.h (RS6000_ABI_NAME): Default ABI is Solaris, not System V.4.
	(ASM_OUTPUT_ALIGNED_LOCAL): Don't define Solaris specific method.

Mon May 27 06:39:13 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* expr.c (expand_builtin, case BUILT_IN_{LONG,SET}JMP):
	Convert block address from ptr_mode to Pmode.

Sun May 26 20:05:43 1996  Doug Evans  <dje@cygnus.com>

	* gcc.c (MSDOS pexecute): Call xmalloc, not malloc.

Sun May 26 08:31:54 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* configure (vax-*-{sysv}): tm_file and xm_file now list.
	(vax-*-ultrix): tm_file is now list.
	(we32k-att-sysv*): xm_file now list.
	* vax/xm-netbsd.h: Deleted.
	* vax/netbsd.h: No longer include vax.h and config/netbsd.h.
	* vax/ultrix.h, vax/vaxv.h: No longer include vax.h.
	* vax/xm-vaxv.h: No longer include xm-vax.h.
	* xm-we32k.h: No longer include xm-svr3.h.

	* configure: Separately set target_cpu_default for two
	case statements and then combine if both set.
	(alpha-*-winnt3): tm_file and xm_file are now list.
	Set target_cpu_default to 64.
	* winnt/config-nt.bat: Make .h files properly for Alpha.
	* alpha.h (WINDOWS_NT): No longer defined and used.
	(MASK_WINDOWS_NT, TARGET_WINDOWS_NT): New macros.
	(ASM_OUTPUT_ADDR_DIFF_ELT): Use TARGET_WINDOWS_NT.
	* alpha.c (output_prolog): Test TARGET_WINDOWS_NT, not WINDOWS_NT.
	* alpha.md: Likewise.
	* alpha/config-nt.sed: Properly set tm_file and {build,host}_xm_file.
	* alpha/win-nt.h: Don't include alpha.h
	(WINDOWS_NT): No longer define.
	* alpha/xm-winnt.h: Don't include xm-alpha.h and winnt/xm-winnt.h.

Fri May 24 12:34:22 1996  Doug Evans  <dje@seba.cygnus.com>

	* configure (cpu_type): Add case for arm.
	(sparclet-*-aout*): Delete extra_headers.

	* varasm.c (asm_output_bss): New argument DECL.
	Use ASM_DECLARE_OBJECT_NAME if defined.
	(asm_output_aligned_bss): Likewise.
	(assemble_variable): Pass DECL to ASM_OUTPUT{,_ALIGNED}_BSS.
	* arm/aout.h (ASM_OUTPUT_ALIGNED_BSS): Update.
	* h8300.h (ASM_OUTPUT_BSS): Update.
	* i386/linux.h (ASM_OUTPUT_ALIGNED_BSS): Update.
	* i386/sysv4.h (ASM_OUTPUT_ALIGNED_BSS): Update.
	* m68k/coff.h (ASM_OUTPUT_ALIGNED_BSS): Update.
	* m68k/linux.h (ASM_OUTPUT_ALIGNED_BSS): Update.
	* m68k/m68k-aout.h (ASM_OUTPUT_BSS): Update.
	* rs6000/sysv4.h (ASM_OUTPUT_ALIGNED_BSS): Update.
	* rs6000/win-nt.h (ASM_OUTPUT_ALIGNED_BSS): Update.
	* sparc/sysv4.h (ASM_OUTPUT_ALIGNED_BSS): Update.

Thu May 23 19:55:52 1996  Jim Wilson  <wilson@cygnus.com>

	* combine.c (set_nonzero_bits_and_sign_copies): Set reg_sign_bit_copies
	to one not zero to indicate value is unknown.

Thu May 23 18:39:24 1996  J.T. Conklin  <jtc@rtl.cygnus.com>

	* config/netbsd.h (SWITCH_TAKES_ARG): Add -R.
	(LINK_SPEC): Add %{R*}.

	* m68k/lb1sf68.asm: Construct exception masks at compile time
 	instead of or'ing in bits at run time.

Thu May 23 15:53:06 1996  Ian Lance Taylor  <ian@cygnus.com>

	* sh.md: Add new instruction types fp and fpdiv.  Set new
	instruction types where appropriate.  Add function unit fp.
	Claim that store instructions use function unit memory.

Thu May 23 00:36:19 1996  Jeffrey A. Law  <law@cygnus.com>

	* h8300.h (CONSTANT_ADDRESS_P): Don't accept CONST or HIGH on H8/300H.
	* h8300.md: Use "m" rather than "o" constraint everywhere appropriate.
	Cleanup use of "i" and "n" constraints.

Wed May 22 17:43:37 1996  Jim Wilson  <wilson@cygnus.com>

	* fixincludes (pthread.h): Add extern to __page_size* declarations
	for AIX 4.1.x.

	* combine.c (nonzero_bits): Don't assume arg pointer has same
	alignment as stack pointer.

Wed May 22 16:09:05 1996  Michael Meissner  <meissner@tiktok.cygnus.com>

	* rs6000/sysv4.h (LINK_START_DEFAULT_SPEC): Spell macro correctly.
	(LIB_DEFAULT_SPEC): Provide default version.

Wed May 22 11:23:57 1996  J"orn Rennecke (amylaar@meolyon.hanse.de)

	* i386.md (return_pop_internal): new pattern.
	(pop): disable emitting of bogus move instruction.
	* i386.c (ix86_expand_epilogue): use gen_return_pop_internal to
	simultanously return and pop args; removed stray semicolon.
	* config/linux-aout.h, config/linux.h (SET_ASM_OP): Added for
	__attribute__ ((alias ())) support.

Wed May 22 08:06:42 1996  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu.edu>

	* combine.c (init_reg_last_arrays, setup_incoming_promotions):
	Correct prototypes.

Tue May 21 13:42:17 1996  Jeffrey A. Law  <law@cygnus.com>

	* h8300.md (div and mode patterns): Rewrite.

	* pa.c (basereg_operand): Never accept a CONST_INT.

Tue May 21 12:26:40 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* pa/pa-hpux9.h, pa-osf.h (LINK_SPEC): Provide version for Snake.

Tue May 21 07:20:48 1996  Pat Rankin  <rankin@eql.caltech.edu>

	* vax.h (TARGET_NAME): Define unless already defined.
	(TARGET_VERSION): Print TARGET_NAME.
	* vax/vms.h (TARGET_NAME): Always redefine.
	(TARGET_VERSION): Delete; retain vax.h definition.

Mon May 20 14:00:44 1996  Jim Wilson  <wilson@cygnus.com>

	* sh.c (output_file_start): Delete misplaced semicolon.

Mon May 20 11:58:15 1996  Jeffrey A. Law  <law@cygnus.com>

	* reorg.c (relax_delay_slots): Call update_block before
	redirecting a branch past a redundant insn.

Sun May 19 16:40:53 1996  Philippe De Muyter  <phdm@info.ucl.ac.be>

	* Makefile.in (libobjc.a, sublibobjc.a): 'specs' added to
	dependencies.

Sun May 19 12:25:48 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* configure: Add new switch to provide default for cpu_type;
	delete numerous settings of it in main switch.
	(hppa): Reflect rerrangements below; use new configure features.
	* pa/pa-gas.h, pa/pa-pro-end.h: New files.
	* pa/pa1.h, pa/pa1-osf.h, pa/pa1-ghpux.h, pa/pa1-oldas.h: Deleted.
	* pa/pa1-ghpux9.h, pa/pa1-hpux9.h, pa/pa1-hpux.h: Deleted.
	* pa/pa1-ghiux.h, pa/pa1-hiux.h, pa/pa-ghpux.h: Deleted.
	* pa/pa-gux7.h, pa/pa-ghiux.h: Deleted.
	* pa/pa-hiux.h: No longer include pa-hpux.h.
	* pa/pa-hpux.h: No longer include pa.h.
	(TARGET_DEFAULT): Unset before setting.
	(LINK_SPEC): Provide option for pa1.
	* pa/pa-hpux7.h: No longer include pa.h.
	(HP_FP_ARG_DESCRIPTOR_REVERSED): Don't define here.
	* pa/pa-hpux9.h, pa/pa-oldas.h: No longer include pa-hpux.h.
	(TARGET_DEFAULT): Don't need to set here.
	* pa/pa-osf.h: No longer include pa.h.
	(TARGET_DEFAULT): Don't define; identical to default.
	* pa/pa-pro.h: No longer include pa.h.
	Move definitions after include to new file pa-pro-end.h.
	* pa.h (TARGET_SWITCHES): Include TARGET_CPU_DEFAULT.
	(TARGET_CPU_DEFAULT): Provide default value.
	(CPP_SPEC): Test TARGET_CPU_DEFAULT too.

	* Makefile.in (function.o): Includes bc-emit.h.
	(reg-stack.o): Includes insn-flags.h.
	* expr.h (function_value): Deleted; no such function.
	(bc_build_calldesc, bc_runtime_type_code): New declarations.
	* c-decl.c: Add prototypes for all static functions.
	* c-iterate.c: Likewise.
	* dbxout.c: Likewise.
	(adspath): Delete; never used and has numerous parse errors.
	* dwarfout.c: If not GNUC, make `inline' null; otherwise, leave alone.
	Add `static' to inline functions.
	Add prototypes for static function.
	* expr.c (bc_runtime_type_code): Delete redundant declaration.
	* function.c: Include bc-emit.h.
	({save,restore}_machine_status): Add prototype for args.
	(bc_runtime_type_code, bc_build_calldesc): Delete redundant decls.
	(bc_emit_trampoline, bc_end_function): Likewise.
	* reg-stack.c: Include insn-flags.h.
	Add prototypes for static functions.
	(gen_jump, gen_movdf, gen_movxf): Delete redundant declarations.
	(find_regno_note, emit_jump_insn_before, emit_label_after): Likewise.
	(swap_rtx_condition): Now static.
	* sdbout.c: Add prototypes for static functions.
	(sdbout_parms, sdbout_reg_parms): Delete extra parm to plain_type.

Sun May 19 11:50:10 1996  John Carr <jfc@mit.edu>

	* alpha.c (alpha_emit_conditional_move): Compare to 0 in correct mode.

Sat May 18 20:17:27 1996  Jim Wilson  <wilson@cygnus.com>

	* sh.c (prepare_move_operands): If source is r0, and dest is reg+reg
	MEM, then copy source to a pseudo-reg.
	* sh.md (untyped_call): New pattern.

	* unroll.c (copy_loop_body): When update split DEST_ADDR giv,
	check to make sure it was split.
	(find_splittable_givs): Fix reversed test of verify_addresses result.

Sat May 18 10:26:04 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* tree.c (unsave_expr_now): Avoid use of NULL_RTX since no rtl.h.

	* configure: Set cpu_default, tm_file, and xm_file early.
	Remove redundant settings of those, tmake_file, and xmake_file.
	Use ${tm_file} and ${xm_file} to refer to the main files.
	Sort some entries for consistency and reformat some others.
	(rs6000, powerpc): Remove bogus test on host == target.
	(alpha-*-linux): xm-linux.h no longer includes xm-alpha.
	(alpha-*-osf*): Remove redundant setting of target_cpu_default.
	(*-convex-*): Use target_cpu_default instead of separate .h files.
	(clipper-intergraph-clix*): clix.h no longer includes any files.
	(i860, i960, pdp11): Reflect removal of includes listed below.
	* alpha/xm-linux.h: No longer include xm-alpha.h.
	* clipper/clix.h: No longer include clipper.h and svr3.h.
	* convex.h: Provide a default for TARGET_DEFAULT.
	Take "or" of TARGET_DEFAULT and TARGET_CPU_DEFAULT everywhere.
	* convex/convex{1,2,32,34,38}.h: Deleted.
	* i860/bsd-gas.h: No longer include bsd.h.
	* i860/bsd.h: No longer include i860.h.
	* i860/fx2800.h: No longer include i860/sysv4.h.
	(OUTPUT_TDESC): No longer define.
	(ASM_FILE_END): Move redefinition to here.
	* i860/mach.h: No longer include i860.h.
	* i860/paragon.h, i860/sysv3.h: No longer include i860.h and svr3.h.
	* i860/sysv4.h: No longer include i860.h and svr4.h.
	(ASM_FILE_END): Delete redefinition from here.
	* i860/xm-fx2800.h: No longer include xm-i860.h.
	* i860/xm-paragon.h, i860/xm-sysv{3,4}.h: Deleted.
	* i960/i960-coff.h: No longer include i960.h and dbxcoff.h.
	* i960/vx960-coff.h: No longer include i960-coff.h.
	* i960/vx960.h: No longer include i960.h.
	* pdp11/2bsd.h: No longer include pdp11.h.

	* i370/i370.h: Renamed from mvs.h.
	* i370/i370.c: Renamed from mvs370.c.
	* i370/t-i370: Renamed from t-mvs.
	* i370/xm-i370.h: Renamed from xm-mvs.h.
	* configure (i370-*-mvs*): Use default names for all files.

	* c-parse.in: Update number of shift/reduce conflicts for objc.

Sat May 18 08:20:17 1996  Dennis Glatting  (dennisg@plaintalk.bellevue.wa.us)

	* m68k/next.h (FINALIZE_TRAMPOLINE): Add missing backslashes.

Fri May 17 19:57:20 1996  Pat Rankin  <rankin@eql.caltech.edu>

	* vax/xm-vms.h (dbxout_resume_previous_source_file): New macro.

Fri May 17 14:20:13 1996  Mike Stump  <mrs@cygnus.com>

	* expr.c (expand_expr, cond TARGET_EXPR): Make TARGET_EXPRs
	redoable for UNSAVE_EXPR.
	* stmt.c (expand_decl_cleanup): Wrap the cleanup in an UNSAVE_EXPR
	to that we can redo it.
	* tree.c (unsave_expr_now): Handle TARGET_EXPRs fully now.
	* tree.def (TARGET_EXPR): Add a fourth field so that TARGET_EXPRs
	are redoable.

	* expr.c (expand_expr, cond UNSAVE_EXPR): Move from the C++
	frontend to the backend where it belongs.
	* tree.c (unsave_expr{,_now}): Likewise.
	* tree.def (UNSAVE_EXPR): Likewise.
	* tree.h (unsave_expr{,_now}): Likewise.

Fri May 17 15:04:40 1996  Michael Meissner  <meissner@tiktok.cygnus.com>

	* rs6000.md (lshrsi3 insns): Add special case code for shifting by
	0 to avoid bad code generated with no optimization.

Fri May 17 13:50:55 1996  Jason Merrill  <jason@yorick.cygnus.com>

        * i386/unix.h (ASM_OUTPUT_MI_THUNK): Define.
	* i386/{att.h,bsd.h,sun386.h} (ASM_OUTPUT_MI_THUNK): Delete.

Fri May 17 13:34:28 1996  Ian Lance Taylor  <ian@cygnus.com>

	* fp-bit.c (_fpdiv_parts): Correct sign handling when
	dividing zero or infinity by something.

Fri May 17 12:36:36 1996  Doug Evans  <dje@seba.cygnus.com>

	Standardize option output in assembler files.
	* Makefile.in (toplev.o): Pass -DTARGET_NAME.
	* arm/aout.h (ASM_OUTPUT_OPTIONS): Delete.
	(ASM_FILE_START): Delete option output support.
	* arm.c (output_option, output_options, m_options): Delete.
	* m88k.c (output_file_start): Delete option output support.
	* m88k.h (ASM_COMMENT_START): Define.
	* mips.c (target_switches, print_options): Delete.
	(mips_asm_file_start): Put output of -G,Cpu,ISA here.
	* mips.h (ASM_COMMENT_START): Change from "\t\t#" to " #".
	* rs6000.c (output_option, m_options, output_options): Delete.
	* rs6000.h (ASM_OUTPUT_OPTIONS): Delete.
	(ASM_COMMENT_START): Define.
	(ASM_FILE_START): Delete option output support.
	* rs6000/sysv4.h (ASM_FILE_START): Likewise.
	* rs6000/win-nt.h (ASM_FILE_START): Likewise.  Delete duplicate.
	* sh.c (output_option, m_options, output_options): Delete.
	(output_file_start): Delete option output support.
	* sh.h (ASM_FILE_START): Likewise.
	(ASM_COMMENT_START): Define.
	* dwarfout.c (*): flag_verbose_asm renamed to flag_debug_asm.
	* flags.h (flag_debug_asm): Declare.
	* toplev.c (print_version): New function.
	(print_single_switch): New arguments pos, max, indent, sep, term.
	(print_switch_values): New arguments pos, max, indent, sep, term.
	Update call to print_single_switch.  Output options passed and
	options enabled.
	(MAX_LINE): New macro.
	(flag_debug_asm): Define.
	(compile_file): Output options to assembler file.
	(main): Recognize -dA.  Call print_version.  Update call to
	print_switch_values.
	(line_position): Deleted.

Fri May 17 10:50:44 1996  Stan Cox  (coxs@dg-rtp.dg.com)

	* i386.c (function_prologue, ix86_expand_prologue,
	function_epilogue, ix86_expand_epilogue): Generate prologue and
	epilogue as RTL (prior to scheduling) instead of emitting asm.
	(override_options): If only -march is given, make it the default -mcpu.
	* i386.h (FUNCTION_BEGIN_EPILOGUE): Renamed from FUNCTION_EPILOGUE.
	* i386.md (return, return_internal, prologue, prologue_set_got,
	prologue_get_pc, epilogue, leave, pop): New patterns for emitting
	asm from prologue and epilogue RTL.
	* m88k/t-dgux (T_CFLAGS): Delete.
	* m88k/x-dgux (X_CFLAGS): New.

Fri May 17 09:54:23 1996  Jim Meyering  (meyering@asic.sc.ti.com)

	* Makefile.in (stamp-crt{,S}): Use -o to avoid conflicts if
	both of these are built in parallel.

Fri May 17 08:55:19 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* expmed.c (store_split_bit_field): Don't assume the alignment
	of VALUE is the same as the record.

	* configure: Write #define TARGET_CPU_DEFAULT into tm.h
	instead of defining MAYBE_TARGET_DEFAULT in Makefile.
	(alpha-*-linux): Set target_cpu_default to 4 and xmake_file to none.
	(alpha-*-osf*): Set target_cpu_default to 4 if --gas.
	* Makefile.in (gcc.o, toplev.o, $(out_object_file)):
	Remove MAYBE_TARGET_DEFAULT.

	* combine.c (insn_cuid): New function.
	(INSN_CUID): Sometimes call it.

Fri May 17 08:12:37 1996  Scott Christley <scottc@net-community.com>

	* objc/sendmsg.c (objc_get_uninstalled_dtable): New function.
	* objc/objc-api.h (objc_get_uninstalled_dtable): New declaration.

        * objc/thr-os2.c, objc/thr-posix.c, objc/thr-mach.c: New files.
        * objc/THREADS.MACH: New file.

 	* objc/sendmsg.c (nil_method): Deleted from here.
 	* objc/nil_method.c: New file.
 	* Makefile (OBJC_O): Add dependency for nil_method.c.

	* objc/hash.c (hash_is_key_in_hash): New function.
	* objc/hash.h: Include objc/objc.h here instead of in objc/hash.c
	to get BOOL typedef.

Fri May 17 08:01:48 1996  Doug Rupp  (rupp@gnat.com)

	* msdos/configur.bat: If Ada subdirectory present, adjust Makefile.

Fri May 17 07:40:04 1996  Ulrich Drepper  (drepper@cygnus.com)

	* stddef.h: If need_wint_t defined, nothing in this file is needed.
	(_WINT_T, __WINT__TYPE__, wint_t): Define under certain circumstances.

Thu May 16 18:53:25 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* fold-const.c (fold, case EQ_EXPR): When folding VAR++ = CONST,
	mask the new const if VAR is a bitfield reference; also for VAR--.

Thu May 16 18:29:03 1996  Doug Evans  <dje@seba.cygnus.com>

	* varasm.c (function_section): Delete flag_function_sections support.
	(assemble_start_function): Put it here.  Use UNIQUE_SECTION if defined.

Wed May 15 13:35:11 1996  Michael Meissner  <meissner@tiktok.cygnus.com>

	* rs6000.{h,c,md} (rs6000_pic_register): Delete all uses, use
	pic_offset_table_rtx instead.

	* rs6000.md (move_to_float): Rewrite so that it uses the register
	allocator to allocate the stack temp, instead of calling
	rs6000_stack_temp.
	(fix_truncdfsi2): Likewise.

	* rs6000.c (rs6000_stack_temp): Delete, no longer used.

Wed May 15 10:39:27 1996  Jeffrey A. Law  <law@cygnus.com>

	* h8300.h (DBX_OUTPUT_MAIN_SOURCE_FILE_END): Define.

Sat May 11 07:42:59 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* expr.c (store_field): Support BLKmode bitfield if aligned on
	byte boundary using emit_block_move.
	(expand_expr, case COMPONENT_REF): Likewise.

Fri May 10 18:33:39 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* configure (alpha-*-linux): Reverse order in tm_file list.
	Delete xmake_file.
	* alpha/x-linux: Deleted.
	* alpha/linux.h (ASM_FINAL_SPEC): Add #undef.
	* alpha/xm-linux.h: Remove bogus trailing #endif.

	* loop.c (maybe_eliminate_biv_1): Disable all but two cases
	of biv elimination with givs and restrict those two cases to
	an ADD_VAL that is an address.

	* flow.c (mark_set_1, mark_used_regs): Clean up usages
	of ALL_NEEDED; change to SOME_NOT_NEEDED and set properly.

Fri May 10 11:37:38 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* toplev.c (compile_file): Don't warn about artificial functions
 	declared static and not defined.

Thu May  9 22:03:28 1996  Doug Evans  <dje@cygnus.com>

	* varasm.c (assemble_start_function): ASM_DECLARE_FUNCTION_NAME
	needn't consider bytecodes.
	(assemble_variable): ASM_DECLARE_OBJECT_NAME needn't
	consider bytecodes.
	* toplev.c (rest_of_decl_compilation): Likewise with
	ASM_FINISH_DECLARE_OBJECT.
	* arm/aof.h (ASM_DECLARE_{FUNCTION,OBJECT}_NAME): Delete bytecode
	support.
	* vax/vms.h (ASM_DECLARE_OBJECT_NAME): Likewise.

Thu May  9 19:36:13 1996  Jim Wilson  <wilson@cygnus.com>

	* sh.h (SET_ASM_OP): Define.

Thu May  9 13:31:58 1996  Michael Meissner  <meissner@tiktok.cygnus.com>

	* rs6000/sysv4.h (SUBTARGET_{SWITCHES,OPTIONS}): Add support for
	finer grain control on -msdata, so that eabi people can specify to
	compile sdata code to only use r13 instead of r2/r13.  Make
	-mrelocatable-lib turn off -msdata, just like -m relocatable does.
	(SUBTARGET_OVERRIDE_OPTIONS): Ditto.
	(ENCODE_SECTION_INFO): Move to rs6000.c.
	(ASM_SPEC): -msdata=eabi sets -memb also.
	(CC1_SPEC): -mno-sdata gets converted to -msdata=none.

	* rs6000.c (rs6000_sdata{,_name}): Add support for finer grain
	control on -msdata.
	(output_options, small_data_operand, print_operand): Likewise.
	(rs6000_select_section): Likewise.
	(rs6000_encode_section_info): Move here from sysv4.h, section
	names are stored as STRING nodes, not IDENTIFIER.

Wed May  8 21:04:49 1996  Doug Evans  <dje@cygnus.com>

	* function.c (aggregate_value_p): Return 1 if TREE_ADDRESSABLE.
	* pa.h (RETURN_IN_MEMORY): No longer test for TREE_ADDRESSABLE.

Tue May  7 13:42:57 1996  Jeffrey A. Law  <law@cygnus.com>

	* h8300.c: Include obstack.h.
	(bit_memory_operand): New function.
	(print_operand): Append ":16" to a memory reference to
	the tiny data area.
	(h8300_tiny_data_p): New function.
	(h8300_valid_machine_decl_attribute): Accept "tiny_data".  Fix typo.
	(h8300_encode_label): New function.
	(h8300_adjust_insn_length): References to the tiny data section
	are two bytes shorter than normal accesses on the H8/300H.
	* h8300.h (OK_FOR_U): Fix thinko.
	(ENCODE_SECTION_INFO): Encode info for tiny data variables.
	(STRIP_NAME_ENCODING): Define.
	* h8300.md (movqi insn): Fix length for a constant load.
	(movstrictqi, movhi, movstricthi): Likewise.
	(memory btst patterns): Add register to the constraints to keep
	reload happy.

	* h8300.h (OK_FOR_U): (const (plus (symbol_ref) (const_int)))
	is valid U operand if SYMBOL_REF_FLAG is set on SYMBOL_REF.
	* h8300.md (memory btst patterns): New patterns.

	* h8300.c (h8300_eightbit_data_p): Renamed from h8300_tiny_data_p.
	(h8300_eightbit_data_p): Check for the "eightbit_data"
	attribute instead of "tiny_data".
	(h8300_valid_machine_decl_attribute): Likewise.
	* h8300.h (ENCODE_SECTION_INFO): Call h8300_eightbit_data_p
	instead of h8300_tiny_data_p.

	* h8300.h (READONLY_DATA_SECTION): Define.
	(EXTRA_SECTIONS): Add in_readonly_data.
	(READONLY_DATA_SECTION_ASM_OP): Define.
	(EXTRA_SECTION_FUNCTINOS): Add readonly_data.

Tue May  7 09:26:24 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* varasm.c (make_decl_rtl): Update DECL_ASSEMBLER_NAME for local
 	statics.  Remove reference to flag_no_common.

Mon May  6 21:38:36 1996  Paul Eggert  <eggert@twinsun.com>

	* cpplib.c (skip_comment, handle_directive): Don't use uninit vars.

Mon May  6 18:47:36 1996  Doug Evans  <dje@cygnus.com>

	* dbxout.c (dbxout_function): When deciding to call dbxout_function_end
	change test from flag_function_sections to DECL_SECTION_NAME != NULL.

	* varasm.c (named_section): Accept any decl.

Mon May  6 16:41:08 1996  Stan Cox  (coxs@dg-rtp.dg.com)

	* final.c (final_scan_insn): Modify conditional moves whose cc is
	nonstandard.

	* c-common.c (decl_attributes): Chain multiple attributes correctly.

Mon May  6 15:41:43 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* stmt.c (expand_decl): Don't deduce alignment of SIZE from
	DECL_ALIGN; use TYPE_ALIGN instead.

	* function.c (assign_parms): Set RTX_UNCHANGING_P in stack_parm
	if parm is read-only.

	* c-common.c (truthvalue_conversion, case ADDR_EXPR): Don't
	treat address of external decl as always nonzero.

Mon May  6 11:33:57 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* c-decl.c (start_decl): Check -fno-common here.
	* varasm.c (assemble_variable): Instead of here.
	* final.c (end_final): Likewise.
	* c-common.c (init_attributes, decl_attributes): Add A_COMMON.

Mon May  6 11:12:39 1996  Mike Stump  <mrs@cygnus.com>

	* expr.c (expand_increment): Add third parameter to know when to
	ignore the result value.
	(store_constructor): Likewise
	(expand_expr, case {PRE,POST}{INC,DEC}REMENT_EXPR): Likewise.
	* tree.c (stabilize_reference): Always ignore the first operand of
	COMPOUND_EXPRs.

Mon May  6 13:14:45 1996  Jim Wilson  <wilson@cygnus.com>

	* sh.c (gen_shifty_op): Truncate VALUE to avoid out of bounds array
	access.

	* expr.c (expand_expr, case INDIRECT_REF): Delete obsolete code
	to special case a SAVE_EXPR operand.

Mon May  6 10:00:12 1996  Pat Rankin  <rankin@eql.caltech.edu>

	* vax.h (ASM_OUTPUT_MI_THUNK): Define.

Mon May  6 09:49:10 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* m68k/linux.h: Use the new trampoline definition.
	(TRAMPOLINE_TEMPLATE, TRAMPOLINE_SIZE): Deleted.
	(INITIALIZE_TRAMPOLINE): Changed.
	(FINALIZE_TRAMPOLINE, CLEAR_INSN_CACHE): New.

Mon May  6 09:43:55 1996  Patrick J. LoPresti  (patl@lcs.mit.edu)

	* rtlanal.c (rtx_addr_varies_p): Scan operands of type `E'.

Mon May  6 09:04:40 1996  H.J. Lu  (hjl@gnu.ai.mit.edu)

	* x-linux{,-aout} (BOOT_CFLAGS, STMP_FIXPROTO, STMP_FIXPROTO): Deleted.
	* config/t-linux (BOOT_CFLAGS, STMP_FIXPROTO, STMP_FIXPROTO): New,
	moved from x-linux.
	* t-linux-aout: New file.
	* configure (i[3456]86-*-linux*oldld*, i[3456]86-*-linux*aout*):
	Set tmake_file to t-linux-aout.

Sun May  5 22:13:22 1996  H.J. Lu  (hjl@gnu.ai.mit.edu)

	* Makefile.in (gxx_include_dir): Change to $(prefix)/include/g++.
	(old_gxx_include_dir): New - defined as $(libdir)/g++-include.
	(cccp.o, cpplib.o): Also pass OLD_GPLUSPLUS_INCLUDE_DIR (set
	from $(old_gxx_include_dir)).
	* cccp.c (include_defaults_array): For C++, also search
	OLD_GPLUSPLUS_INCLUDE_DIR.
	* cpplib.c (default_include): Likewise.
	* configure: Remove no-longer-needed support for --gxx-include-dir.

Sun May  5 21:59:53 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* c-lex.c (check_newline): Fix #pragma parsing; issue error message
 	for directive that starts with `p' but isn't `pragma'.

Sun May  5 13:13:40 1996  Jeremy Bettis  <jeremy@hksys.com>

	* objc/hash.c (hash_value_for_key): Prevent endless loop when 0 was
	stored in a hashtable.

Sun May  5 13:09:54 1996  Satoshi Adachi  (adachi@wisdom.aa.ap.titech.ac.jp)

	* m68k/newsgas.h (SET_ASM_OP, ASM_WEAKEN_LABEL): Define.

Sun May  5 12:48:08 1996  Stephen L Moshier  (moshier@world.std.com)

	* tree.c (build_real_from_int_cst): Remove spurious test for
	 REAL_IS_NOT_DOUBLE.

Sat May  4 12:17:58 1996  Richard Earnshaw (rearnsha@armltd.co.uk)

	* arm.h (ASM_OUTPUT_MI_THUNK): Moved here from aout.h.  Rewrite to be
	independent of the selected assembler, and to use optimal number of
	instructions.
	* arm/aout.h (ASM_OUTPUT_MI_THUNK): Delete.

	* arm/aout.h (ASM_OUTPUT_OPTIONS): Define.
	(ASM_FILE_START): Call ASM_OUTPUT_OPTIONS.
	(BSS_SECTION_OP): Define.
	(ASM_OUTPUT_ALIGN): Don't output anything if byte alignment is wanted.
	(ASM_OUTPUT_ALIGNED_BSS): Define.
	* arm.h (target_cpu_name): Delete.
	(TARGET_SWITCHES): Delete "be" and "le".
	(TARGET_OPTIONS): Delete "cpu-", add "tune=".
	(struct arm_cpu_select): New struct.
	(PROCESSOR_DEFAULT, TARGET_CPU_DEFAULT): Define.
	(EXTRA_CC_MODES, EXTRA_CC_NAMES): Add CC_Cmode.
	(CANONICALIZE_COMPARISON): Define.
	* arm.c (arm_select): Declare and initialize.
	(all_procs): Add arm7100.
	(arm_override_options): Parse arm_select structure to determine
	selected architecture and tuning parameters.
	(output_option, output_options): New functions.
	(arm_canonicalize_comparison): New function.
	(arm_gen_movstrqi): Don't add a writeback of the index registers for
	the last instructions.
	(arm_select_cc_mode): Detect case where mode is carry out of unsigned
	arithmetic.
	(output_lcomm_directive): Use bss_section (), and use alignment
	rather than rounding.
	(get_arm_condition_code): Handle CC_Cmode.
	(final_prescan_insn): Avoid boundary case where we would occasionally
	inline MAX_INSNS_SKIPPED+1 insns.  Allow call_insns to be inlined in
	APCS_32 mode if they are the last insn in the block.
	* arm.md (*addsi3_compareneg): Delete potentially unsafe insn.
	(*addsi3_compare_op[12]): New insns.
	(*compare_addsi2_op[01]): New insns.
	(*addsi3_carryin, *addsi3_carryin_alt[12]): New insns.
	(*cmp_ite1): Use arm_add_operand instead of arm_rhs_operand.
	* semi.h (PROCESSOR_DEFAULT): Default to PROCESSOR_ARM6.

Fri May  3 10:52:11 1996 1996  Stan Cox  (coxs@dg-rtp.dg.com)

	* i386.md (movesicc, movehicc) Pentium Pro conditional move insns.

	* i386.h (TARGET_PENTIUMPRO, TARGET_CMOVE, BRANCH_COST,
	ASM_OUTPUT_FUNCTION_PREFIX): New macros for conditional move.

	* i386.c (asm_output_function_prefix, function_prologue): Setup
	pic on Pentium Pro so a return will match the call.
	(print_operand, put_condition_code): Output conditional move suffixes.

Fri May  3 10:52:11 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* i386/{att.h,gas.h,bsd.h,sub386.h} (ASM_OUTPUT_MI_THUNK): Define.

Wed May  1 17:54:51 1996  Doug Evans  <dje@cygnus.com>

	* sparc.h (ASM_OUTPUT_MI_THUNK): Fix for sparc64, optimize.

Wed May  1 13:28:32 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* i386/linux.h (ASM_OUTPUT_ALIGNED_BSS): Define.
	* i386/sysv4.h: Likewise.
	* sparc/sysv4.h: Likewise.

Wed May  1 01:44:47 1996  Jeffrey A. Law  <law@cygnus.com>

	* h8300.c (h8300_adjust_insn_length): Adjust the cost of
	shifts by small constant values.
	* h8300.md: Remove names from many patterns which don't need them.
	(compare insns): Don't underestimate lengths.
	(andqi3 expander): Remove constrains.
	(andhi3): Don't underestimate length.
	(andsi3): Don't underestimate length.  Improve code when upper
	or lower half of destination is being cleared.
	(indirect_jump_h8300, indirect_jump_h8300h): Simplify.
	(shift insns): Remove useless "I" constraint.

	* h8300.md (bcs type): Remove "bcs" type attribute and all references.
	(bcs insns): Delete.  No longer needed.
	(setcc from bitfield): Rewrite to use zero_extract.  Provide
	QImode, HImode and SImode variants.

Tue Apr 30 18:13:09 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* svr4.h (SELECT_SECTION): If RELOC is true, put it in data.

Tue Apr 30 17:26:30 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* fold-const.c (fold): Don't call convert to recreate tree nodes
	we already have.

Tue Apr 30 16:52:41 1996  Jeffrey A. Law  <law@cygnus.com>

	* h8300.c (one_insn_adds_subs_operand): New function.
	(h8300_adjust_insn_length): New function.
	* h8300.h (ADJUST_INSN_LENGTH): Define.
	* h8300.md: Remove obsolete comments.
	(move patterns): Tweak constraints.
	(tst patterns): Use "register_operand" for predicate.
	(adds pattern): Use one_insn_adds_subs_operand to get length
	computation correct.
	(subs pattern): Similarly.
	(movstrhi): Remove unused expander.
	(fancy*, pxor, and-not patterns): Remove.  No longer needed.

Tue Apr 30 13:35:06 1996  Michael Meissner  <meissner@tiktok.cygnus.com>

	* rs6000/sol-c0.c (_start): Temporarily display calling
	__do_global_ctors, since the Solaris linker doesn't handle the
	relocations properly.

Mon Apr 29 13:03:12 1996  Doug Evans  <dje@cyguns.com>

	* sparc/vxsparc.h: sparc-aout.h renamed to aout.h.

Mon Apr 29 00:35:15 1996  Jeffrey A. Law  <law@cygnus.com>

	* h8300.c (names_small): Remove "BAD" postfix from %r7 byte registers.
	(rtx_equal_function_value_matters): Remove extra declaration.
	(output_simode_bld): New function.
	* h8300.h (NO_FUNCTION_CSE): Do define this.
	(reg_class): Remove LONG_REGS, SP_REG, SP_AND_G_REGS.
	(REG_CLASS_{NAMES,CONTENTS,FROM_LETTER}): Corresponding changes.
	(REGNO_REG_CLASS): Corresponding changes.
	(output_simode_bld): Declare.
	* h8300.md: Nuke comments for stuff which has been fixed.
	(all patterns): Remove references to register class "a" (SP_REGS)
	which no longer exists.
	(many patterns): Accept auto-inc auto-dec addresses in more cases.
	(zero_extendqisi2): New pattern for the H8/300.
	(zero_extendhisi2): Only use zero_extendhisi2_h8300 when not
	optimizing.
	(extendhisi2): Only use extendhisi2_h8300 when not optimizing.
	(extendqisi2): New pattern for the H8/300.
	(bitfield related patterns): Completely rewrite.
	(fancy_bclr, fancy_btst): Deleted.
	(addhi3 pattern for h8300): Handle case where we can't make matching
	constraints (works around hard to fix reload problem).
	(stack_pointer_manip): Delete.
	(and not patterns): New combiner patterns.

	* pa.h (DBX_OUTPUT_MAIN_SOURCE_FILE_END): Make sure the
	final $CODE$ subspace is in the $TEXT$ space.

Sun Apr 28 14:52:21 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* svr4.h (ASM_OUTPUT_SECTION_NAME): If no decl is specified,
 	make the section read/write data.

Sat Apr 27 10:28:59 1996  Michael Meissner  <meissner@wogglebug.tiac.net>

	* rs6000/t-ppcgas (MULTILIB_EXCEPTIONS): Don't allow -mrelocatable
	and -mcall-sysv-noeabi.

	* rs6000/sysv.h (SUBTARGET_OVERRIDE_OPTIONS): The -mcall-aix
	option sets -meabi.  Don't allow -mrelocatable without -meabi.

Fri Apr 26 16:10:46 1996  Doug Evans  <dje@cygnus.com>

	* sparc.md (*smacsi,*smacdi,*umacdi): Fix constraint on
	operand 0.

Fri Apr 26 14:36:33 1996  Michael Meissner  <meissner@tiktok.cygnus.com>

	* i960/t-{960bare,vxworks960} (MULTILIB*): Add
	soft-float multilib support.

Fri Apr 26 06:38:56 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* stor-layout.c (layout_decl): Turn off DECL_BIT_FIELD for BLKmode
	that's properly aligned and a multiple of a byte.

Thu Apr 25 22:43:19 1996  Doug Evans  <dje@cygnus.com>

	* i386/gas.h (ASM_OUTPUT_ALIGN): #if 0 out again.
	Undoes change of Apr. 9.
	* i386/go32.h (ASM_OUTPUT_ALIGN): Define.

Thu Apr 25 14:05:33 1996  Richard Kenner  (kennervlsi1.ultra.nyu.edu)

	* calls.c (expand_call): In inlining case, if BEFORE_CALLS is
	zero, start looking at first insn (one more place).

	* expr.c (expand_builtin, case BUILT_IN_SETJMP): CLOBBER the
	static chain after label at setjmp point.

Thu Apr 25 09:02:24 1996  Michael Meissner  <meissner@tiktok.cygnus.com>

	* rs6000.c (print_operand{,_address}): Correct compile error if
	TARGET_EABI is not defined.  Also, just call small_data_operand,
	without testing the ABI.
	(rs6000_select_section): Ditto.

	* rs6000/sysv4.h (CC1_SPEC): For -mcall-solaris, don't pass
	-mno-main-init.

Wed Apr 24 18:26:48 1996  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* collect2.c (handler): Delete export_file when we get a signal.

Wed Apr 24 14:54:44 1996  Jeffrey A. Law  <law@cygnus.com>

	* pa/pa1-ghpux.h (LINK_SPEC): Define.  Link in PA1.1 libraries
	by default.
	* pa/{pa1-ghpux9.h, pa1-hpux.h, pa1-hpux9.h}: Likewise.

Wed Apr 24 11:12:06 1996  Michael Meissner  <meissner@tiktok.cygnus.com>

	* configure (powerpc{,le}-*-eabi*): Use t-ppc{,gas}, instead of
	t-eabi{,gas}.
	(powerpc-*-linux,powerpcle-*-solaris): Add definitions.
	(MULTILIB_DIRNAMES): Pick shorter names for the multilib
	directories.
	(MULTILIB_*): Do not build -msdata versions of the library.  Build
	both system V and eabi versions of the libraries.

	* rs6000/t-ppc{,gas} (MULTILIB*): Don't build -msdata versions of
	the libraries.  Split -mcall-sysv libraries into
	-mcall-sysv-{eabi,noeabi} varients.
	(LIB2FUNCS_EXTRA): Add eabi.S, eabi-ctors.c.
	(eabi.S): Use eabi.S, not eabi.s for eabi.asm.
	(crt files): Add support for Solaris crt files.

	* rs6000/sol{2.h,-c0.c,-ci.asm,-cn.asm}: New files for Solaris.

	* rs6000/linux.h: New file for Linux-based GNU system support.

	* rs6000/eabi-ci.asm (ppc-asm.h): Include.
	(.got section): Correct attribute.

	* rs6000/eabi-c{i,n}.asm (.init,.finit): Add support for System V
	style .init/.fini sections, that constructors and destructors
	place a bl <func> in the appropriate section.

	* rs6000/eabi-ctors.c (__do_global_{c,d}tors): Call __init, and
	__fini to handle constructors/destructors in the .init, .fini
	sections.

	* rs6000/{eabi,sysv}.h: Move most eabi configuration stuff from
	eabi.h to sysv.h.

	* rs6000/sysv.h (TARGET_*): Convert -mcall-xxx from switch into option.
	Add -mcall-{solaris,linux,sysv-eabi,sysv-noeabi} options.
	Add -m{,no-}eabi options to control whether we adhere to
	the System V spec or the EABI spec.  Add -m{,no-}regnames to
	control whether registers are printed out as %r0 instead of 0.
	(SUBTARGET_OVERRIDE_OPTIONS): Add support for new -mcall options.
	(FP_ARG_MAX_REG): Use new macros for ABI conformance.
	(RS6000_REG_SAVE): Likewise.
	(STACK_BOUNDARY,BIGGEST_ALIGNMENT): If eabi, align to 8 byte
	boundary, otherwise 16 byte.
	(EXTRA_SECTIONS): Add .init, .fini sections.
	(*_SPEC): Reorganize so that the different targets all have sub
	specs that go in the specs file.  Add support for linux and
	Solaris targets.

	* rs6000/{sysv4,eabi}*.h (*_SPECS): Only override the default
	spec, all other specs moved to sysv4.h.
	(RS6000_ABI_NAME): Use RS6000_ABI_NAME to set the default ABI
	name, not TARGET_DEFAULTS.

	* rs6000/xm-sysv4.h (alloca): Properly declare alloca if compiler
	is not GCC.
	(DONT_DECLARE_SYS_SIGLIST): Define.

	* rs6000.c (rs6000_abi_name): New global for getting the results
	of -mcall-xxx.
	(rs6000_reg_names): New global for holding the normal register names.
	(alt_reg_names): Alternate register names for -mregnames.
	(rs6000_override_options): If -mregnames, copy alt_reg_names into
	rs6000_reg_names.
	(input_operand): Recognize ABI_SOLARIS.
	(small_data_operand, init_cumulative_args): Likewise.
	(function_arg{,_boundary,_advance,_partial_nregs}): Likewise.
	(function_arg_pass_by_reference, setup_incoming_varargs): Likewise.
	({rs6000,debug}_stack_info, output_{prolog,epilog}): Likewise.
	(print_operand): %$ prints '.' on Solaris, '$' elsewhere.
	(print_operand{,_address}): If not eabi, use @sdarel for small
	data references.
	(rs6000_stack_info): Only emit __eabi call if TARGET_EABI.

	* rs6000.h (*_SPECS): Move the System V specs to svr4.h.
	(ABI_SOLARIS): New ABI, mostly like System V.
	(EXTRA_CONSTRAINT): Use ABI_SOLARIS like ABI_V4.
	(RETURN_ADDRESS_OFFSET, (LEGITIMATE_SMALL_DATA_P): Likewise.
	(RETURN_IN_MEMORY): On Solaris, small structures are returned in regs.
	(REGISTER_NAMES): Use rs6000_reg_names array, instead of string
	literals.
	(DEBUG_REGISTER_NAMES): Define.
	(ADDITIONAL_REGISTER_NAMES): Add sp, toc aliases.
	(PRINT_OPERAND_PUNCT_VALID_P): Recognize $ as a punctuation char.

	* rs6000.md (got & call patterns): Use ABI_SOLARIS to mean the
	same as ABI_V4.
	(branch patterns): Use %$ for the current location, not just $.

	* va-ppc.h: Add Solaris support.

Tue Apr 23 20:02:13 1996  Doug Evans  <dje@cygnus.com>

	* sparc.c (output_function_prologue): In -mbroken-saverestore
	case, %sp = %fp - size.
	* sparc/t-splet (TARGET_LIBGCC2_CFLAGS): Delete.
	* sparc.md (isa attribute): Add sparclet.
	(*smacsi,*smacdi,*umacdi): Use match_operand, not match_dup
	for third arg.
	(*mulsidi3_sp32,const_mulsidi3,*umulsidi3_sp32,const_umulsidi3): Use
	smuld,umuld for sparclet.

Tue Apr 23 16:28:28 1996  Michael Meissner  <meissner@wombat.gnu.ai.mit.edu>

	* m68k/m68kemb.h: Add {LINK,STARTFILE,LIB,SUBTARGET}_SPEC, so
	gcc will use libgloss for supported target boards {idp,mvme,bcc}.

Tue Apr 23 16:00:28 1996  Per Bothner  <bothner@cygnus.com>

	* expr.c (store_constructor):  Fix test for missing array elements.

Tue Apr 23 11:21:09 1996  Stephen L Moshier  (moshier@world.std.com)

	* i386/sco5.h (BSS_SECTION_ASM_OP): Use `data' directive.
	(ASM_OUTPUT_ALIGNED_LOCAL): Generate an `lcomm' directive.
	(TARGET_DEFAULT): Include TARGET_IEEE_FP.
	(CPP_PREDEFINES): Include Di386.

Mon Apr 22 12:00:46 1996  David Edelsohn  <edelsohn@mhpcc.edu>

	* rs6000.h (BIGGEST_FIELD_ALIGNMENT): Delete.
	(ADJUST_FIELD_ALIGN, ROUND_TYPE_ALIGN): Define.
	* sysv4.h (BIGGEST_FIELD_ALIGNMENT): Delete.
	(ADJUST_FIELD_ALIGN, ROUND_TYPE_ALIGN): Undefine.
	* win-nt.h (ADJUST_FIELD_ALIGN, ROUND_TYPE_ALIGN): Undefine.

Sun Apr 21 17:52:36 1996  Jim Wilson  <wilson@cygnus.com>

	* m68k/coff.h (ASM_OUTPUT_SECTION): Test DECL before
	dereferencing it.

	* cse.c (cse_process_notes): Handle SUBREG like ZERO_EXTEND.

Sun Apr 21 12:57:12 1996  Doug Evans  <dje@cygnus.com>

	* arm/aout.h (ASM_OUTPUT_MI_THUNK): Define.

Sun Apr 21 09:50:09 1996  Stephen L Moshier  (moshier@world.std.com)

	* choose-temp.c: Include sys/types.h before sys/file.h for sco3.2v5.

Sun Apr 21 08:42:13 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* alpha.c (check_float_value): Cast args of bcopy to avoid warnings.

Sat Apr 20 21:22:21 1996  David Edelsohn  <edelsohn@mhpcc.edu>

	* stor-layout.c (layout_record): Use ADJUST_FIELD_ALIGN to modify
	alignment of fields within records.

Sat Apr 20 19:55:33 1996  Niels Moller  <nisse@lysator.liu.se>

	* c-parse.in (typespec): Made <SomeProtocol> equivalent
	to (id <SomeProtocol>).
	(non_empty_protocolrefs): New nonterminal.

Sat Apr 20 08:34:02 1996  J"orn Rennecke (amylaar@meolyon.hanse.de)

        * stmt.c (check_for_full_enumeration_handling): Call case_tree2list
	before checking for case expressions not corresponding to enumerators.
	(mark_seen_cases): If SPARSENESS == 2, exploit AVL order.
	Else, convert tree to list.
	Set xlo to -1 if SPARSENESS == 1 search failed.
	(expand_end_case): Avoid calling case_tree2list on list.

Fri Apr 19 16:54:57 1996  Michael Meissner  <meissner@tiktok.cygnus.com>

	* rs6000/win-nt.h (BIGGEST_FIELD_ALIGNMENT): Set to 64, not
	32 that AIX uses.

Fri Apr 19 16:40:38 1996  Stan Cox  <coxs@dg-rtp.dg.com>

	* i386.md (movqi): Handle QImode values in %si and %di.

Thu Apr 18 20:56:56 1996  Jim Wilson  <wilson@cygnus.com>

	* sh.md (lshrsi3): Change gen_ashlsi3_d to gen_lshrsi3_d.

Thu Apr 18 15:49:28 1996  Per Bothner  <bothner@cygnus.com>

	* sparc.h (ASM_OUTPUT_MI_THUNK): Define.

Thu Apr 18 15:19:26 1996  Jeffrey A. Law  <law@cygnus.com>

	* h8300.md: Remove "type" attribute from all patterns except those
	which have varying length branches.  Eliminate obsolete "type"
	attributes.  Add "length" and "cc" attributes to insns without them;
	fix some length computations.  Remove patterns which are commented out.

	* h8300.md (zero extension expanders and insns): Simplify, fix various
	length problems, provide optimized versions for the h8300 and h8300h.
	(sign extension expanders and insns): Likewise.  Make them
	nearly identical to zero_extension patterns and insns.

Wed Apr 17 18:50:16 1996  Jeffrey A. Law  <law@cygnus.com>

	* pa.h (SELECT_SECTION): Define.  Never place a something
	into the read-only data section if it requires a reloc.

	* pa.md (rotlsi3): Delete unnecessary and incorrect pattern.

Wed Apr 17 17:15:40 1996  Michael Meissner  <meissner@tiktok.cygnus.com>

	* rs6000.md (movdi): Never FAIL, even if operand[1] is not a
	general operand, due to being in volatile memory.

Wed Apr 17 15:20:10 1996  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* c-lex.c (check_newline): Rewrite to use tokens.
	(handle_sysv_pragma): Take a token instead of a character.
	* i960.c (process_pragma): Take the IDENTIFIER_POINTER tree
	node instead of a character.
	* sh.c (handle_pragma): Likewise.
	* config/nextstep.c (handle_pragma): Likewise.
	* h8300.c (handle_pragma): Likewise.
	* i960.h (HANDLE_PRAGMA): Expect/pass 2nd arg of NODE, not CH.
	* sh.h (HANDLE_PRAGMA): Likewise.
	* config/nextstep.h (HANDLE_PRAGMA): Likewise.
	* h8300.h (HANDLE_PRAGMA): Likewise.

Wed Apr 17 14:28:43 1996  Doug Evans  <dje@cygnus.com>

	* choose-temp.c: Don't include sys/file.h ifdef NO_SYS_FILE_H.
	#include <stdio.h>.
	(choose_temp_base): Make tmp,usrtmp, static locals.

Wed Apr 17 08:41:02 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* alpha.c (alpha_emit_conditional_move): Fix some bugs in previous
	change and do some cleanup.

Tue Apr 16 18:53:05 1996  Jim Wilson  <wilson@cygnus.com>

	* reload.c (push_reload): Add extra reload for inside of SUBREG if
	it is CONSTANT_P.

	* expr.c (do_store_flag): Rewrite last change to avoid compiler
	warnings.

	* reload.c (push_reload): When reuse an old reload, set the modes
	to be the larger of the old and new modes.

        * i960/t-960bare (xp-bit.c): Fix typo in source file name.

Tue Apr 16 18:09:16 1996  Jeffrey A. Law  <law@cygnus.com>

	* h8300.md (andhi3): If 2nd operand is a CONST_INT that meets 'J'
	constraint, then only two bytes are needed for this insn.  Improve
	code generated for the h8300h when both operands are registers.
	(iorhi3, xorhi3): Likewise.  Rework to be nearly identical to andhi3.
	(andsi3): If 2nd operand is a CONST_INT that meets the 'J'
	constraint, then only two bytes are need for this insn.
	Improve code generated for the h8300h regardless of the
	type of the 2nd operand.  Make this pattern work on the h8300 too.
	(iorsi3, xorsi3): Likewise.  Rework to be nearly identical to andsi3.
	(iorqi3_internal): Make this pattern look more like andqi3_internal.
	(one_cmplhi2, one_cmplsi2): Fix length computation for H8300H.

Tue Apr 16 17:43:25 1996  J"orn Rennecke (amylaar@meolyon.hanse.de)

	* i386.md (addsidi3_2): Handle non-MEM overlap case.

Tue Apr 16 16:59:49 1996  Richard Henderson  <rth@tamu.edu>

 	* function.c (expand_function_end): Allow TRAMPOLINE_TEMPLATE
	to be omitted on systems for which it is not cost effective.
	* varasm.c (assemble_trampoline_template): No such function
	if no TRAMPOLINE_TEMPLATE.
	* m68k.h: Greatly simplify the run-time trampoline code:
	(TRAMPOLINE_TEMPLATE, TRANSFER_FROM_TRAMPOLINE): Delete define.
	(TRAMPOLINE_SIZE, INITIALIZE_TRAMPOLINE): Changed.
	(TRAMPOLINE_ALIGN): No point aligning to cache line.
	(FINISH_INIT_TRAMPOLINE): New define.
	* m68k/next.h: Instead of redefining INITIALIZE_TRAMPOLINE,
	make use of the new FINISH_INIT_TRAMPOLINE.
	* m68k/{m68k.h,next.h,aux.h} (FINISH_INIT_TRAMPOLINE):
	Rename to FINALIZE_TRAMPOLINE.
	* m68k/{linux.h,m68kv4.h}: Override trampoline macros.

Tue Apr 16 16:02:50 1996  David Edelsohn  <edelsohn@mhpcc.edu>

	* combine.c (make_field_assignment): Allow XOR in final case.

Tue Apr 16 11:33:53 1996  J.T. Conklin  <jtc@rtl.cygnus.com>

	* m68k.h (TARGET_SWITCHES): Don't remove MASK_68060 with -msoft-float.

	* m68k.h (MULL_COST, MULW_COST, RTX_COSTS): Add costs for TARGET_68060.
	* m68k.md (ashlsi_16, lshrsi_16): Disable pattern for TARGET_68060;
	this special case is not faster for that cpu.

Tue Apr 16 10:54:55 1996  Eliot Dresselhaus  <dresselh@rft30.nas.nasa.gov>

	* alpha.c (alpha_emit_conditional_move): New function.
	* alpha.h (alpha_emit_conditional_move): Declare it.
	* alpha.md (cmov* define_expands): Use it.

Tue Apr 16 09:06:17 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* function.h (struct function): New field returns_pointer.
	* function.c (push_function_context_{to,from}): Save and restore
	current_function_returns_pointer.

	* config/svr4.h (ENDFILE_SPEC): Add missing `%s'.

	* configure (m68k-*-linux*aout*): Set tmake_file to m68k/t-linux-aout.
	(m68k-*-linux*): Set extra_parts.
	* m68k/t-linux (INSTALL_ASSERT_H): New definition.
	(CRTSTUFF_T_CFLAGS_S, TARGET_LIBGCC2_CFLAGS): New definitions.
	* m68k/t-linux-aout: New file.
	* m68k/linux.h (LIB_SPEC): Deleted.
	(BSS_SECTION_ASM_OP, ASM_OUTPUT_ALIGNED_BSS): Define.

	* m68k.h (TRAMPOLINE_ALIGNMENT): Specify alignment in bits, not bytes.

Tue Apr 16 08:53:17 1996  Philippe De Muyter  <phdm@info.ucl.ac.be>

	* final.c (final_scan_insn): Allow removal of redundant test and
	compare instructions that use clobbers.

Tue Apr 16 06:22:00 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* c-decl.c (clear_limbo_values): New function.
	(pushdecl): Call it for function body blocks.

	* objc/thr-decosf1.c (_objc_thread_id): Correct return type from
 	int to _objc_thread_id.

	* expr.c (expand_builtin, case BUILT_IN_LONGJMP): Make a decl
	for __dummy, so we can call make_function_rtl on it.

	* expr.c (expand_assignment): Don't pre-evaluate RHS if a CALL_EXPR
	with a variable-size return.

Mon Apr 15 17:38:45 1996  Ian Lance Taylor  <ian@cygnus.com>

	* fixincludes: Fix undefined VOIDFUNCPTR in VxWorks 5.2 <time.h>.

Mon Apr 15 15:12:16 1996  Jim Wilson  <wilson@cygnus.com>

	* expr.c (do_store_flag): Before calling exact_log2, remove any
	sign extension bits.

	* reload1.c (emit_reload_insns): Call reload_reg_reaches_end_p for
	every reg of multi-reg spill register.  Invalidate old info for multi
	reg spill registers when only part survives to the end.

Mon Apr 15 14:49:12 1996  Mike Stump  <mrs@cygnus.com>

	* function.c (preserve_temp_slots): Only preserve temporaries that
	happen to be at the current level.

Mon Apr 15 14:08:12 1996  Doug Evans  <dje@canuck.cygnus.com>

	* gansidecl.h: New file.
	* choose-temp.c: New file.
	* Makefile.in (xgcc): Depend on and link in choose-temp.o.
	(collect2): Likewise.
	(choose-temp.o): Add rule for.
	* collect2.c: #include "gansidecl.h".
	(const,PROTO): Delete.
	(P_tmpdir): Delete.
	(choose_temp_base): Declare as extern, delete internal copy.
	(main): Update call to choose_temp_base.
	* cpphash.c: #include "gansidecl.h".
	(NULL,const,volatile): Delete.
	* demangle.h: #include "gansidecl.h".
	(PROTO,PTR,const): Delete.
	* expr.h (const): Delete.
	* fix-header.c: #include "gansidecl.h".
	(const): Delete.
	* gcc.c: #include "gansidecl.h".
	(PROTO,VPROTO,PVPROTO,VPROTO,VA_START,NULL): Delete.
	(GENERIC_PTR,NULL_PTR,P_tmpdir): Delete.
	(choose_temp_base): Declare as extern, delete internal copy.
	(concat): Rewrite to take a variable number of arguments.
	(choose_temp_base_try,concat[346]): Delete.
	(translate_options,set_spec,process_command,do_spec_1,
	is_directory,main): Always use concat, not concat[346].  Pass
	NULL_PTR as trailing arg to concat.
	* genattr.c (main): Delete printing of "#define PROTO".
	* machmode.h: #include "gansidecl.h".
	(PROTO): Delete.
	(HAVE_MACHINE_MODES): Move definition to standard place.
	* recog.h: #include "gansidecl.h".
	(PROTO,const): Delete.
	* rtl.h: #include "gansidecl.h".
	(PROTO,VPROTO,PVPROTO,VPROTO,VA_START,STDIO_PROTO): Delete.
	(NULL,GENERIC_PTR,NULL_PTR): Delete.
	* tree.h: Likewise.

Mon Apr 15 08:49:20 1996  Tom May  (ftom@netcom.com)

	* cse.c (invalidate_skipped_set): Ignore CLOBBER after calling
	note_mem_written, not before.

Mon Apr 15 08:22:03 1996  Philippe De Muyter  <phdm@info.ucl.ac.be>

	* m68k.md (tstdi): Optimized for "d" case.
	(movqi): Allow moving "i" into "a".
	(zero_extendsidi2): Alternatives merged.
	(extendplussidi): Fixed when operands 0 and 1 share a register.
	(adddi_sexthishl32): Constraints reordered for better reload.
	(adddi3,subdi_sexthishl32,subdi3,negdi2): Likewise.
	(ashldi_sexthi): Accept "m" as operand 0.
	(ashldi_const32): Alternatives merged.
	(ashift patterns): Output "lsl" instead of "asl".
	(beq0_di): If condition codes already set, output only branch insn.
	(bne0_di,bge0_di,blt0_di): Likewise.
	* m68k.c (notice_update_cc, case ASHIFT{,RT}, LSHIFTRT, ROTATE{,RT}):
	Don't set CC_NO_OVERFLOW.
	* m68k.h (TARGET_SWITCHES): Fix typo in "c68000" entry.

Mon Apr 15 08:06:17 1996  Stephen L Moshier  (moshier@world.std.com)

	* real.c (eadd1): Check for overflow on X plus X.

Mon Apr 15 08:02:24 1996  J.T. Conklin  <jtc@cygnus.com>

	* i386/netbsd.h (HAVE_SYSV_PRAGMA): Removed definition.
	* config/netbsd.h (HAVE_SYSV_PRAGMA): Define.
	(SET_ASM_OP): Define.

Mon Apr 15 07:28:54 1996  Fila Kolodny <fila@ibi.com>

	* configure: Add definition for host= into Makefile.
	* build-make (CC): Pass -b $(host), not target.

Mon Apr 15 05:12:39 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* expr.c (bc_expand_increment): Change declaration to return void.

	* toplev.c (max_label_num_after_reload): New variable.
	(rest_of_compilation): Set it.
	* reorg.c (find_dead_or_set_registers): Only kill spill regs after
	label made before jump2.

	* combine.c (expand_field_assignment): Take SUBREG_WORD into
	account when have STRICT_LOW_PART.
	(make_extraction): Make a STRICT_LOW_PART at any low-order word.

Mon Apr 15 03:43:11 1996  Jeffrey A. Law  <law@cygnus.com>

	* flags.h (flag_function_sections): Declare.
	* toplev.c (flag_function_sections): Define.
	(compile_file): Add warnings when -ffunction-sections is
	used with -g, or profiling.  Disable -ffunction-sections
	when profiling is used.  Add warning when -ffunction-sections
	is used on a target that doesn't support it.
	* varasm.c (named_section): Make a copy of the section name
	in case the original is in temporary storage.
	(function_section): Set DECL_SECTION_NAME for each function
	if flag_function_sections is on and the target supports it.
	* dbxout.c (dbxout_function_end): New function.
	(dbxout_function): Call dbxout_function_end if using extensions
	and flag_function_sections is on.
	* sparc/sysv4.h (ASM_OUTPUT_SECTION_NAME): Prefix a function
	section's name with ".text%" when -ffunction-sections.

Sun Apr 14 19:37:43 1996  Doug Evans  <dje@cygnus.com>

	* toplev.c (main): Delete redundant test for -p used with -fbytecode.

Sun Apr 14 19:01:59 1996  John F. Carr <jfc@mit.edu>

	* c-decl.c (finish_enum): Don't crash if no type can represent all
	enumeration values.

Sun Apr 14 18:56:40 1996  J.T. Conklin  <jtc@rtl.cygnus.com>

	* m68k.md (ftruncdf2): Enable for m68060 systems.

Sun Apr 14 18:49:30 1996  David L. Reese  (david.reese@east.sun.com)

	* fold-const.c (range_test):  Don't convert hi_cst or lo_cst
	to unsigned when folding signed range tests.

Sun Apr 14 08:56:27 1996  Stephen L Moshier  <moshier@world.std.com>

	* real.h (ereal_from_{int,uint}): Add new arg, MODE.
	(REAL_VALUE_FROM{,_UNSIGNED}_INT): New arg, MODE.
	* real.c (ereal_from_{int,uint}): New arg, MODE.
	* cse.c (simplify_unary_operation): Add new arg to REAL_VALUE_FROM_INT.
	* fold-const.c (fold_convert): Likewise.
	* tree.c (real_value_from_int_cst): New arg, TYPE.
	Pass mode to REAL_VALUE_FROM_INT.
	(build_real_from_int_cst): Properly deal with truncation.

Sun Apr 14 08:21:29 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* combine.c (try_combine): When substituting in output of I2,
	ensure dest isn't clobbered in I2.

	* combine.c (combine_instructions): In initial scan of insns,
	handle a REG_INC note's affect on sign bit copies and nonzero bits.
	(set_nonzero_bits_and_sign_copies): Treat a zero SET arg as a CLOBBER.

Sun Apr 14 07:52:28 1996  Manor Askenazi  <manor@santafe.edu>

	* objc/encoding.c (objc_skip_typespec): Don't abort for _C_UNDEF.

Sat Apr 13 20:35:36 1996  Richard Henderson  (richard@atheist.tamu.edu)

	* configure (m68k-apple-aux*): Rework to take advantange
	of list of tm.h files and support all four gas/gld options.
	* m68k/auxas.h, m68k/auxgas.h, m68k/auxgld.h, m68k/auxld.h: New files.
	* m68k/auxstd.h, m68k/auxgnu.h: Deleted.

Sat Apr 13 20:18:11 1996  Stephen L Moshier  <moshier@world.std.com>

	* alpha.c (check_float_value): New function.
	* alpha.h (CHECK_FLOAT_VALUE): Define.
	(ASM_OUTPUT_FLOAT): Print the value in hex.

Sat Apr 13 15:08:45 1996  Doug Evans  <dje@canuck.cygnus.com>

	* configure: New target arm{,el}-*-coff*.
	(cpu_default): Sort alphabetically.
	* arm/coff.h: New file.
	* arm/t-bare: New file.
	* arm/arm.c (use_return_insn): Don't use return for naked functions.
	(arm_valid_machine_decl_attribute): New function.
	(arm_naked_function_p): New function.
	(output_func_prologue): Naked functions don't have prologues.
	(arm_expand_prologue): Likewise.
	(output_func_epilogue): Likewise with epilogues.

Sat Apr 13 11:31:32 1996  Jeffrey A. Law  <law@cygnus.com>

	* h8300.c (adds_subs_operand): Fix thinko in last change.

	* h8300.md (subhi3): Turn into a define_expand.
	(subhi3 using adds_subs): New pattern.
	(H8300 subhi): Derived from old subhi pattern.  Simplified.
	(H8300H subhi): Likewise.
	(subsi using adds_subs): New pattern.  Only used on H8300H.
	(subsi_h8300): Allow "a" registers as destination.
	(subsi_h8300h): Allow "a" registers as destination.  Simplify.

	* h8300.md (bcs_qiqi, bcs_hihi, bs_hiqi): Fix thinkos
	in last change.

Sat Apr 13 08:59:48 1996  Fila Kolodny <fila@ibi.com>

	* i370/mvs.h (ASM_DECLARE_FUNCTION_NAME): Don't write anything to
	asm file, because everything is handled in FUNCTION_PROLOGUE.

Sat Apr 13 07:55:38 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* alpha.c (alpha_emit_set_const_1): Renamed from
	alpha_emit_set_const and static.
	Remove change of Nov 26; again use normal mechanism for SImode.
	(alpha_emit_set_const): New function.

Fri Apr 12 18:19:39 1996  Jeffrey A. Law  <law@cygnus.com>

	* h8300.c (adds_subs_operand, output_adds_subs): New functions.
	* h8300.md (addhi3): Turn into a define_expand.
	(addhi3 using adds_subs): New pattern.
	(H8300 addhi): Derived from old addhi pattern.  Simplified.
	(H8300H addhi): Likewise.
	(addsi using adds_subs): New pattern.  Only used on H8300H.
	(addsi_h8300): Allow "a" registers as destination.
	(addsi_h8300h):  Simplify.  Allow "a" registers as destination.

	* h8300.md (bcs): New attribute type.
	(default_length): Compute correct length for bcs insns.
	(bcs_qiqi, bcs_hihi, bs_hiqi): Use new type and update
	to account for correct length computation.

	* h8300.md (movhi_internal): Demand at least one operand to be reg.
	(movsi_h8300{{,h}): Optimize loading certain constants.

	* h8300.h (NO_FUNCTION_CSE): Comment out.
	(FUNCTION_ARG_REGNO_P): Properly define for TARGET_QUICKCALL.
	(RETURN_IN_MEMORY): Don't return small structs in regs.

	* h8300.c (const_costs): -4 and 4 are cheap on the h8300h.
	(notice_update_cc): Remove references to "value2" field.

	* h8300.c (dosize): Remove unused "fped" argument.  All callers
	changed.  Handle add/sub of 5-8 bytes efficiently on the h8300h.

	* h8300.c (print_operand): Handle new 'R' case for accessing
	the 8-bit area.  Make code for 'Y' fall into code for 'R' when
	operand is not a register.  Update some comments.
	(h8300_tiny_data_p): New function.
	(h8300_valid_machine_decl_attribute): Handle "tiny_data" attribute.
	* h8300.h (OK_FOR_U): Handle memory references into 8-bit area.
	(ENCODE_SECTION_INFO): Mark SYMBOL_REFs which refer to 8-bit area.
	* h8300.md (many patterns): Use 'R' rather than 'X' for
	operands that may be memory accesses into the 8-bit area.
	(btst pattern): New pattern to set the cc0 (zbit) based on
	data in the 8-bit area.

	* h8300.md (one_cmplsi2): Fix length computation for h8300h.

Fri Apr 12 14:34:39 1996  Doug Evans  <dje@cygnus.com>

	* arm.md (*ldmsi,*stmsi): Use (mem (match_operand ...))
	to avoid using indirect_operand (reload problems).
	* arm/semi.h (CPP_PREDEFINES): Define __semi__ instead of semi.
	* arm/aout.h (ASM_GENERATE_INTERNAL_LABEL): Use LOCAL_LABEL_PREFIX.
	(ASM_OUTPUT_ADDR_{VEC,DIFF_ELT}): Likewise.

Fri Apr 12 09:43:30 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* dbxout.c (dbxout_typedefs): Don't emit incomplete types yet.
	(dbxout_symbol): Use DECL_ARTIFICIAL to recognize C++ implicit
	typedefs.

Thu Apr 11 21:56:26 1996  Doug Evans  <dje@cygnus.com>

	* i386/t-winnt (winnt.o): Rewrite based on .c.o rule.
	(oldnames.o,spawnv.o): Add rules for.

Thu Apr 11 07:25:06 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* calls.c (expand_call): In inlining case, if BEFORE_CALLS is
	zero, start looking at first insn.

	* expr.c (preexpand_calls, case CALL_EXPR): Rework to properly
	avoid expanding functions returning variable size objects.

	* integrate.c (expand_inline_function): When comparing types
	of formal and actual, use TYPE_MAIN_VARIANT.

Thu Apr 11 00:48:29 1996  Jeffrey A. Law  <law@cygnus.com>

	* h8300/lib1funcs.asm (modnorm): New function(s).  Like divnorm,
	but gets the sign bit right for modulo operations.
	(__modhi3, modsi3): Use modnorm.

	* h8300.c (dosize): On h8300h, do 4 byte adjusts using adds and subs.
	* h8300.h (LONG_LONG_TYPE_SIZE): Always make this 32bits.
	Reverses change from Apr 2, 1996.

Wed Apr 10 18:39:52 1996  Doug Evans  <dje@canuck.cygnus.com>

	* sparc.h (ASM_OUTPUT_INTERNAL_LABELREF): Delete.
	(FUNCTION_PROFILER): Use ASM_GENERATE_INTERNAL_LABEL instead.

	* sparc.c (sparc_override_options): 90c701 renamed to tsc701.
	(eligible_for_epilogue_delay_slot): Don't allow anything if
	-mbroken-saverestore.
	(output_function_prologue): Only use trivial save's if
	-mbroken-saverestore.
	* sparc.h (CPP_SPEC): Handle -mcpu={sparclet,tsc701}.
	(ASM_SPEC): Likewise.
	({MASK,TARGET}_BROKEN_SAVERESTORE): Define.
	(enum processor_type): 90C701 renamed to TSC701.
	* sparc.md (attr cpu): 90c701 renamed to tsc701.
	* sparc/splet.h (SUBTARGET_SWITCHES): Recognize -mbroken-saverestore.

Wed Apr 10 17:56:02 1996  Stan Cox  <coxs@dg-rtp.dg.com>

	* m88k/dgux.h (EXTRA_SPECS): Define.
	(ASM_SPEC,CPP_SPEC,STARTFILE_SPEC): Use EXTRA_SPECS.
	* m88k/dguxbcs.h (ASM_SPEC,CPP_SPEC,STARTFILE_SPEC): Use EXTRA_SPECS.
	* m88k/m88k.c (output_ascii) Output literal HT.

Wed Apr 10 17:28:37 1996  James Carlson  (carlson@xylogics.com)

	* configure: Work around AIX bug when defining SUBDIRS.

Wed Apr 10 17:22:42 1996  Paul Eggert  <eggert@twinsun.com>

	* cexp.y (parse_number): Don't reject long long constants unless
	pedantic.

Wed Apr 10 17:19:56 1996  Stephen L. Moshier  (moshier@world.std.com)

	* real.c (e64toe): Properly distinguish between NaN and infinity
	bit patterns for real-words-big-endian targets.

Wed Apr 10 17:17:26 1996  Richard Earnshaw  (rearnsha@armltd.co.uk)

	* real.c (endian): Add two explicit casts.
	(e64toe): Support ARM extended precision fp format.
	Check negative infinities properly for NaNs.
	(toe64): Support ARM extended precision fp format.

Tue Apr  9 12:53:31 1996  Doug Evans  <dje@canuck.cygnus.com>

	* i386/gas.h (ASM_OUTPUT_ALIGN): Define and use .balign.

Tue Apr  9 12:48:45 1996  Stephen L Moshier  (moshier@world.std.com)

	* sparc.c (fp_zero_operand): Exclude -0.0.

Tue Apr  9 07:11:24 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* alpha.c: Fix typo in last change.

	* tree.c (substitute_in_expr): Don't return new expression if
	nothing changed.
	(substitute_in_type): Deleted, not used.
	* tree.h (substitute_in_type): Delete declaration.

Mon Apr  8 16:30:18 1996  Jeffrey A. Law  <law@cygnus.com>

	* flow.c (find_auto_inc): Also make sure there aren't
	any sets of the incremented register between the memory
	reference and increment insn.

Mon Apr  8 15:41:14 1996  John Polstra  (jdp@polstra.com)

	* configure (i[3456]86-*-freebsdelf*): New target.
	* i386/freebsd-elf.h: New file.
	* i386/x-freebsd (USER_H): New define; to null.

Mon Apr  8 14:44:41 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* c-decl.c (finish_function): Always warn if main doesn't return int.

Mon Apr  8 13:01:37 1996  Michael Meissner  <meissner@tiktok.cygnus.com>

	* rs6000.c (got_operand): New function, returns true if the
	operand can go in V.4's GOT.
	(rs6000_pic_register): New variable.
	(output_epilog): Reset rs6000_pic_register.

	* rs6000.h (rs6000_pic_register, got_operand, flag_pic): Add decls.
	(PREDICATE_CODES): Add got_operand.

	* rs6000.md (movsi): Add support for V.4's -fpic and -FPIC.
	(init_v4_pic): Initialize the V4 pic register if needed.
	(call patterns): If -fpic/-fPIC, call function with @plt suffix.

	* t-eabigas (MULTILIB_DIRNAMES): Remove errant pic directory.

	* rs6000.c (output_prolog): Correctly store & restore the
	arguments to main in their correct save location, when calling the
	start function.

Mon Apr  8 13:01:37 1996  David Reese  <Dave.Reese@East.Sun.COM>

	* rs6000.c (print_operand): Use reg_names to print registers.

Fri Apr  5 00:40:19 1996  Jeffrey A. Law  <law@cygnus.com>

	* h8300.c (h8300_valid_machine_decl_attribute): Use underscores,
	not dashes in attributes.
	(h8300_funcvec_function_p): Corresponding changes.
	(h8300_interrupt_function_p): Likewise.

	* pa.h (INIT_CUMULATIVE_INCOMING_ARGS): Initialize "indirect"
	field to zero.

Thu Apr  4 12:52:11 1996  Jim Wilson  <wilson@chestnut.cygnus.com>

	* loop.c (combine_givs): Use new macro GIV_SORT_CRITERION.
	New variable giv_array.  Loop over giv_array instead of following
	next_iv links.
	(giv_sort): New function.
	* sh.h (GIV_SORT_CRITERION):  Define.

	* c-typeck.c (push_init_level): When output alignment for structure
	field, add check to verify it is the next field to be output.

Thu Apr  4 12:19:26 1996  David Mosberger-Tang  <davidm@AZStarNet.com>

	* alpha.c: Don't include stamp.h for Linux-based GNU systems.

Thu Apr  4 12:17:08 1996  Richardg Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* objc/Makefile: Rename thread* to thr*.
	* objc/thread.c: Rename thread-* to thr-*.
	* objc/thr-decosf1.c: Renamed from thread-decosf1.c
	* objc/thr-irix.c: Renamed from thread-irix.c.
	* objc/thr-single.c: Renamed from thread-single.c.
	* objc/thr-solarius.c: Renamed from thread-solaris.c.
	* objc/thr-win32.c: Renamed from thread-win32.c.
	* objc/objc-api.h: Include thr.h, not thread.h.
	* objc/runtime.h, objc/sarray.h: Likewise.

	* i386.md (ashldi3_const_int): Don't recognize if won't match
	constraint of operand 2.

Thu Apr  4 11:40:55 1996  Michael Meissner  <meissner@tiktok.cygnus.com>

	* config/fp-bit.c (EXTENDED_FLOAT_STUBS): If EXTENDED_FLOAT_STUBS
	is defined, define all of the XF/TF functions that might be
	generated that we don't have code for yet.

	* i960/t-(vxworks960,960bare): (LIB2FUNCS_EXTRA): Make and
	compile xp-bits.c that defines EXTENDED_FLOAT_STUBS.

	From: steve chamberlain  <sac@slash.cygnus.com>
	* i386/x-cygwin32 (LANGUAGES): Delete.
	* i386/xm-cygwin32.h (EXECUTABLE_SUFFIX): Set to .exe.
	* rs6000/xm-cygwin32.h (EXECUTABLE_SUFFIX): Set to .exe.

Wed Apr  3 14:10:16 1996  Jim Wilson  <wilson@chestnut.cygnus.com>

	* expr.c (emit_push_insn): Clobber register only if it is non-zero.

Wed Apr  3 11:31:55 1996  Jeffrey A. Law  <law@cygnus.com>

	* h8300.h (h8300_funcvec_function_p): Declaration moved here.
	* h8300.c (h8300_funcvec_function_p): Declaration removed from here.
	* h8300.md (tstqi): Tweak to work like other tstXX patterns.
	(cmphi): Turn into a define_expand.  Add two anonymous
	matterns to match the output of the cmphi expander.
	(cmpsi): Accept constants as the second input operand.

Tue Apr  2 13:52:30 1996  Jeffrey A. Law  <law@cygnus.com>

	* h8300.md (movqi_internal): Remove useless alternative(s).  Fix
	lengths and simplify by reordering remaining alternatives.
	(movstrictqi, movhi_internal, movstricthi): Likewise.
	(movsi_h8300h, movsf_h8300h): Likewise.

	* h8300/h8300.c (extra_pop): Remove unused variable.
	(current_function_anonymous_args): Likewise.
	(function_prologue): Remove incorrect varargs/stdarg
	related code.
	(function_epilogue): Likewise.
	(function_arg): Never pass unnamed arguments in registers.
	* h8300.h (LONG_LONG_TYPE_SIZE): Use 64bits when ints are 32bits.
	(SETUP_INCOMING_VARARGS): Remove definition.

Mon Apr  1 16:59:48 1996  Ian Lance Taylor  <ian@cygnus.com>

	* fixincludes: Fix signal prototype on SunOS to avoid pedantic C++
	error.

Mon Apr  1 16:16:34 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* expr.c (get_inner_reference): When finding mode to access bitfield
	that ends up properly aligned, use mode class of its type unless
	type's mode was BLKmode.

Mon Apr  1 13:45:30 1996  Jeffrey A. Law  <law@cygnus.com>

	* h8300.c (interrupt_handler): Renamed from pragma_interrupt.
	All references changed.
	(function_prologue): Set interrupt_handler if the current
	function has the "interrrupt-handler" attribute.
	(small_call_insn_operand): New function.
	(h8300_interrrupt_function_p): New function.
	(h8300_funcvec_function_p): New function.
	(h8300_valid_machine_decl_attribute): New function.
	* h8300.h (VALID_MACHINE_DECL_ATTRIBUTE): Define.
	* h8300.md (call insns): Handle calls through the
	function vector.  Indirect calls and calls through
	the function vector have a length of two bytes.

See ChangeLog.10 for earlier changes.

Use a consistent time stamp format in ChangeLog entries.
Not everyone has Emacs 20 yet, so stick with Emacs 19 format for now.

Local Variables:
add-log-time-format: current-time-string
End:
