diff options
author | Jakub Jelinek <jakub@redhat.com> | 2007-04-24 21:03:24 +0000 |
---|---|---|
committer | Jakub Jelinek <jakub@redhat.com> | 2007-04-24 21:03:24 +0000 |
commit | 39634b3dde4bc543a4dfbea48669836b41aa23b8 (patch) | |
tree | 325fc849a06e1791107b388195ccfe273822ab12 | |
parent | 061b7a82c3d75e49639266bc99f7ec70ced0822a (diff) |
svn merge -r123951:124100 svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-4_1-branch
git-svn-id: https://gcc.gnu.org/svn/gcc/branches/redhat/gcc-4_1-branch@124124 138bc75d-0d04-0410-961f-82ee72b054a4
31 files changed, 566 insertions, 279 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 0022f4b8e6d..e92f78cda88 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,48 @@ +2007-04-24 Andreas Krebbel <krebbel1@de.ibm.com> + + PR target/31641 + * config/s390/s390.c (s390_expand_setmem): Don't ICE for constant length + argument of 0 for memset. + (s390_expand_movmem, s390_expand_setmem, s390_expand_cmpmem): Use + unsigned shift instead of the signed variant. + +2007-04-22 Andrew Pinski <andrew_pinski@playstation.sony.com> + + PR middle-end/31448 + * expr.c (reduce_to_bit_field_precision): Handle + CONST_INT rtx's. + +2007-04-20 Richard Henderson <rth@redhat.com> + + PR target/28623 + * config/alpha/alpha.c (get_unaligned_address): Remove extra_offset + argument; update all callers. + (get_unaligned_offset): New. + * config/alpha/alpha.md (extendqidi2, extendhidi2): Don't use + get_unaligned_address, just pass on the address directly. + (unaligned_extendqidi): Use gen_lowpart instead of open-coding + the subreg in the helper patterns. + (unaligned_extendqidi_le): Use get_unaligned_offset. + (unaligned_extendqidi_be, unaligned_extendhidi_le): Likewise. + (unaligned_extendhidi_be): Likewise. + (unaligned_extendhidi): Tidy. + * config/alpha/alpha-protos.h: Update. + +2007-04-20 Richard Henderson <rth@redhat.com> + + * config/alpha/linux.h (CPP_SPEC): Undef before redefine. + +2007-04-20 Jakub Jelinek <jakub@redhat.com> + + * config/i386/i386.c (bdesc_2arg): Use ORDERED rather than UNORDERED + for __builtin_ia32_cmpordss. + + PR tree-optimization/31632 + * fold-const.c (fold_binary): Use op0 and op1 instead of arg0 + and arg1 for optimizations of comparison against min/max values. + Fold arg0 to arg1's type for optimizations of comparison against + min+1 and max-1 values. + 2007-04-18 Anatoly Sokolov <aesok@post.ru> * config/avr/avr.c (ptrreg_to_str): Replace error() with @@ -11,8 +56,8 @@ 2007-04-16 Matthias Klose <doko@debian.org> - * gcc/config/alpha/linux.h (CPP_SPEC): Define. - * gcc/config/arm/linux-gas.h (SUBTARGET_CPP_SPEC): Extend. + * config/alpha/linux.h (CPP_SPEC): Define. + * config/arm/linux-gas.h (SUBTARGET_CPP_SPEC): Extend. 2007-04-16 H.J. Lu <hongjiu.lu@intel.com> @@ -56,20 +101,20 @@ 2007-04-04 Richard Henderson <rth@redhat.com> - PR target/31361 - * config/i386/i386.c (ix86_init_mmx_sse_builtins): Remove + PR target/31361 + * config/i386/i386.c (ix86_init_mmx_sse_builtins): Remove v8hi_ftype_v8hi_v2di, v4si_ftype_v4si_v2di. Use like-types for the variable shift builtins. - (ix86_expand_builtin): Properly expand the variable shift builtins. - * config/i386/sse.md (ashr<mode>3, lshr<mode>3, ashl<mode>3): Make - operand 2 be TImode. - * config/i386/emmintrin.h (_mm_slli_epi16, _mm_slli_epi32, + (ix86_expand_builtin): Properly expand the variable shift builtins. + * config/i386/sse.md (ashr<mode>3, lshr<mode>3, ashl<mode>3): Make + operand 2 be TImode. + * config/i386/emmintrin.h (_mm_slli_epi16, _mm_slli_epi32, _mm_slli_epi64, _mm_srai_epi16, _mm_srai_epi32, _mm_srli_epi16, _mm_srli_epi32, _mm_srli_epi64): Turn into macros. - (_mm_srli_si128, _mm_srli_si128): Fix disabled inline versions. - (_mm_sll_epi16, _mm_sll_epi32, _mm_sll_epi64, _mm_sra_epi16, - _mm_sra_epi32, _mm_srl_epi16, _mm_srl_epi32, _mm_srl_epi64): Use - two-vector shift builtins. + (_mm_srli_si128, _mm_srli_si128): Fix disabled inline versions. + (_mm_sll_epi16, _mm_sll_epi32, _mm_sll_epi64, _mm_sra_epi16, + _mm_sra_epi32, _mm_srl_epi16, _mm_srl_epi32, _mm_srl_epi64): Use + two-vector shift builtins. 2007-04-14 Jakub Jelinek <jakub@redhat.com> @@ -193,7 +238,7 @@ 2007-03-12 Richard Henderson <rth@redhat.com> - PR target/26090 + PR target/26090 * config/alpha/alpha.c (alpha_elf_select_section): New. (alpha_elf_unique_section, alpha_elf_section_type_flags): New. (alpha_elf_select_rtx_section): Force flag_pic true. @@ -815,7 +860,7 @@ 2006-12-17 Matthias Klose <doko@debian.org> PR libstdc++/11953 - * gcc/config/mips/linux.h (SUBTARGET_CPP_SPEC): Extend. + * config/mips/linux.h (SUBTARGET_CPP_SPEC): Extend. 2006-12-16 Joseph Myers <joseph@codesourcery.com> David Edelsohn <edelsohn@gnu.org> @@ -1383,7 +1428,7 @@ 2006-08-23 Stuart Hastings <stuart@apple.com> PR target/28825 - * gcc/config/i386/i386.c (ix86_expand_vector_init_duplicate, + * config/i386/i386.c (ix86_expand_vector_init_duplicate, ix86_expand_vector_init_one_nonzero): Remove TARGET_SSE test. 2006-10-16 Richard Guenther <rguenther@suse.de> @@ -3822,7 +3867,7 @@ 2006-03-16 Paul Brook <paul@codesourcery.com> Backport from mainline. - * gcc/config/arm/arm.c (minipool_pad): New. + * config/arm/arm.c (minipool_pad): New. (add_minipool_forward_ref): Include pool alignment padding in address calculation. (push_minipool_fix): Set minipool_pad. @@ -4663,7 +4708,7 @@ 2006-01-31 Nathan Sidwell <nathan@codesourcery.com> - * gcc/config/m68k/lb1sf68.asm: Use moveq to load small constants. + * config/m68k/lb1sf68.asm: Use moveq to load small constants. 2006-01-31 Jakub Jelinek <jakub@redhat.com> @@ -4975,7 +5020,7 @@ Backport 2006-01-03 Adrian Straetling <straetling@de.ibm.com> - * gcc/builtins.c (get_builtin_sync_mem): New function. + * builtins.c (get_builtin_sync_mem): New function. (expand_builtin_sync_operation, expand_builtin_compare_and_swap, expand_builtin_lock_test_and_set, expand_builtin_lock_release): Call get_builtin_sync_mem to generate mem rtx. @@ -5146,7 +5191,7 @@ 2006-01-19 Paul Brook <paul@codesourcery.com> - * gcc/config/arm/arm.c (arm_compute_func_type): Treat all functions + * config/arm/arm.c (arm_compute_func_type): Treat all functions as nothrow when unwinding tables are disabled. 2006-01-19 John David Anglin <dave.anglin@nrc-cnrc.gc.ca> @@ -6345,7 +6390,7 @@ (_Unwind_Stop_Fn): New typedef. (_Unwind_ForcedUnwind): Declare. (_Unwind_Resume_or_Rethrow): Declare. - * gcc/config/arm/libunwind.S (UNWIND_WRAPER): Add nargs + * config/arm/libunwind.S (UNWIND_WRAPER): Add nargs argument. Adjust. (_Unwind_Resume_or_Rethrow, _Unwind_ForcedUnwind): New. * config/arm/unwind-arm.c (UCB_FORCED_STOP_FN) @@ -7213,8 +7258,8 @@ 2005-11-04 Francois-Xavier Coudert <coudert@clipper.ens.fr> PR fortran/18452 - * gcc/c.opt: Add a -lang-fortran option. - * gcc/c-opts.c: Add a lang_fortran flag. + * c.opt: Add a -lang-fortran option. + * c-opts.c: Add a lang_fortran flag. (c_common_init_options): Handling the -lang-fortran option. (c_common_handle_option): Add a case for Fortran options in preprocessing. Remove cases for -ffixed-form and diff --git a/gcc/DATESTAMP b/gcc/DATESTAMP index 881da842fe9..f5b5e167ad3 100644 --- a/gcc/DATESTAMP +++ b/gcc/DATESTAMP @@ -1 +1 @@ -20070418 +20070424 diff --git a/gcc/config/alpha/alpha-protos.h b/gcc/config/alpha/alpha-protos.h index 5dd57343c58..4ead6b3a7dc 100644 --- a/gcc/config/alpha/alpha-protos.h +++ b/gcc/config/alpha/alpha-protos.h @@ -51,7 +51,8 @@ extern rtx alpha_legitimize_reload_address (rtx, enum machine_mode, extern rtx split_small_symbolic_operand (rtx); extern void get_aligned_mem (rtx, rtx *, rtx *); -extern rtx get_unaligned_address (rtx, int); +extern rtx get_unaligned_address (rtx); +extern rtx get_unaligned_offset (rtx, HOST_WIDE_INT); extern enum reg_class alpha_preferred_reload_class (rtx, enum reg_class); extern enum reg_class secondary_reload_class (enum reg_class, enum machine_mode, rtx, int); diff --git a/gcc/config/alpha/alpha.c b/gcc/config/alpha/alpha.c index abffd928071..3732d9fdb70 100644 --- a/gcc/config/alpha/alpha.c +++ b/gcc/config/alpha/alpha.c @@ -1549,7 +1549,7 @@ get_aligned_mem (rtx ref, rtx *paligned_mem, rtx *pbitnum) Add EXTRA_OFFSET to the address we return. */ rtx -get_unaligned_address (rtx ref, int extra_offset) +get_unaligned_address (rtx ref) { rtx base; HOST_WIDE_INT offset = 0; @@ -1569,7 +1569,23 @@ get_unaligned_address (rtx ref, int extra_offset) if (GET_CODE (base) == PLUS) offset += INTVAL (XEXP (base, 1)), base = XEXP (base, 0); - return plus_constant (base, offset + extra_offset); + return plus_constant (base, offset); +} + +/* Compute a value X, such that X & 7 == (ADDR + OFS) & 7. + X is always returned in a register. */ + +rtx +get_unaligned_offset (rtx addr, HOST_WIDE_INT ofs) +{ + if (GET_CODE (addr) == PLUS) + { + ofs += INTVAL (XEXP (addr, 1)); + addr = XEXP (addr, 0); + } + + return expand_simple_binop (Pmode, PLUS, addr, GEN_INT (ofs & 7), + NULL_RTX, 1, OPTAB_LIB_WIDEN); } /* On the Alpha, all (non-symbolic) constants except zero go into @@ -2318,7 +2334,7 @@ alpha_expand_mov_nobwx (enum machine_mode mode, rtx *operands) seq = ((mode == QImode ? gen_unaligned_loadqi : gen_unaligned_loadhi) - (subtarget, get_unaligned_address (operands[1], 0), + (subtarget, get_unaligned_address (operands[1]), temp1, temp2)); alpha_set_memflags (seq, operands[1]); emit_insn (seq); @@ -2357,7 +2373,7 @@ alpha_expand_mov_nobwx (enum machine_mode mode, rtx *operands) rtx seq = ((mode == QImode ? gen_unaligned_storeqi : gen_unaligned_storehi) - (get_unaligned_address (operands[0], 0), + (get_unaligned_address (operands[0]), operands[1], temp1, temp2, temp3)); alpha_set_memflags (seq, operands[0]); diff --git a/gcc/config/alpha/alpha.md b/gcc/config/alpha/alpha.md index d9f9e09e808..6cc25e79671 100644 --- a/gcc/config/alpha/alpha.md +++ b/gcc/config/alpha/alpha.md @@ -1607,10 +1607,7 @@ if (unaligned_memory_operand (operands[1], QImode)) { - rtx seq - = gen_unaligned_extendqidi (operands[0], - get_unaligned_address (operands[1], 1)); - + rtx seq = gen_unaligned_extendqidi (operands[0], XEXP (operands[1], 0)); alpha_set_memflags (seq, operands[1]); emit_insn (seq); DONE; @@ -1670,9 +1667,7 @@ if (unaligned_memory_operand (operands[1], HImode)) { - rtx seq - = gen_unaligned_extendhidi (operands[0], - get_unaligned_address (operands[1], 2)); + rtx seq = gen_unaligned_extendhidi (operands[0], XEXP (operands[1], 0)); alpha_set_memflags (seq, operands[1]); emit_insn (seq); @@ -1687,12 +1682,13 @@ ;; as a pattern saves one instruction. The code is similar to that for ;; the unaligned loads (see below). ;; -;; Operand 1 is the address + 1 (+2 for HI), operand 0 is the result. +;; Operand 1 is the address, operand 0 is the result. (define_expand "unaligned_extendqidi" [(use (match_operand:QI 0 "register_operand" "")) (use (match_operand:DI 1 "address_operand" ""))] "" { + operands[0] = gen_lowpart (DImode, operands[0]); if (WORDS_BIG_ENDIAN) emit_insn (gen_unaligned_extendqidi_be (operands[0], operands[1])); else @@ -1701,48 +1697,40 @@ }) (define_expand "unaligned_extendqidi_le" - [(set (match_dup 2) (match_operand:DI 1 "address_operand" "")) - (set (match_dup 3) - (mem:DI (and:DI (plus:DI (match_dup 2) (const_int -1)) - (const_int -8)))) + [(set (match_dup 3) + (mem:DI (and:DI (match_operand:DI 1 "" "") (const_int -8)))) (set (match_dup 4) (ashift:DI (match_dup 3) (minus:DI (const_int 64) (ashift:DI (and:DI (match_dup 2) (const_int 7)) (const_int 3))))) - (set (subreg:DI (match_operand:QI 0 "register_operand" "") 0) + (set (match_operand:DI 0 "register_operand" "") (ashiftrt:DI (match_dup 4) (const_int 56)))] "! WORDS_BIG_ENDIAN" { - operands[2] = gen_reg_rtx (DImode); + operands[2] = get_unaligned_offset (operands[1], 1); operands[3] = gen_reg_rtx (DImode); operands[4] = gen_reg_rtx (DImode); }) (define_expand "unaligned_extendqidi_be" - [(set (match_dup 2) (match_operand:DI 1 "address_operand" "")) - (set (match_dup 3) (plus:DI (match_dup 2) (const_int -1))) + [(set (match_dup 3) + (mem:DI (and:DI (match_operand:DI 1 "" "") (const_int -8)))) (set (match_dup 4) - (mem:DI (and:DI (match_dup 3) - (const_int -8)))) - (set (match_dup 5) (plus:DI (match_dup 2) (const_int -2))) - (set (match_dup 6) - (ashift:DI (match_dup 4) + (ashift:DI (match_dup 3) (ashift:DI (and:DI - (plus:DI (match_dup 5) (const_int 1)) + (plus:DI (match_dup 2) (const_int 1)) (const_int 7)) (const_int 3)))) - (set (subreg:DI (match_operand:QI 0 "register_operand" "") 0) - (ashiftrt:DI (match_dup 6) (const_int 56)))] + (set (match_operand:DI 0 "register_operand" "") + (ashiftrt:DI (match_dup 4) (const_int 56)))] "WORDS_BIG_ENDIAN" { - operands[2] = gen_reg_rtx (DImode); + operands[2] = get_unaligned_offset (operands[1], -1); operands[3] = gen_reg_rtx (DImode); operands[4] = gen_reg_rtx (DImode); - operands[5] = gen_reg_rtx (DImode); - operands[6] = gen_reg_rtx (DImode); }) (define_expand "unaligned_extendhidi" @@ -1751,17 +1739,16 @@ "" { operands[0] = gen_lowpart (DImode, operands[0]); - emit_insn ((WORDS_BIG_ENDIAN - ? gen_unaligned_extendhidi_be - : gen_unaligned_extendhidi_le) (operands[0], operands[1])); + if (WORDS_BIG_ENDIAN) + emit_insn (gen_unaligned_extendhidi_be (operands[0], operands[1])); + else + emit_insn (gen_unaligned_extendhidi_le (operands[0], operands[1])); DONE; }) (define_expand "unaligned_extendhidi_le" - [(set (match_dup 2) (match_operand:DI 1 "address_operand" "")) - (set (match_dup 3) - (mem:DI (and:DI (plus:DI (match_dup 2) (const_int -2)) - (const_int -8)))) + [(set (match_dup 3) + (mem:DI (and:DI (match_operand:DI 1 "" "") (const_int -8)))) (set (match_dup 4) (ashift:DI (match_dup 3) (minus:DI (const_int 64) @@ -1772,34 +1759,28 @@ (ashiftrt:DI (match_dup 4) (const_int 48)))] "! WORDS_BIG_ENDIAN" { - operands[2] = gen_reg_rtx (DImode); + operands[2] = get_unaligned_offset (operands[1], 2); operands[3] = gen_reg_rtx (DImode); operands[4] = gen_reg_rtx (DImode); }) (define_expand "unaligned_extendhidi_be" - [(set (match_dup 2) (match_operand:DI 1 "address_operand" "")) - (set (match_dup 3) (plus:DI (match_dup 2) (const_int -2))) + [(set (match_dup 3) + (mem:DI (and:DI (match_operand:DI 1 "" "") (const_int -8)))) (set (match_dup 4) - (mem:DI (and:DI (match_dup 3) - (const_int -8)))) - (set (match_dup 5) (plus:DI (match_dup 2) (const_int -3))) - (set (match_dup 6) - (ashift:DI (match_dup 4) + (ashift:DI (match_dup 3) (ashift:DI (and:DI - (plus:DI (match_dup 5) (const_int 1)) + (plus:DI (match_dup 2) (const_int 1)) (const_int 7)) (const_int 3)))) (set (match_operand:DI 0 "register_operand" "") - (ashiftrt:DI (match_dup 6) (const_int 48)))] + (ashiftrt:DI (match_dup 4) (const_int 48)))] "WORDS_BIG_ENDIAN" { - operands[2] = gen_reg_rtx (DImode); + operands[2] = get_unaligned_offset (operands[1], -1); operands[3] = gen_reg_rtx (DImode); operands[4] = gen_reg_rtx (DImode); - operands[5] = gen_reg_rtx (DImode); - operands[6] = gen_reg_rtx (DImode); }) (define_insn "*extxl_const" @@ -5997,7 +5978,7 @@ else scratch = gen_rtx_REG (DImode, REGNO (operands[2])); - addr = get_unaligned_address (operands[1], 0); + addr = get_unaligned_address (operands[1]); operands[0] = gen_rtx_REG (DImode, REGNO (operands[0])); seq = gen_unaligned_loadqi (operands[0], addr, scratch, operands[0]); alpha_set_memflags (seq, operands[1]); @@ -6031,7 +6012,7 @@ else scratch = gen_rtx_REG (DImode, REGNO (operands[2])); - addr = get_unaligned_address (operands[1], 0); + addr = get_unaligned_address (operands[1]); operands[0] = gen_rtx_REG (DImode, REGNO (operands[0])); seq = gen_unaligned_loadhi (operands[0], addr, scratch, operands[0]); alpha_set_memflags (seq, operands[1]); @@ -6055,7 +6036,7 @@ } else { - rtx addr = get_unaligned_address (operands[0], 0); + rtx addr = get_unaligned_address (operands[0]); rtx scratch1 = gen_rtx_REG (DImode, REGNO (operands[2])); rtx scratch2 = gen_rtx_REG (DImode, REGNO (operands[2]) + 1); rtx scratch3 = scratch1; @@ -6087,7 +6068,7 @@ } else { - rtx addr = get_unaligned_address (operands[0], 0); + rtx addr = get_unaligned_address (operands[0]); rtx scratch1 = gen_rtx_REG (DImode, REGNO (operands[2])); rtx scratch2 = gen_rtx_REG (DImode, REGNO (operands[2]) + 1); rtx scratch3 = scratch1; diff --git a/gcc/config/alpha/linux.h b/gcc/config/alpha/linux.h index cda7596a9e1..d97934be0bd 100644 --- a/gcc/config/alpha/linux.h +++ b/gcc/config/alpha/linux.h @@ -49,6 +49,7 @@ Boston, MA 02110-1301, USA. */ %{shared:-lc} \ %{!shared: %{profile:-lc_p}%{!profile:-lc}}" +#undef CPP_SPEC #define CPP_SPEC "%{posix:-D_POSIX_SOURCE} %{pthread:-D_REENTRANT}" /* Show that we need a GP when profiling. */ diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c index 7d577ae0124..94d2f11fefc 100644 --- a/gcc/config/i386/i386.c +++ b/gcc/config/i386/i386.c @@ -14477,7 +14477,7 @@ static const struct builtin_description bdesc_2arg[] = BUILTIN_DESC_SWAP_OPERANDS }, { MASK_SSE, CODE_FOR_sse_vmmaskcmpv4sf3, "__builtin_ia32_cmpngess", IX86_BUILTIN_CMPNGESS, UNGT, BUILTIN_DESC_SWAP_OPERANDS }, - { MASK_SSE, CODE_FOR_sse_vmmaskcmpv4sf3, "__builtin_ia32_cmpordss", IX86_BUILTIN_CMPORDSS, UNORDERED, 0 }, + { MASK_SSE, CODE_FOR_sse_vmmaskcmpv4sf3, "__builtin_ia32_cmpordss", IX86_BUILTIN_CMPORDSS, ORDERED, 0 }, { MASK_SSE, CODE_FOR_sminv4sf3, "__builtin_ia32_minps", IX86_BUILTIN_MINPS, 0, 0 }, { MASK_SSE, CODE_FOR_smaxv4sf3, "__builtin_ia32_maxps", IX86_BUILTIN_MAXPS, 0, 0 }, diff --git a/gcc/config/s390/s390.c b/gcc/config/s390/s390.c index 233ee6097ec..0544c124e1e 100644 --- a/gcc/config/s390/s390.c +++ b/gcc/config/s390/s390.c @@ -3545,7 +3545,7 @@ s390_expand_movmem (rtx dst, rtx src, rtx len) if (temp != count) emit_move_insn (count, temp); - temp = expand_binop (mode, ashr_optab, count, GEN_INT (8), blocks, 1, 0); + temp = expand_binop (mode, lshr_optab, count, GEN_INT (8), blocks, 1, 0); if (temp != blocks) emit_move_insn (blocks, temp); @@ -3582,10 +3582,12 @@ s390_expand_movmem (rtx dst, rtx src, rtx len) void s390_expand_setmem (rtx dst, rtx len, rtx val) { - gcc_assert (GET_CODE (len) != CONST_INT || INTVAL (len) > 0); + if (GET_CODE (len) == CONST_INT && INTVAL (len) == 0) + return; + gcc_assert (GET_CODE (val) == CONST_INT || GET_MODE (val) == QImode); - if (GET_CODE (len) == CONST_INT && INTVAL (len) <= 257) + if (GET_CODE (len) == CONST_INT && INTVAL (len) > 0 && INTVAL (len) <= 257) { if (val == const0_rtx && INTVAL (len) <= 256) emit_insn (gen_clrmem_short (dst, GEN_INT (INTVAL (len) - 1))); @@ -3659,7 +3661,7 @@ s390_expand_setmem (rtx dst, rtx len, rtx val) if (temp != count) emit_move_insn (count, temp); - temp = expand_binop (mode, ashr_optab, count, GEN_INT (8), blocks, 1, 0); + temp = expand_binop (mode, lshr_optab, count, GEN_INT (8), blocks, 1, 0); if (temp != blocks) emit_move_insn (blocks, temp); @@ -3751,7 +3753,7 @@ s390_expand_cmpmem (rtx target, rtx op0, rtx op1, rtx len) if (temp != count) emit_move_insn (count, temp); - temp = expand_binop (mode, ashr_optab, count, GEN_INT (8), blocks, 1, 0); + temp = expand_binop (mode, lshr_optab, count, GEN_INT (8), blocks, 1, 0); if (temp != blocks) emit_move_insn (blocks, temp); diff --git a/gcc/expr.c b/gcc/expr.c index 82df27e5e14..c9e2c9510ac 100644 --- a/gcc/expr.c +++ b/gcc/expr.c @@ -8569,7 +8569,14 @@ reduce_to_bit_field_precision (rtx exp, rtx target, tree type) HOST_WIDE_INT prec = TYPE_PRECISION (type); if (target && GET_MODE (target) != GET_MODE (exp)) target = 0; - if (TYPE_UNSIGNED (type)) + /* For constant values, reduce using build_int_cst_type. */ + if (GET_CODE (exp) == CONST_INT) + { + HOST_WIDE_INT value = INTVAL (exp); + tree t = build_int_cst_type (type, value); + return expand_expr (t, target, VOIDmode, EXPAND_NORMAL); + } + else if (TYPE_UNSIGNED (type)) { rtx mask; if (prec < HOST_BITS_PER_WIDE_INT) diff --git a/gcc/fold-const.c b/gcc/fold-const.c index e45ff46db13..458d1ab4076 100644 --- a/gcc/fold-const.c +++ b/gcc/fold-const.c @@ -9375,13 +9375,13 @@ fold_binary (enum tree_code code, tree type, tree op0, tree op1) return omit_one_operand (type, integer_zero_node, arg0); case GE_EXPR: - return fold_build2 (EQ_EXPR, type, arg0, arg1); + return fold_build2 (EQ_EXPR, type, op0, op1); case LE_EXPR: return omit_one_operand (type, integer_one_node, arg0); case LT_EXPR: - return fold_build2 (NE_EXPR, type, arg0, arg1); + return fold_build2 (NE_EXPR, type, op0, op1); /* The GE_EXPR and LT_EXPR cases above are not normally reached because of previous transformations. */ @@ -9396,10 +9396,14 @@ fold_binary (enum tree_code code, tree type, tree op0, tree op1) { case GT_EXPR: arg1 = const_binop (PLUS_EXPR, arg1, integer_one_node, 0); - return fold_build2 (EQ_EXPR, type, arg0, arg1); + return fold_build2 (EQ_EXPR, type, + fold_convert (TREE_TYPE (arg1), arg0), + arg1); case LE_EXPR: arg1 = const_binop (PLUS_EXPR, arg1, integer_one_node, 0); - return fold_build2 (NE_EXPR, type, arg0, arg1); + return fold_build2 (NE_EXPR, type, + fold_convert (TREE_TYPE (arg1), arg0), + arg1); default: break; } @@ -9412,7 +9416,7 @@ fold_binary (enum tree_code code, tree type, tree op0, tree op1) return omit_one_operand (type, integer_zero_node, arg0); case LE_EXPR: - return fold_build2 (EQ_EXPR, type, arg0, arg1); + return fold_build2 (EQ_EXPR, type, op0, op1); case GE_EXPR: return omit_one_operand (type, integer_one_node, arg0); @@ -9430,10 +9434,14 @@ fold_binary (enum tree_code code, tree type, tree op0, tree op1) { case GE_EXPR: arg1 = const_binop (MINUS_EXPR, arg1, integer_one_node, 0); - return fold_build2 (NE_EXPR, type, arg0, arg1); + return fold_build2 (NE_EXPR, type, + fold_convert (TREE_TYPE (arg1), arg0), + arg1); case LT_EXPR: arg1 = const_binop (MINUS_EXPR, arg1, integer_one_node, 0); - return fold_build2 (EQ_EXPR, type, arg0, arg1); + return fold_build2 (EQ_EXPR, type, + fold_convert (TREE_TYPE (arg1), arg0), + arg1); default: break; } @@ -9449,12 +9457,11 @@ fold_binary (enum tree_code code, tree type, tree op0, tree op1) and X >= signed_max+1 because previous transformations. */ if (code == LE_EXPR || code == GT_EXPR) { - tree st0, st1; - st0 = lang_hooks.types.signed_type (TREE_TYPE (arg0)); - st1 = lang_hooks.types.signed_type (TREE_TYPE (arg1)); - return fold_build2 (code == LE_EXPR ? GE_EXPR: LT_EXPR, - type, fold_convert (st0, arg0), - build_int_cst (st1, 0)); + tree st; + st = lang_hooks.types.signed_type (TREE_TYPE (arg1)); + return fold_build2 (code == LE_EXPR ? GE_EXPR : LT_EXPR, + type, fold_convert (st, arg0), + build_int_cst (st, 0)); } } } diff --git a/gcc/po/ChangeLog b/gcc/po/ChangeLog index 98a90f84f9f..09c5ae7cc53 100644 --- a/gcc/po/ChangeLog +++ b/gcc/po/ChangeLog @@ -1,3 +1,7 @@ +2007-04-21 Joseph S. Myers <joseph@codesourcery.com> + + * sv.po: Update. + 2007-03-08 Joseph S. Myers <joseph@codesourcery.com> * sr.po: New. diff --git a/gcc/po/sv.po b/gcc/po/sv.po index d531577ff40..4817029091d 100644 --- a/gcc/po/sv.po +++ b/gcc/po/sv.po @@ -1,7 +1,7 @@ # Swedish messages for GCC. -# Copyright © 2000, 2005, 2006 Free Software Foundation, Inc. +# Copyright © 2000, 2005, 2006, 2007 Free Software Foundation, Inc. # Dennis Björklund <db@zigo.dhs.org>, 2000, 2001, 2002. -# Göran Uddeborg <goeran@uddeborg.se>, 2005, 2006. +# Göran Uddeborg <goeran@uddeborg.se>, 2005, 2006, 2007. # # Remember: GCC team does not want RCS keywords in the header! # @@ -10,7 +10,7 @@ msgstr "" "Project-Id-Version: gcc 4.1.1\n" "Report-Msgid-Bugs-To: http://gcc.gnu.org/bugs.html\n" "POT-Creation-Date: 2006-05-24 16:19-0700\n" -"PO-Revision-Date: 2006-12-13 22:05+0100\n" +"PO-Revision-Date: 2007-04-03 09:58+0200\n" "Last-Translator: Göran Uddeborg <goeran@uddeborg.se>\n" "Language-Team: Swedish <tp-sv@listor.tp-sv.se>\n" "MIME-Version: 1.0\n" @@ -364,7 +364,7 @@ msgstr "klamrar saknas runt initierare" #: c-typeck.c:5209 msgid "braces around scalar initializer" -msgstr "klamrar funt skalär initierare" +msgstr "klamrar runt skalär initierare" #: c-typeck.c:5266 msgid "initialization of flexible array member in a nested context" @@ -9266,19 +9266,19 @@ msgstr "-private_bundle är inte tillåten med -dynamiclib" #: java/lang.opt:66 msgid "Warn if a deprecated compiler feature, class, method, or field is used" -msgstr "Varna om en kompilatorfunktion, klass, metod eller fält som avrådes ifrån används" +msgstr "Varna för en kompilatorfunktion, klass, metod eller fält som bör undvikas används" #: java/lang.opt:70 msgid "Warn if deprecated empty statements are found" -msgstr "Varna om föråldrade tomma satser finns" +msgstr "Varna för tomma satser som bör undvikas finns" #: java/lang.opt:74 msgid "Warn if .class files are out of date" -msgstr "Varna om .class-filer är inaktuella" +msgstr "Varna för .class-filer är inaktuella" #: java/lang.opt:78 msgid "Warn if modifiers are specified when not necessary" -msgstr "Varna om modifierare anges när de inte behövs" +msgstr "Varna för modifierare anges när de inte behövs" #: java/lang.opt:82 msgid "Deprecated; use --classpath instead" @@ -9370,23 +9370,23 @@ msgstr "Lägg MODULE-filer i \"directory\"" #: fortran/lang.opt:42 msgid "Warn about possible aliasing of dummy arguments" -msgstr "Varna om eventuell aliasning av atrappargument" +msgstr "Varna för eventuell aliasning av atrappargument" #: fortran/lang.opt:46 msgid "Warn about missing ampersand in continued character literals" -msgstr "Varna om saknade ampersander i fortsatta teckenliteraler" +msgstr "Varna för saknade ampersander i fortsatta teckenliteraler" #: fortran/lang.opt:50 msgid "Warn about implicit conversion" -msgstr "Varna om implicita konverteringar" +msgstr "Varna för implicita konverteringar" #: fortran/lang.opt:54 msgid "Warn about calls with implicit interface" -msgstr "Varna om anrop med implicit gränssnitt" +msgstr "Varna för anrop med implicit gränssnitt" #: fortran/lang.opt:58 msgid "Warn about truncated source lines" -msgstr "Varna om avhuggna källkodsrader" +msgstr "Varna för avhuggna källkodsrader" #: fortran/lang.opt:62 msgid "Warn about usage of non-standard intrinsics" @@ -9394,11 +9394,11 @@ msgstr "Varna för användning av inbyggda som inte är standard" #: fortran/lang.opt:66 msgid "Warn about \"suspicious\" constructs" -msgstr "Varna om \"misstänkta\" konstruktioner" +msgstr "Varna för \"misstänkta\" konstruktioner" #: fortran/lang.opt:70 msgid "Warn about underflow of numerical constant expressions" -msgstr "Varna om underspill i numeriska konstantuttryck" +msgstr "Varna för underspill i numeriska konstantuttryck" #: fortran/lang.opt:74 common.opt:162 msgid "Warn when a label is unused" @@ -9936,11 +9936,11 @@ msgstr "använd mvcle" #: config/s390/s390.opt:92 msgid "Warn if a function uses alloca or creates an array with dynamic size" -msgstr "Varna om en funktion använder alloca eller skapar en vektor med dynamisk storlek" +msgstr "Varna för en funktion använder alloca eller skapar en vektor med dynamisk storlek" #: config/s390/s390.opt:96 msgid "Warn if a single function's framesize exceeds the given framesize" -msgstr "Varna om en enskild funktions ramstorlek överskrider den angivna ramstorleken" +msgstr "Varna för en enskild funktions ramstorlek överskrider den angivna ramstorleken" #: config/s390/s390.opt:100 msgid "z/Architecture" @@ -10690,7 +10690,7 @@ msgstr "Undvik alla avståndsgränser vid anropsinstruktioner" #: config/rs6000/rs6000.opt:215 msgid "Warn about deprecated 'vector long ...' AltiVec type usage" -msgstr "Varna för användning av AltiVec-typen \"vector long ...\" som avrådes från" +msgstr "Varna för användning av AltiVec-typen \"vector long ...\" som bör undvikas" #: config/rs6000/rs6000.opt:219 msgid "Select GPR floating point method" @@ -12214,7 +12214,7 @@ msgstr "Avdefiniera <makro>" #: c.opt:117 msgid "Warn about things that will change when compiling with an ABI-compliant compiler" -msgstr "Varna om saker som skulle ändras vid kompilering med en kompilator som följer ABI" +msgstr "Varna för saker som skulle ändras vid kompilering med en kompilator som följer ABI" #: c.opt:121 msgid "Enable most warning messages" @@ -12226,23 +12226,23 @@ msgstr "Varna när en Objective-C-tilldelning fångas upp av skräpsamlaren" #: c.opt:129 msgid "Warn about casting functions to incompatible types" -msgstr "Varna om typkonvertering av funktioner till inkompatibla typer" +msgstr "Varna för typkonvertering av funktioner till inkompatibla typer" #: c.opt:133 msgid "Warn about C constructs that are not in the common subset of C and C++" -msgstr "Varna om C-konstruktioner som inte är i den gemensamma delmängden av C och C++" +msgstr "Varna för C-konstruktioner som inte är i den gemensamma delmängden av C och C++" #: c.opt:138 msgid "Warn about casts which discard qualifiers" -msgstr "Varna om typkonvertering som slänger kvalificerare" +msgstr "Varna för typkonvertering som slänger kvalificerare" #: c.opt:142 msgid "Warn about subscripts whose type is \"char\"" -msgstr "Varna om index vars typ är \"char\"" +msgstr "Varna för index vars typ är \"char\"" #: c.opt:146 msgid "Warn about possibly nested block comments, and C++ comments spanning more than one physical line" -msgstr "Varna om möjliga nästade blockkommentarer, och C++-kommentarer som spänner över mer än en fysisk rad" +msgstr "Varna för möjliga nästade blockkommentarer, och C++-kommentarer som spänner över mer än en fysisk rad" #: c.opt:150 msgid "Synonym for -Wcomment" @@ -12250,7 +12250,7 @@ msgstr "Synonym för -Wcommment" #: c.opt:154 msgid "Warn about possibly confusing type conversions" -msgstr "Varna om eventuellt förvirrande typkonverteringar" +msgstr "Varna för eventuellt förvirrande typkonverteringar" #: c.opt:158 msgid "Warn when all constructors and destructors are private" @@ -12262,19 +12262,19 @@ msgstr "Varna när en deklaration hittas efter en sats" #: c.opt:166 msgid "Warn about deprecated compiler features" -msgstr "Varna om kompilatorfunktioner som undanbedes" +msgstr "Varna för kompilatorfunktioner bör undvikas" #: c.opt:170 msgid "Warn about compile-time integer division by zero" -msgstr "Varna om heltalsdivision med noll vid kompileringstillfället" +msgstr "Varna för heltalsdivision med noll vid kompileringstillfället" #: c.opt:174 msgid "Warn about violations of Effective C++ style rules" -msgstr "Varna om brott mot Effective C++ stilregler" +msgstr "Varna för brott mot stilreglerna i Effective C++" #: c.opt:178 msgid "Warn about stray tokens after #elif and #endif" -msgstr "Varna om vilsekomna symboler efter #elif och #endif" +msgstr "Varna för vilsekomna symboler efter #elif och #endif" #: c.opt:186 msgid "Make implicit function declarations an error" @@ -12286,35 +12286,35 @@ msgstr "Varna vid test av flyttal på likhet" #: c.opt:194 msgid "Warn about printf/scanf/strftime/strfmon format string anomalies" -msgstr "Varna om anomalier i formatsträngar till printf/scanf/strftime/strfmon" +msgstr "Varna för anomalier i formatsträngar till printf/scanf/strftime/strfmon" #: c.opt:198 msgid "Warn if passing too many arguments to a function for its format string" -msgstr "Varna om för många argument argument till en funktion för dess formatsträng" +msgstr "Varna för för många argument argument till en funktion för dess formatsträng" #: c.opt:202 msgid "Warn about format strings that are not literals" -msgstr "Varna om formatsträngar som inte är literaler" +msgstr "Varna för formatsträngar som inte är literaler" #: c.opt:206 msgid "Warn about possible security problems with format functions" -msgstr "Varna om möjliga säkerhetsproblem med formatfunktioner" +msgstr "Varna för möjliga säkerhetsproblem med formatfunktioner" #: c.opt:210 msgid "Warn about strftime formats yielding 2-digit years" -msgstr "Varna om format till strftime som ger 2-siffrigt årtal" +msgstr "Varna för format till strftime som ger 2-siffrigt årtal" #: c.opt:214 msgid "Warn about zero-length formats" -msgstr "Varna om format med längden noll" +msgstr "Varna för format med längden noll" #: c.opt:221 msgid "Warn about variables which are initialized to themselves" -msgstr "Varna om variabler som intieras till sig själva" +msgstr "Varna för variabler som intieras till sig själva" #: c.opt:228 msgid "Warn about implicit function declarations" -msgstr "Varna om implicita funktionsdeklarationer" +msgstr "Varna för implicita funktionsdeklarationer" #: c.opt:232 msgid "Warn when a declaration does not specify a type" @@ -12326,15 +12326,15 @@ msgstr "Avrådes ifrån. Denna flagga har ingen effekt" #: c.opt:240 msgid "Warn when there is a cast to a pointer from an integer of a different size" -msgstr "Varna om typkonverteringar till pekare från ett heltal med annan storlek" +msgstr "Varna för typkonverteringar till pekare från ett heltal med annan storlek" #: c.opt:244 msgid "Warn about invalid uses of the \"offsetof\" macro" -msgstr "Varna om ogiltiga användningar av makrot \"offsetof\"" +msgstr "Varna för ogiltiga användningar av makrot \"offsetof\"" #: c.opt:248 msgid "Warn about PCH files that are found but not used" -msgstr "Varna om PCH-filer som hittas men inte används" +msgstr "Varna för PCH-filer som hittas men inte används" #: c.opt:252 msgid "Do not warn about using \"long long\" when -pedantic" @@ -12342,31 +12342,31 @@ msgstr "Varna inte om användning av \"long long\" vid -pedantic" #: c.opt:256 msgid "Warn about suspicious declarations of \"main\"" -msgstr "Varna om tveksamma deklarationer av \"main\"" +msgstr "Varna för tveksamma deklarationer av \"main\"" #: c.opt:260 msgid "Warn about possibly missing braces around initializers" -msgstr "Varna om eventuellt saknade klamrar runt initierare" +msgstr "Varna för eventuellt saknade klamrar runt initierare" #: c.opt:264 msgid "Warn about global functions without previous declarations" -msgstr "Varna om globala globala funktioner utan tidigare deklaration" +msgstr "Varna för globala globala funktioner utan tidigare deklaration" #: c.opt:268 msgid "Warn about missing fields in struct initializers" -msgstr "Varna om saknade fält i postinitierare" +msgstr "Varna för saknade fält i postinitierare" #: c.opt:272 msgid "Warn about functions which might be candidates for format attributes" -msgstr "Varna om funktioner som kan vara kandidater för formatattribut" +msgstr "Varna för funktioner som kan vara kandidater för formatattribut" #: c.opt:276 msgid "Warn about user-specified include directories that do not exist" -msgstr "Varna om användarangivna inkluderingskataloger som inte finns" +msgstr "Varna för användarangivna inkluderingskataloger som inte finns" #: c.opt:280 msgid "Warn about global functions without prototypes" -msgstr "Varna om globala funktioner utan prototyper" +msgstr "Varna för globala funktioner utan prototyper" #: c.opt:284 msgid "Warn about use of multi-character character constants" @@ -12374,7 +12374,7 @@ msgstr "Varna vid användning av flerteckens teckenkonstant" #: c.opt:288 msgid "Warn about \"extern\" declarations not at file scope" -msgstr "Varna om \"extern\"-deklaration som inte är på filnivå" +msgstr "Varna för \"extern\"-deklaration som inte är på filnivå" #: c.opt:292 msgid "Warn when non-templatized friend functions are declared within a template" @@ -12382,31 +12382,31 @@ msgstr "Varna när en vänfuktion som inte är en mall deklareras inuti en mall" #: c.opt:296 msgid "Warn about non-virtual destructors" -msgstr "Varna om ickevirtuella destruerare" +msgstr "Varna för ickevirtuella destruerare" #: c.opt:300 msgid "Warn about NULL being passed to argument slots marked as requiring non-NULL" -msgstr "Varna om NULL skickas som argument till fack markerde att de kräver icke-NULL" +msgstr "Varna om NULL skickas som argument som är markerade att de kräver icke-NULL" #: c.opt:304 msgid "Warn about non-normalised Unicode strings" -msgstr "Varna om icke normaliserade Unicodesträngar" +msgstr "Varna för icke normaliserade Unicodesträngar" #: c.opt:308 msgid "Warn if a C-style cast is used in a program" -msgstr "Varna om en typkonvertering i C-stil används i ett program" +msgstr "Varna för en typkonvertering i C-stil används i ett program" #: c.opt:312 msgid "Warn if an old-style parameter definition is used" -msgstr "Varna om en gammaldags parameterdefinition används" +msgstr "Varna för en gammaldags parameterdefinition används" #: c.opt:316 msgid "Warn about overloaded virtual function names" -msgstr "Varna om överlastade virtuella funktionsnamn" +msgstr "Varna för överlagrade virtuella funktionsnamn" #: c.opt:320 msgid "Warn about possibly missing parentheses" -msgstr "Varna om eventuellt saknade parenteser" +msgstr "Varna för eventuellt saknade parenteser" #: c.opt:324 msgid "Warn when converting the type of pointers to member functions" @@ -12414,7 +12414,7 @@ msgstr "Varna vid typkonvertering av pekare till medlemsfunktioner" #: c.opt:328 msgid "Warn about function pointer arithmetic" -msgstr "Varna om aritmetik med funktionspekare" +msgstr "Varna för aritmetik med funktionspekare" #: c.opt:332 msgid "Warn when a pointer is cast to an integer of a different size" @@ -12422,15 +12422,15 @@ msgstr "Varna när en pkare typkonverteras till ett heltal av annan storlek" #: c.opt:336 msgid "Warn about misuses of pragmas" -msgstr "Varna om missbruk av pragman" +msgstr "Varna för missbruk av pragman" #: c.opt:340 msgid "Warn if inherited methods are unimplemented" -msgstr "Varna om ärvda metoder är oimplementerade" +msgstr "Varna för ärvda metoder är oimplementerade" #: c.opt:344 msgid "Warn about multiple declarations of the same object" -msgstr "Varna om multipla deklarationer av samma objekt" +msgstr "Varna för multipla deklarationer av samma objekt" #: c.opt:348 msgid "Warn when the compiler reorders code" @@ -12442,31 +12442,31 @@ msgstr "Varna när en funktions returtyp får \"int\" som skönsvärde (C), eller om #: c.opt:356 msgid "Warn if a selector has multiple methods" -msgstr "Varna om en väljare har multipla metoder" +msgstr "Varna för en väljare har multipla metoder" #: c.opt:360 msgid "Warn about possible violations of sequence point rules" -msgstr "Varna om möjliga brott mot sekvenspunktregler" +msgstr "Varna för möjliga brott mot sekvenspunktregler" #: c.opt:364 msgid "Warn about signed-unsigned comparisons" -msgstr "Varna om jämförelser mellan signed/unsigned" +msgstr "Varna för jämförelser mellan signed/unsigned" #: c.opt:368 msgid "Warn when overload promotes from unsigned to signed" -msgstr "Varna när överlastning anpassar från teckenlöst till med tecken" +msgstr "Varna när överlagring anpassar från teckenlöst till med tecken" #: c.opt:372 msgid "Warn about uncasted NULL used as sentinel" -msgstr "Varna om ej typkonverterad NULL används som vaktpost" +msgstr "Varna för ej typkonverterad NULL används som vaktpost" #: c.opt:376 msgid "Warn about unprototyped function declarations" -msgstr "Varna om funktionsdeklarationer utan prototyp" +msgstr "Varna för funktionsdeklarationer utan prototyp" #: c.opt:380 msgid "Warn if type signatures of candidate methods do not match exactly" -msgstr "Varna om typsignaturer till kandidatmetoder inte stämmer exakt" +msgstr "Varna för typsignaturer till kandidatmetoder inte stämmer exakt" #: c.opt:384 msgid "Warn when synthesis behavior differs from Cfront" @@ -12478,27 +12478,27 @@ msgstr "Undertryck inte varningar från systemhuvudfiler" #: c.opt:392 msgid "Warn about features not present in traditional C" -msgstr "Varna om funktioner som inte finns i traditionell C" +msgstr "Varna för funktioner som inte finns i traditionell C" #: c.opt:396 msgid "Warn if trigraphs are encountered that might affect the meaning of the program" -msgstr "Varna om trigrafer upptäcks som kan påverka betydelsen av programmet" +msgstr "Varna för trigrafer upptäcks som kan påverka betydelsen av programmet" #: c.opt:400 msgid "Warn about @selector()s without previously declared methods" -msgstr "Varna om @selector()er utan tidigare deklarerade metoder" +msgstr "Varna för @selector()er utan tidigare deklarerade metoder" #: c.opt:404 msgid "Warn if an undefined macro is used in an #if directive" -msgstr "Varna om ett odefinierat makro används i ett #if-direktiv" +msgstr "Varna för ett odefinierat makro används i ett #if-direktiv" #: c.opt:408 msgid "Warn about unrecognized pragmas" -msgstr "Varna om okända pragman" +msgstr "Varna för okända pragman" #: c.opt:412 msgid "Warn about macros defined in the main file that are not used" -msgstr "Varna om makron definierade i huvudfilen som inte används" +msgstr "Varna för makron definierade i huvudfilen som inte används" #: c.opt:416 msgid "Do not warn about using variadic macros when -pedantic" @@ -12886,23 +12886,23 @@ msgstr "Optimera för storlek istället för hastighet" #: common.opt:54 msgid "This switch is deprecated; use -Wextra instead" -msgstr "Denna flagga avrådes ifrån, använd -Wextra istället" +msgstr "Denna flagga bör undvikas, använd -Wextra istället" #: common.opt:58 msgid "Warn about returning structures, unions or arrays" -msgstr "Varna om retur av poster, unioner eller vektorer" +msgstr "Varna för retur av poster, unioner eller vektorer" #: common.opt:62 msgid "Warn about inappropriate attribute usage" -msgstr "Varna om felaktig användning av attribut" +msgstr "Varna för felaktig användning av attribut" #: common.opt:66 msgid "Warn about pointer casts which increase alignment" -msgstr "Varna om typkonvertering av pekare som ökar justeringen" +msgstr "Varna för typkonvertering av pekare som ökar justeringen" #: common.opt:70 msgid "Warn about uses of __attribute__((deprecated)) declarations" -msgstr "Varna om användning av __attribute__((deprecated))-deklarationer" +msgstr "Varna för användning av __attribute__((deprecated))-deklarationer" #: common.opt:74 msgid "Warn when an optimization pass is disabled" @@ -12926,15 +12926,15 @@ msgstr "Varna när en inline:ad funktion inte kan inline:as" #: common.opt:94 msgid "Warn if an object is larger than <number> bytes" -msgstr "Varna om ett objekt är större än <antal> byte" +msgstr "Varna för ett objekt är större än <antal> byte" #: common.opt:98 msgid "Warn if the loop cannot be optimized due to nontrivial assumptions." -msgstr "Varna om slingan inte kan optimeras på grund av icketriviala antaganden." +msgstr "Varna för slingan inte kan optimeras på grund av icketriviala antaganden." #: common.opt:102 msgid "Warn about functions which might be candidates for __attribute__((noreturn))" -msgstr "Varna om funktioner som är möjliga kandidater för __attribute__((noreturn))" +msgstr "Varna för funktioner som är möjliga kandidater för __attribute__((noreturn))" #: common.opt:106 msgid "Warn when the packed attribute has no effect on struct layout" @@ -12950,31 +12950,31 @@ msgstr "Varna när en lokal variabel skuggar en annan" #: common.opt:118 msgid "Warn when not issuing stack smashing protection for some reason" -msgstr "Varna när stacksprängningsskydd inte läggs ut av någon anledning" +msgstr "Varna när stacköverskrivningsskydd inte läggs ut av någon anledning" #: common.opt:122 common.opt:126 msgid "Warn about code which might break strict aliasing rules" -msgstr "Varna om kod som kan bryta strikta aliasregler" +msgstr "Varna för kod som kan bryta strikta aliasregler" #: common.opt:130 msgid "Warn about enumerated switches, with no default, missing a case" -msgstr "Varna om uppräkningshopptabeller, utan standardfall, saknar ett fall" +msgstr "Varna när hopptabeller för uppräkningstyper inte har standardfall och saknar ett fall" #: common.opt:134 msgid "Warn about enumerated switches missing a \"default:\" statement" -msgstr "Varna om uppräkningshopptabeller saknar en \"default:\"-sats" +msgstr "Varna för uppräkningshopptabeller saknar en \"default:\"-sats" #: common.opt:138 msgid "Warn about all enumerated switches missing a specific case" -msgstr "Varna om alla uppräkningshopptabeller som saknar ett specifikt fall" +msgstr "Varna för alla uppräkningshopptabeller som saknar ett specifikt fall" #: common.opt:146 msgid "Warn about uninitialized automatic variables" -msgstr "Varna om oinitierade automatiska variabler" +msgstr "Varna för oinitierade automatiska variabler" #: common.opt:150 msgid "Warn about code that will never be executed" -msgstr "Varna om kod som aldrig kommer köras" +msgstr "Varna för kod som aldrig kommer köras" #: common.opt:154 msgid "Enable all -Wunused- warnings" @@ -13106,7 +13106,7 @@ msgstr "Uteslut intervallreduktionssteget när komplex division görs" #: common.opt:334 msgid "Place data items into their own section" -msgstr "Placera dataföremål i sin egen sektion" +msgstr "Placera dataobjekt i sin egen sektion" #: common.opt:340 msgid "Defer popping functions args from stack until later" @@ -13118,7 +13118,7 @@ msgstr "Försök fylla fördröjningsfack av greninstruktioner" #: common.opt:348 msgid "Delete useless null pointer checks" -msgstr "Tag bort oanvändbara nollpekarkontroller" +msgstr "Tag bort onödiga nollpekarkontroller" #: common.opt:352 msgid "How often to emit source location at the beginning of line-wrapped diagnostics" @@ -13214,7 +13214,7 @@ msgstr "Hantera #ident-direktiv" #: common.opt:464 msgid "Perform conversion of conditional jumps to branchless equivalents" -msgstr "Utvör konvertering av villkorliga hopp till grenlösa motsvarigheter" +msgstr "Utför konvertering av villkorliga hopp till grenlösa motsvarigheter" #: common.opt:468 msgid "Perform conversion of conditional jumps to conditional execution" @@ -13730,15 +13730,15 @@ msgstr "Använd uttrycksvärdeprofiler i optimeringar" #: common.opt:1034 msgid "Construct webs and split unrelated uses of single variable" -msgstr "Kostruera nät och dela orelaterade användningar av en enskild variabel" +msgstr "Konstruera nät och dela orelaterade användningar av en enskild variabel" #: common.opt:1038 msgid "Perform whole program optimizations" -msgstr "Utför optimeringav hela program" +msgstr "Utför optimering av hela program" #: common.opt:1042 msgid "Assume signed arithmetic overflow wraps around" -msgstr "Anta spill vid teckenaritmetik slår runt" +msgstr "Anta att spill vid teckenaritmetik slår runt" #: common.opt:1046 msgid "Put zero initialized data in the bss section" @@ -14044,7 +14044,7 @@ msgstr "negativt heltal implicit konverterat till unsigned typ" #: c-common.c:975 #, gcc-internal-format msgid "type-punning to incomplete type might break strict-aliasing rules" -msgstr "typstampning till ofullständiga typ kan bryta strikta aliasregler" +msgstr "typstampning till ofullständig typ kan bryta strikta aliasregler" #: c-common.c:983 #, gcc-internal-format @@ -14059,7 +14059,7 @@ msgstr "dereferering av en typstampad pekare kan bryta strikta aliasregler" #: c-common.c:1049 #, gcc-internal-format msgid "overflow in implicit constant conversion" -msgstr "spill i implicit constant konvertering" +msgstr "spill i implicit konstant konvertering" #: c-common.c:1185 #, gcc-internal-format @@ -14129,12 +14129,12 @@ msgstr "pekare av typen %<void *%> använd i aritmetik" #: c-common.c:2288 #, gcc-internal-format msgid "pointer to a function used in arithmetic" -msgstr "pekare till funktion använd med aritmetik" +msgstr "pekare till funktion använd i aritmetik" #: c-common.c:2294 #, gcc-internal-format msgid "pointer to member function used in arithmetic" -msgstr "pekare till medlemsfunktion använd med aritmetik" +msgstr "pekare till medlemsfunktion använd i aritmetik" #. Common Ada/Pascal programmer's mistake. We always warn #. about this since it is so bad. @@ -14196,7 +14196,7 @@ msgstr "tomt intervall angivet" #: c-common.c:3724 #, gcc-internal-format msgid "duplicate (or overlapping) case value" -msgstr "dubbla (eller överlappand) case-värden" +msgstr "dubbla (eller överlappande) case-värden" #: c-common.c:3725 #, gcc-internal-format @@ -14236,7 +14236,7 @@ msgstr "%Jcase-värde %qs är inte i uppräkningstyp %qT" #: c-common.c:3844 #, gcc-internal-format msgid "%Hswitch missing default case" -msgstr "%Hswitch saknare default-fall" +msgstr "%Hswitch saknar default-fall" #. Warn if there are enumerators that don't correspond to #. case expressions. @@ -14279,7 +14279,7 @@ msgstr "okänt maskinläge %qs" #: c-common.c:4540 #, gcc-internal-format msgid "specifying vector types with __attribute__ ((mode)) is deprecated" -msgstr "det avrådes från att ange vektortyper med __attribute__ ((sätt))" +msgstr "att ange vektortyper med __attribute__ ((sätt)) bör unvikas" #: c-common.c:4543 #, gcc-internal-format @@ -14339,7 +14339,7 @@ msgstr "efterfrågad minnesjustering är inte konstant" #: c-common.c:4708 #, gcc-internal-format msgid "requested alignment is not a power of 2" -msgstr "efterrågad minnesjustering är inte en potens av 2" +msgstr "efterfågad minnesjustering är inte en potens av 2" #: c-common.c:4713 #, gcc-internal-format @@ -19077,7 +19077,7 @@ msgstr "asm-operand %d stämmer förmodligen inte med begränsningarna" #: stmt.c:910 #, gcc-internal-format msgid "use of memory input without lvalue in asm operand %d is deprecated" -msgstr "användning av minnesindata utan lvärde i asm-operand %d undanbedes" +msgstr "användning av minnesindata utan lvärde i asm-operand %d bör undvikas" #: stmt.c:1057 #, gcc-internal-format @@ -19234,22 +19234,22 @@ msgstr "%q+D är definierad men inte använd" #: toplev.c:892 toplev.c:916 #, gcc-internal-format msgid "%qs is deprecated (declared at %s:%d)" -msgstr "%qs undanbedes (deklarerad vid %s:%d)" +msgstr "%qs bör undvikas (deklarerad vid %s:%d)" #: toplev.c:920 #, gcc-internal-format msgid "type is deprecated (declared at %s:%d)" -msgstr "typen undanbedes (deklarerad vid %s:%d)" +msgstr "typen bör undvikas (deklarerad vid %s:%d)" #: toplev.c:926 #, gcc-internal-format msgid "%qs is deprecated" -msgstr "%qs undanbedes" +msgstr "%qs bör undvikas" #: toplev.c:928 #, gcc-internal-format msgid "type is deprecated" -msgstr "type undanbedes" +msgstr "typen bör undvikas" #: toplev.c:1095 #, gcc-internal-format @@ -21694,7 +21694,7 @@ msgstr "argument till %qs måste vara en 2-bitars literal utan tecken" #: config/rs6000/rs6000.c:7259 #, gcc-internal-format msgid "unresolved overload for Altivec builtin %qF" -msgstr "ej upplöst överlastning för inbyggd Altivec %qF" +msgstr "ej upplöst överlagring för inbyggd Altivec %qF" #: config/rs6000/rs6000.c:7341 #, gcc-internal-format @@ -21729,7 +21729,7 @@ msgstr "användning av %<long%> i AltiVec-typer är ogiltigt för 64-bitskod" #: config/rs6000/rs6000.c:17299 #, gcc-internal-format msgid "use of %<long%> in AltiVec types is deprecated; use %<int%>" -msgstr "användning av %<long%> i AltiVec-typer undanbedes, använd %<int%>" +msgstr "användning av %<long%> i AltiVec-typer bör undvikas, använd %<int%>" #: config/rs6000/rs6000.c:17303 #, gcc-internal-format @@ -22307,7 +22307,7 @@ msgstr "ingen funktion som stämmer för anrop av %<%D(%A)%>" #: cp/call.c:2800 cp/call.c:2858 #, gcc-internal-format msgid "call of overloaded %<%D(%A)%> is ambiguous" -msgstr "anrop av överlastad %<%D(%A)%> är tvetydigt" +msgstr "anrop av överlagrad %<%D(%A)%> är tvetydigt" #. It's no good looking for an overloaded operator() on a #. pointer-to-member-function. @@ -22522,7 +22522,7 @@ msgstr "ingen matchande funktion för anrop av %<%T::%s(%A)%#V%>" #: cp/call.c:5404 #, gcc-internal-format msgid "call of overloaded %<%s(%A)%> is ambiguous" -msgstr "anrop av överlastad %<%s(%A)%> är tvetydigt" +msgstr "anrop av överlagrad %<%s(%A)%> är tvetydigt" #: cp/call.c:5428 #, gcc-internal-format @@ -22602,7 +22602,7 @@ msgstr "using-deklaration %q+D står i konflikt med en tidigare using-deklaration #: cp/class.c:1061 #, gcc-internal-format msgid "%q+#D cannot be overloaded" -msgstr "%q+#D kan inte överlastas" +msgstr "%q+#D kan inte överlagras" #: cp/class.c:1062 #, gcc-internal-format @@ -22880,7 +22880,7 @@ msgstr "språksträng %<\"%E\"%> känns inte igen" #: cp/class.c:5714 #, gcc-internal-format msgid "cannot resolve overloaded function %qD based on conversion to type %qT" -msgstr "det går inte att lösa upp överlastad funktion %qD baserat på konvertering till typ %qT" +msgstr "det går inte att lösa upp överlagrad funktion %qD baserat på konvertering till typ %qT" #: cp/class.c:5841 #, gcc-internal-format @@ -22890,7 +22890,7 @@ msgstr "ingen match som konverterar funktionen %qD till typen %q#T" #: cp/class.c:5864 #, gcc-internal-format msgid "converting overloaded function %qD to type %q#T is ambiguous" -msgstr "konvertering av överlastad funktion %qD till typ %q#T är tvetydig" +msgstr "konvertering av överlagrad funktion %qD till typ %q#T är tvetydig" #: cp/class.c:5890 #, gcc-internal-format @@ -23022,7 +23022,7 @@ msgstr "objekt %qE med ofullständig typ %qT kommer inte användas i %s" #: cp/cvt.c:902 #, gcc-internal-format msgid "%s cannot resolve address of overloaded function" -msgstr "%s kan inte lösa upp adress till överlastad funktion" +msgstr "%s kan inte lösa upp adress till överlagrad funktion" #. Only warn when there is no &. #: cp/cvt.c:908 @@ -23565,7 +23565,7 @@ msgstr "%qT har ingen icke-statisk medlem med namnet %qD" #: cp/decl.c:4387 #, gcc-internal-format msgid "braces around scalar initializer for type %qT" -msgstr "klamrar funt skalär initierare för typen %qT" +msgstr "klamrar runt skalär initierare för typen %qT" #: cp/decl.c:4465 #, gcc-internal-format @@ -24427,7 +24427,7 @@ msgstr "konvertering till %s%s kommer aldrig använda en typkonverteringsoperator #: cp/decl.c:9012 #, gcc-internal-format msgid "ISO C++ prohibits overloading operator ?:" -msgstr "ISO C++ förhindrar överlastning av operatorn ?:" +msgstr "ISO C++ förhindrar överlagring av operatorn ?:" #: cp/decl.c:9015 #, gcc-internal-format @@ -24848,7 +24848,7 @@ msgstr "kastar NULL, som har heltals-, inte pekartyp" #: cp/except.c:631 cp/init.c:1929 #, gcc-internal-format msgid "%qD should never be overloaded" -msgstr "%qD skall aldrig överlastas" +msgstr "%qD skall aldrig överlagras" #: cp/except.c:698 #, gcc-internal-format @@ -25242,7 +25242,7 @@ msgstr "det finns inga argument till %qD som beror på en mallparameter, så en de #: cp/lex.c:651 #, gcc-internal-format msgid "(if you use %<-fpermissive%>, G++ will accept your code, but allowing the use of an undeclared name is deprecated)" -msgstr "(om du använder %<-fpermissive%>, kommer G++ acceptera din kod, men det avrådes från att tillåta användning av ett odeklarerat namn)" +msgstr "(om du använder %<-fpermissive%>, kommer G++ acceptera din kod, men man bör undvika att tillåta användning av ett odeklarerat namn)" #: cp/mangle.c:2139 #, gcc-internal-format @@ -25562,7 +25562,7 @@ msgstr "XXX lämnar pop_everything ()\n" #: cp/parser.c:1875 #, gcc-internal-format msgid "minimum/maximum operators are deprecated" -msgstr "minimum-/maximumoperatorer undanbedes" +msgstr "minimum-/maximumoperatorer bör undvikas" #: cp/parser.c:1895 #, gcc-internal-format @@ -25905,7 +25905,7 @@ msgstr "filen tar slut i standardargument" #: cp/parser.c:12370 #, gcc-internal-format msgid "deprecated use of default argument for parameter of non-function" -msgstr "undanbedd användning av standardargument för parametrar till annat än funktioner" +msgstr "användning av standardargument för parametrar till annat än funktioner bör undvikas" #: cp/parser.c:12373 #, gcc-internal-format @@ -26728,7 +26728,7 @@ msgstr "%qT är en oåtkomlig bas till %qT" #: cp/search.c:1847 #, gcc-internal-format msgid "deprecated covariant return type for %q+#D" -msgstr "undanbedd kovariant returtyp för %q+#D" +msgstr "kovariant returtyp för %q+#D bör undvikas" #: cp/search.c:1849 cp/search.c:1864 cp/search.c:1869 #, gcc-internal-format @@ -27013,7 +27013,7 @@ msgstr "ogiltig användning av icke-statisk medlemsfunktion" #: cp/typeck.c:1502 #, gcc-internal-format msgid "deprecated conversion from string constant to %qT'" -msgstr "undanbedd konvertering från strängkonstant till %qT'" +msgstr "konvertering från strängkonstant till %qT' bör undvikas" #: cp/typeck.c:1613 cp/typeck.c:1961 #, gcc-internal-format @@ -27155,7 +27155,7 @@ msgstr "för få argument till funktion" #: cp/typeck.c:2885 cp/typeck.c:2895 #, gcc-internal-format msgid "assuming cast to type %qT from overloaded function" -msgstr "antar typkonvertering till %qT från överlastad funktion" +msgstr "antar typkonvertering till %qT från överlagrad funktion" #: cp/typeck.c:2963 #, gcc-internal-format diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index cb003bfce47..4db13c2262b 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,21 @@ +2007-04-24 Andreas Krebbel <krebbel1@de.ibm.com> + + PR target/31641 + * gcc.c-torture/compile/pr31641.c: New testcase. + +2007-04-22 Andrew Pinski <andrew_pinski@playstation.sony.com> + + PR middle-end/31448 + * gcc.c-torture/execute/pr31448.c: New testcase. + +2007-04-20 Jakub Jelinek <jakub@redhat.com> + + * gcc.target/i386/ordcmp-1.c: New test. + * gcc.target/i386/unordcmp-1.c: New test. + + PR tree-optimization/31632 + * gcc.c-torture/compile/20070419-1.c: New test. + 2007-04-17 Simon Martin <simartin@users.sourceforge.net> PR c++/31517 diff --git a/gcc/testsuite/g++.old-deja/g++.warn/flow1.C b/gcc/testsuite/g++.old-deja/g++.warn/flow1.C index 61f6a554970..e69de29bb2d 100644 --- a/gcc/testsuite/g++.old-deja/g++.warn/flow1.C +++ b/gcc/testsuite/g++.old-deja/g++.warn/flow1.C @@ -1,14 +0,0 @@ -// { dg-do assemble } -// { dg-options "-Wreturn-type" } -// Test that we don't get a warning about flowing off the end. - -struct A { - ~A (); -}; - -int f() -{ - A a1[2]; - A a2[2]; - return 1234567; -} diff --git a/gcc/testsuite/gcc.c-torture/compile/20070419-1.c b/gcc/testsuite/gcc.c-torture/compile/20070419-1.c new file mode 100644 index 00000000000..ea23bf8bdc0 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/20070419-1.c @@ -0,0 +1,17 @@ +/* PR tree-optimization/31632 */ + +struct S +{ + long int l; + void *m; +}; + +int +foo (struct S *x) +{ + unsigned long a; + a = x->l; + if (a <= ((void *) 0)) + x->m = 0; + return 0; +} diff --git a/gcc/testsuite/gcc.c-torture/execute/pr31448.c b/gcc/testsuite/gcc.c-torture/execute/pr31448.c new file mode 100644 index 00000000000..720ba926eaa --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/pr31448.c @@ -0,0 +1,36 @@ +/* PR middle-end/31448, this used to ICE during expand because + reduce_to_bit_field_precision was not ready to handle constants. */ + +typedef struct _st { + int iIndex : 24; + int iIndex1 : 24; +} st; +st *next; +void g(void) +{ + st *next = 0; + int nIndx; + const static int constreg[] = { 0,}; + nIndx = 0; + next->iIndex = constreg[nIndx]; +} +void f(void) +{ + int nIndx; + const static int constreg[] = { 0xFEFEFEFE,}; + nIndx = 0; + next->iIndex = constreg[nIndx]; + next->iIndex1 = constreg[nIndx]; +} +int main(void) +{ + st a; + next = &a; + f(); + if (next->iIndex != 0xFFFEFEFE) + __builtin_abort (); + if (next->iIndex1 != 0xFFFEFEFE) + __builtin_abort (); + return 0; +} + diff --git a/gcc/testsuite/gcc.target/i386/ordcmp-1.c b/gcc/testsuite/gcc.target/i386/ordcmp-1.c new file mode 100644 index 00000000000..1a70e19192d --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/ordcmp-1.c @@ -0,0 +1,36 @@ +/* { dg-do compile { target i?86-*-* x86_64-*-* } } */ +/* { dg-options "-O2 -msse2" } */ +/* { dg-final { scan-assembler "cmpordss" } } */ +/* { dg-final { scan-assembler "cmpordps" } } */ +/* { dg-final { scan-assembler "cmpordsd" } } */ +/* { dg-final { scan-assembler "cmpordpd" } } */ +/* { dg-final { scan-assembler-not "cmpunordss" } } */ +/* { dg-final { scan-assembler-not "cmpunordps" } } */ +/* { dg-final { scan-assembler-not "cmpunordsd" } } */ +/* { dg-final { scan-assembler-not "cmpunordpd" } } */ + +#include <emmintrin.h> + +__m128 +f1 (__m128 x, __m128 y) +{ + return _mm_cmpord_ss (x, y); +} + +__m128 +f2 (__m128 x, __m128 y) +{ + return _mm_cmpord_ps (x, y); +} + +__m128d +f3 (__m128d x, __m128d y) +{ + return _mm_cmpord_sd (x, y); +} + +__m128d +f4 (__m128d x, __m128d y) +{ + return _mm_cmpord_pd (x, y); +} diff --git a/gcc/testsuite/gcc.target/i386/unordcmp-1.c b/gcc/testsuite/gcc.target/i386/unordcmp-1.c new file mode 100644 index 00000000000..3123fe9ada2 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/unordcmp-1.c @@ -0,0 +1,36 @@ +/* { dg-do compile { target i?86-*-* x86_64-*-* } } */ +/* { dg-options "-O2 -msse2" } */ +/* { dg-final { scan-assembler "cmpunordss" } } */ +/* { dg-final { scan-assembler "cmpunordps" } } */ +/* { dg-final { scan-assembler "cmpunordsd" } } */ +/* { dg-final { scan-assembler "cmpunordpd" } } */ +/* { dg-final { scan-assembler-not "cmpordss" } } */ +/* { dg-final { scan-assembler-not "cmpordps" } } */ +/* { dg-final { scan-assembler-not "cmpordsd" } } */ +/* { dg-final { scan-assembler-not "cmpordpd" } } */ + +#include <emmintrin.h> + +__m128 +f1 (__m128 x, __m128 y) +{ + return _mm_cmpunord_ss (x, y); +} + +__m128 +f2 (__m128 x, __m128 y) +{ + return _mm_cmpunord_ps (x, y); +} + +__m128d +f3 (__m128d x, __m128d y) +{ + return _mm_cmpunord_sd (x, y); +} + +__m128d +f4 (__m128d x, __m128d y) +{ + return _mm_cmpunord_pd (x, y); +} diff --git a/gcc/version.c b/gcc/version.c index af2558dfd95..56d718f41de 100644 --- a/gcc/version.c +++ b/gcc/version.c @@ -8,7 +8,7 @@ in parentheses. You may also wish to include a number indicating the revision of your modified compiler. */ -#define VERSUFFIX " (Red Hat 4.1.2-9)" +#define VERSUFFIX " (Red Hat 4.1.2-11)" /* This is the location of the online document giving instructions for reporting bugs. If you distribute a modified version of GCC, diff --git a/libcpp/ChangeLog b/libcpp/ChangeLog index 4e3d396bea4..c72f26f93c4 100644 --- a/libcpp/ChangeLog +++ b/libcpp/ChangeLog @@ -1,3 +1,9 @@ +2007-04-23 Tom Tromey <tromey@redhat.com> + + PR preprocessor/30468: + * mkdeps.c (apply_vpath): Strip successive '/'s if we stripped + './'. + 2006-12-28 Tom Tromey <tromey@redhat.com> PR preprocessor/30001: diff --git a/libcpp/mkdeps.c b/libcpp/mkdeps.c index 3e2c4d82e96..8aa96c529e3 100644 --- a/libcpp/mkdeps.c +++ b/libcpp/mkdeps.c @@ -1,5 +1,5 @@ /* Dependency generator for Makefile fragments. - Copyright (C) 2000, 2001, 2003 Free Software Foundation, Inc. + Copyright (C) 2000, 2001, 2003, 2007 Free Software Foundation, Inc. Contributed by Zack Weinberg, Mar 2000 This program is free software; you can redistribute it and/or modify it @@ -141,7 +141,13 @@ apply_vpath (struct deps *d, const char *t) /* Remove leading ./ in any case. */ while (t[0] == '.' && IS_DIR_SEPARATOR (t[1])) - t += 2; + { + t += 2; + /* If we removed a leading ./, then also remove any /s after the + first. */ + while (IS_DIR_SEPARATOR (t[0])) + ++t; + } return t; } diff --git a/libffi/ChangeLog b/libffi/ChangeLog index b244c46bd28..febc439ac13 100644 --- a/libffi/ChangeLog +++ b/libffi/ChangeLog @@ -1,3 +1,16 @@ +2007-04-20 Richard Henderson <rth@redhat.com> + + * configure.ac (alpha*-*-*): Define HAVE_LONG_DOUBLE. + * configure: Regenerate. + * include/ffi.h.in (ffi_type_longdouble): Define as ffi_type_double + if HAVE_LONG_DOUBLE is false. + * src/alpha/ffi.c (ffi_prep_cif_machdep): Support the 128-bit + long double type. + (ffi_call_osf, ffi_closure_osf): Likewise. + * src/alpha/osf.S (ffi_call_osf, ffi_closure_osf): Mark hidden. + * src/types.c (ffi_type_longdouble): For alpha, always generate + for the 128-bit long double type. + 2007-04-03 Jakub Jelinek <jakub@redhat.com> * src/closures.c: Include sys/statfs.h. diff --git a/libffi/configure b/libffi/configure index 0c32170a753..583d553c45b 100755 --- a/libffi/configure +++ b/libffi/configure @@ -5393,7 +5393,11 @@ sparc*-sun-*) TARGET=SPARC; TARGETDIR=sparc;; sparc-*-linux* | sparc-*-netbsdelf* | sparc-*-knetbsd*-gnu) TARGET=SPARC; TARGETDIR=sparc;; sparc*-*-rtems*) TARGET=SPARC; TARGETDIR=sparc;; sparc64-*-linux* | sparc64-*-freebsd* | sparc64-*-netbsd* | sparc64-*-knetbsd*-gnu) TARGET=SPARC; TARGETDIR=sparc;; -alpha*-*-linux* | alpha*-*-osf* | alpha*-*-freebsd* | alpha*-*-kfreebsd*-gnu | alpha*-*-netbsd* | alpha*-*-knetbsd*-gnu) TARGET=ALPHA; TARGETDIR=alpha;; +alpha*-*-linux* | alpha*-*-osf* | alpha*-*-freebsd* | alpha*-*-kfreebsd*-gnu | alpha*-*-netbsd* | alpha*-*-knetbsd*-gnu) + TARGET=ALPHA; TARGETDIR=alpha + # Support 128-bit long double, changable via command-line switch. + HAVE_LONG_DOUBLE='defined(__LONG_DOUBLE_128__)' + ;; ia64*-*-*) TARGET=IA64; TARGETDIR=ia64;; m32r*-*-linux* ) TARGET=M32R; TARGETDIR=m32r;; m68k-*-linux*) TARGET=M68K; TARGETDIR=m68k;; @@ -7124,15 +7128,17 @@ _ACEOF # Also AC_SUBST this variable for ffi.h. -HAVE_LONG_DOUBLE=0 -if test $ac_cv_sizeof_double != $ac_cv_sizeof_long_double; then - if test $ac_cv_sizeof_long_double != 0; then - HAVE_LONG_DOUBLE=1 +if test -z "$HAVE_LONG_DOUBLE"; then + HAVE_LONG_DOUBLE=0 + if test $ac_cv_sizeof_double != $ac_cv_sizeof_long_double; then + if test $ac_cv_sizeof_long_double != 0; then + HAVE_LONG_DOUBLE=1 cat >>confdefs.h <<\_ACEOF #define HAVE_LONG_DOUBLE 1 _ACEOF + fi fi fi diff --git a/libffi/configure.ac b/libffi/configure.ac index e80c262dc32..4446582f8b7 100644 --- a/libffi/configure.ac +++ b/libffi/configure.ac @@ -58,7 +58,11 @@ sparc*-sun-*) TARGET=SPARC; TARGETDIR=sparc;; sparc-*-linux* | sparc-*-netbsdelf* | sparc-*-knetbsd*-gnu) TARGET=SPARC; TARGETDIR=sparc;; sparc*-*-rtems*) TARGET=SPARC; TARGETDIR=sparc;; sparc64-*-linux* | sparc64-*-freebsd* | sparc64-*-netbsd* | sparc64-*-knetbsd*-gnu) TARGET=SPARC; TARGETDIR=sparc;; -alpha*-*-linux* | alpha*-*-osf* | alpha*-*-freebsd* | alpha*-*-kfreebsd*-gnu | alpha*-*-netbsd* | alpha*-*-knetbsd*-gnu) TARGET=ALPHA; TARGETDIR=alpha;; +alpha*-*-linux* | alpha*-*-osf* | alpha*-*-freebsd* | alpha*-*-kfreebsd*-gnu | alpha*-*-netbsd* | alpha*-*-knetbsd*-gnu) + TARGET=ALPHA; TARGETDIR=alpha + # Support 128-bit long double, changable via command-line switch. + HAVE_LONG_DOUBLE='defined(__LONG_DOUBLE_128__)' + ;; ia64*-*-*) TARGET=IA64; TARGETDIR=ia64;; m32r*-*-linux* ) TARGET=M32R; TARGETDIR=m32r;; m68k-*-linux*) TARGET=M68K; TARGETDIR=m68k;; @@ -130,11 +134,13 @@ AC_CHECK_SIZEOF(double) AC_CHECK_SIZEOF(long double) # Also AC_SUBST this variable for ffi.h. -HAVE_LONG_DOUBLE=0 -if test $ac_cv_sizeof_double != $ac_cv_sizeof_long_double; then - if test $ac_cv_sizeof_long_double != 0; then - HAVE_LONG_DOUBLE=1 - AC_DEFINE(HAVE_LONG_DOUBLE, 1, [Define if you have the long double type and it is bigger than a double]) +if test -z "$HAVE_LONG_DOUBLE"; then + HAVE_LONG_DOUBLE=0 + if test $ac_cv_sizeof_double != $ac_cv_sizeof_long_double; then + if test $ac_cv_sizeof_long_double != 0; then + HAVE_LONG_DOUBLE=1 + AC_DEFINE(HAVE_LONG_DOUBLE, 1, [Define if you have the long double type and it is bigger than a double]) + fi fi fi AC_SUBST(HAVE_LONG_DOUBLE) diff --git a/libffi/include/ffi.h.in b/libffi/include/ffi.h.in index 9f704343b3d..e7a7fd2878e 100644 --- a/libffi/include/ffi.h.in +++ b/libffi/include/ffi.h.in @@ -145,9 +145,13 @@ extern ffi_type ffi_type_uint64; extern ffi_type ffi_type_sint64; extern ffi_type ffi_type_float; extern ffi_type ffi_type_double; -extern ffi_type ffi_type_longdouble; extern ffi_type ffi_type_pointer; +#if @HAVE_LONG_DOUBLE@ +extern ffi_type ffi_type_longdouble; +#else +#define ffi_type_longdouble ffi_type_double +#endif typedef enum { FFI_OK = 0, diff --git a/libffi/src/alpha/ffi.c b/libffi/src/alpha/ffi.c index d139423f90e..cfa7b69e839 100644 --- a/libffi/src/alpha/ffi.c +++ b/libffi/src/alpha/ffi.c @@ -25,11 +25,22 @@ #include <ffi.h> #include <ffi_common.h> - #include <stdlib.h> -extern void ffi_call_osf(void *, unsigned long, unsigned, void *, void (*)()); -extern void ffi_closure_osf(void); +/* Force FFI_TYPE_LONGDOUBLE to be different than FFI_TYPE_DOUBLE; + all further uses in this file will refer to the 128-bit type. */ +#if defined(__LONG_DOUBLE_128__) +# if FFI_TYPE_LONGDOUBLE != 4 +# error FFI_TYPE_LONGDOUBLE out of date +# endif +#else +# undef FFI_TYPE_LONGDOUBLE +# define FFI_TYPE_LONGDOUBLE 4 +#endif + +extern void ffi_call_osf(void *, unsigned long, unsigned, void *, void (*)()) + FFI_HIDDEN; +extern void ffi_closure_osf(void) FFI_HIDDEN; ffi_status @@ -49,6 +60,11 @@ ffi_prep_cif_machdep(ffi_cif *cif) cif->flags = cif->rtype->type; break; + case FFI_TYPE_LONGDOUBLE: + /* 128-bit long double is returned in memory, like a struct. */ + cif->flags = FFI_TYPE_STRUCT; + break; + default: cif->flags = FFI_TYPE_INT; break; @@ -57,6 +73,7 @@ ffi_prep_cif_machdep(ffi_cif *cif) return FFI_OK; } + void ffi_call(ffi_cif *cif, void (*fn)(), void *rvalue, void **avalue) { @@ -64,8 +81,6 @@ ffi_call(ffi_cif *cif, void (*fn)(), void *rvalue, void **avalue) long i, avn; ffi_type **arg_types; - FFI_ASSERT (cif->abi == FFI_OSF); - /* If the return value is a struct and we don't have a return value address then we need to make one. */ if (rvalue == NULL && cif->flags == FFI_TYPE_STRUCT) @@ -84,6 +99,8 @@ ffi_call(ffi_cif *cif, void (*fn)(), void *rvalue, void **avalue) while (i < avn) { + size_t size = (*arg_types)->size; + switch ((*arg_types)->type) { case FFI_TYPE_SINT8: @@ -129,6 +146,12 @@ ffi_call(ffi_cif *cif, void (*fn)(), void *rvalue, void **avalue) *(double *) argp = *(double *)(* avalue); break; + case FFI_TYPE_LONGDOUBLE: + /* 128-bit long double is passed by reference. */ + *(long double **) argp = (long double *)(* avalue); + size = sizeof (long double *); + break; + case FFI_TYPE_STRUCT: memcpy(argp, *avalue, (*arg_types)->size); break; @@ -137,7 +160,7 @@ ffi_call(ffi_cif *cif, void (*fn)(), void *rvalue, void **avalue) FFI_ASSERT(0); } - argp += ALIGN((*arg_types)->size, FFI_SIZEOF_ARG) / FFI_SIZEOF_ARG; + argp += ALIGN(size, FFI_SIZEOF_ARG) / FFI_SIZEOF_ARG; i++, arg_types++, avalue++; } @@ -154,8 +177,6 @@ ffi_prep_closure_loc (ffi_closure* closure, { unsigned int *tramp; - FFI_ASSERT (cif->abi == FFI_OSF); - tramp = (unsigned int *) &closure->tramp[0]; tramp[0] = 0x47fb0401; /* mov $27,$1 */ tramp[1] = 0xa77b0010; /* ldq $27,16($27) */ @@ -178,7 +199,8 @@ ffi_prep_closure_loc (ffi_closure* closure, return FFI_OK; } -int + +long FFI_HIDDEN ffi_closure_osf_inner(ffi_closure *closure, void *rvalue, unsigned long *argp) { ffi_cif *cif; @@ -206,6 +228,8 @@ ffi_closure_osf_inner(ffi_closure *closure, void *rvalue, unsigned long *argp) /* Grab the addresses of the arguments from the stack frame. */ while (i < avn) { + size_t size = arg_types[i]->size; + switch (arg_types[i]->type) { case FFI_TYPE_SINT8: @@ -237,16 +261,22 @@ ffi_closure_osf_inner(ffi_closure *closure, void *rvalue, unsigned long *argp) avalue[i] = &argp[argn - (argn < 6 ? 6 : 0)]; break; + case FFI_TYPE_LONGDOUBLE: + /* 128-bit long double is passed by reference. */ + avalue[i] = (long double *) argp[argn]; + size = sizeof (long double *); + break; + default: - FFI_ASSERT(0); + abort (); } - argn += ALIGN(arg_types[i]->size, FFI_SIZEOF_ARG) / FFI_SIZEOF_ARG; + argn += ALIGN(size, FFI_SIZEOF_ARG) / FFI_SIZEOF_ARG; i++; } /* Invoke the closure. */ - (closure->fun) (cif, rvalue, avalue, closure->user_data); + closure->fun (cif, rvalue, avalue, closure->user_data); /* Tell ffi_closure_osf how to perform return type promotions. */ return cif->rtype->type; diff --git a/libffi/src/alpha/osf.S b/libffi/src/alpha/osf.S index 36052b3de09..a6a7b1fc249 100644 --- a/libffi/src/alpha/osf.S +++ b/libffi/src/alpha/osf.S @@ -1,10 +1,8 @@ /* ----------------------------------------------------------------------- - osf.S - Copyright (c) 1998, 2001 Red Hat + osf.S - Copyright (c) 1998, 2001, 2007 Red Hat Alpha/OSF Foreign Function Interface - $Id: osf.S,v 1.1.1.1 1998/11/29 16:48:16 green Exp $ - Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the ``Software''), to deal in the Software without restriction, including @@ -42,6 +40,8 @@ .align 3 .globl ffi_call_osf .ent ffi_call_osf + FFI_HIDDEN(ffi_call_osf) + ffi_call_osf: .frame $15, 32, $26, 0 .mask 0x4008000, -32 @@ -129,6 +129,8 @@ $LFE1: .align 3 .globl ffi_closure_osf .ent ffi_closure_osf + FFI_HIDDEN(ffi_closure_osf) + ffi_closure_osf: .frame $30, 16*8, $26, 0 .mask 0x4000000, -16*8 @@ -265,7 +267,7 @@ $load_table: .gprel32 $load_32 # FFI_TYPE_INT .gprel32 $load_float # FFI_TYPE_FLOAT .gprel32 $load_double # FFI_TYPE_DOUBLE - .gprel32 $load_double # FFI_TYPE_LONGDOUBLE + .gprel32 $load_none # FFI_TYPE_LONGDOUBLE .gprel32 $load_u8 # FFI_TYPE_UINT8 .gprel32 $load_s8 # FFI_TYPE_SINT8 .gprel32 $load_u16 # FFI_TYPE_UINT16 diff --git a/libffi/src/types.c b/libffi/src/types.c index b65787359fe..ad7ef6044a2 100644 --- a/libffi/src/types.c +++ b/libffi/src/types.c @@ -57,4 +57,17 @@ FFI_TYPEDEF(pointer, void*, FFI_TYPE_POINTER); FFI_TYPEDEF(float, float, FFI_TYPE_FLOAT); FFI_TYPEDEF(double, double, FFI_TYPE_DOUBLE); + +#ifdef __alpha__ +/* Even if we're not configured to default to 128-bit long double, + maintain binary compatibility, as -mlong-double-128 can be used + at any time. */ +/* Validate the hard-coded number below. */ +# if defined(__LONG_DOUBLE_128__) && FFI_TYPE_LONGDOUBLE != 4 +# error FFI_TYPE_LONGDOUBLE out of date +# endif +# undef ffi_type_longdouble +ffi_type ffi_type_longdouble = { 16, 16, 4, NULL }; +#elif FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE FFI_TYPEDEF(longdouble, long double, FFI_TYPE_LONGDOUBLE); +#endif diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index 93c6f3aee08..f371608b515 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,11 @@ +2007-04-23 Matthias Klose <doko@debian.org> + + Backport from mainline: + 2007-02-27 Richard Guenther <rguenther@suse.de> + + * acinclude.m4: Adjust regular expression for ld version extraction. + * configure: Regenerate. + 2007-02-21 Mark Mitchell <mark@codesourcery.com> * testsuite/lib/libstdc++.exp (libstdc++_init): Compile testglue diff --git a/libstdc++-v3/acinclude.m4 b/libstdc++-v3/acinclude.m4 index 597270f7f02..3c059d4acfe 100644 --- a/libstdc++-v3/acinclude.m4 +++ b/libstdc++-v3/acinclude.m4 @@ -225,7 +225,7 @@ AC_DEFUN([GLIBCXX_CHECK_LINKER_FEATURES], [ if test x"$with_gnu_ld" = x"yes"; then changequote(,) ldver=`$LD --version 2>/dev/null | head -1 | \ - sed -e 's/GNU ld version \([0-9.][0-9.]*\).*/\1/'` + sed -e 's/GNU ld \(version \)\{0,1\}\(([^)]*) \)\{0,1\}\([0-9.][0-9.]*\).*/\3/'` changequote([,]) glibcxx_gnu_ld_version=`echo $ldver | \ $AWK -F. '{ if (NF<3) [$]3=0; print ([$]1*100+[$]2)*100+[$]3 }'` diff --git a/libstdc++-v3/configure b/libstdc++-v3/configure index 8da67da5110..e814736f976 100755 --- a/libstdc++-v3/configure +++ b/libstdc++-v3/configure @@ -8281,7 +8281,7 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu if test x"$with_gnu_ld" = x"yes"; then ldver=`$LD --version 2>/dev/null | head -1 | \ - sed -e 's/GNU ld version \([0-9.][0-9.]*\).*/\1/'` + sed -e 's/GNU ld \(version \)\{0,1\}\(([^)]*) \)\{0,1\}\([0-9.][0-9.]*\).*/\3/'` glibcxx_gnu_ld_version=`echo $ldver | \ $AWK -F. '{ if (NF<3) $3=0; print ($1*100+$2)*100+$3 }'` @@ -53122,7 +53122,7 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu if test x"$with_gnu_ld" = x"yes"; then ldver=`$LD --version 2>/dev/null | head -1 | \ - sed -e 's/GNU ld version \([0-9.][0-9.]*\).*/\1/'` + sed -e 's/GNU ld \(version \)\{0,1\}\(([^)]*) \)\{0,1\}\([0-9.][0-9.]*\).*/\3/'` glibcxx_gnu_ld_version=`echo $ldver | \ $AWK -F. '{ if (NF<3) $3=0; print ($1*100+$2)*100+$3 }'` @@ -74456,7 +74456,7 @@ done if test x"$with_gnu_ld" = x"yes"; then ldver=`$LD --version 2>/dev/null | head -1 | \ - sed -e 's/GNU ld version \([0-9.][0-9.]*\).*/\1/'` + sed -e 's/GNU ld \(version \)\{0,1\}\(([^)]*) \)\{0,1\}\([0-9.][0-9.]*\).*/\3/'` glibcxx_gnu_ld_version=`echo $ldver | \ $AWK -F. '{ if (NF<3) $3=0; print ($1*100+$2)*100+$3 }'` @@ -75953,7 +75953,7 @@ done if test x"$with_gnu_ld" = x"yes"; then ldver=`$LD --version 2>/dev/null | head -1 | \ - sed -e 's/GNU ld version \([0-9.][0-9.]*\).*/\1/'` + sed -e 's/GNU ld \(version \)\{0,1\}\(([^)]*) \)\{0,1\}\([0-9.][0-9.]*\).*/\3/'` glibcxx_gnu_ld_version=`echo $ldver | \ $AWK -F. '{ if (NF<3) $3=0; print ($1*100+$2)*100+$3 }'` @@ -77326,7 +77326,7 @@ done if test x"$with_gnu_ld" = x"yes"; then ldver=`$LD --version 2>/dev/null | head -1 | \ - sed -e 's/GNU ld version \([0-9.][0-9.]*\).*/\1/'` + sed -e 's/GNU ld \(version \)\{0,1\}\(([^)]*) \)\{0,1\}\([0-9.][0-9.]*\).*/\3/'` glibcxx_gnu_ld_version=`echo $ldver | \ $AWK -F. '{ if (NF<3) $3=0; print ($1*100+$2)*100+$3 }'` @@ -79486,7 +79486,7 @@ done if test x"$with_gnu_ld" = x"yes"; then ldver=`$LD --version 2>/dev/null | head -1 | \ - sed -e 's/GNU ld version \([0-9.][0-9.]*\).*/\1/'` + sed -e 's/GNU ld \(version \)\{0,1\}\(([^)]*) \)\{0,1\}\([0-9.][0-9.]*\).*/\3/'` glibcxx_gnu_ld_version=`echo $ldver | \ $AWK -F. '{ if (NF<3) $3=0; print ($1*100+$2)*100+$3 }'` @@ -80305,7 +80305,7 @@ done if test x"$with_gnu_ld" = x"yes"; then ldver=`$LD --version 2>/dev/null | head -1 | \ - sed -e 's/GNU ld version \([0-9.][0-9.]*\).*/\1/'` + sed -e 's/GNU ld \(version \)\{0,1\}\(([^)]*) \)\{0,1\}\([0-9.][0-9.]*\).*/\3/'` glibcxx_gnu_ld_version=`echo $ldver | \ $AWK -F. '{ if (NF<3) $3=0; print ($1*100+$2)*100+$3 }'` @@ -81680,7 +81680,7 @@ done if test x"$with_gnu_ld" = x"yes"; then ldver=`$LD --version 2>/dev/null | head -1 | \ - sed -e 's/GNU ld version \([0-9.][0-9.]*\).*/\1/'` + sed -e 's/GNU ld \(version \)\{0,1\}\(([^)]*) \)\{0,1\}\([0-9.][0-9.]*\).*/\3/'` glibcxx_gnu_ld_version=`echo $ldver | \ $AWK -F. '{ if (NF<3) $3=0; print ($1*100+$2)*100+$3 }'` @@ -83447,7 +83447,7 @@ echo "${ECHO_T}$glibcxx_cv_WRITEV" >&6 if test x"$with_gnu_ld" = x"yes"; then ldver=`$LD --version 2>/dev/null | head -1 | \ - sed -e 's/GNU ld version \([0-9.][0-9.]*\).*/\1/'` + sed -e 's/GNU ld \(version \)\{0,1\}\(([^)]*) \)\{0,1\}\([0-9.][0-9.]*\).*/\3/'` glibcxx_gnu_ld_version=`echo $ldver | \ $AWK -F. '{ if (NF<3) $3=0; print ($1*100+$2)*100+$3 }'` @@ -84664,7 +84664,7 @@ _ACEOF if test x"$with_gnu_ld" = x"yes"; then ldver=`$LD --version 2>/dev/null | head -1 | \ - sed -e 's/GNU ld version \([0-9.][0-9.]*\).*/\1/'` + sed -e 's/GNU ld \(version \)\{0,1\}\(([^)]*) \)\{0,1\}\([0-9.][0-9.]*\).*/\3/'` glibcxx_gnu_ld_version=`echo $ldver | \ $AWK -F. '{ if (NF<3) $3=0; print ($1*100+$2)*100+$3 }'` @@ -85665,7 +85665,7 @@ done if test x"$with_gnu_ld" = x"yes"; then ldver=`$LD --version 2>/dev/null | head -1 | \ - sed -e 's/GNU ld version \([0-9.][0-9.]*\).*/\1/'` + sed -e 's/GNU ld \(version \)\{0,1\}\(([^)]*) \)\{0,1\}\([0-9.][0-9.]*\).*/\3/'` glibcxx_gnu_ld_version=`echo $ldver | \ $AWK -F. '{ if (NF<3) $3=0; print ($1*100+$2)*100+$3 }'` |