OSDN Git Service

Update mainline egcs to gcc2 snapshot 971021.
authorlaw <law@138bc75d-0d04-0410-961f-82ee72b054a4>
Sun, 2 Nov 1997 21:19:36 +0000 (21:19 +0000)
committerlaw <law@138bc75d-0d04-0410-961f-82ee72b054a4>
Sun, 2 Nov 1997 21:19:36 +0000 (21:19 +0000)
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@16278 138bc75d-0d04-0410-961f-82ee72b054a4

169 files changed:
gcc/ChangeLog.11
gcc/INSTALL
gcc/Makefile.in
gcc/acconfig.h
gcc/bc-optab.c
gcc/bitmap.c
gcc/bitmap.h
gcc/c-decl.c
gcc/c-lang.c
gcc/c-lex.c
gcc/c-parse.c
gcc/c-typeck.c
gcc/calls.c
gcc/cccp.c
gcc/collect2.c
gcc/combine.c
gcc/config.in
gcc/config.sub
gcc/config/alpha/alpha.c
gcc/config/alpha/alpha.h
gcc/config/alpha/alpha.md
gcc/config/alpha/linux.h
gcc/config/alpha/osf12.h
gcc/config/alpha/osf2or3.h
gcc/config/alpha/vms.h
gcc/config/arc/arc.c
gcc/config/arc/arc.h
gcc/config/arc/arc.md
gcc/config/i386/freebsd.h
gcc/config/i386/i386.c
gcc/config/i386/i386.h
gcc/config/i386/i386.md
gcc/config/i386/rtems.h
gcc/config/i386/sco5.h
gcc/config/i960/i960.h
gcc/config/i960/rtems.h
gcc/config/m68k/m68k.c
gcc/config/m68k/m68k.md
gcc/config/m68k/rtems.h
gcc/config/m88k/dolph.h
gcc/config/m88k/m88k.c
gcc/config/m88k/sysv3.h
gcc/config/mips/iris6.h
gcc/config/mips/mips.c
gcc/config/mips/mips.h
gcc/config/mips/mips.md
gcc/config/mips/rtems64.h
gcc/config/mn10200/mn10200.c
gcc/config/mn10300/mn10300.c
gcc/config/pa/pa.c
gcc/config/pa/pa.md
gcc/config/pa/rtems.h
gcc/config/pa/x-pa
gcc/config/ptx4.h
gcc/config/rs6000/rs6000.c
gcc/config/rs6000/rs6000.md
gcc/config/rs6000/rtems.h
gcc/config/rs6000/sysv4.h
gcc/config/sh/rtems.h
gcc/config/sh/sh.h
gcc/config/sparc/sol2.h
gcc/config/sparc/sparc.c
gcc/config/sparc/sparc.md
gcc/config/sparc/sysv4.h
gcc/configure
gcc/configure.in
gcc/cp/ChangeLog
gcc/cp/Make-lang.in
gcc/cp/decl.c
gcc/cp/parse.c
gcc/cp/parse.h
gcc/cp/typeck.c
gcc/cplus-dem.c
gcc/cpp.info [deleted file]
gcc/cpp.info-1 [deleted file]
gcc/cpp.info-2 [deleted file]
gcc/cpp.info-3 [deleted file]
gcc/cpplib.c
gcc/cse.c
gcc/dbxout.c
gcc/dwarf2.h
gcc/dwarf2out.c
gcc/dwarfout.c
gcc/emit-rtl.c
gcc/except.c
gcc/except.h
gcc/expmed.c
gcc/expr.c
gcc/expr.h
gcc/f/Make-lang.in
gcc/f/runtime/configure
gcc/f/runtime/libU77/configure
gcc/final.c
gcc/fixinc.math
gcc/fixincludes
gcc/flow.c
gcc/fold-const.c
gcc/frame.c
gcc/function.c
gcc/gcc.c
gcc/gcc.info [deleted file]
gcc/gcc.info-1 [deleted file]
gcc/gcc.info-10 [deleted file]
gcc/gcc.info-11 [deleted file]
gcc/gcc.info-12 [deleted file]
gcc/gcc.info-13 [deleted file]
gcc/gcc.info-14 [deleted file]
gcc/gcc.info-15 [deleted file]
gcc/gcc.info-16 [deleted file]
gcc/gcc.info-17 [deleted file]
gcc/gcc.info-18 [deleted file]
gcc/gcc.info-19 [deleted file]
gcc/gcc.info-2 [deleted file]
gcc/gcc.info-20 [deleted file]
gcc/gcc.info-21 [deleted file]
gcc/gcc.info-22 [deleted file]
gcc/gcc.info-23 [deleted file]
gcc/gcc.info-24 [deleted file]
gcc/gcc.info-25 [deleted file]
gcc/gcc.info-26 [deleted file]
gcc/gcc.info-27 [deleted file]
gcc/gcc.info-28 [deleted file]
gcc/gcc.info-3 [deleted file]
gcc/gcc.info-4 [deleted file]
gcc/gcc.info-5 [deleted file]
gcc/gcc.info-6 [deleted file]
gcc/gcc.info-7 [deleted file]
gcc/gcc.info-8 [deleted file]
gcc/gcc.info-9 [deleted file]
gcc/gcc.texi
gcc/genattrtab.c
gcc/ginclude/stdarg.h
gcc/ginclude/va-v850.h
gcc/ginclude/varargs.h
gcc/global.c
gcc/install.texi
gcc/integrate.c
gcc/invoke.texi
gcc/jump.c
gcc/local-alloc.c
gcc/loop.c
gcc/mips-tfile.c
gcc/objc/Make-lang.in
gcc/objc/objc-parse.c
gcc/obstack.h
gcc/pexecute.c
gcc/profile.c
gcc/real.c
gcc/real.h
gcc/reg-stack.c
gcc/regclass.c
gcc/reload.c
gcc/reload1.c
gcc/reorg.c
gcc/rtl.c
gcc/rtl.h
gcc/rtl.texi
gcc/rtlanal.c
gcc/sched.c
gcc/sdbout.c
gcc/stmt.c
gcc/stor-layout.c
gcc/tm.texi
gcc/toplev.c
gcc/tree.c
gcc/tree.h
gcc/unroll.c
gcc/varasm.c
gcc/version.c

index 34d7755..f770cc6 100644 (file)
+Mon Oct 20 17:29:55 1997  Doug Evans  <dje@cygnus.com>
+
+       * sparc/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/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/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): Ditto.
+       (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
+       we are packing a 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 we're
+       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_addres 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 (alloca): Likewise.
+       * rs6000/xm-rs6000.h (alloca): Likewise.
+       * 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 for fixincludes.
+
+       * 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/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 the 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 a
+       mode wider than HOST_WIDE_INT, then the high word of a CONST_INT
+       is derived from the sign bit of the low word.
+
+Tue Sep 16 00:13:20 1997  Nick Clifton  <nickc@cygnus.com>
+
+       * v850.c ({register,pattern}_is_ok_for_epilogue): New functions.
+       (construct_{save,restore}_jr, pattern_is_ok_for_prologue): Likewise.
+       * v850.h (pattern_is_ok_for_{pro,epi}logue): New predicates.
+       (register_is_ok_for_epilogue): Likewise.
+       * v850.md: Replace prologue and epilogue patterns with a
+       match_parallel pattern.
+       * v850.c (output_move_single_unsigned): Cope with zero
+       extending and moving between registers at the same time.
+
+Mon Sep 15 22:02:46 1997  Jeffrey A Law  (law@cygnus.com)
+
+       * fixinc.math: New file to fix math.h on some systems.
+       * configure.in (*-*-freebsd*, *-*-netbsd*): Use fixinc.math on these
+       systems.
+   
+Mon Sep 15 18:58:36 1997  J"orn Rennecke <amylaar@cygnus.co.uk>
+
+       * sched.c (update_flow_info) When looking if to set found_split_dest
+       or found_orig_dest, look at all parts of a PARALLEL.
+
+       * sh.md (casesi_0): Reduce functionality, exclude insns from
+       mova onwards.  Changed expander caller.
+       (casesi_worker_0): New insn.
+       (casesi_worker_0+[12]): New define_splits.
+       (casesi_worker): Need no gen_* function.
+       (casesi): Use casesi_worker_0 instead of casesi_worker.
+       * sched.c (update_flow_info): Don't pass SCRATCH to dead_or_set_p.
+
+Mon Sep 15 11:43:38 1997  Jason Merrill  <jason@yorick.cygnus.com>
+
+       Support dwarf2 unwinding on PUSH_ROUNDING targets like the x86.
+       * dwarf2.h: Add DW_CFA_GNU_args_size.
+       * frame.c (execute_cfa_insn): Likewise.
+       * dwarf2out.c (dwarf_cfi_name, output_cfi): Likewise.
+       (dwarf2out_args_size, dwarf2out_stack_adjust): New fns.
+       (dwarf2out_frame_debug): If this isn't a prologue or epilogue
+       insn, hand it off to dwarf2out_stack_adjust.
+       (dwarf2out_begin_prologue): Initialize args_size.
+       * frame.h (struct frame_state): Add args_size.
+       * libgcc2.c (__throw): Use args_size.
+       * final.c (final_scan_insn): If we push args, hand off all insns
+       to dwarf2out_frame_debug.
+       * defaults.h (DWARF2_UNWIND_INFO): OK for !ACCUMULATE_OUTGOING_ARGS.
+
+       * dwarf2out.c (dwarf2out_frame_debug): Fix typo.
+       Handle epilogue restore of SP from FP.
+       * emit-rtl.c (gen_sequence): Still generate a sequence if the 
+       lone insn has RTX_FRAME_RELATED_P set.
+
+       * frame.c (extract_cie_info): Handle "e" augmentation.
+       * dwarf2out.c (ASM_OUTPUT_DWARF_*): Provide definitions in the
+       absence of UNALIGNED_*_ASM_OP.
+       (UNALIGNED_*_ASM_OP): Only provide defaults if OBJECT_FORMAT_ELF.
+       (output_call_frame_info): Use "e" instead of "z" for augmentation.
+       Don't emit augmentation fields length.
+       (dwarf2out_do_frame): Move outside of #ifdefs.
+       * defaults.h (DWARF2_UNWIND_INFO): Don't require unaligned data
+       opcodes.
+
+       * sparc.h (UNALIGNED_INT_ASM_OP et al): Don't define here after all.
+       * sparc/sysv4.h (UNALIGNED_INT_ASM_OP): Define here.
+       * sparc/sunos4.h (DWARF2_UNWIND_INFO): Define to 0.
+       * sparc/sun4gas.h: New file.
+       * configure.in: Use sun4gas.h if SunOS 4 --with-gnu-as.
+
+       * collect2.c (write_c_file_stat, write_c_file_glob): Declare 
+       __register_frame_table and __deregister_frame.
+
+Mon Sep 15 19:04:34 1997  Brendan Kehoe  <brendan@cygnus.com>
+
+       * except.c (find_exception_handler_labels): Use xmalloc instead of
+       alloca, since MAX_LABELNO - MIN_LABELNO can be more than 1 million
+       in some cases.
+
+Sat Sep 13 23:13:51 1997  Paul Eggert  <eggert@twinsun.com>
+
+       * cpplib.h (PARAMS): Fix misspelling of __STDC__.
+       (cpp_get_token): Arg is cpp_reader *, not struct parse_marker *.
+
+       * cpplib.c (cpp_fatal, cpp_file_line_for_message): New decls.
+       (ppp_hash_cleanup, cpp_message, cpp_print_containing_files): Likewise.
+       (copy_rest_of_line): Fix typo that prevented recognition of
+       C++ style comments.
+       (output_line_command, special_symbol): Use %ld for long, not %d.
+
+       * cppexp.c (xrealloc): Declare first arg as void *, not char *.
+       (cpp_lex): Cast 2nd arg of cpp_parse_escape from const char ** to
+       char **.
+
+Fri Sep 12 16:54:04 1997  Doug Evans  <dje@cygnus.com>
+
+       * bitmap.h (bitmap_print): Don't use STDIO_PROTO.
+
+Fri Sep 12 13:49:58 1997  Jason Merrill  <jason@yorick.cygnus.com>
+
+       * except.h: Prototype dwarf2 hooks.
+       * expr.c: Adjust.
+
+Thu Sep 11 18:36:51 1997  Jim Wilson  <wilson@cygnus.com>
+
+       * local-alloc.c (contains_replace_regs): New function.
+       (update_equiv_regs): When adding a REG_EQUIV note for a set of a MEM,
+       verify that there is no existing REG_EQUIV note, and add a call to
+       contains_place_regs.
+
+       * m68k.h (MACHINE_STATE_{SAVE,RESTORE}): Add __HPUX_ASM__ versions.
+
+Wed Sep 10 21:49:38 1997  Michael Meissner  <meissner@cygnus.com>
+
+       * toplev.c (rest_of_compilation): For passes starting with
+       flow_analysis, use print_rtl_with_bb instead of print_rtl.
+       * print-rtl.c (print_rtl_single): Print a single rtl value to a
+       file.
+       * flow.c (print_rtl_with_bb): Print which insns start and end
+       basic blocks.  For the start of a basic block, also print the live
+       information.
+       * bitmap.h (EXECUTE_IF_AND_IN_BITMAP): New macro, to iterate over
+       two bitmaps ANDed together.
+       (bitmap_print): Declare.
+       * bitmap.c (function_obstack): Don't declare any more.
+       (bitmap_obstack): Obstack for allocating links from.
+       (bitmap_obstack_init): New static to say whether to initialize
+       bitmap_obstack.
+       (bitmap_element_allocate): Use bitmap_obstack to allocate from.
+       (bitmap_release_memory): Free all memory allocated from
+       bitmap_obstack.
+       (toplevel): Conditionally include stdlib.h.
+        (free): Provide a declaration if NEED_DECLARATION_FREE.
+
+       * basic-block.h (EXECUTE_IF_AND_IN_REG_SET): New macro, invoke
+       EXECUTE_IF_AND_IN_BITMAP.
+
+Wed Sep 10 17:53:33 1997  J"orn Rennecke <amylaar@cygnus.co.uk>
+
+       * sh.c (addr_diff_vec_adjust): Properly propagate considered
+       address changes through alignments.
+
+Wed Sep 10 13:10:52 1997  Per Bothner  <bothner@cygnus.com>
+
+       * stor-layout.c (layout_type):  Simplify special BOOLEAN_TYPE handling.
+
+Wed Sep 10 12:59:57 1997  Jason Merrill  <jason@yorick.cygnus.com>
+
+       * expr.c (expand_builtin): Only support __builtin_dwarf_fp_regnum()
+       if DWARF2_UNWIND_INFO.
+
+Wed Sep 10 15:43:10 1997  Jason Merrill  <jason@yorick.cygnus.com>
+
+       * cplus-dem.c (demangle_fund_type): Change "complex" to "__complex".
+
+Wed Sep 10 11:13:53 1997  Paul Eggert  <eggert@twinsun.com>
+
+       Handle `extern int errno;' correctly when fixing <errno.h>.
+       * fix-header.c (recognized_extern): Use name_length when comparing.
+       * scan-decls.c (scan_decls): Don't ignore the first CPP_NAME in a
+       declaration, so that we see the `extern' in `extern int errno;'.
+
+Wed Sep 10 11:49:20 1997  Jason Merrill  <jason@yorick.cygnus.com>
+
+       Add support for exception handling using DWARF 2 frame unwind info.
+       * libgcc2.c (get_reg, put_reg, get_return_addr, put_return_addr,
+       next_stack_level, in_reg_window): Helper fns.
+       (__throw): Implement for DWARF2_UNWIND_INFO.
+
+       * expr.c (expand_builtin): Handle builtins used by __throw.
+       * tree.h (enum built_in_function): Add builtins used by __throw.
+       * c-decl.c (init_decl_processing): Declare builtins used by __throw.
+       * dwarf2out.c (expand_builtin_dwarf_fp_regnum): Used by __throw.
+       * except.c (expand_builtin_unwind_init): Hook for dwarf2 __throw.
+       (expand_builtin_extract_return_addr): Likewise.
+       (expand_builtin_frob_return_addr): Likewise.
+       (expand_builtin_set_return_addr_reg): Likewise.
+       (expand_builtin_eh_stub): Likewise.
+       (expand_builtin_set_eh_regs): Likewise.
+       (eh_regs): Choose two call-clobbered registers for passing back values.
+
+       * frame.c, frame.h: New files for parsing dwarf 2 frame info.
+       * Makefile.in (LIB2ADD): New variable.  Add $(srcdir)/frame.c.
+       (libgcc2.a): Use it instead of $(LIB2FUNCS_EXTRA) $(LANG_LIB2FUNCS)
+       (stmp-multilib): Likewise.
+       ($(T)crtbegin.o, $(T)crtend.o): Add -fno-exceptions.
+
+       * except.c: #include "defaults.h".
+       (exceptions_via_longjmp): Default depends on DWARF2_UNWIND_INFO.
+       (emit_throw): Don't defeat assemble_external if DWARF2_UNWIND_INFO.
+       (register_exception_table_p): New fn.
+       (start_eh_unwinder): Don't do anything if DWARF2_UNWIND_INFO.
+       (end_eh_unwinder): Likewise.
+
+       * crtstuff.c: Wrap .eh_frame section, use EH_FRAME_SECTION_ASM_OP, 
+       call __register_frame and __deregister_frame as needed.
+       * varasm.c (eh_frame_section): New fn if EH_FRAME_SECTION_ASM_OP.
+       * dwarf2out.c (EH_FRAME_SECTION): Now a function-like macro.  Check
+       EH_FRAME_SECTION_ASM_OP.
+       * sparc/sysv4.h (EH_FRAME_SECTION_ASM_OP): Define.
+       * mips/iris6.h: (EH_FRAME_SECTION_ASM_OP): Define.
+       (LINK_SPEC): Add __EH_FRAME_BEGIN__ to hidden symbols.
+
+       * dwarf2out.c (output_call_frame_info): If no support for
+       EXCEPTION_SECTION, mark the start of the frame info with a
+       collectable tag.
+       * collect2.c (frame_tables): New list.
+       (is_ctor_dtor): Recognise frame entries.
+       (scan_prog_file): Likewise.
+       (main): Pass -fno-exceptions to sub-compile.  Also do collection
+       if there are any frame entries.
+       (write_c_file_stat): Call __register_frame_table and
+       __deregister_frame as needed.
+       (write_c_file_glob): Likewise.
+
+       * defaults.h (DWARF2_UNWIND_INFO): Default to 1 if supported.  
+       Also require unaligned reloc support.
+       * sparc.h (UNALIGNED_SHORT_ASM_OP, UNALIGNED_INT_ASM_OP,
+       UNALIGNED_DOUBLE_INT_ASM_OP): Define here.
+       * sparc/sysv4.h: Not here.
+
+       * toplev.c (compile_file): Call dwarf2out_frame_{init,finish}.
+       * dwarf2out.c (dwarf2out_init): Don't call dwarf2out_frame_init.
+       (dwarf2out_finish): Don't call dwarf2out_frame_finish.
+
+       * libgcc2.c (L_eh): Reorganize, moving code shared by different
+       EH implementations to the top.
+       (find_exception_handler): Split out.  Start from 0.  Compare against
+       end with >=.
+       (__find_first_exception_table_match): Use it.
+       * except.c (output_exception_table): Don't do anything if there's
+       no table.  Don't output a first entry of zeroes.
+       (eh_outer_context): Adjust properly.
+       (add_eh_table_entry): Use xrealloc.
+       * toplev.c (compile_file): Just call output_exception_table.
+
+Wed Sep 10 11:49:20 1997  Jason Merrill  <jason@yorick.cygnus.com>
+
+       * varasm.c (save_varasm_status): Take the target function context.
+       * function.c (push_function_context_to): Pass it in.
+
+       * rtl.def (ADDRESSOF): Add new field for original regno.
+       * function.c (put_reg_into_stack and callers): Add original_regno
+       argument.
+       (gen_mem_addressof): Remember the original regno.
+       * rtl.def (INLINE_HEADER): Add new field for parm_reg_stack_loc.
+       * rtl.h (PARMREG_STACK_LOC): New macro.
+       (ADDRESSOF_REGNO): New macro.
+       * emit-rtl.c (gen_inline_header_rtx): Add parm_reg_stack_loc.
+       * function.c (max_parm_reg, parm_reg_stack_loc): No longer static.
+       (assign_parms): Allocate parm_reg_stack_loc on saveable obstack.
+       * integrate.c (output_inline_function): Set max_parm_reg and
+       parm_reg_stack_loc from inline header.
+       (initialize_for_inline): Pass in parm_reg_stack_loc.
+
+Wed Sep 10  11:30:36 1997  Stan Cox  <coxs@dg-rtp.dg.com>
+
+       * i386.c (override_options): Don't set TARGET_SCHEDULE_PROLOGUE
+       (ix86_expand_prologue, ix86_expand_epilogue): Emit rtl by default.
+       
+Wed Sep 10  11:30:36 1997  Jason Merrill  <jason@cygnus.com>
+       
+       * i386.c (ix86_prologue): Add dwarf2 support for !do_rtl case.
+
+Wed Sep 10 08:48:44 1997  Jeffrey A Law  (law@cygnus.com)
+
+       * xm-m88k.h (USG): Only define if it hasn't already been defined.
+
+       * i386.h (CPP_CPU_DEFAULT): Avoid using #elif.
+
+       * expr.c (do_jump_by_parts_equality_rtx): Don't clobber the
+       source operand when performing an IOR of the parts.
+
+       * expr.c (emit_block_move): Always return a value.
+
+       * expr.c (clear_storage): Use CONST0_RTX instead of const0_rtx.
+       when clearing non-BLKmode data.
+
+       * final.c (shorten_branches): Remove last change for ADDR_VEC
+       alignment computation.   During first pass, assume worst
+       possible alignment for ADDR_VEC and ADDR_VEC_DIFF insns.
+
+Wed Sep 10 09:33:19 1997  Kamil Iskra  <iskra@student.uci.agh.edu.pl>
+
+       * explow.c (emit_stack_save, emit_stack_restore): Correctly
+       handle HAVE_{save,restore}_stack_* evaluating to 0.
+
+Wed Sep 10 09:27:45 1997  Weiwen Liu  <liu@hepvms.physics.yale.edu>
+
+       * Makefile.in (sdbout.o): Add dependency on insn-config.h.
+
+Wed Sep 10 09:24:56 1997  Nick Burrett  <n.a.burrett@btinternet.com>
+
+       * sched.c (birthing_insn_p): Rename prototype decl from birthing_insn.
+       * final.c (leaf_renumber_regs, alter_cond): Declare prototype only
+       if LEAF_REGISTERS is defined.
+       * reload1.c (merge_assigned_reloads): Declare prototype only if
+       SMALL_REGISTER_CLASSES is defined.
+       * loop.c (replace_call_address): Pre-process out prototype decl.
+       * real.c (dectoe, etodec, todec): Declare proto if DEC is defined
+       (ibmtoe, etoibm, toibm): Declare proto if IBM is defined
+
+Wed Sep 10 09:13:51 1997  Manfred Hollstein  <manfred@s-direktnet.de>
+
+       * configure.in (out_file): Emit definition to config.status.
+
+Wed Sep 10 08:37:56 1997  J"orn Rennecke <amylaar@cygnus.co.uk>
+
+       * final.c (shorten_branches): Fix alignment calculation.
+       Don't count the lengths of deleted instructions.
+
+Wed Sep 10 08:34:11 1997  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
+
+       * cpplib.c (cpp_start_read): Make known_suffixes static.
+
+Wed Sep 10 08:27:05 1997  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>
+
+       * m68k.c (print_operand_address) [MOTOROLA]: When compiling
+       with -fpic (not -fPIC) force the GOT offset to 16 bits.
+
+Wed Sep 10 08:22:51 1997  Christian Iseli  <chris@lslsun.epfl.ch>
+
+       * expr.c (convert_move): Add missing use of trunctqtf2.
+
+Wed Sep 10 08:17:10 1997  Torbjorn Granlund  <tege@pdc.kth..se>
+
+       * except.c (eh_outer_context): Do masking using expand_and.
+
+Wed Sep 10 07:52:21 1997  Joel Sherrill  <joel@OARcorp.com>
+
+        * pa/rtems.h (subtarget_switches): Removed -mrtems subtarget_switch.
+        * configure.in (sh*-*-rtems*): New target.
+        * sh.h (TARGET_SWITCHES: Call SUBTARGET_SWITCHES.
+       (SUBTARGET_SWITCHES): Provide default definition.
+
+Wed Sep 10 06:33:47 1997  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
+
+       * i386/mingw32.h ({LIB,LINK}_SPEC): Check for -mwindows, not -windows.
+
+       * alpha/vms.h (ASM_OUTPUT_SECTION): Clear NAME if overlaid.
+
+       * c-parse.in (unary_expr): Test DECL_C_BIT_FIELD, not DECL_BIT_FIELD.
+       * c-typeck.c (default_conversion): Likewise.
+
+       * tree.c (contains_placeholder_p, substitute_in_expr):
+       Handle placeholders inside args of CALL_EXPR (and hence in TREE_LIST).
+
+       * expr.c (expand_expr, case PLACEHOLDER_EXPR): Check all
+       expressions in placeholder_list.
+
+Tue Sep  9 18:10:30 1997  Doug Evans  <dje@cygnus.com>
+
+       Add port done awhile ago for the ARC cpu.
+       * arc.h, arc.c, arc.md, t-arc, xm-arc.h: New files.
+       * arc/initfini.c, arc/lib1funcs.asm: New files.
+       * ginclude/va-arc.h: New file.
+       * ginclude/stdarg.h: Include va-arc.h ifdef __arc__.
+       * ginclude/varargs.h: Likewise.
+       * Makefile.in (USER_H): Add va-arc.h.
+       * configure.in (arc-*-elf*): Recognize.
+       * longlong.h: Add ARC support.
+
+Tue Sep  9 01:30:37 1997  Jason Merrill  <jason@yorick.cygnus.com>
+
+       * mips.h (DWARF_FRAME_REGNUM): Use the same numbering regardless of
+       write_symbols.
+
+Mon Sep  8 15:15:11 1997  Nick Clifton  <nickc@cygnus.com>
+
+       * v850.h (ASM_SPEC): Pass on target processor.
+       (CPP_PREDEFINES): Only define if not already specified.
+       (TARGET_VERSION): Only define if not already specified.
+       (MASK_CPU, MASK_V850, MASK_DEFAULT): Bits to specify target
+       processor. 
+       (EXTRA_SWITCHES): Extra entries in the switches array.
+       (TARGET_DEFAULT): Set default target processor.
+
+Tue Sep  9 09:50:02 1997  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
+
+       * configure.in (alpha*-*-*): Support pca56 and ev6.
+
+       * varasm.c (named_section): Set in section after writing directive.
+       * dwarf2out.c (output_call_frame_info): Call named_section.
+
+Mon Sep  8 16:32:43 1997  Jason Merrill  <jason@yorick.cygnus.com>
+
+       * mips.c (function_prologue): Set up the CFA when ABI_32.
+
+       * sparc.c (save_regs): Check dwarf2out_do_frame instead of DWARF2_DEBUG
+       for dwarf2 unwind info.
+       (output_function_prologue, sparc_flat_output_function_prologue): Same.
+
+       * final.c (final_end_function): Check dwarf2out_do_frame instead
+       of DWARF2_DEBUG for dwarf2 unwind info.
+       (final_scan_insn): Likewise.
+       (final_start_function): Likewise.  Initialize dwarf2 frame debug here.
+       (final): Not here.
+
+       * expr.c (expand_builtin_return_addr): Only SETUP_FRAME_ADDRESSES if
+       count > 0.
+
+       * varasm.c (exception_section): Check EXCEPTION_SECTION first.
+
+Mon Sep  8 14:58:07 1997  Jim Wilson  <wilson@cygnus.com>
+
+       * toplev.c (main): Change #elif to #else/#ifdef
+
+       * i386/t-sol2 (TARGET_LIBGCC2_CFLAGS): Define to -fPIC.
+
+Mon Sep  8 08:45:19 1997  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
+
+       * alpha.h (processor_type): Add EV6.
+       ({TARGET,MASK}_BWX): Renamed from _BYTE_OPS.
+       ({TARGET,MASK}_{CIX,MAX}): New macros.
+       (MASK_CPU_EV5): Change bit number.
+       (MASK_CPU_EV6, {TARGET,MASK}_SUPPORT_ARCH): New macros.
+       (TARGET_OPTIONS): Rename "byte" to "bwx" and add "cix" and "max".
+       (MINIMUM_ATOMIC_ALIGNMENT): Rename TARGET_BYTE_OPS to TARGET_BWX.
+       (SECONDARY_{INPUT,OUTPUT}_RELOAD_CLASS, ASM_FILE_START): Likewise.
+       (SECONDARY_MEMORY_NEEDED): Not needed if CIX.
+       (ASM_FILE_START): Only write if TARGET_SUPPORT_ARCH.
+       Add "pca56" and "ev6".
+       * alpha.c (input_operand): Rename TARGET_BYTE_OPS to TARGET_BWX.
+       (override_options): Likewise; also add new CPU types and subset flags.
+       * alpha.md: Rename TARGET_BYTE_OPS to TARGET_BWX.
+       (cpu attr): Add "ev6".
+       (ev5 function units): Use for ev6 as well, for now.
+       (ffsdi2): New define_expand and define_insn, for TARGET_CIX.
+       (sqrt[sd]f2): New patterns, for TARGET_CIX.
+       (s{min,max}[qh]i3): New patterns, for TARGET_MAX.
+       (movsi): Use ldf/lsf when appropriate, instead of lds/sts.
+       (mov[sd]i): Add use of ftio/itof for TARGET_CIX.
+       * configure.in (alpha*-dec-osf*): Set MASK_SUPPORT_ARCH for >= 4.0B.
+       Rename MASK_BYTE_OPS to MASK_BWX.
+
+       * i386/mingw32.h (STANDARD_INCLUDE_DIR): New macros.
+       (STARTFILE_SPEC, PATH_SEPARATOR): Likewise.
+
+       * configure.in (AC_PROG_LN_S): Remove; unneeded.
+       (*cygwin32*, *mingw32*): Default prefix to /usr.
+       (symbolic_link): Set to "cp -p" if no "ln -s"; add AC_SUBST.
+       (configure.lang call): Change remaining use of config.h to auto-conf.h.
+
+       * Makefile.in (LN): Add new symbol.
+       (FLAGS_TO_PASS): Pass it down.
+       (stage[1-4]-start): Use $(LN), not "ln -s".
+
+       * mips.h (flag_omit_frame_pointer, frame_pointer_needed, optimize):
+       Remove declarations: no longer needed.
+       * pyr.md: Remove unneeded declarations of `optimize'.
+       * h8300.md: Likewise.
+       * sparc.c (dwarf2out_cfi_label): Add declaration.
+       (save_regs, output_function_prologue): Remove cast for it.
+       (sparc_flat_{save_restore,output_function_prologue): Likewise.
+       ({save,restore}_regs): No longer inline.
+
+Mon Sep  8 03:08:35 1997  Jim Wilson  <wilson@cygnus.com>
+
+       * i960.h (LINK_SPEC): Handle -mjX and -mrp switches.
+
+       * mips.md (nonlocal_goto_receiver): Define.
+
+       * unroll.c (calculate_giv_inc): Handle increment with code PLUS.
+
+       * alpha.h (PREFERRED_RELOAD_CLASS): Return NO_REGS if NO_REGS
+       is passed in.
+       * emit-rtl.c (gen_lowpart_common): Add code to convert CONST_INT to
+       SFmode for 64 bit hosts.
+
+       * profile.c (output_arc_profiler): Verify next_insert_after is an
+       INSN before and after skipping a stack pop.  Check next_insert_after
+       for non NULL before deferencing it.
+       (output_func_start_profiler): Set DECL_EXTERNAL to zero.
+
+       * va-mips.h: Add _VA_MIPS_H_ENUM ifdef/define/endif.
+
+       * m68k.md (iorsi_zexthi_ashl16): Disable.
+
+       * varasm.c (mark_constants): Don't look inside CONST_DOUBLEs.
+
+Sun Sep  7 18:30:46 1997  Jason Merrill  <jason@yorick.cygnus.com>
+
+       * dwarf2out.c (dwarf2out_frame_debug): Assume that in a PARALLEL
+       prologue insn, only the first elt is significant.
+       (output_call_frame_info): For exception handling, always use 4-byte
+       fields as specified by the dwarf2 spec.
+       Don't skip trivial FDEs.
+
+Sun Sep  7 03:35:28 1997  Paul Eggert  <eggert@twinsun.com>
+
+       * fix-header.c (std_include_table): Remove bogus entry for popen
+       under stdio.h with ANSI_SYMBOL.  popen is a POSIX2_SYMBOL.
+
+Fri Sep  5 17:19:58 1997  J"orn Rennecke <amylaar@cygnus.co.uk>
+
+       * sh.md (movsf_ie+1): Typo fix.
+
+Fri Sep  5 10:08:44 1997  Jeffrey A Law  (law@cygnus.com)
+
+       * v850: New directory for v850 port.
+       * v850/lib1funcs.asm: New file.
+       * t-v850, v850.c, v850.h, v850.md, xm-v850.h: New files.
+       * ginclude/va-v850.h: New file.
+       * varargs.h, stdarg.h: Include va-mn10200.h.
+       * configure.in (mn10200-*-*): New target.
+       * Makefile.in (USER_H): Add va-mn10200.h. 
+
+       * xm-svr4.h (SYS_SIGLIST_DECLARED): Define.
+       * mips/xm-news.h (SYS_SIGLIST_DECLARED): Define.
+       * mips/xm-sysv4.h (SYS_SIGLIST_DECLARED): Define.
+
+Fri Sep  5 03:50:15 1997  David Edelsohn  <edelsohn@mhpcc.edu>
+
+       * rs6000/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.
+       (stage1-start): Likewise.
+       (stage2-start): Likewise.
+       (stage3-start): Likewise.
+       (stage4-start): Likewise.
+
+       * mn10200.h (INITIALIZE_TRAMPOLINE): PC relative instructions
+       are relative to the next instruction, not the current instruction.
+
+Tue Sep  2 14:15:32 1997  Jason Merrill  <jason@yorick.cygnus.com>
+
+       * toplev.c (xrealloc): Handle null ptr.
+
+Tue Sep  2 13:42:38 1997  Paul N. Hilfinger  <hilfingr@CS.Berkeley.EDU>
+
+       * fixincludes: Permits spaces between # and define.  Discard C++
+       comments in sys/pci.h on HP/UX 10.20.
+
+Tue Sep  2 09:28:31 1997  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
+
+       * rs6000.h (ROUND_TYPE_ALIGN): Don't blow up if no fields in record.
+
+Tue Sep  2 00:19:01 1997  Jason Merrill  <jason@yorick.cygnus.com>
+
+       * expr.c (expand_expr, case COND_EXPR): It's OK to merge two
+       SAVE_EXPRs.
+
+Mon Sep  1 23:36:45 1997  Jeffrey A Law  (law@cygnus.com)
+
+       * pa.c (restore_unscaled_index_insn_codes): New function.
+       (record_unscaled_index_insn_codes): Likewise.
+       (output_function_prologue): Call restore_unscaled_index_insn_codes.
+       (output_function_epilogue): Free memory for unscaled_index_insn_codes.
+       (pa_reorg): Call record_unscaled_index_insn_codes.
+
+Mon Sep  1 14:46:09 1997  J"orn Rennecke <amylaar@cygnus.co.uk>
+
+       * sh.md (casesi_jump_1, casesi_jump2): Generate expanders.
+       (casesi_jump): Delete.
+       (casesi) Use gen_casesi_jump_1 and gen_casesi_jump2 instead of
+       gen_casesi_jump.
+
+Mon Sep  1 14:36:36 1997  Paul Eggert  <eggert@twinsun.com>
+
+       * sparc/sol2.h (CPP_SPEC): Add -D__STDC__=0 unless -ansi
+       or -traditional, for compatibility with Sun's practice.
+       * i386/sol2.h (CPP_SPEC), rs6000/sol2.h (CPP_SPEC): Likewise.
+       * configure.in ({sparc,i[3456]86,powerpcle}-*-solaris2*):
+       Set fixincludes=Makefile.in.
+
+Mon Sep  1 14:08:23 1997  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>
+
+       * Makefile.in (config.status): Depend on version.c.
+
+Mon Sep  1 13:48:02 1997  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
+
+       * acconfig.h: Remove include of config2.h.
+       * configure.in: Build auto-config.h, not config.h, from autoconf data.
+       Add auto-conf.h in front of all other host_xm_file entries.
+       Make config.h, not config2.h, from host_xm_file.
+       * Makefile.in (auto-config.h): New rule; was config.h.
+       (distclean): Remove auto-config.h, not config2.h.
+
+       * expr.c (do_jump_by_parts_equality_rtx): Try to do by IOR of
+       all the words.
+
+Mon Sep  1 13:07:36 1997  Bob Manson  <manson@charmed.cygnus.com>
+
+       * sparc/t-vxsparc (TARGET_LIBGCC2_CFLAGS): New definition.
+       (LIBGCC2_CFLAGS): Deleted.
+       * m68k/t-vxworks68: Likewise.
+       * i960/t-vxworks960: Likewise.
+       * a29k/t-vx29k: Likewise.
+
+Sun Aug 31 17:12:27 1997   Paul Eggert  <eggert@twinsun.com>
+
+       * real.c (EMULONG): Correct typo in spelling of HOST_BITS_PER_LONGLONG.
+
+Fri Aug 29 16:13:51 1997  Jeffrey A Law  (law@cygnus.com)
+
+       * mips.md (movstrsi_internal[23]): Set insn type to "store" to
+       get more accurate schedules.
+
+       * pa.md (reload_peepholes): Make sure operand is a REG before
+       examining REGNO.  Allow general registers too.
+
+Thu Aug 28 12:34:56 1997  Doug Evans  <dje@seba.cygnus.com>
+
+       * reload1.c (reload_cse_no_longer_dead): Don't pass incremented regno
+       to SET_HARD_REG_BIT, it can be evaluated twice.
+
+Wed Aug 27 20:15:53 1997  J"orn Rennecke <amylaar@cygnus.co.uk>
+
+       * sh/elf.h: (LINK_SPEC): Use shlelf.
+       (USER_LABEL_PREFIX, LOCAL_LABEL_PREFIX, ASM_FILE_START): Redefine.
+       * sh/lib1funcs.asm (___ashrsi3, ___ashlsi3, ___lshrsi3):
+       Truncate shift count.  Use braf if not SH1.
+       * sh.c (sfunc_uses_reg): No longer static.
+       Check for SImode inside the USE.
+       (shiftcosts, expand_ashiftrt, shl_sext_kind): 
+       Use SH_DYNAMIC_SHIFT_COST.
+       (sh_dynamicalize_shift_p, output_branchy_insn): New functions.
+       (output_ieee_ccmpeq, mova_p, cache_align_p, fixup_aligns): Likewise.
+       (branch_offset, short_cbranch_p, med_branch_p): Likewise.
+       (braf_branch_p, align_length, fixup_addr_diff_vecs): Likewise.
+       (addr_diff_vec_adjust, get_dest_uid, gen_far_branch): Likewise.
+       (split_branches, regs_used, gen_block_redirect): Likewise.
+       (from_compare): Can't compare non-zero DImode constant directly.
+       Emit special code for TARGET_SH3E floating point with code == GE.
+       Force 0.0 into a register for SH3E.
+       (print_operand): Add ','.
+       Emit the actual comparison instruction.
+       (sh_builtin_saveregs): Save floating point registers in order that
+       allows pre-decrement.
+       (find_barrier): New arguments num_mova and mova.  Changed caller.
+       When rewinding to before a mova, also restore the last found barrier.
+       Branch is now known to be shortened.
+       Prefer barriers where no new alignment is needed.
+       More generic alignment for cache lines.
+       Add checks for pieces of code that use more table space than their
+       own size.
+       Fix up the barrier we return so that the alignment will always be
+       after the table.
+       Remove limit adjustments for table alignment.
+       Handle PARALLELs correctly.
+       (machine_dependent_reorg): Add extra pass to split insns.
+       Don't scan instructions twice for broken moves.
+       Calculate insn length, call fixup_addr_diff_vecs.
+       Call split_branches.
+       Add alignment for loops and after BARRIERs.
+       Initialize max_uid_before_fixup_addr_diff_vecs.
+       Advance mdep_reorg_phase.
+       Clear insn_addresses.
+       (output_far_jump): Use braf and/or pre-allocated scratch register
+       when possible.
+       (expand_ashiftrt): Truncate shift count.
+       (push_regs): Push PR last.
+       (sh_expand_epilogue): Pop PR first.
+       (code_for_indirect_jump_scratch, mdep_reorg_phase): New variables.
+       (uid_align, uid_align_max): Likewise.
+       (max_uid_before_fixup_addr_diff_vecs, sh_addr_diff_vec_mode): Likewise.
+       (braf_label_ref_operand): New predicate.
+       (initial_elimination_offset): calculate offset from
+       RETURN_ADDRESS_POINTER_REGNUM starting with total_saved_regs_space.
+       (output_branch): Expect out-of-range condbranches to have been split.
+       * sh.md (rotlsi3_16): Named insn.
+       (rotlsi3): Rewritten to use superoptimizer patterns.
+       (adddi3, subdi3, ashrsi2_16, ashrsi2_31): Always split.
+       (movsi_i, movsi_ie): replace t/z alternative with t/r alternative.
+       Use pcload_si and load_si insn types.
+       (adddi3+1, subdi3+1, ashrsi2_16+1, ashrsi2_31+1) New define_splits.
+       (addc, subc, ashlsi_c): New insns.
+       (attribute "type"): New values dyn_shift, load_si, pcload_si, fmove,
+       jump_ind, arith3 and arith3b.
+       (function_unit "fp"): Take fmove into account.
+       (function_unit "int"): Uses one cycle for !dyn_shift.
+       (function_unit "memory"): Special case for load_si and pcload_si.
+       (attribute "in_delay_slot): handle pcload_si.
+       (cmpgtdi_t, cmpgedi_t, cmpgeudi_t, cmpgtudi_t): Type arith3.
+       (cmpsi+1, cmpeqdi_t) Type arith3b.
+       (movsf_ie, alternatives f/fGH/X, f/y/X, y/f/X): Type fmove.
+       (extendsidi2): Delete.
+       (cmpeqsi_t-2): Delete. (Redundant with movt.)
+       (*rotlhi3_8) Name.
+       (iorsi3, rotlsi3_1, rotlsi3_31, rotlsi3_16, (*rotlhi3_8): Type arith.
+       (ashlsi3_k, ashlhi3_ki, ashrsi2_16, ashrsi2_31, lshrsi3_m): Likewise.
+       (lshrsi3_k, lshrhi3_m, lshrhi3_k, ashldi3_k, lshrdi3_k): Likewise.
+       (ashrdi3_k, xtrct_left, xtrct_right, dect, mova, movt): Likewise.
+       (movt): Likewise.
+       (ashlsi3_d, ashrsi3_d, lshrsi3_d): Type dyn_shift.
+       (indirect_jump_scratch, *casesi_jump_1, *casesi_jump_2): Type jump_ind.
+       (ashlsi3, ashlsi3_n, lshrsi3, lshrsi3_n): Use sh_dynamicalize_shift_p.
+       (movsf_ie+1, movsf_ie+2): Exchange.
+       (cmpeqdi_t-1, cmpeqdi_t, cmpgtdi_t, cmpgedi_t): New insns.
+       (cmpgeudi_t, cmpgtudi_t, movsi_i_lowpart, ieee_ccmpeqsf_t): Likewise.
+       (cmpdi, movnegt): New define_expands.
+       (movsi_ie): Add y,y alternative.
+       (sge): Use it for ! TARGET_IEEE.  Use special code for TARGET_IEEE.
+       (sle): Use sge.
+       (align_4, casesi_jump): Now define_expand.
+       (casesi_0, addr_diff_vec_adjust, align_log): New patterns.
+       (*casesi_jump_[12]): Likewise.
+       (casesi): Use casesi_0 and casesi_jump.
+       (casesi_worker): Depends on the mode used for the table.
+       (define_delay for cbranches):  Test TARGET_SH2.
+       Changed all callers of from_compare.
+       (attribute "length"): Take use of braf and scratch registers into
+       account.
+       (indirect_jump_scratch, block_branch_redirect): New patterns.
+       (jump): Call output_far_jump for any jump larger than 4 bytes.
+       (inverse_branch_true, inverse_branch_false): Remove.
+       (bne, blt, ble, bltu, bleu): Canonicalize.
+       (attribute "cpu"): Remove "sh0" alternative.
+       * sh.h (ADJUST_COST): Lower cost of non-address sfunc dependencies.
+       Adjust cost of load_si / pcload_si insns when not used for call.
+       (enum reg_class): Move GENERAL_REGS after FPUL_REGS.
+       (REG_CLASS_NAMES, REG_CLASS_CONTENTS): Likewise.
+       (REGISTER_MOVE_COST): Add costs for fpul <-> mac, pr moves.
+       Fix to match default cost in regclass.  Move to T reg not costly.
+       When checking for GENERAL_REGS, check for R0_REGS too.
+       (INITIALIZE_TRAMPOLINE): Include code for constant parts.
+       (SHIFT_COUNT_TRUNCATED): Not true for TARGET_SH3.
+       (CPP_SPEC): Define __sh1__ if no specific cpu is selected.
+       (FUNCTION_BOUNDARY): Align to cache line boundary.
+       (optimize, sh_addr_diff_vec_mode, machine_dependent_reorg): Declare.
+       (addr_diff_vec_adjust, code_for_indirect_jump_scratch): Declare.
+       (short_cbranch_p, med_branch_p, braf_branch_p, align_length): Declare.
+       (output_ieee_ccmpeq, output_branchy_insn, sfunc_uses_reg): Declare.
+       (ASM_OUTPUT_ADDR_DIFF_ELT): Depends on sh_addr_diff_vec_mode.
+       (PREDICATE_CODES): Add braf_label_ref_operand and register_operand.
+       (IEEE_BIT, TAGET_IEEE, LOCAL_LABEL_PREFIX, ASSEMBLER_DIALECT): Define.
+       (CACHE_LOG, enum mdep_reorg_phase_e, TRAMPOLINE_ALIGNMENT): Define.
+       (SH_DYNAMIC_SHIFT_COST): Define.
+       (TARGET_SWITCHES): Remove -m0 entry.  Add -mieee, -mno-ieee.
+       (OVERRIDE_OPTIONS): sh_cpu defaults to CPU_SH1.
+       Initialize sh_addr_diff_vec_mode.
+       (REG_ALLOC_ORDER): Move FP0 behind FP7.
+       Move all FP registers in front of the general registers.
+       (SECONDARY_OUTPUT_RELOAD_CLASS): Add case for MAC_REGS / PR_REGS.
+       When checking for GENERAL_REGS, check for R0_REGS too.
+       Fix direction of compares to {FIR,LA}ST_FP_REG.
+       (SECONDARY_INPUT_RELOAD_CLASS): check for fp_one_operand.
+       (ASM_OUTPUT_ALIGN_CODE, ASM_OUTPUT_LOOP_ALIGN, SH0_BIT): Delete.
+       (TARGET_SH0, PUSH_ROUNDING, TRAMPOLINE_TEMPLATE): Delete.
+       (TRAMPOLINE_ALIGN): Delete.
+       (processor_type): Remove PROCESSOR_SH0.
+       (ADJUST_INSN_LENGTH): Remove check for preceding BARRIER.
+       Adjust ADDR_DIFF_VECs.  Add code for alignment instructions.
+       Check if insn needing a delay slot is already inside a SEQUENCE.
+
+       * va-sh.h (__va_rounded_size): Delete.
+       (__LITTLE_ENDIAN_P, __SCALAR_TYPE, __PASS_AS_FLOAT): Define.
+       (va_arg): Unify big and little endian code.
+       Optimization for small integers.
+
+       From Fred Fish:
+       * sh.h (INITIAL_ELIMINATION_OFFSET): Proper bracketing.
+       (REGNO_REG_CLASS, PREFERRED_RELOAD_CLASS): Likewise.
+       (SECONDARY_{OUTPUT,INPUT}_RELOAD_CLASS, LIBCALL_VALUE): Likewise.
+       (ROUND_ADVANCE, FUNCTION_ARG, FUNCTION_ARG_PARTIAL_NREGS): Likewise.
+       (FUNCTION_PROFILE, FUNCTION_EPILOGUE, RETURN_ADDR_RTX): Likewise.
+       (REGNO_OK_FOR_INDEX_P, EXTRA_CONSTRAINT_Q, MODE_DISP_OK_4): Likewise.
+       (GO_IF_LEGITIMATE_{INDEX,ADDRES}, LEGITIMIZE_ADDRESS): Likewise.
+       (CONST_COSTS, REGISTER_MOVE_COST, ASM_OUTPUT_CONSTRUCTOR): Likewise.
+       (ASM_OUTPUT_CONSTRUCTOR, ASM_OUTPUT_DESTRUCTOR): Likewise.
+       (ASM_OUTPUT_REG_PUSH, ASM_OUTPUT_REG_POP, ASM_OUTPUT_LABEL): Likewise.
+       (ASM_OUTPUT_ALIGN),  ASM_DECLARE_FUNCTION_NAME): Likewise.
+       (ASM_GLOBALIZE_LABEL, ASM_OUTPUT_CASE_LABEL): Likewise.
+       (ASM_OUTPUT_ADDR_DIFF_ELT, ASM_OUTPUT_ADDR_VEC_ELT) Likewise.
+       (ASM_OUTPUT_DOUBLE, ASM_OUTPUT_FLOAT, ASM_OUTPUT_INT): Likewise.
+       (ASM_OUTPUT_SHORT, ASM_OUTPUT_CHAR, ASM_OUTPUT_BYTE): Likewise.
+       (ASM_OUTPUT_SKIP, FINAL_PRESCAN_INSN, PRINT_OPERAND): Likewise.
+       (PRINT_OPERAND_ADDRESS, HANDLE_PRAGMA, ADJUST_INSN_LENGTH): Likewise.
+       (PROMOTE_MODE): Likewise.
+       (ASM_GENERATE_INTERNAL_LABEL): Use LOCAL_LABEL_PREFIX.
+       (ASM_OUTPUT_INTERNAL_LABEL): Use %L.
+       * sh/elf.h: (ASM_OUTPUT_LABELREF): Use %U.
+       (ASM_GENERATE_INTERNAL_LABEL): Use LOCAL_LABEL_PREFIX.
+       (ASM_OUTPUT_INTERNAL_LABEL, ASM_OUTPUT_SOURCE_LINE): Use %L.
+
+Wed Aug 27 16:42:21 1997  Bob Manson  (manson@cygnus.com)
+
+       * t-h8300 (TARGET_LIBGCC2_CFLAGS): New definit.
+       (LIBGCC2_CFLAGS): Deleted.
+       * t-mn10200: Likewise.
+
+Wed Aug 27 17:10:51 1997  Jim Wilson  <wilson@cygnus.com>
+
+       * m68k.md (iorsi3_internal): Readd ! TARGET_5200 check lost in
+       last change.
+
+Wed Aug 27 15:19:55 1997  J"orn Rennecke <amylaar@cygnus.co.uk>
+
+       * dwarfout.c (dwarfout_start_new_source_file): Strip leading '*'s
+       from label names.
+
+Wed Aug 27 14:33:38 1997  Jim Wilson  <wilson@cygnus.com>
+
+       * reload.c (find_reloads, case '0'): Reject matching a non-offsettable
+       address where an offsettable address is required.
+
+Wed Aug 27 10:38:32 1997  Jeffrey A Law  (law@cygnus.com)
+
+       * reorg.c (dbr_schedule): Allow current_function_return_rtx
+       to be something other than a REG.
+       * function.c (expand_function_end): Fix current_function_return_rtx
+       if it was a pseudo.
+
+       * t-freebsd (USER_H): Include EXTRA_HEADERS and LANG_EXTRA_HEADERS.
+       * x-netbsd: Likewise
+       * x-dgux (USER_H): Include EXTRA_HEADERS and LANG_EXTRA_HEADERS
+       (INSTALL_HEADERS): Delete.
+       * x-dguxbcs: Likewise.
+       * x-hp3bsd44: Likewise
+       * x-pa: Likewise.
+
+Wed Aug 27 07:15:58 1997  Klaus Espenlaub  <kespenla@hydra.informatik.uni-ulm.de>
+
+       * configure.in (AC_PROG_CC, AC_PROG_MAKE_SET): Check for gcc before
+       testing for flex.
+Wed Aug 27 02:24:35 1997  Jim Wilson  <wilson@cygnus.com>
+
+       * dwarfout.c (dwarfout_file_scope_decl, case TYPE_DECL): Check
+       TYPE_DECL_IS_STUB instead of DECL_NAME.
+
+       * Makefile.in (install-info): Don't cd into srcdir.  Add srcdir to
+       filenames.  Use sed to extract base filename for install.
+
+Wed Aug 27 01:56:18 1997  Doug Evans  <dje@seba.cygnus.com>
+
+       * loop.c (combine_movables): Earlier insns don't match later ones.
+
+       * c-decl.c (grokdeclarator): If array index or size calculations
+       overflow, issue an error.
+       * fold-const.c (int_const_binop): New static function.
+       (const_binop, size_binop): Call it.
+
+Tue Aug 26 17:51:56 1997  Jason Merrill  <jason@yorick.cygnus.com>
+
+       * collect2.c (main): Check SCAN_LIBRARIES instead of LDD_SUFFIX
+       to decide whether to always emit init and fini handles.
+
+Tue Aug 26 13:51:10 1997  Jim Wilson  <wilson@cygnus.com>
+
+       * stor-layout.c (layout_record): Test DECL_PACKED instead of
+       TYPE_PACKED to determine alignment.
+
+       * combine.c (try_combine): Distribute REG_DEAD notes created for
+       i3dest_killed similar to the ones created for i2dest_in_i2src
+       and for i1dest_in_i1src.
+
+Tue Aug 26 11:36:34 1997  Jeffrey A Law  (law@cygnus.com)
+
+       * loop.c (check_final_value): Don't miss a biv increment in a
+       parallel.
+
+       * loop.c (check_dbra_loop): If the loop biv is only used
+       for counting, then normalize it so that the initial
+       value is zero.
+
+Tue Aug 26 06:19:48 1997  Jason Merrill  <jason@yorick.cygnus.com>
+
+       * dwarfout.c (*_LABEL): Add initial '*'.
+
+Tue Aug 26 05:27:28 1997  Richard Henderson  <rth@cygnus.com>
+
+       * alpha/elf.h (LINK_SPEC): Conditionalize on USE_GNULIBC_1.
+       * configure.in (alpha-*-linux-gnulibc1): New target.
+       (alpha-*-linux-gnu*): Don't build crtbegin/end.
+
+Mon Aug 25 19:11:38 1997  Bernd Schmidt  <crux@Pool.Informatik.RWTH-Aachen.DE>
+
+       * reload1.c (reload_cse_simplify_operands): Fix typo.
+
+Mon Aug 25 19:04:42 1997  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
+
+       * c-typeck.c (common_type): Always prefer long double to double.
+
+Mon Aug 25 08:55:00 1997  Jeffrey A Law  (law@cygnus.com)
+
+       * pa.c (secondary_reload_class): (mem (mem ... )) does not need
+       secondary reloads.
+
+       * pa.c (hppa_builtin_saveregs): Emit a blockage insn after the
+       store of the argument registers.
+
+Sun Aug 24 21:25:06 1997  Bernd Schmidt  <crux@Pool.Informatik.RWTH-Aachen.DE>
+
+       * reload1.c (reload_cse_mem_conflict_p, case MEM): Also check
+       for conflict with the address.
+
+Sat Aug 23 18:43:22 1997  Jim Wilson  <wilson@cygnus.com>
+
+       * acconfig.h (NEED_DECLARATION_CALLOC): Add.
+       * configure.in: Add GCC_NEED_DECLARATION call for calloc.
+       * rs6000/xm-rs6000.h (malloc, realloc, calloc, free): Delete
+       declarations.
+
+       * m68k/m68kemb.h (LIB_SPEC): Add missing comment end before it.
+       * m68k/next.h (GO_IF_INDEXABLE_BASE): Fix typo in undef.
+       
+Sat Aug 23 00:18:22 1997  Jeffrey A Law  (law@cygnus.com)
+
+       * pa.c (pa_reorg): Always put begin_brtab and end_brtab insns
+       around branch tables.
+       * pa.md (begin_brtab, end_brtab): Only emit the .begin_brtab
+       and .end_brtab directives if TARGET_GAS.
+
+Fri Aug 22 19:17:25 1997  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
+
+       * function.c (instantiate_virtual_regs_1, case ADDRESSOF):
+       New case.
+       (fix_lexical_addr): Handle (addressof (mem ...)).
+
+Thu Aug 21 17:56:06 1997  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
+
+       * reload.c (push_secondary_reload): If SECONDARY_MEM_NEEDED,
+       call get_secondary_mem for input before adding reload and
+       for output after.
+       (push_reload): Likewise.
+
+Thu Aug 21 15:57:03 1997  Jim Wilson  <wilson@cygnus.com>
+
+       * stmt.c (start_cleanup_deferal, end_cleanup_deferal): Test
+       block_stack before dereferencing it.
+
+Wed Aug 20 15:45:52 1997  Dave Love  <d.love@dl.ac.uk>
+
+       * dwarf2.h (enum dwarf_call_frame_info): Remove trailing comma from
+       list.
+
+Wed Aug 20 15:30:36 1997  Stan Cox  <coxs@dg-rtp.dg.com>
+
+       * i386.c (ix86_prologue, ix86_epilogue): New functions.
+       ({function,ix86_expand}_{pro,epi}logue, ix86_expand_prologue):
+       Use ix86_prologue.
+
+Wed Aug 20 14:57:11 1997  Michael Meissner  <meissner@cygnus.com>
+
+       * rs6000.h (ISSUE_RATE): Define instead of MACHINE_issue_rate.
+
+Tue Aug 19 17:10:56 1997  Jason Merrill  <jason@yorick.cygnus.com>
+
+       * cplus-dem.c: Add 'extern' to prepends_underscore.
+
+Tue Aug 19 15:46:30 1997  Jeffrey A Law  (law@cygnus.com)
+
+       * mips/r3900.h (SUBTARGET_CC1_SPEC): Remove some unnecessary stuff.
+       (MIPS_CPU_STRING_DEFAULT, MIPS_ISA_DEFAULT): Define.
+
+Mon Aug 18 21:49:02 1997  Jim Wilson  <wilson@cygnus.com>
+
+       * reload.c (find_reloads): Add code to convert RELOAD_FOR_OPADDR_ADDR
+       reloads to RELOAD_FOR_OPERAND_ADDRESS reloads.
+
+Mon Aug 18 17:39:02 1997  Mike Meissner  <meissner@cygnus.com>
+
+       * configure.in ({powerpc,rs6000}*-*-*, --with-cpu): Remove single
+       quotes around the name.
+
+Mon Aug 18 17:26:42 1997  Doug Evans  <dje@cygnus.com>
+
+       * mips.md (movsi_ulw,movsi_usw,loadgp): Give unspec a mode.
+
+Mon Aug 18 11:05:17 1997  Jeffrey A Law  (law@cygnus.com)
+
+       * mips/r3900.h (TARGET_DEFAULT): Turn on MASK_MIPS3900.
+
+Sun Aug 17 14:39:18 1997  Gavin Koch  (gavin@cygnus.com)
+
+       * mips/elf.h (PREFERRED_DEBUGGING_TYPE): Only set if not already set.
+       * mips.c (TARGET_{SINGLE,SOFT}_FLOAT): Make sure both aren't set.
+       (PROCESSOR_R3900): Set flag from option.
+       * mips.h: Add m3900 option.
+       ({PROCESSOR,TARGET,MASK}_R3900): Define.
+       (GENERATE_{BRANCHLIKELY,MADD,MULT3): Likewise.
+       (debugj,MASK_DEBUG_J): Delete to make room for m3900.
+       (BRANCH_LIKELY_P): Redefine to include 3900.
+       (GAS_ASM_SPEC,CC1_SPEC): Add m3900 option.
+       (RTX_COSTS): Add 3900.
+       * mips.md: Add 3900, including three op madd and mult.
+       * configure.in (mipstx39{,el}-*-elf*): New cases.
+       * mips/r3900.h: New file.
+
+Fri Aug 15 07:34:12 1997  Richard Earnshaw (rearnsha@arm.com)
+
+       * arm.md (umulsi3_highpart, smulsi3_highpart): Add extra reloading
+       alternatives.
+
+Fri Aug 15 07:34:12 1997  Torbjorn Granlund  <tege@tege.pdc.kth.se>
+
+       * arm.md (umulsi3_highpart, smulsi3_highpart): New patterns.
+       * arm.c (arm_rtx_costs, case TRUNCATE): New case.
+
+Fri Aug 15 06:40:03 1997  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
+
+       * genemit.c (main): Write an include for flags.h.
+       * genoutput.c (main): Likewise.
+
+       * alpha.c (override_options): Turn off byte insns for cpu=ev4 or ev5.
+
+       * alpha.md (allocate_stack): If stupid reg allocation, add USE
+       for loop variable.
+       
+       * fold-const.c (fold, compare cases): Add calls to `fold' to
+       previous change.
+
+Wed Aug 13 17:32:38 1997  Jason Merrill  <jason@yorick.cygnus.com>
+
+       * rtl.h ({SET,}ADDRESSOF_DECL): op 1 of ADDRESSOF is now the decl.
+       * function.c (put_var_into_stack, gen_mem_addressof,
+       put_addressof_into_stack): Adjust.
+
+       * expr.c (expand_expr, case TARGET_EXPR): Call mark_addressable
+       again for the slot after we give it RTL.
+       (expand_expr, case VAR_DECL): Lose gen_mem_addressof case.
+
 Wed Aug 13 17:29:25 1997  J"orn Rennecke <amylaar@cygnus.co.uk>
 
        * c-lex.c (check_newline): Pass finput again to HANDLE_PRAGMA.
 
+Wed Aug 13 16:51:35 1997  Bernd Schmidt  <crux@Pool.Informatik.RWTH-Aachen.DE>
+
+       * reload1.c (reload_cse_simplify_operands): New function.
+       (reload_cse_no_longer_dead,reload_cse_delete_death_notes): Likewise.
+       (no_longer_dead_regs): New static variable.
+       (reload_cse_simplify_set): Now returns int.
+       Don't delete death notes on previous insns, call
+       reload_cse_no_longer_dead instead.
+       Call validate_change with nonzero value for in_group.
+       (reload_cse_noop_set_p): Don't delete death notes on previous insns,
+       call reload_cse_no_longer_dead instead.
+       (reload_cse_regs): Initialize no_longer_dead_regs and call
+       reload_cse_delete_death_notes as appropriate.
+       Call apply_change_group after calling reload_cse_simplify_set.
+       Call reload_cse_simplify_set on elements of a PARALLEL.
+       Call reload_cse_simplify_operands if reload_cse_simplify_set could
+       not simplify things.
+
+Wed Aug 13 16:18:42 1997  Douglas Rupp  <rupp@gnat.com>
+
+       * vms.h (LINK_SPEC): Echo -shared, not -share, to linker.
+
+Wed Aug 13 12:51:11 1997  Richard Stallman  <rms@psilocin.gnu.ai.mit.edu>
+
+       * m68k.md: Add braces to clarify nesting.
+
+Wed Aug 13 12:51:11 1997  Jason Merrill  <jason@yorick.cygnus.com>
+
+       * calls.c (expand_call): Use assign_temp and mark_addressable
+       instead of calling gen_mem_addressof directly.
+
+Wed Aug 13 12:40:15 1997  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
+
+       * Makefile.in (install-man): Add missing $(exeext).
+
+       * configure.in (alpha*-dec-osf*): Merge various cases;
+       split off version-specific files in new case statement.
+       Include osf2or3.h even for OSF1.2.
+
+       * alpha.c (NUM_ARGS): New macro.
+       (CURRENT_FUNCTION_ARGS_INFO): Deleted.
+       (alpha_builtin_saveregs): Use new macro.
+       (function_arg): Deleted.
+       (alpha_arg_type, alpha_arg_info_reg_val): New functions.
+       * vms.h (enum avms_arg_type, avms_arg_info): New types.
+       (CUMULATIVE_ARGS, INIT_CUMULATIVE_ARGS): Update definitions
+       to use new types.
+       (SETUP_INCOMING_VARARGS): Likewise.
+       (FUNCTION_ARG{,_PARTIAL_NREGS}, FUNCTION_ARG_ADVANCE): Likewise.
+       Only update CUM in FUNCTION_ARG_ADVANCE.
+       
+Tue Aug 12 19:27:32 1997  Philippe De Muyter  <phdm@info.ucl.ac.be>
+
+       * integrate.c (save_for_inline_copying): Use 0, not NULL_PTR,
+       as initial value for real_label_map.
+       (copy_for_inline): Likewise.
+
+Tue Aug 12 16:15:36 1997  H.J. Lu  (hjl@gnu.ai.mit.edu)
+
+       * rtl.h (BYTECODE_LABEL): Use XSTR, not XEXP.
+
+       * calls.c (expand_calls): Properly call any_pending_cleanups.
+
+Tue Aug 12 12:18:01 1997  Jason Merrill  <jason@yorick.cygnus.com>
+
+       * function.c (purge_addressof_1): Add force argument.
+       (purge_addressof): If there are any ASM_OPERANDS in an insn, always
+       put ADDRESSOFs into the stack.
+
+       * function.c (setjmp_protect): See through addressof.
+       (setjmp_protect_args): Likewise.
+       * calls.c (expand_call): For now, only use addressof if the type
+       doesn't promote.
+       * function.c (put_var_into_stack): Likewise.
+       * expr.c (expand_expr): Likewise.
+       * toplev.c (rest_of_compilation): Check inlineable instead of
+       DECL_INLINE.
+       * function.c (purge_addressof_1): Try recognizing the insn with
+       and without the SUBREG.  If it doesn't work, just put the REG into
+       the stack.
+       (gen_mem_addressof): Set the mode of the MEM to the mode of the type.
+       (put_var_into_stack): Don't be fooled by addressof in an enclosing
+       scope.
+
+Sun Aug 10 22:19:19 1997  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
+
+       * explow.c (probe_stack_range): Add USE for test_addr if -O0.
+
+Sun Aug 10 22:15:40 1997  Jason Merrill  <merrill@churchy.gnu.ai.mit.edu>
+
+       * toplev.c (rest_of_compilation): Move purge_addressof before loop.
+
 Sun Aug 10 15:25:51 1997  Jim Wilson  <wilson@cygnus.com>
 
        * toplev.c (main): In -g handling code, add code to set len.
 
+       * sdbout.c (plain_type_1, case ARRAY_TYPE): Verify that TYPE_DOMAIN
+       has integer TYPE_{MAX,MIN}_VALUE before using them.
+
        * alpha.md (extendqihi2): Use HImode not QImode in force_reg call.
 
+Sun Aug 10 16:47:34 1997  Nick Burrett  <nick.burrett@btinternet.com>
+
+       * arm/aof.h (COMMON_SECTION): New macro, define common_section.
+       (EXTRA_SECTION_FUNCTIONS): Add COMMON_SECTION.
+       (EXTRA_SECTIONS): Add in_common.
+       (ASM_OUTPUT_COMMON): Call common_section() to indicate we've
+       changed areas.
+
+Sat Aug  9 20:04:35 1997  Jim Wilson  <wilson@cygnus.com>
+
+       * dwarf2out.c (gen_subprogram_die): Handle redefinition of an
+       extern inline function.
+
+Sat Aug  9 13:01:06 1997  Michael Meissner  <meissner@cygnus.com>
+
+       * rs6000/sysv4.h (*_SPEC): Add support for -mads and -myellowknife.
+       Use a common crt0.o for all embedded platforms.  Use --start-group
+       and --end-group instead of -( and -) to allow better cut and pasting
+       when debugging the linker.  Set default start for MVME text.
+       (TARGET_SWITCHES): Add -mads and -myellowknife.
+
+Fri Aug  8 20:12:43 1997  Per Bothner  <bothner@cygnus.com>
+
+       *  dwarf2out.c (gen_enumeration_type_die):
+       Make code work for a tag name, without a TYPE_STUB_DECL.
+       (gen_struct_or_union_type_die):  Likewise.
+
+Fri Aug  8 18:10:40 1997  Marc Lehmann  <pcg@goof.com>
+
+       * i386/go32.h (HAS_INIT_SECTION, HAVE_ATEXIT): New macros.
+
+Fri Aug  8 17:30:22 1997  H.J. Lu  <hjl@gnu.ai.mit.edu>
+
+        * i386.c (output_pic_addr_const, case PLUS): Emit the constant first.
+
+Fri Aug  8 17:07:36 1997  Stan Cox  <coxs@dg-rtp.dg.com>
+
+       * m88k.c (m88k_expand_prologue): Set MEM_IN_STRUCT_P of va_list
+       template.
+       
+       * reg-stack.c (compare_for_stack_reg): Swap only if the source and
+       destination are both on the regstack.
+       (subst_stack_regs_pat): Put the destination at the top of the regstack.
+       
+Fri Aug  8 17:03:21 1997  Bernd Schmidt  <crux@pool.informatik.rwth-aachen.de>
+
+        * i386.md (pop): pop increments the stack pointer.
+        (prologue_set_stack_ptr): New pattern.
+        * i386.c (ix86_expand_prologue): Use prologue_set_stack_ptr
+       instead of subsi3. 
+
+Fri Aug  8 17:00:36 1997  Paul Eggert  <eggert@twinsun.com>
+
+       * gansidecl.h, halfpic.h (STDIO_PROTO): Remove.
+       * bitmap.h, c-tree.h, output.h, reload.h, rtl.h (STDIO_PROTO):
+       Replace with PROTO in include files.
+       * bc-emit.c: Include <stdio.h> before include files that formerly
+       used STDIO_PROTO.
+       * bc-optab.c, c-common.c, c-decl.c, caller-save.c, calls.c: Likewise.
+       * convex.c, i860.c, mips.c, spur.c, tahoe.c, emit-rtl.c: Likewise.
+       * explow.c, expmed.c, expr.c, genattrtab.c, halfpic.c: Likewise.
+       * jump.c, optabs.c, profile.c, recog.c, regclass.c: Likewise.
+       * rtlanal.c, sdbout.c, unroll.c: Likewise.
+       * genattrtab.c (main): Generate files that include <stdio.h>
+       before including files that formerly used STDIO_PROTO.
+       * genemit.c (main), genextract.c (main), genopinit.c (main): Likewise.
+       * genoutput.c (output_prologue), genpeep.c (main): Likewise.
+       * genrecog.c (main): Likewise.
+       * halfpic.h (PROTO): Use "gansidecl.h" to define this instead.
+       (half_pic_finish): Declare without prototype; FILE isn't defined.
+
+       * bitmap.c, c-aux-info.c, c-lex.c: Include "config.h" first.
+       * c-parse.in, c-pragma.c, 1750a.c, a29k.c, alpha.c: Likewise.
+       * arm.c, clipper.c, dsp16xx.c, elxsi.c, fx80.c, gmicro.c: Likewise.
+       * h8300.c, i370.c, i386.c, i386/winnt.c, i960.c: Likewise.
+       * m32r.c, m68k.c, m88k.c, mn10200.c, mn10300.c, ns32k.c: Likewise.
+       * pa.c, pdp11.c, pyr.c, romp.c, rs6000.c, sparc.c, vax.c: Likewise.
+       * we32k.c, cppmain.c, dbxout.c, flow.c, fold-const.c: Likewise.
+       * gcc.c, gcov.c, global.c, integrate.c, local-alloc.c: Likewise.
+       * loop.c, mips-tdump.c, mips-tfile.c, objc-act.c: Likewise.
+       * real.c, reg-stack.c, reload.c, reload1.c, reorg.c, sched.c: Likewise.
+       * stupid.c, tree.c, varasm.c, xcoffout.c: Likewise.
+
+Fri Aug  8 14:52:35 1997  Jason Merrill  <jason@yorick.cygnus.com>
+
+       * function.c (fixup_stack_1): Stack slots can also be relative to
+       the frame or stack pointers.
+
+Fri Aug  8 14:13:49 1997  Richard Henderson  <richard@gnu.ai.mit.edu>
+
+       * dwarf2out.c (reg_loc_descriptor): Fix prototype.
+       (concat_loc_descriptor): New function.
+       (loc_descriptor): Call it.
+       (add_AT_location_description): Also elide the descriptor if both
+       halves of a CONCAT are pseudos.
+       (add_location_or_const_value_attribute): Recognize CONCAT too.
+
+Fri Aug  8 06:36:29 1997  Bernd Schmidt  <crux@Pool.Informatik.RWTH-Aachen.DE>
+
+       * c-common.c (if_stack{,_space,_pointer}): New static variables.
+       (c_expand_{start_cond,start_else,end_cond}): New functions.
+       * c-parse.in (compstmt_count): New static variable.
+       (compstmt_start): New rule.
+       (compstmt): Use new rule.
+       (do_stmt_start): Update compstmt_count.
+       (simple_if, stmt): Use new versions of start_cond, start_else,
+       and end_cond.
+
+Thu Aug  7 15:35:25 1997  Jim Wilson  <wilson@cygnus.com>
+
+       * mips/iris6.h (TARGET_LONG64): Don't define here.
+       * mips.c (override_options): Set MASK_LONG64 for ABI_64.
+       
+       * mips.c (function_prologue): Don't emit ".ent", ".frame",
+       ".mask", ".fmask" if flag_inhibit_size_directive is true.
+       (function_epilogue): Don't emit ".end" if
+       flag_inhibit_size_directive is true.
+
+       * mips/iris6.h (STARTFILE_SPEC, LIB_SPEC): Move
+       -L/usr/lib{32,64}/mips? from STARTFILE_SPEC to LIB_SPEC.
+
+Thu Aug  7 13:14:21 1997  Torbjorn Granlund  <tege@tunnis.tmg.se>
+
+       * fold-const.c (fold): Optimize unsigned x <= 0x7fffffff.
+
+Thu Aug  7 12:46:31 1997  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
+
+       * explow.c (convert_memory_address, case LABEL_REF): Copy
+       LABEL_REF_NONLOCAL_P.
+
+       * expr.c (store_constructor): Use CONST0_RTX macro, not always
+       the integer version, when clearing a register.
+
+       * varasm.c (output_constructor): Correctly check for
+       multi-word constant.
+
+Thu Aug  7 10:04:42 1997  Douglas Rupp  <rupp@gnat.com>
+
+       * alpha/vms-tramp.asm: New file.
+
+       * gcc.c (execute): Don't allow -pipe on VMS.
+       
+       * alpha.c (vmskrunch): Don't strip off trailing digits.
+       (vms_valid_decl_attribute_p): New function.
+       * alpha/vms.h (TRAMPOLINE_TEMPLATE): Add another quadword of zeros.
+       (TRAMPOLINE_SIZE): Now 32 bytes.
+       (INITIALIZE_TRAMPOLINE): Put FNADDR at offset 16, CXT at 24.
+       (DBX_DEBUGGING_INFO, ASM_FORMAT_PRIVATE_NAME): Always undefine.
+       (STARTFILE_SPEC): Likewise.
+       (PREFERRED_DEBUGGING_TYPE): Define to be Dwarf-2.
+       (VALID_MACHINE_DECL_ATTRIBUTE, ASM_OUTPUT_SECTION{,_NAME}): New macros.
+       (ASM_OUTPUT_ALIGN{,ED_COMMON}): Redefine.
+       (LINK_SPEC): Pass -share and -v.
+       (ENDFILE_SPEC, LIBGCC2_SPEC): Don't redefine.
+
+Thu Aug  7 06:21:47 1997  Bernd Schmidt  <crux@Pool.Informatik.RWTH-Aachen.DE>
+
+       * Eliminate most -Wswitch warnings.
+       * c-common.c (binary_op_error): Add default case to switch.
+       (shorten_compare, truthvalue_conversion): Likewise.
+       * c-iterate.c (collect_iteratores): Likewise.
+       * c-typeck.c (comptypes, build_component_ref): Likewise.
+       (build_binary_op, lvalue_p, build_unary_op): Likewise.
+       (build_modify_expr, initializer_constant_valid_p): Likewise.
+       (c_expand_return): Likewise.
+       * calls.c (calls_function_1): Likewise.
+       * combine.c (find_split_point, simplify_rtx): Likewise.
+       (simplify_if_then_else, simplify_logical): Likewise.
+       (extract_left_shift, make_compound_operation, force_to_mode): Likewise.
+       (known_cond, nonzero_bits, num_sign_bit_copies): Likewise.
+       (merge_outer_ops, simplify_shift_const, simplify_comparison): Likewise.
+       (reversible_comparison_p, mark_used_regs_combine): Likewise.
+       * convert.c (convert_to_integer): Likewise.
+       * cse.c (canon_hash, exp_equiv_p): Likewise.
+       (set_nonvarying_address_components, canon_reg): Likewise.
+       (simplify_unary_operation, simplify_plus_minus): Likewise.
+       (simplify_relational_operation, fold_rtx): Likewise.
+       (cse_process_note,  count_reg_usage): Likewise.
+       * dbxout.c (dbxout_symbol): Likewise.
+       * dwarf2out.c (lookup_cfa_1, print_die): Likewise.
+       * emit_rtl.c (copy_rtx_if_shared, reset_used_flags): Likewise.
+       * explow.c (plus_constant_wide, convert_memory_address): Likewise.
+       (promote_mode, emit_stack_save, emit_stack_restore): Likewise.
+       * expmed.c (expand_divmod, emit_store_flag): Likewise.
+       * expr.c (queued_subexp_p, is_zeros_p, safe_from_p): Likewise.
+       (bc_expand_expr, preexpand_calls, convert_move): Likewise.
+       * final.c (get_attr_length, final_scan_insn): Likewise.
+       (walk_alter_subreg, alter_cond): Likewise.
+       * flow.c (jmp_uses_reg_or_mem, mark_used_regs): Likewise.
+       * fold-const.c (operand_equal_p, twoval_comparison_p): Likewise.
+       (eval_subst, invert_truthvalue, range_binop): Likewise.
+       (make_range, fold): Likewise.
+       * function.c (fixup_var_refs_1, instantiate_virtual_regs_1): Likewise.
+       * genattrtab.c (attr_copy_rtx, make_canonical): Likewise.
+       (encode_units_mask, simplify_test_exp): Likewise.
+       (find_and_mark_used_attributes, write_test_expr): Likewise.
+       (simplify_with_current_value_aux, clear_struct_flag): Likewise.
+       (count_sub_rtxs, gen_insn walk_attr_value): Likewise.
+       (copy_rtx_unchanging): Likewise.
+       * genconfig.c (walk_insn_part): Likewise.
+       * genextract.c (walk_rtx): Likewise.
+       * genoutput.c (scan_operands): Likewise.
+       * genpeep.c (match_rtx): Likewise.
+       * genrecog.c (add_to_sequence): Likewise.
+       * integrate.c (copy_for_inline, copy_rtx_and_substitute): Likewise.
+       (subst_constants): Likewise.
+       * jump.c (duplicate_loop_exit_test, comparison_dominates_p): Likewise.
+       (mark_jump_label, rtx_renumbered_equal_p): Likewise.
+       (rtx_equal_for_thread_p): Likewise.
+       * local-alloc.c (memref_referenced_p): Likewise.
+       * loop.c (record_excess_regs, reg_in_basic_block_p): Likewise.
+       (get_condition, replace_call_address): Likewise.
+       (count_nonfixed_reads, find_and_verify_loops, find_mem_givs): Likewise.
+       (maybe_eliminate_biv_1, invariant_p, simplify_giv_expr): Likewise.
+       * optabs.c (emit_float_lib_cmp): Likewise.
+       * print-tree.c (print_node): Likewise.
+       * recog.c (validate_replace_rtx_1, find_single_use_1): Likewise.
+       * reload.c (subst_reg_equivs, find_reloads_address_1): Likewise.
+       (refers_to_regno_for_reload_p, find_equiv_reg): Likewise.
+       * reload1.c (set_label_offsets, eliminate_regs): Likewise.
+       (scan_paradoxical_subregs, count_occurrences): Likewise.
+       * rtl.c (copy_rtx, copy_most_rtx): Likewise.
+       * rtlanal.c (rtx_varies_p, rtx_addr_can_trap_p): Likewise.
+       (reg_mentioned_p, reg_referenced_p, modified_between_p): Likewise.
+       (modified_in_p, refers_to_regno_p, volatile_insn_p): Likewise.
+       (volatile_refs_p, side_effects_p): Likewise.
+       (inequality_comparison_p, replace_regs): Likewise.
+       * sched.c (sched_analyze_2): Likewise.
+       * stmt.c (expand_return): Likewise.
+       * tree.c (staticp, unsave_expr_now, contains_placeholder_p): Likewise.
+       (substitute_in_expr, build_type_attribute_variant): Likewise.
+       (simple_cst_equal): Likewise.
+       * unroll.c (remap_split_bivs): Likewise.
+       * varasm.c (const_hash, compare_constant_1): Likewise.
+       (decode_rtx_const, output_addressed_constants): Likewise.
+       (output_constant): Likewise.
+       * print-tree.c (print_node): Convert switch with one case into an if.
+       * sched.c (memrefs_conflict_p): Likewise.
+       * genrecog.c (write_tree_1): Output default case for every switch.
+
+       * profile.c (output_arc_profiler) [SMALL_REGISTER_CLASSES]:
+       Apply PATTERN only to insns.
+
+Thu Aug  7 06:13:20 1997  Robert Lipe  <robertl@dgii.com>
+
+       * i386/t-sco5 (libgcc2-elf.a): Resync with Makefile.in.
+
+Wed Aug  6 19:28:05 1997  Jim Wilson  <wilson@cygnus.com>
+
+       * dwarf2out.c (build_abbrev_table): Use xrealloc not xmalloc.
+
+Wed Aug  6 12:57:24 1997  Jason Merrill  <jason@yorick.cygnus.com>
+
+       * dwarf2out.c (output_call_frame_info): Always emit the info.
+       (dwarf2out_frame_debug): We can initialize the temp reg in the
+       epilogue, too.
+
+       * rtl.def: Add ADDRESSOF.
+       * rtl.h (ADDRESSOF_TYPE, SET_ADDRESSOF_TYPE): New macros.
+       * Makefile.in (mostlyclean): Remove *.addressof.
+       * toplev.c (rest_of_compilation): Set DECL_DEFER_OUTPUT on
+       non-nested inlines.  Run purge_addressof after CSE.
+       (various): Add .addressof RTL dump file.
+       * rtl.c (copy_rtx): No need to copy ADDRESSOF.
+       * reload1.c (eliminate_regs): Elide ADDRESSOF.
+       * recog.c (general_operand): (MEM (ADDRESSOF ())) is a valid operand.
+       So is (ADDRESSOF ()).
+       (memory_address_p): (ADDRESSOF ()) is a valid memory address.
+       * integrate.c (expand_inline_function): If the structure_value_addr
+       is an ADDRESSOF, we can use it as a constant.
+       (copy_rtx_and_substitute): Copy a '0' operand over unchanged.
+       * function.c (fixup_var_refs_1): Remove (ADDRESSOF (MEM ())).
+       (gen_mem_addressof): New fn.
+       (put_addressof_into_stack): New fn.
+       (purge_addressof_1): New fn.
+       (purge_addressof): New fn.
+       (instantiate_decl): Don't bother looking into an ADDRESSOF.
+       (put_var_into_stack): Call gen_mem_addressof for local REGs instead
+       of calling put_reg_into_stack.
+       * expr.c (expand_expr, case TARGET_EXPR): Put the temp in a register 
+       if it will fit.
+       (expand_expr, case ADDR_EXPR): Call gen_mem_addressof to take the
+       address of a REG.
+       * explow.c (memory_address): An ADDRESSOF is a valid memory address.
+       * dwarfout.c (location_or_const_value_attribute): Handle ADDRESSOF.
+       * dwarf2out.c (add_location_or_const_value_attribute): Handle
+       ADDRESSOF.
+       * cse.c (FIXED_BASE_PLUS_P): Add ADDRESSOF.
+       (NONZERO_BASE_PLUS_P): Add ADDRESSOF.
+       (canon_hash): Ignore '0' operands.
+       (find_best_addr): Don't try to replace an ADDRESSOF.
+       (fold_rtx): If our address has a const equiv of an ADDRESSOF, use it.
+       * calls.c (expand_call): Put the struct value in a register if
+       it fits.
+
+Tue Aug  5 16:10:45 1997  Jason Merrill  <jason@yorick.cygnus.com>
+
+       * mips.c (function_arg): Handle passing a struct 
+       containing a double in a DFmode register without the PARALLEL.
+
+Tue Aug  5 12:27:31 1997  Doug Evans  <dje@cygnus.com>
+
+       * configure.in (sparc-*-solaris2): Set float_format to i128.
+       * config/float-i128.h: New file.
+
+Mon Aug  4 17:45:19 1997  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
+
+       * combine.c (try_combine): If have PARALLEL of independent SETs
+       and have cc0, ensure insn using CC0 come first.
+
+Mon Aug  4 15:22:41 1997  Mike Meissner  <meissner@cygnus.com>
+
+       * rs6000/sysv4.h (JUMP_TABLES_IN_TEXT_SECTION): Undef for System V
+       environments.
+
+Mon Aug  4 12:34:41 1997  Philip Blundell  <pb@nexus.co.uk>
+
+       * configure.in (arm-*-aout): Set tmake_file correctly.
+
+Mon Aug  4 08:06:48 1997  Bernd Schmidt  <crux@pool.informatik.rwth-aachen.de>
+
+       * reload.c (find_reloads_address_1): Don't pass VOIDmode for an
+       integer argument of push_reload.
+
+       * rtlanal.c (may_trap_p): Fix unintended fall-through so divisions by
+       non-zero constants are handled properly.  Return 1 for FP divisions.
+
+Mon Aug  4 06:52:20 1997  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>
+
+       * c-common.c (check_format_info): Store each flag character only
+       once in the flag_chars array.
+
+Sun Aug  3 21:57:31 1997  Jim Meyering  <meyering@eng.ascend.com>
+
+       * objc/Make-lang.in (objc/*.o): Depend on $(GCC_PASSES).
+
+Sun Aug  3 21:54:51 1997  Nick Burrett  <n.a.burrett@btinternet.com>
+
+       * cpplib.c (cpp_start_read): Recognise suffixes 'cp' and 'c++'.
+
+Sun Aug  3 19:18:27 1997  Ralf Baechle  <ralf@uni-koblenz.de>
+
+       * Makefile.in (mostlyclean): Remove libgcc1-test.
+
+Sun Aug  3 19:10:27 1997  Klaus Espenlaub  <kespenla@hydra.informatik.uni-ulm.de>
+
+       * Makefile.in (T): Move to place where it can be overridden.
+       (install_common): Fix permissions of specs and EXTRA_PARTS files.
+
+Sun Aug  3 19:07:04 1997  Jan-Jaap van der Heijden  <J.J.vanderHeijden@student.utwente.nl>
+
+       * gcc.c (default_compilers): Add default entries for Pascal.
+
+Sun Aug  3 18:38:41 1997  Richard Henderson  <rth@cygnus.com>
+
+       * alpha.c (alpha_return_addr): New function.
+       (output_epilog): Zero alpha_return_addr_rtx.
+       * alpha.h (RETURN_ADDR_RTX): Call alpha_return_addr.
+
+Sun Aug  3 17:27:44 1997  H.J. Lu  (hjl@gnu.ai.mit.edu)
+
+       * Makefile.in (INSTALL): Build in $(srcdir).
+
+       * config/linux.h (DEFAULT_VTABLE_THUNKS): New macro.
+
+Sun Aug  3 17:18:31 1997  Richard Earnshaw (rearnshaw@cambridge.arm.com)
+
+       * expr.c (expand_builtin, case BUILT_IN_RETURN_ADDRESS): Emit warning
+       if return address cannot be determined.
+
+Sun Aug  3 17:04:00 1997  Bernd Schmidt  <crux@pool.informatik.rwth-aachen.de>
+
+       * stupid.c (stupid_life_analysis): If function receives non-local
+       goto, don't let any registers live across calls.
+
+       * fold-const.c (merge_ranges): Make sure that if one range is subset
+       of another, it will always be the second range.  Correct (+,-) case to
+       account for this.
+
+Sun Aug  3 16:48:30 1997  Paul Eggert  <eggert@twinsun.com>
+
+       * c-lex.c (yylex): Remove duplicate check on high bit before
+       invoking int_fits_type_p.
+
+Sun Aug  3 16:44:41 1997  Bernd Schmidt  <crux@pool.informatik.rwth-aachen.de>
+
+       * reload.c (find_equiv_reg): If goal is a pseudo that got memory, a
+       store into memory makes it invalid.  This was handled in the single
+       set case, but missing in the PARALLEL case.
+
+Sun Aug  3 09:13:47 1997  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
+
+       * expr.c (store_field): Return quickly if EXP is ERROR_MARK.
+
+       * c-typeck.c (unary_complex_lvalue): Don't warn about COMPOUND_EXPR
+       or COND_EXPR if FUNCTION_TYPE.
+
+       * alpha.h (ASM_SPEC): Add -O0.
+
+       * expr.h (clear_storage): Now returns rtx.
+       (emit_block_move): Likewise; delete duplicate declaration.
+       * expr.c (clear_storage, emit_block_move): Return address of
+       dest if calling memset/memcpy.
+       (expand_builtin, BUILT_IN_MEM{CPY,SET}): Return value from
+       clear_storage or emit_block_move if present.
+
+       * c-decl.c (start_function): Reset immediate_size_expand on
+       error return.
+
 Sat Aug  2 18:50:43 1997  Paul Eggert  <eggert@twinsun.com>
 
        * tree.c (int_fits_type_p): Negative ints never fit unsigned
index 8c1f711..0c646b8 100644 (file)
@@ -66,8 +66,7 @@ and includes all the necessary compilation tools and libraries.
      aliases.  For example, `sun3' stands for `m68k-sun', so
      `sun3-sunos4.1' is another way to specify a Sun 3.  You can also
      use simply `sun3-sunos', since the version of SunOS is assumed by
-     default to be version 4.  `sun3-bsd' also works, since `configure'
-     knows that the only BSD variant on a Sun 3 is SunOS.
+     default to be version 4.
 
      You can specify a version number after any of the system types,
      and some of the CPU types.  In most cases, the version is
@@ -104,11 +103,11 @@ and includes all the necessary compilation tools and libraries.
           are
           `hppa1.0-ANY-ANY', `hppa1.1-ANY-ANY', `i386-ANY-sysv',
           `i386-ANY-isc',
-          `i860-ANY-bsd', `m68k-bull-sysv', `m68k-hp-hpux',
-          `m68k-sony-bsd',
-          `m68k-altos-sysv', `m68000-hp-hpux', `m68000-att-sysv',
-          `ANY-lynx-lynxos', and `mips-ANY').  On any other system,
-          `--with-gnu-as' has no effect.
+          `i860-ANY-bsd', `m68k-bull-sysv',
+          `m68k-hp-hpux', `m68k-sony-bsd',
+          `m68k-altos-sysv', `m68000-hp-hpux',
+          `m68000-att-sysv', `ANY-lynx-lynxos', and `mips-ANY').  On
+          any other system, `--with-gnu-as' has no effect.
 
           On the systems listed above (except for the HP-PA, for ISC on
           the 386, and for `mips-sgi-irix5.*'), if you use GAS, you
@@ -162,6 +161,16 @@ and includes all the necessary compilation tools and libraries.
           `--nfp' currently has no effect, though perhaps there are
           other systems where it could usefully make a difference.
 
+    `--enable-objcthreads=TYPE'
+          Certain systems, notably Linux-based GNU systems, can't be
+          relied on to supply a threads facility for the Objective C
+          runtime and so will default to single-threaded runtime.  They
+          may, however, have a library threads implementation
+          available, in which case threads can be enabled with this
+          option by supplying a suitable TYPE, probably `posix'.  The
+          possibilities for TYPE are `single', `posix', `win32',
+          `solaris', `irix' and `mach'.
+
      The `configure' script searches subdirectories of the source
      directory for other compilers that are to be integrated into GNU
      CC.  The GNU compiler for C++, called G++ is in a subdirectory
@@ -217,6 +226,17 @@ and includes all the necessary compilation tools and libraries.
      different convention (not `/usr/local') for where to put
      site-specific files.
 
+     The default value for `--local-prefix' is `/usr/local' regardless
+     of the value of `--prefix'.  Specifying `--prefix' has no effect
+     on which directory GNU CC searches for local header files.  This
+     may seem counterintuitive, but actually it is logical.
+
+     The purpose of `--prefix' is to specify where to *install GNU CC*.
+     The local header files in `/usr/local/include'--if you put any in
+     that directory--are not part of GNU CC.  They are part of other
+     programs--perhaps many others.  (GNU CC installs its own header
+     files in another directory which is based on the `--prefix' value.)
+
      *Do not* specify `/usr' as the `--local-prefix'!  The directory
      you use for `--local-prefix' *must not* contain any of the
      system's standard header files.  If it did contain them, certain
@@ -224,6 +244,11 @@ and includes all the necessary compilation tools and libraries.
      targets), because this would override and nullify the header file
      corrections made by the `fixincludes' script.
 
+     Indications are that people who use this option use it based on
+     mistaken ideas of what it is for.  People use it as if it specified
+     where to install part of GNU CC.  Perhaps they make this assumption
+     because installing GNU CC creates the directory.
+
   6. Make sure the Bison parser generator is installed.  (This is
      unnecessary if the Bison output files `c-parse.c' and `cexp.c' are
      more recent than `c-parse.y' and `cexp.y' and you do not plan to
@@ -400,11 +425,14 @@ and includes all the necessary compilation tools and libraries.
      compiler driver program looks for them.  Here TARGET is the target
      machine type specified when you ran `configure', and VERSION is
      the version number of GNU CC.  This naming scheme permits various
-     versions and/or cross-compilers to coexist.
+     versions and/or cross-compilers to coexist.  It also copies the
+     executables for compilers for other languages (e.g., `cc1plus' for
+     C++) to the same directory.
 
      This also copies the driver program `xgcc' into
      `/usr/local/bin/gcc', so that it appears in typical execution
-     search paths.
+     search paths.  It also copies `gcc.1' into `/usr/local/man/man1'
+     and info pages into `/usr/local/info'.
 
      On some systems, this command causes recompilation of some files.
      This is usually due to bugs in `make'.  You should either ignore
@@ -427,23 +455,65 @@ and includes all the necessary compilation tools and libraries.
      a C++ run-time library.  All I/O functionality, special class
      libraries, etc., are available in the libg++ distribution.
 
+ 17. GNU CC includes a runtime library for Objective-C because it is an
+     integral part of the language.  You can find the files associated
+     with the library in the subdirectory `objc'.  The GNU Objective-C
+     Runtime Library requires header files for the target's C library in
+     order to be compiled,and also requires the header files for the
+     target's thread library if you want thread support.  *Note
+     Cross-Compilers and Header Files: Cross Headers, for discussion
+     about header files issues for cross-compilation.
+
+     When you run `configure', it picks the appropriate Objective-C
+     thread implementation file for the target platform.  In some
+     situations, you may wish to choose a different back-end as some
+     platforms support multiple thread implementations or you may wish
+     to disable thread support completely.  You do this by specifying a
+     value for the OBJC_THREAD_FILE makefile variable on the command
+     line when you run make, for example:
+
+          make CC="stage2/xgcc -Bstage2/" CFLAGS="-g -O2" OBJC_THREAD_FILE=thr-single
+
+     Below is a list of the currently available back-ends.
+
+        * thr-single Disable thread support, should work for all
+          platforms.
+
+        * thr-decosf1 DEC OSF/1 thread support.
+
+        * thr-irix SGI IRIX thread support.
+
+        * thr-mach Generic MACH thread support, known to work on
+          NEXTSTEP.
+
+        * thr-os2 IBM OS/2 thread support.
+
+        * thr-posix Generix POSIX thread support.
+
+        * thr-pthreads PCThreads on Linux-based GNU systems.
+
+        * thr-solaris SUN Solaris thread support.
+
+        * thr-win32 Microsoft Win32 API thread support.
+
 Configurations Supported by GNU CC
 ==================================
 
    Here are the possible CPU types:
 
      1750a, a29k, alpha, arm, cN, clipper, dsp16xx, elxsi, h8300,
-     hppa1.0, hppa1.1, i370, i386, i486, i586, i860, i960, m68000, m68k,
-     m88k, mips, mipsel, mips64, mips64el, ns32k, powerpc, powerpcle,
-     pyramid, romp, rs6000, sh, sparc, sparclite, sparc64, vax, we32k.
+     hppa1.0, hppa1.1, i370, i386, i486, i586, i860, i960, m32r,
+     m68000, m68k, m88k, mips, mipsel, mips64, mips64el, ns32k,
+     powerpc, powerpcle, pyramid, romp, rs6000, sh, sparc, sparclite,
+     sparc64, vax, we32k.
 
    Here are the recognized company names.  As you can see, customary
 abbreviations are used rather than the longer official names.
 
-     acorn, alliant, altos, apollo, att, bull, cbm, convergent, convex,
-     crds, dec, dg, dolphin, elxsi, encore, harris, hitachi, hp, ibm,
-     intergraph, isi, mips, motorola, ncr, next, ns, omron, plexus,
-     sequent, sgi, sony, sun, tti, unicom, wrs.
+     acorn, alliant, altos, apollo, apple, att, bull, cbm, convergent,
+     convex, crds, dec, dg, dolphin, elxsi, encore, harris, hitachi,
+     hp, ibm, intergraph, isi, mips, motorola, ncr, next, ns, omron,
+     plexus, sequent, sgi, sony, sun, tti, unicom, wrs.
 
    The company name is meaningful only to disambiguate when the rest of
 the information supplied is insufficient.  You can omit it, writing
@@ -452,9 +522,9 @@ is equivalent to `vax-dec-ultrix4.2'.
 
    Here is a list of system types:
 
-     386bsd, aix, acis, amigaos, aos, aout, bosx, bsd, clix, coff,
+     386bsd, aix, acis, amigaos, aos, aout, aux, bosx, bsd, clix, coff,
      ctix, cxux, dgux, dynix, ebmon, ecoff, elf, esix, freebsd, hms,
-     genix, gnu, gnu/linux, hiux, hpux, iris, irix, isc, luna, lynxos,
+     genix, gnu, linux-gnu, hiux, hpux, iris, irix, isc, luna, lynxos,
      mach, minix, msdos, mvs, netbsd, newsos, nindy, ns, osf, osfrose,
      ptx, riscix, riscos, rtu, sco, sim, solaris, sunos, sym, sysv,
      udi, ultrix, unicos, uniplus, unos, vms, vsta, vxworks, winnt,
@@ -505,12 +575,11 @@ special things you must know:
 `1750a-*-*'
      MIL-STD-1750A processors.
 
-     Starting with GCC 2.6.1, the MIL-STD-1750A cross configuration no
-     longer supports the Tektronix Assembler, but instead produces
-     output for `as1750', an assembler/linker available under the GNU
-     Public License for the 1750A. Contact *kellogg@space.otn.dasa.de*
-     for more details on obtaining `as1750'.  A similarly licensed
-     simulator for the 1750A is available from same address.
+     The MIL-STD-1750A cross configuration produces output for
+     `as1750', an assembler/linker available under the GNU Public
+     License for the 1750A. `as1750' can be obtained at
+     *ftp://ftp.fta-berlin.de/pub/crossgcc/1750gals/*.  A similarly
+     licensed simulator for the 1750A is available from same address.
 
      You should ignore a fatal error during the building of libgcc
      (libgcc is not yet implemented for the 1750A.)
@@ -589,15 +658,27 @@ special things you must know:
      DBX.  DEC is now aware of this problem with the assembler and
      hopes to provide a fix shortly.
 
-`arm'
+`arc-*-elf'
+     Argonaut ARC processor.  This configuration is intended for
+     embedded systems.
+
+`arm-*-aout'
      Advanced RISC Machines ARM-family processors.  These are often
      used in embedded applications.  There are no standard Unix
      configurations.  This configuration corresponds to the basic
-     instruction sequences and will produce a.out format object modules.
+     instruction sequences and will produce `a.out' format object
+     modules.
 
      You may need to make a variant of the file `arm.h' for your
      particular configuration.
 
+`arm-*-linuxaout'
+     Any of the ARM family processors running the Linux-based GNU
+     system with the `a.out' binary format (ELF is not yet supported).
+     You must use version 2.8.1.0.7 or later of the Linux binutils,
+     which you can download from `sunsite.unc.edu:/pub/Linux/GCC' and
+     other mirror sites for Linux-based GNU systems.
+
 `arm-*-riscix'
      The ARM2 or ARM3 processor running RISC iX, Acorn's port of BSD
      Unix.  If you are running a version of RISC iX prior to 1.2 then
@@ -651,82 +732,55 @@ special things you must know:
      A port to the AT&T DSP1610 family of processors.
 
 `h8300-*-*'
+     Hitachi H8/300 series of processors.
+
      The calling convention and structure layout has changed in release
      2.6.  All code must be recompiled.  The calling convention now
      passes the first three arguments in function calls in registers.
      Structures are no longer a multiple of 2 bytes.
 
 `hppa*-*-*'
-     There are two variants of this CPU, called 1.0 and 1.1, which have
-     different machine descriptions.  You must use the right one for
-     your machine.  All 7NN machines and 8N7 machines use 1.1, while
-     all other 8NN machines use 1.0.
-
-     The easiest way to handle this problem is to use `configure hpNNN'
-     or `configure hpNNN-hpux', where NNN is the model number of the
-     machine.  Then `configure' will figure out if the machine is a 1.0
-     or 1.1.  Use `uname -a' to find out the model number of your
-     machine.
+     There are several variants of the HP-PA processor which run a
+     variety of operating systems.  GNU CC must be configured to use
+     the correct processor type and operating system, or GNU CC will
+     not function correctly.  The easiest way to handle this problem is
+     to *not* specify a target when configuring GNU CC, the `configure'
+     script will try to automatically determine the right processor
+     type and operating system.
 
      `-g' does not work on HP-UX, since that system uses a peculiar
      debugging format which GNU CC does not know about.  However, `-g'
      will work if you also use GAS and GDB in conjunction with GCC.  We
      highly recommend using GAS for all HP-PA configurations.
 
-     You should be using GAS-2.3 (or later) along with GDB-4.12 (or
+     You should be using GAS-2.6 (or later) along with GDB-4.16 (or
      later).  These can be retrieved from all the traditional GNU ftp
      archive sites.
 
-     Build GAS and install the resulting binary as:
-
-          /usr/local/lib/gcc-lib/CONFIGURATION/GCCVERSION/as
-
-     where CONFIGURATION is the configuration name (perhaps
-     `hpNNN-hpux') and GCCVERSION is the GNU CC version number.  Do
-     this *before* starting the build process, otherwise you will get
-     errors from the HPUX assembler while building `libgcc2.a'.  The
-     command
-
-          make install-dir
+     GAS will need to be installed into a directory before `/bin',
+     `/usr/bin', and `/usr/ccs/bin' in your search path.  You should
+     install GAS before you build GNU CC.
 
-     will create the necessary directory hierarchy so you can install
-     GAS before building GCC.
-
-     To enable debugging, configure GNU CC with the `--with-gnu-as'
-     option before building.
-
-     It has been reported that GNU CC produces invalid assembly code for
-     1.1 machines running HP-UX 8.02 when using the HP assembler.
-     Typically the errors look like this:
-          as: bug.s @line#15 [err#1060]
-            Argument 0 or 2 in FARG upper
-                   - lookahead = ARGW1=FR,RTNVAL=GR
-          as: foo.s @line#28 [err#1060]
-            Argument 0 or 2 in FARG upper
-                   - lookahead = ARGW1=FR
-
-     You can check the version of HP-UX you are running by executing
-     the command `uname -r'.   If you are indeed running HP-UX 8.02 on
-     a PA and using the HP assembler then configure GCC with
-     "hpNNN-hpux8.02".
+     To enable debugging, you must configure GNU CC with the
+     `--with-gnu-as' option before building.
 
 `i370-*-*'
      This port is very preliminary and has many known bugs.  We hope to
      have a higher-quality port for this machine soon.
 
-`i386-*-linuxoldld'
-     Use this configuration to generate a.out binaries on Linux if you
-     do not have gas/binutils version 2.5.2 or later installed. This is
-     an obsolete configuration.
+`i386-*-linux-gnuoldld'
+     Use this configuration to generate `a.out' binaries on Linux-based
+     GNU systems if you do not have gas/binutils version 2.5.2 or later
+     installed. This is an obsolete configuration.
 
-`i386-*-linuxaout'
-     Use this configuration to generate a.out binaries on Linux. This
-     configuration is being superseded. You must use gas/binutils
-     version 2.5.2 or later.
+`i386-*-linux-gnuaout'
+     Use this configuration to generate `a.out' binaries on Linux-based
+     GNU systems. This configuration is being superseded. You must use
+     gas/binutils version 2.5.2 or later.
 
-`i386-*-linux'
-     Use this configuration to generate ELF binaries on Linux.  You must
-     use gas/binutils version 2.5.2 or later.
+`i386-*-linux-gnu'
+     Use this configuration to generate ELF binaries on Linux-based GNU
+     systems.  You must use gas/binutils version 2.5.2 or later.
 
 `i386-*-sco'
      Compilation with RCC is recommended.  Also, it may be a good idea
@@ -736,6 +790,27 @@ special things you must know:
 `i386-*-sco3.2v4'
      Use this configuration for SCO release 3.2 version 4.
 
+`i386-*-sco3.2v5*'
+     Use this for the SCO OpenServer Release family including 5.0.0,
+     5.0.2, 5.0.4, Internet FastStart 1.0, and Internet FastStart 1.1.
+
+     GNU CC can generate ELF binaries (if you specify `-melf') or COFF
+     binaries (the default).  If you are going to build your compiler
+     in ELF mode (once you have bootstrapped the first stage compiler)
+     you *must* specify `-melf' as part of `CC', *not* `CFLAGS', for
+     example as `CC="stage1/xgcc -melf -Bstage1/" '.  If you do not do
+     this, the bootstrap will generate incorrect versions of `libgcc.a'.
+
+     You must have TLS597 (from ftp.sco.com/TLS) installed for ELF
+     binaries to work correctly. Note that Open Server 5.0.2 *does*
+     need TLS597 installed.
+
+     *NOTE:* You must follow the instructions about invoking `make
+     bootstrap' because the native OpenServer compiler builds a
+     `cc1plus' that will not correctly parse many valid C++ programs.
+     You must do a `make bootstrap' if you are building with the native
+     compiler.
+
 `i386-*-isc'
      It may be a good idea to link with GNU malloc instead of the
      malloc that comes with the system.
@@ -748,8 +823,8 @@ special things you must know:
      that comes with the system.
 
 `i386-ibm-aix'
-     You need to use GAS version 2.1 or later, and and LD from GNU
-     binutils version 2.2 or later.
+     You need to use GAS version 2.1 or later, and LD from GNU binutils
+     version 2.2 or later.
 
 `i386-sequent-bsd'
      Go to the Berkeley universe before compiling.  In addition, you
@@ -773,7 +848,7 @@ special things you must know:
      Sun systems.
 
 `i[345]86-*-winnt3.5'
-     This version requires a GAS that has not let been released.  Until
+     This version requires a GAS that has not yet been released.  Until
      it is, you can get a prebuilt binary version via anonymous ftp from
      `cs.washington.edu:pub/gnat' or `cs.nyu.edu:pub/gnat'. You must
      also use the Microsoft header files from the Windows NT 3.5 SDK.
@@ -829,9 +904,13 @@ special things you must know:
      You can tell GNU CC to use the GNU assembler and linker, by
      specifying `--with-gnu-as --with-gnu-ld' when configuring.  These
      will produce COFF format object files and executables;  otherwise
-     GNU CC will use the installed tools, which produce a.out format
+     GNU CC will use the installed tools, which produce `a.out' format
      executables.
 
+`m32r-*-elf'
+     Mitsubishi M32R processor.  This configuration is intended for
+     embedded systems.
+
 `m68000-hp-bsd'
      HP 9000 series 200 running BSD.  Note that the C compiler that
      comes with this system cannot compile GNU CC; contact
@@ -842,6 +921,20 @@ special things you must know:
      Also, you must fix a kernel bug.  Details in the file
      `README.ALTOS'.
 
+`m68k-apple-aux'
+     Apple Macintosh running A/UX.  You may configure GCC  to use
+     either the system assembler and linker or the GNU assembler and
+     linker.  You should use the GNU configuration if you can,
+     especially if you also want to use GNU C++.  You enabled that
+     configuration with + the `--with-gnu-as' and `--with-gnu-ld'
+     options to `configure'.
+
+     Note the C compiler that comes with this system cannot compile GNU
+     CC.  You can fine binaries of GNU CC for bootstrapping on
+     `jagubox.gsfc.nasa.gov'.  You will also a patched version of
+     `/bin/ld' there that raises some of the arbitrary limits found in
+     the original.
+
 `m68k-att-sysv'
      AT&T 3b1, a.k.a. 7300 PC.  Special procedures are needed to
      compile GNU CC with this machine's standard C compiler, due to
@@ -853,7 +946,7 @@ special things you must know:
      However, the following procedure might work.  We are unable to
      test it.
 
-       1. Comment out the `#include "config.h"' line on line 37 of
+       1. Comment out the `#include "config.h"' line near the start of
           `cccp.c' and do `make cpp'.  This makes a preliminary version
           of GNU cpp.
 
@@ -1148,48 +1241,79 @@ special things you must know:
      prevent the linker from producing a correct library or runnable
      executable.
 
+     By default, AIX 4.1 produces code that can be used on either Power
+     or PowerPC processors.
+
+     You can specify a default version for the `-mcpu='CPU_TYPE switch
+     by using the configure option `--with-cpu-'CPU_TYPE.
+
 `powerpc-*-elf'
 `powerpc-*-sysv4'
      PowerPC system in big endian mode, running System V.4.
 
-     This configuration is currently under development.
+     You can specify a default version for the `-mcpu='CPU_TYPE switch
+     by using the configure option `--with-cpu-'CPU_TYPE.
+
+`powerpc-*-linux-gnu'
+     PowerPC system in big endian mode, running the Linux-based GNU
+     system.
+
+     You can specify a default version for the `-mcpu='CPU_TYPE switch
+     by using the configure option `--with-cpu-'CPU_TYPE.
 
 `powerpc-*-eabiaix'
      Embedded PowerPC system in big endian mode with -mcall-aix
-     selected as the default.  This system is currently under
-     development.
+     selected as the default.
+
+     You can specify a default version for the `-mcpu='CPU_TYPE switch
+     by using the configure option `--with-cpu-'CPU_TYPE.
 
 `powerpc-*-eabisim'
      Embedded PowerPC system in big endian mode for use in running
-     under the PSIM simulator.  This system is currently under
-     development.
+     under the PSIM simulator.
+
+     You can specify a default version for the `-mcpu='CPU_TYPE switch
+     by using the configure option `--with-cpu-'CPU_TYPE.
 
 `powerpc-*-eabi'
      Embedded PowerPC system in big endian mode.
 
-     This configuration is currently under development.
+     You can specify a default version for the `-mcpu='CPU_TYPE switch
+     by using the configure option `--with-cpu-'CPU_TYPE.
 
 `powerpcle-*-elf'
 `powerpcle-*-sysv4'
      PowerPC system in little endian mode, running System V.4.
 
-     This configuration is currently under development.
+     You can specify a default version for the `-mcpu='CPU_TYPE switch
+     by using the configure option `--with-cpu-'CPU_TYPE.
 
-`powerpcle-*-sysv4'
-     Embedded PowerPC system in little endian mode.
+`powerpcle-*-solaris2*'
+     PowerPC system in little endian mode, running Solaris 2.5.1 or
+     higher.
 
-     This system is currently under development.
+     You can specify a default version for the `-mcpu='CPU_TYPE switch
+     by using the configure option `--with-cpu-'CPU_TYPE.  Beta
+     versions of the Sun 4.0 compiler do not seem to be able to build
+     GNU CC correctly.  There are also problems with the host assembler
+     and linker that are fixed by using the GNU versions of these tools.
 
 `powerpcle-*-eabisim'
      Embedded PowerPC system in little endian mode for use in running
      under the PSIM simulator.
 
-     This system is currently under development.
-
 `powerpcle-*-eabi'
      Embedded PowerPC system in little endian mode.
 
-     This configuration is currently under development.
+     You can specify a default version for the `-mcpu='CPU_TYPE switch
+     by using the configure option `--with-cpu-'CPU_TYPE.
+
+`powerpcle-*-winnt'
+`powerpcle-*-pe'
+     PowerPC system in little endian mode running Windows NT.
+
+     You can specify a default version for the `-mcpu='CPU_TYPE switch
+     by using the configure option `--with-cpu-'CPU_TYPE.
 
 `vax-dec-ultrix'
      Don't try compiling with Vax C (`vcc').  It produces incorrect code
@@ -1380,10 +1504,10 @@ supports.
 
    If you want to install libraries to use with the cross-compiler,
 such as a standard C library, put them in the directory
-`/usr/local/TARGET/lib'; installation of GNU CC copies all all the
-files in that subdirectory into the proper place for GNU CC to find
-them and link with them.  Here's an example of copying some libraries
-from a target machine:
+`/usr/local/TARGET/lib'; installation of GNU CC copies all the files in
+that subdirectory into the proper place for GNU CC to find them and
+link with them.  Here's an example of copying some libraries from a
+target machine:
 
      ftp TARGET-MACHINE
      lcd /usr/local/TARGET/lib
@@ -1524,7 +1648,7 @@ from the host machine, the cross-compiler can use them also.
    Otherwise, you're on your own in finding header files to use when
 cross-compiling.
 
-   When you have found suitable header files, put them in
+   When you have found suitable header files, put them in the directory
 `/usr/local/TARGET/include', before building the cross compiler.  Then
 installation will run fixincludes properly and install the corrected
 versions of the header files where the compiler will use them.
@@ -1604,6 +1728,12 @@ it by using the following command to compile GNU CC with Sun CC:
 
      make CC="TERMCAP=x OBJS=x LIBFUNCS=x STAGESTUFF=x cc"
 
+   SunOS 4.1.3 and 4.1.3_U1 have bugs that can cause intermittent core
+dumps when compiling GNU CC.  A common symptom is an internal compiler
+error which does not recur if you run it again.  To fix the problem,
+install Sun recommended patch 100726 (for SunOS 4.1.3) or 101508 (for
+SunOS 4.1.3_U1), or upgrade to a later SunOS release.
+
 Installing GNU CC on VMS
 ========================
 
index 1188c2d..34c0d20 100644 (file)
@@ -73,6 +73,7 @@ LEX = flex
 LEXFLAGS =
 AR = ar
 AR_FLAGS = rc
+LN = @symbolic_link@
 DLLTOOL = dlltool
 SHELL = /bin/sh
 # on sysV, define this as cp.
@@ -174,6 +175,14 @@ SYSTEM_HEADER_DIR = /usr/include
 # Control whether to run fixproto.
 STMP_FIXPROTO = stmp-fixproto
 
+# Test to see whether <float.h> exists in the system header files,
+# and is not derived from GCC.
+FLOAT_H_TEST = \
+  [ -f $(SYSTEM_HEADER_DIR)/float.h ] && \
+  if grep 'ifndef _FLOAT_H___' $(SYSTEM_HEADER_DIR)/float.h >/dev/null; \
+  then false; \
+  else :; fi
+
 # Test to see whether <limits.h> exists in the system header files.
 LIMITS_H_TEST = [ -f $(SYSTEM_HEADER_DIR)/limits.h ]
 
@@ -427,6 +436,9 @@ CRTSTUFF_T_CFLAGS =
 # Extra flags to use when compiling [m]crt0.o.
 CRT0STUFF_T_CFLAGS = 
 
+# "t" or nothing, for building multilibbed versions of, say, crtbegin.o.
+T =
+
 # End of variables for you to override.
 
 # Definition of `all' is here so that new rules inserted by sed
@@ -647,9 +659,6 @@ RTL_H = rtl.h rtl.def machmode.h machmode.def
 TREE_H = tree.h real.h tree.def machmode.h machmode.def
 BYTECODE_H = bytecode.h bc-emit.h bc-optab.h
 BASIC_BLOCK_H = basic-block.h bitmap.h
-
-# "t" or nothing, for building multilibbed versions of, say, crtbegin.o.
-T =
 #\f
 # Language makefile fragments.
 
@@ -702,9 +711,9 @@ $(srcdir)/config.in: $(srcdir)/cstamp-h.in
 $(srcdir)/cstamp-h.in: $(srcdir)/configure.in $(srcdir)/acconfig.h
        cd $(srcdir) && autoheader
        echo timestamp > $(srcdir)/cstamp-h.in
-config.h: cstamp-h ; @true
+auto-config.h: cstamp-h ; @true
 cstamp-h: config.in config.status
-       CONFIG_HEADERS=config.h:config.in $(SHELL) config.status
+       CONFIG_HEADERS=auto-config.h:config.in $(SHELL) config.status
 
 # Really, really stupid make features, such as SUN's KEEP_STATE, may force
 # a target to build even if it is up-to-date.  So we must verify that
@@ -731,7 +740,7 @@ start.encap: native xgcc specs $(LIBGCC1) xlimits.h lang.start.encap
 rest.encap: stmp-headers $(LIBGCC) $(STMP_FIXPROTO) $(EXTRA_PARTS) lang.rest.encap
 # This is what is made with the host's compiler
 # whether making a cross compiler or not.
-native: config.status config.h cpp $(LANGUAGES) \
+native: config.status auto-config.h cpp $(LANGUAGES) \
        $(EXTRA_PASSES) $(EXTRA_PROGRAMS) $(USE_COLLECT2)
 
 # Define the names for selecting languages in LANGUAGES.
@@ -766,8 +775,9 @@ stamp-objlist: $(OBJS) $(BC_OBJS)
 # We call this executable `xgcc' rather than `gcc'
 # to avoid confusion if the current directory is in the path
 # and CC is `gcc'.  It is renamed to `gcc' when it is installed.
-xgcc: gcc.o version.o choose-temp.o pexecute.o $(LIBDEPS) $(EXTRA_GCC_OBJS)
-       $(CC) $(ALL_CFLAGS) $(LDFLAGS) -o $@ gcc.o version.o \
+xgcc: gcc.o version.o choose-temp.o pexecute.o prefix.o version.o \
+   $(LIBDEPS) $(EXTRA_GCC_OBJS)
+       $(CC) $(ALL_CFLAGS) $(LDFLAGS) -o $@ gcc.o prefix.o version.o \
          choose-temp.o pexecute.o $(EXTRA_GCC_OBJS) $(LIBS)
 
 # Dump a specs file to make -B./ read these specs over installed ones.
@@ -790,8 +800,10 @@ gfloat.h: $(FLOAT_H)
        cp $(FLOAT_H) gfloat.h
 
 # Create float.h source for the native machine.
+# Make it empty if we can use the system float.h without changes.
 float.h-nat: enquire
        -./enquire -f > tmp-float.h
+       grep '#define [^_]' tmp-float.h >/dev/null || echo > tmp-float.h
        mv tmp-float.h float.h-nat
 
 # Create a dummy float.h source for a cross-compiler.
@@ -808,8 +820,15 @@ float.h-cross:
 enquire: enquire.o $(GCC_PARTS)
        $(GCC_FOR_TARGET) $(GCC_CFLAGS) $(ENQUIRE_LDFLAGS) enquire.o -o $@
 enquire.o: $(srcdir)/enquire.c $(GCC_PASSES) stmp-int-hdrs
-# Breaking this line caused a problem with one version of GNU make.
-       $(GCC_FOR_TARGET) $(GCC_CFLAGS) $(ALL_CPPFLAGS) $(ENQUIRE_CFLAGS) -I. -c $(srcdir)/enquire.c
+       rm -f include/float.h
+       if $(FLOAT_H_TEST); then \
+         SYS_FLOAT_H_WRAP=1; \
+       else :; \
+         SYS_FLOAT_H_WRAP=0; \
+       fi; \
+       $(GCC_FOR_TARGET) $(GCC_CFLAGS) $(ALL_CPPFLAGS) $(ENQUIRE_CFLAGS) \
+         -DSYS_FLOAT_H_WRAP=$$SYS_FLOAT_H_WRAP \
+         -I. -c $(srcdir)/enquire.c
 
 # Build the version of limits.h that we will install.
 xlimits.h: glimits.h limitx.h limity.h
@@ -1248,6 +1267,10 @@ version.o: version.c
 obstack.o: obstack.c
 choose-temp.o: choose-temp.c
 pexecute.o: pexecute.c
+prefix.o: prefix.c $(CONFIG_H) Makefile
+       $(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \
+       -DPREFIX=\"$(prefix)\" \
+         -c `echo $(srcdir)/prefix.c | sed 's,^\./,,'`
 
 convert.o: convert.c $(CONFIG_H) $(TREE_H) flags.h convert.h
 
@@ -1285,7 +1308,7 @@ expr.o : expr.c $(CONFIG_H) $(RTL_H) $(TREE_H) flags.h function.h regs.h \
    typeclass.h bytecode.h bc-opcode.h bc-typecd.h bc-typecd.def bc-optab.h \
    bc-emit.h modemap.def hard-reg-set.h
 calls.o : calls.c $(CONFIG_H) $(RTL_H) $(TREE_H) flags.h expr.h insn-codes.h \
-   insn-flags.h
+   insn-flags.h regs.h
 expmed.o : expmed.c $(CONFIG_H) $(RTL_H) $(TREE_H) flags.h  \
    insn-flags.h insn-config.h insn-codes.h expr.h recog.h real.h
 explow.o : explow.c $(CONFIG_H) $(RTL_H) $(TREE_H) flags.h hard-reg-set.h \
@@ -1302,28 +1325,29 @@ dwarfout.o : dwarfout.c $(CONFIG_H) $(TREE_H) $(RTL_H) dwarf.h flags.h \
 dwarf2out.o : dwarf2out.c $(CONFIG_H) $(TREE_H) $(RTL_H) dwarf2.h flags.h \
    insn-config.h reload.h output.h defaults.h hard-reg-set.h regs.h expr.h
 xcoffout.o : xcoffout.c $(CONFIG_H) $(TREE_H) $(RTL_H) xcoffout.h flags.h
-emit-rtl.o : emit-rtl.c $(CONFIG_H) $(RTL_H) $(TREE_H) flags.h \
-   function.h regs.h insn-config.h insn-codes.h real.h expr.h bytecode.h \
-   bc-opcode.h bc-typecd.h bc-typecd.def bc-optab.h bc-emit.h bc-opname.h
+emit-rtl.o : emit-rtl.c $(CONFIG_H) $(RTL_H) $(TREE_H) flags.h except.h \
+   function.h regs.h insn-config.h recog.h real.h expr.h obstack.h \
+   bytecode.h bc-opcode.h bc-typecd.h bc-typecd.def bc-optab.h bc-emit.h \
+   bc-opname.h
 real.o : real.c $(CONFIG_H) $(TREE_H)
 getpwd.o : getpwd.c $(CONFIG_H)
 
 integrate.o : integrate.c $(CONFIG_H) $(RTL_H) $(TREE_H) flags.h integrate.h \
    insn-flags.h insn-config.h insn-codes.h expr.h real.h regs.h function.h \
-   bytecode.h
+   bytecode.h output.h recog.h except.h
 
 jump.o : jump.c $(CONFIG_H) $(RTL_H) flags.h hard-reg-set.h regs.h \
-   insn-config.h insn-flags.h insn-codes.h expr.h real.h
+   insn-config.h insn-flags.h recog.h expr.h real.h except.h
 stupid.o : stupid.c $(CONFIG_H) $(RTL_H) regs.h hard-reg-set.h flags.h
 
 cse.o : cse.c $(CONFIG_H) $(RTL_H) regs.h hard-reg-set.h flags.h real.h \
    insn-config.h recog.h
 profile.o : profile.c $(CONFIG_H) $(RTL_H) flags.h insn-flags.h gcov-io.h \
-   tree.h output.h
+   tree.h output.h regs.h
 loop.o : loop.c $(CONFIG_H) $(RTL_H) flags.h loop.h insn-config.h \
    insn-flags.h insn-codes.h regs.h hard-reg-set.h recog.h expr.h real.h
-unroll.o : unroll.c $(CONFIG_H) $(RTL_H) insn-config.h insn-codes.h \
-   integrate.h regs.h flags.h expr.h loop.h
+unroll.o : unroll.c $(CONFIG_H) $(RTL_H) insn-config.h integrate.h regs.h \
+   recog.h flags.h expr.h loop.h
 flow.o : flow.c $(CONFIG_H) $(RTL_H) flags.h insn-config.h \
    $(BASIC_BLOCK_H) regs.h hard-reg-set.h output.h
 combine.o : combine.c $(CONFIG_H) $(RTL_H) flags.h  \
@@ -1722,8 +1746,8 @@ bytecode.maintainer-clean: bytecode.clean
 cpp: $(CCCP)
        -rm -f cpp$(exeext)
        $(LN) $(CCCP)$(exeext) cpp$(exeext)
-cccp: cccp.o cexp.o version.o $(LIBDEPS)
-       $(CC) $(ALL_CFLAGS) $(LDFLAGS) -o $@ cccp.o cexp.o \
+cccp: cccp.o cexp.o version.o prefix.o $(LIBDEPS)
+       $(CC) $(ALL_CFLAGS) $(LDFLAGS) -o $@ cccp.o cexp.o prefix.o \
          version.o $(LIBS)
 cexp.o: $(srcdir)/cexp.c $(CONFIG_H)
        $(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) -c $(srcdir)/cexp.c
@@ -1743,9 +1767,9 @@ cccp.o: cccp.c $(CONFIG_H) pcp.h version.c config.status
          -c `echo $(srcdir)/cccp.c | sed 's,^\./,,'`
 
 cppmain: cppmain.o cpplib.o cpphash.o cppalloc.o cpperror.o cppexp.o \
-  version.o $(LIBDEPS)
+  prefix.o version.o $(LIBDEPS)
        $(CC) $(ALL_CFLAGS) $(LDFLAGS) -o $@ cppmain.o cpplib.o cpphash.o \
-         cppalloc.o cpperror.o cppexp.o version.o $(LIBS)
+         cppalloc.o cpperror.o cppexp.o prefix.o version.o $(LIBS)
 
 cppmain.o: cppmain.c $(CONFIG_H) cpplib.h
 
@@ -1879,11 +1903,13 @@ stmp-int-hdrs: stmp-fixinc $(USER_H) xlimits.h
        chmod a+r include/README
        touch stmp-int-hdrs
 
-# Build the complete include directory.
+# Build the complete include directory, including float.h.
 stmp-headers: stmp-int-hdrs gfloat.h
        rm -f include/float.h
-       cp gfloat.h include/float.h
-       chmod a+r include/float.h
+       if [ -s gfloat.h ]; then \
+         cp gfloat.h include/float.h && \
+         chmod a+r include/float.h; \
+       else :; fi
        touch stmp-headers
 
 # Build fixed copies of system files.
@@ -1937,10 +1963,10 @@ xsys-protos.h: $(GCC_PASSES) $(srcdir)/sys-protos.h deduced.h gen-protos Makefil
        rm -rf fixtmp.c
 
 fix-header: fix-header.o scan-decls.o scan.o xsys-protos.h $(HOST_LIBDEPS) \
-   cpplib.o cpphash.o cppalloc.o cppexp.o cpperror.o version.o
+   cpplib.o cpphash.o cppalloc.o cppexp.o cpperror.o prefix.o version.o
        $(HOST_CC) $(HOST_CFLAGS) $(HOST_LDFLAGS) -o $@ fix-header.o \
-          scan-decls.o scan.o cpplib.o cpphash.o cppalloc.o version.o \
-          cppexp.o $(HOST_LIBS)
+          scan-decls.o scan.o cpplib.o cpphash.o cppalloc.o prefix.o \
+          version.o cppexp.o $(HOST_LIBS)
 
 fix-header.o: fix-header.c obstack.h scan.h xsys-protos.h $(build_xm_file)
        $(HOST_CC) -c $(HOST_CFLAGS) $(HOST_CPPFLAGS) $(INCLUDES) $(srcdir)/fix-header.c
@@ -2041,7 +2067,7 @@ mostlyclean: bytecode.mostlyclean lang.mostlyclean
        -rm -f */stamp-* */tmp-*
 # Delete debugging dump files.
        -rm -f *.greg *.lreg *.combine *.flow *.cse *.jump *.rtl *.tree *.loop
-       -rm -f *.dbr *.jump2 *.sched *.cse2 *.sched2 *.stack *.regmove
+       -rm -f *.dbr *.jump2 *.sched *.cse2 *.sched2 *.stack *.addressof *.regmove
        -rm -f */*.greg */*.lreg */*.combine */*.flow */*.cse */*.jump */*.rtl
        -rm -f */*.tree */*.loop */*.dbr */*.jump2 */*.sched */*.cse2
        -rm -f */*.sched2 */*.stack */*.regmove
@@ -2088,7 +2114,7 @@ clean: mostlyclean bytecode.clean lang.clean
 # Delete all files that users would normally create
 # while building and installing GCC.
 distclean: clean bytecode.distclean lang.distclean
-       -rm -f tm.h config.h config2.h tconfig.h hconfig.h md cstamp-h
+       -rm -f tm.h config.h auto-config.h tconfig.h hconfig.h md cstamp-h
        -rm -f config.status config.run config.cache config.bak
        -rm -f Make-lang Make-hooks Make-host Make-target
        -rm -f Makefile specs.h options.h *.oaux
@@ -2206,12 +2232,14 @@ install-common: native installdirs $(EXTRA_PARTS) lang.install-common
          if [ x"$$file" != x.. ]; then \
            rm -f $(libsubdir)/$$file; \
            $(INSTALL_DATA) $$file $(libsubdir)/$$file; \
+           chmod a-x $(libsubdir)/$$file; \
          else true; fi; \
        done
 # Don't mess with specs if it doesn't exist yet.
        -if [ -f specs ] ; then \
          rm -f $(libsubdir)/specs; \
          $(INSTALL_DATA) specs $(libsubdir)/specs; \
+         chmod a-x $(libsubdir)/specs; \
        fi
 # Install protoize if it was compiled.
        -if [ -f protoize$(exeext) ]; \
@@ -2265,7 +2293,7 @@ install-info: doc installdirs lang.install-info
 
 # Install the man pages.
 install-man: installdirs $(srcdir)/gcc.1 $(srcdir)/cccp.1 lang.install-man
-       -if [ -f gcc-cross ] ; then \
+       -if [ -f gcc-cross$(exeext) ] ; then \
          rm -f $(mandir)/$(GCC_CROSS_NAME)$(manext); \
          $(INSTALL_DATA) $(srcdir)/gcc.1 $(mandir)/$(GCC_CROSS_NAME)$(manext); \
          chmod a-x $(mandir)/$(GCC_CROSS_NAME)$(manext); \
@@ -2483,7 +2511,7 @@ check-g77: testsuite/site.exp
 TAGS: force
        cd $(srcdir);                                                   \
        mkdir temp;                                                     \
-       mv -f c-parse.[ch] objc-parse.c cexp.c =*.[chy] temp;           \
+       mv -f c-parse.[ch] cexp.c =*.[chy] temp;                \
        etags *.y *.h *.c;                                              \
        mv temp/* .;                                                    \
        rmdir temp
@@ -2507,8 +2535,7 @@ gcc.xtar: distdir
 # This target exists to do the initial work before the language specific
 # stuff gets done.
 distdir-start: doc $(srcdir)/INSTALL $(srcdir)/c-parse.y $(srcdir)/c-gperf.h \
-  $(srcdir)/objc-parse.y $(srcdir)/c-parse.c $(srcdir)/objc-parse.c \
-  $(srcdir)/cexp.c
+  $(srcdir)/c-parse.c $(srcdir)/cexp.c
        @if grep -s "for version ${mainversion}" gcc.texi > /dev/null; \
        then true; \
        else echo "You must update the version number in \`gcc.texi'"; sleep 10;\
@@ -2525,7 +2552,6 @@ distdir-start: doc $(srcdir)/INSTALL $(srcdir)/c-parse.y $(srcdir)/c-gperf.h \
        mkdir tmp
        mkdir tmp/config
        mkdir tmp/ginclude
-       mkdir tmp/objc
        for file in *[0-9a-zA-Z+]; do \
          $(LN) $$file tmp; \
        done
index fcc7162..5240ab8 100644 (file)
@@ -1,8 +1,3 @@
-
-/* Include the old config.h as config2.h to simplify the transition
-   to autoconf.  */
-#include "config2.h"
-
 /* Whether malloc must be declared even if <stdlib.h> is included.  */
 #undef NEED_DECLARATION_MALLOC
 
index 939c9bd..18756d5 100644 (file)
@@ -1,5 +1,5 @@
 /* Bytecode conversion definitions for GNU C-compiler.
-   Copyright (C) 1993, 1994 Free Software Foundation, Inc.
+   Copyright (C) 1993, 1994, 1997 Free Software Foundation, Inc.
 
 This file is part of GNU CC.
 
@@ -20,6 +20,7 @@ Boston, MA 02111-1307, USA.  */
 
 
 #include "config.h"
+#include <stdio.h>
 #include "tree.h"
 #include "rtl.h"
 #include "machmode.h"
index 5856685..f982f46 100644 (file)
@@ -18,8 +18,8 @@ along with GNU CC; see the file COPYING.  If not, write to
 the Free Software Foundation, 59 Temple Place - Suite 330,
 Boston, MA 02111-1307, USA.  */
 
-#include <stdio.h>
 #include "config.h"
+#include <stdio.h>
 #include "rtl.h"
 #include "flags.h"
 #include "obstack.h"
index 343b249..bdedef3 100644 (file)
@@ -86,10 +86,10 @@ extern int bitmap_bit_p PROTO((bitmap, int));
 
 /* Debug functions to print a bitmap linked list.  */
 extern void bitmap_debug PROTO((bitmap));
-extern void bitmap_debug_file STDIO_PROTO((FILE *, bitmap));
+extern void bitmap_debug_file PROTO((FILE *, bitmap));
 
 /* Print a bitmap */
-extern void bitmap_print STDIO_PROTO((FILE *, bitmap, char *, char *));
+extern void bitmap_print PROTO((FILE *, bitmap, char *, char *));
 
 /* Initialize a bitmap header.  */
 extern bitmap bitmap_initialize PROTO((bitmap));
index e38cdb1..6900324 100644 (file)
@@ -27,12 +27,12 @@ Boston, MA 02111-1307, USA.  */
    line numbers.  For example, the CONST_DECLs for enum values.  */
 
 #include "config.h"
+#include <stdio.h>
 #include "tree.h"
 #include "flags.h"
 #include "output.h"
 #include "c-tree.h"
 #include "c-lex.h"
-#include <stdio.h>
 
 /* In grokdeclarator, distinguish syntactic contexts of declarators.  */
 enum decl_context
@@ -471,9 +471,14 @@ int explicit_flag_signed_bitfields = 0;
 
 int flag_no_ident = 0;
 
-/* Nonzero means warn about implicit declarations.  */
+/* Nonzero means warn about use of implicit int. */
+
+int warn_implicit_int;
 
-int warn_implicit;
+/* Nonzero means message about use of implicit function declarations;
+ 1 means warning; 2 means error. */
+
+int mesg_implicit_function_declaration;
 
 /* Nonzero means give string constants the type `const char *'
    to get extra warnings from them.  These warnings will be too numerous
@@ -648,10 +653,24 @@ c_decode_option (p)
     flag_no_ident = 0;
   else if (!strcmp (p, "-ansi"))
     flag_no_asm = 1, flag_no_nonansi_builtin = 1;
+  else if (!strcmp (p, "-Werror-implicit-function-declaration"))
+    mesg_implicit_function_declaration = 2;
+  else if (!strcmp (p, "-Wimplicit-function-declaration"))
+    mesg_implicit_function_declaration = 1;
+  else if (!strcmp (p, "-Wno-implicit-function-declaration"))
+    mesg_implicit_function_declaration = 0;
+  else if (!strcmp (p, "-Wimplicit-int"))
+    warn_implicit_int = 1;
+  else if (!strcmp (p, "-Wno-implicit-int"))
+    warn_implicit_int = 0;
   else if (!strcmp (p, "-Wimplicit"))
-    warn_implicit = 1;
+    {
+      warn_implicit_int = 1;
+      if (mesg_implicit_function_declaration != 2)
+        mesg_implicit_function_declaration = 1;
+    }
   else if (!strcmp (p, "-Wno-implicit"))
-    warn_implicit = 0;
+    warn_implicit_int = 0, mesg_implicit_function_declaration = 0;
   else if (!strcmp (p, "-Wwrite-strings"))
     warn_write_strings = 1;
   else if (!strcmp (p, "-Wno-write-strings"))
@@ -751,7 +770,8 @@ c_decode_option (p)
         warning about not using it without also specifying -O.  */
       if (warn_uninitialized != 1)
        warn_uninitialized = 2;
-      warn_implicit = 1;
+      warn_implicit_int = 1;
+      mesg_implicit_function_declaration = 1;
       warn_return_type = 1;
       warn_unused = 1;
       warn_switch = 1;
@@ -2467,9 +2487,15 @@ implicitly_declare (functionid)
 
   rest_of_decl_compilation (decl, NULL_PTR, 0, 0);
 
-  if (warn_implicit && implicit_warning)
-    warning ("implicit declaration of function `%s'",
-            IDENTIFIER_POINTER (functionid));
+  if (mesg_implicit_function_declaration && implicit_warning)
+    {
+      if (mesg_implicit_function_declaration == 2)
+        error ("implicit declaration of function `%s'",
+                 IDENTIFIER_POINTER (functionid));
+      else
+        warning ("implicit declaration of function `%s'",
+                 IDENTIFIER_POINTER (functionid));
+    }
   else if (warn_traditional && traditional_warning)
     warning ("function `%s' was previously declared within a block",
             IDENTIFIER_POINTER (functionid));
@@ -3880,6 +3906,9 @@ finish_decl (decl, init, asmspec_tree)
          else
            error_with_decl (decl, "storage size of `%s' isn't constant");
        }
+
+      if (TREE_USED  (type))
+       TREE_USED (decl) = 1;
     }
 
   /* If this is a function and an assembler name is specified, it isn't
@@ -4361,9 +4390,9 @@ grokdeclarator (declarator, declspecs, decl_context, initialized)
             For now, issue a warning if -Wreturn-type and this is a function,
             or if -Wimplicit; prefer the former warning since it is more
             explicit.  */
-         if ((warn_implicit || warn_return_type) && funcdef_flag)
+         if ((warn_implicit_int || warn_return_type) && funcdef_flag)
            warn_about_return_type = 1;
-         else if (warn_implicit)
+         else if (warn_implicit_int)
            warning ("type defaults to `int' in declaration of `%s'", name);
        }
 
@@ -4709,6 +4738,18 @@ grokdeclarator (declarator, declspecs, decl_context, initialized)
                                   convert (index_type, size),
                                   convert (index_type, size_one_node)));
 
+             /* If that overflowed, the array is too big.
+                ??? While a size of INT_MAX+1 technically shouldn't cause
+                an overflow (because we subtract 1), the overflow is recorded
+                during the conversion to index_type, before the subtraction.
+                Handling this case seems like an unnecessary complication.  */
+             if (TREE_OVERFLOW (itype))
+               {
+                 error ("size of array `%s' is too large", name);
+                 type = error_mark_node;
+                 continue;
+               }
+
              if (size_varies)
                itype = variable_size (itype);
              itype = build_index_type (itype);
@@ -4884,6 +4925,13 @@ grokdeclarator (declarator, declspecs, decl_context, initialized)
 
   /* Now TYPE has the actual type.  */
 
+  /* Did array size calculations overflow?  */
+
+  if (TREE_CODE (type) == ARRAY_TYPE
+      && TYPE_SIZE (type)
+      && TREE_OVERFLOW (TYPE_SIZE (type)))
+    error ("size of array `%s' is too large", name);
+
   /* If this is declaring a typedef name, return a TYPE_DECL.  */
 
   if (specbits & (1 << (int) RID_TYPEDEF))
@@ -6211,7 +6259,10 @@ start_function (declspecs, declarator, prefix_attributes, attributes, nested)
   /* If the declarator is not suitable for a function definition,
      cause a syntax error.  */
   if (decl1 == 0)
-    return 0;
+    {
+      immediate_size_expand = old_immediate_size_expand;
+      return 0;
+    }
 
   decl_attributes (decl1, prefix_attributes, attributes);
 
index e79e188..b5ed3de 100644 (file)
@@ -1,5 +1,5 @@
 /* Language-specific hook definitions for C front end.
-   Copyright (C) 1991, 1995 Free Software Foundation, Inc.
+   Copyright (C) 1991, 1995, 1997 Free Software Foundation, Inc.
 
 This file is part of GNU CC.
 
index fd0dd90..bee6ce7 100644 (file)
@@ -1,5 +1,5 @@
 /* Lexical analyzer for C and Objective C.
-   Copyright (C) 1987, 88, 89, 92, 94, 95, 1996 Free Software Foundation, Inc.
+   Copyright (C) 1987, 88, 89, 92, 94-96, 1997 Free Software Foundation, Inc.
 
 This file is part of GNU CC.
 
@@ -18,12 +18,12 @@ along with GNU CC; see the file COPYING.  If not, write to
 the Free Software Foundation, 59 Temple Place - Suite 330,
 Boston, MA 02111-1307, USA.  */
 
+#include "config.h"
 
 #include <stdio.h>
 #include <errno.h>
 #include <setjmp.h>
 
-#include "config.h"
 #include "rtl.h"
 #include "tree.h"
 #include "input.h"
@@ -118,6 +118,8 @@ char *token_buffer; /* Pointer to token buffer.
                           Actual allocated length is maxtoken + 2.
                           This is not static because objc-parse.y uses it.  */
 
+static int indent_level = 0;        /* Number of { minus number of }. */
+
 /* Nonzero if end-of-file has been seen on input.  */
 static int end_of_file;
 
@@ -747,6 +749,7 @@ linenum:
              input_file_stack->line = old_lineno;
              p->next = input_file_stack;
              p->name = input_filename;
+             p->indent_level = indent_level;
              input_file_stack = p;
              input_file_stack_tick++;
              debug_start_source_file (input_filename);
@@ -758,6 +761,14 @@ linenum:
              if (input_file_stack->next)
                {
                  struct file_stack *p = input_file_stack;
+                 if (indent_level != p->indent_level)
+                   {
+                     warning_with_file_and_line 
+                       (p->name, old_lineno,
+                        "This file contains more `%c's than `%c's.",
+                        indent_level > p->indent_level ? '{' : '}',
+                        indent_level > p->indent_level ? '}' : '{');
+                   }
                  input_file_stack = p->next;
                  free (p);
                  input_file_stack_tick++;
@@ -816,6 +827,10 @@ linenum:
 
   /* skip the rest of this line.  */
  skipline:
+#if !USE_CPPLIB
+  if (c != '\n' && c != EOF && nextchar >= 0)
+    c = nextchar, nextchar = -1;
+#endif
   while (c != '\n' && c != EOF)
     c = GETC();
   return c;
@@ -1731,8 +1746,6 @@ yylex ()
                else if (! spec_long_long)
                  ansi_type = long_unsigned_type_node;
                else if (! spec_unsigned
-                        /* Verify value does not overflow into sign bit.  */
-                        && TREE_INT_CST_HIGH (yylval.ttype) >= 0
                         && int_fits_type_p (yylval.ttype,
                                             long_long_integer_type_node))
                  ansi_type = long_long_integer_type_node;
@@ -2122,13 +2135,13 @@ yylex ()
              break;
            case '<':
              if (c1 == '%')
-               { value = '{'; goto done; }
+               { value = '{'; indent_level++; goto done; }
              if (c1 == ':')
                { value = '['; goto done; }
              break;
            case '%':
              if (c1 == '>')
-               { value = '}'; goto done; }
+               { value = '}'; indent_level--; goto done; }
              break;
            }
        UNGETC (c1);
@@ -2145,6 +2158,16 @@ yylex ()
       value = 1;
       break;
 
+    case '{':
+      indent_level++;
+      value = c;
+      break;
+
+    case '}':
+      indent_level--;
+      value = c;
+      break;
+
     default:
       value = c;
     }
index 5c1cc1b..8cfed9e 100644 (file)
@@ -1,6 +1,6 @@
 
 /*  A Bison parser, made from c-parse.y
- by  Bison version A2.5 (Andrew Consortium)
+ by  GNU Bison version 1.25
   */
 
 #define YYBISON 1  /* Identify Bison output.  */
@@ -404,7 +404,7 @@ static const short yyrline[] = { 0,
 #endif
 
 
-#if YYDEBUG != 0
+#if YYDEBUG != 0 || defined (YYERROR_VERBOSE)
 
 static const char * const yytname[] = {   "$","error","$undefined.","IDENTIFIER",
 "TYPENAME","SCSPEC","TYPESPEC","TYPE_QUAL","CONSTANT","STRING","ELLIPSIS","SIZEOF",
@@ -1170,7 +1170,7 @@ static const short yycheck[] = {    40,
     48,    49,    50,    51,    52
 };
 /* -*-C-*-  Note some compilers choke on comments on `#line' lines.  */
-#line 3 "/usr/share/bison.simple"
+#line 3 "/usr/cygnus/latest-940103/share/bison.simple"
 
 /* Skeleton output parser for bison,
    Copyright (C) 1984, 1989, 1990 Free Software Foundation, Inc.
@@ -1325,16 +1325,16 @@ int yyparse (void);
 #endif
 \f
 #if __GNUC__ > 1               /* GNU C and GNU C++ define this.  */
-#define __yy_memcpy(FROM,TO,COUNT)     __builtin_memcpy(TO,FROM,COUNT)
+#define __yy_memcpy(TO,FROM,COUNT)     __builtin_memcpy(TO,FROM,COUNT)
 #else                          /* not GNU C or C++ */
 #ifndef __cplusplus
 
 /* This is the most reliable way to avoid incompatibilities
    in available built-in functions on various systems.  */
 static void
-__yy_memcpy (from, to, count)
-     char *from;
+__yy_memcpy (to, from, count)
      char *to;
+     char *from;
      int count;
 {
   register char *f = from;
@@ -1350,7 +1350,7 @@ __yy_memcpy (from, to, count)
 /* This is the most reliable way to avoid incompatibilities
    in available built-in functions on various systems.  */
 static void
-__yy_memcpy (char *from, char *to, int count)
+__yy_memcpy (char *to, char *from, int count)
 {
   register char *f = from;
   register char *t = to;
@@ -1363,7 +1363,7 @@ __yy_memcpy (char *from, char *to, int count)
 #endif
 #endif
 \f
-#line 192 "/usr/share/bison.simple"
+#line 196 "/usr/cygnus/latest-940103/share/bison.simple"
 
 /* The user can define YYPARSE_PARAM as the name of an argument to be passed
    into yyparse.  The argument should have type void *.
@@ -1372,14 +1372,20 @@ __yy_memcpy (char *from, char *to, int count)
    to the proper pointer type.  */
 
 #ifdef YYPARSE_PARAM
+#ifdef __cplusplus
+#define YYPARSE_PARAM_ARG void *YYPARSE_PARAM
+#define YYPARSE_PARAM_DECL
+#else /* not __cplusplus */
+#define YYPARSE_PARAM_ARG YYPARSE_PARAM
 #define YYPARSE_PARAM_DECL void *YYPARSE_PARAM;
-#else
-#define YYPARSE_PARAM
+#endif /* not __cplusplus */
+#else /* not YYPARSE_PARAM */
+#define YYPARSE_PARAM_ARG
 #define YYPARSE_PARAM_DECL
-#endif
+#endif /* not YYPARSE_PARAM */
 
 int
-yyparse(YYPARSE_PARAM)
+yyparse(YYPARSE_PARAM_ARG)
      YYPARSE_PARAM_DECL
 {
   register int yystate;
@@ -1496,12 +1502,12 @@ yynewstate:
       if (yystacksize > YYMAXDEPTH)
        yystacksize = YYMAXDEPTH;
       yyss = (short *) alloca (yystacksize * sizeof (*yyssp));
-      __yy_memcpy ((char *)yyss1, (char *)yyss, size * sizeof (*yyssp));
+      __yy_memcpy ((char *)yyss, (char *)yyss1, size * sizeof (*yyssp));
       yyvs = (YYSTYPE *) alloca (yystacksize * sizeof (*yyvsp));
-      __yy_memcpy ((char *)yyvs1, (char *)yyvs, size * sizeof (*yyvsp));
+      __yy_memcpy ((char *)yyvs, (char *)yyvs1, size * sizeof (*yyvsp));
 #ifdef YYLSP_NEEDED
       yyls = (YYLTYPE *) alloca (yystacksize * sizeof (*yylsp));
-      __yy_memcpy ((char *)yyls1, (char *)yyls, size * sizeof (*yylsp));
+      __yy_memcpy ((char *)yyls, (char *)yyls1, size * sizeof (*yylsp));
 #endif
 #endif /* no yyoverflow */
 
@@ -3646,7 +3652,7 @@ case 395:
     break;}
 }
    /* the action file gets copied in in place of this dollarsign */
-#line 487 "/usr/share/bison.simple"
+#line 498 "/usr/cygnus/latest-940103/share/bison.simple"
 \f
   yyvsp -= yylen;
   yyssp -= yylen;
index 22843ae..7be030d 100644 (file)
@@ -261,6 +261,12 @@ common_type (t1, t2)
          return build_type_attribute_variant (t1, attributes);
        }
 
+      /* Likewise, prefer long double to double even if same size.  */
+      if (TYPE_MAIN_VARIANT (t1) == long_double_type_node
+         || TYPE_MAIN_VARIANT (t2) == long_double_type_node)
+       return build_type_attribute_variant (long_double_type_node,
+                                            attributes);
+
       /* Otherwise prefer the unsigned one.  */
 
       if (TREE_UNSIGNED (t1))
@@ -507,6 +513,9 @@ comptypes (type1, type2)
       if (maybe_objc_comptypes (t1, t2, 0) == 1)
        val = 1;
       break;
+
+    default:
+      break;
     }
   return attrval == 2 && val == 1 ? 2 : val;
 }
@@ -1008,13 +1017,14 @@ default_conversion (exp)
       type = type_for_size (MAX (TYPE_PRECISION (type),
                                 TYPE_PRECISION (integer_type_node)),
                            ((flag_traditional
-                             || TYPE_PRECISION (type) >= TYPE_PRECISION (integer_type_node))
+                             || (TYPE_PRECISION (type)
+                                 >= TYPE_PRECISION (integer_type_node)))
                             && TREE_UNSIGNED (type)));
       return convert (type, exp);
     }
 
   if (TREE_CODE (exp) == COMPONENT_REF
-      && DECL_BIT_FIELD (TREE_OPERAND (exp, 1)))
+      && DECL_C_BIT_FIELD (TREE_OPERAND (exp, 1)))
     {
       tree width = DECL_SIZE (TREE_OPERAND (exp, 1));
       HOST_WIDE_INT low = TREE_INT_CST_LOW (width);
@@ -1242,6 +1252,9 @@ build_component_ref (datum, component)
        (TREE_OPERAND (datum, 0),
         build_component_ref (TREE_OPERAND (datum, 1), component),
         build_component_ref (TREE_OPERAND (datum, 2), component));
+
+    default:
+      break;
     }
 
   /* See if there is a field or component with name COMPONENT.  */
@@ -1573,6 +1586,8 @@ build_function_call (function, params)
        if (coerced_params == 0)
          return integer_zero_node;
        return build_unary_op (ABS_EXPR, TREE_VALUE (coerced_params), 0);
+      default:
+       break;
       }
 
   {
@@ -2333,6 +2348,9 @@ build_binary_op (code, orig_op0, orig_op1, convert_p)
            pedwarn ("comparison between pointer and integer");
        }
       break;
+      
+    default:
+      break;
     }
 
   if ((code0 == INTEGER_TYPE || code0 == REAL_TYPE || code0 == COMPLEX_TYPE)
@@ -3112,6 +3130,9 @@ build_unary_op (code, xarg, noconvert)
          TREE_CONSTANT (addr) = 1;
        return addr;
       }
+
+    default:
+      break;
     }
 
   if (!errstring)
@@ -3180,17 +3201,16 @@ lvalue_p (ref)
     case PARM_DECL:
     case RESULT_DECL:
     case ERROR_MARK:
-      if (TREE_CODE (TREE_TYPE (ref)) != FUNCTION_TYPE
-         && TREE_CODE (TREE_TYPE (ref)) != METHOD_TYPE)
-       return 1;
-      break;
+      return (TREE_CODE (TREE_TYPE (ref)) != FUNCTION_TYPE
+             && TREE_CODE (TREE_TYPE (ref)) != METHOD_TYPE);
 
     case BIND_EXPR:
     case RTL_EXPR:
-      if (TREE_CODE (TREE_TYPE (ref)) == ARRAY_TYPE)
-       return 1;
+      return TREE_CODE (TREE_TYPE (ref)) == ARRAY_TYPE;
+
+    default:
+      return 0;
     }
-  return 0;
 }
 
 /* Return nonzero if REF is an lvalue valid for this language;
@@ -3222,7 +3242,12 @@ unary_complex_lvalue (code, arg)
   if (TREE_CODE (arg) == COMPOUND_EXPR)
     {
       tree real_result = build_unary_op (code, TREE_OPERAND (arg, 1), 0);
-      pedantic_lvalue_warning (COMPOUND_EXPR);
+
+      /* If this returns a function type, it isn't really being used as
+        an lvalue, so don't issue a warning about it.  */
+      if (TREE_CODE (TREE_TYPE (arg)) != FUNCTION_TYPE)
+       pedantic_lvalue_warning (COMPOUND_EXPR);
+
       return build (COMPOUND_EXPR, TREE_TYPE (real_result),
                    TREE_OPERAND (arg, 0), real_result);
     }
@@ -3231,6 +3256,9 @@ unary_complex_lvalue (code, arg)
   if (TREE_CODE (arg) == COND_EXPR)
     {
       pedantic_lvalue_warning (COND_EXPR);
+      if (TREE_CODE (TREE_TYPE (arg)) != FUNCTION_TYPE)
+       pedantic_lvalue_warning (COMPOUND_EXPR);
+
       return (build_conditional_expr
              (TREE_OPERAND (arg, 0),
               build_unary_op (code, TREE_OPERAND (arg, 1), 0),
@@ -3872,6 +3900,8 @@ build_modify_expr (lhs, modifycode, rhs)
                      /* But cast it to void to avoid an "unused" error.  */
                      convert (void_type_node, rhs), cond);
       }
+    default:
+      break;
     }
 
   /* If a binary op has been requested, combine the old LHS value with the RHS
@@ -3913,6 +3943,9 @@ build_modify_expr (lhs, modifycode, rhs)
        pedantic_lvalue_warning (CONVERT_EXPR);
        return convert (TREE_TYPE (lhs), result);
       }
+      
+    default:
+      break;
     }
 
   /* Now we have handled acceptable kinds of LHS that are not truly lvalues.
@@ -4426,9 +4459,10 @@ initializer_constant_valid_p (value, endtype)
          return null_pointer_node;
        return 0;
       }
-    }
 
-  return 0;
+    default:
+      return 0;
+    }
 }
 
 /* If VALUE is a compound expr all of whose expressions are constant, then
@@ -6617,6 +6651,9 @@ c_expand_return (retval)
                  && DECL_CONTEXT (inner) == current_function_decl)
                warning ("function returns address of local variable");
              break;
+
+           default:
+             break;
            }
 
          break;
index 2f5c1c2..a70830c 100644 (file)
@@ -19,10 +19,12 @@ the Free Software Foundation, 59 Temple Place - Suite 330,
 Boston, MA 02111-1307, USA.  */
 
 #include "config.h"
+#include <stdio.h>
 #include "rtl.h"
 #include "tree.h"
 #include "flags.h"
 #include "expr.h"
+#include "regs.h"
 #ifdef __STDC__
 #include <stdarg.h>
 #else
@@ -232,6 +234,9 @@ calls_function_1 (exp, which)
 
     case RTL_EXPR:
       return 0;
+      
+    default:
+      break;
     }
 
   for (i = 0; i < length; i++)
@@ -267,15 +272,11 @@ prepare_call_address (funexp, fndecl, call_fusage, reg_parm_seen)
   /* Make a valid memory address and copy constants thru pseudo-regs,
      but not for a constant address if -fno-function-cse.  */
   if (GET_CODE (funexp) != SYMBOL_REF)
-    funexp =
-#ifdef SMALL_REGISTER_CLASSES
     /* If we are using registers for parameters, force the
-        function address into a register now.  */
-      (SMALL_REGISTER_CLASSES && reg_parm_seen)
-       ? force_not_mem (memory_address (FUNCTION_MODE, funexp))
-       :
-#endif
-         memory_address (FUNCTION_MODE, funexp);
+       function address into a register now.  */
+    funexp = ((SMALL_REGISTER_CLASSES && reg_parm_seen)
+             ? force_not_mem (memory_address (FUNCTION_MODE, funexp))
+             : memory_address (FUNCTION_MODE, funexp));
   else
     {
 #ifndef NO_FUNCTION_CSE
@@ -695,7 +696,8 @@ expand_call (exp, target, ignore)
          structure_value_addr = XEXP (target, 0);
        else
          {
-           /* Assign a temporary on the stack to hold the value.  */
+           /* Assign a temporary to hold the value.  */
+           tree d;
 
            /* For variable-sized objects, we must be called with a target
               specified.  If we were to allocate space on the stack here,
@@ -704,8 +706,12 @@ expand_call (exp, target, ignore)
            if (struct_value_size < 0)
              abort ();
 
-           structure_value_addr
-             = XEXP (assign_stack_temp (BLKmode, struct_value_size, 1), 0);
+           /* This DECL is just something to feed to mark_addressable;
+              it doesn't get pushed.  */
+           d = build_decl (VAR_DECL, NULL_TREE, TREE_TYPE (exp));
+           DECL_RTL (d) = assign_temp (TREE_TYPE (exp), 1, 0, 1);
+           mark_addressable (d);
+           structure_value_addr = XEXP (DECL_RTL (d), 0);
            MEM_IN_STRUCT_P (structure_value_addr)
              = AGGREGATE_TYPE_P (TREE_TYPE (exp));
            target = 0;
@@ -1675,13 +1681,8 @@ expand_call (exp, target, ignore)
                    && GET_CODE (SUBREG_REG (args[i].value)) == REG)))
            && args[i].mode != BLKmode
            && rtx_cost (args[i].value, SET) > 2
-#ifdef SMALL_REGISTER_CLASSES
            && ((SMALL_REGISTER_CLASSES && reg_parm_seen)
-               || preserve_subexpressions_p ())
-#else
-           && preserve_subexpressions_p ()
-#endif
-           )
+               || preserve_subexpressions_p ()))
          args[i].value = copy_to_mode_reg (args[i].mode, args[i].value);
       }
 
@@ -2038,7 +2039,7 @@ expand_call (exp, target, ignore)
 
   /* If there are cleanups to be called, don't use a hard reg as target.
      We need to double check this and see if it matters anymore.  */
-  if (any_pending_cleanups ()
+  if (any_pending_cleanups (1)
       && target && REG_P (target)
       && REGNO (target) < FIRST_PSEUDO_REGISTER)
     target = 0;
@@ -2751,26 +2752,26 @@ emit_library_call VPROTO((rtx orgfun, int no_queue, enum machine_mode outmode,
 
 #ifdef ACCUMULATE_OUTGOING_ARGS
 #ifdef REG_PARM_STACK_SPACE
-      if (save_area)
-       {
-         enum machine_mode save_mode = GET_MODE (save_area);
-         rtx stack_area
-           = gen_rtx (MEM, save_mode,
-                      memory_address (save_mode,
+  if (save_area)
+    {
+      enum machine_mode save_mode = GET_MODE (save_area);
+      rtx stack_area
+       = gen_rtx (MEM, save_mode,
+                  memory_address (save_mode,
 #ifdef ARGS_GROW_DOWNWARD
-                                      plus_constant (argblock, - high_to_save)
+                                  plus_constant (argblock, - high_to_save)
 #else
-                                      plus_constant (argblock, low_to_save)
+                                  plus_constant (argblock, low_to_save)
 #endif
-                                      ));
+                                  ));
 
-         if (save_mode != BLKmode)
-           emit_move_insn (stack_area, save_area);
-         else
-           emit_block_move (stack_area, validize_mem (save_area),
-                            GEN_INT (high_to_save - low_to_save + 1),
-                            PARM_BOUNDARY / BITS_PER_UNIT);
-       }
+      if (save_mode != BLKmode)
+       emit_move_insn (stack_area, save_area);
+      else
+       emit_block_move (stack_area, validize_mem (save_area),
+                        GEN_INT (high_to_save - low_to_save + 1),
+                        PARM_BOUNDARY / BITS_PER_UNIT);
+    }
 #endif
          
   /* If we saved any argument areas, restore them.  */
@@ -2789,7 +2790,6 @@ emit_library_call VPROTO((rtx orgfun, int no_queue, enum machine_mode outmode,
   highest_outgoing_arg_in_use = initial_highest_arg_in_use;
   stack_usage_map = initial_stack_usage_map;
 #endif
-
 }
 \f
 /* Like emit_library_call except that an extra argument, VALUE,
@@ -3345,26 +3345,26 @@ emit_library_call_value VPROTO((rtx orgfun, rtx value, int no_queue,
 
 #ifdef ACCUMULATE_OUTGOING_ARGS
 #ifdef REG_PARM_STACK_SPACE
-      if (save_area)
-       {
-         enum machine_mode save_mode = GET_MODE (save_area);
-         rtx stack_area
-           = gen_rtx (MEM, save_mode,
-                      memory_address (save_mode,
+  if (save_area)
+    {
+      enum machine_mode save_mode = GET_MODE (save_area);
+      rtx stack_area
+       = gen_rtx (MEM, save_mode,
+                  memory_address (save_mode,
 #ifdef ARGS_GROW_DOWNWARD
-                                      plus_constant (argblock, - high_to_save)
+                                  plus_constant (argblock, - high_to_save)
 #else
-                                      plus_constant (argblock, low_to_save)
+                                  plus_constant (argblock, low_to_save)
 #endif
-                                      ));
+                                  ));
 
-         if (save_mode != BLKmode)
-           emit_move_insn (stack_area, save_area);
-         else
-           emit_block_move (stack_area, validize_mem (save_area),
-                            GEN_INT (high_to_save - low_to_save + 1),
+      if (save_mode != BLKmode)
+       emit_move_insn (stack_area, save_area);
+      else
+       emit_block_move (stack_area, validize_mem (save_area),
+                        GEN_INT (high_to_save - low_to_save + 1),
                             PARM_BOUNDARY / BITS_PER_UNIT);
-       }
+    }
 #endif
          
   /* If we saved any argument areas, restore them.  */
index 8df72f2..2a92acb 100644 (file)
@@ -51,6 +51,13 @@ typedef unsigned char U_CHAR;
 #define PATH_SEPARATOR ':'
 #endif
 
+/* By default, the suffix for object files is ".o".  */
+#ifdef OBJECT_SUFFIX
+#define HAVE_OBJECT_SUFFIX
+#else
+#define OBJECT_SUFFIX ".o"
+#endif
+
 #include <sys/types.h>
 #include <sys/stat.h>
 #include <ctype.h>
@@ -59,21 +66,13 @@ typedef unsigned char U_CHAR;
 
 /* The following symbols should be autoconfigured:
        HAVE_FCNTL_H
-       HAVE_STDLIB_H
        HAVE_SYS_TIME_H
-       HAVE_UNISTD_H
        STDC_HEADERS
        TIME_WITH_SYS_TIME
    In the mean time, we'll get by with approximations based
    on existing GCC configuration symbols.  */
 
 #ifdef POSIX
-# ifndef HAVE_STDLIB_H
-# define HAVE_STDLIB_H 1
-# endif
-# ifndef HAVE_UNISTD_H
-# define HAVE_UNISTD_H 1
-# endif
 # ifndef STDC_HEADERS
 # define STDC_HEADERS 1
 # endif
@@ -105,6 +104,10 @@ typedef unsigned char U_CHAR;
 # include <fcntl.h>
 #endif
 
+#if HAVE_LIMITS_H
+# include <limits.h>
+#endif
+
 #include <errno.h>
 
 #if HAVE_STDLIB_H
@@ -225,8 +228,8 @@ my_bzero (b, length)
 #define fstat(fd,stbuf)                VMS_fstat (fd,stbuf)
 static int VMS_fstat (), VMS_stat ();
 static int VMS_open ();
-static FILE * VMS_fopen ();
-static FILE * VMS_freopen ();
+static FILE *VMS_fopen ();
+static FILE *VMS_freopen ();
 static void hack_vms_include_specification ();
 #define INO_T_EQ(a, b) (!bcmp((char *) &(a), (char *) &(b), sizeof (a)))
 #define INO_T_HASH(a) 0
@@ -248,18 +251,25 @@ static void hack_vms_include_specification ();
 #define MAX(X,Y) ((X) > (Y) ? (X) : (Y))
 
 /* Find the largest host integer type and set its size and type.
-   Don't blindly use `long'; on some crazy hosts it is shorter than `int'.  */
-
-#ifndef HOST_BITS_PER_WIDE_INT
-
-#if HOST_BITS_PER_LONG > HOST_BITS_PER_INT
-#define HOST_BITS_PER_WIDE_INT HOST_BITS_PER_LONG
-#define HOST_WIDE_INT long
-#else
-#define HOST_BITS_PER_WIDE_INT HOST_BITS_PER_INT
-#define HOST_WIDE_INT int
-#endif
+   Watch out: on some crazy hosts `long' is shorter than `int'.  */
 
+#ifndef HOST_WIDE_INT
+# if HAVE_INTTYPES_H
+#  include <inttypes.h>
+#  define HOST_WIDE_INT intmax_t
+# else
+#  if (HOST_BITS_PER_LONG <= HOST_BITS_PER_INT \
+       && HOST_BITS_PER_LONGLONG <= HOST_BITS_PER_INT)
+#   define HOST_WIDE_INT int
+#  else
+#  if (HOST_BITS_PER_LONGLONG <= HOST_BITS_PER_LONG \
+       || ! (defined LONG_LONG_MAX || defined LLONG_MAX))
+#   define HOST_WIDE_INT long
+#  else
+#   define HOST_WIDE_INT long long
+#  endif
+#  endif
+# endif
 #endif
 
 #ifndef S_ISREG
@@ -303,6 +313,7 @@ static void hack_vms_include_specification ();
 /* External declarations.  */
 
 extern char *version_string;
+extern char *update_path PROTO((char *, char *));
 #ifndef VMS
 #ifndef HAVE_STRERROR
 extern int sys_nerr;
@@ -400,6 +411,10 @@ static enum {dump_none, dump_only, dump_names, dump_definitions}
    where they are defined.  */
 static int debug_output = 0;
 
+/* Nonzero means pass #include lines through to the output,
+   even if they are ifdeffed out.  */
+static int dump_includes;
+
 /* Nonzero indicates special processing used by the pcp program.  The
    special effects of this mode are: 
      
@@ -518,7 +533,7 @@ static struct file_buf {
   struct if_stack *if_stack;
   /* Object to be freed at end of input at this level.  */
   U_CHAR *free_ptr;
-  /* True if this is a header file included using <FILENAME>.  */
+  /* True if this is a system header file; see is_system_include.  */
   char system_header_p;
 } instack[INPUT_STACK_MAX];
 
@@ -579,6 +594,7 @@ struct file_name_list
 /* The */
 static struct default_include {
   char *fname;                 /* The name of the directory.  */
+  char *component;             /* The component containing the directory */
   int cplusplus;               /* Only look here if we're compiling C++.  */
   int cxx_aware;               /* Includes in this directory don't need to
                                   be wrapped in extern "C" when compiling
@@ -589,40 +605,43 @@ static struct default_include {
 #else
   = {
     /* Pick up GNU C++ specific include files.  */
-    { GPLUSPLUS_INCLUDE_DIR, 1, 1 },
-    { OLD_GPLUSPLUS_INCLUDE_DIR, 1, 1 },
+    { GPLUSPLUS_INCLUDE_DIR, "G++", 1, 1 },
+    { OLD_GPLUSPLUS_INCLUDE_DIR, 0, 1, 1 },
 #ifdef CROSS_COMPILE
     /* This is the dir for fixincludes.  Put it just before
        the files that we fix.  */
-    { GCC_INCLUDE_DIR, 0, 0 },
+    { GCC_INCLUDE_DIR, "GCC", 0, 0 },
     /* For cross-compilation, this dir name is generated
        automatically in Makefile.in.  */
-    { CROSS_INCLUDE_DIR, 0, 0 },
+    { CROSS_INCLUDE_DIR, "GCC", 0, 0 },
 #ifdef TOOL_INCLUDE_DIR
     /* This is another place that the target system's headers might be.  */
-    { TOOL_INCLUDE_DIR, 0, 0 },
+    { TOOL_INCLUDE_DIR, "BINUTILS", 0, 0 },
 #endif
 #else /* not CROSS_COMPILE */
 #ifdef LOCAL_INCLUDE_DIR
     /* This should be /usr/local/include and should come before
        the fixincludes-fixed header files.  */
-    { LOCAL_INCLUDE_DIR, 0, 1 },
+    { LOCAL_INCLUDE_DIR, 0, 0, 1 },
 #endif
 #ifdef TOOL_INCLUDE_DIR
     /* This is here ahead of GCC_INCLUDE_DIR because assert.h goes here.
        Likewise, behind LOCAL_INCLUDE_DIR, where glibc puts its assert.h.  */
-    { TOOL_INCLUDE_DIR, 0, 0 },
+    { TOOL_INCLUDE_DIR, "BINUTILS", 0, 0 },
 #endif
     /* This is the dir for fixincludes.  Put it just before
        the files that we fix.  */
-    { GCC_INCLUDE_DIR, 0, 0 },
+    { GCC_INCLUDE_DIR, "GCC", 0, 0 },
     /* Some systems have an extra dir of include files.  */
 #ifdef SYSTEM_INCLUDE_DIR
-    { SYSTEM_INCLUDE_DIR, 0, 0 },
+    { SYSTEM_INCLUDE_DIR, 0, 0, 0 },
 #endif
-    { STANDARD_INCLUDE_DIR, 0, 0 },
+#ifndef STANDARD_INCLUDE_COMPONENT
+#define STANDARD_INCLUDE_COMPONENT 0
+#endif
+    { STANDARD_INCLUDE_DIR, STANDARD_INCLUDE_COMPONENT, 0, 0 },
 #endif /* not CROSS_COMPILE */
-    { 0, 0, 0 }
+    { 0, 0, 0, 0 }
     };
 #endif /* no INCLUDE_DEFAULTS */
 
@@ -954,13 +973,10 @@ struct directive {
   int (*func) DO_PROTO;        /* Function to handle directive */
   char *name;                  /* Name of directive */
   enum node_type type;         /* Code which describes which directive.  */
-  char angle_brackets;         /* Nonzero => <...> is special.  */
-  char traditional_comments;   /* Nonzero: keep comments if -traditional.  */
-  char pass_thru;              /* Copy directive to output:
-                                  if 1, copy if dumping definitions;
-                                  if 2, always copy, after preprocessing.  */
 };
 
+#define IS_INCLUDE_DIRECTIVE_TYPE(t) (T_INCLUDE <= (t) && (t) <= T_IMPORT)
+
 /* These functions are declared to return int instead of void since they
    are going to be placed in the table and some old compilers have trouble with
    pointers to functions returning void.  */
@@ -987,7 +1003,7 @@ static int do_xifdef DO_PROTO;
 /* Here is the actual list of #-directives, most-often-used first.  */
 
 static struct directive directive_table[] = {
-  {  6, do_define, "define", T_DEFINE, 0, 1, 1},
+  {  6, do_define, "define", T_DEFINE},
   {  2, do_if, "if", T_IF},
   {  5, do_xifdef, "ifdef", T_IFDEF},
   {  6, do_xifdef, "ifndef", T_IFNDEF},
@@ -995,16 +1011,16 @@ static struct directive directive_table[] = {
   {  4, do_else, "else", T_ELSE},
   {  4, do_elif, "elif", T_ELIF},
   {  4, do_line, "line", T_LINE},
-  {  7, do_include, "include", T_INCLUDE, 1},
-  { 12, do_include, "include_next", T_INCLUDE_NEXT, 1},
-  {  6, do_include, "import", T_IMPORT, 1},
+  {  7, do_include, "include", T_INCLUDE},
+  { 12, do_include, "include_next", T_INCLUDE_NEXT},
+  {  6, do_include, "import", T_IMPORT},
   {  5, do_undef, "undef", T_UNDEF},
   {  5, do_error, "error", T_ERROR},
   {  7, do_warning, "warning", T_WARNING},
 #ifdef SCCS_DIRECTIVE
   {  4, do_sccs, "sccs", T_SCCS},
 #endif
-  {  6, do_pragma, "pragma", T_PRAGMA, 0, 0, 2},
+  {  6, do_pragma, "pragma", T_PRAGMA},
   {  5, do_ident, "ident", T_IDENT},
   {  6, do_assert, "assert", T_ASSERT},
   {  8, do_unassert, "unassert", T_UNASSERT},
@@ -1195,7 +1211,7 @@ static void make_undef PROTO((char *, FILE_BUF *));
 
 static void make_assertion PROTO((char *, char *));
 
-static struct file_name_list *new_include_prefix PROTO((struct file_name_list *, char *, char *));
+static struct file_name_list *new_include_prefix PROTO((struct file_name_list *, char *, char *, char *));
 static void append_include_chain PROTO((struct file_name_list *, struct file_name_list *));
 
 static void deps_output PROTO((char *, int));
@@ -1414,7 +1430,8 @@ main (argc, argv)
        if (!strcmp (argv[i], "-isystem")) {
          struct file_name_list *dirtmp;
 
-         if (! (dirtmp = new_include_prefix (NULL_PTR, "", argv[++i])))
+         if (! (dirtmp = new_include_prefix (NULL_PTR, NULL_PTR,
+                                             "", argv[++i])))
            break;
          dirtmp->c_system_include_path = 1;
 
@@ -1439,7 +1456,8 @@ main (argc, argv)
              prefix[strlen (prefix) - 7] = 0;
          }
 
-         if (! (dirtmp = new_include_prefix (NULL_PTR, prefix, argv[++i])))
+         if (! (dirtmp = new_include_prefix (NULL_PTR, NULL_PTR,
+                                             prefix, argv[++i])))
            break;
 
          if (after_include == 0)
@@ -1463,14 +1481,15 @@ main (argc, argv)
              prefix[strlen (prefix) - 7] = 0;
          }
 
-         dirtmp = new_include_prefix (NULL_PTR, prefix, argv[++i]);
+         dirtmp = new_include_prefix (NULL_PTR, NULL_PTR, prefix, argv[++i]);
          append_include_chain (dirtmp, dirtmp);
        }
        /* Add directory to end of path for includes.  */
        if (!strcmp (argv[i], "-idirafter")) {
          struct file_name_list *dirtmp;
 
-         if (! (dirtmp = new_include_prefix (NULL_PTR, "", argv[++i])))
+         if (! (dirtmp = new_include_prefix (NULL_PTR, NULL_PTR,
+                                             "", argv[++i])))
            break;
 
          if (after_include == 0)
@@ -1641,6 +1660,9 @@ main (argc, argv)
            case 'D':
              dump_macros = dump_definitions;
              break;
+           case 'I':
+             dump_includes = 1;
+             break;
            }
          }
        }
@@ -1734,7 +1756,7 @@ main (argc, argv)
            first_bracket_include = 0;
          }
          else {
-           dirtmp = new_include_prefix (last_include, "",
+           dirtmp = new_include_prefix (last_include, NULL_PTR, "",
                                         argv[i][2] ? argv[i] + 2 : argv[++i]);
            append_include_chain (dirtmp, dirtmp);
          }
@@ -1940,6 +1962,7 @@ main (argc, argv)
          include_defaults[num_dirs].fname
            = startp == endp ? "." : savestring (startp);
          endp[-1] = c;
+         include_defaults[num_dirs].component = 0;
          include_defaults[num_dirs].cplusplus = cplusplus;
          include_defaults[num_dirs].cxx_aware = 1;
          num_dirs++;
@@ -1980,7 +2003,7 @@ main (argc, argv)
          if (!strncmp (p->fname, default_prefix, default_len)) {
            /* Yes; change prefix and add to search list.  */
            struct file_name_list *new
-             = new_include_prefix (NULL_PTR, specd_prefix,
+             = new_include_prefix (NULL_PTR, NULL_PTR, specd_prefix,
                                    p->fname + default_len);
            if (new) {
              new->c_system_include_path = !p->cxx_aware;
@@ -1996,7 +2019,7 @@ main (argc, argv)
       /* Some standard dirs are only for C++.  */
       if (!p->cplusplus || (cplusplus && !no_standard_cplusplus_includes)) {
        struct file_name_list *new
-         = new_include_prefix (NULL_PTR, "", p->fname);
+         = new_include_prefix (NULL_PTR, p->component, "", p->fname);
        if (new) {
          new->c_system_include_path = !p->cxx_aware;
          append_include_chain (new, new);
@@ -2123,11 +2146,7 @@ main (argc, argv)
        q = p + (len - 4);
 
       /* Supply our own suffix.  */
-#ifndef VMS
-      strcpy (q, ".o");
-#else
-      strcpy (q, ".obj");
-#endif
+      strcpy (q, OBJECT_SUFFIX);
 
       deps_output (p, ':');
       deps_output (in_fname, ' ');
@@ -2310,7 +2329,8 @@ path_include (path)
        continue;
 
       q[-1] = 0;
-      dirtmp = new_include_prefix (last_include, "", p == q ? "." : p);
+      dirtmp = new_include_prefix (last_include, NULL_PTR,
+                                  "", p == q ? "." : p);
       q[-1] = c;
       append_include_chain (dirtmp, dirtmp);
 
@@ -3724,7 +3744,7 @@ handle_directive (ip, op)
       limit = ip->buf + ip->length;
       unterminated = 0;
       already_output = 0;
-      keep_comments = traditional && kt->traditional_comments;
+      keep_comments = traditional && kt->type == T_DEFINE;
       /* #import is defined only in Objective C, or when on the NeXT.  */
       if (kt->type == T_IMPORT
          && !(objc || lookup ((U_CHAR *) "__NeXT__", -1, -1)))
@@ -3769,7 +3789,7 @@ handle_directive (ip, op)
 
          /* <...> is special for #include.  */
        case '<':
-         if (!kt->angle_brackets)
+         if (! IS_INCLUDE_DIRECTIVE_TYPE (kt->type))
            break;
          while (bp < limit && *bp != '>' && *bp != '\n') {
            if (*bp == '\\' && bp[1] == '\n') {
@@ -3828,10 +3848,12 @@ handle_directive (ip, op)
         RESUME_P is the next interesting data after the directive.
         A comment may come between.  */
 
-      /* If a directive should be copied through, and -E was given,
+      /* If a directive should be copied through, and -C was given,
         pass it through before removing comments.  */
       if (!no_output && put_out_comments
-         && (dump_macros != dump_definitions) < kt->pass_thru) {
+         && (kt->type == T_DEFINE ? dump_macros == dump_definitions
+             : IS_INCLUDE_DIRECTIVE_TYPE (kt->type) ? dump_includes
+             : kt->type == T_PRAGMA)) {
         int len;
 
        /* Output directive name.  */
@@ -3880,7 +3902,7 @@ handle_directive (ip, op)
 
            /* <...> is special for #include.  */
          case '<':
-           if (!kt->angle_brackets)
+           if (! IS_INCLUDE_DIRECTIVE_TYPE (kt->type))
              break;
            while (xp < bp && c != '>') {
              c = *xp++;
@@ -3955,10 +3977,12 @@ handle_directive (ip, op)
 
       /* Some directives should be written out for cc1 to process,
         just as if they were not defined.  And sometimes we're copying
-        definitions through.  */
+        directives through.  */
 
       if (!no_output && already_output == 0
-         && (dump_macros < dump_names) < kt->pass_thru) {
+         && (kt->type == T_DEFINE ? dump_names <= dump_macros
+             : IS_INCLUDE_DIRECTIVE_TYPE (kt->type) ? dump_includes
+             : kt->type == T_PRAGMA)) {
         int len;
 
        /* Output directive name.  */
@@ -3967,13 +3991,8 @@ handle_directive (ip, op)
         bcopy (kt->name, (char *) op->bufp, kt->length);
         op->bufp += kt->length;
 
-       if ((dump_macros != dump_definitions) < kt->pass_thru) {
-         /* Output arguments.  */
-         len = (cp - buf);
-         check_expand (op, len);
-         bcopy (buf, (char *) op->bufp, len);
-         op->bufp += len;
-       } else if (kt->type == T_DEFINE && dump_macros == dump_names) {
+       if (kt->type == T_DEFINE && dump_macros == dump_names) {
+         /* Output `#define name' only.  */
          U_CHAR *xp = buf;
          U_CHAR *yp;
          SKIP_WHITE_SPACE (xp);
@@ -3982,9 +4001,14 @@ handle_directive (ip, op)
          len = (xp - yp);
          check_expand (op, len + 1);
          *op->bufp++ = ' ';
-         bcopy (yp, op->bufp, len);
-         op->bufp += len;
+         bcopy (yp, (char *) op->bufp, len);
+       } else {
+         /* Output entire directive.  */
+         len = (cp - buf);
+         check_expand (op, len);
+         bcopy (buf, (char *) op->bufp, len);
        }
+       op->bufp += len;
       }                                /* Don't we need a newline or #line? */
 
       /* Call the appropriate directive handler.  buf now points to
@@ -4118,6 +4142,12 @@ special_symbol (hp, op)
 
   case T_CONST:
     buf = hp->value.cpval;
+#ifdef STDC_0_IN_SYSTEM_HEADERS
+    if (ip->system_header_p
+       && hp->length == 8 && bcmp (hp->name, "__STDC__", 8) == 0
+       && !lookup ((U_CHAR *) "__STRICT_ANSI__", -1, -1))
+      buf = "0";
+#endif
     if (pcp_inside_if && pcp_outfile)
       /* Output a precondition for this macro use */
       fprintf (pcp_outfile, "#define %s %s\n", hp->name, buf);
@@ -5305,12 +5335,12 @@ pcfinclude (buf, limit, name, op)
 
     /* First skip to a longword boundary */
     /* ??? Why a 4-byte boundary?  On all machines? */
-    /* NOTE: This works correctly even if HOST_WIDE_INT
+    /* NOTE: This works correctly even if size_t
        is narrower than a pointer.
        Do not try risky measures here to get another type to use!
        Do not include stddef.h--it will fail!  */
-    if ((HOST_WIDE_INT) cp & 3)
-      cp += 4 - ((HOST_WIDE_INT) cp & 3);
+    if ((size_t) cp & 3)
+      cp += 4 - ((size_t) cp & 3);
     
     /* Now get the string.  */
     str = (STRINGDEF *) (GENERIC_PTR) cp;
@@ -6798,7 +6828,7 @@ do_once ()
     }
 }
 
-/* #ident has already been copied to the output file, so just ignore it.  */
+/* Report program identification.  */
 
 static int
 do_ident (buf, limit, op, keyword)
@@ -6814,22 +6844,17 @@ do_ident (buf, limit, op, keyword)
     pedwarn ("ANSI C does not allow `#ident'");
 
   trybuf = expand_to_temp_buffer (buf, limit, 0, 0);
-  buf = (U_CHAR *) alloca (trybuf.bufp - trybuf.buf + 1);
-  bcopy ((char *) trybuf.buf, (char *) buf, trybuf.bufp - trybuf.buf);
-  limit = buf + (trybuf.bufp - trybuf.buf);
-  len = (limit - buf);
-  free (trybuf.buf);
-
-  /* Output directive name.  */
-  check_expand (op, 7);
+  buf = trybuf.buf;
+  len = trybuf.bufp - buf;
+
+  /* Output expanded directive.  */
+  check_expand (op, 7 + len);
   bcopy ("#ident ", (char *) op->bufp, 7);
   op->bufp += 7;
-
-  /* Output the expanded argument line.  */
-  check_expand (op, len);
   bcopy ((char *) buf, (char *) op->bufp, len);
   op->bufp += len;
 
+  free (buf);
   return 0;
 }
 
@@ -6858,7 +6883,7 @@ do_pragma (buf, limit, op, keyword)
     int h;
     U_CHAR *p = buf + 14, *fname;
     SKIP_WHITE_SPACE (p);
-    if (*p == '\n' || *p != '\"')
+    if (*p != '\"')
       return 0;
 
     fname = p + 1;
@@ -9782,7 +9807,12 @@ make_assertion (option, str)
   --indepth;
 }
 \f
+#ifndef DIR_SEPARATOR
+#define DIR_SEPARATOR '/'
+#endif
+
 /* The previous include prefix, if any, is PREV_FILE_NAME.
+   Translate any pathnames with COMPONENT.
    Allocate a new include prefix whose name is the
    simplified concatenation of PREFIX and NAME,
    with a trailing / added if needed.
@@ -9790,33 +9820,38 @@ make_assertion (option, str)
    e.g. because it is a duplicate of PREV_FILE_NAME.  */
 
 static struct file_name_list *
-new_include_prefix (prev_file_name, prefix, name)
+new_include_prefix (prev_file_name, component, prefix, name)
      struct file_name_list *prev_file_name;
+     char *component;
      char *prefix;
      char *name;
 {
-  if (!name)
+  if (name == 0)
     fatal ("Directory name missing after command line option");
 
-  if (!*name)
+  if (*name == 0)
     /* Ignore the empty string.  */
     return 0;
-  else {
+
+  prefix = update_path (prefix, component);
+  name = update_path (name, component);
+
+  {
     struct file_name_list *dir
       = ((struct file_name_list *)
         xmalloc (sizeof (struct file_name_list)
-                 + strlen (prefix) + strlen (name) + 1 /* for trailing / */));
+                 + strlen (prefix) + strlen (name) + 2));
     size_t len;
     strcpy (dir->fname, prefix);
     strcat (dir->fname, name);
     len = simplify_filename (dir->fname);
 
     /* Convert directory name to a prefix.  */
-    if (dir->fname[len - 1] != '/') {
+    if (dir->fname[len - 1] != DIR_SEPARATOR) {
       if (len == 1 && dir->fname[len - 1] == '.')
        len = 0;
       else
-       dir->fname[len++] = '/';
+       dir->fname[len++] = DIR_SEPARATOR;
       dir->fname[len] = 0;
     }
 
@@ -9832,6 +9867,14 @@ new_include_prefix (prev_file_name, prefix, name)
 #ifndef VMS
     /* VMS can't stat dir prefixes, so skip these optimizations in VMS.  */
 
+    /* Add a trailing "." if there is a filename.  This increases the number
+       of systems that can stat directories.  We remove it below.  */
+    if (len != 0)
+      {
+       dir->fname[len] = '.';
+       dir->fname[len + 1] = 0;
+      }
+
     /* Ignore a nonexistent directory.  */
     if (stat (len ? dir->fname : ".", &dir->st) != 0) {
       if (errno != ENOENT && errno != ENOTDIR)
@@ -9840,6 +9883,9 @@ new_include_prefix (prev_file_name, prefix, name)
       return 0;
     }
 
+    if (len != 0)
+      dir->fname[len] = 0;
+
     /* Ignore a directory whose identity matches the previous one.  */
     if (prev_file_name
        && INO_T_EQ (prev_file_name->st.st_ino, dir->st.st_ino)
@@ -10200,27 +10246,26 @@ hack_vms_include_specification (fname, vaxc_include)
      "shr=nil"- Disallow file sharing while file is open.  */
 
 static FILE *
-freopen (fname, type, oldfile)
+VMS_freopen (fname, type, oldfile)
      char *fname;
      char *type;
      FILE *oldfile;
 {
-#undef freopen /* Get back the REAL fopen routine */
   if (strcmp (type, "w") == 0)
-    return freopen (fname, type, oldfile, "mbc=16", "deq=64", "fop=tef", "shr=nil");
-  return freopen (fname, type, oldfile, "mbc=16");
+    return decc$freopen (fname, type, oldfile,
+                        "mbc=16", "deq=64", "fop=tef", "shr=nil");
+  return decc$freopen (fname, type, oldfile, "mbc=16");
 }
 
 static FILE *
-fopen (fname, type)
+VMS_fopen (fname, type)
      char *fname;
      char *type;
 {
-#undef fopen   /* Get back the REAL fopen routine */
   /* The gcc-vms-1.42 distribution's header files prototype fopen with two
      fixed arguments, which matches ANSI's specification but not VAXCRTL's
      pre-ANSI implementation.  This hack circumvents the mismatch problem.  */
-  FILE *(*vmslib_fopen)() = (FILE *(*)()) fopen;
+  FILE *(*vmslib_fopen)() = (FILE *(*)()) decc$fopen;
 
   if (*type == 'w')
     return (*vmslib_fopen) (fname, type, "mbc=32",
@@ -10230,13 +10275,12 @@ fopen (fname, type)
 }
 
 static int 
-open (fname, flags, prot)
+VMS_open (fname, flags, prot)
      char *fname;
      int flags;
      int prot;
 {
-#undef open    /* Get back the REAL open routine */
-  return open (fname, flags, prot, "mbc=16", "deq=64", "fop=tef");
+  return decc$open (fname, flags, prot, "mbc=16", "deq=64", "fop=tef");
 }
 \f
 /* more VMS hackery */
@@ -10257,14 +10301,13 @@ extern unsigned long sys$parse(), sys$search();
    bad enough, but then compounding the problem by reporting the reason for
    failure as "normal successful completion."  */
 
-#undef fstat   /* get back to library version */
 
 static int
 VMS_fstat (fd, statbuf)
      int fd;
      struct stat *statbuf;
 {
-  int result = fstat (fd, statbuf);
+  int result = decc$fstat (fd, statbuf);
 
   if (result < 0)
     {
index 576bc74..f18ecfe 100644 (file)
@@ -1592,9 +1592,9 @@ collect_execute (prog, argv, redir)
        {
          unlink (redir);
          if (freopen (redir, "a", stdout) == NULL)
-           fatal_perror ("redirecting stdout");
+           fatal_perror ("redirecting stdout: %s", redir);
          if (freopen (redir, "a", stderr) == NULL)
-           fatal_perror ("redirecting stderr");
+           fatal_perror ("redirecting stderr: %s", redir);
        }
 
       execvp (argv[0], argv);
index 3626e48..20bcaf9 100644 (file)
@@ -970,13 +970,10 @@ can_combine_p (insn, i3, pred, succ, pdest, psrc)
                 inputs.  */
              || (REGNO (src) < FIRST_PSEUDO_REGISTER
                  && (! HARD_REGNO_MODE_OK (REGNO (src), GET_MODE (src))
-#ifdef SMALL_REGISTER_CLASSES
                      || (SMALL_REGISTER_CLASSES
                          && ((! all_adjacent && ! REG_USERVAR_P (src))
                              || (FUNCTION_VALUE_REGNO_P (REGNO (src))
-                                 && ! REG_USERVAR_P (src))))
-#endif
-                     ))))
+                                 && ! REG_USERVAR_P (src))))))))
        return 0;
     }
   else if (GET_CODE (dest) != CC0)
@@ -1086,7 +1083,7 @@ can_combine_p (insn, i3, pred, succ, pdest, psrc)
    If I1_NOT_IN_SRC is non-zero, it means that finding I1 in the source
    of a SET must prevent combination from occurring.
 
-   On machines where SMALL_REGISTER_CLASSES is defined, we don't combine
+   On machines where SMALL_REGISTER_CLASSES is non-zero, we don't combine
    if the destination of a SET is a hard register that isn't a user
    variable.
 
@@ -1163,12 +1160,9 @@ combinable_i3pat (i3, loc, i2dest, i1dest, i1_not_in_src, pi3dest_killed)
              && REGNO (inner_dest) < FIRST_PSEUDO_REGISTER
              && (! HARD_REGNO_MODE_OK (REGNO (inner_dest),
                                        GET_MODE (inner_dest))
-#ifdef SMALL_REGISTER_CLASSES
-                || (SMALL_REGISTER_CLASSES
-                    && GET_CODE (src) != CALL && ! REG_USERVAR_P (inner_dest)
-                    && FUNCTION_VALUE_REGNO_P (REGNO (inner_dest)))
-#endif
-                 ))
+                || (SMALL_REGISTER_CLASSES && GET_CODE (src) != CALL
+                    && ! REG_USERVAR_P (inner_dest)
+                    && FUNCTION_VALUE_REGNO_P (REGNO (inner_dest)))))
          || (i1_not_in_src && reg_overlap_mentioned_p (i1dest, src)))
        return 0;
 
@@ -1308,12 +1302,10 @@ try_combine (i3, i2, i1)
   if (i1 == 0 && GET_CODE (i3) == INSN && GET_CODE (PATTERN (i3)) == SET
       && GET_CODE (SET_SRC (PATTERN (i3))) == REG
       && REGNO (SET_SRC (PATTERN (i3))) >= FIRST_PSEUDO_REGISTER
-#ifdef SMALL_REGISTER_CLASSES
       && (! SMALL_REGISTER_CLASSES
-         || GET_CODE (SET_DEST (PATTERN (i3))) != REG
-         || REGNO (SET_DEST (PATTERN (i3))) >= FIRST_PSEUDO_REGISTER
-         || REG_USERVAR_P (SET_DEST (PATTERN (i3))))
-#endif
+         || (GET_CODE (SET_DEST (PATTERN (i3))) != REG
+             || REGNO (SET_DEST (PATTERN (i3))) >= FIRST_PSEUDO_REGISTER
+             || REG_USERVAR_P (SET_DEST (PATTERN (i3)))))
       && find_reg_note (i3, REG_DEAD, SET_SRC (PATTERN (i3)))
       && GET_CODE (PATTERN (i2)) == PARALLEL
       && ! side_effects_p (SET_DEST (PATTERN (i3)))
@@ -2066,8 +2058,21 @@ try_combine (i3, i2, i1)
           && ! reg_referenced_p (SET_DEST (XVECEXP (newpat, 0, 0)),
                                  XVECEXP (newpat, 0, 1)))
     {
-      newi2pat = XVECEXP (newpat, 0, 1);
-      newpat = XVECEXP (newpat, 0, 0);
+      /* Normally, it doesn't matter which of the two is done first,
+        but it does if one references cc0.  In that case, it has to
+        be first.  */
+#ifdef HAVE_cc0
+      if (reg_referenced_p (cc0_rtx, XVECEXP (newpat, 0, 0)))
+       {
+         newi2pat = XVECEXP (newpat, 0, 0);
+         newpat = XVECEXP (newpat, 0, 1);
+       }
+      else
+#endif
+       {
+         newi2pat = XVECEXP (newpat, 0, 1);
+         newpat = XVECEXP (newpat, 0, 0);
+       }
 
       i2_code_number
        = recog_for_combine (&newi2pat, i2, &new_i2_notes, &i2_scratches);
@@ -2293,7 +2298,9 @@ try_combine (i3, i2, i1)
       }
 
     /* If I3DEST was used in I3SRC, it really died in I3.  We may need to
-       put a REG_DEAD note for it somewhere.  Similarly for I2 and I1.
+       put a REG_DEAD note for it somewhere.  If NEWI2PAT exists and sets
+       I3DEST, the death must be somewhere before I2, not I3.  If we passed I3
+       in that case, it might delete I2.  Similarly for I2 and I1.
        Show an additional death due to the REG_DEAD note we make here.  If
        we discard it in distribute_notes, we will decrement it again.  */
 
@@ -2302,16 +2309,17 @@ try_combine (i3, i2, i1)
        if (GET_CODE (i3dest_killed) == REG)
          REG_N_DEATHS (REGNO (i3dest_killed))++;
 
-       distribute_notes (gen_rtx (EXPR_LIST, REG_DEAD, i3dest_killed,
-                                  NULL_RTX),
-                         NULL_RTX, i3, newi2pat ? i2 : NULL_RTX,
-                         NULL_RTX, NULL_RTX);
+       if (newi2pat && reg_set_p (i3dest_killed, newi2pat))
+         distribute_notes (gen_rtx (EXPR_LIST, REG_DEAD, i3dest_killed,
+                                    NULL_RTX),
+                           NULL_RTX, i2, NULL_RTX, NULL_RTX, NULL_RTX);
+       else
+         distribute_notes (gen_rtx (EXPR_LIST, REG_DEAD, i3dest_killed,
+                                    NULL_RTX),
+                           NULL_RTX, i3, newi2pat ? i2 : NULL_RTX,
+                           NULL_RTX, NULL_RTX);
       }
 
-    /* For I2 and I1, we have to be careful.  If NEWI2PAT exists and sets
-       I2DEST or I1DEST, the death must be somewhere before I2, not I3.  If
-       we passed I3 in that case, it might delete I2.  */
-
     if (i2dest_in_i2src)
       {
        if (GET_CODE (i2dest) == REG)
@@ -2730,6 +2738,9 @@ find_split_point (loc, insn)
              unsignedp = (code == ZERO_EXTRACT);
            }
          break;
+
+       default:
+         break;
        }
 
       if (len && pos >= 0 && pos + len <= GET_MODE_BITSIZE (GET_MODE (inner)))
@@ -2826,6 +2837,9 @@ find_split_point (loc, insn)
          SUBST (XEXP (x, 1), tem);
        }
       break;
+
+    default:
+      break;
     }
 
   /* Otherwise, select our actions depending on our rtx class.  */
@@ -4083,6 +4097,9 @@ simplify_rtx (x, op0_mode, last, in_dest)
 #endif
 
       break;
+
+    default:
+      break;
     }
 
   return x;
@@ -4230,6 +4247,8 @@ simplify_if_then_else (x)
       case LT:
       case LE:
        return gen_unary (NEG, mode, mode, gen_unary (ABS, mode, mode, true));
+    default:
+      break;
       }
 
   /* Look for MIN or MAX.  */
@@ -4253,6 +4272,8 @@ simplify_if_then_else (x)
       case LEU:
       case LTU:
        return gen_binary (UMIN, mode, true, false);
+      default:
+       break;
       }
   
   /* If we have (if_then_else COND (OP Z C1) Z) and OP is an identity when its
@@ -4943,6 +4964,9 @@ simplify_logical (x, last)
        return gen_rtx_combine (reverse_condition (GET_CODE (op0)),
                                mode, XEXP (op0, 0), XEXP (op0, 1));
       break;
+
+    default:
+      abort ();
     }
 
   return x;
@@ -5656,6 +5680,9 @@ extract_left_shift (x, count)
                           GEN_INT (INTVAL (XEXP (x, 1)) >> count));
 
       break;
+      
+    default:
+      break;
     }
 
   return 0;
@@ -5897,6 +5924,10 @@ make_compound_operation (x, in_code)
 
          return newer;
        }
+      break;
+      
+    default:
+      break;
     }
 
   if (new)
@@ -6466,6 +6497,9 @@ force_to_mode (x, mode, mask, reg, just_select)
                                      force_to_mode (XEXP (x, 2), mode,
                                                     mask, reg,next_select)));
       break;
+      
+    default:
+      break;
     }
 
   /* Ensure we return a value of the proper mode.  */
@@ -6688,6 +6722,8 @@ known_cond (x, cond, reg, val)
       case LT:  case LE:
        return gen_unary (NEG, GET_MODE (XEXP (x, 0)), GET_MODE (XEXP (x, 0)),
                          XEXP (x, 0));
+      default:
+       break;
       }
 
   /* The only other cases we handle are MIN, MAX, and comparisons if the
@@ -6724,6 +6760,8 @@ known_cond (x, cond, reg, val)
                  return unsignedp ? XEXP (x, 1) : x;
                case LEU:  case LTU:
                  return unsignedp ? XEXP (x, 0) : x;
+               default:
+                 break;
                }
            }
        }
@@ -7435,6 +7473,8 @@ nonzero_bits (x, mode)
            result_width = MIN (width0, width1);
            result_low = MIN (low0, low1);
            break;
+         default:
+           abort ();
          }
 
        if (result_width < mode_width)
@@ -7537,6 +7577,9 @@ nonzero_bits (x, mode)
       nonzero &= (nonzero_bits (XEXP (x, 1), mode)
                  | nonzero_bits (XEXP (x, 2), mode));
       break;
+      
+    default:
+      break;
     }
 
   return nonzero;
@@ -7578,13 +7621,25 @@ num_sign_bit_copies (x, mode)
     return MAX (1, (num_sign_bit_copies (x, GET_MODE (x))
                    - (GET_MODE_BITSIZE (GET_MODE (x)) - bitwidth)));
      
+  if (GET_MODE (x) != VOIDmode && bitwidth > GET_MODE_BITSIZE (GET_MODE (x)))
+    {
 #ifndef WORD_REGISTER_OPERATIONS
   /* If this machine does not do all register operations on the entire
      register and MODE is wider than the mode of X, we can say nothing
      at all about the high-order bits.  */
-  if (GET_MODE (x) != VOIDmode && bitwidth > GET_MODE_BITSIZE (GET_MODE (x)))
-    return 1;
+      return 1;
+#else
+      /* Likewise on machines that do, if the mode of the object is smaller
+        than a word and loads of that size don't sign extend, we can say
+        nothing about the high order bits.  */
+      if (GET_MODE_BITSIZE (GET_MODE (x)) < BITS_PER_WORD
+#ifdef LOAD_EXTEND_OP
+         && LOAD_EXTEND_OP (GET_MODE (x)) != SIGN_EXTEND
+#endif
+         )
+       return 1;
 #endif
+    }
 
   switch (code)
     {
@@ -7824,6 +7879,10 @@ num_sign_bit_copies (x, mode)
     case GEU: case GTU: case LEU: case LTU:
       if (STORE_FLAG_VALUE == -1)
        return bitwidth;
+      break;
+      
+    default:
+      break;
     }
 
   /* If we haven't been able to figure it out by one of the above rules,
@@ -7935,6 +7994,8 @@ merge_outer_ops (pop0, pconst0, op1, const1, mode, pcomp_p)
        case NEG:
          op0 = NIL;
          break;
+       default:
+         break;
        }
     }
 
@@ -7976,6 +8037,8 @@ merge_outer_ops (pop0, pconst0, op1, const1, mode, pcomp_p)
          /* (a ^ b) & b) == (~a) & b */
          *pcomp_p = 1;
        break;
+      default:
+       break;
       }
 
   /* Check for NO-OP cases.  */
@@ -8609,6 +8672,9 @@ simplify_shift_const (x, code, result_mode, varop, count)
              continue;
            }
          break;
+         
+       default:
+         break;
        }
 
       break;
@@ -9441,6 +9507,9 @@ simplify_comparison (code, pop0, pop1)
              code = LT;
            }
          break;
+
+       default:
+         break;
        }
 
       /* Compute some predicates to simplify code below.  */
@@ -9973,6 +10042,9 @@ simplify_comparison (code, pop0, pop1)
              continue;
            }
          break;
+         
+       default:
+         break;
        }
 
       break;
@@ -10103,9 +10175,10 @@ reversible_comparison_p (x)
       x = get_last_value (XEXP (x, 0));
       return (x && GET_CODE (x) == COMPARE
              && ! FLOAT_MODE_P (GET_MODE (XEXP (x, 0))));
+      
+    default:
+      return 0;
     }
-
-  return 0;
 }
 \f
 /* Utility function for following routine.  Called when X is part of a value
@@ -10712,8 +10785,11 @@ mark_used_regs_combine (x)
          mark_used_regs_combine (XEXP (testreg, 0));
 
        mark_used_regs_combine (SET_SRC (x));
-       return;
       }
+      return;
+
+    default:
+      break;
     }
 
   /* Recursively scan the operands of this expression.  */
index 318dadc..f7abfb9 100644 (file)
@@ -1,9 +1,4 @@
 /* config.in.  Generated automatically from configure.in by autoheader.  */
-
-/* Include the old config.h as config2.h to simplify the transition
-   to autoconf.  */
-#include "config2.h"
-
 /* Whether malloc must be declared even if <stdlib.h> is included.  */
 #undef NEED_DECLARATION_MALLOC
 
 /* Define if you have the strtoul function.  */
 #undef HAVE_STRTOUL
 
+/* Define if you have the <inttypes.h> header file.  */
+#undef HAVE_INTTYPES_H
+
+/* Define if you have the <limits.h> header file.  */
+#undef HAVE_LIMITS_H
+
 /* Define if you have the <stddef.h> header file.  */
 #undef HAVE_STDDEF_H
 
index 5e4e7ed..213a6d4 100755 (executable)
@@ -155,6 +155,7 @@ case $basic_machine in
                | alpha | alphaev5 | alphaev56 | we32k | ns16k | clipper \
                | i370 | sh | powerpc | powerpcle | 1750a | dsp16xx | pdp11 \
                | mips64 | mipsel | mips64el | mips64orion | mips64orionel \
+               | mipstx39 | mipstx39el \
                | sparc | sparclet | sparclite | sparc64 | v850)
                basic_machine=$basic_machine-unknown
                ;;
@@ -179,7 +180,9 @@ case $basic_machine in
              | ns16k-* | pn-* | np1-* | xps100-* | clipper-* | orion-* \
              | sparclite-* | pdp11-* | sh-* | powerpc-* | powerpcle-* \
              | sparc64-* | mips64-* | mipsel-* \
-             | mips64el-* | mips64orion-* | mips64orionel-* | f301-*)
+             | mips64el-* | mips64orion-* | mips64orionel-*  \
+             | mipstx39-* | mipstx39el-* \
+             | f301-*)
                ;;
        # Recognize the various machine names and aliases which stand
        # for a CPU type and a company and sometimes even an OS.
@@ -568,6 +571,12 @@ case $basic_machine in
                basic_machine=i386-sequent
                os=-dynix
                ;;
+       tx39)
+               basic_machine=mipstx39-unknown
+               ;;
+       tx39el)
+               basic_machine=mipstx39el-unknown
+               ;;
        tower | tower-32)
                basic_machine=m68k-ncr
                ;;
index 0c53340..88771b9 100644 (file)
@@ -20,8 +20,8 @@ the Free Software Foundation, 59 Temple Place - Suite 330,
 Boston, MA 02111-1307, USA.  */
 
 
-#include <stdio.h>
 #include "config.h"
+#include <stdio.h>
 #include "rtl.h"
 #include "regs.h"
 #include "hard-reg-set.h"
@@ -100,16 +100,12 @@ static void add_long_const        PROTO((FILE *, HOST_WIDE_INT, int, int, int));
 /* Compute the size of the save area in the stack.  */
 static void alpha_sa_mask      PROTO((unsigned long *imaskP,
                                       unsigned long *fmaskP));
-
-/* Strip type information.  */
-#define CURRENT_FUNCTION_ARGS_INFO  \
-(TARGET_OPEN_VMS ? current_function_args_info & 0xff \
- : current_function_args_info)
-
-/* Some helpful register info.  */
-#define REG_PV 27
-#define REG_RA 26
-
+/* Get the number of args of a function in one of two ways.  */
+#ifdef OPEN_VMS
+#define NUM_ARGS current_function_args_info.num_args
+#else
+#define NUM_ARGS current_function_args_info
+#endif
 \f
 /* Parse target option strings. */
 
@@ -117,21 +113,42 @@ void
 override_options ()
 {
   alpha_cpu
-    = TARGET_CPU_DEFAULT & MASK_CPU_EV5 ? PROCESSOR_EV5 : PROCESSOR_EV4;
+    = TARGET_CPU_DEFAULT & MASK_CPU_EV6 ? PROCESSOR_EV6
+      : (TARGET_CPU_DEFAULT & MASK_CPU_EV5 ? PROCESSOR_EV5 : PROCESSOR_EV4);
 
   if (alpha_cpu_string)
     {
       if (! strcmp (alpha_cpu_string, "ev4")
          || ! strcmp (alpha_cpu_string, "21064"))
-       alpha_cpu = PROCESSOR_EV4;
+       {
+         alpha_cpu = PROCESSOR_EV4;
+         target_flags &= ~ (MASK_BWX | MASK_CIX | MASK_MAX);
+       }
       else if (! strcmp (alpha_cpu_string, "ev5")
               || ! strcmp (alpha_cpu_string, "21164"))
-       alpha_cpu = PROCESSOR_EV5;
+       {
+         alpha_cpu = PROCESSOR_EV5;
+         target_flags &= ~ (MASK_BWX | MASK_CIX | MASK_MAX);
+       }
       else if (! strcmp (alpha_cpu_string, "ev56")
               || ! strcmp (alpha_cpu_string, "21164a"))
        {
          alpha_cpu = PROCESSOR_EV5;
-         target_flags |= MASK_BYTE_OPS;
+         target_flags |= MASK_BWX;
+         target_flags &= ~ (MASK_CIX | MASK_MAX);
+       }
+      else if (! strcmp (alpha_cpu_string, "pca56")
+              || ! strcmp (alpha_cpu_string, "21164PC"))
+       {
+         alpha_cpu = PROCESSOR_EV5;
+         target_flags |= MASK_BWX | MASK_MAX;
+         target_flags &= ~ MASK_CIX;
+       }
+      else if (! strcmp (alpha_cpu_string, "ev6")
+              || ! strcmp (alpha_cpu_string, "21264"))
+       {
+         alpha_cpu = PROCESSOR_EV6;
+         target_flags |= MASK_BWX | MASK_CIX | MASK_MAX;
        }
       else
        error ("bad value `%s' for -mcpu switch", alpha_cpu_string);
@@ -487,7 +504,7 @@ input_operand (op, mode)
        return 1;
       /* ... fall through ... */
     case MEM:
-      return ((TARGET_BYTE_OPS || (mode != HImode && mode != QImode))
+      return ((TARGET_BWX || (mode != HImode && mode != QImode))
              && general_operand (op, mode));
 
     case CONST_DOUBLE:
@@ -1441,12 +1458,12 @@ print_operand (file, x, code)
 
     case ',':
       /* Generates single precision instruction suffix.  */
-      fprintf (file, "%c", (TARGET_FLOAT_VAX?'f':'s'));
+      fprintf (file, "%c", (TARGET_FLOAT_VAX ? 'f' : 's'));
       break;
 
     case '-':
       /* Generates double precision instruction suffix.  */
-      fprintf (file, "%c", (TARGET_FLOAT_VAX?'g':'t'));
+      fprintf (file, "%c", (TARGET_FLOAT_VAX ? 'g' : 't'));
       break;
 
     case 'r':
@@ -1673,9 +1690,9 @@ alpha_builtin_saveregs (arglist)
 
   /* Compute the current position into the args, taking into account
      both registers and memory.  Both of these are already included in
-     current_function_args_info.  */
+     NUM_ARGS.  */
 
-  argsize = GEN_INT (CURRENT_FUNCTION_ARGS_INFO * UNITS_PER_WORD);
+  argsize = GEN_INT (NUM_ARGS * UNITS_PER_WORD);
 
   /* For Unix, SETUP_INCOMING_VARARGS moves the starting address base up by 48,
      storing fp arg registers in the first 48 bytes, and the integer arg
@@ -1688,10 +1705,10 @@ alpha_builtin_saveregs (arglist)
 
   if (TARGET_OPEN_VMS)
     addr = plus_constant (virtual_incoming_args_rtx,
-                         CURRENT_FUNCTION_ARGS_INFO <= 5 + stdarg
+                         NUM_ARGS <= 5 + stdarg
                          ? UNITS_PER_WORD : - 6 * UNITS_PER_WORD);
   else
-    addr = (CURRENT_FUNCTION_ARGS_INFO <= 5 + stdarg
+    addr = (NUM_ARGS <= 5 + stdarg
            ? plus_constant (virtual_incoming_args_rtx,
                             6 * UNITS_PER_WORD)
            : plus_constant (virtual_incoming_args_rtx,
@@ -1750,6 +1767,39 @@ alpha_builtin_saveregs (arglist)
     }
 }
 \f
+#if OPEN_VMS
+#define REG_PV 27
+#define REG_RA 26
+#else
+#define REG_RA 26
+#endif
+
+/* Find the current function's return address.
+
+   ??? It would be better to arrange things such that if we would ordinarily
+   have been a leaf function and we didn't spill the hard reg that we
+   wouldn't have to save the register in the prolog.  But it's not clear
+   how to get the right information at the right time.  */
+
+static rtx alpha_return_addr_rtx;
+
+rtx
+alpha_return_addr ()
+{
+  rtx ret;
+
+  if ((ret = alpha_return_addr_rtx) == NULL)
+    {
+      alpha_return_addr_rtx = ret = gen_reg_rtx (Pmode);
+
+      emit_insn_after (gen_rtx (SET, VOIDmode, ret,
+                               gen_rtx (REG, Pmode, REG_RA)),
+                      get_insns ());
+    }
+
+  return ret;
+}
+
 /* This page contains routines that are used to determine what the function
    prologue and epilogue code will do and write them out.  */
 
@@ -2316,6 +2366,18 @@ alpha_does_function_need_gp ()
   return 0;
 }
 
+int
+vms_valid_decl_attribute_p (decl, attributes, identifier, args)
+     tree decl;
+     tree attributes;
+     tree identifier;
+     tree args;
+{
+  if (is_attribute_p ("overlaid", identifier))
+    return (args == NULL_TREE);
+  return 0;
+}
+
 void
 output_prolog (file, size)
      FILE *file;
@@ -2646,6 +2708,8 @@ output_epilog (file, size)
 
   /* Show that we know this function if it is called again.  */
   SYMBOL_REF_FLAG (XEXP (DECL_RTL (current_function_decl), 0)) = 1;
+
+  alpha_return_addr_rtx = 0;
 }
 #endif /* !OPEN_VMS */
 \f
@@ -3124,46 +3188,39 @@ check_float_value (mode, d, overflow)
 
 #if OPEN_VMS
 
-void *
-function_arg (cum, mode, type, named)
-    CUMULATIVE_ARGS *cum;
-    enum machine_mode mode;
-    tree type;
-    int named;
-{
-  int arg;
+/* Return the VMS argument type corresponding to MODE.  */
 
-  if (mode == VOIDmode)                /* final call, return argument information  */
+enum avms_arg_type
+alpha_arg_type (mode)
+     enum machine_mode mode;
+{
+  switch (mode)
     {
-      return GEN_INT (*cum);
+    case SFmode:
+      return TARGET_FLOAT_VAX ? FF : FS;
+    case DFmode:
+      return TARGET_FLOAT_VAX ? FD : FT;
+    default:
+      return I64;
     }
+}
 
-  arg = *cum & 0xff;
+/* Return an rtx for an integer representing the VMS Argument Information
+   register value.  */
 
-  switch (mode)
-    {
-      case SFmode:
-       *cum |= (((TARGET_FLOAT_VAX)?1:4) << ((arg * 3)+8));      /* 4 = AI$K_AR_FS, IEEE single */
-        break;
-      case DFmode:
-        *cum |= (((TARGET_FLOAT_VAX)?3:5) << ((arg * 3)+8));      /* 5 = AI$K_AR_FT, IEEE double */
-        break;
-      case TFmode:
-        *cum |= (7 << ((arg * 3)+8));        /* 5 = AI$K_AR_FT, IEEE double */
-        break;
-      default:
-        break;
-    }
+struct rtx_def *
+alpha_arg_info_reg_val (cum)
+     CUMULATIVE_ARGS cum;
+{
+  unsigned HOST_WIDE_INT regval = cum.num_args;
+  int i;
 
-  return (arg < 6 && ! MUST_PASS_IN_STACK (mode, type)
-        ? gen_rtx(REG, mode,
-                  (*cum & 0xff) + 16 + ((TARGET_FPREGS
-                         && (GET_MODE_CLASS (mode) == MODE_COMPLEX_FLOAT
-                             || GET_MODE_CLASS (mode) == MODE_FLOAT))
-                        * 32))
-        : 0);
-}
+  for (i = 0; i < 6; i++)
+    regval |= ((int) cum.atypes[i]) << (i * 3 + 8);
 
+  return GEN_INT (regval);
+}
+\f
 /* Structure to collect function names for final output
    in link section.  */
 
index 77020bc..2618b22 100644 (file)
@@ -80,7 +80,8 @@ Boston, MA 02111-1307, USA.  */
 
 enum processor_type
  {PROCESSOR_EV4,                       /* 2106[46]{a,} */
-  PROCESSOR_EV5};                      /* 21164{a,} */
+  PROCESSOR_EV5,                       /* 21164{a,pc,} */
+  PROCESSOR_EV6};                      /* 21264 */
 
 extern enum processor_type alpha_cpu;
 
@@ -168,14 +169,31 @@ extern enum alpha_fp_trap_mode alpha_fptm;
 #define MASK_FLOAT_VAX 512
 #define TARGET_FLOAT_VAX (target_flags & MASK_FLOAT_VAX)
 
-/* This means that the processor has byte and half word loads and stores.  */
+/* This means that the processor has byte and half word loads and stores
+   (the BWX extension).  */
 
-#define MASK_BYTE_OPS 1024
-#define TARGET_BYTE_OPS        (target_flags & MASK_BYTE_OPS)
+#define MASK_BWX 1024
+#define TARGET_BWX     (target_flags & MASK_BWX)
 
-/* This means that the processor is an EV5 or EV56.  This is defined only
-   in TARGET_CPU_DEFAULT.  */
-#define MASK_CPU_EV5 2048
+/* This means that the processor has the CIX extension.  */
+#define MASK_CIX 2048
+#define TARGET_CIX     (target_flags & MASK_CIX)
+
+/* This means that the processor has the MAX extension.  */
+#define MASK_MAX 4096
+#define TARGET_MAX     (target_flags & MASK_MAX)
+
+/* This means that the processor is an EV5, EV56, or PCA56.  This is defined
+   only in TARGET_CPU_DEFAULT.  */
+#define MASK_CPU_EV5 8192
+
+/* Likewise for EV6.  */
+#define MASK_CPU_EV6 16384
+
+/* This means we support the .arch directive in the assembler.  Only
+   defined in TARGET_CPU_DEFAULT.  */
+#define MASK_SUPPORT_ARCH 32768
+#define TARGET_SUPPORT_ARCH    (target_flags & MASK_SUPPORT_ARCH)
 
 /* Macro to define tables used to set the flags.
    This is a list in braces of pairs in braces,
@@ -196,8 +214,12 @@ extern enum alpha_fp_trap_mode alpha_fptm;
     {"build-constants", MASK_BUILD_CONSTANTS},  \
     {"float-vax", MASK_FLOAT_VAX},             \
     {"float-ieee", -MASK_FLOAT_VAX},           \
-    {"byte", MASK_BYTE_OPS},                   \
-    {"no-byte", -MASK_BYTE_OPS},               \
+    {"bwx", MASK_BWX},                         \
+    {"no-bwx", -MASK_BWX},                     \
+    {"cix", MASK_CIX},                         \
+    {"no-cix", -MASK_CIX},                     \
+    {"max", MASK_MAX},                         \
+    {"no-max", -MASK_MAX},                     \
     {"", TARGET_DEFAULT | TARGET_CPU_DEFAULT} }
 
 #define TARGET_DEFAULT MASK_FP|MASK_FPREGS
@@ -403,7 +425,7 @@ extern void override_options ();
 
 /* For atomic access to objects, must have at least 32-bit alignment
    unless the machine has byte operations.  */
-#define MINIMUM_ATOMIC_ALIGNMENT (TARGET_BYTE_OPS ? 8 : 32)
+#define MINIMUM_ATOMIC_ALIGNMENT (TARGET_BWX ? 8 : 32)
 
 /* Align all constants and variables to at least a word boundary so
    we can pick up pieces of them faster.  */
@@ -711,7 +733,7 @@ enum reg_class { NO_REGS, GENERAL_REGS, FLOAT_REGS, ALL_REGS,
   && (((CLASS) == FLOAT_REGS                                           \
        && ((MODE) == SImode || (MODE) == HImode || (MODE) == QImode))  \
       || (((MODE) == QImode || (MODE) == HImode)                       \
-         && ! TARGET_BYTE_OPS && unaligned_memory_operand (IN, MODE)))) \
+         && ! TARGET_BWX && unaligned_memory_operand (IN, MODE)))) \
  ? GENERAL_REGS                                                                \
  : ((CLASS) == FLOAT_REGS && GET_CODE (IN) == MEM                      \
     && GET_CODE (XEXP (IN, 0)) == AND) ? GENERAL_REGS                  \
@@ -727,7 +749,7 @@ enum reg_class { NO_REGS, GENERAL_REGS, FLOAT_REGS, ALL_REGS,
        && (GET_CODE (SUBREG_REG (OUT)) == MEM                          \
           || (GET_CODE (SUBREG_REG (OUT)) == REG                       \
               && REGNO (SUBREG_REG (OUT)) >= FIRST_PSEUDO_REGISTER)))) \
-  && ((((MODE) == HImode || (MODE) == QImode) && ! TARGET_BYTE_OPS     \
+  && ((((MODE) == HImode || (MODE) == QImode) && ! TARGET_BWX          \
        || ((MODE) == SImode && (CLASS) == FLOAT_REGS))))               \
  ? GENERAL_REGS                                                                \
  : ((CLASS) == FLOAT_REGS && GET_CODE (OUT) == MEM                     \
@@ -738,9 +760,10 @@ enum reg_class { NO_REGS, GENERAL_REGS, FLOAT_REGS, ALL_REGS,
  : NO_REGS)
 
 /* If we are copying between general and FP registers, we need a memory
-   location.  */
+   location unless the CIX extension is available.  */
 
-#define SECONDARY_MEMORY_NEEDED(CLASS1,CLASS2,MODE) ((CLASS1) != (CLASS2))
+#define SECONDARY_MEMORY_NEEDED(CLASS1,CLASS2,MODE) \
+ (! TARGET_CIX && (CLASS1) != (CLASS2))
 
 /* Specify the mode to be used for memory when a secondary memory
    location is needed.  If MODE is floating-point, use it.  Otherwise,
@@ -890,7 +913,7 @@ enum reg_class { NO_REGS, GENERAL_REGS, FLOAT_REGS, ALL_REGS,
 
 #define FUNCTION_VALUE(VALTYPE, FUNC)  \
   gen_rtx (REG,                                                        \
-          (INTEGRAL_MODE_P (TYPE_MODE (VALTYPE))               \
+          (INTEGRAL_TYPE_P (VALTYPE)                           \
            && TYPE_PRECISION (VALTYPE) < BITS_PER_WORD)        \
           ? word_mode : TYPE_MODE (VALTYPE),                   \
           ((TARGET_FPREGS                                      \
@@ -1538,7 +1561,7 @@ extern void alpha_init_expanders ();
 
 /* Define the value returned by a floating-point comparison instruction.  */
 
-#define FLOAT_STORE_FLAG_VALUE 2.0
+#define FLOAT_STORE_FLAG_VALUE (TARGET_FLOAT_VAX ? 0.5 : 2.0)
 
 /* Canonicalize a comparison from one we don't have to one we do have.  */
 
@@ -1714,14 +1737,6 @@ extern void alpha_init_expanders ();
 \f
 /* Control the assembler format that we output.  */
 
-/* Emit the .arch pseudo op.  This is separated out, because versions of
-   OSF before 4.0 do not support it.  */
-
-#define ARCH_ASM_FILE_START(FILE)                              \
-  fprintf (FILE, "\t.arch %s\n",                               \
-          (TARGET_BYTE_OPS ? "ev56"                            \
-           : alpha_cpu == PROCESSOR_EV4 ? "ev4" : "ev5"));
-
 /* Output at beginning of assembler file.  */
 
 #define ASM_FILE_START(FILE)                                   \
@@ -1730,7 +1745,13 @@ extern void alpha_init_expanders ();
   fprintf (FILE, "\t.set noreorder\n");                                \
   fprintf (FILE, "\t.set volatile\n");                          \
   fprintf (FILE, "\t.set noat\n");                             \
-  ARCH_ASM_FILE_START (FILE);                                  \
+  if (TARGET_SUPPORT_ARCH)                                     \
+    fprintf (FILE, "\t.arch %s\n",                             \
+             alpha_cpu == PROCESSOR_EV6 ? "ev6"                        \
+            : (alpha_cpu == PROCESSOR_EV5                      \
+               ? (TARGET_MAX ? "pca56" : TARGET_BWX ? "ev56" : "ev5") \
+               : "ev4"));                                      \
+                                                               \
   ASM_OUTPUT_SOURCE_FILENAME (FILE, main_input_filename);      \
 }
 
@@ -2268,8 +2289,9 @@ do {                                                      \
    ??? Stricly speaking, we only need -g if the user specifies -g.  Passing
    it always means that we get slightly larger than necessary object files
    if the user does not specify -g.  If we don't pass -g, then mips-tfile
-   will need to be fixed to work in this case.  */
-#define ASM_SPEC "%{!mgas:-g} -nocpp %{pg}"
+   will need to be fixed to work in this case.  Pass -O0 since some
+   optimization are broken and don't help us anyway.  */
+#define ASM_SPEC "%{!mgas:-g} -nocpp %{pg} -O0"
 #endif
 
 /* Specify to run a post-processor, mips-tfile after the assembler
index 570ab91..c12acfb 100644 (file)
@@ -24,7 +24,7 @@
 ;; Processor type -- this attribute must exactly match the processor_type
 ;; enumeration in alpha.h.
 
-(define_attr "cpu" "ev4,ev5"
+(define_attr "cpu" "ev4,ev5,ev6"
   (const (symbol_ref "alpha_cpu")))
 
 ;; Define an insn type attribute.  This is used in function unit delay
   64 59)
 \f
 ;; EV5 scheduling.  EV5 can issue 4 insns per clock.
+;; We consider the EV6 and EV5 for now.
 
 ;; EV5 has two asymetric integer units.  Model this with ebox,e0,e1.
 ;; Everything uses ebox, and those that require particular pipes grab
 ;; those as well.
 
 (define_function_unit "ev5_ebox" 2 0
-  (and (eq_attr "cpu" "ev5")
+  (and (eq_attr "cpu" "ev5,ev6")
        (eq_attr "type" "iadd,ilog,icmp,st,shift,imull,imulq,imulh"))
   1 1)
 
 ;; Memory takes at least 2 clocks, and load cannot dual issue with stores.
 (define_function_unit "ev5_ebox" 2 0
-  (and (eq_attr "cpu" "ev5")
+  (and (eq_attr "cpu" "ev5,ev6")
        (eq_attr "type" "ld,ldsym"))
   2 1)
 
 (define_function_unit "ev5_e0" 1 0
-  (and (eq_attr "cpu" "ev5")
+  (and (eq_attr "cpu" "ev5,ev6")
        (eq_attr "type" "ld,ldsym"))
   0 1
   [(eq_attr "type" "st")])
 
 ;; Conditional moves always take 2 ticks.
 (define_function_unit "ev5_ebox" 2 0
-  (and (eq_attr "cpu" "ev5")
+  (and (eq_attr "cpu" "ev5,ev6")
        (eq_attr "type" "cmov"))
   2 1)
 
 ;; Stores, shifts, and multiplies can only issue to E0
 (define_function_unit "ev5_e0" 1 0
-  (and (eq_attr "cpu" "ev5")
+  (and (eq_attr "cpu" "ev5,ev6")
        (eq_attr "type" "st"))
   1 1)
 
 ;; But shifts and multiplies don't conflict with loads.
 (define_function_unit "ev5_e0" 1 0
-  (and (eq_attr "cpu" "ev5")
+  (and (eq_attr "cpu" "ev5,ev6")
        (eq_attr "type" "shift,imull,imulq,imulh"))
   1 1
   [(eq_attr "type" "st,shift,imull,imulq,imulh")])
 
 ;; Branches can only issue to E1
 (define_function_unit "ev5_e1" 1 0
-  (and (eq_attr "cpu" "ev5")
+  (and (eq_attr "cpu" "ev5,ev6")
        (eq_attr "type" "ibr,jsr"))
   1 1)
 
 ;; Multiplies also use the integer multiplier.
 (define_function_unit "ev5_imult" 1 0
-  (and (eq_attr "cpu" "ev5")
+  (and (eq_attr "cpu" "ev5,ev6")
        (eq_attr "type" "imull"))
   8 4)
 
 (define_function_unit "ev5_imult" 1 0
-  (and (eq_attr "cpu" "ev5")
+  (and (eq_attr "cpu" "ev5,ev6")
        (eq_attr "type" "imulq"))
   12 8)
 
 (define_function_unit "ev5_imult" 1 0
-  (and (eq_attr "cpu" "ev5")
+  (and (eq_attr "cpu" "ev5,ev6")
        (eq_attr "type" "imulh"))
   14 8)
 
 ;; on either so we have to play the game again.
 
 (define_function_unit "ev5_fpu" 2 0
-  (and (eq_attr "cpu" "ev5")
+  (and (eq_attr "cpu" "ev5,ev6")
        (eq_attr "type" "fadd,fmul,fcpys,fbr,fdivs,fdivt"))
   4 1)
   
 ;; Multiplies (resp. adds) also use the fmul (resp. fadd) units.
 (define_function_unit "ev5_fm" 1 0
-  (and (eq_attr "cpu" "ev5")
+  (and (eq_attr "cpu" "ev5,ev6")
        (eq_attr "type" "fmul"))
   4 1)
 
 (define_function_unit "ev5_fa" 1 0
-  (and (eq_attr "cpu" "ev5")
+  (and (eq_attr "cpu" "ev5,ev6")
        (eq_attr "type" "fadd"))
   4 1)
 
 (define_function_unit "ev5_fa" 1 0
-  (and (eq_attr "cpu" "ev5")
+  (and (eq_attr "cpu" "ev5,ev6")
        (eq_attr "type" "fbr"))
   1 1)
 
 (define_function_unit "ev5_fa" 1 0
-  (and (eq_attr "cpu" "ev5")
+  (and (eq_attr "cpu" "ev5,ev6")
        (eq_attr "type" "fdivs"))
   15 1)
 
 (define_function_unit "ev5_fa" 1 0
-  (and (eq_attr "cpu" "ev5")
+  (and (eq_attr "cpu" "ev5,ev6")
        (eq_attr "type" "fdivt"))
   22 1)
 \f
 (define_insn ""
   [(set (match_operand:SI 0 "register_operand" "=r,r")
        (zero_extend:SI (match_operand:QI 1 "nonimmediate_operand" "r,m")))]
-  "TARGET_BYTE_OPS"
+  "TARGET_BWX"
   "@
    zapnot %1,1,%0
    ldbu %0,%1"
 (define_insn ""
   [(set (match_operand:SI 0 "register_operand" "=r")
        (zero_extend:SI (match_operand:QI 1 "register_operand" "r")))]
-  "! TARGET_BYTE_OPS"
+  "! TARGET_BWX"
   "zapnot %1,1,%0"
   [(set_attr "type" "shift")])
 
 (define_insn ""
   [(set (match_operand:DI 0 "register_operand" "=r,r")
        (zero_extend:DI (match_operand:QI 1 "nonimmediate_operand" "r,m")))]
-  "TARGET_BYTE_OPS"
+  "TARGET_BWX"
   "@
    zapnot %1,1,%0
    ldbu %0,%1"
 (define_insn ""
   [(set (match_operand:DI 0 "register_operand" "=r")
        (zero_extend:DI (match_operand:QI 1 "register_operand" "r")))]
-  "! TARGET_BYTE_OPS"
+  "! TARGET_BWX"
   "zapnot %1,1,%0"
   [(set_attr "type" "shift")])
   
 (define_insn ""
   [(set (match_operand:SI 0 "register_operand" "=r,r")
        (zero_extend:SI (match_operand:HI 1 "nonimmediate_operand" "r,m")))]
-  "TARGET_BYTE_OPS"
+  "TARGET_BWX"
   "@
    zapnot %1,3,%0
    ldwu %0,%1"
 (define_insn ""
   [(set (match_operand:SI 0 "register_operand" "=r")
        (zero_extend:SI (match_operand:HI 1 "register_operand" "r")))]
-  "! TARGET_BYTE_OPS"
+  "! TARGET_BWX"
   "zapnot %1,3,%0"
   [(set_attr "type" "shift")])
 
 (define_insn ""
   [(set (match_operand:DI 0 "register_operand" "=r,r")
        (zero_extend:DI (match_operand:HI 1 "nonimmediate_operand" "r,m")))]
-  "TARGET_BYTE_OPS"
+  "TARGET_BWX"
   "@
    zapnot %1,3,%0
    ldwu %0,%1"
   "eqv %r1,%2,%0"
   [(set_attr "type" "ilog")])
 \f
+;; Handle the FFS insn if we support CIX. 
+
+(define_expand "ffsdi2"
+  [(set (match_dup 2)
+       (unspec [(match_operand:DI 1 "register_operand" "")] 1))
+   (set (match_dup 3)
+       (plus:DI (match_dup 2) (const_int 1)))
+   (set (match_operand:DI 0 "register_operand" "")
+       (if_then_else:DI (eq (match_dup 1) (const_int 0))
+                        (const_int 0) (match_dup 3)))]
+  "TARGET_CIX"
+  "
+{
+  operands[2] = gen_reg_rtx (DImode);
+  operands[3] = gen_reg_rtx (DImode);
+}")
+
+(define_insn ""
+  [(set (match_operand:DI 0 "register_operand" "=r")
+       (unspec [(match_operand:DI 1 "register_operand" "r")] 1))]
+  "TARGET_CIX"
+  "cttz %1,%0"
+  [(set_attr "type" "shift")])
+\f
 ;; Next come the shifts and the various extract and insert operations.
 
 (define_insn "ashldi3"
   ""
   "
 {
-  if (TARGET_BYTE_OPS)
+  if (TARGET_BWX)
     {
       emit_insn (gen_extendqihi2x (operands[0],
                                   force_reg (QImode, operands[1])));
 (define_insn "extendqidi2x"
   [(set (match_operand:DI 0 "register_operand" "=r")
        (sign_extend:DI (match_operand:QI 1 "register_operand" "r")))]
-  "TARGET_BYTE_OPS"
+  "TARGET_BWX"
   "sextb %1,%0"
   [(set_attr "type" "shift")])
 
 (define_insn "extendhidi2x"
   [(set (match_operand:DI 0 "register_operand" "=r")
        (sign_extend:DI (match_operand:HI 1 "register_operand" "r")))]
-  "TARGET_BYTE_OPS"
+  "TARGET_BWX"
   "sextw %1,%0"
   [(set_attr "type" "shift")])
 
 (define_insn "extendqisi2x"
   [(set (match_operand:SI 0 "register_operand" "=r")
        (sign_extend:SI (match_operand:QI 1 "register_operand" "r")))]
-  "TARGET_BYTE_OPS"
+  "TARGET_BWX"
   "sextb %1,%0"
   [(set_attr "type" "shift")])
 
 (define_insn "extendhisi2x"
   [(set (match_operand:SI 0 "register_operand" "=r")
        (sign_extend:SI (match_operand:HI 1 "register_operand" "r")))]
-  "TARGET_BYTE_OPS"
+  "TARGET_BWX"
   "sextw %1,%0"
   [(set_attr "type" "shift")])
 
 (define_insn "extendqihi2x"
   [(set (match_operand:HI 0 "register_operand" "=r")
        (sign_extend:HI (match_operand:QI 1 "register_operand" "r")))]
-  "TARGET_BYTE_OPS"
+  "TARGET_BWX"
   "sextb %1,%0"
   [(set_attr "type" "shift")])
 
   ""
   "
 {
-  if (TARGET_BYTE_OPS)
+  if (TARGET_BWX)
     {
       emit_insn (gen_extendqisi2x (operands[0],
                                   force_reg (QImode, operands[1])));
   "
 { extern rtx get_unaligned_address ();
 
-  if (TARGET_BYTE_OPS)
+  if (TARGET_BWX)
     {
       emit_insn (gen_extendqidi2x (operands[0],
                                   force_reg (QImode, operands[1])));
   ""
   "
 {
-  if (TARGET_BYTE_OPS)
+  if (TARGET_BWX)
     {
       emit_insn (gen_extendhisi2x (operands[0],
                                   force_reg (HImode, operands[1])));
   "
 { extern rtx get_unaligned_address ();
 
-  if (TARGET_BYTE_OPS)
+  if (TARGET_BWX)
     {
       emit_insn (gen_extendhidi2x (operands[0],
                                   force_reg (HImode, operands[1])));
   "sub%-%)%& %R1,%R2,%0"
   [(set_attr "type" "fadd")
    (set_attr "trap" "yes")])
+
+(define_insn "sqrtsf2"
+  [(set (match_operand:SF 0 "register_operand" "=f")
+       (sqrt:SF (match_operand:SF 1 "reg_or_fp0_operand" "fG")))]
+  "TARGET_FP && TARGET_CIX"
+  "sqrt%, %1,%0"
+  [(set_attr "type" "fdivs")
+   (set_attr "trap" "yes")])
+
+(define_insn "sqrtdf2"
+  [(set (match_operand:DF 0 "register_operand" "=f")
+       (sqrt:DF (match_operand:DF 1 "reg_or_fp0_operand" "fG")))]
+  "TARGET_FP && TARGET_CIX"
+  "sqrt%- %1,%0"
+  [(set_attr "type" "fdivt")
+   (set_attr "trap" "yes")])
+
+(define_insn ""
+  [(set (match_operand:DF 0 "register_operand" "=f")
+       (sqrt:DF (float_extend:DF
+                 (match_operand:SF 1 "reg_or_fp0_operand" "fG"))))]
+  "TARGET_FP && TARGET_CIX&& alpha_tp != ALPHA_TP_INSN"
+  "sqrt%- %1,%0"
+  [(set_attr "type" "fdivt")
+   (set_attr "trap" "yes")])
 \f
 ;; Next are all the integer comparisons, and conditional moves and branches
 ;; and some of the related define_expand's and define_split's.
                                       (match_dup 0) (match_dup 1)))]
   "")
 
+(define_insn "sminqi3"
+  [(set (match_operand:QI 0 "register_operand" "=r")
+       (smin:SI (match_operand:QI 1 "reg_or_0_operand" "%rJ")
+                (match_operand:QI 2 "reg_or_8bit_operand" "rI")))]
+  "TARGET_MAX"
+  "minsb8 %r1,%2,%0"
+  [(set_attr "type" "shift")])
+
+(define_insn "uminqi3"
+  [(set (match_operand:QI 0 "register_operand" "=r")
+       (umin:SI (match_operand:QI 1 "reg_or_0_operand" "%rJ")
+                (match_operand:QI 2 "reg_or_8bit_operand" "rI")))]
+  "TARGET_MAX"
+  "minub8 %r1,%2,%0"
+  [(set_attr "type" "shift")])
+
+(define_insn "smaxqi3"
+  [(set (match_operand:QI 0 "register_operand" "=r")
+       (smax:SI (match_operand:QI 1 "reg_or_0_operand" "%rJ")
+                (match_operand:QI 2 "reg_or_8bit_operand" "rI")))]
+  "TARGET_MAX"
+  "maxsb8 %r1,%2,%0"
+  [(set_attr "type" "shift")])
+
+(define_insn "umaxqi3"
+  [(set (match_operand:QI 0 "register_operand" "=r")
+       (umax:SI (match_operand:QI 1 "reg_or_0_operand" "%rJ")
+                (match_operand:QI 2 "reg_or_8bit_operand" "rI")))]
+  "TARGET_MAX"
+  "maxub8 %r1,%2,%0"
+  [(set_attr "type" "shift")])
+
+(define_insn "sminhi3"
+  [(set (match_operand:HI 0 "register_operand" "=r")
+       (smin:SI (match_operand:HI 1 "reg_or_0_operand" "%rJ")
+                (match_operand:HI 2 "reg_or_8bit_operand" "rI")))]
+  "TARGET_MAX"
+  "minsw4 %r1,%2,%0"
+  [(set_attr "type" "shift")])
+
+(define_insn "uminhi3"
+  [(set (match_operand:HI 0 "register_operand" "=r")
+       (umin:SI (match_operand:HI 1 "reg_or_0_operand" "%rJ")
+                (match_operand:HI 2 "reg_or_8bit_operand" "rI")))]
+  "TARGET_MAX"
+  "minuw4 %r1,%2,%0"
+  [(set_attr "type" "shift")])
+
+(define_insn "smaxhi3"
+  [(set (match_operand:HI 0 "register_operand" "=r")
+       (smax:SI (match_operand:HI 1 "reg_or_0_operand" "%rJ")
+                (match_operand:HI 2 "reg_or_8bit_operand" "rI")))]
+  "TARGET_MAX"
+  "maxsw4 %r1,%2,%0"
+  [(set_attr "type" "shift")])
+
+(define_insn "umaxhi3"
+  [(set (match_operand:HI 0 "register_operand" "=r")
+       (umax:SI (match_operand:HI 1 "reg_or_0_operand" "%rJ")
+                (match_operand:HI 2 "reg_or_8bit_operand" "rI")))]
+  "TARGET_MAX"
+  "maxuw4 %r1,%2,%0"
+  [(set_attr "type" "shift")])
+
 (define_expand "smaxdi3"
   [(set (match_dup 3)
        (le:DI (match_operand:DI 1 "reg_or_0_operand" "")
 (define_insn ""
   [(set (match_operand:SI 0 "nonimmediate_operand" "=r,r,r,r,r,r,m,f,f,f,m")
        (match_operand:SI 1 "input_operand" "r,J,I,K,L,m,rJ,f,J,m,fG"))]
-  "! TARGET_WINDOWS_NT && ! TARGET_OPEN_VMS
+  "! TARGET_WINDOWS_NT && ! TARGET_OPEN_VMS && ! TARGET_CIX
    && (register_operand (operands[0], SImode)
        || reg_or_0_operand (operands[1], SImode))"
   "@
    stl %r1,%0
    cpys %1,%1,%0
    cpys $f31,$f31,%0
-   lds %0,%1
-   sts %R1,%0"
+   ld%, %0,%1
+   st%, %R1,%0"
   [(set_attr "type" "ilog,ilog,ilog,iadd,iadd,ld,st,fcpys,fcpys,ld,st")])
 
 (define_insn ""
+  [(set (match_operand:SI 0 "nonimmediate_operand" "=r,r,r,r,r,r,m,f,f,f,m,r,f")
+       (match_operand:SI 1 "input_operand" "r,J,I,K,L,m,rJ,f,J,m,fG,f,r"))]
+  "! TARGET_WINDOWS_NT && ! TARGET_OPEN_VMS && TARGET_CIX
+   && (register_operand (operands[0], SImode)
+       || reg_or_0_operand (operands[1], SImode))"
+  "@
+   bis %1,%1,%0
+   bis $31,$31,%0
+   bis $31,%1,%0
+   lda %0,%1
+   ldah %0,%h1
+   ldl %0,%1
+   stl %r1,%0
+   cpys %1,%1,%0
+   cpys $f31,$f31,%0
+   ld%, %0,%1
+   st%, %R1,%0
+   ftois %1,%0
+   itof%, %1,%0"
+  [(set_attr "type" "ilog,ilog,ilog,iadd,iadd,ld,st,fcpys,fcpys,ld,st,ld,st")])
+
+(define_insn ""
   [(set (match_operand:SI 0 "nonimmediate_operand" "=r,r,r,r,r,r,r,m,f,f,f,m")
        (match_operand:SI 1 "input_operand" "r,J,I,K,L,s,m,rJ,f,J,m,fG"))]
   "(TARGET_WINDOWS_NT || TARGET_OPEN_VMS)
-       && (register_operand (operands[0], SImode)
-                        || reg_or_0_operand (operands[1], SImode))"
+    && (register_operand (operands[0], SImode)
+        || reg_or_0_operand (operands[1], SImode))"
   "@
    bis %1,%1,%0
    bis $31,$31,%0
    stl %r1,%0
    cpys %1,%1,%0
    cpys $f31,$f31,%0
-   lds %0,%1
-   sts %R1,%0"
+   ld%, %0,%1
+   st%, %R1,%0"
   [(set_attr "type" "ilog,ilog,ilog,iadd,iadd,ldsym,ld,st,fcpys,fcpys,ld,st")])
 
 (define_insn ""
   [(set (match_operand:HI 0 "nonimmediate_operand" "=r,r,r,r,f,f")
        (match_operand:HI 1 "input_operand" "r,J,I,n,f,J"))]
-  "! TARGET_BYTE_OPS
+  "! TARGET_BWX
    && (register_operand (operands[0], HImode)
        || register_operand (operands[1], HImode))"
   "@
 (define_insn ""
   [(set (match_operand:HI 0 "nonimmediate_operand" "=r,r,r,r,r,m,f,f")
        (match_operand:HI 1 "input_operand" "r,J,I,n,m,rJ,f,J"))]
-  "TARGET_BYTE_OPS
+  "TARGET_BWX
    && (register_operand (operands[0], HImode)
        || reg_or_0_operand (operands[1], HImode))"
   "@
 (define_insn ""
   [(set (match_operand:QI 0 "nonimmediate_operand" "=r,r,r,r,f,f")
        (match_operand:QI 1 "input_operand" "r,J,I,n,f,J"))]
-  "! TARGET_BYTE_OPS
+  "! TARGET_BWX
    && (register_operand (operands[0], QImode)
        || register_operand (operands[1], QImode))"
   "@
 (define_insn ""
   [(set (match_operand:QI 0 "nonimmediate_operand" "=r,r,r,r,r,m,f,f")
        (match_operand:QI 1 "input_operand" "r,J,I,n,m,rJ,f,J"))]
-  "TARGET_BYTE_OPS
+  "TARGET_BWX
    && (register_operand (operands[0], QImode)
        || reg_or_0_operand (operands[1], QImode))"
   "@
 (define_insn ""
   [(set (match_operand:DI 0 "general_operand" "=r,r,r,r,r,r,r,m,f,f,f,Q")
        (match_operand:DI 1 "input_operand" "r,J,I,K,L,s,m,rJ,f,J,Q,fG"))]
-  "register_operand (operands[0], DImode)
-   || reg_or_0_operand (operands[1], DImode)"
+  "! TARGET_CIX
+   && (register_operand (operands[0], DImode)
+       || reg_or_0_operand (operands[1], DImode))"
   "@
    bis %1,%1,%0
    bis $31,$31,%0
    stt %R1,%0"
   [(set_attr "type" "ilog,ilog,ilog,iadd,iadd,ldsym,ld,st,fcpys,fcpys,ld,st")])
 
+(define_insn ""
+  [(set (match_operand:DI 0 "general_operand" "=r,r,r,r,r,r,r,m,f,f,f,Q,r,f")
+       (match_operand:DI 1 "input_operand" "r,J,I,K,L,s,m,rJ,f,J,Q,fG,f,r"))]
+  "TARGET_CIX
+   && (register_operand (operands[0], DImode)
+       || reg_or_0_operand (operands[1], DImode))"
+  "@
+   bis %1,%1,%0
+   bis $31,$31,%0
+   bis $31,%1,%0
+   lda %0,%1
+   ldah %0,%h1
+   lda %0,%1
+   ldq%A1 %0,%1
+   stq%A0 %r1,%0
+   cpys %1,%1,%0
+   cpys $f31,$f31,%0
+   ldt %0,%1
+   stt %R1,%0
+   ftoit %1,%0
+   itoft %1,%0"
+  [(set_attr "type" "ilog,ilog,ilog,iadd,iadd,ldsym,ld,st,fcpys,fcpys,ld,st,ld,st")])
+
 ;; We do three major things here: handle mem->mem, put 64-bit constants in
 ;; memory, and construct long 32-bit constants.
 
   "
 { extern rtx get_unaligned_address ();
 
-  if (TARGET_BYTE_OPS)
+  if (TARGET_BWX)
     {
       if (GET_CODE (operands[0]) == MEM
          && ! reg_or_0_operand (operands[1], QImode))
   "
 { extern rtx get_unaligned_address ();
 
-  if (TARGET_BYTE_OPS)
+  if (TARGET_BWX)
     {
       if (GET_CODE (operands[0]) == MEM
          && ! reg_or_0_operand (operands[1], HImode))
   [(parallel [(match_operand:QI 0 "register_operand" "=r")
              (match_operand:QI 1 "unaligned_memory_operand" "m")
              (match_operand:TI 2 "register_operand" "=&r")])]
-  "! TARGET_BYTE_OPS"
+  "! TARGET_BWX"
   "
 { extern rtx get_unaligned_address ();
   rtx addr, scratch, seq, tmp;
   [(parallel [(match_operand:HI 0 "register_operand" "=r")
              (match_operand:HI 1 "unaligned_memory_operand" "m")
              (match_operand:TI 2 "register_operand" "=&r")])]
-  "! TARGET_BYTE_OPS"
+  "! TARGET_BWX"
   "
 { extern rtx get_unaligned_address ();
   rtx scratch, seq, tmp, addr;
   [(parallel [(match_operand:QI 0 "any_memory_operand" "=m")
              (match_operand:QI 1 "register_operand" "r")
              (match_operand:TI 2 "register_operand" "=&r")])]
-  "! TARGET_BYTE_OPS"
+  "! TARGET_BWX"
   "
 { extern rtx get_unaligned_address ();
 
   [(parallel [(match_operand:HI 0 "any_memory_operand" "=m")
              (match_operand:HI 1 "register_operand" "r")
              (match_operand:TI 2 "register_operand" "=&r")])]
-  "! TARGET_BYTE_OPS"
+  "! TARGET_BWX"
   "
 { extern rtx get_unaligned_address ();
 
 (define_expand "allocate_stack"
   [(set (reg:DI 30)
        (plus:DI (reg:DI 30)
-                (match_operand:DI 0 "reg_or_cint_operand" "")))]
+                (match_operand:DI 1 "reg_or_cint_operand" "")))
+   (set (match_operand:DI 0 "register_operand" "=r")
+       (match_dup 2))]
   ""
   "
 {
-  if (GET_CODE (operands[0]) == CONST_INT
-          && INTVAL (operands[0]) < 32768)
+  if (GET_CODE (operands[1]) == CONST_INT
+      && INTVAL (operands[1]) < 32768)
     {
-      if (INTVAL (operands[0]) >= 4096)
+      if (INTVAL (operands[1]) >= 4096)
        {
          /* We do this the same way as in the prologue and generate explicit
             probes.  Then we update the stack by the constant.  */
          int probed = 4096;
 
          emit_insn (gen_probe_stack (GEN_INT (- probed)));
-         while (probed + 8192 < INTVAL (operands[0]))
+         while (probed + 8192 < INTVAL (operands[1]))
            emit_insn (gen_probe_stack (GEN_INT (- (probed += 8192))));
 
-         if (probed + 4096 < INTVAL (operands[0]))
-           emit_insn (gen_probe_stack (GEN_INT (- INTVAL(operands[0]))));
+         if (probed + 4096 < INTVAL (operands[1]))
+           emit_insn (gen_probe_stack (GEN_INT (- INTVAL(operands[1]))));
        }
 
-      operands[0] = GEN_INT (- INTVAL (operands[0]));
+      operands[1] = GEN_INT (- INTVAL (operands[1]));
+      operands[2] = virtual_stack_dynamic_rtx;
     }
   else
     {
       rtx memref;
 
       emit_insn (gen_subdi3 (want, stack_pointer_rtx,
-                            force_reg (Pmode, operands[0])));
+                            force_reg (Pmode, operands[1])));
       emit_insn (gen_adddi3 (tmp, stack_pointer_rtx, GEN_INT (-4096)));
 
-      if (GET_CODE (operands[0]) != CONST_INT)
+      if (GET_CODE (operands[1]) != CONST_INT)
        {
          out_label = gen_label_rtx ();
          emit_insn (gen_cmpdi (want, tmp));
       emit_insn (gen_adddi3 (tmp, tmp, GEN_INT(-8192)));
       emit_insn (gen_cmpdi (tmp, want));
       emit_jump_insn (gen_bgtu (loop_label));
+      if (obey_regdecls)
+       gen_rtx (USE, VOIDmode, tmp);
+
       memref = gen_rtx (MEM, DImode, want);
       MEM_VOLATILE_P (memref) = 1;
       emit_move_insn (memref, const0_rtx);
        emit_label (out_label);
 
       emit_move_insn (stack_pointer_rtx, want);
-
+      emit_move_insn (operands[0], virtual_stack_dynamic_rtx);
       DONE;
     }
 }")
index 6a2a7ae..9a8cc36 100644 (file)
@@ -1,6 +1,6 @@
 /* Definitions of target machine for GNU compiler, for Alpha Linux,
    using ECOFF.
-   Copyright (C) 1996 Free Software Foundation, Inc.
+   Copyright (C) 1996, 1997 Free Software Foundation, Inc.
    Contributed by Bob Manson.
 
 This file is part of GNU CC.
@@ -65,7 +65,7 @@ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
 /* Show that we need a GP when profiling.  */
 #define TARGET_PROFILING_NEEDS_GP
 
-/* We need that too. */
+/* We support #pragma.  */
 #define HANDLE_SYSV_PRAGMA
 
 #undef ASM_FINAL_SPEC
index 1eba90a..87e2111 100644 (file)
@@ -31,7 +31,3 @@ Boston, MA 02111-1307, USA.  */
 #define WCHAR_TYPE "short unsigned int"
 #undef WCHAR_TYPE_SIZE
 #define WCHAR_TYPE_SIZE 16
-
-/* The .arch pseudo op is not supported.  */
-#undef ARCH_ASM_FILE_START
-#define ARCH_ASM_FILE_START(FILE)
index f62c848..e6c19e5 100644 (file)
@@ -21,8 +21,3 @@ Boston, MA 02111-1307, USA.  */
 /* In OSF 2 or 3, linking with -lprof1 doesn't require -lpdf.  */
 
 #undef LIB_SPEC
-
-/* The .arch pseudo op is not supported.  */
-#undef ARCH_ASM_FILE_START
-#define ARCH_ASM_FILE_START(FILE)
-#define LIB_SPEC "%{p:-lprof1} %{pg:-lprof1} %{a:-lprof2} -lc"
index 857accd..241ef0b 100644 (file)
@@ -127,19 +127,98 @@ Boston, MA 02111-1307, USA.  */
   if ((TO) == STACK_POINTER_REGNUM)                                    \
     (OFFSET) += ALPHA_ROUND (current_function_outgoing_args_size);     \
 }
+\f
+/* Define a data type for recording info about an argument list
+   during the scan of that argument list.  This data type should
+   hold all necessary information about the function itself
+   and about the args processed so far, enough to enable macros
+   such as FUNCTION_ARG to determine where the next arg should go.
+
+   On Alpha/VMS, this is a structure that contains the number of
+   arguments and, for each argument, the datatype of that argument.
+
+   The number of arguments is a number of words of arguments scanned so far.
+   Thus 6 or more means all following args should go on the stack.  */
+
+enum avms_arg_type {I64, FF, FD, FG, FS, FT};
+typedef struct {char num_args; enum avms_arg_type atypes[6];} avms_arg_info;
+
+#undef CUMULATIVE_ARGS
+#define CUMULATIVE_ARGS avms_arg_info
+
+/* Initialize a variable CUM of type CUMULATIVE_ARGS
+   for a call to a function whose data type is FNTYPE.
+   For a library call, FNTYPE is 0.  */
+
+#undef INIT_CUMULATIVE_ARGS
+#define INIT_CUMULATIVE_ARGS(CUM,FNTYPE,LIBNAME,INDIRECT) \
+  (CUM).num_args = 0;                                          \
+  (CUM).atypes[0] = (CUM).atypes[1] = (CUM).atypes[2] = I64;   \
+  (CUM).atypes[3] = (CUM).atypes[4] = (CUM).atypes[5] = I64;
+
+/* Update the data in CUM to advance over an argument
+   of mode MODE and data type TYPE.
+   (TYPE is null for libcalls where that information may not be available.)  */
+
+extern enum avms_arg_type alpha_arg_type ();
+
+/* Determine where to put an argument to a function.
+   Value is zero to push the argument on the stack,
+   or a hard register in which to store the argument.
+
+   MODE is the argument's machine mode (or VOIDmode for no more args).
+   TYPE is the data type of the argument (as a tree).
+    This is null for libcalls where that information may
+    not be available.
+   CUM is a variable of type CUMULATIVE_ARGS which gives info about
+    the preceding args and about the function being called.
+   NAMED is nonzero if this argument is a named parameter
+    (otherwise it is an extra parameter matching an ellipsis).
+
+   On Alpha the first 6 words of args are normally in registers
+   and the rest are pushed.  */
+
+extern struct rtx_def *alpha_arg_info_reg_val ();
+#undef FUNCTION_ARG
+#define FUNCTION_ARG(CUM, MODE, TYPE, NAMED)   \
+((MODE) == VOIDmode ? alpha_arg_info_reg_val (CUM)             \
+ : ((CUM.num_args) < 6 && ! MUST_PASS_IN_STACK (MODE, TYPE)    \
+    ? gen_rtx(REG, (MODE),                                     \
+             ((CUM).num_args + 16                              \
+              + ((TARGET_FPREGS                                \
+                  && (GET_MODE_CLASS (MODE) == MODE_COMPLEX_FLOAT \
+                      || GET_MODE_CLASS (MODE) == MODE_FLOAT)) \
+                 * 32)))                       \
+    : 0))
 
 #undef FUNCTION_ARG_ADVANCE
 #define FUNCTION_ARG_ADVANCE(CUM, MODE, TYPE, NAMED)                   \
   if (MUST_PASS_IN_STACK (MODE, TYPE))                                 \
-    (CUM) = (CUM & ~0xff) + 6;                                         \
+    (CUM).num_args += 6;                                               \
   else                                                                 \
-    (CUM) += ALPHA_ARG_SIZE (MODE, TYPE, NAMED)
+    {                                                                  \
+      if ((CUM).num_args < 6)                                          \
+        (CUM).atypes[(CUM).num_args] = alpha_arg_type (MODE);          \
+                                                                       \
+     (CUM).num_args += ALPHA_ARG_SIZE (MODE, TYPE, NAMED);             \
+    }
+
+/* For an arg passed partly in registers and partly in memory,
+   this is the number of registers used.
+   For args passed entirely in registers or entirely in memory, zero.  */
 
 #undef FUNCTION_ARG_PARTIAL_NREGS
 #define FUNCTION_ARG_PARTIAL_NREGS(CUM, MODE, TYPE, NAMED)             \
-((CUM & 0xff) < 6 && 6 < (CUM & 0xff)                                  \
+((CUM).num_args < 6 && 6 < (CUM).num_args                              \
    + ALPHA_ARG_SIZE (MODE, TYPE, NAMED)                                        \
- ? 6 - (CUM & 0xff) : 0)
+ ? 6 - (CUM).num_args : 0)
+
+#undef ENCODE_SECTION_INFO
+#define ENCODE_SECTION_INFO(DECL)                              \
+do {                                                           \
+  if (TREE_CODE (DECL) == FUNCTION_DECL && ! TREE_PUBLIC (DECL)) \
+    SYMBOL_REF_FLAG (XEXP (DECL_RTL (DECL), 0)) = 1;           \
+} while (0)
 
 /* Perform any needed actions needed for a function that is receiving a
    variable number of arguments. 
@@ -164,7 +243,7 @@ Boston, MA 02111-1307, USA.  */
 
 #undef SETUP_INCOMING_VARARGS
 #define SETUP_INCOMING_VARARGS(CUM,MODE,TYPE,PRETEND_SIZE,NO_RTL)      \
-{ if ((CUM) < 6)                                       \
+{ if ((CUM).num_args < 6)                              \
     {                                                  \
       if (! (NO_RTL))                                  \
        {                                               \
@@ -206,11 +285,11 @@ Boston, MA 02111-1307, USA.  */
   }
 
 #define LINK_SECTION_ASM_OP ".link"
-
 #define READONLY_SECTION_ASM_OP ".rdata"
+#define LITERALS_SECTION_ASM_OP ".literals"
 
 #undef EXTRA_SECTIONS
-#define EXTRA_SECTIONS in_link, in_rdata
+#define EXTRA_SECTIONS in_link, in_rdata, in_literals
 
 #undef EXTRA_SECTION_FUNCTIONS
 #define EXTRA_SECTION_FUNCTIONS                                        \
@@ -231,6 +310,15 @@ link_section ()                                                    \
       fprintf (asm_out_file, "%s\n", LINK_SECTION_ASM_OP);     \
       in_section = in_link;                                    \
     }                                                          \
+}                                                               \
+void                                                           \
+literals_section ()                                            \
+{                                                              \
+  if (in_section != in_literals)                               \
+    {                                                          \
+      fprintf (asm_out_file, "%s\n", LITERALS_SECTION_ASM_OP);         \
+      in_section = in_literals;                                        \
+    }                                                          \
 }
 
 #undef ASM_OUTPUT_ADDR_DIFF_ELT
@@ -245,10 +333,6 @@ link_section ()                                                    \
 
 #define ASM_FILE_END(FILE) alpha_write_linkage (FILE);
 
-#undef FUNCTION_ARG
-void *function_arg ();
-#define FUNCTION_ARG(CUM, MODE, TYPE, NAMED)   function_arg (&CUM, MODE, TYPE, NAMED)
-
 #undef CASE_VECTOR_MODE
 #define CASE_VECTOR_MODE DImode
 #undef CASE_VECTOR_PC_RELATIVE
@@ -273,46 +357,101 @@ void *function_arg ();
 {                                              \
   fprintf (FILE, "\t.quad 0\n");               \
   fprintf (FILE, "\t.linkage __tramp\n");      \
+  fprintf (FILE, "\t.quad 0\n");               \
 }
 
 /* Length in units of the trampoline for entering a nested function.  */
 
 #undef TRAMPOLINE_SIZE
-#define TRAMPOLINE_SIZE    24
+#define TRAMPOLINE_SIZE    32
 
 /* Emit RTL insns to initialize the variable parts of a trampoline.
    FNADDR is an RTX for the address of the function's pure code.
    CXT is an RTX for the static chain value for the function.  */
 
 #undef INITIALIZE_TRAMPOLINE
-#define INITIALIZE_TRAMPOLINE(TRAMP, FNADDR, CXT)                      \
-{                                                                      \
-  emit_move_insn (gen_rtx (MEM, Pmode, (TRAMP)), (FNADDR));            \
-  emit_move_insn (gen_rtx (MEM, Pmode,                                 \
-                          memory_address (Pmode,                       \
+#define INITIALIZE_TRAMPOLINE(TRAMP, FNADDR, CXT)                        \
+{                                                                        \
+  emit_move_insn (gen_rtx (MEM, Pmode,                                    \
+                          memory_address (Pmode,                         \
                                           plus_constant ((TRAMP), 16))), \
-                 (CXT));                                               \
+                 (FNADDR));                                              \
+  emit_move_insn (gen_rtx (MEM, Pmode,                                   \
+                          memory_address (Pmode,                         \
+                                          plus_constant ((TRAMP), 24))), \
+                 (CXT));                                                 \
 }
 
 #undef TRANSFER_FROM_TRAMPOLINE
 
+#define VALID_MACHINE_DECL_ATTRIBUTE(DECL, ATTRIBUTES, NAME, ARGS) \
+  (vms_valid_decl_attribute_p (DECL, ATTRIBUTES, NAME, ARGS))
+extern int vms_valid_decl_attribute_p ();
+
 #undef SDB_DEBUGGING_INFO
 #undef MIPS_DEBUGGING_INFO
-
-#ifndef DBX_DEBUGGING_INFO
-#define DBX_DEBUGGING_INFO
-#endif
+#undef DBX_DEBUGGING_INFO
 
 #define DWARF2_DEBUGGING_INFO
 
-#ifdef PREFERRED_DEBUGGING_TYPE
+/* This is how to output an assembler line
+   that says to advance the location counter
+   to a multiple of 2**LOG bytes.  */
+
+#undef ASM_OUTPUT_ALIGN
+#define ASM_OUTPUT_ALIGN(FILE,LOG)     \
+    fprintf (FILE, "\t.align %d\n", LOG);
+
+#define UNALIGNED_SHORT_ASM_OP ".word"
+#define UNALIGNED_INT_ASM_OP   ".long"
+#define UNALIGNED_DOUBLE_INT_ASM_OP    ".quad"
+
+#undef ASM_OUTPUT_ALIGNED_COMMON
+#define ASM_OUTPUT_ALIGNED_COMMON(FILE, NAME, SIZE, ALIGN)             \
+do {                                                                   \
+  fprintf ((FILE), "\t.comm\t");                                       \
+  assemble_name ((FILE), (NAME));                                      \
+  fprintf ((FILE), ",%u,%u\n", (SIZE), (ALIGN) / BITS_PER_UNIT);       \
+} while (0)
+
+#define ASM_OUTPUT_SECTION(FILE,SECTION)                       \
+   (strcmp (SECTION, ".text") == 0)                            \
+     ? text_section ()                                         \
+     : named_section (NULL_TREE, SECTION, 0),                  \
+       ASM_OUTPUT_ALIGN (FILE, 0)                              \
+
+#define ASM_OUTPUT_SECTION_NAME(FILE,DECL,NAME,RELOC)          \
+  do                                                           \
+    {                                                          \
+      char *flags;                                             \
+      int ovr = 0;                                             \
+      if (DECL && DECL_MACHINE_ATTRIBUTES (DECL)               \
+         && lookup_attribute                                   \
+             ("overlaid", DECL_MACHINE_ATTRIBUTES (DECL)))     \
+       flags = ",OVR", ovr = 1;                                \
+      else if (strncmp (NAME,".debug", 6) == 0)                        \
+       flags = ",NOWRT";                                       \
+      else                                                     \
+       flags = "";                                             \
+      fputc ('\n', (FILE));                                    \
+      fprintf (FILE, ".section\t%s%s\n", NAME, flags);         \
+      if (ovr)                                                 \
+        (NAME) = "";                                           \
+    } while (0)
+
+#define ASM_OUTPUT_DEF(FILE,LABEL1,LABEL2)                             \
+  do { literals_section();                                             \
+       fprintf ((FILE), "\t");                                         \
+       assemble_name (FILE, LABEL1);                                   \
+       fprintf (FILE, " = ");                                          \
+       assemble_name (FILE, LABEL2);                                   \
+       fprintf (FILE, "\n");        &