diff --git a/.gitignore b/.gitignore index ea2c4e7..e61dcb9 100644 --- a/.gitignore +++ b/.gitignore @@ -39,3 +39,4 @@ /gcc-4.7.1-20120720.tar.bz2 /gcc-4.7.1-20120810.tar.bz2 /gcc-4.7.1-20120813.tar.bz2 +/gcc-4.7.1-20120913.tar.bz2 diff --git a/gcc.spec b/gcc.spec index 207f782..c6ec6a3 100644 --- a/gcc.spec +++ b/gcc.spec @@ -1,9 +1,9 @@ -%global DATE 20120813 -%global SVNREV 190350 +%global DATE 20120913 +%global SVNREV 191278 %global gcc_version 4.7.1 # Note, gcc_release must be integer, if you want to add suffixes to # %{release}, append them after %{gcc_release} on Release: line. -%global gcc_release 7 +%global gcc_release 8 %global _unpackaged_files_terminate_build 0 %global multilib_64_archs sparc64 ppc64 s390x x86_64 %ifarch %{ix86} x86_64 ia64 ppc ppc64 alpha @@ -185,6 +185,7 @@ Patch14: gcc47-ppl-0.10.patch Patch15: gcc47-libitm-fno-exceptions.patch Patch16: gcc47-rh837630.patch Patch17: gcc47-arm-hfp-ldso.patch +Patch18: gcc47-pr54564.patch Patch1000: fastjar-0.97-segfault.patch Patch1001: fastjar-0.97-len1.patch @@ -690,6 +691,7 @@ package or when debugging this package. %if 0%{?fedora} >= 18 || 0%{?rhel} >= 7 %patch17 -p0 -b .arm-hfp-ldso~ %endif +%patch18 -p0 -b .pr54564~ %if 0%{?_enable_debug_packages} cat > split-debuginfo.sh <<\EOF @@ -2663,6 +2665,22 @@ fi %{_prefix}/libexec/gcc/%{gcc_target_platform}/%{gcc_version}/plugin %changelog +* Thu Sep 13 2012 Jakub Jelinek 4.7.1-8 +- update from the 4.7 branch + - PRs c++/53836, c++/53839, c++/54086, c++/54197, c++/54253, c++/54341, + c++/54506, c++/54511, c/54363, c/54428, c/54559, debug/54534, + driver/54335, fortran/53306, fortran/54208, fortran/54225, + fortran/54435, fortran/54443, fortran/54556, gcov-profile/54487, + libstdc++/54172, libstdc++/54185, libstdc++/54297, libstdc++/54351, + libstdc++/54376, libstdc++/54388, lto/53572, middle-end/53667, + middle-end/53992, middle-end/54146, middle-end/54486, + middle-end/54515, rtl-optimization/54088, rtl-optimization/54369, + rtl-optimization/54455, target/45070, target/46254, target/54212, + target/54220, target/54252, target/54436, target/54461, + target/54476, target/54536, tree-opt/54494, + tree-optimization/53922, tree-optimization/54498 +- fix up _mm_f{,n}m{add,sub}_s{s,d} fma intrinsics (PR target/54564) + * Mon Aug 13 2012 Jakub Jelinek 4.7.1-7 - update from the 4.7 branch - PR rtl-optimization/53942 diff --git a/gcc47-pr54564.patch b/gcc47-pr54564.patch new file mode 100644 index 0000000..422c32c --- /dev/null +++ b/gcc47-pr54564.patch @@ -0,0 +1,166 @@ +2012-09-13 Jakub Jelinek + + PR target/54564 + * config/i386/sse.md (fmai_vmfmadd_): Use (match_dup 1) + instead of (match_dup 0) as second argument to vec_merge. + (*fmai_fmadd_, *fmai_fmsub_): Likewise. + Remove third alternative. + (*fmai_fnmadd_, *fmai_fnmsub_): Likewise. Negate + operand 2 instead of operand 1, but put it as first argument + of fma. + + * config/i386/fmaintrin.h (_mm_fnmadd_sd, _mm_fnmadd_ss, + _mm_fnmsub_sd, _mm_fnmsub_ss): Negate the second argument instead + of the first. + +--- gcc/config/i386/sse.md.jj 2012-09-05 18:27:03.000000000 +0200 ++++ gcc/config/i386/sse.md 2012-09-13 13:49:49.504968716 +0200 +@@ -2072,79 +2072,75 @@ (define_expand "fmai_vmfmadd_" + (match_operand:VF_128 1 "nonimmediate_operand") + (match_operand:VF_128 2 "nonimmediate_operand") + (match_operand:VF_128 3 "nonimmediate_operand")) +- (match_dup 0) ++ (match_dup 1) + (const_int 1)))] + "TARGET_FMA") + + (define_insn "*fmai_fmadd_" +- [(set (match_operand:VF_128 0 "register_operand" "=x,x,x") ++ [(set (match_operand:VF_128 0 "register_operand" "=x,x") + (vec_merge:VF_128 + (fma:VF_128 +- (match_operand:VF_128 1 "nonimmediate_operand" "%0, 0,x") +- (match_operand:VF_128 2 "nonimmediate_operand" "xm, x,xm") +- (match_operand:VF_128 3 "nonimmediate_operand" " x,xm,0")) +- (match_dup 0) ++ (match_operand:VF_128 1 "nonimmediate_operand" " 0, 0") ++ (match_operand:VF_128 2 "nonimmediate_operand" "xm, x") ++ (match_operand:VF_128 3 "nonimmediate_operand" " x,xm")) ++ (match_dup 1) + (const_int 1)))] + "TARGET_FMA" + "@ + vfmadd132\t{%2, %3, %0|%0, %3, %2} +- vfmadd213\t{%3, %2, %0|%0, %2, %3} +- vfmadd231\t{%2, %1, %0|%0, %1, %2}" ++ vfmadd213\t{%3, %2, %0|%0, %2, %3}" + [(set_attr "type" "ssemuladd") + (set_attr "mode" "")]) + + (define_insn "*fmai_fmsub_" +- [(set (match_operand:VF_128 0 "register_operand" "=x,x,x") ++ [(set (match_operand:VF_128 0 "register_operand" "=x,x") + (vec_merge:VF_128 + (fma:VF_128 +- (match_operand:VF_128 1 "nonimmediate_operand" "%0, 0,x") +- (match_operand:VF_128 2 "nonimmediate_operand" "xm, x,xm") ++ (match_operand:VF_128 1 "nonimmediate_operand" " 0, 0") ++ (match_operand:VF_128 2 "nonimmediate_operand" "xm, x") + (neg:VF_128 +- (match_operand:VF_128 3 "nonimmediate_operand" " x,xm,0"))) +- (match_dup 0) ++ (match_operand:VF_128 3 "nonimmediate_operand" " x,xm"))) ++ (match_dup 1) + (const_int 1)))] + "TARGET_FMA" + "@ + vfmsub132\t{%2, %3, %0|%0, %3, %2} +- vfmsub213\t{%3, %2, %0|%0, %2, %3} +- vfmsub231\t{%2, %1, %0|%0, %1, %2}" ++ vfmsub213\t{%3, %2, %0|%0, %2, %3}" + [(set_attr "type" "ssemuladd") + (set_attr "mode" "")]) + + (define_insn "*fmai_fnmadd_" +- [(set (match_operand:VF_128 0 "register_operand" "=x,x,x") ++ [(set (match_operand:VF_128 0 "register_operand" "=x,x") + (vec_merge:VF_128 + (fma:VF_128 + (neg:VF_128 +- (match_operand:VF_128 1 "nonimmediate_operand" "%0, 0,x")) +- (match_operand:VF_128 2 "nonimmediate_operand" "xm, x,xm") +- (match_operand:VF_128 3 "nonimmediate_operand" " x,xm,0")) +- (match_dup 0) ++ (match_operand:VF_128 2 "nonimmediate_operand" "xm, x")) ++ (match_operand:VF_128 1 "nonimmediate_operand" " 0, 0") ++ (match_operand:VF_128 3 "nonimmediate_operand" " x,xm")) ++ (match_dup 1) + (const_int 1)))] + "TARGET_FMA" + "@ + vfnmadd132\t{%2, %3, %0|%0, %3, %2} +- vfnmadd213\t{%3, %2, %0|%0, %2, %3} +- vfnmadd231\t{%2, %1, %0|%0, %1, %2}" ++ vfnmadd213\t{%3, %2, %0|%0, %2, %3}" + [(set_attr "type" "ssemuladd") + (set_attr "mode" "")]) + + (define_insn "*fmai_fnmsub_" +- [(set (match_operand:VF_128 0 "register_operand" "=x,x,x") ++ [(set (match_operand:VF_128 0 "register_operand" "=x,x") + (vec_merge:VF_128 + (fma:VF_128 + (neg:VF_128 +- (match_operand:VF_128 1 "nonimmediate_operand" "%0, 0,x")) +- (match_operand:VF_128 2 "nonimmediate_operand" "xm, x,xm") ++ (match_operand:VF_128 2 "nonimmediate_operand" "xm, x")) ++ (match_operand:VF_128 1 "nonimmediate_operand" " 0, 0") + (neg:VF_128 +- (match_operand:VF_128 3 "nonimmediate_operand" " x,xm,0"))) +- (match_dup 0) ++ (match_operand:VF_128 3 "nonimmediate_operand" " x,xm"))) ++ (match_dup 1) + (const_int 1)))] + "TARGET_FMA" + "@ + vfnmsub132\t{%2, %3, %0|%0, %3, %2} +- vfnmsub213\t{%3, %2, %0|%0, %2, %3} +- vfnmsub231\t{%2, %1, %0|%0, %1, %2}" ++ vfnmsub213\t{%3, %2, %0|%0, %2, %3}" + [(set_attr "type" "ssemuladd") + (set_attr "mode" "")]) + +--- gcc/config/i386/fmaintrin.h.jj 2011-09-02 16:29:38.000000000 +0200 ++++ gcc/config/i386/fmaintrin.h 2012-09-13 13:32:20.162333244 +0200 +@@ -1,4 +1,4 @@ +-/* Copyright (C) 2011 Free Software Foundation, Inc. ++/* Copyright (C) 2011, 2012 Free Software Foundation, Inc. + + This file is part of GCC. + +@@ -164,7 +164,7 @@ extern __inline __m128d + __attribute__((__gnu_inline__, __always_inline__, __artificial__)) + _mm_fnmadd_sd (__m128d __A, __m128d __B, __m128d __C) + { +- return (__m128d)__builtin_ia32_vfmaddsd3 (-(__v2df)__A, (__v2df)__B, ++ return (__m128d)__builtin_ia32_vfmaddsd3 ((__v2df)__A, -(__v2df)__B, + (__v2df)__C); + } + +@@ -172,7 +172,7 @@ extern __inline __m128 + __attribute__((__gnu_inline__, __always_inline__, __artificial__)) + _mm_fnmadd_ss (__m128 __A, __m128 __B, __m128 __C) + { +- return (__m128)__builtin_ia32_vfmaddss3 (-(__v4sf)__A, (__v4sf)__B, ++ return (__m128)__builtin_ia32_vfmaddss3 ((__v4sf)__A, -(__v4sf)__B, + (__v4sf)__C); + } + +@@ -212,7 +212,7 @@ extern __inline __m128d + __attribute__((__gnu_inline__, __always_inline__, __artificial__)) + _mm_fnmsub_sd (__m128d __A, __m128d __B, __m128d __C) + { +- return (__m128d)__builtin_ia32_vfmaddsd3 (-(__v2df)__A, (__v2df)__B, ++ return (__m128d)__builtin_ia32_vfmaddsd3 ((__v2df)__A, -(__v2df)__B, + -(__v2df)__C); + } + +@@ -220,7 +220,7 @@ extern __inline __m128 + __attribute__((__gnu_inline__, __always_inline__, __artificial__)) + _mm_fnmsub_ss (__m128 __A, __m128 __B, __m128 __C) + { +- return (__m128)__builtin_ia32_vfmaddss3 (-(__v4sf)__A, (__v4sf)__B, ++ return (__m128)__builtin_ia32_vfmaddss3 ((__v4sf)__A, -(__v4sf)__B, + -(__v4sf)__C); + } + diff --git a/sources b/sources index 451fd26..74490d5 100644 --- a/sources +++ b/sources @@ -1,2 +1 @@ -2659f09c2e43ef8b7d4406321753f1b2 fastjar-0.97.tar.gz -35fc72166b9171d72c01f7b6f197d38c gcc-4.7.1-20120813.tar.bz2 +10dae15ffd394a99eef1c3f164ab05d8 gcc-4.7.1-20120913.tar.bz2