diff options
author | Jeff Law <law@gcc.gnu.org> | 1998-06-29 15:40:49 -0600 |
---|---|---|
committer | Jeff Law <law@gcc.gnu.org> | 1998-06-29 15:40:49 -0600 |
commit | 9ec36da574f8272705a3ead59bbd289f23793429 (patch) | |
tree | 1ec056a51ca5f7af70d48889aab8bbf9c1f9d9aa | |
parent | ad2c71b764c066471608c85695392c7fb49c7bc7 (diff) | |
download | gcc-9ec36da574f8272705a3ead59bbd289f23793429.zip gcc-9ec36da574f8272705a3ead59bbd289f23793429.tar.gz gcc-9ec36da574f8272705a3ead59bbd289f23793429.tar.bz2 |
* Merge from gcc2 June 9, 1998 snapshot. See ChangeLog.13 for
details.
From-SVN: r20808
69 files changed, 2498 insertions, 486 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 354de5a..3e71a3b 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,8 @@ Mon Jun 29 22:12:06 1998 Jeffrey A Law (law@cygnus.com) + * Merge from gcc2 June 9, 1998 snapshot. See ChangeLog.13 for + details. + * pa.c, pa.h, pa.md: Convert to gen_rtx_FOO. Mon Jun 29 20:12:41 1998 Kaveh R. Ghazi <ghazi@caip.rutgers.edu> diff --git a/gcc/ChangeLog.13 b/gcc/ChangeLog.13 new file mode 100644 index 0000000..5a9c6cf --- /dev/null +++ b/gcc/ChangeLog.13 @@ -0,0 +1,1503 @@ +Tue Jun 9 07:24:01 1998 Richard Kenner <kenner@vlsi1.ultra.nyu.edu> + + * regmove.c ({next,prev}_insn_for_regmove): Properly handle end of + function. + +Mon Jun 8 15:26:49 1998 Juha Sarlin <juha@c3l.tyreso.se> + + * h8300.c (get_shift_alg): Add special cases for shifts of 8 and 24. + +Mon Jun 8 14:40:02 1998 John Wehle (john@feith.com) + + * i386.md (movsf_push, movsf_mem): Remove. + (movsf_push): Rename from movsf_push_nomove and move in front of + movsf; allow memory operands during and after reload. + (movsf_push_memory): New pattern. + (movsf): Don't bother checking for push_operand. If TARGET_MOVE and + both operands refer to memory then force operand[1] into a register. + (movsf_normal): Change to unnamed pattern. + Likewise for movdf, movxf, and friends. + +Mon Jun 8 13:18:04 1998 Martin v. Loewis <loewis@informatik.hu-berlin.de> + + * Makefile.in (TREE_H): Add tree-check.h. + (tree-check.h, s-check, gencheck): New targets. + (STAGESTUFF): Add s-check. + * gencheck.c: New file. + * tree.c (tree_check, tree_class_check, expr_check): New functions. + * tree.h (TREE_CHECK, TREE_CLASS_CHECK): Define. + (TYPE_CHECK, DECL_CHECK): Define. + Modify all access macros to use generated checking macros. + * acconfig.h (ENABLE_CHECKING): Undefine. + * configure.in (--enable-checking): New option. + +Mon Jun 8 12:13:25 1998 Richard Kenner <kenner@vlsi1.ultra.nyu.ed> + + * regmove.c: Remove include for varargs or stdarg. + +Mon Jun 8 07:49:41 1998 Andris Pavenis <pavenis@lanet.lv> + + * gcc.c (link_command_spec): Support LINK_COMMAND_SPEC. + +Sun Jun 7 18:00:28 1998 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de> + + * fold-const.c (fold, case EQ_EXPR): When folding VAR++ == CONST + or VAR-- == CONST construct a proper mask if VAR is a bitfield. + Cope with CONST being out of range for the bitfield. + +Sun Jun 7 17:19:35 1998 Tom Quiggle <quiggle@sgi.com> + + * mips/iris6.h (DWARF2_FRAME_INFO): Define. + * dwarf2out.c (dwarf2out_do_frame): Do something if DWARF2_FRAME_INFO. + +Sun Jun 7 15:29:04 1998 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de> + + * regmove.c: New file. + * Makefile.in (OBJS): Add regmove.o. + (regmove.o): New rules. + (mostlyclean): Remove regmove dumps. + * toplev.c (regmove_{dump,dump_file,time}, flag_regmove): New vars. + (f_options): Add -foptimize-register-move. + (compile_file): Run regmove pass after combine pass and do its dump. + (main): Enable regmove dump when -dN or -da. + (fatal_insn): Flush regmove dump file. + * flags.h (flag_regmove): Declare. + * flow.c (find_use_as_address): Export. + * rtl.h (find_use_as_address): Declare. + * local-alloc.c (optimize_reg_copy_{1,2}): Removed, all calls deleted. + * reload1.c (count_occurrences): Export. + * reload.h (count_occurrences): Declare. + +Sun Jun 7 09:30:31 1998 Richard Kenner <kenner@vlsi1.ultra.nyu.edu> + + * Makefile.in (uninstall): Uninstall gcov. + + * alpha.h (ASM_COMMENT_START): Define. + + * alpha.h (EXTRA_CONSTRAINT, case 'S'): New case. + * alpha.md ({ashl,ashr,lshr}di3): Use 'S' for constraint. + + * i386.md (cmpxf): Add missing extend pattern from SFmode and fix + operand numbers in one extend pattern from DFmode. + + * pa.md ({pre,post}_{ld,st}wm and similar): When operand is being + incremented, use '+', not '=', for constraint. + + * reload.c (find_reloads): Give preference to pseudo that was the + reloaded output of previous insn. + + * emit-rtl.c (init_emit_once): Provide default for DOUBLE_TYPE_SIZE. + + * expr.c (init_expr_once): Free all RTL we generate here. + * expmed.c (init_expmed): Allocate all RTX in memory we'll free. + + * genemit.c (main): Generate #include "reload.h". + + * expr.c (expand_expr, case INDIRECT_EXPR): A dereference of + a REFERENCE_TYPE is always considered in a structure. Likewise for + a dereference of a NOP_EXPR whose input is a pointer to aggregate. + +Sat Jun 6 17:25:14 1998 Richard Kenner <kenner@vlsi1.ultra.nyu.edu> + + * mips.md (reload_{in,out}di): Allow other operand to be invalid + MEM and get any reload replacement before using address. + +Tue May 26 18:52:23 1998 Richard Kenner <kenner@vlsi1.ultra.nyu.edu> + + * reload1.c (reload): Get MEM_IN_STRUCT_P and RTX_UNCHANGING_P + from reg_equiv_memory_loc; set the latter when changing REG to MEM. + (alter_reg): Don't set RTX_UNCHANGING_P for shared slots. + +Mon May 25 12:07:12 1998 Hans-Peter Nilsson <hp@axis.se> + + * cplus-dem.c (MBUF_SIZE): Bumped from 512 to 32767. + +Sun May 24 21:50:12 1998 Alan Modra <alan@spri.levels.unisa.edu.au> + + * i386/linux{,-aout,oldld}.h (ASM_COMMENT_START): Define. + +Sun May 24 11:58:37 1998 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de> + + * m68k.md (adddi3, subdi3): Properly negate the DImode constant. + +Sun May 24 11:30:08 1998 Torbjorn Granlund <tege@matematik.su.se> + + * m68k/lb1sf68.asm (__addsf3): Fix typo in exg on coldfire. + +Sun May 24 09:38:17 1998 John Wehle (john@feith.com) + + * i386.md (movsi): Remove redundant integer push patterns. + Don't check for TARGET_PUSH_MEMORY when pushing constants or registers. + +Sun May 24 08:59:27 1998 Richard Kenner <kenner@vlsi1.ultra.nyu.edu> + + * fold-const.c (fold, case EQ_EXPR): Split COMPLEX_TYPE operands + if either is COMPLEX_CST in addition to COMPLEX_EXPR. + + * expr.c (do_jump, case EQ_EXPR, case NE_EXPR): Check for COMPLEX + before testing for operand 1 being zero. + + * genattrtab.c (optimize): Define. + + * configure.lang: Fix substitution of target_alias. + +Sat May 23 22:31:17 1998 Michael P. Hayes <michaelh@ongaonga.chch.cri.nz> + + * emit_rtl.c (double_mode): New variable. + (init_emit_once): Set and use it. + * real.c (ereal_atof, real_value_truncate): Handle double_mode not + being DFmode for C4x. + +Sat May 23 22:19:55 1998 Mike Stump <mrs@wrs.com> + + * expr.c (expand_builtin_setjmp): Handle BUILTIN_SETJMP_FRAME_VALUE. + * i960.h (SETUP_FRAME_ADDRESSES, BUILTIN_SETJMP_FRAME_VALUE): Define. + * i960.md (ret, flush_register_windows): Define. + (nonlocal_goto): Likewise. Nested function nonlocal gotos don't + work yet. + +Sat May 23 18:45:59 1998 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de> + + * m68k/t-linux: Remove stuff already included in config/t-linux. + +Sat May 23 18:35:07 1998 Richard Kenner <kenner@vlsi1.ultra.nyu.edu> + + * final.c: Select <stab.h> and "gstab.h" with NO_STAB_H. + + * gcc.c (default_compilers): Remove ".ada" extension. + + * combine.c (rtx_equal_for_field_assignment): Remove code that + checks get_last_value. + + * Makefile.in (uninstall): Delete info files. + +Sat May 23 18:28:27 1998 Herman A.J. ten Brugge <Haj.Ten.Brugge@net.HCC.nl> + + * c-decl.c (start_decl): Use new macro SET_DEFAULT_DECL_ATTRIBUTES. + * c-lex.c (check_newline): Put last read character back on input + stream. + +Sat May 23 18:13:53 1998 David Edelsohn <edelsohn@mhpcc.edu> + + * rs6000.md (floatsidf2_loadaddr): rs6000_fpmem_offset will be + negative in a stackless frame. + * rs6000.c (rs6000_stack_info): Don't include fixed-size link area + in stackless frame size. Support 64-bit stackless frame size. + Combine fpmem offset calculations and don't add total_size to + offset if not pushing a stack frame. + + * tree.c (get_inner_array_type): New function. + * tree.h (get_inner_array_type): Likewise. + +Wed May 20 15:42:22 1998 Richard Kenner <kenner@vlsi1.ultra.nyu.edu> + + * expmed.c (expand_divmod): Save last divison constant and + if rem is same as div, don't adjust rem cost. + +Thu May 14 14:11:37 1998 Richard Kenner <kenner@vlsi1.ultra.nyu.edu> + + * alpha/vxworks.h: New file. + * configure.in (alpha*-*-vxworks*): New target. + + * alpha.c (tree.h): Include earlier. + (alpha_initialize_trampoline): New function. + * alpha.h (INITIALIZE_TRAMPOLINE): Call it. + * alpha/linux.h (INITIALIZE_TRAMPOLINE): Don't redefine. + +Thu May 14 13:35:53 1998 Cyrille Comar <comar@gnat.com> + + * Makefile.in (STAGESTUFF): Add s-under. + +Wed May 13 17:38:35 1998 Richard Kenner <kenner@vlsi1.ultra.nyu.edu> + + * combine.c (simplify_comparison, case AND): Don't commute AND + with SUBREG if constant is whole mode and don't do if lowpart + and not WORD_REGISTER_OPERATIONS. + + * expmed.c (expand_mult): Use 0 as add_target if should preserve + subexpressions. + +Mon May 11 17:26:06 1998 Paul Eggert <eggert@twinsun.com> + + * dwarf2out.c: Undo most recent change. + +Sun May 10 17:09:20 1998 Richard Kenner <kenner@vlsi1.ultra.nyu.edu> + + * fold-const.c (fold_range_test, fold): If need to make SAVE_EXPR + to do optimization, suppress if contains_placeholder_p. + +Thu May 7 18:14:31 Paul Eggert <eggert@twinsun.com> + + * dwarf2out.c: Don't assume `.section ".text"' causes assembler to + treat .text as label for start of section; instead, output + `.section ".text"; .LLtext0:' and use .LLtext0 in label contexts. + (ABBREV_LABEL, DEBUG_INFO_LABEL, DEBUG_LINE_LABEL, TEXT_LABEL): New. + (abbrev_label, debug_info_label, debug_line_label, text_label): New. + (dwarf2out_init): Initialize the vars. Output defn for text_label. + (dwarf2out_finish): Output defns for the other 3 vars. + (dw_val_node): Rename val_section to val_section_label, as it's + now a label, not a section. + (add_AT_section_offset): Arg is now a label, not a section. + (print_die): In label contexts, output section label, not section. + (output_die, output_compilation_unit_header): Likewise. + (output_{pubnames,aranges,line_info}, dwarf2out_finish): Likewise. + + * fixinc.wrap: Renamed from fixinc.math. Put wrapper around + curses.h if it contains `typedef char bool;'. + + * configure.in (arm-*-netbsd*): Rename fixinc.math to fixinc.wrap. + (i[34567]86-*-freebsdelf*, i[34567]86-*-freebsd*): Likewise. + (i[34567]86-*-netbsd*, i[34567]86-*-solaris2*): Likewise. + (m68k-*-netbsd*, mips-dec-netbsd*, ns32k-pc532-netbsd*): Likewise. + (powerpcle-*-solaris2*, sparc-*-netbsd*, sparc-*-solaris2*): Likewise. + (vax-*-netbsd*): Likewie. + +Wed May 6 06:44:28 1998 Richard Kenner <kenner@vlsi1.ultra.nyu.edu> + + * combine.c (simplify_rtx, case TRUNCATE): Reflect that it sign-extends + instead of zero-extending. + +Sat May 2 20:39:22 1998 Richard Kenner <kenner@vlsi1.ultra.nyu.edu> + + * fold-const.c (fold): When commutting COND_EXPR and binary operation, + avoid quadratic behavior if have nested COND_EXPRs. + +Tue Apr 28 17:30:05 1998 Richard Kenner <kenner@vlsi1.ultra.nyu.edu> + + * mips.h (HOST_WIDE_INT): Define if not already. + (compute_frame_size, mips_debugger_offset): Return HOST_WIDE_INT. + (DEBUGGER_{AUTO,ARG}_OFFSET): Cast second arg to HOST_WIDE_INT. + * mips.c (mips_debugger_offset): Now returns HOST_WIDE_INT. + Likewise for internal variable frame_size. + + * final.c (alter_subreg): Make new SUBREG if reload replacement + scheduled inside it. + + * dwarf2out.c (add_bound_info, case SAVE_EXPR): Pass + SAVE_EXPR_RTL address through fix_lexical_addr. + +Mon Apr 27 18:57:18 1998 Jim Wilson <wilson@cygnus.com> + + * mips/sni-svr4.h (CPP_PREDEFINES): Add -Dsinix and -DSNI. + +Mon Apr 20 14:48:29 1998 Michael Meissner <meissner@cygnus.com> + + * rs6000.md (mov{sf,df} define_splits): When splitting move of + constant to int reg, don't split insns that do simple AND and OR + operations; just split each word and let normal movsi define split + handle it further. + +Sun Apr 19 20:21:19 1998 Michael P. Hayes <michaelh@ongaonga.chch.cri.nz> + + * real.h (C4X_FLOAT_FORMAT): New macro. + * real.c (c4xtoe, etoc4x, toc4x): New functions. + +Sun Apr 19 20:17:32 1998 Niklas Hallqvist <niklas@petra.appli.se> + + * m68k.c (notice_update_cc): Use modified_in_p to check for update. + +Sun Apr 19 18:48:07 1998 K. Richard Pixley <rich@kyoto.noir.com> + + * fixincludes: Discard empty C++ comments. + Special case more files with C++ comments nested in C comments. + +Sun Apr 19 18:30:11 1998 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de> + + * m68k.md ({add,sub}di3): Optimize for constant operand. + +Sun Apr 19 18:27:11 1998 Alan Modra <alan@spri.levels.unisa.edu.au> + + * i386.c (output_387_binary_op): Swap operands when popping if result + is st(0). + +Sun Apr 19 17:58:01 1998 Peter Jeremy <peter.jeremy@alcatel.com.au> + + * expr.c (do_jump_by_parts_equality_rtx): Now public. + * expmed.c (do_cmp_and_jump): New function. + (expand_divmod): Use do_cmp_and_jmp instead of emit_cmp_insn and + emit_jump_insn. + +Sun Apr 19 07:48:37 1998 Richard Kenner <kenner@vlsi1.ultra.nyu.edu> + + * c-typeck.c (build_c_cast): Check underlying type when seeing + if discarding const or volatile. + + * c-decl.c (pushdecl): Avoid duplicate warning about implicit redecl. + + * configure.in (stab.h): Check for it. + (i386-*-vsta): Include xm-i386.h too. + * dbxout.c (stab.h): Include based on autoconf results. + * vax/xm-vms.h (NO_STAB_H): Deleted. + * alpha/xm-vms.h, xm-mips.h, i386/xm-mingw32.h, i386/go32.h: Likewise. + * i386/xm-cygwin32.h: Likewise. + * i386/xm-vsta.h (NO_STAB_H): Likewise. + (i386/xm-i386.h): No longer include. + + * mips.c: Cleanups and reformatting throughout. + ({expand,output}_block_move): Use HOST_WIDE_INT for sizes. + (mips_debugger_offset, compute_frame_size): Likewise. + (save_restore_insns, mips_expand_{pro,epi}logue): Likewise. + (siginfo): Deleted. + (override_options): Don't set up to call it; don't call setvbuf. + +Mon Apr 13 06:40:17 1998 Richard Kenner <kenner@vlsi1.ultra.nyu.edu> + + * configure.in (sparc-*-vxsim*): Include xm-siglist.h and + define USG and POSIX. + +Sun Apr 12 21:59:27 1998 Jeffrey A. Law <law@cygnus.com> + + * calls.c (expand_call): Fix typo in STRICT_ARGUMENT_NAMING. + +Sun Apr 12 21:42:23 1998 D. Karthikeyan <karthik@cdotd.ernet.in> + + * m68k.h (TARGET_SWITCHES): Add missing comma. + +Sun Apr 12 21:33:33 1998 Eric Valette <valette@crf.canon.fr> + + * configure.in (i[34567]86-*-rtemself*): New configuration. + * i386/rtemself.h: New file. + +Sun Apr 12 21:08:28 1998 Jim Wilson <wilson@cygnus.com> + + * loop.c (loop_optimize): Reset max_uid_for_loop after + find_and_verify_loops call. + (strength_reduce): In auto_inc_opt code, verify v->insn has valid + INSN_LUID. + +Sun Apr 12 20:54:59 1998 Richard Earnshaw (rearnsha@arm.com) + + * configure.in (sparc-*-solaris2*): Add xm-siglist.h to xm_file. + Add USG and POSIX to xm_defines. + +Sun Apr 12 20:47:37 1998 Pat Rankin <rankin@eql.caltech.edu> + + * cccp.c (eprint_string): New function. + (do_elif, do_else, verror): Use it instead of fwrite(,,,stderr). + (error_from_errno, vwarning): Likewise. + ({verror,vwarning,pedwarn}_with_line): Likewise. + (pedwarn_with_file_and_line, print_containing_files): Likewise. + +Sun Apr 12 20:40:44 1998 Richard Henderson <rth@dot.cygnus.com> + + * configure.in (alpha*-*-linux-gnu*): Add alpha/t-crtbe. + Add crt{begin,end}.o in extra_parts and delete crt{begin,end}S.o.o + * alpha/t-crtbe, alpha/crt{begin,end}.asm: New files. + + * alpha.h (PRINT_OPERAND_PUNCT_VALID_P): Accept '(' for s/sv/svi. + * alpha.c (print_operand): Handle it. + * alpha.md (fix_trunc[ds]fdi2): Use it. Add earlyclobber pattern + for ALPHA_TP_INSN. + +Sun Apr 12 13:09:46 1998 Scott Christley <scottc@net-community.com> + + * objc/encoding.c (objc_sizeof_type, _C_VOID): New case. + +Sun Apr 12 13:04:55 1998 Nikolay Yatsenko (nikolay@osf.org) + + * configure.in (i[34567]86-*-osf1*): New entry. + * i386/osf1-c[in].asm: New files for OSF/1. + * i386/osf1elf{,gdb}.h, i386/[xt]-osf1elf, i386/xm-osf1elf.h: Likewise. + +Sun Apr 12 10:03:51 1998 Noel Cragg <noel@red-bean.com> + + * fixincludes: Remove specification of parameters when renaming + functions in Alpha DEC Unix include files. + +Sun Apr 12 07:33:46 1998 Richard Kenner <kenner@vlsi1.ultra.nyu.edu> + + * mips.c (large_int): Use HOST_WIDE_INT, not int. + (print_operand): Use HOST_WIDE_INT_PRINT_* macros. + + * toplev.c (main): Sort order of handling of -d letters. + Use `F' instead of `D' for addressof_dump. + + * libgcc2.c (_eh_compat): Deleted. + * Makefile.in (LIB2FUNCS): Delete _eh_compat. + + * configure.in (alpha*-*-linux-gnu*): Don't include alpha/xm-linux.h. + + * c-common.c (check_format_info): Properly test for nested pointers. + + * pa.md (casesi0): Add missing mode for operand 0. + + * function.c (purge_addressof_1, case MEM): If BLKmode, put ADDRESSOF + into stack. + + * c-parse.in (label): Give warning if pedantic and label not integral. + + * c-decl.c (grokdeclarator): Don't warn about return type if in + system header. + + * reload.c (reload_nongroup): New variable. + (push{_secondary,}_reload): Initialize it. + (find_reloads): Compute it. + (debug_reload): Print it. + * reload.h (reload_nongroup): Declare. + * reload1.c (reload): Use reload_nongroup instead of local computation. + Check caller_save_spill_class against any nongroup reloads. + (reloads_conflict): No longer static. + +Sun Apr 12 05:52:18 1998 John David Anglin <dave@hiauly1.hia.nrc.ca> + + * vax.md (call patterns): Operand 1 is always a CONST_INT. + +Sat Apr 11 16:01:11 1998 Richard Kenner <kenner@vlsi1.ultra.nyu.edu> + + * convert.c (convert_to_{pointer,integer,real,complex}): Use switch. + Add missing integer-like types. + Simplify return of zero in error case. + (convert_to_pointer): Remove dubious abort. + (convert_to_integer, case POINTER_TYPE): Make recursive call. + (convert_to_integer, case COND_EXPR): Always convert arms. + * tree.c (type_precision): Deleted. + + * cccp.c (do_warning): Give pedantic warning if -pedantic and not + in system file. + * cpplib.c (do_warning): Likewise. + + * function.c (target_temp_slot_level): Define here. + (push_temp_slots_for_target, {get,set}_target_temp_slot_level): New. + * stmt.c (target_temp_slot_level): Don't define here. + * expr.h (temp_slot_level): New declaration. + +Fri Apr 10 16:35:48 1998 Paul Eggert <eggert@twinsun.com> + + * c-common.c (decl_attributes): Support strftime format checking. + (record_function_format, {check,init_function}_format_info): Likewise. + (enum format_type): New type. + (record_function_format): Now static; takes value of type + enum format_type instead of int. + (time_char_table): New constant. + (struct function_format_info): format_type member renamed from is_scan. + (check_format_info): Use `warning' rather than sprintf followed by + `warning', to avoid mishandling `%' in warnings. + Change a `pedwarn' to `warning'. + * c-tree.h (record_function_format): Remove decl. + +Thu Apr 2 17:34:27 1998 Manfred Hollstein <manfred@s-direktnet.de> + + * regclass.c (memory_move_secondary_cost): Protect uses of + SECONDARY_{INPUT,OUTPUT}_RELOAD_CLASS with #ifdef tests. + +Thu Apr 2 07:06:57 1998 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de> + + * m68k.c (standard_68881_constant_p): Don't use fmovecr on 68060. + +Thu Apr 2 06:19:25 1998 Ken Raeburn <raeburn@cygnus.com> + + * Makefile.in (version.c): Put "cvs log" output in build directory. + + * reload.h (MEMORY_MOVE_COST): Define here if not already defined. + (memory_move_secondary_cost): Declare. + * regclass.c (MEMORY_MOVE_COST): Don't define default here. + (memory_move_secondary_cost) [HAVE_SECONDARY_RELOADS]: New function. + (regclass, record_reg_classes, copy_cost, record_address_regs): + Pass register class and direction of move to MEMORY_MOVE_COST. + (top_of_stack) [HAVE_SECONDARY_RELOADS]: New static array. + (init_regs) [HAVE_SECONDARY_RELOADS]: Initialize it. + * reload1.c (MEMORY_MOVE_COST): Don't define default here. + (emit_reload_insns, reload_cse_simplify_set): Pass register class + and direction of move to MEMORY_MOVE_COST. + * 1750a.h (MEMORY_MOVE_COST): Add extra ignored arguments. + * a29k.h, alpha.h, arc.h, arm.h, dsp16xx.h, i386.h, m32r.h: Likewise. + * m88k.h, rs6000.h: Likewise. + * mips.h (MEMORY_MOVE_COST): Likewise. + Add memory_move_secondary_cost result to cpu-specific cost. + +Mon Mar 30 13:56:30 1998 Jim Wilson <wilson@cygnus.com> + + * mips/ultrix.h (SUBTARGET_CPP_SPEC): Define. + +Wed Mar 25 16:09:01 1998 Michael Meissner <meissner@cygnus.com> + + * rs6000.h (FUNCTION_ARG_PADDING): Cast result to be enum direction. + (function_arg_padding): Declare. + + * rs6000.c: Include stdlib.h if we have it. + (function_arg_padding): Change return type to int, cast enum's to int. + + (From Kaveh R. Ghazi <ghazi@caip.rutgers.edu>) + * rs6000.c (rs6000_override_options): Change type of `i', `j' and + `ptt_size' from int to size_t. + (rs6000_file_start): Likewise for `i'. + (rs6000_replace_regno): Add default case in enumeration switch. + (output_epilog): Remove unused variable `i'. + (rs6000_longcall_ref): Remove unused variables `len', `p', `reg[12]'. + + * rs6000.h (ADDITIONAL_REGISTER_NAMES): Add missing braces around + initializer. + (get_issue_rate, non_logical_cint_operand): Add prototype. + (rs6000_output_load_toc_table): Likewise. + + * rs6000.md (udivmodsi4): Add explicit braces to avoid ambiguous + `else'. + +Wed Mar 25 02:39:01 1998 Paul Eggert <eggert@twinsun.com> + + * configure.in (i[34567]86-*-solaris2*, powerpcle-*-solaris2*, + sparc-*-solaris2*): Use fixinc.svr4 if Solaris 2.0 through 2.4. + +Mon Mar 23 07:27:19 1998 Philippe De Muyter <phdm@macqel.be> + + * m68k.md (ashldi_const): Allow shift count in range ]32,63]. + (ashldi3): Allow constant shift count in range ]32,63]. + (ashrdi_const, ashrid3, lshrdi_const, lshrdi3): Likewise. + + * m68k.md (zero_extend[qh]idi2, iordi_zext): New patterns. + (zero_extendsidi2): Avoid useless copy. + (iorsi_zexthi_ashl16): Avoid "0" constraint for operand 2. + (iorsi_zext): New name for old unnamed pattern; indentation fixes. + +Mon Mar 23 07:12:05 1998 Richard Kenner <kenner@vlsi1.ultra.nyu.edu> + + * final.c (only_leaf_regs_used): If pic_offset_table_rtx used, + make sure it is a permitted register. + +Sun Mar 22 06:57:04 1998 Richard Kenner <kenner@vlsi1.ultra.nyu.edu> + + * expmed.c (extract_bit_field): Don't confuse SUBREG_WORD with + endian adjustment in SUBREG case. + Don't abort if can't make SUBREG needed for extv/extzv. + +Sat Mar 21 08:02:17 1998 Richard Gorton <gorton@amt.tay1.dec.com> + + * alpha.md (zero_extendqi[hsd]i2): Use "and", not "zapnot". + +Sat Mar 21 07:47:04 1998 Richard Kenner <kenner@vlsi1.ultra.nyu.edu> + + * unroll.c (verify_addresses): Use validate_replace_rtx. + (find_splittable_givs): If invalid address, show nothing same_insn. + +Fri Mar 20 10:24:12 1998 Philippe De Muyter <phdm@macqel.be> + + * fold-const.c (fold, case CONVERT_EXPR): Replace sign-extension of + a zero-extended value by a single zero-extension. + +Thu Mar 19 14:59:32 1998 Andrew Pochinsky <avp@ctp.mit.edu> + + * sparc.h (ASM_OUTPUT_LOOP_ALIGN): Fix error in last change. + +Thu Mar 19 14:48:35 1998 Michael Meissner <meissner@cygnus.com> + + * gcc.c (default_arg): Don't wander off the end of allocated memory. + + * rs6000/sysv4.h (RELATIVE_PREFIX_NOT_LINKDIR): Undef for System V + and EABI. + +Thu Mar 19 06:17:59 1998 Richard Kenner <kenner@vlsi1.ultra.nyu.edu> + + * Makefile.in (toplev.o): Depend on Makefile. + +Wed Mar 18 17:40:09 1998 Michael P. Hayes <michaelh@ongaonga.chch.cri.nz> + + * expr.c (convert_move): Add [QH]Imode/P[QH]Imode conversions. + * machmode.def (PQImode, PHImode): New modes. + +Wed Mar 18 17:11:18 1998 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de> + + * m68k.md (movsf+1): Optimize moving a CONST_DOUBLE zero. + +Wed Mar 18 17:07:54 1998 Ken Raeburn <raeburn@cygnus.com> + + * regclass.c (init_reg_sets): Delete init of reg-move cost tables. + (init_reg_sets_1): Put it here. + +Wed Mar 18 16:43:11 1998 Jim Wilson <wilson@cygnus.com> + + * i960.md (tablejump): Handle flag_pic. + + * profile.c (branch_prob): If see computed goto, call fatal. + + * calls.c (expand_call): Fix typos in n_named_args computation. + +Wed Mar 18 05:54:25 1998 Richard Kenner <kenner@vlsi1.ultra.nyu.edu> + + * fold-const.c (operand_equal_for_comparison_p): See if equal + when nop conversions are removed. + + * expr.c (expand_expr, case COND_EXPR): If have conditional move, + don't use ORIGINAL_TARGET unless REG. + + * function.c (fixup_var_refs_insns): Also delete insn storing pseudo + back into arg list. + + * combine.c (gen_binary): Don't make AND that does nothing. + (simplify_comparison, case AND): Commute AND and SUBREG. + * i386.h (CONST_CONSTS, case CONST_INT): One-byte integers are cost 0. + +Mon Mar 16 15:57:17 1998 Geoffrey Keating <geoffk@ozemail.com.au> + + * rs6000.c (small_data_operand): Ensure any address referenced + relative to small data area is inside SDA. + +Sun Mar 15 16:01:19 1998 Andrew Pochinsky <avp@ctp.mit.edu> + + * sparc.h (ASM_OUTPUT_LOOP_ALIGN): Write nop's. + +Sun Mar 15 15:53:39 1998 Philippe De Muyter <phdm@macqel.be> + + * libgcc2.c (exit): Don't call __bb_exit_func if HAVE_ATEXIT. + +Sun Mar 15 15:44:41 1998 Paul Eggert <eggert@twinsun.com> + + * cccp.c: Fix bugs relating to NUL in input file name, + e.g. with `#line 2 "x\0y"'. + (PRINTF_PROTO_4): New macro. + (struct {file_buf,definition,if_stack}): New member nominal_fname_len. + (main, expand_to_temp_buffer): Store length of input file names. + (finclude, create_definition, do_line, conditional_skip): Likewise. + (skip_if_group, macroexpand): Likewise. + (make_{definition,undef,assertion}): Likewise. + (special_symbol, do_include): Use stored length of input file names. + (do_define, do_elif, do_else, output_line_directive, verror): Likewise. + (error_from_errno, vwarning, verror_with_line): Likewise. + (vwarning_with_line, pedwarn_with_file_and_line): Likewise. + (print_containing_files): Likewise. + (do_line): Fix off-by-1 problem: 1 too many bytes were being allocated. + (quote_string, pedwarn_with_file_and_line): New arg specifies length. + All callers changed. + +Sun Mar 15 15:38:16 1998 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de> + + * c-typeck.c: Collect pending initializers in AVL tree instead of list. + (add_pending_init, pending_init_member): New functions. + (output_init_element): Use them. + (output_pending_init_elements): Rewritten to exploit AVL order. + +Sun Mar 15 05:10:49 1998 Richard Kenner <kenner@vlsi1.ultra.nyu.edu> + + * gnu.h (GNU_CPP_PREDEFINES): Deleted; not valid in traditional C. + * {i386,mips}/gnu.h (CPP_PREDEFINES): Don't call GNU_CPP_PREDEFINES. + + * flow.c (insn_dead_p): A CLOBBER of a dead pseudo is dead. + + * alpha.h (REG_ALLOC_ORDER): Put $f1 after other nonsaved. + + * sparc.c (sparc_type_code): Fix error in previous change. + +Sat Mar 14 05:45:21 1998 Richard Kenner <kenner@vlsi1.ultra.nyu.edu> + + * i386/xm-aix.h, i386/xm-osf.h (i386/xm-i386.h): Don't include. + (USG): Don't define. + * i386/xm-isc.h (i386/xm-sysv3.h): Don't include. + * i386/xm-sco.h (i386/xm-sysv3.h): Likewise. + (BROKEN_LDEXP, SMALL_ARG_MAX, NO_SYS_SIGLIST): Don't define. + * m68k/xm-3b1.h (m68k/xm-m68k.h): Don't include. + (USG): Don't define. + * m68k/xm-atari.h (m68k/xm-m68kv.h): Don't include. + (HAVE_VPRINTF, FULL_PROTOTYPES): Don't define. + * m68k/xm-crds.h (m68k/xm-m68k.h): Don't include. + (USE_C_ALLOCA, unos, USG): Don't define. + * m68k/xm-mot3300.h (m68k/xm-m68k.h): Don't include. + (USE_C_ALLOCA, NO_SYS_SIGLIST): Don't define. + * m68k/xm-plexus.h (m68k/xm-m68k.h): Don't include. + (USE_C_ALLOCA, USG): Don't define. + * m88k/xm-sysv3.h (m88k/xm-m88k.h): Don't include. + * m68k/xm-next.h (m68k/xm-m68k.h): Don't include. + * ns32k/xm-pc532-min.h (ns32k/xm-ns32k.h): Don't include. + (USG): Don't define. + * rs6000/xm-mach.h: Don't include xm-rs6000.h. + * rs6000/xm-cygwin32.h (rs6000/xm-rs6000.h): Don't include. + (NO_STAB_H): Don't define. + * sparc/xm-linux.h (xm-linux.h): Don't include. + * sparc/xm-sol2.h (sparc/xm-sysv4.h): Don't include. + * a29k/xm-unix.h, alpha/xm-linux.h, arm/xm-linux.h: Deleted. + * arm/xm-netbsd.h, i386/xm-bsd386.h, i386/xm-gnu.h: Deleted. + * i386/xm-linux.h, i386/xm-sun.h, i386/xm-sysv3.h: Deleted. + * i386/xm-winnt.h, m68k/xm-altos3068.h, m68k/xm-amix.h: Deleted. + * m68k/xm-amix.h, m68k/xm-hp320.h, m68k/xm-linux.h: Deleted. + * m68k/xm-m68kv.h, mips/xm-iris5.h, ns32k/xm-genix.h: Deleted. + * sparc/xm-pbd.h, vax/xm-vaxv.h, xm-svr3.h, xm-linux.h: Deleted. + * configure.in: Reflect above changes. + + * xm-siglist.h, xm-alloca.h: New files. + * i386/xm-sysv4.h (i386/xm-i386.h, xm-svr4.h): Don't include. + (USE_C_ALLOCA, SMALL_ARG_MAX): Don't define. + * i386/xm-sco5.h (i386/xm-sysv3.h): Don't include. + (SYS_SIGLIST_DECLARED, USE_C_ALLOCA): Don't define. + * rs6000/xm-sysv4.h, sparc/xm-sysv4.h: Don't include xm-svr4.h. + * xm-svr4.h, i386/xm-dgux.h, mips/xm-news.h, mips/xm-sysv4.h: Deleted. + * configure.in: Reflect above changes. + + * configure.in ({,host_,build_}xm_defines): New variables. + Set to USG instead of including xm-usg.h. + Write #define lines in config.h files from xm_defines vars. + * xm-usg.h: Deleted. + +Fri Mar 13 07:10:59 1998 Richard Kenner <kenner@vlsi1.ultra.nyu.edu> + + * calls.c (expand_call): Fix typo in previous change. + + * sparc.c (sparc_type_code): Avoid infinite loop when have + pointer to array of same pointer. + (sparc_type_code, case REAL_TYPE): Process subtypes here too. + + * mips/bsd-4.h, mips/iris3.h, mips/news{4,5}.h: Don't include mips.h. + * mips/news5.h, mips/osfrose.h, mips/svr{3,4}-4.h: Likewise. + * mips/ultrix.h: Likewise. + * mips/cross64.h: Don't include iris6.h. + * mips/ecoff.h: Don't include mips.h or gofast.h. + * mips/elforion.h: Don't include elf64.h. + * mips/iris4.h: Don't include iris3.h. + * mips/iris4loser.h: Don't include iris4.h. + * mips/iris5gas.h: Don't include iris5.h. + * mips/elflorion.h, mips/nws3250v4.h, mips/xm-iris{3,4}.h: Deleted. + * mips/xm-nws3250v4.h, mips/xm-sysv.h: Deleted. + * mips/rtems64.h: Don't include elflorion.h. + * mips/sni-gas.h: Don't include sni-svr4.h. + * mips/svr4-t.h: Don't include svr4-5.h. + * mips/dec-osf1.h: Also include mips.h. + * mips/ecoffl.h, mips/elf.h: Also include mips.h and gofast.h. + * mips/iris5.h: Also include iris3.h and mips.h. + * xm-usg.h: New file. + * mips/xm-iris5.h: Don't include xm-mips.h; don't define USG. + * mips/xm-news.h, mips/xm-sysv4.h: Don't include xm-sysv.h. + * configure.in: Reflect above changes. + +Thu Mar 12 07:18:48 1998 Richard Kenner <kenner@vlsi1.ultra.nyu.edu> + + * expr.h (STRICT_ARGUMENT_NAMING): Provide default value of 0. + * calls.c (expand_call): Use value of STRICT_ARGUMENT_NAMING. + * function.c (assign_parm): Likewise. + * mips/abi64.h (STRICT_ARGUMENT_NAMING): Return 0 for ABI_32. + * sparc.h (STRICT_ARGUMENT_NAMING): Only nonzero for V9. + + * calls.c (expand_call, expand_library_call{,_value}, store_one_arg): + Rework handling of REG_PARM_STACK_SPACE to treat return value of + zero as if macro not defined; add new arg to emit_push_insn. + * expr.c (emit_push_insn): New arg, REG_PARM_STACK_SPACE. + * expr.h (emit_push_insn): Likewise. + * mips/abi64.h (REG_PARM_STACK_SPACE): Define. + +Wed Mar 11 06:58:13 1998 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de> + + * m68k.h (CONST_OK_FOR_LETTER_P, case 'M'): Correct range check. + +Wed Mar 11 06:15:52 1998 Richard Kenner <kenner@vlsi1.ultra.nyu.edu> + + * expr.c (emit_push_insn): Use loop to find movstr patterns + instead of explicit tests. + + * Makefile.in (extraclean): Don't delete install1.texi. + +Tue Mar 10 14:27:51 1998 Richard Kenner <kenner@vlsi1.ultra.nyu.edu> + + * combine.c (make_field_assignment): Don't get confused if OTHER + has VOIDmode and don't do anything if DEST is wider than a host word. + + * vax.c (check_float_value): Cast bcopy args to char *. + +Tue Mar 10 13:56:12 1998 Jim Wilson <wilson@cygnus.com> + + * mips/abi64.h (LONG_MAX_SPEC): Check MIPS_ABI_DEFAULT and + TARGET_DEFAULT and define __LONG_MAX__ appropriately. + Add support for -mabi=X, -mlong64, and -mgp{32,64} options. + * mips.c (mips_abi): Change type to int. + * mips.h (enum mips_abi_type): Delete. + (ABI_32, ABI_N32, ABI_64, ABI_EABI): Define as constants. + (mips_abi): Change type to int. + +Mon Mar 2 08:06:58 1998 Richard Kenner <kenner@vlsi1.ultra.nyu.edu> + + * Version 2.8.1 released. + + * Makefile.in (mostlyclean): Remove duplicate deletion of temp + files. Delete more stamp files and [df]p-bit.c + (clean): Don't delete stamp files here. + (VERSION_DEP): New variable. + (distdir-finish): Pass a value of null for it. + (version.c): Use it. + Avoid broken pipe with cvs log. + + * objc/Make-lang.in (objc/runtime-info.h): Rename emptyfile to + tmp-runtime and delete at end. + +Sun Mar 1 05:50:25 1998 Richard Kenner <kenner@vlsi1.ultra.nyu.edu> + + * tree.c (build_reference_type): Handle obstacks like + build_pointer_type. + + * Makefile.in (tmp-gcc.xtar): Renamed from gcc.xtar. + (gcc.xtar.gz): Deleted; merged with `dist'. + (diff): Create gcc-$(oldversion)-$(version).diff. + (distdir): Depend on distdir-cvs. + (distdir-cvs): New rule. + (distdir-start): Depend on version.c and TAGS. + (TAGS): Use tmp-tags instead of temp. + (dist): Create gcc-$(version).tar.gz. + + * varasm.c (compare_constant_1): Fix typo in previous change. + + * objc/Make-lang.in (objc-distdir): Properly rebuild objc-parse.c. + +Sat Feb 28 16:58:08 1998 Tristan Gingold <gingold@rossini.enst.fr> + + * stmt.c (expand_decl): If -fcheck-memory-usage, put vars in memory. + * expr.c (get_memory_usage_from_modifier): Convert + EXPAND_{CONST_ADDRESS, INITIALIZER} to MEMORY_USE_DONT. + +Sat Feb 28 08:13:43 1998 Richard Kenner <kenner@vlsi1.ultra.nyu.edu> + + * i860/fx2800.h (DATA_ALIGNMENT): Use POINTER_TYPE_P. + * m68k/a-ux.h (FUNCTION_VALUE): Likewise. + * expr.c (get_pointer_alignment, compare, do_store_flag): Likewise. + (expand_builtin): Likewise. + * fold-const.c (force_fit_type, fold_convert, fold): Likewise. + * function.c (assign_parms): Likewise. + * integrate.c (expand_inline_function): Likewise. + * sdbout.c (sdbout_field_types): Likewise. + * tree.c (integer_pow2p, tree_log2, valid_machine_attribute): Likewise. + * stmt.c (expand_decl): Likewise. + ({,bc_}expand_decl_init): Also test for REFERENCE_TYPE. + + * configure.in (version_dep): New variable; if srcdir is CVS working + directory, set to ChangeLog. + (version): Supply default if no version.c. + * Makefile.in (version.c): New rule. + + * gcc.c (snapshot_warning): New function. + (main): Call it for snapshots. + + * dwarf2out.c (expand_builtin_dwarf_reg_size): If reg_raw_mode + not valid for reg, use last size. Also refine range assertion. + +Sat Feb 28 05:04:47 1998 Michael P. Hayes <michaelh@ongaonga.chch.cri.nz> + + * enquire.c (cprop): Don't perform exhaustive search for char_min + and char_max when bits_per_byte > 16. + +Thu Feb 26 15:12:03 1998 Christopher Taylor <cit@ckshq.com> + + * fixincludes: Avoid using '0-~' in egrep. + +Thu Feb 26 08:04:05 1998 Tristan Gingold <gingold@messiaen.enst.fr> + + * function.c (assign_parms): Call 'chkr_set_right' when DECL_RTL + is stack_parm. + * expr.c (get_memory_usage_from_modifier): Convert + EXPAND_{SUM, CONST_ADDRESS, INITIALIZER} to MEMORY_USE_RO. + +Thu Feb 26 07:33:53 1998 Paul Eggert <eggert@twinsun.com> + + * c-lex.c (yylex): Don't munge errno before using it. + * cccp.c (error_from_errno, perror_with_name): Likewise. + * cpplib.c (cpp_error_from_errno): Likewise. + * gcc.c (pfatal_pexecute): Likewise. + * protoize.c (safe_write, find_file, process_aux_info_file): Likewise. + (rename_c_file, edit_file): Likewise. + + * c-lex.c (yylex): Remove unused variable exceeds_double. + +Thu Feb 26 07:05:14 1998 Michael P. Hayes <michaelh@ongaonga.chch.cri.nz> + + * reorg.c (fill_slots_from_thread): Don't steal delay list from target + if condition code of jump conflicts with opposite_needed. + +Thu Feb 26 06:45:23 1998 Richard Kenner <kenner@vlsi1.ultra.nyu.edu> + + * Makefile.in (distdir-start): Don't copy CVS subdirectory of config. + + * varasm.c ({compare,record}_constant_1, case CONSTRUCTOR): + Handle the case when we have TREE_PURPOSE values. + +Thu Feb 26 05:59:01 1998 Philippe De Muyter <phdm@macqel.be> + + * fixincludes (sys/limits.h): Fix a nested comment problem with + HUGE_VAL definition on sysV68 R3V7.1. + +Wed Feb 25 21:09:38 1998 Philippe De Muyter <phdm@macqel.be> + + * toplev.c (TICKS_PER_SECOND): Renamed from CLOCKS_PER_SECOND. + +Wed Feb 25 20:50:08 1998 Michael P. Hayes <michaelh@ongaonga.chch.cri.nz> + + * reorg.c (fill_slots_from_thread): Mark resources referenced in + opposite_needed thread. Return delay_list even when cannot get + any more delay insns from end of subroutine. + +Wed Feb 25 19:50:01 1998 Mikael Pettersson <Mikael.Pettersson@sophia.inria.fr> + + * gcc.c (lookup_compiler): Remove redundant test. + +Wed Feb 25 07:24:22 1998 Richard Kenner <kenner@vlsi1.ultra.nyu.edu> + + * vax.md (call insns): Second operand to CALL rtl is SImode. + + * configure.in (i[34567]86-*-mingw32): Support msv and crt suffix. + * i386/crtdll.h: New file. + + * sparc.c (pic_setup_code): If -O0, write USE of pic_offset_table_rtx. + + * expr.c (safe_from_p): Add new arg, TOP_P; all callers changed. + +Sat Feb 21 07:02:39 1998 Jim Wilson <wilson@cygnus.com> + + * mips/iris5.h (DWARF2_UNWIND_INFO): Define to 0. + * mips/iris5gas.h (DWARF2_UNWIND_INFO): Define to 1. + +Fri Feb 20 08:27:46 1998 Paul Eggert <eggert@twinsun.com> + + * sparc/sol2-sld.h: New file. + * configure.in (sparc-*-solaris2*): Use it when using system linker. + * toplev.c (main): Don't default to DWARF2_DEBUG with -ggdb + if LINKER_DOES_NOT_WORK_WITH_DWARF2 is defined. + +Fri Feb 20 08:21:49 1998 H.J. Lu (hjl@gnu.org) + + * alpha/elf.h (STARTFILE_SPEC, ENDFILE_SPEC): Support shared library. + (LIB_SPEC, DEFAULT_VTABLE_THUNKS): Defined #ifndef USE_GNULIBC_1. + * sparc/linux.h (DEFAULT_VTABLE_THUNKS): Likewise. + (LIB_SPEC): Add -lc for -shared #ifndef USE_GNULIBC_1. + * linux.h (LIB_SPEC): Likewise. + * sparc/linux64.h (LIB_SPEC): Likewise; also updated for glibc 2. + (LIBGCC_SPEC): Removed. + (CPP_SUBTARGET_SPEC): Add %{pthread:-D_REENTRANT}. + +Fri Feb 20 05:22:12 1998 Richard Kenner <kenner@vlsi1.ultra.nyu.edu> + + * Makefile.in (distdir-start): Add dependence on bi-parser.[ch]. + +Thu Feb 19 18:07:11 1998 Jim Wilson <wilson@cygnus.com> + + * m68k.h (TARGET_SWITCHES): For 68000, 68302, subtract MASK_68881. + For 68303, 68332, cpu32, subtract MASK_68040_ONLY. + +Wed Feb 18 09:37:29 1998 Paul Eggert <eggert@twinsun.com> + + * fixincludes (stdlib.h): Do not double-wrap the size_t typedef. + +Wed Feb 18 07:32:11 1998 Jim Wilson <wilson@cygnus.com> + + * i960.c (emit_move_sequence): Handle unaligned stores to pseudos. + * i960.md (store_unaligned_[dt]i_reg): Handle register dest. + (store_unaligned_ti_reg): Likewise. + + * m68k.h (MACHINE_STATE_{SAVE,RESTORE} [MOTOROLA]): Add %# and %/; + add : to make them into extended asms. + +Wed Feb 18 07:08:05 1998 Richard Kenner <kenner@vlsi1.ultra.nyu.edu> + + * reg-stack.c (compare_for_stack_reg): Only handle FP conditional + move as next insn specially. + + * reload.c (find_reloads): Always convert address reload for + non-reloaded operand to RELOAD_FOR_OPERAND_ADDRESS. + + * emit-rtl.c (hard-reg-set.h): Include. + (get_lowpart_common): Don't make new REG for hard reg in a + class that cannot change size. + * Makefile.in (emit-rtl.o): Depend on hard-reg-set.h. + +Sat Feb 14 09:59:00 1998 Richard Earnshaw (rearnsha@arm.com) + + * arm.md (movsfcc): Also validate operands[3] for hard float. + (movdfcc): Only accept fpu_add_operand for operands[3].8 + +Sat Feb 14 09:32:34 1998 Jim Wilson <wilson@cygnus.com> + + * dwarf2out.c (expand_builtin_dwarf_reg_size): New variable mode. + Convert CCmode to word_mode before calling GET_MODE_SIZE. + +Sat Feb 14 09:27:42 1998 David Edelsohn <edelsohn@mhpcc.edu> + + * rs6000.h (MY_ISCOFF): Check for U803XTOCMAGIC. + +Sat Feb 14 08:29:43 1998 Arvind Sankar <arvind@cse.iitb.ernet.in> + + * t-svr4 (TARGET_LIBGCC_CFLAGS): New definition. + +Sat Feb 14 07:45:16 1998 Ken Rose (rose@acm.org) + + * reorg.c (fill_slots_from_thread): New parameter, delay_list. + All callers changed. + +Sat Feb 14 07:14:02 1998 Richard Kenner <kenner@vlsi1.ultra.nyu.edu> + + * reload.c (debug_reload): Properly output insn codes. + + * pa.c (emit_move_sequence): If in reload, call find_replacement. + + * gansidecl.h (bcopy, bzero, {,r}index): Don't define if IN_LIBGCC2. + + * combine.c (distribute_notes, case REG_DEAD): When seeing if place + to put new note sets register, use reg_bitfield_target_p, as in + original code. + + * gcc.c (process_command): If file is for linker, set lang to "*". + (lookup_compiler): Return 0 for language of "*". + + * sched.c (attach_deaths, case SUBREG): Fix error in last change. + + * i386.md (mov[sdx]fcc): Disable for now. + (mov[sd]fcc_1): Add earlyclobber for output on last alternative. + +Sat Feb 14 06:42:50 1998 Jason Merrill <jason@yorick.cygnus.com> + + * except.c (get_dynamic_handler_chain): Only make call once per func. + (expand_fixup_region_{start,end}): New functions. + (expand_eh_region_start_tree): Store cleanup into finalization here. + * stmt.c (expand_cleanups): Use new functions to protect fixups. + + * except.c (get_dynamic_handler_chain): Build up a FUNCTION_DECL. + * optabs.c (init_optabs): Don't init get_dynamic_handler_chain_libfunc. + * expr.h (get_dynamic_handler_chain_libfunc): Deleted. + +Sat Feb 14 06:34:41 1998 Peter Lawrence <Peter.Lawrence@Eng.Sun.COM> + + * optabs.c (emit_conditional_move): Don't reverse condition for FP. + +Fri Feb 13 07:22:04 1998 Richard Kenner <kenner@vlsi1.ultra.nyu.edu> + + * Makefile.in (mostlyclean): Only use s-* convention for stamp + files in main dir. + + * configure.in: Add support for i786 (Pentium II); same as i686. + +Thu Feb 12 20:16:35 1998 Michael Meissner <meissner@cygnus.com> + + * rs6000.md: Replace gen_rtx (CONST_INT,...) with GEN_INT. + +Thu Feb 12 10:08:14 1998 John Hassey <hassey@dg-rtp.dg.com> + + * configure.in (i[3456]86-dg-dgux*): Don't need fixincludes. + +Thu Feb 12 07:27:39 1998 Mumit Khan <khan@xraylith.wisc.edu> + + * i386/cygwin32.h (NO_IMPLICIT_EXTERN_C): Define. + about system headers. + (LIB_SPEC): Add -ladvapi32 -lshell32. + +Thu Feb 12 07:19:31 1998 Richard Kenner <kenner@vlsi1.ultra.nyu.edu> + + * expr.c (expand_assignment): Fix typo in checking OFFSET. + + * gbl-ctors.h (atexit): Don't define unless needed. + + * combine.c (distribute_notes): Completely check for note operand being + only partially set on potential note target; adjust what notes + we make in that case. + + * i386/xm-go32.h (HAVE_{BCOPY,BZERO,INDEX,RINDEX}): Deleted. + +Wed Feb 11 08:53:27 1998 Richard Kenner <kenner@vlsi1.ultra.nyu.edu> + + * calls.c (emit_call_1): Size args now HOST_WIDE_INT. + (expand_call): struct_value_size now HOST_WIDE_INT. + +Tue Feb 10 09:04:39 1998 Richard Kenner <kenner@vlsi1.ultra.nyu.edu> + + * integrate.c (initialize_for_inline): Ensure DECL_INCOMING_RTL + is always copied. + +Tue Feb 10 06:10:49 1998 Paul Eggert <eggert@twinsun.com> + + * cccp.c (rescan): Fix bug with macro name appearing + immediately after L'x'. + +Mon Feb 9 20:45:32 1998 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de> + + * c-common.c (format_char_info): Add new field zlen. + (print_char_table): Remove entry for 'Z' as a format character. + Initialize zlen field as appropriate. + (scan_char_table): Set zlen field to NULL in each entry. + (check_format_info): Recognize 'Z' as a length modifier, with a + warning in pedantic mode. + Avoid infinite loop when a repeated flag character is detected. + +Mon Feb 9 09:24:04 1998 Paul Eggert <eggert@twinsun.com> + + * c-parse.in (primary): Minor wording fix in diagnostic. + +Mon Feb 9 07:50:19 1998 Richard Kenner <kenner@vlsi1.ultra.nyu.edu> + + * c-decl.c (grokdeclarator): Remove warning on inline of varargs. + + * reload.c (find_reloads): Check for const_to_mem case before + checking for invalid reload; use force_const_mem if no_input_reloads. + + * function.c (push_function_context_to): Call init_emit last. + + * protoize.c (my_link): Define as -1 in mingw32. + (link): Remove declaration. + + * rs6000.c (setup_incoming_varargs): Always set rs6000_sysv_varargs_p. + + * integrate.c (expand_inline_function): Clear label_map with bzero. + + * unroll.c (copy_loop_body, case JUMP_INSN): Correct error in last + change: call single_set on COPY, not INSN. + +Sun Feb 8 08:07:37 1998 Richard Kenner <kenner@vlsi1.ultra.nyu.edu> + + * msdos/top.sed, winnt/config-nt.sed: Change version number to 2.8.1. + + * configure.in (i[3456]86-*-sco3.2v5*): Use cpio for headers. + +Sat Feb 7 07:32:46 1998 Richard Kenner <kenner@vlsi1.ultra.nyu.edu> + + * i386/mingw32.h (LIBGCC_SPEC, STARTFILE_SPEC, MATH_LIBRARY): + Use msvcrt, not crtdll. + +Fri Feb 6 20:32:06 1998 Geert Bosch <bosch@gnat.com> + + * i386/xm-os2.h (EMX, USG, BSTRING, HAVE_{PUTENV,VPRINTF,STRERROR}): + Define ifdef __EMX__. + (strcasecmp): Define to be stricmp if __EMX__. + (spawnv{,p}): Don't define if EMX. + (OBJECT_SUFFIX): Don't define if EMX. + (MKTEMP_EACH_FILE): Define. + +Fri Feb 6 16:37:29 1998 Kaveh R. Ghazi <ghazi@caip.rutgers.edu> + + * objc/Make-lang.in (objc.stage1): Depend on stage1-start. + (objc.stage2, objc.stage3, objc.stage4): Likewise for the + respective stageN-start targets. + (objc/sendmsg.o): Depend on objc/runtime-info.h. + +Fri Feb 6 16:27:09 1998 Bernd Schmidt <crux@Pool.Informatik.RWTH-Aachen.DE> + + * stmt.c (expand_asm_operands): Properly treat asm statement + statements with no operands as volatile. + +Fri Feb 6 16:03:25 1998 Greg McGary <gkm@gnu.org> + + * c-decl.c (pushdecl): Set DECL_ORIGINAL_TYPE once only. + +Fri Feb 6 15:57:36 1998 Mumit Khan <khan@xraylith.wisc.edu> + + * i386/cygwin32.h (STRIP_NAME_ENCODING): New macro. + +Fri Feb 6 15:50:42 1998 Paul Eggert <eggert@twinsun.com> + + * libgcc2.c (__floatdi[xtds]f): Round properly even when rounding + large negative integer to plus or minus infinity. + +Fri Feb 6 15:45:16 1998 Philippe De Muyter <phdm@macqel.be> + + * sdbout.c (plain_type_1): Return T_DOUBLE, not T_VOID, for + long double #ifndef EXTENDED_SDB_BASIC_TYPES. + +Fri Feb 6 15:23:49 1998 John David Anglin <dave@hiauly1.hia.nrc.ca> + + * vax/ultrix.h (HAVE_ATEXIT): Define. + * x-vax: File deleted. + +Fri Feb 6 14:34:19 1998 Douglas Rupp <rupp@gnat.com> + + * gcc.c (process_command, case "-dumpversion"): Print spec_version. + +Fri Feb 6 11:01:13 1998 Josh Littlefield <josh@american.com> + + * i386/gmon-sol2.c (internal_mcount): Do set-up when program starts + and install hook to do clean-up when it exits. + * i386/sol2-c1.asm (_mcount): Make a weak instead of global symbol. + * i386/sol2dbg.h (ASM_SPEC): Support Solaris bundled assembler's -V + argument; pass -s argument to assembler. + +Fri Feb 6 09:13:21 1998 Jim Wilson (wilson@cygnus.com) + + * function.c (assign_parms): New variable named_arg, with value + depending on STRICT_ARGUMENT_NAMING. Use instead of ! last_named. + + * crtstuff.c (__frame_dummy): New function for irix6. + (__do_global_ctors): Call __frame_dummy for irix6. + * mips/iris6.h (LINK_SPEC): Hide __frame_dummy too. + +Fri Feb 6 09:08:21 1998 Mike Stump <mrs@wrs.com> + + * rtlanal.c (dead_or_set_regno_p): Ignore REG_DEAD notes after reload. + * genattrtab.c (reload_completed): Define. + + * configure.in (i960-wrs-vxworks): Same as i960-wrs-vxworks5*. + +Fri Feb 6 08:47:38 1998 Richard Kenner <kenner@vlsi1.ultra.nyu.edu> + + * Makefile.in (diff): Add INSTALL, configure, and config.in; + remove objc-*. + * objc/config-lang.in (diff_excludes): Add objc-parse.[cy]. + + * i386/xm-mingw32.h (link): Delete macro. + + * alpha.c (output_prolog): Write out frame sizes as longs and + print too large sizes as zero. + + * function.c (combine_temp_slots): No need to allocate and free rtx. + Don't do anything if too many slots in the list. + (put_var_into_stack): Don't use ADDRESSOF if not optimizing. + + * function.c (purge_addressof_1): Force into mem if VOLATILE reference. + + * calls.c (expand_call): Show VAR_DECL made for structure return + address is used; remove bogus set of MEM_IN_STRUCT_P. + * expr.c (expand_expr, case SAVE_EXPR, case TARGET_EXPR): Show used. + (expand_builtin, case BUILT_IN_LONGJMP): Show __dummy used. + * function.c (put_reg_into_stack): New arg USED_P; all callers changed. + + * expr.c (expand_expr, case SAVE_EXPR): assign_temp with KEEP of 3. + * function.c (var_temp_slot_level): New variable. + (push_function_context_to, pop_function_context_from): Save/restore + it and target_temp_slot_level. + (assign_stack_temp): Implement KEEP of 3. + (push_temp_slots_for_block): New function. + (init_temp_slots): Initialize var_temp_slot_level. + * function.h (struct function, fields {var,target}_temp_slot_level): + New fields. + * stmt.c (expand_start_bindings): Call push_temp_slots_for_block. + + * function.c (struct temp_slot): SIZE, BASE_OFF_SET, and FULL_SIZE + now HOST_WIDE_INT. + (assign_{,outer_}stack_local, assign_{,stack_}temp): Size arg is + now HOST_WIDE_INT. + (assign_stack_temp): Do size computations in HOST_WIDE_INT. + (fixup_var_refs_1, optimize_bit_field, instantiate_decls): Likewise. + (instantiate_virtual_regs_1, fix_lexical_address): Likewise. + * rtl.h (assign_stack_{local,temp}): Size arg is HOST_WIDE_INT. + (assign_temp): Likewise. + * expr.h (struct args_size): Field CONSTANT is now HOST_WIDE_INT. + + * sched.c (attach_deaths, case REG): Don't check for REG_UNUSED. + (attach_deaths, case SUBREG, STRICT_LOW_PART, {ZERO,SIGN}_EXTRACT): + Don't pass set_p of 1 if partial assignment. + + * tree.h (size_in_bytes): Returns HOST_WIDE_INT. + * tree.c (size_in_bytes): Likewise. + Tighen up logic some to avoid returning a bogus value instead of -1. + + * expr.c (get_inner_reference, case ARRAY_EXPR): Make WITH_RECORD_EXPR + just for index. + (expand_expr, case PLACEHOLDER_EXPR): Refine search again; look + at each expression and look for pointer to type. + + * expr.c (safe_from_p, case ADDR_EXPR): If TREE_STATIC, no trampoline. + (expand_expr, case ADDR_EXPR): Likewise. + + * expr.c (emit_block_move): Use conservative range for movstr mode. + + * configure.in: See if "cp -p" works if "ln -s" doesn't; else "cp". + + * combine.c (try_combine.c): Pass elim_i2 and elim_i1 to + distribute_notes for i3dest_killed REG_DEAD note. + + * configure.in (mips-dec-netbsd*): Remove bogus setting of prefix. + + * c-decl.c (duplicate_decls): Set DECL_IGNORED_P in newdecl if + different bindings levels. + + * configure.in: Test ln -s by symlinking gcc.c. + + * configure.in (i[3456]86-dg-dgux): Add wildcard for version. + + * crtstuff.c (__do_global_ctors_aux): Switch back to text section + in proper place. + + * rtlanal.c (rtx_varies_p, case REG): pic_offset_table_rtx is fixed. + * genattrtab.c (pic_offset_table_rtx): Define (dummy). + * cse.c (set_nonvarying_address_components): Understand PIC refs. + + * loop.c (strength_reduce): When placing increment for auto-inc + case, do comparison in loop order. + + * i860.c (output_delayed_branch): Add missing arg to recog. + (output_delay_insn): Add missing arg to constrain_operands. + + * configure.in: Truncate target after finished comparing it with host. + + * i386.h (MAX_FIXED_MODE_SIZE): Delete. + + * c-parse.in (expr_no_comma): Clarify undefined error. + + * prefix.c (get_key_value): Don't default to PREFIX here. + (translate_name): Remove bogus addition of "$" if getenv fails; + clean up application of default value of PREFIX. + + * fold-const.c (fold_convert): Call force_fit_type even if input + already overflows. + +Fri Feb 6 07:45:01 1998 Robert Hoehne <robert.hoehne@gmx.net> + + * i386/xm-go32.h (HAVE_{BCOPY,BZERO,BCMP,RINDEX,INDEX}): Define. + + * gcc.c (main): Treat paths starting with '$' or DOS drives + as absolute in standard_startfile_prefix. + +Thu Feb 5 21:07:12 1998 John David Anglin <dave@hiauly1.hia.nrc.ca> + + * cpplib.c (IS_INCLUDE_DIRECTIVE_TYPE): Add casts from enum to int. + * cccp.c (IS_INCLUDE_DIRECTIVE_TYPE, handle_directive): Likewise. + +Thu Feb 5 19:00:44 1998 Richard Kenner <kenner@vlsi1.ultra.nyu.edu> + + * expr.c (expand_expr, case CONSTRUCTOR): Correct shift count + when making signed bit field; use EXPAND_NORMAL, not 0. + +Thu Feb 5 17:42:43 1998 Manfred Hollstein <manfred@s-direktnet.de> + + * libgcc2.c (__clear_insn_cache): On sysV68 enable the memctl + stuff only if MCT_TEXT is #define'd. + +Thu Feb 5 17:32:01 1998 Robert Hoehne <robert.hoehne@gmx.net> + + * Makefile.in: Changed most stamp-* to s-*. + +Tue Feb 3 19:45:50 1998 James Hawtin <oolon@ankh.org> + + * i386/sol2.h (STARTFILE_SPEC, LIB_SPEC): Update -pg files. + * configure.in (i[3456]86-*-solaris2*): Add gcrt1.o and gmon.o + to extra_parts. + +Tue Feb 3 17:28:48 1998 Christopher C Chimelis <chris@classnet.med.miami.edu> + + * configure.in (alpha*-*-linux-gnu*): Add extra_parts for crtstuff. + +Tue Feb 3 17:18:19 1998 Richard Earnshaw <rearnsha@arm.com> + + * arm.c (find_barrier): Fix one-too-many bug if fail to find barrier. + + * arm.c (arm_reload_in_hi): Handle cases where the MEM is too + complex for a simple offset. + +Tue Feb 3 16:14:21 1998 Robert Hoehne <robert.hoehne@gmx.net> + + * i386/xm-go32.h (EXECUTABLE_SUFFIX): Define. + + * configure.in (i[3456]86-pc-msdosdjgpp*): New entry. + +Tue Feb 3 07:33:58 1998 Richard Kenner <kenner@vlsi1.ultra.nyu.edu> + + * explow.c (probe_stack_range): Properly check for small + number of probes. + + * gcc.c (process_command, case 'V'): Validate arg. + + * configure.in (sbrk): Add check for needed declaration. + * acconfig.h (NEED_DECLARATION_SBRK): New entry. + * toplev.c (sbrk): Update declaration conditional. + * mips-tfile.c (sbrk, free): Likewise. + + * sparc/sysv4.h (DBX_REGISTER_NUMBER): Remove abort. + + * mips.c (mips_expand_prologue): Pass reg 25 to gen_loadgp. + * mips.md (loadgp): Add second operand for register number to add. + (builtin_setjmp_receiver): Pass new label and reg 31 to loadgp. + + * toplev.c: Include insn-codes.h, insn-config.h, and recog.h. + (compile_file): Try to emit nop to separate gcc_compiled symbol. + * Makefile.in (toplev.o): Depends on insn-{codes,config}.h, recog.h. + +Tue Feb 3 06:58:46 1998 Mark Mitchell <mmitchell@usa.net> + + * integrate.c (get_label_from_map): New function. + (expand_inline_function): Use it. + Initialize label_map to NULL_RTX instead of gen_label_rtx. + (copy_rtx_and_substitute): Use get_label_from_map. + * integrate.h (get_label_from_map): New function. + (set_label_from_map): New macro. + * unroll.c (unroll_loop, copy_loop_body): Use them. + +Mon Feb 2 16:33:01 1998 Richard Kenner <kenner@vlsi1.ultra.nyu.edu> + + * i386.md (mov{si,hi,sf,df,xf}cc{,_1}): Remove cases with branches. + + * rs6000/x-aix31 (INSTALL): Deleted. + * mips/x-dec-osf1, mips/x-osfrose, i386/x-osfrose: Likewise. + * arm/x-riscix: Likewise. + + * c-typeck.c (signed_or_unsigned_type): Properly handle pointer types. + +Mon Feb 2 15:33:58 1998 Michael P. Hayes <michaelh@ongaonga.chch.cri.nz> + + * unroll.c (copy_loop_body): Use single_set instead of + PATTERN to detect increment of an iv inside a PARALLEL. + +Fri Jan 16 20:29:50 1998 Paul Eggert <eggert@twinsun.com> + + * toplev.c (<unistd.h>): New include. + (get_run_time): Prefer CLK_TCK (if available) to HZ, and + prefer sysconf (_SC_CLK_TCK) (if available) to CLK_TCK. + * configure.in (sysconf): Call AC_CHECK_FUNCS. + +Wed Jan 14 20:10:51 1998 Paul Eggert <eggert@twinsun.com> + + * cccp.c: (rescan): Don't report line 0 as the possible real start + of an unterminated string constant. + Don't mishandle backslash-newlines that in are the output of + a macro expansion. Properly skip // style comments between a function + macro name and '(', as well as backslash-newlines in comments there. + (handle_directive): Handle / \ newline * between # and directive name. + In #include directives, \ does not escape ". + (do_include): For `#include "file', do not bother expanding into temp + buffer. When error encountered when expanding, do not try result. + (skip_if_group): When skipping an include directive, use include + tokenization, not normal tokenization. Backslash-newline is still + special when skipping. Handle * \ newline / correctly in comments + when skipping. + (skip_quoted_string): After \ newline, set *backslash_newlines_p + even if count_newlines is 0. + (macroexpand): Newline space is not a special marker inside a string. + (macroexpand, macarg): Do not generate \ddd for control characters + when stringifying; the C Standard does not allow this. + (macarg1): New arg MACRO. All callers changed. + Do not treat /*, //, or backslash-newline specially when processing + the output of a macro. + (discard_comments): Don't go past limit if looking for end of comment. + Discard backslash-newline properly when discarding comments. + (change_newlines): \" does not end a string. + (make_definition): Do not treat backslash-newline specially, as it + has already been removed before we get here. + + * profile.c (output_func_start_profiler): Don't fflush output + if -quiet. + * toplev.c (rest_of_compilation): Likewise. + + * i386/x-sco5 (CC): Remove trailing white space. + * x-convex (CCLIBFLAGS): Likewise. + * arm/t-semi (LIBGCC2_CFLAGS): Likewise. + +Wed Jan 7 18:02:42 1998 Richard Kenner <kenner@vlsi1.ultra.nyu.edu> + + * Version 2.8.0 released. + +Wed Jan 7 17:54:41 1998 J. Kean Johnston <jkj@sco.com> + + * i386/sco5.h ({END,START}FILE_SPEC): Link with correct crtbegin.o + and crtend.o when using -static. + +Wed Jan 7 17:49:14 1998 Jan Christiaan van Winkel <Jan.Christiaan.van.Winkel@ATComputing.nl> + + * cppexp.c (gansidecl.h): Include. + +Wed Jan 7 17:45:07 1998 Tristan Gingold <gingold@puccini.enst.fr> + + * expr.c (get_push_address): Use copy_to_reg instead of force_operand. + (emit_push_insn): Avoid null pointer deference if aggregate has no + types. + (expand_expr): Avoid finite but useless recursion. + (expand_builtin): Fix typo in calling function. + * function.c (assign_parms): Avoid useless call to chkr_set_right. + +Wed Jan 7 17:31:13 1998 Christian Iseli <Christian.Iseli@lslsun.epfl.ch> + + * combine.c (force_to_mode): Return if operand is a CLOBBER. + +Wed Jan 7 17:23:24 1998 Richard Kenner <kenner@vlsi1.ultra.nyu.edu> + + * x-rs6000 (INSTALL): Remove. + + * jump.c (jump_optimize): Don't use a hard reg as an operand + of a conditional move if small register classes. + +Wed Jan 7 17:09:28 1998 Jim Wilson <wilson@cygnus.com> + + * cse.c (max_insn_uid): New variable. + (cse_around_loop): Use it. + (cse_main): Set it. + +See ChangeLog.11 for earlier changes. + +Use a consistent time stamp format in ChangeLog entries. +Not everyone has Emacs 20 yet, so stick with Emacs 19 format for now. + +Local Variables: +add-log-time-format: current-time-string +End: diff --git a/gcc/Makefile.in b/gcc/Makefile.in index 36d9ee1..d455bb8 100644 --- a/gcc/Makefile.in +++ b/gcc/Makefile.in @@ -654,9 +654,8 @@ CCCP=@cpp_main@ # Files to be copied away after each stage in building. STAGESTUFF = *$(objext) insn-flags.h insn-config.h insn-codes.h \ insn-output.c insn-recog.c insn-emit.c insn-extract.c insn-peep.c \ - insn-attr.h insn-attrtab.c insn-opinit.c genrtl.c genrtl.h tree-check.h \ - s-flags s-config s-codes s-mlib \ - s-output s-recog s-emit s-extract s-peep \ + s-flags s-config s-codes s-mlib s-under\ + s-output s-recog s-emit s-extract s-peep s-check \ s-attr s-attrtab s-opinit s-crt s-crtS s-crt0 \ genemit$(build_exeext) genoutput$(build_exeext) genrecog$(build_exeext) \ genextract$(build_exeext) genflags$(build_exeext) gencodes$(build_exeext) \ @@ -1560,7 +1559,7 @@ s-codes : $(md_file) gencodes $(srcdir)/move-if-change touch s-codes insn-emit.o : insn-emit.c $(CONFIG_H) $(RTL_H) $(EXPR_H) real.h output.h \ - insn-config.h insn-flags.h insn-codes.h system.h + insn-config.h insn-flags.h insn-codes.h system.h reload.h $(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) -c insn-emit.c insn-emit.c: s-emit ; @true @@ -2500,11 +2499,13 @@ uninstall: lang.uninstall -rm -rf $(bindir)/$(GCC_CROSS_NAME)$(exeext) -rm -rf $(bindir)/protoize$(exeext) -rm -rf $(bindir)/unprotoize$(exeext) + -rm -rf $(bindir)/gcov$(exeext) -rm -rf $(mandir)/$(GCC_INSTALL_NAME)$(manext) -rm -rf $(mandir)/$(GCC_CROSS_NAME)$(manext) -rm -rf $(mandir)/cccp$(manext) -rm -rf $(mandir)/protoize$(manext) -rm -rf $(mandir)/unprotoize$(manext) + -rm -f $(infodir)/cpp.info* $(infodir)/gcc.info* # # These targets are for the dejagnu testsuites. The file site.exp # contains global variables that all the testsuites will use. diff --git a/gcc/acconfig.h b/gcc/acconfig.h index f2dd582..16e4ae5 100644 --- a/gcc/acconfig.h +++ b/gcc/acconfig.h @@ -64,4 +64,7 @@ /* Whether getwd must be declared even if <unistd.h> is included. */ #undef NEED_DECLARATION_GETWD + +/* Define if you want expensive run-time checks. */ +#undef ENABLE_CHECKING @TOP@ diff --git a/gcc/c-decl.c b/gcc/c-decl.c index 15eb740..bd4e7a2 100644 --- a/gcc/c-decl.c +++ b/gcc/c-decl.c @@ -3798,6 +3798,10 @@ start_decl (declarator, declspecs, initialized, attributes, prefix_attributes) if (! flag_no_common || ! TREE_PUBLIC (decl)) DECL_COMMON (decl) = 1; +#ifdef SET_DEFAULT_DECL_ATTRIBUTES + SET_DEFAULT_DECL_ATTRIBUTES (decl, attributes); +#endif + /* Set attributes here so if duplicate decl, will have proper attributes. */ decl_attributes (decl, attributes, prefix_attributes); diff --git a/gcc/c-lex.c b/gcc/c-lex.c index adc70fa..c33ade5 100644 --- a/gcc/c-lex.c +++ b/gcc/c-lex.c @@ -544,6 +544,11 @@ check_newline () token = yylex (); if (token != IDENTIFIER) goto skipline; + if (nextchar >= 0) + c = nextchar, nextchar = -1; + else + c = GETC (); + ungetc (c, finput); if (HANDLE_PRAGMA (finput, yylval.ttype)) { c = GETC (); diff --git a/gcc/combine.c b/gcc/combine.c index f525229..ea6bcb8 100644 --- a/gcc/combine.c +++ b/gcc/combine.c @@ -3771,9 +3771,8 @@ simplify_rtx (x, op0_mode, last, in_dest) /* If we know that the value is already truncated, we can replace the TRUNCATE with a SUBREG. */ - if (GET_MODE_BITSIZE (GET_MODE (XEXP (x, 0))) <= HOST_BITS_PER_WIDE_INT - && (nonzero_bits (XEXP (x, 0), GET_MODE (XEXP (x, 0))) - &~ GET_MODE_MASK (mode)) == 0) + if (num_sign_bit_copies (XEXP (x, 0), GET_MODE (XEXP (x, 0))) + >= GET_MODE_BITSIZE (mode) + 1) return gen_lowpart_for_combine (mode, XEXP (x, 0)); /* A truncate of a comparison can be replaced with a subreg if @@ -4702,7 +4701,7 @@ simplify_set (x) we only care about the low bits of the result. However, on machines without WORD_REGISTER_OPERATIONS defined, we cannot - perform a narrower operation that requested since the high-order bits will + perform a narrower operation than requested since the high-order bits will be undefined. On machine where it is defined, this transformation is safe as long as M1 and M2 have the same number of words. */ @@ -6953,8 +6952,6 @@ rtx_equal_for_field_assignment_p (x, y) rtx x; rtx y; { - rtx last_x, last_y; - if (x == y || rtx_equal_p (x, y)) return 1; @@ -6976,19 +6973,12 @@ rtx_equal_for_field_assignment_p (x, y) gen_lowpart_for_combine (GET_MODE (SUBREG_REG (x)), y))) return 1; - last_x = get_last_value (x); - last_y = get_last_value (y); - - return ((last_x != 0 - && GET_CODE (last_x) != CLOBBER - && rtx_equal_for_field_assignment_p (last_x, y)) - || (last_y != 0 - && GET_CODE (last_y) != CLOBBER - && rtx_equal_for_field_assignment_p (x, last_y)) - || (last_x != 0 && last_y != 0 - && GET_CODE (last_x) != CLOBBER - && GET_CODE (last_y) != CLOBBER - && rtx_equal_for_field_assignment_p (last_x, last_y))); + /* We used to see if get_last_value of X and Y were the same but that's + not correct. In one direction, we'll cause the assignment to have + the wrong destination and in the case, we'll import a register into this + insn that might have already have been dead. So fail if none of the + above cases are true. */ + return 0; } /* See if X, a SET operation, can be rewritten as a bit-field assignment. @@ -10160,14 +10150,20 @@ simplify_comparison (code, pop0, pop1) if (GET_CODE (XEXP (op0, 0)) == SUBREG && ((mode_width >= GET_MODE_BITSIZE (GET_MODE (SUBREG_REG (XEXP (op0, 0))))) - || subreg_lowpart_p (XEXP (op0, 0))) +#ifdef WORD_REGISTER_OPERATIONS + || subreg_lowpart_p (XEXP (op0, 0)) +#endif + ) && GET_CODE (XEXP (op0, 1)) == CONST_INT && mode_width <= HOST_BITS_PER_WIDE_INT && (GET_MODE_BITSIZE (GET_MODE (SUBREG_REG (XEXP (op0, 0)))) <= HOST_BITS_PER_WIDE_INT) && (INTVAL (XEXP (op0, 1)) & ~ mask) == 0 && 0 == (~ GET_MODE_MASK (GET_MODE (SUBREG_REG (XEXP (op0, 0)))) - & INTVAL (XEXP (op0, 1)))) + & INTVAL (XEXP (op0, 1))) + && INTVAL (XEXP (op0, 1)) != mask + && (INTVAL (XEXP (op0, 1)) + != GET_MODE_MASK (GET_MODE (SUBREG_REG (XEXP (op0, 0)))))) { op0 diff --git a/gcc/config/alpha/alpha.c b/gcc/config/alpha/alpha.c index 0a0c4f1..5bcb1fb 100644 --- a/gcc/config/alpha/alpha.c +++ b/gcc/config/alpha/alpha.c @@ -2808,6 +2808,51 @@ print_operand (file, x, code) } } +/* Emit RTL insns to initialize the variable parts of a trampoline at + TRAMP. 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. + We assume here that a function will be called many more times than + its address is taken (e.g., it might be passed to qsort), so we + take the trouble to initialize the "hint" field in the JMP insn. + Note that the hint field is PC (new) + 4 * bits 13:0. */ + +void +alpha_initialize_trampoline (tramp, fnaddr, cxt) + rtx tramp; + rtx fnaddr; + rtx cxt; +{ + rtx temp, temp1, addr; + + /* Store function address and CXT. */ + addr = memory_address (Pmode, plus_constant (tramp, 16)); + emit_move_insn (gen_rtx (MEM, Pmode, addr), fnaddr); + addr = memory_address (Pmode, plus_constant (tramp, 24)); + emit_move_insn (gen_rtx (MEM, Pmode, addr), cxt); + + /* Compute hint value. */ + temp = force_operand (plus_constant (tramp, 12), NULL_RTX); + temp = expand_binop (DImode, sub_optab, fnaddr, temp, temp, 1, OPTAB_WIDEN); + temp = expand_shift (RSHIFT_EXPR, Pmode, temp, + build_int_2 (2, 0), NULL_RTX, 1); + temp = expand_and (gen_lowpart (SImode, temp), GEN_INT (0x3fff), 0); + + /* Merge in the hint. */ + addr = memory_address (SImode, plus_constant (tramp, 8)); + temp1 = force_reg (SImode, gen_rtx (MEM, SImode, addr)); + temp1 = expand_and (temp1, GEN_INT (0xffffc000), NULL_RTX); + temp1 = expand_binop (SImode, ior_optab, temp1, temp, temp1, 1, OPTAB_WIDEN); + emit_move_insn (gen_rtx (MEM, SImode, addr), temp1); + +#ifdef TRANSFER_FROM_TRAMPOLINE + emit_library_call (gen_rtx (SYMBOL_REF, Pmode, "__enable_execute_stack"), + 0, VOIDmode, 1, addr, Pmode); +#endif + + emit_insn (gen_rtx (UNSPEC_VOLATILE, VOIDmode, + gen_rtvec (1, const0_rtx), 0)); +} + /* Do what is necessary for `va_start'. The argument is ignored; We look at the current function to determine if stdarg or varargs is used and fill in an initial va_list. A pointer to this constructor diff --git a/gcc/config/alpha/alpha.h b/gcc/config/alpha/alpha.h index 00e5c91..d7bb2d1 100644 --- a/gcc/config/alpha/alpha.h +++ b/gcc/config/alpha/alpha.h @@ -676,12 +676,17 @@ enum reg_class { NO_REGS, GENERAL_REGS, FLOAT_REGS, ALL_REGS, For the Alpha, `Q' means that this is a memory operand but not a reference to an unaligned location. + `R' is a SYMBOL_REF that has SYMBOL_REF_FLAG set or is the current - function. */ + function. + + 'S' is a 6-bit constant (valid for a shift insn). */ #define EXTRA_CONSTRAINT(OP, C) \ - ((C) == 'Q' ? GET_CODE (OP) == MEM && GET_CODE (XEXP (OP, 0)) != AND \ - : (C) == 'R' ? current_file_function_operand (OP, Pmode) \ + ((C) == 'Q' ? GET_CODE (OP) == MEM && GET_CODE (XEXP (OP, 0)) != AND \ + : (C) == 'R' ? current_file_function_operand (OP, Pmode) \ + : (C) == 'S' ? (GET_CODE (OP) == CONST_INT \ + && (unsigned HOST_WIDE_INT) INTVAL (OP) < 64) \ : 0) /* Given an rtx X being reloaded into a reg required to be @@ -1202,38 +1207,8 @@ extern void output_end_prologue (); to initialize the "hint" field in the JMP insn. Note that the hint field is PC (new) + 4 * bits 13:0. */ -#define INITIALIZE_TRAMPOLINE(TRAMP, FNADDR, CXT) \ -{ \ - rtx _temp, _temp1, _addr; \ - \ - _addr = memory_address (Pmode, plus_constant ((TRAMP), 16)); \ - emit_move_insn (gen_rtx (MEM, Pmode, _addr), (FNADDR)); \ - _addr = memory_address (Pmode, plus_constant ((TRAMP), 24)); \ - emit_move_insn (gen_rtx (MEM, Pmode, _addr), (CXT)); \ - \ - _temp = force_operand (plus_constant ((TRAMP), 12), NULL_RTX); \ - _temp = expand_binop (DImode, sub_optab, (FNADDR), _temp, _temp, 1, \ - OPTAB_WIDEN); \ - _temp = expand_shift (RSHIFT_EXPR, Pmode, _temp, \ - build_int_2 (2, 0), NULL_RTX, 1); \ - _temp = expand_and (gen_lowpart (SImode, _temp), \ - GEN_INT (0x3fff), 0); \ - \ - _addr = memory_address (SImode, plus_constant ((TRAMP), 8)); \ - _temp1 = force_reg (SImode, gen_rtx (MEM, SImode, _addr)); \ - _temp1 = expand_and (_temp1, GEN_INT (0xffffc000), NULL_RTX); \ - _temp1 = expand_binop (SImode, ior_optab, _temp1, _temp, _temp1, 1, \ - OPTAB_WIDEN); \ - \ - emit_move_insn (gen_rtx (MEM, SImode, _addr), _temp1); \ - \ - emit_library_call (gen_rtx (SYMBOL_REF, Pmode, \ - "__enable_execute_stack"), \ - 0, VOIDmode, 1,_addr, Pmode); \ - \ - emit_insn (gen_rtx (UNSPEC_VOLATILE, VOIDmode, \ - gen_rtvec (1, const0_rtx), 0)); \ -} +#define INITIALIZE_TRAMPOLINE(TRAMP, FNADDR, CXT) \ + alpha_initialize_trampoline (TRAMP, FNADDR, CXT) /* Attempt to turn on access permissions for the stack. */ @@ -2127,6 +2102,7 @@ do { \ } \ } while (0) + /* Define results of standard character escape sequences. */ #define TARGET_BELL 007 #define TARGET_BS 010 diff --git a/gcc/config/alpha/alpha.md b/gcc/config/alpha/alpha.md index 6e280cb..a8e5c8e 100644 --- a/gcc/config/alpha/alpha.md +++ b/gcc/config/alpha/alpha.md @@ -1177,7 +1177,7 @@ (define_insn "ashldi3" [(set (match_operand:DI 0 "register_operand" "=r,r") (ashift:DI (match_operand:DI 1 "reg_or_0_operand" "rJ,rJ") - (match_operand:DI 2 "reg_or_6bit_operand" "P,rI")))] + (match_operand:DI 2 "reg_or_6bit_operand" "P,rS")))] "" "* { @@ -1218,7 +1218,7 @@ (define_insn "lshrdi3" [(set (match_operand:DI 0 "register_operand" "=r") (lshiftrt:DI (match_operand:DI 1 "reg_or_0_operand" "rJ") - (match_operand:DI 2 "reg_or_6bit_operand" "rI")))] + (match_operand:DI 2 "reg_or_6bit_operand" "rS")))] "" "srl %r1,%2,%0" [(set_attr "type" "shift")]) @@ -1226,7 +1226,7 @@ (define_insn "ashrdi3" [(set (match_operand:DI 0 "register_operand" "=r") (ashiftrt:DI (match_operand:DI 1 "reg_or_0_operand" "rJ") - (match_operand:DI 2 "reg_or_6bit_operand" "rI")))] + (match_operand:DI 2 "reg_or_6bit_operand" "rS")))] "" "sra %r1,%2,%0" [(set_attr "type" "shift")]) diff --git a/gcc/config/alpha/linux.h b/gcc/config/alpha/linux.h index 47e06c6..aa43450 100644 --- a/gcc/config/alpha/linux.h +++ b/gcc/config/alpha/linux.h @@ -1,7 +1,7 @@ -/* Definitions of target machine for GNU compiler, - for Alpha Linux-based GNU systems. - Copyright (C) 1996, 1997 Free Software Foundation, Inc. - Contributed by Richard Henderson. +/* Definitions of target machine for GNU compiler, for Alpha Linux-based GNU + systems using ECOFF. + Copyright (C) 1996, 1997, 1998 Free Software Foundation, Inc. + Contributed by Bob Manson. This file is part of GNU CC. @@ -44,28 +44,4 @@ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ #undef TARGET_CAN_FAULT_IN_PROLOGUE #define TARGET_CAN_FAULT_IN_PROLOGUE 1 -/* 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. - - This differs from the standard version in that: - - We do not initialize the "hint" field because it only has an 8k - range and so the target is in range of something on the stack. - Omitting the hint saves a bogus branch-prediction cache line load. - - GNU/Linux always has an executable stack -- no need for a system call. */ - -#undef INITIALIZE_TRAMPOLINE -#define INITIALIZE_TRAMPOLINE(TRAMP, FNADDR, CXT) \ -{ \ - rtx _addr; \ - \ - _addr = memory_address (Pmode, plus_constant ((TRAMP), 16)); \ - emit_move_insn (gen_rtx (MEM, Pmode, _addr), (FNADDR)); \ - _addr = memory_address (Pmode, plus_constant ((TRAMP), 24)); \ - emit_move_insn (gen_rtx (MEM, Pmode, _addr), (CXT)); \ - \ - emit_insn (gen_rtx (UNSPEC_VOLATILE, VOIDmode, \ - gen_rtvec (1, const0_rtx), 0)); \ -} +#undef ASM_FINAL_SPEC diff --git a/gcc/config/arc/arc.c b/gcc/config/arc/arc.c index 7272cc9..e2f46e7 100644 --- a/gcc/config/arc/arc.c +++ b/gcc/config/arc/arc.c @@ -1910,7 +1910,7 @@ arc_final_prescan_insn (insn, opvec, noperands) record_cc_ref (insn); /* Allow -mdebug-ccfsm to turn this off so we can see how well it does. - We can't do this in macro FINAL_PRESCAN_INSN because it's called from + We can't do this in macro FINAL_PRESCAN_INSN because its called from final_scan_insn which has `optimize' as a local. */ if (optimize < 2 || TARGET_NO_COND_EXEC) return; diff --git a/gcc/config/arc/arc.h b/gcc/config/arc/arc.h index 0ddc91a..61ca39f 100644 --- a/gcc/config/arc/arc.h +++ b/gcc/config/arc/arc.h @@ -1583,7 +1583,7 @@ do { if ((LOG) != 0) fprintf (FILE, "\t.align %d\n", 1 << (LOG)); } while (0) After generation of rtl, the compiler makes no further distinction between pointers and any other objects of this machine mode. */ /* ??? The arc doesn't have full 32 bit pointers, but making this PSImode has - it's own problems (you have to add extendpsisi2 and trucnsipsi2 but how does + its own problems (you have to add extendpsisi2 and trucnsipsi2 but how does one do it without getting excess code?). Try to avoid it. */ #define Pmode SImode diff --git a/gcc/config/dsp16xx/dsp16xx.h b/gcc/config/dsp16xx/dsp16xx.h index 785e8ca..b01db10 100644 --- a/gcc/config/dsp16xx/dsp16xx.h +++ b/gcc/config/dsp16xx/dsp16xx.h @@ -138,7 +138,7 @@ extern char *output_block_move(); /* Tell gcc where to look for the startfile */ #define STANDARD_STARTFILE_PREFIX "/d1600/lib" -/* Tell gcc where to look for it's executables */ +/* Tell gcc where to look for its executables */ #define STANDARD_EXEC_PREFIX "/d1600/bin" /* Command line options to the AT&T assembler */ diff --git a/gcc/config/h8300/h8300.c b/gcc/config/h8300/h8300.c index a3af135..560a20b 100644 --- a/gcc/config/h8300/h8300.c +++ b/gcc/config/h8300/h8300.c @@ -3037,7 +3037,7 @@ output_simode_bld (bild, log2, operands) return ""; } -/* Given INSN and it's current length LENGTH, return the adjustment +/* Given INSN and its current length LENGTH, return the adjustment (in bytes) to correctly compute INSN's length. We use this to get the lengths of various memory references correct. */ diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md index 4d7e79e..423a249 100644 --- a/gcc/config/i386/i386.md +++ b/gcc/config/i386/i386.md @@ -439,8 +439,8 @@ [(set (cc0) (match_operator 2 "VOIDmode_compare_op" [(float_extend:XF - (match_operand:DF 1 "nonimmediate_operand" "fm")) - (match_operand:XF 0 "register_operand" "f")])) + (match_operand:DF 0 "nonimmediate_operand" "fm")) + (match_operand:XF 1 "register_operand" "f")])) (clobber (match_scratch:HI 3 "=a"))] "TARGET_80387" "* return output_float_compare (insn, operands);") @@ -457,6 +457,16 @@ (define_insn "" [(set (cc0) + (match_operator 2 "VOIDmode_compare_op" + [(float_extend:XF + (match_operand:SF 0 "nonimmediate_operand" "fm")) + (match_operand:XF 1 "register_operand" "f")])) + (clobber (match_scratch:HI 3 "=a"))] + "TARGET_80387" + "* return output_float_compare (insn, operands);") + +(define_insn "" + [(set (cc0) (compare:CCFPEQ (match_operand:XF 0 "register_operand" "f") (match_operand:XF 1 "register_operand" "f"))) (clobber (match_scratch:HI 2 "=a"))] diff --git a/gcc/config/i386/linux-aout.h b/gcc/config/i386/linux-aout.h index 349642f..98cf55e 100644 --- a/gcc/config/i386/linux-aout.h +++ b/gcc/config/i386/linux-aout.h @@ -1,5 +1,5 @@ /* Definitions for Intel 386 running Linux-based GNU systems using a.out. - Copyright (C) 1992, 1994, 1995, 1997 Free Software Foundation, Inc. + Copyright (C) 1992, 1994, 1995, 1997, 1998 Free Software Foundation, Inc. Contributed by H.J. Lu (hjl@nynexst.com) This file is part of GNU CC. diff --git a/gcc/config/i386/linux-oldld.h b/gcc/config/i386/linux-oldld.h index 116a5bf..a67fd0f 100644 --- a/gcc/config/i386/linux-oldld.h +++ b/gcc/config/i386/linux-oldld.h @@ -1,6 +1,6 @@ /* Definitions for Intel 386 running Linux-based GNU systems with pre-BFD a.out linkers. - Copyright (C) 1995, 1997 Free Software Foundation, Inc. + Copyright (C) 1995, 1997, 1998 Free Software Foundation, Inc. Contributed by Michael Meissner (meissner@cygnus.com) This file is part of GNU CC. diff --git a/gcc/config/i386/linux.h b/gcc/config/i386/linux.h index 649c29e..e435f80 100644 --- a/gcc/config/i386/linux.h +++ b/gcc/config/i386/linux.h @@ -1,5 +1,5 @@ -/* Definitions for Intel 386 running Linux with ELF format - Copyright (C) 1994, 1995, 1996, 1997 Free Software Foundation, Inc. +/* Definitions for Intel 386 running Linux-based GNU systems with ELF format. + Copyright (C) 1994, 1995, 1996, 1997, 1998 Free Software Foundation, Inc. Contributed by Eric Youngdale. Modified for stabs-in-ELF by H.J. Lu. diff --git a/gcc/config/m32r/m32r.h b/gcc/config/m32r/m32r.h index dff8172..1503bdf 100644 --- a/gcc/config/m32r/m32r.h +++ b/gcc/config/m32r/m32r.h @@ -1910,7 +1910,7 @@ do { \ After generation of rtl, the compiler makes no further distinction between pointers and any other objects of this machine mode. */ /* ??? The M32R doesn't have full 32 bit pointers, but making this PSImode has - it's own problems (you have to add extendpsisi2 and truncsipsi2). + its own problems (you have to add extendpsisi2 and truncsipsi2). Try to avoid it. */ #define Pmode SImode diff --git a/gcc/config/m68k/lb1sf68.asm b/gcc/config/m68k/lb1sf68.asm index 7d6dba3..9e33ccb 100644 --- a/gcc/config/m68k/lb1sf68.asm +++ b/gcc/config/m68k/lb1sf68.asm @@ -1,5 +1,5 @@ /* libgcc1 routines for 68000 w/o floating-point hardware. - Copyright (C) 1994, 1996, 1997 Free Software Foundation, Inc. + Copyright (C) 1994, 1996, 1997, 1998 Free Software Foundation, Inc. This file is part of GNU CC. diff --git a/gcc/config/m88k/m88k.h b/gcc/config/m88k/m88k.h index 441674c..b74ae45 100644 --- a/gcc/config/m88k/m88k.h +++ b/gcc/config/m88k/m88k.h @@ -2079,7 +2079,7 @@ do { \ sprintf (LABEL, TARGET_SVR4 ? "*.%s%d" : "*@%s%d", PREFIX, NUM) /* Internal macro to get a single precision floating point value into - an int, so we can print it's value in hex. */ + an int, so we can print its value in hex. */ #define FLOAT_TO_INT_INTERNAL( FVALUE, IVALUE ) \ { union { \ REAL_VALUE_TYPE d; \ diff --git a/gcc/config/m88k/m88k.md b/gcc/config/m88k/m88k.md index c94e6fd..118ebe3 100644 --- a/gcc/config/m88k/m88k.md +++ b/gcc/config/m88k/m88k.md @@ -1125,7 +1125,7 @@ ;; The comparison operations store the comparison into a register and ;; record that register. The following Bxx or Sxx insn uses that ;; register as an input. To facilitate use of bcnd instead of cmp/bb1, -;; cmpsi records it's operands and produces no code when any operand +;; cmpsi records its operands and produces no code when any operand ;; is constant. In this case, the Bxx insns use gen_bcnd and the ;; Sxx insns use gen_test to ensure a cmp has been emitted. ;; @@ -3972,7 +3972,7 @@ ;; This insn is used for some loop tests, typically loops reversed when ;; strength reduction is used. It is actually created when the instruction ;; combination phase combines the special loop test. Since this insn -;; is both a jump insn and has an output, it must deal with it's own +;; is both a jump insn and has an output, it must deal with its own ;; reloads, hence the `m' constraints. The `!' constraints direct reload ;; to not choose the register alternatives in the event a reload is needed. diff --git a/gcc/config/mips/iris6.h b/gcc/config/mips/iris6.h index 536ceee..2eda40a 100644 --- a/gcc/config/mips/iris6.h +++ b/gcc/config/mips/iris6.h @@ -96,6 +96,9 @@ Boston, MA 02111-1307, USA. */ #undef PREFERRED_DEBUGGING_TYPE #define PREFERRED_DEBUGGING_TYPE DWARF2_DEBUG +/* Force the generation of dwarf .debug_frame sections even if not + compiling -g. This guarantees that we can unwind the stack. */ +#define DWARF2_FRAME_INFO 1 /* The size in bytes of a DWARF field indicating an offset or length relative to a debug info section, specified to be 4 bytes in the DWARF-2 specification. The SGI/MIPS ABI defines it to be the same as PTR_SIZE. */ diff --git a/gcc/config/mips/mips.h b/gcc/config/mips/mips.h index 5908959..52b8c8e 100644 --- a/gcc/config/mips/mips.h +++ b/gcc/config/mips/mips.h @@ -3992,7 +3992,7 @@ while (0) #define ASM_OUTPUT_SOURCE_LINE(STREAM, LINE) \ mips_output_lineno (STREAM, LINE) -/* The MIPS implementation uses some labels for it's own purpose. The +/* The MIPS implementation uses some labels for its own purpose. The following lists what labels are created, and are all formed by the pattern $L[a-z].*. The machine independent portion of GCC creates labels matching: $L[A-Z][0-9]+ and $L[0-9]+. diff --git a/gcc/config/mips/mips.md b/gcc/config/mips/mips.md index 50ff640..fae82e5 100644 --- a/gcc/config/mips/mips.md +++ b/gcc/config/mips/mips.md @@ -4626,7 +4626,7 @@ move\\t%0,%z4\\n\\ (define_expand "reload_indi" [(set (match_operand:DI 0 "register_operand" "=b") - (match_operand:DI 1 "movdi_operand" "b")) + (match_operand:DI 1 "" "b")) (clobber (match_operand:TI 2 "register_operand" "=&d"))] "TARGET_64BIT" " @@ -4641,10 +4641,12 @@ move\\t%0,%z4\\n\\ if (GET_CODE (operands[1]) == MEM) { rtx memword, offword, hiword, loword; + rtx addr = find_replacement (&XEXP (operands[1], 0)); + rtx op1 = change_address (operands[1], VOIDmode, addr); scratch = gen_rtx (REG, SImode, REGNO (scratch)); - memword = change_address (operands[1], SImode, NULL_RTX); - offword = change_address (adj_offsettable_operand (operands[1], 4), + memword = change_address (op1, SImode, NULL_RTX); + offword = change_address (adj_offsettable_operand (op1, 4), SImode, NULL_RTX); if (BYTES_BIG_ENDIAN) { @@ -4693,7 +4695,7 @@ move\\t%0,%z4\\n\\ ;; use a TImode scratch reg. (define_expand "reload_outdi" - [(set (match_operand:DI 0 "general_operand" "=b") + [(set (match_operand:DI 0 "" "=b") (match_operand:DI 1 "se_register_operand" "b")) (clobber (match_operand:TI 2 "register_operand" "=&d"))] "TARGET_64BIT" @@ -4715,10 +4717,12 @@ move\\t%0,%z4\\n\\ if (GET_CODE (operands[0]) == MEM) { rtx scratch, memword, offword, hiword, loword; + rtx addr = find_replacement (&XEXP (operands[0], 0)); + rtx op0 = change_address (operands[0], VOIDmode, addr); scratch = gen_rtx (REG, SImode, REGNO (operands[2])); - memword = change_address (operands[0], SImode, NULL_RTX); - offword = change_address (adj_offsettable_operand (operands[0], 4), + memword = change_address (op0, SImode, NULL_RTX); + offword = change_address (adj_offsettable_operand (op0, 4), SImode, NULL_RTX); if (BYTES_BIG_ENDIAN) { diff --git a/gcc/config/ns32k/ns32k.c b/gcc/config/ns32k/ns32k.c index 1c759ae..8c2fb1f 100644 --- a/gcc/config/ns32k/ns32k.c +++ b/gcc/config/ns32k/ns32k.c @@ -495,7 +495,7 @@ print_operand (file, x, code) u.i[0] = CONST_DOUBLE_LOW (x); u.i[1] = CONST_DOUBLE_HIGH (x); PUT_IMMEDIATE_PREFIX(file); #ifdef SEQUENT_ASM - /* Sequent likes it's floating point constants as integers */ + /* Sequent likes its floating point constants as integers */ fprintf (file, "0Dx%08x%08x", u.i[1], u.i[0]); #else #ifdef ENCORE_ASM diff --git a/gcc/config/sparc/sparc.h b/gcc/config/sparc/sparc.h index 5d2059c..77bae75 100644 --- a/gcc/config/sparc/sparc.h +++ b/gcc/config/sparc/sparc.h @@ -1390,7 +1390,7 @@ extern char leaf_reg_remap[]; : gen_rtx_MEM (MODE, gen_rtx_PLUS (Pmode, frame_pointer_rtx, \ GEN_INT (STARTING_FRAME_OFFSET)))) -/* Get_secondary_mem widens it's argument to BITS_PER_WORD which loses on v9 +/* Get_secondary_mem widens its argument to BITS_PER_WORD which loses on v9 because the movsi and movsf patterns don't handle r/f moves. For v8 we copy the default definition. */ #define SECONDARY_MEMORY_NEEDED_MODE(MODE) \ diff --git a/gcc/config/sparc/sparc.md b/gcc/config/sparc/sparc.md index a8fb8f8..ff77c99 100644 --- a/gcc/config/sparc/sparc.md +++ b/gcc/config/sparc/sparc.md @@ -5614,7 +5614,7 @@ if (! TARGET_ARCH64) if (GET_CODE (XEXP (operands[0], 0)) == LABEL_REF) { /* This is really a PIC sequence. We want to represent - it as a funny jump so it's delay slots can be filled. + it as a funny jump so its delay slots can be filled. ??? But if this really *is* a CALL, will not it clobber the call-clobbered registers? We lose this if it is a JUMP_INSN. diff --git a/gcc/configure b/gcc/configure index dfa8e26..8508761 100755 --- a/gcc/configure +++ b/gcc/configure @@ -2261,6 +2261,14 @@ for machine in $build $host $target; do ;; esac ;; + alpha*-*-vxworks*) + tm_file="${tm_file} dbx.h alpha/vxworks.h" + if x$gas != xyes + then + extra_passes="mips-tfile mips-tdump" + fi + use_collect2=yes + ;; alpha*-*-winnt*) tm_file="${tm_file} alpha/win-nt.h" xm_file="${xm_file} config/winnt/xm-winnt.h alpha/xm-winnt.h" @@ -5139,7 +5147,7 @@ fi # Figure out what assembler alignment features are present. echo $ac_n "checking assembler alignment features""... $ac_c" 1>&6 -echo "configure:5143: checking assembler alignment features" >&5 +echo "configure:5151: checking assembler alignment features" >&5 gcc_cv_as= gcc_cv_as_alignment_features= if [ -x as$host_exeext ]; then diff --git a/gcc/configure.in b/gcc/configure.in index bdfe74a..f13e942 100644 --- a/gcc/configure.in +++ b/gcc/configure.in @@ -417,6 +417,14 @@ for machine in $build $host $target; do ;; esac ;; + alpha*-*-vxworks*) + tm_file="${tm_file} dbx.h alpha/vxworks.h" + if [ x$gas != xyes ] + then + extra_passes="mips-tfile mips-tdump" + fi + use_collect2=yes + ;; alpha*-*-winnt*) tm_file="${tm_file} alpha/win-nt.h" xm_file="${xm_file} config/winnt/xm-winnt.h alpha/xm-winnt.h" diff --git a/gcc/configure.lang b/gcc/configure.lang index 35215fe..d96b6d8 100644 --- a/gcc/configure.lang +++ b/gcc/configure.lang @@ -3,7 +3,7 @@ # subdirectories which conform to the old GCC configure mechanism # for such subdirectories. -# Copyright (C) 1997 Free Software Foundation, Inc. +# Copyright (C) 1997, 1998 Free Software Foundation, Inc. #This file is part of GNU CC. diff --git a/gcc/cplus-dem.c b/gcc/cplus-dem.c index b67250f..b05c948 100644 --- a/gcc/cplus-dem.c +++ b/gcc/cplus-dem.c @@ -1,5 +1,5 @@ /* Demangler for GNU C++ - Copyright 1989, 1991, 1994, 1995, 1996, 1997 Free Software Foundation, Inc. + Copyright 1989, 91, 94, 95, 96, 97, 1998 Free Software Foundation, Inc. Written by James Clark (jjc@jclark.uucp) Rewritten by Fred Fish (fnf@cygnus.com) for ARM and Lucid demangling @@ -3128,8 +3128,8 @@ forget_types (work) foo__FiR3fooT1T2T1T2 __ct__3fooFiR3fooT1T2T1T2 - Note that g++ bases it's type numbers starting at zero and counts all - previously seen types, while lucid/ARM bases it's type numbers starting + Note that g++ bases its type numbers starting at zero and counts all + previously seen types, while lucid/ARM bases its type numbers starting at one and only considers types after it has seen the 'F' character indicating the start of the function args. For lucid/ARM style, we account for this difference by discarding any previously seen types when @@ -1541,7 +1541,7 @@ invalidate (x, full_mode) register unsigned hash = HASH (x, GET_MODE (x)); /* Remove REGNO from any quantity list it might be on and indicate - that it's value might have changed. If it is a pseudo, remove its + that its value might have changed. If it is a pseudo, remove its entry from the hash table. For a hard register, we do the first two actions above for any diff --git a/gcc/dbxout.c b/gcc/dbxout.c index e9e7072..5ab3736 100644 --- a/gcc/dbxout.c +++ b/gcc/dbxout.c @@ -1960,7 +1960,7 @@ dbxout_symbol_location (decl, type, suffix, home) /* Don't mention a variable at all if it was completely optimized into nothingness. - If the decl was from an inline function, then it's rtl + If the decl was from an inline function, then its rtl is not identically the rtl that was used in this particular compilation. */ if (GET_CODE (home) == REG) diff --git a/gcc/dwarf2out.c b/gcc/dwarf2out.c index 6610e91..61b16ca 100644 --- a/gcc/dwarf2out.c +++ b/gcc/dwarf2out.c @@ -59,6 +59,9 @@ int dwarf2out_do_frame () { return (write_symbols == DWARF2_DEBUG +#ifdef DWARF2_FRAME_INFO + || DWARF2_FRAME_INFO +#endif #ifdef DWARF2_UNWIND_INFO || (flag_exceptions && ! exceptions_via_longjmp) #endif @@ -9188,7 +9191,7 @@ gen_block_die (stmt, context_die, depth) } /* Generate all of the decls declared within a given scope and (recursively) - all of it's sub-blocks. */ + all of its sub-blocks. */ static void decls_for_scope (stmt, context_die, depth) diff --git a/gcc/emit-rtl.c b/gcc/emit-rtl.c index 63f0d82..2ca007a2 100644 --- a/gcc/emit-rtl.c +++ b/gcc/emit-rtl.c @@ -59,6 +59,7 @@ Boston, MA 02111-1307, USA. */ enum machine_mode byte_mode; /* Mode whose width is BITS_PER_UNIT. */ enum machine_mode word_mode; /* Mode whose width is BITS_PER_WORD. */ +enum machine_mode double_mode; /* Mode whose width is DOUBLE_TYPE_SIZE. */ enum machine_mode ptr_mode; /* Mode whose width is POINTER_SIZE. */ /* This is reset to LAST_VIRTUAL_REGISTER + 1 at the start of each function. @@ -3385,6 +3386,7 @@ init_emit_once (line_numbers) { int i; enum machine_mode mode; + enum machine_mode double_mode; no_line_numbers = ! line_numbers; @@ -3394,6 +3396,7 @@ init_emit_once (line_numbers) byte_mode = VOIDmode; word_mode = VOIDmode; + double_mode = VOIDmode; for (mode = GET_CLASS_NARROWEST_MODE (MODE_INT); mode != VOIDmode; mode = GET_MODE_WIDER_MODE (mode)) @@ -3407,6 +3410,18 @@ init_emit_once (line_numbers) word_mode = mode; } +#ifndef DOUBLE_TYPE_SIZE +#define DOUBLE_TYPE_SIZE (BITS_PER_WORD * 2) +#endif + + for (mode = GET_CLASS_NARROWEST_MODE (MODE_FLOAT); mode != VOIDmode; + mode = GET_MODE_WIDER_MODE (mode)) + { + if (GET_MODE_BITSIZE (mode) == DOUBLE_TYPE_SIZE + && double_mode == VOIDmode) + double_mode = mode; + } + ptr_mode = mode_for_size (POINTER_SIZE, GET_MODE_CLASS (Pmode), 0); /* Create the unique rtx's for certain rtx codes and operand values. */ @@ -3424,10 +3439,10 @@ init_emit_once (line_numbers) else const_true_rtx = gen_rtx_CONST_INT (VOIDmode, STORE_FLAG_VALUE); - dconst0 = REAL_VALUE_ATOF ("0", DFmode); - dconst1 = REAL_VALUE_ATOF ("1", DFmode); - dconst2 = REAL_VALUE_ATOF ("2", DFmode); - dconstm1 = REAL_VALUE_ATOF ("-1", DFmode); + dconst0 = REAL_VALUE_ATOF ("0", double_mode); + dconst1 = REAL_VALUE_ATOF ("1", double_mode); + dconst2 = REAL_VALUE_ATOF ("2", double_mode); + dconstm1 = REAL_VALUE_ATOF ("-1", double_mode); for (i = 0; i <= 2; i++) { diff --git a/gcc/expmed.c b/gcc/expmed.c index 17a9af7..2f656c2 100644 --- a/gcc/expmed.c +++ b/gcc/expmed.c @@ -93,9 +93,10 @@ init_expmed () /* Since we are on the permanent obstack, we must be sure we save this spot AFTER we call start_sequence, since it will reuse the rtl it makes. */ - free_point = (char *) oballoc (0); + reg = gen_rtx (REG, word_mode, 10000); + zero_cost = rtx_cost (const0_rtx, 0); add_cost = rtx_cost (gen_rtx_PLUS (word_mode, reg, reg), SET); @@ -2277,7 +2278,8 @@ expand_mult (mode, op0, op1, target, unsignedp) rtx shift_subtarget = preserve ? 0 : accum; rtx add_target = (opno == alg.ops - 1 && target != 0 && variant != add_variant - ? target : 0); + && ! preserve) + ? target : 0; rtx accum_target = preserve ? 0 : accum; switch (alg.op[opno]) @@ -2746,6 +2748,7 @@ expand_divmod (rem_flag, code, mode, op0, op1, target, unsignedp) optab optab1, optab2; int op1_is_constant, op1_is_pow2; int max_cost, extra_cost; + static HOST_WIDE_INT last_div_const = 0; op1_is_constant = GET_CODE (op1) == CONST_INT; op1_is_pow2 = (op1_is_constant @@ -2855,8 +2858,15 @@ expand_divmod (rem_flag, code, mode, op0, op1, target, unsignedp) size = GET_MODE_BITSIZE (mode); #endif + /* Only deduct something for a REM if the last divide done was + for a different constant. Then set the constant of the last + divide. */ max_cost = div_cost[(int) compute_mode] - - (rem_flag ? mul_cost[(int) compute_mode] + add_cost : 0); + - (rem_flag && ! (last_div_const != 0 && op1_is_constant + && INTVAL (op1) == last_div_const) + ? mul_cost[(int) compute_mode] + add_cost : 0); + + last_div_const = ! rem_flag && op1_is_constant ? INTVAL (op1) : 0; /* Now convert to the best mode to use. */ if (compute_mode != mode) @@ -239,13 +239,22 @@ init_expr_once () { rtx insn, pat; enum machine_mode mode; + rtx mem, mem1; + char *free_point; + + start_sequence (); + + /* Since we are on the permanent obstack, we must be sure we save this + spot AFTER we call start_sequence, since it will reuse the rtl it + makes. */ + free_point = (char *) oballoc (0); + /* Try indexing by frame ptr and try by stack ptr. It is known that on the Convex the stack ptr isn't a valid index. With luck, one or the other is valid on any machine. */ - rtx mem = gen_rtx_MEM (VOIDmode, stack_pointer_rtx); - rtx mem1 = gen_rtx_MEM (VOIDmode, frame_pointer_rtx); + mem = gen_rtx_MEM (VOIDmode, stack_pointer_rtx); + mem1 = gen_rtx_MEM (VOIDmode, frame_pointer_rtx); - start_sequence (); insn = emit_insn (gen_rtx_SET (0, NULL_RTX, NULL_RTX)); pat = PATTERN (insn); @@ -296,6 +305,7 @@ init_expr_once () } end_sequence (); + obfree (free_point); } /* This is run at the start of compiling a function. */ @@ -5715,13 +5725,26 @@ expand_expr (exp, target, tmode, modifier) temp = gen_rtx_MEM (mode, op0); /* If address was computed by addition, mark this as an element of an aggregate. */ - if (TREE_CODE (TREE_OPERAND (exp, 0)) == PLUS_EXPR - || (TREE_CODE (TREE_OPERAND (exp, 0)) == SAVE_EXPR - && TREE_CODE (TREE_OPERAND (TREE_OPERAND (exp, 0), 0)) == PLUS_EXPR) + if (TREE_CODE (exp1) == PLUS_EXPR + || (TREE_CODE (exp1) == SAVE_EXPR + && TREE_CODE (TREE_OPERAND (exp1, 0)) == PLUS_EXPR) || AGGREGATE_TYPE_P (TREE_TYPE (exp)) + /* If the pointer is actually a REFERENCE_TYPE, this could + be pointing into some aggregate too. */ + || TREE_CODE (TREE_TYPE (exp1)) == REFERENCE_TYPE || (TREE_CODE (exp1) == ADDR_EXPR && (exp2 = TREE_OPERAND (exp1, 0)) - && AGGREGATE_TYPE_P (TREE_TYPE (exp2)))) + && AGGREGATE_TYPE_P (TREE_TYPE (exp2))) + /* This may have been an array reference to the first element + that was optimized away from being an addition. */ + || (TREE_CODE (exp1) == NOP_EXPR + && ((TREE_CODE (TREE_TYPE (TREE_OPERAND (exp1, 0))) + == REFERENCE_TYPE) + || ((TREE_CODE (TREE_TYPE (TREE_OPERAND (exp1, 0))) + == POINTER_TYPE) + && (AGGREGATE_TYPE_P + (TREE_TYPE (TREE_TYPE + (TREE_OPERAND (exp1, 0))))))))) MEM_IN_STRUCT_P (temp) = 1; MEM_VOLATILE_P (temp) = TREE_THIS_VOLATILE (exp) | flag_volatile; MEM_ALIAS_SET (temp) = get_alias_set (exp); @@ -7916,13 +7939,14 @@ expand_builtin_setjmp (buf_addr, target, first_label, next_label) emit_queue (); + /* We store the frame pointer and the address of lab1 in the buffer + and use the rest of it for the stack save area, which is + machine-dependent. */ + #ifndef BUILTIN_SETJMP_FRAME_VALUE #define BUILTIN_SETJMP_FRAME_VALUE virtual_stack_vars_rtx #endif - /* We store the frame pointer and the address of lab1 in the buffer - and use the rest of it for the stack save area, which is - machine-dependent. */ emit_move_insn (gen_rtx_MEM (Pmode, buf_addr), BUILTIN_SETJMP_FRAME_VALUE); emit_move_insn (validize_mem @@ -10148,10 +10172,8 @@ do_jump (exp, if_false_label, if_true_label) { tree inner_type = TREE_TYPE (TREE_OPERAND (exp, 0)); - if (integer_zerop (TREE_OPERAND (exp, 1))) - do_jump (TREE_OPERAND (exp, 0), if_true_label, if_false_label); - else if (GET_MODE_CLASS (TYPE_MODE (inner_type)) == MODE_COMPLEX_FLOAT - || GET_MODE_CLASS (TYPE_MODE (inner_type)) == MODE_COMPLEX_INT) + if (GET_MODE_CLASS (TYPE_MODE (inner_type)) == MODE_COMPLEX_FLOAT + || GET_MODE_CLASS (TYPE_MODE (inner_type)) == MODE_COMPLEX_INT) { tree exp0 = save_expr (TREE_OPERAND (exp, 0)); tree exp1 = save_expr (TREE_OPERAND (exp, 1)); @@ -10174,6 +10196,10 @@ do_jump (exp, if_false_label, if_true_label) exp1)))))), if_false_label, if_true_label); } + + else if (integer_zerop (TREE_OPERAND (exp, 1))) + do_jump (TREE_OPERAND (exp, 0), if_true_label, if_false_label); + else if (GET_MODE_CLASS (TYPE_MODE (inner_type)) == MODE_INT && !can_compare_p (TYPE_MODE (inner_type))) do_jump_by_parts_equality (exp, if_false_label, if_true_label); @@ -10186,10 +10212,8 @@ do_jump (exp, if_false_label, if_true_label) { tree inner_type = TREE_TYPE (TREE_OPERAND (exp, 0)); - if (integer_zerop (TREE_OPERAND (exp, 1))) - do_jump (TREE_OPERAND (exp, 0), if_false_label, if_true_label); - else if (GET_MODE_CLASS (TYPE_MODE (inner_type)) == MODE_COMPLEX_FLOAT - || GET_MODE_CLASS (TYPE_MODE (inner_type)) == MODE_COMPLEX_INT) + if (GET_MODE_CLASS (TYPE_MODE (inner_type)) == MODE_COMPLEX_FLOAT + || GET_MODE_CLASS (TYPE_MODE (inner_type)) == MODE_COMPLEX_INT) { tree exp0 = save_expr (TREE_OPERAND (exp, 0)); tree exp1 = save_expr (TREE_OPERAND (exp, 1)); @@ -10212,6 +10236,10 @@ do_jump (exp, if_false_label, if_true_label) exp1)))))), if_false_label, if_true_label); } + + else if (integer_zerop (TREE_OPERAND (exp, 1))) + do_jump (TREE_OPERAND (exp, 0), if_false_label, if_true_label); + else if (GET_MODE_CLASS (TYPE_MODE (inner_type)) == MODE_INT && !can_compare_p (TYPE_MODE (inner_type))) do_jump_by_parts_equality (exp, if_true_label, if_false_label); diff --git a/gcc/final.c b/gcc/final.c index 794bedf..4b05fc7 100644 --- a/gcc/final.c +++ b/gcc/final.c @@ -76,8 +76,9 @@ Boston, MA 02111-1307, USA. */ #if defined (USG) || !defined (HAVE_STAB_H) #include "gstab.h" /* If doing DBX on sysV, use our own stab.h. */ #else -#include <stab.h> /* On BSD, use the system's stab.h. */ -#endif /* not USG */ +#include <stab.h> +#endif + #endif /* DBX_DEBUGGING_INFO || XCOFF_DEBUGGING_INFO */ #ifdef XCOFF_DEBUGGING_INFO diff --git a/gcc/flags.h b/gcc/flags.h index 2b62325..37c1bd9 100644 --- a/gcc/flags.h +++ b/gcc/flags.h @@ -1,5 +1,5 @@ /* Compilation switch flag definitions for GNU CC. - Copyright (C) 1987, 88, 94-97, 1998 Free Software Foundation, Inc. + Copyright (C) 1987, 88, 94, 95, 96, 97, 1998 Free Software Foundation, Inc. This file is part of GNU CC. @@ -2381,7 +2381,7 @@ find_auto_inc (needed, x, insn) { /* We have *p followed sometime later by q = p+size. Both p and q must be live afterward, - and q is not used between INSN and it's assignment. + and q is not used between INSN and its assignment. Change it to q = p, ...*q..., q = q+size. Then fall into the usual case. */ rtx insns, temp; @@ -3132,6 +3132,7 @@ print_rtl_with_bb (outf, rtx_first) FILE *outf; rtx rtx_first; { + extern int flag_dump_unnumbered; register rtx tmp_rtx; if (rtx_first == 0) @@ -3196,7 +3197,9 @@ print_rtl_with_bb (outf, rtx_first) if ((bb = end[INSN_UID (tmp_rtx)]) >= 0) fprintf (outf, ";; End of basic block %d\n", bb); - putc ('\n', outf); + if (! flag_dump_unnumbered + || GET_CODE (tmp_rtx) != NOTE || NOTE_LINE_NUMBER (tmp_rtx) < 0) + putc ('\n', outf); } } } diff --git a/gcc/fold-const.c b/gcc/fold-const.c index 7544f8b..8849608 100644 --- a/gcc/fold-const.c +++ b/gcc/fold-const.c @@ -3293,14 +3293,16 @@ fold_range_test (exp) && operand_equal_p (lhs, rhs, 0)) { /* If simple enough, just rewrite. Otherwise, make a SAVE_EXPR - unless we are at top level, in which case we can't do this. */ + unless we are at top level or LHS contains a PLACEHOLDER_EXPR, in + which cases we can't do this. */ if (simple_operand_p (lhs)) return build (TREE_CODE (exp) == TRUTH_ANDIF_EXPR ? TRUTH_AND_EXPR : TRUTH_OR_EXPR, TREE_TYPE (exp), TREE_OPERAND (exp, 0), TREE_OPERAND (exp, 1)); - else if (current_function_decl != 0) + else if (current_function_decl != 0 + && ! contains_placeholder_p (lhs)) { tree common = save_expr (lhs); @@ -3997,7 +3999,9 @@ fold (expr) else if ((TREE_CODE (arg1) == COND_EXPR || (TREE_CODE_CLASS (TREE_CODE (arg1)) == '<' && TREE_CODE_CLASS (code) != '<')) - && (! TREE_SIDE_EFFECTS (arg0) || current_function_decl != 0)) + && (! TREE_SIDE_EFFECTS (arg0) + || (current_function_decl != 0 + && ! contains_placeholder_p (arg0)))) { tree test, true_value, false_value; tree lhs = 0, rhs = 0; @@ -4068,7 +4072,9 @@ fold (expr) else if ((TREE_CODE (arg0) == COND_EXPR || (TREE_CODE_CLASS (TREE_CODE (arg0)) == '<' && TREE_CODE_CLASS (code) != '<')) - && (! TREE_SIDE_EFFECTS (arg1) || current_function_decl != 0)) + && (! TREE_SIDE_EFFECTS (arg1) + || (current_function_decl != 0 + && ! contains_placeholder_p (arg1)))) { tree test, true_value, false_value; tree lhs = 0, rhs = 0; @@ -4633,7 +4639,8 @@ fold (expr) if (real_onep (arg1)) return non_lvalue (convert (type, arg0)); /* x*2 is x+x */ - if (! wins && real_twop (arg1) && current_function_decl != 0) + if (! wins && real_twop (arg1) && current_function_decl != 0 + && ! contains_placeholder_p (arg0)) { tree arg = save_expr (arg0); return build (PLUS_EXPR, type, arg, arg); @@ -5656,14 +5663,16 @@ fold (expr) return t1 ? t1 : t; } - /* If this is a comparison of complex values and either or both - sizes are a COMPLEX_EXPR, it is best to split up the comparisons - and join them with a TRUTH_ANDIF_EXPR or TRUTH_ORIF_EXPR. This - may prevent needless evaluations. */ + /* If this is a comparison of complex values and either or both sides + are a COMPLEX_EXPR or COMPLEX_CST, it is best to split up the + comparisons and join them with a TRUTH_ANDIF_EXPR or TRUTH_ORIF_EXPR. + This may prevent needless evaluations. */ if ((code == EQ_EXPR || code == NE_EXPR) && TREE_CODE (TREE_TYPE (arg0)) == COMPLEX_TYPE && (TREE_CODE (arg0) == COMPLEX_EXPR - || TREE_CODE (arg1) == COMPLEX_EXPR)) + || TREE_CODE (arg1) == COMPLEX_EXPR + || TREE_CODE (arg0) == COMPLEX_CST + || TREE_CODE (arg1) == COMPLEX_CST)) { tree subtype = TREE_TYPE (TREE_TYPE (arg0)); tree real0, imag0, real1, imag1; diff --git a/gcc/function.c b/gcc/function.c index f3d33d0..9150ebc 100644 --- a/gcc/function.c +++ b/gcc/function.c @@ -1375,7 +1375,7 @@ put_var_into_stack (decl) context = decl_function_context (decl); - /* Get the current rtl used for this object and it's original mode. */ + /* Get the current rtl used for this object and its original mode. */ reg = TREE_CODE (decl) == SAVE_EXPR ? SAVE_EXPR_RTL (decl) : DECL_RTL (decl); /* No need to do anything if decl has no rtx yet @@ -4835,7 +4835,7 @@ setjmp_protect (block) || (GET_CODE (DECL_RTL (decl)) == MEM && GET_CODE (XEXP (DECL_RTL (decl), 0)) == ADDRESSOF)) /* If this variable came from an inline function, it must be - that it's life doesn't overlap the setjmp. If there was a + that its life doesn't overlap the setjmp. If there was a setjmp in the function, it would already be in memory. We must exclude such variable because their DECL_RTL might be set to strange things such as virtual_stack_vars_rtx. */ @@ -3547,7 +3547,7 @@ be compiled with the same value. .TP .B \-nocpp -Tell the MIPS assembler to not run it's preprocessor over user +Tell the MIPS assembler to not run its preprocessor over user assembler files (with a `\|\c .B .s\c \&\|' suffix) when assembling them. @@ -321,7 +321,7 @@ or with constant text in a single argument. This allows config.h to specify part of the spec for running as. %A process ASM_FINAL_SPEC as a spec. A capital A is actually used here. This can be used to run a post-processor after the - assembler has done it's job. + assembler has done its job. %D Dump out a -L option for each directory in startfile_prefixes. If multilib_dir is set, extra entries are generated with it affixed. %l process LINK_SPEC as a spec. @@ -749,6 +749,12 @@ static int n_default_compilers /* We want %{T*} after %{L*} and %D so that it can be used to specify linker scripts which exist in user specified directories, or in standard directories. */ +#ifdef LINK_COMMAND_SPEC +/* Provide option to override link_command_spec from machine specific + configuration files. */ +static char *link_command_spec = + LINK_COMMAND_SPEC; +#else #ifdef LINK_LIBGCC_SPECIAL /* Don't generate -L options. */ static char *link_command_spec = "\ @@ -774,6 +780,7 @@ static char *link_command_spec = "\ %{T*}\ \n }}}}}}"; #endif +#endif /* A vector of options to give to the linker. These options are accumulated by %x, diff --git a/gcc/genattrtab.c b/gcc/genattrtab.c index 253aaae..686bf5c 100644 --- a/gcc/genattrtab.c +++ b/gcc/genattrtab.c @@ -341,7 +341,9 @@ static char *alternative_name; int reload_completed = 0; -/* Similarly since PRESERVE_DEATH_INFO_REGNO_P might reference "optimize". */ +/* Some machines test `optimize' in macros called from rtlanal.c, so we need + to define it here. */ + int optimize = 0; /* Simplify an expression. Only call the routine if there is something to @@ -2125,7 +2127,7 @@ expand_units () if (unit->needs_range_function) { /* Compute the blockage range function and make an attribute - for writing it's value. */ + for writing its value. */ newexp = operate_exp (RANGE_OP, min_blockage, max_blockage); newexp = simplify_knowing (newexp, unit->condexp); @@ -4404,8 +4406,7 @@ gen_unit (def) unit->condexp = insert_right_side (IOR, unit->condexp, op->condexp, -2, -2); } -/* Given a piece of RTX, print a C expression to test it's truth value. - +/* Given a piece of RTX, print a C expression to test its truth value. We use AND and IOR both for logical and bit-wise operations, so interpret them as logical unless they are inside a comparison expression. The first bit of FLAGS will be non-zero in that case. diff --git a/gcc/gencheck.c b/gcc/gencheck.c index 811a7dc..f7548ce 100644 --- a/gcc/gencheck.c +++ b/gcc/gencheck.c @@ -38,10 +38,12 @@ int main (argc, argv) char *argv[]; { int i; + switch (argc) { case 1: break; + default: usage (); exit (1); diff --git a/gcc/genemit.c b/gcc/genemit.c index 86d7a42..e4341b8 100644 --- a/gcc/genemit.c +++ b/gcc/genemit.c @@ -778,6 +778,7 @@ from the machine description file `md'. */\n\n"); printf ("#include \"insn-config.h\"\n\n"); printf ("#include \"insn-flags.h\"\n\n"); printf ("#include \"insn-codes.h\"\n\n"); + printf ("#include \"reload.h\"\n"); printf ("extern char *insn_operand_constraint[][MAX_RECOG_OPERANDS];\n\n"); printf ("extern rtx recog_operand[];\n"); printf ("#define operands emit_operand\n\n"); diff --git a/gcc/getopt.c b/gcc/getopt.c index a9a101f..9207271 100644 --- a/gcc/getopt.c +++ b/gcc/getopt.c @@ -201,15 +201,18 @@ static char *posixly_correct; # define my_index strchr #else +# if HAVE_STRING_H +# include <string.h> +# else +# include <strings.h> +# endif + /* Avoid depending on library functions or files whose names are inconsistent. */ #ifndef getenv extern char *getenv (); #endif -#ifndef strncmp -extern int strncmp (); -#endif static char * my_index (str, chr) diff --git a/gcc/install.texi b/gcc/install.texi index dc48c42..d5b6d1c 100644 --- a/gcc/install.texi +++ b/gcc/install.texi @@ -199,6 +199,14 @@ threads implementation available, in which case threads can be enabled with this option by supplying a suitable @var{type}, probably @samp{posix}. The possibilities for @var{type} are @samp{single}, @samp{posix}, @samp{win32}, @samp{solaris}, @samp{irix} and @samp{mach}. + +@cindex Internal Compiler Checking +@item --enable-checking +When you specify this option, the compiler is built to perform checking +of tree node types when referencing fields of that node. This does not +change the generated code, but adds error checking within the compiler. +This will slow down the compiler and may only work properly if you +are building the compiler with GNU C. @end table The @file{configure} script searches subdirectories of the source @@ -946,7 +954,9 @@ highly recommend using GAS for all HP-PA configurations. 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. -GAS will need to be installed into a directory before @code{/bin}, +On some versions of HP-UX, you will need to install GNU @file{sed}. + +You will need to be install GAS into a directory before @code{/bin}, @code{/usr/bin}, and @code{/usr/ccs/bin} in your search path. You should install GAS before you build GNU CC. @@ -1013,10 +1023,8 @@ GNU binutils version 2.2 or later. Go to the Berkeley universe before compiling. @item i386-sequent-ptx1* -Sequent DYNIX/ptx 1.x. - -@item i386-sequent-ptx2* -Sequent DYNIX/ptx 2.x. +@itemx i386-sequent-ptx2* +You must install GNU @file{sed} before running @file{configure}. @item i386-sun-sunos4 You may find that you need another version of GNU CC to begin @@ -1219,8 +1227,8 @@ PHCO_4484 from HP. In addition, if you wish to use gas @samp{--with-gnu-as} you must use gas version 2.1 or later, and you must use the GNU linker version 2.1 or later. Earlier versions of gas relied upon a program which converted the -gas output into the native HP/UX format, but that program has not been -kept up to date. gdb does not understand that native HP/UX format, so +gas output into the native HP-UX format, but that program has not been +kept up to date. gdb does not understand that native HP-UX format, so you must use gas if you wish to use gdb. @item m68k-sun diff --git a/gcc/invoke.texi b/gcc/invoke.texi index 6e43825..112072d 100644 --- a/gcc/invoke.texi +++ b/gcc/invoke.texi @@ -145,7 +145,7 @@ in the following sections. @item Optimization Options @xref{Optimize Options,,Options that Control Optimization}. @smallexample --fbranch-probabilities +-fbranch-probabilities -foptimize-register-moves -fcaller-saves -fcse-follow-jumps -fcse-skip-blocks -fdelayed-branch -fexpensive-optimizations -ffast-math -ffloat-store -fforce-addr -fforce-mem @@ -2312,6 +2312,17 @@ This pass also performs global constant and copy propagation. @item -fexpensive-optimizations Perform a number of minor optimizations that are relatively expensive. +@item -foptimize-register-moves +@item -fregmove +Attempt to reassign register numbers in move instructions and as +operands of other simple instructions in order to maximize the amount of +register tying. This is especially helpfu on machines with two-operand +instructions. GNU CC enables this optimization by default with @samp{-O2} +or higher. + +Note @code{-fregmove} and @code{-foptimize-register-moves} are the same +optimization. + @item -fdelayed-branch If supported for the target machine, attempt to reorder instructions to exploit instruction slots available after delayed branch @@ -2413,12 +2424,6 @@ branch is mostly to take, the @samp{REG_BR_PROB} values are used to exactly determine which path is taken more often. @end ifset -@item -fregmove -Some machines only support 2 operands per instruction. On such -machines, GNU CC might have to do extra copies. The @samp{-fregmove} -option overrides the default for the machine to do the copy before -register allocation. - @item -fstrict-aliasing Allows the compiler to assume the strictest aliasing rules applicable to the language being compiled. For C (and C++), this activates @@ -4865,7 +4870,7 @@ All modules should be compiled with the same @samp{-G @var{num}} value. @item -nocpp -Tell the MIPS assembler to not run it's preprocessor over user +Tell the MIPS assembler to not run its preprocessor over user assembler files (with a @samp{.s} suffix) when assembling them. @end table diff --git a/gcc/mips-tfile.c b/gcc/mips-tfile.c index 04b3618..3806817 100644 --- a/gcc/mips-tfile.c +++ b/gcc/mips-tfile.c @@ -937,7 +937,7 @@ enum alloc_type { grow linearly, and which are written in the object file as sequential pages. On systems with a BSD malloc that define USE_MALLOC, the MAX_CLUSTER_PAGES should be 1 less than a power of two, since malloc - adds it's overhead, and rounds up to the next power of 2. Pages are + adds its overhead, and rounds up to the next power of 2. Pages are linked together via a linked list. If PAGE_SIZE is > 4096, the string length in the shash_t structure @@ -5113,7 +5113,7 @@ out_of_bounds (indx, max, str, prog_line) /* Allocate a cluster of pages. USE_MALLOC says that malloc does not - like sbrk's behind it's back (or sbrk isn't available). If we use + like sbrk's behind its back (or sbrk isn't available). If we use sbrk, we assume it gives us zeroed pages. */ #ifndef MALLOC_CHECK diff --git a/gcc/objc/objc-api.h b/gcc/objc/objc-api.h index 5ca8865..9eb000b 100644 --- a/gcc/objc/objc-api.h +++ b/gcc/objc/objc-api.h @@ -301,7 +301,7 @@ struct objc_protocol_list { /* ** The class number of this class. This must be the same for both the -** class and it's meta class object +** class and its meta class object */ #define CLS_GETNUMBER(cls) (__CLS_INFO(cls) >> (HOST_BITS_PER_LONG/2)) #define CLS_SETNUMBER(cls, num) \ diff --git a/gcc/objc/sendmsg.c b/gcc/objc/sendmsg.c index f0d3957..245b8b9 100644 --- a/gcc/objc/sendmsg.c +++ b/gcc/objc/sendmsg.c @@ -1,5 +1,5 @@ /* GNU Objective C Runtime message lookup - Copyright (C) 1993, 1995, 1996, 1997 Free Software Foundation, Inc. + Copyright (C) 1993, 1995, 1996, 1997, 1998 Free Software Foundation, Inc. Contributed by Kresten Krab Thorup This file is part of GNU CC. @@ -343,7 +343,7 @@ __objc_install_dispatch_table_for_class (Class class) { Class super; - /* If the class has not yet had it's class links resolved, we must + /* If the class has not yet had its class links resolved, we must re-compute all class links */ if(!CLS_ISRESOLV(class)) __objc_resolve_class_links(); diff --git a/gcc/print-rtl.c b/gcc/print-rtl.c index 0187c34..ef25e7e 100644 --- a/gcc/print-rtl.c +++ b/gcc/print-rtl.c @@ -53,6 +53,7 @@ static int indent; extern char **insn_name_ptr; +int flag_dump_unnumbered = 0; /* Print IN_RTX onto OUTFILE. This is the recursive part of printing. */ static void @@ -205,6 +206,9 @@ print_rtx (in_rtx) fputc (' ', outfile); DEBUG_PRINT_REG (in_rtx, 0, outfile); } + else if (flag_dump_unnumbered + && (is_insn || GET_CODE (in_rtx) == NOTE)) + fprintf (outfile, "#"); else fprintf (outfile, " %d", value); } @@ -227,7 +231,12 @@ print_rtx (in_rtx) case 'u': if (XEXP (in_rtx, i) != NULL) - fprintf (outfile, " %d", INSN_UID (XEXP (in_rtx, i))); + { + if (flag_dump_unnumbered) + fprintf (outfile, "#"); + else + fprintf (outfile, " %d", INSN_UID (XEXP (in_rtx, i))); + } else fprintf (outfile, " 0"); sawclose = 0; @@ -381,8 +390,13 @@ print_rtl (outf, rtx_first) case BARRIER: for (tmp_rtx = rtx_first; NULL != tmp_rtx; tmp_rtx = NEXT_INSN (tmp_rtx)) { - print_rtx (tmp_rtx); - fprintf (outfile, "\n"); + if (! flag_dump_unnumbered + || GET_CODE (tmp_rtx) != NOTE + || NOTE_LINE_NUMBER (tmp_rtx) < 0) + { + print_rtx (tmp_rtx); + fprintf (outfile, "\n"); + } } break; @@ -400,6 +414,10 @@ print_rtl_single (outf, x) { outfile = outf; sawclose = 0; - print_rtx (x); - putc ('\n', outf); + if (! flag_dump_unnumbered + || GET_CODE (x) != NOTE || NOTE_LINE_NUMBER (x) < 0) + { + print_rtx (x); + putc ('\n', outf); + } } diff --git a/gcc/protoize.c b/gcc/protoize.c index a85b21b..48908e5 100644 --- a/gcc/protoize.c +++ b/gcc/protoize.c @@ -1917,7 +1917,7 @@ save_def_or_dec (l, is_syscalls) } /* Handle a special case. If we have a function definition marked as - being in "old" style, and if it's formal names list is empty, then + being in "old" style, and if its formal names list is empty, then it may actually have the string "void" in its real formals list in the original source code. Just to make sure, we will get setup to convert such things anyway. @@ -2767,7 +2767,7 @@ connect_defs_and_decs (hp) Also, for each item which is only a function declaration, but which nonetheless has its own prototype already (obviously supplied by the user) - declare the item as it's own definition. + declare the item as its own definition. Note that when/if there are multiple user-supplied prototypes already present for multiple declarations of any given function, these multiple @@ -51,7 +51,7 @@ XFmode and TFmode transcendental functions, can be obtained by ftp from netlib.att.com: netlib/cephes. */ /* Type of computer arithmetic. - Only one of DEC, IBM, IEEE, or UNK should get defined. + Only one of DEC, IBM, IEEE, C4X, or UNK should get defined. `IEEE', when REAL_WORDS_BIG_ENDIAN is non-zero, refers generically to big-endian IEEE floating-point data structure. This definition @@ -76,6 +76,11 @@ netlib.att.com: netlib/cephes. */ no type wider than DFmode. The IBM conversions were contributed by frank@atom.ansto.gov.au (Frank Crawford). + `C4X' refers specifically to the floating point format used on + Texas Instruments TMS320C3x and TMS320C4x digital signal + processors. This supports QFmode (32-bit float, double) and HFmode + (40-bit long double) where BITS_PER_BYTE is 32. + If LONG_DOUBLE_TYPE_SIZE = 64 (the default, unless tm.h defines it) then `long double' and `double' are both implemented, but they both mean DFmode. In this case, the software floating-point @@ -686,7 +691,16 @@ ereal_atof (s, t) switch (t) { +#ifdef C4X + case QFmode: case HFmode: + asctoe53 (s, tem); + e53toe (tem, e); + break; +#else + case HFmode: +#endif + case SFmode: asctoe24 (s, tem); e24toe (tem, e); @@ -1045,11 +1059,21 @@ real_value_truncate (mode, arg) break; case SFmode: +#ifndef C4X case HFmode: +#endif etoe24 (e, t); e24toe (t, t); break; +#ifdef C4X + case HFmode: + case QFmode: + etoe53 (e, t); + e53toe (t, t); + break; +#endif + case SImode: r = etrunci (arg); return (r); @@ -3714,7 +3738,7 @@ toe53 (x, y) #else /* it's neither DEC nor IBM */ #ifdef C4X -/* Convert e-type X to C4X-format double E. */ +/* Convert e-type X to C4X-format long double E. */ static void etoe53 (x, e) diff --git a/gcc/regclass.c b/gcc/regclass.c index e7ea926..b9238cd 100644 --- a/gcc/regclass.c +++ b/gcc/regclass.c @@ -439,7 +439,7 @@ init_regs () memory_move_secondary_cost. */ int i; for (i = 0; i < MAX_MACHINE_MODE; i++) - top_of_stack[i] = gen_rtx (MEM, i, stack_pointer_rtx); + top_of_stack[i] = gen_rtx_MEM (i, stack_pointer_rtx); } #endif } diff --git a/gcc/reload.c b/gcc/reload.c index 83f05ad..6431f15 100644 --- a/gcc/reload.c +++ b/gcc/reload.c @@ -2344,6 +2344,9 @@ find_reloads (insn, replace, ind_levels, live_known, reload_reg_p) rtx set = single_set (insn); int goal_earlyclobber, this_earlyclobber; enum machine_mode operand_mode[MAX_RECOG_OPERANDS]; + /* Cache the last regno for the last pseudo we did an output reload + for in case the next insn uses it. */ + static int last_output_reload_regno = -1; this_insn = insn; this_insn_is_asm = 0; /* Tentative. */ @@ -3219,6 +3222,15 @@ find_reloads (insn, replace, ind_levels, live_known, reload_reg_p) && this_alternative_matches[i] < 0) bad = 1; + /* If this is a pseudo-register that is set in the previous + insns, there's a good chance that it will already be in a + spill register and we can use that spill register. So + make this case cheaper. */ + if (GET_CODE (operand) == REG + && REGNO (operand) >= FIRST_PSEUDO_REGISTER + && REGNO (operand) == last_output_reload_regno) + reject--; + /* If this is a constant that is reloaded into the desired class by copying it to memory first, count that as another reload. This is consistent with other code and is @@ -3615,6 +3627,7 @@ find_reloads (insn, replace, ind_levels, live_known, reload_reg_p) reload_earlyclobbers[n_earlyclobbers++] = recog_operand[i]; /* Now record reloads for all the operands that need them. */ + last_output_reload_regno = -1; for (i = 0; i < noperands; i++) if (! goal_alternative_win[i]) { @@ -3661,20 +3674,27 @@ find_reloads (insn, replace, ind_levels, live_known, reload_reg_p) } } else if (goal_alternative_matched[i] == -1) - operand_reloadnum[i] - = push_reload (modified[i] != RELOAD_WRITE ? recog_operand[i] : 0, - modified[i] != RELOAD_READ ? recog_operand[i] : 0, - (modified[i] != RELOAD_WRITE - ? recog_operand_loc[i] : 0), - modified[i] != RELOAD_READ ? recog_operand_loc[i] : 0, - (enum reg_class) goal_alternative[i], - (modified[i] == RELOAD_WRITE - ? VOIDmode : operand_mode[i]), - (modified[i] == RELOAD_READ - ? VOIDmode : operand_mode[i]), - (insn_code_number < 0 ? 0 - : insn_operand_strict_low[insn_code_number][i]), - 0, i, operand_type[i]); + { + operand_reloadnum[i] + = push_reload ((modified[i] != RELOAD_WRITE + ? recog_operand[i] : 0), + modified[i] != RELOAD_READ ? recog_operand[i] : 0, + (modified[i] != RELOAD_WRITE + ? recog_operand_loc[i] : 0), + (modified[i] != RELOAD_READ + ? recog_operand_loc[i] : 0), + (enum reg_class) goal_alternative[i], + (modified[i] == RELOAD_WRITE + ? VOIDmode : operand_mode[i]), + (modified[i] == RELOAD_READ + ? VOIDmode : operand_mode[i]), + (insn_code_number < 0 ? 0 + : insn_operand_strict_low[insn_code_number][i]), + 0, i, operand_type[i]); + if (modified[i] != RELOAD_READ + && GET_CODE (recog_operand[i]) == REG) + last_output_reload_regno = REGNO (recog_operand[i]); + } /* In a matching pair of operands, one must be input only and the other must be output only. Pass the input operand as IN and the other as OUT. */ @@ -3691,6 +3711,9 @@ find_reloads (insn, replace, ind_levels, live_known, reload_reg_p) operand_mode[goal_alternative_matched[i]], 0, 0, i, RELOAD_OTHER); operand_reloadnum[goal_alternative_matched[i]] = output_reloadnum; + if (GET_CODE (recog_operand[goal_alternative_matched[i]]) == REG) + last_output_reload_regno + = REGNO (recog_operand[goal_alternative_matched[i]]); } else if (modified[i] == RELOAD_WRITE && modified[goal_alternative_matched[i]] == RELOAD_READ) @@ -3705,6 +3728,8 @@ find_reloads (insn, replace, ind_levels, live_known, reload_reg_p) operand_mode[i], 0, 0, i, RELOAD_OTHER); operand_reloadnum[i] = output_reloadnum; + if (GET_CODE (recog_operand[i]) == REG) + last_output_reload_regno = REGNO (recog_operand[i]); } else if (insn_code_number >= 0) abort (); diff --git a/gcc/reload1.c b/gcc/reload1.c index 9601691f..825b871 100644 --- a/gcc/reload1.c +++ b/gcc/reload1.c @@ -2080,13 +2080,20 @@ reload (first, global, dumpfile) { rtx addr = 0; int in_struct = 0; - if (reg_equiv_mem[i]) + int is_readonly = 0; + + if (reg_equiv_memory_loc[i]) { - addr = XEXP (reg_equiv_mem[i], 0); - in_struct = MEM_IN_STRUCT_P (reg_equiv_mem[i]); + in_struct = MEM_IN_STRUCT_P (reg_equiv_memory_loc[i]); + is_readonly = RTX_UNCHANGING_P (reg_equiv_memory_loc[i]); } + + if (reg_equiv_mem[i]) + addr = XEXP (reg_equiv_mem[i], 0); + if (reg_equiv_address[i]) addr = reg_equiv_address[i]; + if (addr) { if (reg_renumber[i] < 0) @@ -2094,6 +2101,7 @@ reload (first, global, dumpfile) rtx reg = regno_reg_rtx[i]; XEXP (reg, 0) = addr; REG_USERVAR_P (reg) = 0; + RTX_UNCHANGING_P (reg) = is_readonly; MEM_IN_STRUCT_P (reg) = in_struct; /* We have no alias information about this newly created MEM. */ @@ -2565,7 +2573,14 @@ alter_reg (i, from_reg) { x = gen_rtx_MEM (GET_MODE (regno_reg_rtx[i]), plus_constant (XEXP (x, 0), adjust)); - RTX_UNCHANGING_P (x) = RTX_UNCHANGING_P (regno_reg_rtx[i]); + + /* If this was shared among registers, must ensure we never + set it readonly since that can cause scheduling + problems. Note we would only have in this adjustment + case in any event, since the code above doesn't set it. */ + + if (from_reg == -1) + RTX_UNCHANGING_P (x) = RTX_UNCHANGING_P (regno_reg_rtx[i]); } /* Save the stack slot for later. */ diff --git a/gcc/reorg.c b/gcc/reorg.c index 7370a35..69c4323 100644 --- a/gcc/reorg.c +++ b/gcc/reorg.c @@ -579,7 +579,7 @@ mark_set_resources (x, res, in_dest, include_delayed_effects) SET_HARD_REG_SET (res->regs); } - /* ... and also what it's RTL says it modifies, if anything. */ + /* ... and also what its RTL says it modifies, if anything. */ case JUMP_INSN: case INSN: @@ -983,7 +983,7 @@ add_to_delay_list (insn, delay_list) rtx delay_list; { /* If we have an empty list, just make a new list element. If - INSN has it's block number recorded, clear it since we may + INSN has its block number recorded, clear it since we may be moving the insn to a new block. */ if (delay_list == 0) @@ -955,10 +955,8 @@ extern int side_effects_p PROTO((rtx)); extern int volatile_refs_p PROTO((rtx)); extern int volatile_insn_p PROTO((rtx)); extern void remove_note PROTO((rtx, rtx)); -extern void note_stores PROTO((rtx, void (*) (rtx, rtx))); extern int refers_to_regno_p PROTO((int, int, rtx, rtx *)); extern int reg_overlap_mentioned_p PROTO((rtx, rtx)); -extern rtx find_use_as_address PROTO((rtx, rtx, HOST_WIDE_INT)); /* Functions in rtlanal.c */ @@ -980,6 +978,8 @@ extern rtx single_set PROTO((rtx)); extern rtx find_last_value PROTO((rtx, rtx *, rtx)); extern int refers_to_regno_p PROTO((int, int, rtx, rtx *)); extern int reg_overlap_mentioned_p PROTO((rtx, rtx)); +extern rtx find_use_as_address PROTO((rtx, rtx, HOST_WIDE_INT)); +extern void note_stores PROTO((rtx, void (*)())); extern rtx reg_set_last PROTO((rtx, rtx)); extern int rtx_equal_p PROTO((rtx, rtx)); extern int dead_or_set_p PROTO((rtx, rtx)); diff --git a/gcc/texinfo.tex b/gcc/texinfo.tex index 44ea22c..4327aa3 100644 --- a/gcc/texinfo.tex +++ b/gcc/texinfo.tex @@ -25,21 +25,19 @@ % % Please try the latest version of texinfo.tex before submitting bug % reports; you can get the latest version from: -% /home/gd/gnu/doc/texinfo.tex on the GNU machines. -% ftp://ftp.gnu.org/pub/gnu/texinfo.tex -% (and all GNU mirrors) -% ftp://tug.org/tex/texinfo.tex -% ftp://ctan.org/macros/texinfo/texinfo.tex -% (and all CTAN mirrors, finger ctan@tug.org for a list). +% ftp://ftp.gnu.org/pub/gnu/texinfo.tex +% /home/gd/gnu/doc/texinfo.tex on the GNU machines. +% (and all GNU mirrors, see ftp://ftp.gnu.org/pub/gnu/README.mirrors) +% ftp://tug.org/tex/texinfo.tex +% ftp://ctan.org/macros/texinfo/texinfo.tex +% (and all CTAN mirrors, finger ctan@tug.org for a list). +% The texinfo.tex in the texinfo distribution itself could well be out +% of date, so if that's what you're using, please check. % % Send bug reports to bug-texinfo@gnu.org. % Please include a precise test case in each bug report, % including a complete document with which we can reproduce the problem. % -% Texinfo macros (with @macro) are *not* supported by texinfo.tex. You -% have to run makeinfo -E to expand macros first; the texi2dvi script -% does this. -% % To process a Texinfo manual with TeX, it's most reliable to use the % texi2dvi shell script that comes with the distribution. For simple % manuals, you can get away with: @@ -147,15 +145,10 @@ % Dimensions to add cropmarks at corners. % Added by P. A. MacKay, 12 Nov. 1986 % -\newdimen\cornerlong \newdimen\cornerthick -\newdimen\topandbottommargin -\newdimen\outerhsize \newdimen\outervsize -\cornerlong=1pc\cornerthick=.3pt % These set size of cropmarks -\outerhsize=7in -%\outervsize=9.5in -% Alternative @smallbook page size is 9.25in -\outervsize=9.25in -\topandbottommargin=.75in +\newdimen\outerhsize \newdimen\outervsize % set by the paper size routines +\newdimen\cornerlong \cornerlong=1pc +\newdimen\cornerthick \cornerthick=.3pt +\newdimen\topandbottommargin \topandbottommargin=.75in % Main output routine. \chardef\PAGE = 255 @@ -791,13 +784,6 @@ where each line of input produces a line of output.} \def\menu{\doignore{menu}} \def\direntry{\doignore{direntry}} -% Also ignore @macro ... @end macro. The user must run texi2dvi, -% which runs makeinfo to do macro expansion. Ignore @unmacro, too. -\def\macro{\doignore{macro}} -\def\macrocsname{macro} -\let\unmacro = \comment - - % @dircategory CATEGORY -- specify a category of the dir file % which this file should belong to. Ignore this in TeX. \let\dircategory = \comment @@ -828,13 +814,7 @@ where each line of input produces a line of output.} % @c @end ifinfo % and the @end ifinfo will be properly ignored. % (We've just changed @ to catcode 12.) - % - % But we can't do this if #1 is `macro', since that actually contains a c. - % Happily, none of the other conditionals have the letter `c' in their names! - \def\temp{#1}% - \ifx\temp\macrocsname \else - \catcode`\c = 14 - \fi + \catcode`\c = 14 % % And now expand that command. \doignoretext @@ -965,13 +945,24 @@ where each line of input produces a line of output.} \def\value{\begingroup \catcode`\-=12 \catcode`\_=12 % Allow - and _ in VAR. \valuexxx} -\def\valuexxx#1{% +\def\valuexxx#1{\expandablevalue{#1}\endgroup} + +% We have this subroutine so that we can handle at least some @value's +% properly in indexes (we \let\value to this in \indexdummies). Ones +% whose names contain - or _ still won't work, but we can't do anything +% about that. The command has to be fully expandable, since the result +% winds up in the index file. This means that if the variable's value +% contains other Texinfo commands, it's almost certain it will fail +% (although perhaps we could fix that with sufficient work to do a +% one-level expansion on the result, instead of complete). +% +\def\expandablevalue#1{% \expandafter\ifx\csname SET#1\endcsname\relax - {\{No value for ``#1''\}}% + {[No value for ``#1'']v}% \else \csname SET#1\endcsname \fi -\endgroup} +} % @ifset VAR ... @end ifset reads the `...' iff VAR has been defined % with @set. @@ -1079,12 +1070,21 @@ where each line of input produces a line of output.} % @refill is a no-op. \let\refill=\relax +% If working on a large document in chapters, it is convenient to +% be able to disable indexing, cross-referencing, and contents, for test runs. +% This is done with @novalidate (before @setfilename). +% +\newif\iflinks \linkstrue % by default we want the aux files. +\let\novalidate = \linksfalse + % @setfilename is done at the beginning of every texinfo file. % So open here the files we need to have open while reading the input. % This makes it possible to make a .fmt file for texinfo. \def\setfilename{% - \readauxfile - \opencontents + \iflinks + \readauxfile + \opencontents + \fi % \openindices needs to do some work in any case. \openindices \fixbackslash % Turn off hack to swallow `\input texinfo'. \global\let\setfilename=\comment % Ignore extra @setfilename cmds. @@ -1100,30 +1100,25 @@ where each line of input produces a line of output.} \comment % Ignore the actual filename. } +% Called from \setfilename. +% +\def\openindices{% + \newindex{cp}% + \newcodeindex{fn}% + \newcodeindex{vr}% + \newcodeindex{tp}% + \newcodeindex{ky}% + \newcodeindex{pg}% +} + % @bye. \outer\def\bye{\pagealignmacro\tracingstats=1\ptexend} -% \def\macro#1{\begingroup\ignoresections\catcode`\#=6\def\macrotemp{#1}\parsearg\macroxxx} -% \def\macroxxx#1#2 \end macro{% -% \expandafter\gdef\macrotemp#1{#2}% -% \endgroup} - -%\def\linemacro#1{\begingroup\ignoresections\catcode`\#=6\def\macrotemp{#1}\parsearg\linemacroxxx} -%\def\linemacroxxx#1#2 \end linemacro{% -%\let\parsearg=\relax -%\edef\macrotempx{\csname M\butfirst\expandafter\string\macrotemp\endcsname}% -%\expandafter\xdef\macrotemp{\parsearg\macrotempx}% -%\expandafter\gdef\macrotempx#1{#2}% -%\endgroup} - -%\def\butfirst#1{} - \message{fonts,} - % Font-change commands. -% Texinfo supports the sans serif font style, which plain TeX does not. +% Texinfo sort of supports the sans serif font style, which plain TeX does not. % So we set up a \sf analogous to plain's \rm, etc. \newfam\sffam \def\sf{\fam=\sffam \tensf} @@ -1898,7 +1893,7 @@ July\or August\or September\or October\or November\or December\fi \def\itemize{\parsearg\itemizezzz} \def\itemizezzz #1{% - \begingroup % ended by the @end itemsize + \begingroup % ended by the @end itemize \itemizey {#1}{\Eitemize} } @@ -2264,12 +2259,14 @@ width0pt\relax} \fi % the file that accumulates this index. The file's extension is foo. % The name of an index should be no more than 2 characters long % for the sake of vms. - -\def\newindex #1{ -\expandafter\newwrite \csname#1indfile\endcsname% Define number for output file -\openout \csname#1indfile\endcsname \jobname.#1 % Open the file -\expandafter\xdef\csname#1index\endcsname{% % Define \xxxindex -\noexpand\doindex {#1}} +% +\def\newindex#1{% + \iflinks + \expandafter\newwrite \csname#1indfile\endcsname + \openout \csname#1indfile\endcsname \jobname.#1 % Open the file + \fi + \expandafter\xdef\csname#1index\endcsname{% % Define @#1index + \noexpand\doindex{#1}} } % @defindex foo == \newindex{foo} @@ -2278,11 +2275,13 @@ width0pt\relax} \fi % Define @defcodeindex, like @defindex except put all entries in @code. -\def\newcodeindex #1{ -\expandafter\newwrite \csname#1indfile\endcsname% Define number for output file -\openout \csname#1indfile\endcsname \jobname.#1 % Open the file -\expandafter\xdef\csname#1index\endcsname{% % Define \xxxindex -\noexpand\docodeindex {#1}} +\def\newcodeindex#1{% + \iflinks + \expandafter\newwrite \csname#1indfile\endcsname + \openout \csname#1indfile\endcsname \jobname.#1 + \fi + \expandafter\xdef\csname#1index\endcsname{% + \noexpand\docodeindex{#1}} } \def\defcodeindex{\parsearg\newcodeindex} @@ -2369,7 +2368,6 @@ width0pt\relax} \fi \def\gtr{\realbackslash gtr}% \def\less{\realbackslash less}% \def\hat{\realbackslash hat}% -%\def\char{\realbackslash char}% \def\TeX{\realbackslash TeX}% \def\dots{\realbackslash dots }% \def\result{\realbackslash result}% @@ -2396,7 +2394,12 @@ width0pt\relax} \fi \def\kbd##1{\realbackslash kbd {##1}}% \def\dfn##1{\realbackslash dfn {##1}}% \def\emph##1{\realbackslash emph {##1}}% -\def\value##1{\realbackslash value {##1}}% +% +% Handle some cases of @value -- where the variable name does not +% contain - or _, and the value does not contain any +% (non-fully-expandable) commands. +\let\value = \expandablevalue +% \unsepspaces } @@ -2469,14 +2472,24 @@ width0pt\relax} \fi % so we do not become unable to do a definition. {\catcode`\@=0 \catcode`\\=\other -@gdef@realbackslash{\}} + @gdef@realbackslash{\}} \let\indexbackslash=0 %overridden during \printindex. +\let\SETmarginindex=\relax % put index entries in margin (undocumented)? + +% For \ifx comparisons. +\def\emptymacro{\empty} -\let\SETmarginindex=\relax %initialize! -% workhorse for all \fooindexes -% #1 is name of index, #2 is stuff to put there -\def\doind #1#2{% +% Most index entries go through here, but \dosubind is the general case. +% +\def\doind#1#2{\dosubind{#1}{#2}\empty} + +% Workhorse for all \fooindexes. +% #1 is name of index, #2 is stuff to put there, #3 is subentry -- +% \empty if called from \doind, as we usually are. The main exception +% is with defuns, which call us directly. +% +\def\dosubind#1#2#3{% % Put the index entry in the margin if desired. \ifx\SETmarginindex\relax\else \insert\margin{\hbox{\vrule height8pt depth3pt width0pt #2}}% @@ -2487,13 +2500,22 @@ width0pt\relax} \fi \indexdummies % Must do this here, since \bf, etc expand at this stage \escapechar=`\\ {% - \let\folio=0% We will expand all macros now EXCEPT \folio. + \let\folio = 0% We will expand all macros now EXCEPT \folio. \def\rawbackslashxx{\indexbackslash}% \indexbackslash isn't defined now % so it will be output as is; and it will print as backslash. % + \def\thirdarg{#3}% + % + % If third arg is present, precede it with space in sort key. + \ifx\thirdarg\emptymacro + \let\subentry = \empty + \else + \def\subentry{ #3}% + \fi + % % First process the index-string with all font commands turned off % to get the string to sort by. - {\indexnofonts \xdef\indexsorttmp{#2}}% + {\indexnofonts \xdef\indexsorttmp{#2\subentry}}% % % Now produce the complete index entry, with both the sort key and the % original text, including any font commands. @@ -2502,33 +2524,35 @@ width0pt\relax} \fi \write\csname#1indfile\endcsname{% \realbackslash entry{\indexsorttmp}{\folio}{\the\toks0}}% }% - \temp + % + % If third (subentry) arg is present, add it to the index string. + \ifx\thirdarg\emptymacro \else + \toks0 = {#3}% + \edef\temp{\temp{\the\toks0}}% + \fi + % + % If a skip is the last thing on the list now, preserve it + % by backing up by \lastskip, doing the \write, then inserting + % the skip again. Otherwise, the whatsit generated by the + % \write will make \lastskip zero. The result is that sequences + % like this: + % @end defun + % @tindex whatever + % @defun ... + % will have extra space inserted, because the \medbreak in the + % start of the @defun won't see the skip inserted by the @end of + % the previous defun. + \iflinks + \skip0 = \lastskip \ifdim\lastskip = 0pt \else \vskip-\lastskip \fi + \temp + \ifdim\skip0 = 0pt \else \vskip\skip0 \fi + \fi }% }% \penalty\count255 }% } -\def\dosubind #1#2#3{% -{\count10=\lastpenalty % -{\indexdummies % Must do this here, since \bf, etc expand at this stage -\escapechar=`\\% -{\let\folio=0% -\def\rawbackslashxx{\indexbackslash}% -% -% Now process the index-string once, with all font commands turned off, -% to get the string to sort the index by. -{\indexnofonts -\xdef\temp1{#2 #3}% -}% -% Now produce the complete index entry. We process the index-string again, -% this time with font commands expanded, to get what to print in the index. -\edef\temp{% -\write \csname#1indfile\endcsname{% -\realbackslash entry {\temp1}{\folio}{#2}{#3}}}% -\temp }% -}\penalty\count10}} - % The index entry written in the file actually looks like % \entry {sortstring}{page}{topic} % or @@ -2952,7 +2976,7 @@ width0pt\relax} \fi \toks0 = {#1}% \edef\temp{{\realbackslash chapentry{\the\toks0}{\the\chapno}{\noexpand\folio}}}% \escapechar=`\\% -\write \contentsfile \temp % +\iflinks \write\contentsfile\temp \fi \donoderef % \global\let\section = \numberedsec \global\let\subsection = \numberedsubsec @@ -2973,7 +2997,7 @@ width0pt\relax} \fi \edef\temp{{\realbackslash chapentry{\the\toks0}% {\putwordAppendix{} \appendixletter}{\noexpand\folio}}}% \escapechar=`\\% -\write \contentsfile \temp % +\iflinks \write\contentsfile\temp \fi \appendixnoderef % \global\let\section = \appendixsec \global\let\subsection = \appendixsubsec @@ -3008,7 +3032,7 @@ width0pt\relax} \fi \toks0 = {#1}% \edef\temp{{\realbackslash unnumbchapentry{\the\toks0}{\noexpand\folio}}}% \escapechar=`\\% -\write \contentsfile \temp % +\iflinks \write\contentsfile\temp \fi \unnumbnoderef % \global\let\section = \unnumberedsec \global\let\subsection = \unnumberedsubsec @@ -3025,7 +3049,7 @@ width0pt\relax} \fi \edef\temp{{\realbackslash secentry % {\the\toks0}{\the\chapno}{\the\secno}{\noexpand\folio}}}% \escapechar=`\\% -\write \contentsfile \temp % +\iflinks \write\contentsfile\temp \fi \donoderef % \penalty 10000 % }} @@ -3041,7 +3065,7 @@ width0pt\relax} \fi \edef\temp{{\realbackslash secentry % {\the\toks0}{\appendixletter}{\the\secno}{\noexpand\folio}}}% \escapechar=`\\% -\write \contentsfile \temp % +\iflinks \write\contentsfile\temp \fi \appendixnoderef % \penalty 10000 % }} @@ -3054,7 +3078,7 @@ width0pt\relax} \fi \toks0 = {#1}% \edef\temp{{\realbackslash unnumbsecentry{\the\toks0}{\noexpand\folio}}}% \escapechar=`\\% -\write \contentsfile \temp % +\iflinks \write\contentsfile\temp \fi \unnumbnoderef % \penalty 10000 % }} @@ -3069,7 +3093,7 @@ width0pt\relax} \fi \edef\temp{{\realbackslash subsecentry % {\the\toks0}{\the\chapno}{\the\secno}{\the\subsecno}{\noexpand\folio}}}% \escapechar=`\\% -\write \contentsfile \temp % +\iflinks \write\contentsfile\temp \fi \donoderef % \penalty 10000 % }} @@ -3084,7 +3108,7 @@ width0pt\relax} \fi \edef\temp{{\realbackslash subsecentry % {\the\toks0}{\appendixletter}{\the\secno}{\the\subsecno}{\noexpand\folio}}}% \escapechar=`\\% -\write \contentsfile \temp % +\iflinks \write\contentsfile\temp \fi \appendixnoderef % \penalty 10000 % }} @@ -3097,7 +3121,7 @@ width0pt\relax} \fi \toks0 = {#1}% \edef\temp{{\realbackslash unnumbsubsecentry{\the\toks0}{\noexpand\folio}}}% \escapechar=`\\% -\write \contentsfile \temp % +\iflinks \write\contentsfile\temp \fi \unnumbnoderef % \penalty 10000 % }} @@ -3114,7 +3138,7 @@ width0pt\relax} \fi {\the\chapno}{\the\secno}{\the\subsecno}{\the\subsubsecno} {\noexpand\folio}}}% \escapechar=`\\% -\write \contentsfile \temp % +\iflinks \write\contentsfile\temp \fi \donoderef % \penalty 10000 % }} @@ -3131,7 +3155,7 @@ width0pt\relax} \fi {\appendixletter} {\the\secno}{\the\subsecno}{\the\subsubsecno}{\noexpand\folio}}}% \escapechar=`\\% -\write \contentsfile \temp % +\iflinks \write\contentsfile\temp \fi \appendixnoderef % \penalty 10000 % }} @@ -3144,7 +3168,7 @@ width0pt\relax} \fi \toks0 = {#1}% \edef\temp{{\realbackslash unnumbsubsubsecentry{\the\toks0}{\noexpand\folio}}}% \escapechar=`\\% -\write \contentsfile \temp % +\iflinks \write\contentsfile\temp \fi \unnumbnoderef % \penalty 10000 % }} @@ -3944,13 +3968,18 @@ width0pt\relax} \fi \begingroup\obeylines\activeparens\spacesplit{#3{#4}}} % @deftypemethod has an extra argument that nothing else does. Sigh. +% #1 is the \E... control sequence to end the definition (which we define). +% #2 is the \...x control sequence for consecutive fns (which we define). +% #3 is the control sequence to call to resume processing. +% #4, delimited by the space, is the class name. +% #5 is the method's return type. % \def\deftypemethparsebody#1#2#3#4 #5 {\begingroup\inENV % \medbreak % % Define the end token that this defining construct specifies % so that it will exit this group. \def#1{\endgraf\endgroup\medbreak}% -\def#2##1 {\begingroup\obeylines\activeparens\spacesplit{#3{##1}}}% +\def#2##1 ##2 {\begingroup\obeylines\activeparens\spacesplit{#3{##1}{##2}}}% \parindent=0in \advance\leftskip by \defbodyindent \advance \rightskip by \defbodyindent \exdentamount=\defbodyindent @@ -4173,7 +4202,7 @@ width0pt\relax} \fi \def\defspecx #1 {\errmessage{@defspecx in invalid context}} \def\deftypefnx #1 {\errmessage{@deftypefnx in invalid context}} \def\deftypemethodx #1 {\errmessage{@deftypemethodx in invalid context}} -\def\deftypeunx #1 {\errmessage{@deftypeunx in invalid context}} +\def\deftypefunx #1 {\errmessage{@deftypeunx in invalid context}} % @defmethod, and so on @@ -4329,7 +4358,220 @@ width0pt\relax} \fi \def\deftpx #1 {\errmessage{@deftpx in invalid context}} -\message{cross reference,} +\message{macros,} +% @macro. + +% To do this right we need a feature of e-TeX, \scantokens, +% which we arrange to emulate with a temporary file in ordinary TeX. +\ifx\eTeXversion\undefined + \newwrite\macscribble + \def\scantokens#1{% +% \toks0={#1}% + \immediate\openout\macscribble=\jobname.tmp + \immediate\write\macscribble{#1}%\the\toks0}% + \immediate\closeout\macscribble + \input \jobname.tmp +} +\fi + +\newcount\paramno % Count of parameters +\newtoks\macname % Macro name +\newif\ifrecursive % Is it recursive? + +% Utility: does \let #1 = #2, except with \csnames. +\def\cslet#1#2{% +\expandafter\expandafter +\expandafter\let +\expandafter\expandafter +\csname#1\endcsname +\csname#2\endcsname} + +% Macro bodies are absorbed as an argument in a context where +% all characters are catcode 10, 11 or 12, except \ which is active +% (as in normal texinfo). It is necessary to change the definition of \. + +\def\macrobodyctxt{% + \catcode`\~=12 + \catcode`\^=12 + \catcode`\_=12 + \catcode`\|=12 + \catcode`\<=12 + \catcode`\>=12 + \catcode`\+=12 + \catcode`\{=12 + \catcode`\}=12 + \catcode`\@=12 + \catcode`\^^M=10 + \usembodybackslash} + +% \mbodybackslash is the definition of \ in @macro bodies. +% It maps \foo\ => \csname macarg.foo\endcsname => #N +% where N is the macro parameter number. +% We define \csname macarg.\endcsname to be \realbackslash, so +% \\ in macro replacement text gets you a backslash. + +{\catcode`@=0 \catcode`\\=\active + @gdef@usembodybackslash{@let\=@mbodybackslash} + @gdef@mbodybackslash#1\{@csname macarg.#1@endcsname} +} +\expandafter\def\csname macarg.\endcsname{\realbackslash} + +% The catcode games are necessary because @macro may or may not +% have a brace-surrounded list of arguments, and we need to do +% different stuff in each case. Making {, } \other is the only +% way to prevent their being deleted by the tokenizer. +\def\macro{\recursivefalse + \bgroup\catcode`\{=\other\catcode`\}=\other\parsearg\macroxxx} +\def\rmacro{\recursivetrue + \bgroup\catcode`\{=\other\catcode`\}=\other\parsearg\macroxxx} + +\def\macroxxx#1{\egroup % started in \macro + \getargs{#1}% now \macname is the macname and \toks0 the arglist + \edef\temp{\the\toks0}% + \ifx\temp\empty % no arguments + \paramno=0% + \else + \expandafter\parsemargdef \the\toks0;% + \fi + \expandafter\ifx \csname macsave.\the\macname\endcsname \relax + \cslet{macsave.\the\macname}{\the\macname}% + \else + \message{Warning: redefining \the\macname}% + \fi + \begingroup \macrobodyctxt + \ifrecursive \expandafter\parsermacbody + \else \expandafter\parsemacbody + \fi} + +\def\unmacro{\parsearg\unmacroxxx} +\def\unmacroxxx#1{ + \expandafter\ifx \csname macsave.\the\macname\endcsname \relax + \errmessage{Macro \the\macname\ not defined.}% + \else + \cslet{#1}{macsave.#1}% + \expandafter\let \csname macsave.\the\macname\endcsname \undefined + \fi +} + +% Parse the optional {params} list. Set up \paramno and \paramlist +% so \defmacro knows what to do. Define \macarg.blah for each blah +% in the params list, to be ##N where N is the position in that list. +% That gets used by \mbodybackslash (above). + +% This code has to take great care with `macro parameter char #'. The +% eight hashes in a row on the macarg.#1 line collapse to four in the +% definition of \macarg.blah, to two when \parsemacbody expands the +% macro replacement text, and to one when \defmacro writes the macro +% definiton. The games with \twohash are to postpone expansion till +% the very end, when \parsemargdefyyy crunches \paramlist into +% something that can be splatted into a \expandafter\def\blah line (in +% \defmacro). +\def\parsemargdef#1;{\paramno=0\def\paramlist{}\parsemargdefxxx#1,;,} +\def\parsemargdefxxx#1,{% + \let\twohash\relax + \if#1;\let\next=\parsemargdefyyy + \else \let\next=\parsemargdefxxx + \advance\paramno by 1% + \expandafter\edef\csname macarg.#1\endcsname{########\the\paramno}% + \edef\paramlist{\paramlist\twohash\twohash\the\paramno,}% + \fi\next} +\def\parsemargdefyyy{\let\twohash##\relax \edef\paramlist{\paramlist}} + +% These two commands read recursive and nonrecursive macro bodies. +% (They're different since rec and nonrec macros end differently.) + +\long\def\parsemacbody#1@end macro% +{\xdef\temp{#1} \endgroup\defmacro}% +\long\def\parsermacbody#1@end macro% +{\xdef\temp{#1} \endgroup\defmacro}% + + +% This defines the macro itself. There are six cases: recursive and +% nonrecursive macros of zero, one, and many arguments. +% Much magic with \expandafter here. +\def\defmacro{% + \ifrecursive + \ifcase\paramno + % 0 + \expandafter\edef\csname\the\macname\endcsname{% + \noexpand\scantokens{\temp}}% + \or % 1 + \expandafter\edef\csname\the\macname\endcsname{% + \noexpand\braceorline\csname\the\macname xxx\endcsname}% + \expandafter\edef\csname\the\macname xxx\endcsname##1{% + \noexpand\scantokens{\temp}}% + \else % many + \expandafter\edef\csname\the\macname\endcsname##1{% + \csname\the\macname xxx\endcsname ##1,}% + \expandafter\expandafter + \expandafter\edef + \expandafter\expandafter + \csname\the\macname xxx\endcsname + \paramlist{\noexpand\scantokens{\temp}}% + \fi + \else + \ifcase\paramno + % 0 + \expandafter\edef\csname\the\macname\endcsname{% + \noexpand\norecurse{\the\macname}% + \noexpand\scantokens{\temp}\egroup}% + \or % 1 + \expandafter\edef\csname\the\macname\endcsname{% + \noexpand\braceorline\csname\the\macname xxx\endcsname}% + \expandafter\edef\csname\the\macname xxx\endcsname##1{% + \noexpand\norecurse{\the\macname} + \noexpand\scantokens{\temp}\egroup}% + \else % many + \expandafter\edef\csname\the\macname\endcsname##1{% + \csname\the\macname xxx\endcsname ##1,}% + \expandafter\expandafter + \expandafter\edef + \expandafter\expandafter + \csname\the\macname xxx\endcsname + \paramlist{% + \noexpand\norecurse{\the\macname} + \noexpand\scantokens{\temp}\egroup}% + \fi + \fi} + +\def\norecurse#1{\bgroup\cslet{#1}{macsave.#1}} + +% \braceorline decides whether the next nonwhitespace character is a +% {. If so it reads up to the closing }, if not, it reads the whole +% line. Whatever was read is then fed to the next control sequence +% as an argument (by \parsebrace or \parsearg) +\def\braceorline#1{\let\next=#1\futurelet\nchar\braceorlinexxx} +\def\braceorlinexxx{% + \ifx\nchar\bgroup\else + \expandafter\parsearg + \fi \next} + +% We need {} to be \other inside these commands. [] are temporary +% grouping symbols. +\begingroup +\catcode`\{=\other \catcode`\}=\other +\catcode`\[=1 \catcode`\]=2 + +% @macro can be called with or without a brace-surrounded macro +% argument list. These three sequences extract the macro name and arg +% list in hopefully all cases. Note that anything on the line after the +% first pair of braces will be thrown out (Makeinfo puts it into the +% macro body). +\gdef\getargs#1[\getargsxxx|#1 {}|] +\gdef\getargsxxx|#1 {#2}#3|[% + \toks0=[#2]% + \edef\tmp[\the\toks0]% + \ifx\tmp\empty + \getargsnospaces|#1{}|% + \else + \macname=[#1]% + \fi] +\gdef\getargsnospaces|#1{#2}#3|[\macname=[#1]\toks0=[#2]] + +\endgroup + + +\message{cross references,} \newwrite\auxfile \newif\ifhavexrefs % True if xref values are known. @@ -4422,7 +4664,9 @@ width0pt\relax} \fi {\let\folio=0 \normalturnoffactive \edef\next{\write\auxfile{\internalsetq{#1}{#2}}}% - \next + \iflinks + \next + \fi }% } @@ -4476,12 +4720,14 @@ width0pt\relax} \fi \expandafter\ifx\csname X#1\endcsname\relax % If not defined, say something at least. \angleleft un\-de\-fined\angleright - \ifhavexrefs - \message{\linenumber Undefined cross reference `#1'.}% - \else - \ifwarnedxrefs\else - \global\warnedxrefstrue - \message{Cross reference values unknown; you must run TeX again.}% + \iflinks + \ifhavexrefs + \message{\linenumber Undefined cross reference `#1'.}% + \else + \ifwarnedxrefs\else + \global\warnedxrefstrue + \message{Cross reference values unknown; you must run TeX again.}% + \fi \fi \fi \else @@ -4724,7 +4970,9 @@ width0pt\relax} \fi \openin 1 = epsf.tex \ifeof 1 \else \closein 1 - \def\epsfannounce{\toks0 = }% do not bother showing banner + % Do not bother showing banner with post-v2.7 epsf.tex (available in + % doc/epsf.tex until it shows up on ctan). + \def\epsfannounce{\toks0 = }% \input epsf.tex \fi % @@ -4754,39 +5002,26 @@ width0pt\relax} \fi % \epsfbox itself resets \epsf?size at each figure. \setbox0 = \hbox{\ignorespaces #2}\ifdim\wd0 > 0pt \epsfxsize=#2\relax \fi \setbox0 = \hbox{\ignorespaces #3}\ifdim\wd0 > 0pt \epsfysize=#3\relax \fi - \epsfbox{#1.eps}% + % If the image is by itself, center it. + \ifvmode + \centerline{\epsfbox{#1.eps}}% + \else + \epsfbox{#1.eps}% + \fi } -% End of control word definitions. - - -\message{and turning on texinfo input format.} - -\def\openindices{% - \newindex{cp}% - \newcodeindex{fn}% - \newcodeindex{vr}% - \newcodeindex{tp}% - \newcodeindex{ky}% - \newcodeindex{pg}% -} -% Set some numeric style parameters, for 8.5 x 11 format. +\message{paper sizes,} +% And other related parameters. -\hsize = 6in -\hoffset = .25in \newdimen\defaultparindent \defaultparindent = 15pt -\parindent = \defaultparindent -\parskip 3pt plus 2pt minus 1pt -\setleading{13.2pt} -\advance\topskip by 1.2cm \chapheadingskip = 15pt plus 4pt minus 2pt \secheadingskip = 12pt plus 3pt minus 2pt \subsecheadingskip = 9pt plus 2pt minus 2pt % Prevent underfull vbox error messages. -\vbadness=10000 +\vbadness = 10000 % Following George Bush, just get rid of widows and orphans. \widowpenalty=10000 @@ -4795,101 +5030,125 @@ width0pt\relax} \fi % Use TeX 3.0's \emergencystretch to help line breaking, but if we're % using an old version of TeX, don't do anything. We want the amount of % stretch added to depend on the line length, hence the dependence on -% \hsize. This makes it come to about 9pt for the 8.5x11 format. +% \hsize. This makes it come to about 9pt for the 8.5x11 format. We +% call this whenever the paper size is set. % -\ifx\emergencystretch\thisisundefined - % Allow us to assign to \emergencystretch anyway. - \def\emergencystretch{\dimen0}% -\else - \emergencystretch = \hsize - \divide\emergencystretch by 45 -\fi +\def\setemergencystretch{% + \ifx\emergencystretch\thisisundefined + % Allow us to assign to \emergencystretch anyway. + \def\emergencystretch{\dimen0}% + \else + \emergencystretch = \hsize + \divide\emergencystretch by 45 + \fi +} -% Use @smallbook to reset parameters for 7x9.5 format (or else 7x9.25) -\def\smallbook{ - \global\chapheadingskip = 15pt plus 4pt minus 2pt - \global\secheadingskip = 12pt plus 3pt minus 2pt - \global\subsecheadingskip = 9pt plus 2pt minus 2pt +% Parameters in order: 1) textheight; 2) textwidth; 3) voffset; +% 4) hoffset; 5) binding offset; 6) topskip. Then whoever calls us can +% set \parskip and call \setleading for \baselineskip. +% +\def\internalpagesizes#1#2#3#4#5#6{% + \voffset = #3\relax + \topskip = #6\relax + \splittopskip = \topskip % - \global\lispnarrowing = 0.3in - \setleading{12pt} - \advance\topskip by -1cm - \global\parskip 2pt plus 1pt - \global\hsize = 5in - \global\vsize=7.5in - \global\tolerance=700 - \global\hfuzz=1pt - \global\contentsrightmargin=0pt - \global\deftypemargin=0pt - \global\defbodyindent=.5cm + \vsize = #1\relax + \advance\vsize by \topskip + \outervsize = \vsize + \advance\outervsize by 0.6in + \pageheight = \vsize % - \global\pagewidth=\hsize - \global\pageheight=\vsize + \hsize = #2\relax + \outerhsize = \hsize + \advance\outerhsize by 0.5in + \pagewidth = \hsize % - \global\let\smalllisp=\smalllispx - \global\let\smallexample=\smalllispx - \global\def\Esmallexample{\Esmalllisp} + \normaloffset = #4\relax + \bindingoffset = #5\relax + % + \parindent = \defaultparindent + \setemergencystretch } -% Use @afourpaper to print on European A4 paper. -\def\afourpaper{ -\global\tolerance=700 -\global\hfuzz=1pt -\setleading{12pt} -\global\parskip 15pt plus 1pt - -\global\vsize= 53\baselineskip -\advance\vsize by \topskip -%\global\hsize= 5.85in % A4 wide 10pt -\global\hsize= 6.5in -\global\outerhsize=\hsize -\global\advance\outerhsize by 0.5in -\global\outervsize=\vsize -\global\advance\outervsize by 0.6in - -\global\pagewidth=\hsize -\global\pageheight=\vsize -} +% @letterpaper (the default). +\def\letterpaper{{\globaldefs = 1 + \parskip = 3pt plus 2pt minus 1pt + \setleading{13.2pt}% + % + % If page is nothing but text, make it come out even. + \internalpagesizes{46\baselineskip}{6in}{\voffset}{.25in}{\bindingoffset}{36pt}% +}} + +% Use @smallbook to reset parameters for 7x9.5 (or so) format. +\def\smallbook{{\globaldefs = 1 + \parskip = 2pt plus 1pt + \setleading{12pt}% + % + \internalpagesizes{7.5in}{5.in}{\voffset}{.25in}{\bindingoffset}{16pt}% + % + \lispnarrowing = 0.3in + \tolerance = 700 + \hfuzz = 1pt + \contentsrightmargin = 0pt + \deftypemargin = 0pt + \defbodyindent = .5cm + % + \let\smalllisp = \smalllispx + \let\smallexample = \smalllispx + \def\Esmallexample{\Esmalllisp}% +}} -\bindingoffset=0pt -\normaloffset=\hoffset -\pagewidth=\hsize -\pageheight=\vsize - -% Allow control of the text dimensions. Parameters in order: textheight; -% textwidth; voffset; hoffset; binding offset; topskip. -% All require a dimension; -% header is additional; added length extends the bottom of the page. - -\def\changepagesizes#1#2#3#4#5#6{ - \global\vsize= #1 - \global\topskip= #6 - \advance\vsize by \topskip - \global\voffset= #3 - \global\hsize= #2 - \global\outerhsize=\hsize - \global\advance\outerhsize by 0.5in - \global\outervsize=\vsize - \global\advance\outervsize by 0.6in - \global\pagewidth=\hsize - \global\pageheight=\vsize - \global\normaloffset= #4 - \global\bindingoffset= #5} +% Use @afourpaper to print on European A4 paper. +\def\afourpaper{{\globaldefs = 1 + \setleading{12pt}% + \parskip = 3pt plus 2pt minus 1pt + % + \internalpagesizes{53\baselineskip}{6.5in}{\voffset}{.25in}{\bindingoffset}{44pt}% + % + \tolerance = 700 + \hfuzz = 1pt +}} % A specific text layout, 24x15cm overall, intended for A4 paper. Top margin % 29mm, hence bottom margin 28mm, nominal side margin 3cm. -\def\afourlatex - {\global\tolerance=700 - \global\hfuzz=1pt - \setleading{12pt} - \global\parskip 15pt plus 1pt - \advance\baselineskip by 1.6pt - \changepagesizes{237mm}{150mm}{3.6mm}{3.6mm}{3mm}{7mm} - } +\def\afourlatex{{\globaldefs = 1 + \setleading{13.6pt}% + % + \afourpaper + \internalpagesizes{237mm}{150mm}{3.6mm}{3.6mm}{3mm}{7mm}% + % + \globaldefs = 0 +}} % Use @afourwide to print on European A4 paper in wide format. -\def\afourwide{\afourpaper -\changepagesizes{9.5in}{6.5in}{\hoffset}{\normaloffset}{\bindingoffset}{7mm}} +\def\afourwide{% + \afourpaper + \internalpagesizes{9.5in}{6.5in}{\hoffset}{\normaloffset}{\bindingoffset}{7mm}% + % + \globaldefs = 0 +} + +% @pagesizes TEXTHEIGHT[,TEXTWIDTH] +% Perhaps we should allow setting the margins, \topskip, \parskip, +% and/or leading, also. Or perhaps we should compute them somehow. +% +\def\pagesizes{\parsearg\pagesizesxxx} +\def\pagesizesxxx#1{\pagesizesyyy #1,,\finish} +\def\pagesizesyyy#1,#2,#3\finish{{% + \setbox0 = \hbox{\ignorespaces #2}\ifdim\wd0 > 0pt \hsize=#2\relax \fi + \globaldefs = 1 + % + \parskip = 3pt plus 2pt minus 1pt + \setleading{13.2pt}% + % + \internalpagesizes{#1}{\hsize}{\voffset}{\normaloffset}{\bindingoffset}{44pt}% +}} + +% Set default to letter. +% +\letterpaper + +\message{and turning on texinfo input format.} % Define macros to output various characters with catcode for normal text. \catcode`\"=\other diff --git a/gcc/tm.texi b/gcc/tm.texi index 81a9a73..0637a1a 100644 --- a/gcc/tm.texi +++ b/gcc/tm.texi @@ -283,6 +283,15 @@ the argument @samp{-lgcc} to tell the linker to do the search. This macro is similar to @code{LINK_LIBGCC_SPECIAL}, except that it does not affect @samp{-L} options. +@findex LINK_COMMAND_SPEC +@item LINK_COMMAND_SPEC +A C string constant giving the complete command line need to execute the +linker. When you do this, you will need to update your port each time a +change is made to the link command line within @file{gcc.c}. Therefore, +define this macro only if you need to completely redefine the command +line for invoking the linker and there is no other way to accomplish +the effect you need. + @findex MULTILIB_DEFAULTS @item MULTILIB_DEFAULTS Define this macro as a C expression for the initializer of an array of @@ -6723,6 +6732,13 @@ define @code{INCOMING_RETURN_ADDR_RTX} and either set prologue, or call @code{dwarf2out_def_cfa} and @code{dwarf2out_reg_save} as appropriate from @code{FUNCTION_PROLOGUE} if you don't. +@findex DWARF2_FRAME_INFO +@item DWARF2_FRAME_INFO +Define this macro to a nonzero value if GNU CC should always output +Dwarf 2 frame information. If @code{DWARF2_UNWIND_INFO} +(@pxref{Exception Region Output} is nonzero, GNU CC will output this +information not matter how you define @code{DWARF2_FRAME_INFO}. + @findex LINKER_DOES_NOT_WORK_WITH_DWARF2 @item LINKER_DOES_NOT_WORK_WITH_DWARF2 Define this macro if the linker does not work with Dwarf version 2. @@ -7316,6 +7332,11 @@ of @var{olddecl}. Examples of when this is needed are when one attribute overrides another, or when an attribute is nullified by a subsequent definition. +@findex SET_DEFAULT_DECL_ATTRIBUTES +@item SET_DEFAULT_DECL_ATTRIBUTES (@var{decl}, @var{attributes}) +If defined, a C statement that assigns default attributes to +newly defined @var{decl}. + @findex DOLLARS_IN_IDENTIFIERS @item DOLLARS_IN_IDENTIFIERS Define this macro to control use of the character @samp{$} in identifier diff --git a/gcc/toplev.c b/gcc/toplev.c index 38bba1b..353d418 100644 --- a/gcc/toplev.c +++ b/gcc/toplev.c @@ -495,6 +495,11 @@ int flag_move_all_movables = 0; int flag_reduce_all_givs = 0; +/* Nonzero to perform full register move optimization passes. This is the + default for -O2. */ + +int flag_regmove = 0; + /* Nonzero for -fwritable-strings: store string constants in data segment and don't uniquize them. */ @@ -701,8 +706,6 @@ int flag_check_memory_usage = 0; -fcheck-memory-usage. */ int flag_prefix_function_name = 0; -int flag_regmove = 0; - /* 0 if pointer arguments may alias each other. True in C. 1 if pointer arguments may not alias each other but may alias global variables. @@ -717,6 +720,8 @@ int flag_argument_noalias = 0; if alias analysis (in general) is enabled. */ int flag_strict_aliasing = 0; +extern int flag_dump_unnumbered; + /* Table of language-independent -f options. STRING is the option name. VARIABLE is the address of the variable. ON_VALUE is the value to store in VARIABLE @@ -783,6 +788,7 @@ struct { char *string; int *variable; int on_value;} f_options[] = {"verbose-asm", &flag_verbose_asm, 1}, {"gnu-linker", &flag_gnu_linker, 1}, {"regmove", &flag_regmove, 1}, + {"optimize-register-move", &flag_regmove, 1}, {"pack-struct", &flag_pack_struct, 1}, {"stack-check", &flag_stack_check, 1}, {"argument-alias", &flag_argument_noalias, 0}, @@ -790,7 +796,8 @@ struct { char *string; int *variable; int on_value;} f_options[] = {"argument-noalias-global", &flag_argument_noalias, 2}, {"strict-aliasing", &flag_strict_aliasing, 1}, {"check-memory-usage", &flag_check_memory_usage, 1}, - {"prefix-function-name", &flag_prefix_function_name, 1} + {"prefix-function-name", &flag_prefix_function_name, 1}, + {"dump-unnumbered", &flag_dump_unnumbered, 1} }; /* Table of language-specific options. */ @@ -3517,11 +3524,6 @@ rest_of_compilation (decl) failure = reload (insns, 0, rtl_dump_file); }); - if (global_reg_dump) - { - TIMEVAR (dump_time, dump_global_regs (rtl_dump_file)); - close_dump_file (print_rtl_with_bb, insns); - } if (failure) goto exit_rest_of_compilation; @@ -3539,6 +3541,11 @@ rest_of_compilation (decl) thread_prologue_and_epilogue_insns (insns); + if (global_reg_dump) + { + TIMEVAR (dump_time, dump_global_regs (rtl_dump_file)); + close_dump_file (print_rtl_with_bb, insns); + } if (optimize > 0 && flag_schedule_insns_after_reload) { if (sched2_dump) @@ -4950,9 +4950,15 @@ get_set_constructor_bytes (init, buffer, wd_size) } return non_const_bits; } - + #ifdef ENABLE_CHECKING -/* Complain if the tree code does not match the expected one. */ + +/* Complain if the tree code does not match the expected one. + NODE is the tree node in question, CODE is the expected tree code, + and FILE and LINE are the filename and line number, respectively, + of the line on which the check was done. If NONFATAL is nonzero, + don't abort if the reference is invalid; instead, return 0. + If the reference is valid, return NODE. */ tree tree_check (node, code, file, line, nofatal) @@ -4962,19 +4968,17 @@ tree_check (node, code, file, line, nofatal) int line; int nofatal; { - if (TREE_CODE (node) != code) - { - if (nofatal) - return 0; - else - fatal ("%s:%d: Expect %s, have %s\n", file, line, - tree_code_name[code], tree_code_name[TREE_CODE (node)]); - } - - return node; + if (TREE_CODE (node) == code) + return node; + else if (nofatal) + return 0; + else + fatal ("%s:%d: Expect %s, have %s\n", file, line, + tree_code_name[code], tree_code_name[TREE_CODE (node)]); } -/* Complain if the class of the tree node does not match. */ +/* Similar to above, except that we check for a class of tree + code, given in CL. */ tree tree_class_check (node, cl, file, line, nofatal) @@ -4984,18 +4988,16 @@ tree_class_check (node, cl, file, line, nofatal) int line; int nofatal; { - if (TREE_CODE_CLASS (TREE_CODE (node)) != cl) - { - if (nofatal) - return 0; - else - fatal ("%s:%d: Expect '%c', have '%s'\n", file, line, - cl, tree_code_name[TREE_CODE (node)]); - } - - return node; + if (TREE_CODE_CLASS (TREE_CODE (node)) == cl) + return node; + else if (nofatal) + return 0; + else + fatal ("%s:%d: Expect '%c', have '%s'\n", file, line, + cl, tree_code_name[TREE_CODE (node)]); } -/* Complain if the node is not an expression. */ + +/* Likewise, but complain if the tree node is not an expression. */ tree expr_check (node, ignored, file, line, nofatal) @@ -1610,7 +1610,7 @@ extern tree save_expr PROTO((tree)); extern int first_rtl_op PROTO((enum tree_code)); /* unsave_expr (EXP) returns an expression equivalent to EXP but it - can be used multiple times and will evaluate EXP, in it's entirety + can be used multiple times and will evaluate EXP, in its entirety each time. */ extern tree unsave_expr PROTO((tree)); diff --git a/gcc/version.c b/gcc/version.c index ee8b352..1b4f860 100644 --- a/gcc/version.c +++ b/gcc/version.c @@ -1 +1 @@ -char *version_string = "egcs-2.91.43 19980629 (gcc2 ss-980502 experimental)"; +char *version_string = "egcs-2.91.45 19980628 (gcc2 ss-980609 experimental)"; |