📄 999-cvs-updates.patch
字号:
@@ -155,14 +466,14 @@ side-effect of having a length greater or equal to 3. 2004-07-13 Eric Botcazou <ebotcazou@libertysurf.fr>- Lloyd Parkes <lloyd@must-have-coffee.gen.nz>+ Lloyd Parkes <lloyd@must-have-coffee.gen.nz> PR target/15186 * config/sparc/sol2-bi.h (LINK_ARCH64_SPEC_BASE): Pass /usr/ucblib/sparcv9 as -R path when -compat-bsd is specified. 2004-07-13 Eric Botcazou <ebotcazou@libertysurf.fr>- Martin Sebor <sebor@roguewave.com>+ Martin Sebor <sebor@roguewave.com> PR target/12602 * doc/invoke.texi (SPARC options): Document -threads@@ -252,18 +563,18 @@ Backport from mainline: 2004-01-19 Richard Henderson <rth@redhat.com>- * alpha.md (UNSPEC_NT_LDA): Renumber.- (UNSPEC_CVTLQ, cvtlq): New.- (extendsidi2_1): Rename from extendsidi2_nofix; remove f/f.- (extendsidi2_fix): Remove.- (extendsidi2 splitter): Use cvtlq.- (extendsidi2 fp peepholes): Remove.- (cvtql): Use SFmode instead of SImode.- (fix_trunc?fsi): Update to match.- (floatsisf2_ieee, floatsisf2, floatsidf2_ieee, floatsidf2): New.- (movsi): Rename from movsi_nofix, remove f alternatives.- (movsi_nt_vms): Similarly.- (movsi_fix, movsi_nt_vms_fix): Remove.+ * alpha.md (UNSPEC_NT_LDA): Renumber.+ (UNSPEC_CVTLQ, cvtlq): New.+ (extendsidi2_1): Rename from extendsidi2_nofix; remove f/f.+ (extendsidi2_fix): Remove.+ (extendsidi2 splitter): Use cvtlq.+ (extendsidi2 fp peepholes): Remove.+ (cvtql): Use SFmode instead of SImode.+ (fix_trunc?fsi): Update to match.+ (floatsisf2_ieee, floatsisf2, floatsidf2_ieee, floatsidf2): New.+ (movsi): Rename from movsi_nofix, remove f alternatives.+ (movsi_nt_vms): Similarly.+ (movsi_fix, movsi_nt_vms_fix): Remove. 2004-05-26 Hans-Peter Nilsson <hp@axis.com> Index: gcc/aclocal.m4===================================================================RCS file: /cvs/gcc/gcc/gcc/aclocal.m4,vretrieving revision 1.61.2.4retrieving revision 1.61.2.5diff -u -r1.61.2.4 -r1.61.2.5--- gcc/gcc/aclocal.m4 1 Oct 2003 21:56:34 -0000 1.61.2.4+++ gcc/gcc/aclocal.m4 4 Dec 2004 01:51:47 -0000 1.61.2.5@@ -413,7 +413,7 @@ # read() to the same fd. The only system known to have a problem here # is VMS, where text files have record structure. case "$host_os" in- vms*) + vms* | ultrix*) gcc_cv_func_mmap_file=no ;; *) gcc_cv_func_mmap_file=yes;;Index: gcc/alias.c===================================================================RCS file: /cvs/gcc/gcc/gcc/alias.c,vretrieving revision 1.181.2.6retrieving revision 1.181.2.7diff -u -r1.181.2.6 -r1.181.2.7--- gcc/gcc/alias.c 28 May 2004 17:27:27 -0000 1.181.2.6+++ gcc/gcc/alias.c 10 Dec 2004 17:25:00 -0000 1.181.2.7@@ -508,6 +508,8 @@ /* If we haven't computed the actual alias set, do it now. */ if (DECL_POINTER_ALIAS_SET (decl) == -2) {+ tree pointed_to_type = TREE_TYPE (TREE_TYPE (decl));+ /* No two restricted pointers can point at the same thing. However, a restricted pointer can point at the same thing as an unrestricted pointer, if that unrestricted pointer@@ -516,11 +518,22 @@ alias set for the type pointed to by the type of the decl. */ HOST_WIDE_INT pointed_to_alias_set- = get_alias_set (TREE_TYPE (TREE_TYPE (decl)));+ = get_alias_set (pointed_to_type); if (pointed_to_alias_set == 0) /* It's not legal to make a subset of alias set zero. */- ;+ DECL_POINTER_ALIAS_SET (decl) = 0;+ else if (AGGREGATE_TYPE_P (pointed_to_type))+ /* For an aggregate, we must treat the restricted+ pointer the same as an ordinary pointer. If we+ were to make the type pointed to by the+ restricted pointer a subset of the pointed-to+ type, then we would believe that other subsets+ of the pointed-to type (such as fields of that+ type) do not conflict with the type pointed to+ by the restricted pointer. */+ DECL_POINTER_ALIAS_SET (decl)+ = pointed_to_alias_set; else { DECL_POINTER_ALIAS_SET (decl) = new_alias_set ();Index: gcc/c-parse.in===================================================================RCS file: /cvs/gcc/gcc/gcc/c-parse.in,vretrieving revision 1.152.14.1retrieving revision 1.152.14.2diff -u -r1.152.14.1 -r1.152.14.2--- gcc/gcc/c-parse.in 28 Jan 2003 01:54:03 -0000 1.152.14.1+++ gcc/gcc/c-parse.in 21 Dec 2004 21:51:26 -0000 1.152.14.2@@ -2177,6 +2177,7 @@ push_label_level (); compstmt_count++; $$ = add_stmt (build_stmt (COMPOUND_STMT, last_tree));+ last_expr_type = NULL_TREE; } ; Index: gcc/combine.c===================================================================RCS file: /cvs/gcc/gcc/gcc/combine.c,vretrieving revision 1.325.2.17retrieving revision 1.325.2.19diff -u -r1.325.2.17 -r1.325.2.19--- gcc/gcc/combine.c 25 Jul 2004 18:49:54 -0000 1.325.2.17+++ gcc/gcc/combine.c 18 Jan 2005 08:39:05 -0000 1.325.2.19@@ -10138,13 +10138,8 @@ result = gen_lowpart_common (mode, x); #ifdef CANNOT_CHANGE_MODE_CLASS- if (result != 0- && GET_CODE (result) == SUBREG- && GET_CODE (SUBREG_REG (result)) == REG- && REGNO (SUBREG_REG (result)) >= FIRST_PSEUDO_REGISTER)- bitmap_set_bit (&subregs_of_mode, REGNO (SUBREG_REG (result))- * MAX_MACHINE_MODE- + GET_MODE (result));+ if (result != 0 && GET_CODE (result) == SUBREG)+ record_subregs_of_mode (result); #endif if (result)@@ -10818,34 +10813,61 @@ break; case SUBREG:- /* Check for the case where we are comparing A - C1 with C2,- both constants are smaller than 1/2 the maximum positive- value in MODE, and the comparison is equality or unsigned.- In that case, if A is either zero-extended to MODE or has- sufficient sign bits so that the high-order bit in MODE- is a copy of the sign in the inner mode, we can prove that it is- safe to do the operation in the wider mode. This simplifies- many range checks. */+ /* Check for the case where we are comparing A - C1 with C2, that is++ (subreg:MODE (plus (A) (-C1))) op (C2)++ with C1 a constant, and try to lift the SUBREG, i.e. to do the+ comparison in the wider mode. One of the following two conditions+ must be true in order for this to be valid:++ 1. The mode extension results in the same bit pattern being added+ on both sides and the comparison is equality or unsigned. As+ C2 has been truncated to fit in MODE, the pattern can only be+ all 0s or all 1s.++ 2. The mode extension results in the sign bit being copied on+ each side.++ The difficulty here is that we have predicates for A but not for+ (A - C1) so we need to check that C1 is within proper bounds so+ as to perturbate A as little as possible. */ if (mode_width <= HOST_BITS_PER_WIDE_INT && subreg_lowpart_p (op0)+ && GET_MODE_BITSIZE (GET_MODE (SUBREG_REG (op0))) > mode_width && GET_CODE (SUBREG_REG (op0)) == PLUS- && GET_CODE (XEXP (SUBREG_REG (op0), 1)) == CONST_INT- && INTVAL (XEXP (SUBREG_REG (op0), 1)) < 0- && (-INTVAL (XEXP (SUBREG_REG (op0), 1))- < (HOST_WIDE_INT) (GET_MODE_MASK (mode) / 2))- && (unsigned HOST_WIDE_INT) const_op < GET_MODE_MASK (mode) / 2- && (0 == (nonzero_bits (XEXP (SUBREG_REG (op0), 0),- GET_MODE (SUBREG_REG (op0)))- & ~GET_MODE_MASK (mode))- || (num_sign_bit_copies (XEXP (SUBREG_REG (op0), 0),- GET_MODE (SUBREG_REG (op0)))- > (unsigned int)- (GET_MODE_BITSIZE (GET_MODE (SUBREG_REG (op0)))- - GET_MODE_BITSIZE (mode)))))+ && GET_CODE (XEXP (SUBREG_REG (op0), 1)) == CONST_INT) {- op0 = SUBREG_REG (op0);- continue;+ enum machine_mode inner_mode = GET_MODE (SUBREG_REG (op0));+ rtx a = XEXP (SUBREG_REG (op0), 0);+ HOST_WIDE_INT c1 = -INTVAL (XEXP (SUBREG_REG (op0), 1));++ if ((c1 > 0+ && (unsigned HOST_WIDE_INT) c1+ < (unsigned HOST_WIDE_INT) 1 << (mode_width - 1)+ && (equality_comparison_p || unsigned_comparison_p)+ /* (A - C1) zero-extends if it is positive and sign-extends+ if it is negative, C2 both zero- and sign-extends. */+ && ((0 == (nonzero_bits (a, inner_mode)+ & ~GET_MODE_MASK (mode))+ && const_op >= 0)+ /* (A - C1) sign-extends if it is positive and 1-extends+ if it is negative, C2 both sign- and 1-extends. */+ || (num_sign_bit_copies (a, inner_mode)+ > (unsigned int) (GET_MODE_BITSIZE (inner_mode)+ - mode_width)+ && const_op < 0)))+ || ((unsigned HOST_WIDE_INT) c1+ < (unsigned HOST_WIDE_INT) 1 << (mode_width - 2)+ /* (A - C1) always sign-extends, like C2. */+ && num_sign_bit_copies (a, inner_mode)+ > (unsigned int) (GET_MODE_BITSIZE (inner_mode)+ - mode_width - 1)))+ {+ op0 = SUBREG_REG (op0);+ continue;+ } } /* If the inner mode is narrower and we are extracting the low part,Index: gcc/configure===================================================================RCS file: /cvs/gcc/gcc/gcc/configure,vretrieving revision 1.641.2.23retrieving revision 1.641.2.24diff -u -r1.641.2.23 -r1.641.2.24--- gcc/gcc/configure 1 Apr 2004 16:55:23 -0000 1.641.2.23+++ gcc/gcc/configure 4 Dec 2004 01:51:43 -0000 1.641.2.24@@ -2399,7 +2399,7 @@ fi # Find some useful tools-for ac_prog in gawk mawk nawk awk+for ac_prog in mawk gawk nawk awk do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2@@ -3947,7 +3947,7 @@ # read() to the same fd. The only system known to have a problem here # is VMS, where text files have record structure. case "$host_os" in- vms*) + vms* | ultrix*) gcc_cv_func_mmap_file=no ;; *) gcc_cv_func_mmap_file=yes;;@@ -8120,7 +8120,7 @@ echo "$ac_t""$gcc_cv_ld_eh_frame_hdr" 1>&6 echo $ac_n "checking linker --as-needed support""... $ac_c" 1>&6-echo "configure:8250: checking linker --as-needed support" >&5+echo "configure:8124: checking linker --as-needed support" >&5 gcc_cv_ld_as_needed=no if test x$gcc_cv_gld_major_version != x -a x$gcc_cv_gld_minor_version != x; then if test "$gcc_cv_gld_major_version" -eq 2 -a "$gcc_cv_gld_minor_version" -ge 16 -o "$gcc_cv_gld_major_version" -gt 2 && grep 'EMUL = elf' ../ld/Makefile > /dev/null; then@@ -8144,7 +8144,7 @@ case "$target" in mips*-*-*) echo $ac_n "checking whether libgloss uses STARTUP directives consistently""... $ac_c" 1>&6-echo "configure:8127: checking whether libgloss uses STARTUP directives consistently" >&5+echo "configure:8148: checking whether libgloss uses STARTUP directives consistently" >&5 gcc_cv_mips_libgloss_startup=no gcc_cv_libgloss_srcdir=`echo $srcdir | sed -e 's,/gcc$,,'`/libgloss if test "x$exec_prefix" = xNONE; then@@ -8349,7 +8349,7 @@ echo $ac_n "checking whether to enable maintainer-specific portions of Makefiles""... $ac_c" 1>&6-echo "configure:8332: checking whether to enable maintainer-specific portions of Makefiles" >&5+echo "configure:8353: checking whether to enable maintainer-specific portions of Makefiles" >&5 # Check whether --enable-maintainer-mode or --disable-maintainer-mode was given. if test "${enable_maintainer_mode+set}" = set; then enableval="$enable_maintainer_mode"Index: gcc/emit-rtl.c===================================================================RCS file: /cvs/gcc/gcc/gcc/emit-rtl.c,vretrieving revision 1.303.2.5retrieving revision 1.303.2.7diff -u -r1.303.2.5 -r1.303.2.7--- gcc/gcc/emit-rtl.c 18 Jun 2004 17:08:48 -0000 1.303.2.5+++ gcc/gcc/emit-rtl.c 14 Dec 2004 04:06:08 -0000 1.303.2.7@@ -2890,11 +2890,19 @@ { rtx insn = first_insn; - while (insn)+ if (insn) {- insn = next_insn (insn);- if (insn == 0 || GET_CODE (insn) != NOTE)- break;+ if (NOTE_P (insn))+ for (insn = next_insn (insn);+ insn && NOTE_P (insn);+ insn = next_insn (insn))+ continue;+ else+ {+ if (GET_CODE (insn) == INSN+ && GET_CODE (PATTERN (insn)) == SEQUENCE)+ insn = XVECEXP (PATTERN (insn), 0, 0);+ } } return insn;@@ -2908,11 +2916,20 @@ { rtx insn = last_insn; - while (insn)+ if (insn) {- insn = previous_insn (insn);- if (insn == 0 || GET_CODE (insn) != NOTE)- break;+ if (NOTE_P (insn))+ for (insn = previous_insn (insn);+ insn && NOTE_P (insn);+ insn = previous_insn (insn))+ continue;+ else+ {+ if (GET_CODE (insn) == INSN+ && GET_CODE (PATTERN (insn)) == SEQUENCE)+ insn = XVECEXP (PATTERN (insn), 0,+ XVECLEN (PATTERN (insn), 0) - 1);+ } } return insn;Index: gcc/expr.c===================================================================RCS file: /cvs/gcc/gcc/gcc/expr.c,vretrieving revision 1.498.2.31retrieving revision 1.498.2.32diff -u -r1.498.2.31 -r1.498.2.32--- gcc/gcc/expr.c 16 May 2004 20:27:15 -0000 1.498.2.31+++ gcc/gcc/expr.c 20 Dec 2004 02:43:00 -0000 1.498.2.32@@ -8462,9 +8462,14 @@ /* At this point, a MEM target is no longer useful; we will get better code without it. */ - if (GET_CODE (target) == MEM)+ if (! REG_P (target)) target = gen_reg_rtx (mode); + /* We generate better code and avoid problems with op1 mentioning+ target by forcing op1 into a pseudo if it isn't a constant. */+ if (! CONSTANT_P (op1))+ op1 = force_reg (mode, op1);+ if (target != op0) emit_move_insn (target, op0); Index: gcc/flow.c===================================================================RCS file: /cvs/gcc/gcc/gcc/flow.c,vretrieving revision 1.541.2.6retrieving revision 1.541.2.7diff -u -r1.541.2.6 -r1.541.2.7--- gcc/gcc/flow.c 5 Mar 2004 17:55:50 -0000 1.541.2.6+++ gcc/gcc/flow.c 4 Dec 2004 00:36:35 -0000 1.541.2.7@@ -431,9 +431,8 @@ SET_HARD_REG_BIT (elim_reg_set, FRAME_POINTER_REGNUM); #endif - #ifdef CANNOT_CHANGE_MODE_CLASS- bitmap_initialize (&subregs_of_mode, 1);+ init_subregs_of_mode (); #endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -