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 occurrences 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): Recognize 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 nonzero 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
	nonzero 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): Recognize 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 statements.
	* 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 nonzero.

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
	parameter.  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 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 occurred.
	(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 overridden 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
	nonexistent 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 nonzero.

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 H8S 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 H8S.
	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 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 H8S.
	* h8300.c (h8300_init_once): Handle the H8S (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 H8S.  Minor cleanups.
	(function_epilogue): Likewise.
	(asm_file_start): Emit ".h8300s" when compiling for the H8S.
	* h8300/h8300.h (CPP_SPEC): Handle the H8S.
	(TARGET_H8300S): New target.
	(TARGET_SWITCHES): Add "-ms" and "-mno-s".
	(BITS_PER_WORD): Handle the H8S (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 H8S just like H8/300H
	throughout the entire file.
	* t-h8300 (MULTILIB_OPTIONS): Build "-ms" libraries too.
	(MULTILIB_DIRNAMES): Put H8S libraries in "h8300s" directory.
	* h8300/lib1funcs.asm: Emit ".h8300s" pseudo-op when generating
	h8300s object files.  Otherwise treat the H8S just like the H8/300H.
	* ginclude/stdarg.h: Handle the H8S.
	* 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 nonzero.

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.

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

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