summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordoko <doko@6ca36cf4-e1d1-0310-8c6f-e303bb2178ca>2013-09-20 09:51:31 +0000
committerdoko <doko@6ca36cf4-e1d1-0310-8c6f-e303bb2178ca>2013-09-20 09:51:31 +0000
commitaa9a860d6095cf4cf2307b79b9409461e7fd50af (patch)
tree22d5d64b32ffacc40f54e7561623033a5c297620
parentdb749201e64b1c8a130f7f574ff1e71a32a37594 (diff)
downloadgcc-47-aa9a860d6095cf4cf2307b79b9409461e7fd50af.tar.gz
* Update to SVN 20130920 (r202771) from the gcc-4_7-branch.
git-svn-id: svn://svn.debian.org/svn/gcccvs/branches/sid/gcc-4.7@6964 6ca36cf4-e1d1-0310-8c6f-e303bb2178ca
-rw-r--r--debian/changelog6
-rw-r--r--debian/patches/svn-updates.diff1005
2 files changed, 985 insertions, 26 deletions
diff --git a/debian/changelog b/debian/changelog
index 6595e4c..9217e2c 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,9 @@
+gcc-4.7 (4.7.3-7ubuntu1) UNRELEASED; urgency=low
+
+ * Update to SVN 20130920 (r202771) from the gcc-4_7-branch.
+
+ -- Matthias Klose <doko@debian.org> Fri, 20 Sep 2013 11:23:55 +0200
+
gcc-4.7 (4.7.3-7) unstable; urgency=low
* Update to SVN 20130821 (r201895) from the gcc-4_7-branch.
diff --git a/debian/patches/svn-updates.diff b/debian/patches/svn-updates.diff
index b43c402..d5e0ba9 100644
--- a/debian/patches/svn-updates.diff
+++ b/debian/patches/svn-updates.diff
@@ -1,10 +1,10 @@
-# DP: updates from the 4.7 branch upto 20130820 (r201895).
+# DP: updates from the 4.7 branch upto 20130920 (r202771).
last_updated()
{
cat > ${dir}LAST_UPDATED <<EOF
-Wed Aug 21 11:15:52 CEST 2013
-Wed Aug 21 09:15:52 UTC 2013 (revision 201895)
+Fri Sep 20 11:18:33 CEST 2013
+Fri Sep 20 09:18:33 UTC 2013 (revision 202771)
EOF
}
@@ -104,11 +104,33 @@ Index: libstdc++-v3/include/bits/basic_string.h
*/
template<typename _CharT, typename _Traits, typename _Alloc>
inline basic_istream<_CharT, _Traits>&
+Index: libstdc++-v3/include/bits/random.tcc
+===================================================================
+--- a/src/libstdc++-v3/include/bits/random.tcc (.../tags/gcc_4_7_3_release)
++++ b/src/libstdc++-v3/include/bits/random.tcc (.../branches/gcc-4_7-branch)
+@@ -1125,7 +1125,7 @@
+ operator()(_UniformRandomNumberGenerator& __urng,
+ const param_type& __p)
+ {
+- typedef typename std::gamma_distribution<result_type>::param_type
++ typedef typename std::gamma_distribution<double>::param_type
+ param_type;
+
+ const double __y =
Index: libstdc++-v3/ChangeLog
===================================================================
--- a/src/libstdc++-v3/ChangeLog (.../tags/gcc_4_7_3_release)
+++ b/src/libstdc++-v3/ChangeLog (.../branches/gcc-4_7-branch)
-@@ -1,3 +1,38 @@
+@@ -1,3 +1,47 @@
++2013-09-03 Paolo Carlini <paolo.carlini@oracle.com>
++
++ PR libstdc++/58302
++ * include/bits/random.tcc (negative_binomial_distribution<>::
++ operator()(_UniformRandomNumberGenerator&, const param_type&):
++ Fix typo in template argument.
++ * testsuite/26_numerics/random/negative_binomial_distribution/
++ operators/58302.cc: New.
++
+2013-08-17 Uros Bizjak <ubizjak@gmail.com>
+
+ * src/c++98/compatibility.cc (_ZTIe): Use
@@ -147,6 +169,45 @@ Index: libstdc++-v3/ChangeLog
2013-04-11 Release Manager
* GCC 4.7.3 released.
+Index: libstdc++-v3/testsuite/26_numerics/random/negative_binomial_distribution/operators/58302.cc
+===================================================================
+--- a/src/libstdc++-v3/testsuite/26_numerics/random/negative_binomial_distribution/operators/58302.cc (.../tags/gcc_4_7_3_release)
++++ b/src/libstdc++-v3/testsuite/26_numerics/random/negative_binomial_distribution/operators/58302.cc (.../branches/gcc-4_7-branch)
+@@ -0,0 +1,34 @@
++// { dg-do compile }
++// { dg-options "-std=gnu++11" }
++// { dg-require-cstdint "" }
++//
++// Copyright (C) 2013 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library. This library is free
++// software; you can redistribute it and/or modify it under the
++// terms of the GNU General Public License as published by the
++// Free Software Foundation; either version 3, or (at your option)
++// any later version.
++//
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++// GNU General Public License for more details.
++//
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING3. If not see
++// <http://www.gnu.org/licenses/>.
++
++#include <random>
++
++void test01()
++{
++ typedef std::negative_binomial_distribution<> dist_type;
++
++ std::default_random_engine engine;
++
++ dist_type dist;
++ dist_type::param_type param(3, 0.5);
++
++ dist(engine, param); // compile error!
++}
Index: libstdc++-v3/testsuite/30_threads/condition_variable/members/53841.cc
===================================================================
--- a/src/libstdc++-v3/testsuite/30_threads/condition_variable/members/53841.cc (.../tags/gcc_4_7_3_release)
@@ -569,6 +630,50 @@ Index: libgcc/config/mips/vr4120-div.S
<http://www.gnu.org/licenses/>. */
/* This file contains functions which implement divsi3 and modsi3 for
+Index: gcc/c-family/ChangeLog
+===================================================================
+--- a/src/gcc/c-family/ChangeLog (.../tags/gcc_4_7_3_release)
++++ b/src/gcc/c-family/ChangeLog (.../branches/gcc-4_7-branch)
+@@ -1,3 +1,11 @@
++2013-09-01 Iain Sandoe <iain@codesourcery.com>
++
++ Backported from 4.8
++ 2012-06-19 Steven Bosscher <steven@gcc.gnu.org>
++
++ * c-target.def (objc_declare_unresolved_class_reference,
++ objc_declare_class_definition): Add new hooks.
++
+ 2013-04-11 Release Manager
+
+ * GCC 4.7.3 released.
+Index: gcc/c-family/c-target.def
+===================================================================
+--- a/src/gcc/c-family/c-target.def (.../tags/gcc_4_7_3_release)
++++ b/src/gcc/c-family/c-target.def (.../branches/gcc-4_7-branch)
+@@ -59,8 +59,22 @@
+ common-format string object when the target provides one.",
+ tree, (tree string),
+ NULL)
+-
++
+ DEFHOOK
++(objc_declare_unresolved_class_reference,
++ "Declare that Objective C class @var{classname} is referenced\
++ by the current TU.",
++ void, (const char *classname),
++ NULL)
++
++DEFHOOK
++(objc_declare_class_definition,
++ "Declare that Objective C class @var{classname} is defined\
++ by the current TU.",
++ void, (const char *classname),
++ NULL)
++
++DEFHOOK
+ (string_object_ref_type_p,
+ "If a target implements string objects then this hook should return\
+ @code{true} if @var{stringref} is a valid reference to such an object.",
Index: gcc/target.def
===================================================================
--- a/src/gcc/target.def (.../tags/gcc_4_7_3_release)
@@ -593,7 +698,7 @@ Index: gcc/DATESTAMP
+++ b/src/gcc/DATESTAMP (.../branches/gcc-4_7-branch)
@@ -1 +1 @@
-20130411
-+20130821
++20130920
Index: gcc/tree-tailcall.c
===================================================================
--- a/src/gcc/tree-tailcall.c (.../tags/gcc_4_7_3_release)
@@ -644,11 +749,257 @@ Index: gcc/builtins.c
/* Fall through... */
case rvc_zero:
/* Zero may set errno and/or raise an exception for logb, also
+Index: gcc/objc/ChangeLog
+===================================================================
+--- a/src/gcc/objc/ChangeLog (.../tags/gcc_4_7_3_release)
++++ b/src/gcc/objc/ChangeLog (.../branches/gcc-4_7-branch)
+@@ -1,3 +1,14 @@
++2013-09-01 Iain Sandoe <iain@codesourcery.com>
++
++ Backported from 4.8
++ 2012-06-19 Steven Bosscher <steven@gcc.gnu.org>
++
++ * objc-next-runtime-abi-01.c: Do not include tm.h and output.h.
++ Include c-family/c-target.h.
++ (handle_next_class_ref): Rewrite to emit top-level asm statements.
++ (handle_next_impent): Likewise.
++ * objc/Make-lang.in: Fix dependencies for objc-next-runtime-abi-01.o.
++
+ 2013-04-11 Release Manager
+
+ * GCC 4.7.3 released.
+Index: gcc/objc/Make-lang.in
+===================================================================
+--- a/src/gcc/objc/Make-lang.in (.../tags/gcc_4_7_3_release)
++++ b/src/gcc/objc/Make-lang.in (.../branches/gcc-4_7-branch)
+@@ -106,7 +106,7 @@
+ gt-objc-objc-next-runtime-abi-01.h \
+ $(START_HDRS) \
+ $(GGC_H) $(DIAGNOSTIC_CORE_H) $(FLAGS_H) input.h \
+- $(TARGET_H) output.h \
++ $(TARGET_H) \
+ objc/objc-encoding.h \
+ objc/objc-next-metadata-tags.h \
+ objc/objc-runtime-hooks.h \
+Index: gcc/objc/objc-next-runtime-abi-01.c
+===================================================================
+--- a/src/gcc/objc/objc-next-runtime-abi-01.c (.../tags/gcc_4_7_3_release)
++++ b/src/gcc/objc/objc-next-runtime-abi-01.c (.../branches/gcc-4_7-branch)
+@@ -26,7 +26,6 @@
+ #include "config.h"
+ #include "system.h"
+ #include "coretypes.h"
+-#include "tm.h"
+ #include "tree.h"
+
+ #ifdef OBJCPLUS
+@@ -49,7 +48,7 @@
+
+ #include "ggc.h"
+ #include "target.h"
+-#include "output.h"
++#include "c-family/c-target.h"
+ #include "tree-iterator.h"
+
+ #include "objc-runtime-hooks.h"
+@@ -2268,47 +2267,50 @@
+ init_objc_symtab (TREE_TYPE (UOBJC_SYMBOLS_decl)));
+ }
+
++/* Any target implementing NeXT ObjC m32 ABI has to ensure that objects
++ refer to, and define, symbols that enforce linkage of classes into the
++ executable image, preserving unix archive semantics.
+
++ At present (4.8), the only targets implementing this are Darwin; these
++ use top level asms to implement a scheme (see config/darwin-c.c). The
++ latter method is a hack, but compatible with LTO see also PR48109 for
++ further discussion and other possible methods. */
++
+ static void
+-handle_next_class_ref (tree chain)
++handle_next_class_ref (tree chain ATTRIBUTE_UNUSED)
+ {
+- const char *name = IDENTIFIER_POINTER (TREE_VALUE (chain));
+- char *string = (char *) alloca (strlen (name) + 30);
+-
+- sprintf (string, ".objc_class_name_%s", name);
+-
+-#ifdef ASM_DECLARE_UNRESOLVED_REFERENCE
+- ASM_DECLARE_UNRESOLVED_REFERENCE (asm_out_file, string);
+-#else
+- return ; /* NULL build for targets other than Darwin. */
+-#endif
++ if (targetcm.objc_declare_unresolved_class_reference)
++ {
++ const char *name = IDENTIFIER_POINTER (TREE_VALUE (chain));
++ char *string = (char *) alloca (strlen (name) + 30);
++ sprintf (string, ".objc_class_name_%s", name);
++ targetcm.objc_declare_unresolved_class_reference (string);
++ }
+ }
+
+ static void
+-handle_next_impent (struct imp_entry *impent)
++handle_next_impent (struct imp_entry *impent ATTRIBUTE_UNUSED)
+ {
+- char buf[BUFSIZE];
++ if (targetcm.objc_declare_class_definition)
++ {
++ char buf[BUFSIZE];
+
+- switch (TREE_CODE (impent->imp_context))
+- {
+- case CLASS_IMPLEMENTATION_TYPE:
+- snprintf (buf, BUFSIZE, ".objc_class_name_%s",
+- IDENTIFIER_POINTER (CLASS_NAME (impent->imp_context)));
+- break;
+- case CATEGORY_IMPLEMENTATION_TYPE:
+- snprintf (buf, BUFSIZE, "*.objc_category_name_%s_%s",
+- IDENTIFIER_POINTER (CLASS_NAME (impent->imp_context)),
+- IDENTIFIER_POINTER (CLASS_SUPER_NAME (impent->imp_context)));
+- break;
+- default:
+- return;
++ switch (TREE_CODE (impent->imp_context))
++ {
++ case CLASS_IMPLEMENTATION_TYPE:
++ snprintf (buf, BUFSIZE, ".objc_class_name_%s",
++ IDENTIFIER_POINTER (CLASS_NAME (impent->imp_context)));
++ break;
++ case CATEGORY_IMPLEMENTATION_TYPE:
++ snprintf (buf, BUFSIZE, "*.objc_category_name_%s_%s",
++ IDENTIFIER_POINTER (CLASS_NAME (impent->imp_context)),
++ IDENTIFIER_POINTER (CLASS_SUPER_NAME (impent->imp_context)));
++ break;
++ default:
++ return;
++ }
++ targetcm.objc_declare_class_definition (buf);
+ }
+-
+-#ifdef ASM_DECLARE_CLASS_REFERENCE
+- ASM_DECLARE_CLASS_REFERENCE (asm_out_file, buf);
+-#else
+- return ; /* NULL build for targets other than Darwin. */
+-#endif
+ }
+
+ static void
+@@ -2415,8 +2417,7 @@
+
+ /* Dump the class references. This forces the appropriate classes
+ to be linked into the executable image, preserving unix archive
+- semantics. This can be removed when we move to a more dynamically
+- linked environment. */
++ semantics. */
+
+ for (chain = cls_ref_chain; chain; chain = TREE_CHAIN (chain))
+ {
Index: gcc/ChangeLog
===================================================================
--- a/src/gcc/ChangeLog (.../tags/gcc_4_7_3_release)
+++ b/src/gcc/ChangeLog (.../branches/gcc-4_7-branch)
-@@ -1,3 +1,342 @@
+@@ -1,3 +1,442 @@
++2013-09-18 Daniel Morris <danielm@ecoscentric.com>
++ Paolo Carlini <paolo.carlini@oracle.com>
++
++ PR c++/58458
++ * doc/implement-cxx.texi: Fix references to the C++ standards.
++
++2013-09-14 John David Anglin <danglin@gcc.gnu.org>
++
++ PR target/58382
++ * config/pa/pa.c (pa_expand_prologue): Change mode in gen_rtx_POST_INC
++ calls to word_mode.
++
++2013-09-12 Terry Guo <terry.guo@arm.com>
++
++ Backport from mainline
++ 2012-09-17 Richard Guenther <rguenther@suse.de>
++
++ PR lto/54598
++ * tree-streamer-in.c (unpack_ts_real_cst_value_fields): Use ggc'ed
++ FIXED_VALUE_TYPE instead of struct fixed_value.
++
++2013-09-10 Richard Earnshaw <rearnsha@arm.com>
++
++ PR target/58361
++ * arm/vfp.md (combine_vcvt_f32_<FCVTI32typename>): Fix pattern to
++ support conditional execution.
++ (combine_vcvt_f64_<FCVTI32typename>): Likewise.
++
++2013-09-01 Uros Bizjak <ubizjak@gmail.com>
++
++ Backport from mainline
++ 2013-08-31 Uros Bizjak <ubizjak@gmail.com>
++
++ * config/alpha/alpha.c (alpha_emit_conditional_move): Update
++ "cmp" RTX before signed_comparison_operator check to account
++ for "code" changes.
++
++2013-09-01 John David Anglin <danglin@gcc.gnu.org>
++
++ * config/pa/pa.md: Allow "const 0" operand 1 in "scc" insns.
++
++2013-09-01 Iain Sandoe <iain@codesourcery.com>
++
++ Backported from 4.8
++ 2012-06-19 Steven Bosscher <steven@gcc.gnu.org>
++
++ * doc/tm.texi.in (TARGET_OBJC_DECLARE_UNRESOLVED_CLASS_REFERENCE,
++ TARGET_OBJC_DECLARE_CLASS_DEFINITION): Add @hooks.
++ (ASM_DECLARE_CLASS_REFERENCE, ASM_DECLARE_UNRESOLVED_REFERENCE):
++ Remove.
++ * doc/tm.texi: Regenerate.
++ * config/darwin.h (ASM_OUTPUT_LABELREF): Remove special case for
++ .objc_class_name_*.
++ * config/darwin-c.c: Include target.h.
++ (darwin_objc_declare_unresolved_class_reference): New function.
++ (darwin_objc_declare_class_definition): New function.
++ (TARGET_OBJC_DECLARE_UNRESOLVED_CLASS_REFERENCE): Define.
++ (TARGET_OBJC_DECLARE_CLASS_DEFINITION): Define.
++
++2013-09-01 Iain Sandoe <iain@codesourcery.com>
++
++ Backport from mainline:
++ 2013-07-22 Uros Bizjak <ubizjak@gmail.com>
++
++ * config/i386/i386.md (nonlocal_goto_receiver): Delete insn if
++ it is not needed after split.
++
++ 2013-07-20 Iain Sandoe <iain@codesourcery.com>
++
++ PR target/51784
++ * config/i386/i386.c (output_set_got) [TARGET_MACHO]: Adjust to emit a
++ second label for nonlocal goto receivers. Don't output pic base labels
++ unless we're producing PIC; mark that action unreachable().
++ (ix86_save_reg): If the function contains a nonlocal label, save the
++ PIC base reg.
++ * config/darwin-protos.h (machopic_should_output_picbase_label): New.
++ * gcc/config/darwin.c (emitted_pic_label_num): New GTY.
++ (update_pic_label_number_if_needed): New.
++ (machopic_output_function_base_name): Adjust for nonlocal receiver
++ case.
++ (machopic_should_output_picbase_label): New.
++ * config/i386/i386.md (enum unspecv): UNSPECV_NLGR: New.
++ (nonlocal_goto_receiver): New insn and split.
++
++2013-08-28 Uros Bizjak <ubizjak@gmail.com>
++
++ Backport from mainline
++ 2013-08-27 Christian Widmer <shadow@umbrox.de>
++
++ PR target/57927
++ * config/i386/driver-i386.c (host_detect_local_cpu): Add detection
++ of Ivy Bridge processors.
++
++2013-08-21 Richard Earnshaw <rearnsha@arm.com>
++
++ PR target/56979
++ * arm.c (aapcs_vfp_allocate): Decompose the argument if the
++ suggested mode for the assignment isn't compatible with the
++ registers required.
++
+2013-08-17 Uros Bizjak <ubizjak@gmail.com>
+
+ Backport from mainline
@@ -1740,6 +2091,41 @@ Index: gcc/testsuite/gnat.dg/loop_optimization16_pkg.ads
+ function F return Natural;
+
+end Loop_Optimization16_Pkg;
+Index: gcc/testsuite/gnat.dg/in_out_parameter4.adb
+===================================================================
+--- a/src/gcc/testsuite/gnat.dg/in_out_parameter4.adb (.../tags/gcc_4_7_3_release)
++++ b/src/gcc/testsuite/gnat.dg/in_out_parameter4.adb (.../branches/gcc-4_7-branch)
+@@ -0,0 +1,30 @@
++-- { dg-do run }
++-- { dg-options "-gnat12 -gnatVa" }
++
++procedure In_Out_Parameter4 is
++
++ type Enum is (E_Undetermined, E_Down, E_Up);
++ subtype Status_T is Enum range E_Down .. E_Up;
++
++ function Recurse (Val : in out Integer) return Status_T is
++
++ Result : Status_T;
++
++ procedure Dummy (I : in out Integer) is begin null; end;
++
++ begin
++ if Val > 500 then
++ Val := Val - 1;
++ Result := Recurse (Val);
++ return Result;
++ else
++ return E_UP;
++ end if;
++ end;
++
++ Val : Integer := 501;
++ S : Status_T;
++
++begin
++ S := Recurse (Val);
++end;
Index: gcc/testsuite/gnat.dg/loop_optimization16.adb
===================================================================
--- a/src/gcc/testsuite/gnat.dg/loop_optimization16.adb (.../tags/gcc_4_7_3_release)
@@ -1957,7 +2343,11 @@ Index: gcc/testsuite/ChangeLog
===================================================================
--- a/src/gcc/testsuite/ChangeLog (.../tags/gcc_4_7_3_release)
+++ b/src/gcc/testsuite/ChangeLog (.../branches/gcc-4_7-branch)
-@@ -1,3 +1,210 @@
+@@ -1,3 +1,214 @@
++2013-09-18 Eric Botcazou <ebotcazou@adacore.com>
++
++ * gnat.dg/in_out_parameter4.adb: New test.
++
+2013-08-13 Eric Botcazou <ebotcazou@adacore.com>
+
+ * gnat.dg/loop_optimization16.adb: New test.
@@ -2458,6 +2848,26 @@ Index: gcc/testsuite/g++.dg/template/delete2.C
+ B<int> b;
+ delete b; // { dg-error "template|delete" }
+}
+Index: gcc/testsuite/g++.dg/template/inherit9.C
+===================================================================
+--- a/src/gcc/testsuite/g++.dg/template/inherit9.C (.../tags/gcc_4_7_3_release)
++++ b/src/gcc/testsuite/g++.dg/template/inherit9.C (.../branches/gcc-4_7-branch)
+@@ -0,0 +1,15 @@
++// PR c++/58273
++
++class A {};
++class B
++{
++ int goo(A);
++};
++template<typename E>
++class D : public B
++{
++ void foo(A t)
++ {
++ int const i(B::goo(t));
++ }
++};
Index: gcc/testsuite/objc.dg/no-extra-load.m
===================================================================
--- a/src/gcc/testsuite/objc.dg/no-extra-load.m (.../tags/gcc_4_7_3_release)
@@ -3323,7 +3733,13 @@ Index: gcc/cp/ChangeLog
===================================================================
--- a/src/gcc/cp/ChangeLog (.../tags/gcc_4_7_3_release)
+++ b/src/gcc/cp/ChangeLog (.../branches/gcc-4_7-branch)
-@@ -1,3 +1,56 @@
+@@ -1,3 +1,62 @@
++2013-09-13 Jason Merrill <jason@redhat.com>
++
++ PR c++/58273
++ * pt.c (any_type_dependent_elements_p): Actually check for
++ type-dependence, not value-dependence.
++
+2013-08-20 Jason Merrill <jason@redhat.com>
+
+ PR c++/58119
@@ -3405,6 +3821,15 @@ Index: gcc/cp/pt.c
case IDENTIFIER_NODE:
if (IDENTIFIER_TYPENAME_P (t))
{
+@@ -19545,7 +19552,7 @@
+ any_type_dependent_elements_p (const_tree list)
+ {
+ for (; list; list = TREE_CHAIN (list))
+- if (value_dependent_expression_p (TREE_VALUE (list)))
++ if (type_dependent_expression_p (TREE_VALUE (list)))
+ return true;
+
+ return false;
Index: gcc/cp/semantics.c
===================================================================
--- a/src/gcc/cp/semantics.c (.../tags/gcc_4_7_3_release)
@@ -3646,7 +4071,12 @@ Index: gcc/ada/ChangeLog
===================================================================
--- a/src/gcc/ada/ChangeLog (.../tags/gcc_4_7_3_release)
+++ b/src/gcc/ada/ChangeLog (.../branches/gcc-4_7-branch)
-@@ -1,3 +1,13 @@
+@@ -1,3 +1,18 @@
++2013-09-18 Eric Botcazou <ebotcazou@adacore.com>
++
++ * gcc-interface/trans.c (Subprogram_Body_to_gnu): Pop the stack of
++ return variables for subprograms using the CICO mechanism.
++
+2013-08-13 Eric Botcazou <ebotcazou@adacore.com>
+
+ * gcc-interface/trans.c (can_equal_min_or_max_val_p): Be prepared for
@@ -3699,6 +4129,15 @@ Index: gcc/ada/gcc-interface/trans.c
}
/* Return true if VAL (of type TYPE) can equal the minimum value of TYPE.
+@@ -3430,6 +3438,8 @@
+ {
+ tree gnu_retval;
+
++ VEC_pop (tree, gnu_return_var_stack);
++
+ add_stmt (gnu_result);
+ add_stmt (build1 (LABEL_EXPR, void_type_node,
+ VEC_last (tree, gnu_return_label_stack)));
Index: gcc/fortran/interface.c
===================================================================
--- a/src/gcc/fortran/interface.c (.../tags/gcc_4_7_3_release)
@@ -4316,6 +4755,28 @@ Index: gcc/sched-deps.c
flush_pending_lists (deps, insn, true, true);
reg_pending_barrier = NOT_A_BARRIER;
+Index: gcc/tree-streamer-in.c
+===================================================================
+--- a/src/gcc/tree-streamer-in.c (.../tags/gcc_4_7_3_release)
++++ b/src/gcc/tree-streamer-in.c (.../branches/gcc-4_7-branch)
+@@ -172,12 +172,11 @@
+ static void
+ unpack_ts_fixed_cst_value_fields (struct bitpack_d *bp, tree expr)
+ {
+- struct fixed_value fv;
+-
+- fv.mode = bp_unpack_enum (bp, machine_mode, MAX_MACHINE_MODE);
+- fv.data.low = bp_unpack_var_len_int (bp);
+- fv.data.high = bp_unpack_var_len_int (bp);
+- TREE_FIXED_CST (expr) = fv;
++ FIXED_VALUE_TYPE *fp = ggc_alloc_fixed_value ();
++ fp->mode = bp_unpack_enum (bp, machine_mode, MAX_MACHINE_MODE);
++ fp->data.low = bp_unpack_var_len_int (bp);
++ fp->data.high = bp_unpack_var_len_int (bp);
++ TREE_FIXED_CST_PTR (expr) = fp;
+ }
+
+
Index: gcc/collect2-aix.h
===================================================================
--- a/src/gcc/collect2-aix.h (.../tags/gcc_4_7_3_release)
@@ -4458,7 +4919,15 @@ Index: gcc/config/alpha/alpha.c
===================================================================
--- a/src/gcc/config/alpha/alpha.c (.../tags/gcc_4_7_3_release)
+++ b/src/gcc/config/alpha/alpha.c (.../branches/gcc-4_7-branch)
-@@ -2658,12 +2658,12 @@
+@@ -2617,6 +2617,7 @@
+ cmp_mode = cmp_mode == DImode ? DFmode : DImode;
+ op0 = gen_lowpart (cmp_mode, tem);
+ op1 = CONST0_RTX (cmp_mode);
++ cmp = gen_rtx_fmt_ee (code, VOIDmode, op0, op1);
+ local_fast_math = 1;
+ }
+
+@@ -2658,12 +2659,12 @@
break;
case GE: case GT: case GEU: case GTU:
@@ -4477,7 +4946,7 @@ Index: gcc/config/alpha/alpha.c
break;
default:
-@@ -3025,12 +3025,9 @@
+@@ -3025,12 +3026,9 @@
operands[1] = op1;
out = gen_reg_rtx (DImode);
@@ -4575,6 +5044,90 @@ Index: gcc/config/sparc/sparc.c
/* FALLTHRU */
case SMM_PSO:
+Index: gcc/config/darwin-c.c
+===================================================================
+--- a/src/gcc/config/darwin-c.c (.../tags/gcc_4_7_3_release)
++++ b/src/gcc/config/darwin-c.c (.../branches/gcc-4_7-branch)
+@@ -25,6 +25,7 @@
+ #include "tm.h"
+ #include "cpplib.h"
+ #include "tree.h"
++#include "target.h"
+ #include "incpath.h"
+ #include "c-family/c-common.h"
+ #include "c-family/c-pragma.h"
+@@ -36,6 +37,7 @@
+ #include "prefix.h"
+ #include "c-family/c-target.h"
+ #include "c-family/c-target-def.h"
++#include "cgraph.h"
+
+ /* Pragmas. */
+
+@@ -711,13 +713,60 @@
+ }
+ };
+
+-#undef TARGET_HANDLE_C_OPTION
++
++/* Support routines to dump the class references for NeXT ABI v1, aka
++ 32-bits ObjC-2.0, as top-level asms.
++ The following two functions should only be called from
++ objc/objc-next-runtime-abi-01.c. */
++
++static void
++darwin_objc_declare_unresolved_class_reference (const char *name)
++{
++ const char *lazy_reference = ".lazy_reference\t";
++ const char *hard_reference = ".reference\t";
++ const char *reference = MACHOPIC_INDIRECT ? lazy_reference : hard_reference;
++ size_t len = strlen (reference) + strlen(name) + 2;
++ char *buf = (char *) alloca (len);
++
++ gcc_checking_assert (!strncmp (name, ".objc_class_name_", 17));
++
++ snprintf (buf, len, "%s%s", reference, name);
++ cgraph_add_asm_node (build_string (strlen (buf), buf));
++}
++
++static void
++darwin_objc_declare_class_definition (const char *name)
++{
++ const char *xname = targetm.strip_name_encoding (name);
++ size_t len = strlen (xname) + 7 + 5;
++ char *buf = (char *) alloca (len);
++
++ gcc_checking_assert (!strncmp (name, ".objc_class_name_", 17)
++ || !strncmp (name, "*.objc_category_name_", 21));
++
++ /* Mimic default_globalize_label. */
++ snprintf (buf, len, ".globl\t%s", xname);
++ cgraph_add_asm_node (build_string (strlen (buf), buf));
++
++ snprintf (buf, len, "%s = 0", xname);
++ cgraph_add_asm_node (build_string (strlen (buf), buf));
++}
++
++#undef TARGET_HANDLE_C_OPTION
+ #define TARGET_HANDLE_C_OPTION handle_c_option
+
+-#undef TARGET_OBJC_CONSTRUCT_STRING_OBJECT
++#undef TARGET_OBJC_CONSTRUCT_STRING_OBJECT
+ #define TARGET_OBJC_CONSTRUCT_STRING_OBJECT darwin_objc_construct_string
+
+-#undef TARGET_STRING_OBJECT_REF_TYPE_P
++#undef TARGET_OBJC_DECLARE_UNRESOLVED_CLASS_REFERENCE
++#define TARGET_OBJC_DECLARE_UNRESOLVED_CLASS_REFERENCE \
++ darwin_objc_declare_unresolved_class_reference
++
++#undef TARGET_OBJC_DECLARE_CLASS_DEFINITION
++#define TARGET_OBJC_DECLARE_CLASS_DEFINITION \
++ darwin_objc_declare_class_definition
++
++#undef TARGET_STRING_OBJECT_REF_TYPE_P
+ #define TARGET_STRING_OBJECT_REF_TYPE_P darwin_cfstring_ref_p
+
+ #undef TARGET_CHECK_STRING_OBJECT_FORMAT_ARG
Index: gcc/config/i386/i386.md
===================================================================
--- a/src/gcc/config/i386/i386.md (.../tags/gcc_4_7_3_release)
@@ -4587,7 +5140,20 @@ Index: gcc/config/i386/i386.md
;; For SSE/MMX support:
UNSPEC_FIX_NOTRUNC
-@@ -1855,18 +1856,16 @@
+@@ -201,8 +202,11 @@
+
+ ;; For RDRAND support
+ UNSPECV_RDRAND
+-])
+
++ ;; Non-local goto.
++ UNSPECV_NLGR
++ ])
++
+ ;; Constants to represent rounding modes in the ROUND instruction
+ (define_constants
+ [(ROUND_FLOOR 0x1)
+@@ -1855,18 +1859,16 @@
[(set_attr "type" "*,*,sselog1,ssemov,ssemov")
(set_attr "prefix" "*,*,maybe_vex,maybe_vex,maybe_vex")
(set (attr "mode")
@@ -4616,7 +5182,7 @@ Index: gcc/config/i386/i386.md
(define_split
[(set (match_operand:TI 0 "nonimmediate_operand" "")
-@@ -2328,7 +2327,7 @@
+@@ -2328,7 +2330,7 @@
"TARGET_LP64 && ix86_check_movabs (insn, 0)"
"@
movabs{<imodesuffix>}\t{%1, %P0|[%P0], %1}
@@ -4625,7 +5191,7 @@ Index: gcc/config/i386/i386.md
[(set_attr "type" "imov")
(set_attr "modrm" "0,*")
(set_attr "length_address" "8,0")
-@@ -2342,7 +2341,7 @@
+@@ -2342,7 +2344,7 @@
"TARGET_LP64 && ix86_check_movabs (insn, 1)"
"@
movabs{<imodesuffix>}\t{%P1, %0|%0, [%P1]}
@@ -4634,7 +5200,7 @@ Index: gcc/config/i386/i386.md
[(set_attr "type" "imov")
(set_attr "modrm" "0,*")
(set_attr "length_address" "8,0")
-@@ -3444,9 +3443,9 @@
+@@ -3444,9 +3446,9 @@
})
(define_insn "*zero_extendsidi2_rex64"
@@ -4646,7 +5212,7 @@ Index: gcc/config/i386/i386.md
"TARGET_64BIT"
"@
mov{l}\t{%1, %k0|%k0, %1}
-@@ -3469,9 +3468,9 @@
+@@ -3469,9 +3471,9 @@
;; %%% Kill me once multi-word ops are sane.
(define_insn "zero_extendsidi2_1"
@@ -4658,7 +5224,7 @@ Index: gcc/config/i386/i386.md
(clobber (reg:CC FLAGS_REG))]
"!TARGET_64BIT"
"@
-@@ -15912,7 +15911,8 @@
+@@ -15912,7 +15914,8 @@
[(parallel [(set (match_operand 1 "memory_operand" "")
(match_operand 2 "register_operand" ""))
(set (match_operand 0 "register_operand" "")
@@ -4668,7 +5234,7 @@ Index: gcc/config/i386/i386.md
""
"ix86_current_function_needs_cld = 1;")
-@@ -15921,7 +15921,8 @@
+@@ -15921,7 +15924,8 @@
(match_operand:DI 2 "register_operand" "a"))
(set (match_operand:DI 0 "register_operand" "=D")
(plus:DI (match_dup 1)
@@ -4678,7 +5244,7 @@ Index: gcc/config/i386/i386.md
"TARGET_64BIT
&& !(fixed_regs[AX_REG] || fixed_regs[DI_REG])"
"stosq"
-@@ -15934,7 +15935,8 @@
+@@ -15934,7 +15938,8 @@
(match_operand:SI 2 "register_operand" "a"))
(set (match_operand:P 0 "register_operand" "=D")
(plus:P (match_dup 1)
@@ -4688,7 +5254,7 @@ Index: gcc/config/i386/i386.md
"!(fixed_regs[AX_REG] || fixed_regs[DI_REG])"
"stos{l|d}"
[(set_attr "type" "str")
-@@ -15946,7 +15948,8 @@
+@@ -15946,7 +15951,8 @@
(match_operand:HI 2 "register_operand" "a"))
(set (match_operand:P 0 "register_operand" "=D")
(plus:P (match_dup 1)
@@ -4698,7 +5264,7 @@ Index: gcc/config/i386/i386.md
"!(fixed_regs[AX_REG] || fixed_regs[DI_REG])"
"stosw"
[(set_attr "type" "str")
-@@ -15958,7 +15961,8 @@
+@@ -15958,7 +15964,8 @@
(match_operand:QI 2 "register_operand" "a"))
(set (match_operand:P 0 "register_operand" "=D")
(plus:P (match_dup 1)
@@ -4708,7 +5274,46 @@ Index: gcc/config/i386/i386.md
"!(fixed_regs[AX_REG] || fixed_regs[DI_REG])"
"stosb"
[(set_attr "type" "str")
-@@ -17190,6 +17194,7 @@
+@@ -16797,7 +16804,37 @@
+ emit_insn (gen_set_got (pic_offset_table_rtx));
+ DONE;
+ })
+-
++
++(define_insn_and_split "nonlocal_goto_receiver"
++ [(unspec_volatile [(const_int 0)] UNSPECV_NLGR)]
++ "TARGET_MACHO && !TARGET_64BIT && flag_pic"
++ "#"
++ "&& reload_completed"
++ [(const_int 0)]
++{
++ if (crtl->uses_pic_offset_table)
++ {
++ rtx xops[3];
++ rtx label_rtx = gen_label_rtx ();
++ rtx tmp;
++
++ /* Get a new pic base. */
++ emit_insn (gen_set_got_labelled (pic_offset_table_rtx, label_rtx));
++ /* Correct this with the offset from the new to the old. */
++ xops[0] = xops[1] = pic_offset_table_rtx;
++ label_rtx = gen_rtx_LABEL_REF (SImode, label_rtx);
++ tmp = gen_rtx_UNSPEC (Pmode, gen_rtvec (1, label_rtx),
++ UNSPEC_MACHOPIC_OFFSET);
++ xops[2] = gen_rtx_CONST (Pmode, tmp);
++ ix86_expand_binary_operator (MINUS, SImode, xops);
++ }
++ else
++ /* No pic reg restore needed. */
++ emit_note (NOTE_INSN_DELETED);
++
++ DONE;
++})
++
+ ;; Avoid redundant prefixes by splitting HImode arithmetic to SImode.
+
+ (define_split
+@@ -17190,6 +17227,7 @@
"(TARGET_READ_MODIFY_WRITE || optimize_insn_for_size_p ())
&& peep2_reg_dead_p (4, operands[0])
&& !reg_overlap_mentioned_p (operands[0], operands[1])
@@ -4716,7 +5321,7 @@ Index: gcc/config/i386/i386.md
&& (<MODE>mode != QImode
|| immediate_operand (operands[2], QImode)
|| q_regs_operand (operands[2], QImode))
-@@ -17254,6 +17259,7 @@
+@@ -17254,6 +17292,7 @@
|| immediate_operand (operands[2], SImode)
|| q_regs_operand (operands[2], SImode))
&& !reg_overlap_mentioned_p (operands[0], operands[1])
@@ -4813,6 +5418,47 @@ Index: gcc/config/i386/driver-i386.c
else
{
switch (family)
+@@ -593,13 +630,18 @@
+ /* Atom. */
+ cpu = "atom";
+ break;
++ case 0x0f:
++ /* Merom. */
++ case 0x17:
++ case 0x1d:
++ /* Penryn. */
++ cpu = "core2";
++ break;
+ case 0x1a:
+ case 0x1e:
+ case 0x1f:
+ case 0x2e:
+ /* Nehalem. */
+- cpu = "corei7";
+- break;
+ case 0x25:
+ case 0x2c:
+ case 0x2f:
+@@ -611,15 +653,11 @@
+ /* Sandy Bridge. */
+ cpu = "corei7-avx";
+ break;
+- case 0x17:
+- case 0x1d:
+- /* Penryn. */
+- cpu = "core2";
++ case 0x3a:
++ case 0x3e:
++ /* Ivy Bridge. */
++ cpu = "core-avx-i";
+ break;
+- case 0x0f:
+- /* Merom. */
+- cpu = "core2";
+- break;
+ default:
+ if (arch)
+ {
Index: gcc/config/i386/i386.c
===================================================================
--- a/src/gcc/config/i386/i386.c (.../tags/gcc_4_7_3_release)
@@ -4835,7 +5481,62 @@ Index: gcc/config/i386/i386.c
for (i = 0; i < n; i++)
if (regclass[i] == X86_64_X87_CLASS
|| regclass[i] == X86_64_X87UP_CLASS
-@@ -20026,7 +20026,7 @@
+@@ -8613,17 +8613,12 @@
+
+ if (!flag_pic)
+ {
++ if (TARGET_MACHO)
++ /* We don't need a pic base, we're not producing pic. */
++ gcc_unreachable ();
++
+ xops[2] = gen_rtx_LABEL_REF (Pmode, label ? label : gen_label_rtx ());
+-
+ output_asm_insn ("mov%z0\t{%2, %0|%0, %2}", xops);
+-
+-#if TARGET_MACHO
+- /* Output the Mach-O "canonical" label name ("Lxx$pb") here too. This
+- is what will be referenced by the Mach-O PIC subsystem. */
+- if (!label)
+- ASM_OUTPUT_LABEL (asm_out_file, MACHOPIC_FUNCTION_BASE_NAME);
+-#endif
+-
+ targetm.asm_out.internal_label (asm_out_file, "L",
+ CODE_LABEL_NUMBER (XEXP (xops[2], 0)));
+ }
+@@ -8636,12 +8631,18 @@
+ xops[2] = gen_rtx_SYMBOL_REF (Pmode, ggc_strdup (name));
+ xops[2] = gen_rtx_MEM (QImode, xops[2]);
+ output_asm_insn ("call\t%X2", xops);
+- /* Output the Mach-O "canonical" label name ("Lxx$pb") here too. This
+- is what will be referenced by the Mach-O PIC subsystem. */
++
+ #if TARGET_MACHO
+- if (!label)
++ /* Output the Mach-O "canonical" pic base label name ("Lxx$pb") here.
++ This is what will be referenced by the Mach-O PIC subsystem. */
++ if (machopic_should_output_picbase_label () || !label)
+ ASM_OUTPUT_LABEL (asm_out_file, MACHOPIC_FUNCTION_BASE_NAME);
+- else
++
++ /* When we are restoring the pic base at the site of a nonlocal label,
++ and we decided to emit the pic base above, we will still output a
++ local label used for calculating the correction offset (even though
++ the offset will be 0 in that case). */
++ if (label)
+ targetm.asm_out.internal_label (asm_out_file, "L",
+ CODE_LABEL_NUMBER (label));
+ #endif
+@@ -8717,7 +8718,8 @@
+ && (df_regs_ever_live_p (REAL_PIC_OFFSET_TABLE_REGNUM)
+ || crtl->profile
+ || crtl->calls_eh_return
+- || crtl->uses_const_pool))
++ || crtl->uses_const_pool
++ || cfun->has_nonlocal_label))
+ return ix86_select_alt_pic_regnum () == INVALID_REGNUM;
+
+ if (crtl->calls_eh_return && maybe_eh_return)
+@@ -20026,7 +20028,7 @@
vec[i * 2 + 1] = const1_rtx;
}
vt = gen_rtx_CONST_VECTOR (maskmode, gen_rtvec_v (w, vec));
@@ -4844,7 +5545,7 @@ Index: gcc/config/i386/i386.c
t1 = expand_simple_binop (maskmode, PLUS, t1, vt, t1, 1,
OPTAB_DIRECT);
-@@ -20223,7 +20223,7 @@
+@@ -20223,7 +20225,7 @@
for (i = 0; i < 16; ++i)
vec[i] = GEN_INT (i/e * e);
vt = gen_rtx_CONST_VECTOR (V16QImode, gen_rtvec_v (16, vec));
@@ -4853,7 +5554,7 @@ Index: gcc/config/i386/i386.c
if (TARGET_XOP)
emit_insn (gen_xop_pperm (mask, mask, mask, vt));
else
-@@ -20234,7 +20234,7 @@
+@@ -20234,7 +20236,7 @@
for (i = 0; i < 16; ++i)
vec[i] = GEN_INT (i % e);
vt = gen_rtx_CONST_VECTOR (V16QImode, gen_rtvec_v (16, vec));
@@ -4862,6 +5563,18 @@ Index: gcc/config/i386/i386.c
emit_insn (gen_addv16qi3 (mask, mask, vt));
}
+Index: gcc/config/darwin-protos.h
+===================================================================
+--- a/src/gcc/config/darwin-protos.h (.../tags/gcc_4_7_3_release)
++++ b/src/gcc/config/darwin-protos.h (.../branches/gcc-4_7-branch)
+@@ -26,6 +26,7 @@
+ extern void machopic_output_function_base_name (FILE *);
+ extern const char *machopic_indirection_name (rtx, bool);
+ extern const char *machopic_mcount_stub_name (void);
++extern bool machopic_should_output_picbase_label (void);
+
+ #ifdef RTX_CODE
+
Index: gcc/config/sh/sh.md
===================================================================
--- a/src/gcc/config/sh/sh.md (.../tags/gcc_4_7_3_release)
@@ -4978,6 +5691,60 @@ Index: gcc/config/rs6000/rs6000.h
#define VSX_VECTOR_MODE(MODE) \
((MODE) == V4SFmode \
+Index: gcc/config/darwin.c
+===================================================================
+--- a/src/gcc/config/darwin.c (.../tags/gcc_4_7_3_release)
++++ b/src/gcc/config/darwin.c (.../branches/gcc-4_7-branch)
+@@ -362,14 +362,13 @@
+
+ static GTY(()) const char * function_base_func_name;
+ static GTY(()) int current_pic_label_num;
++static GTY(()) int emitted_pic_label_num;
+
+-void
+-machopic_output_function_base_name (FILE *file)
++static void
++update_pic_label_number_if_needed (void)
+ {
+ const char *current_name;
+
+- /* If dynamic-no-pic is on, we should not get here. */
+- gcc_assert (!MACHO_DYNAMIC_NO_PIC_P);
+ /* When we are generating _get_pc thunks within stubs, there is no current
+ function. */
+ if (current_function_decl)
+@@ -387,9 +386,30 @@
+ ++current_pic_label_num;
+ function_base_func_name = "L_machopic_stub_dummy";
+ }
+- fprintf (file, "L%011d$pb", current_pic_label_num);
+ }
+
++void
++machopic_output_function_base_name (FILE *file)
++{
++ /* If dynamic-no-pic is on, we should not get here. */
++ gcc_assert (!MACHO_DYNAMIC_NO_PIC_P);
++
++ update_pic_label_number_if_needed ();
++ fprintf (file, "L%d$pb", current_pic_label_num);
++}
++
++bool
++machopic_should_output_picbase_label (void)
++{
++ update_pic_label_number_if_needed ();
++
++ if (current_pic_label_num == emitted_pic_label_num)
++ return false;
++
++ emitted_pic_label_num = current_pic_label_num;
++ return true;
++}
++
+ /* The suffix attached to non-lazy pointer symbols. */
+ #define NON_LAZY_POINTER_SUFFIX "$non_lazy_ptr"
+ /* The suffix attached to stub symbols. */
Index: gcc/config/darwin.h
===================================================================
--- a/src/gcc/config/darwin.h (.../tags/gcc_4_7_3_release)
@@ -5011,6 +5778,45 @@ Index: gcc/config/darwin.h
/* When generating stabs debugging, use N_BINCL entries. */
#define DBX_USE_BINCL
+@@ -612,8 +616,6 @@
+ fprintf (FILE, "\"%s\"", xname); \
+ else if (darwin_label_is_anonymous_local_objc_name (xname)) \
+ fprintf (FILE, "L%s", xname); \
+- else if (!strncmp (xname, ".objc_class_name_", 17)) \
+- fprintf (FILE, "%s", xname); \
+ else if (xname[0] != '"' && name_needs_quotes (xname)) \
+ asm_fprintf (FILE, "\"%U%s\"", xname); \
+ else \
+@@ -696,29 +698,6 @@
+ #undef TARGET_ASM_RELOC_RW_MASK
+ #define TARGET_ASM_RELOC_RW_MASK machopic_reloc_rw_mask
+
+-
+-#define ASM_DECLARE_UNRESOLVED_REFERENCE(FILE,NAME) \
+- do { \
+- if (FILE) { \
+- if (MACHOPIC_INDIRECT) \
+- fprintf (FILE, "\t.lazy_reference "); \
+- else \
+- fprintf (FILE, "\t.reference "); \
+- assemble_name (FILE, NAME); \
+- fprintf (FILE, "\n"); \
+- } \
+- } while (0)
+-
+-#define ASM_DECLARE_CLASS_REFERENCE(FILE,NAME) \
+- do { \
+- if (FILE) { \
+- fprintf (FILE, "\t"); \
+- assemble_name (FILE, NAME); \
+- fprintf (FILE, "=0\n"); \
+- (*targetm.asm_out.globalize_label) (FILE, NAME); \
+- } \
+- } while (0)
+-
+ /* Globalizing directive for a label. */
+ #define GLOBAL_ASM_OP "\t.globl "
+ #define TARGET_ASM_GLOBALIZE_LABEL darwin_globalize_label
Index: gcc/config/arm/thumb2.md
===================================================================
--- a/src/gcc/config/arm/thumb2.md (.../tags/gcc_4_7_3_release)
@@ -5060,6 +5866,21 @@ Index: gcc/config/arm/thumb2.md
(set_attr "neg_pool_range" "*,250")]
)
+Index: gcc/config/arm/arm.c
+===================================================================
+--- a/src/gcc/config/arm/arm.c (.../tags/gcc_4_7_3_release)
++++ b/src/gcc/config/arm/arm.c (.../branches/gcc-4_7-branch)
+@@ -4355,7 +4355,9 @@
+ if (((pcum->aapcs_vfp_regs_free >> regno) & mask) == mask)
+ {
+ pcum->aapcs_vfp_reg_alloc = mask << regno;
+- if (mode == BLKmode || (mode == TImode && !TARGET_NEON))
++ if (mode == BLKmode
++ || (mode == TImode && ! TARGET_NEON)
++ || ! arm_hard_regno_mode_ok (FIRST_VFP_REGNUM + regno, mode))
+ {
+ int i;
+ int rcount = pcum->aapcs_vfp_rcount;
Index: gcc/config/arm/vfp.md
===================================================================
--- a/src/gcc/config/arm/vfp.md (.../tags/gcc_4_7_3_release)
@@ -5111,6 +5932,52 @@ Index: gcc/config/arm/vfp.md
(set_attr "neg_pool_range" "*,*,*,1008,*,0,*,*,*")]
)
+@@ -1144,18 +1146,18 @@
+ (set_attr "type" "fcmpd")]
+ )
+
+-;; Fixed point to floating point conversions.
++;; Fixed point to floating point conversions.
+ (define_code_iterator FCVT [unsigned_float float])
+ (define_code_attr FCVTI32typename [(unsigned_float "u32") (float "s32")])
+
+ (define_insn "*combine_vcvt_f32_<FCVTI32typename>"
+ [(set (match_operand:SF 0 "s_register_operand" "=t")
+ (mult:SF (FCVT:SF (match_operand:SI 1 "s_register_operand" "0"))
+- (match_operand 2
++ (match_operand 2
+ "const_double_vcvt_power_of_two_reciprocal" "Dt")))]
+ "TARGET_32BIT && TARGET_HARD_FLOAT && TARGET_VFP3 && !flag_rounding_math"
+- "vcvt.f32.<FCVTI32typename>\\t%0, %1, %v2"
+- [(set_attr "predicable" "no")
++ "vcvt%?.f32.<FCVTI32typename>\\t%0, %1, %v2"
++ [(set_attr "predicable" "yes")
+ (set_attr "type" "f_cvt")]
+ )
+
+@@ -1164,15 +1166,16 @@
+ (define_insn "*combine_vcvt_f64_<FCVTI32typename>"
+ [(set (match_operand:DF 0 "s_register_operand" "=x,x,w")
+ (mult:DF (FCVT:DF (match_operand:SI 1 "s_register_operand" "r,t,r"))
+- (match_operand 2
++ (match_operand 2
+ "const_double_vcvt_power_of_two_reciprocal" "Dt,Dt,Dt")))]
+- "TARGET_32BIT && TARGET_HARD_FLOAT && TARGET_VFP3 && !flag_rounding_math
++ "TARGET_32BIT && TARGET_HARD_FLOAT && TARGET_VFP3 && !flag_rounding_math
+ && !TARGET_VFP_SINGLE"
+ "@
+- vmov.f32\\t%0, %1\;vcvt.f64.<FCVTI32typename>\\t%P0, %P0, %v2
+- vmov.f32\\t%0, %1\;vcvt.f64.<FCVTI32typename>\\t%P0, %P0, %v2
+- vmov.f64\\t%P0, %1, %1\;vcvt.f64.<FCVTI32typename>\\t%P0, %P0, %v2"
+- [(set_attr "predicable" "no")
++ vmov%?.f32\\t%0, %1\;vcvt%?.f64.<FCVTI32typename>\\t%P0, %P0, %v2
++ vmov%?.f32\\t%0, %1\;vcvt%?.f64.<FCVTI32typename>\\t%P0, %P0, %v2
++ vmov%?.f64\\t%P0, %1, %1\;vcvt%?.f64.<FCVTI32typename>\\t%P0, %P0, %v2"
++ [(set_attr "predicable" "yes")
++ (set_attr "ce_count" "2")
+ (set_attr "type" "f_cvt")
+ (set_attr "length" "8")]
+ )
Index: gcc/config/arm/neon.md
===================================================================
--- a/src/gcc/config/arm/neon.md (.../tags/gcc_4_7_3_release)
@@ -5320,6 +6187,72 @@ Index: gcc/config/arm/t-rtems-eabi
+MULTILIB_EXCEPTIONS += mfpu=neon/mfloat-abi=hard
+MULTILIB_EXCEPTIONS += mfpu=neon
+MULTILIB_EXCEPTIONS += mfloat-abi=hard
+Index: gcc/config/pa/pa.md
+===================================================================
+--- a/src/gcc/config/pa/pa.md (.../tags/gcc_4_7_3_release)
++++ b/src/gcc/config/pa/pa.md (.../branches/gcc-4_7-branch)
+@@ -730,7 +730,7 @@
+ (define_insn "scc"
+ [(set (match_operand:SI 0 "register_operand" "=r")
+ (match_operator:SI 3 "comparison_operator"
+- [(match_operand:SI 1 "register_operand" "r")
++ [(match_operand:SI 1 "reg_or_0_operand" "rM")
+ (match_operand:SI 2 "arith11_operand" "rI")]))]
+ ""
+ "{com%I2clr|cmp%I2clr},%B3 %2,%1,%0\;ldi 1,%0"
+@@ -740,7 +740,7 @@
+ (define_insn ""
+ [(set (match_operand:DI 0 "register_operand" "=r")
+ (match_operator:DI 3 "comparison_operator"
+- [(match_operand:DI 1 "register_operand" "r")
++ [(match_operand:DI 1 "reg_or_0_operand" "rM")
+ (match_operand:DI 2 "arith11_operand" "rI")]))]
+ "TARGET_64BIT"
+ "cmp%I2clr,*%B3 %2,%1,%0\;ldi 1,%0"
+@@ -750,10 +750,10 @@
+ (define_insn "iorscc"
+ [(set (match_operand:SI 0 "register_operand" "=r")
+ (ior:SI (match_operator:SI 3 "comparison_operator"
+- [(match_operand:SI 1 "register_operand" "r")
++ [(match_operand:SI 1 "reg_or_0_operand" "rM")
+ (match_operand:SI 2 "arith11_operand" "rI")])
+ (match_operator:SI 6 "comparison_operator"
+- [(match_operand:SI 4 "register_operand" "r")
++ [(match_operand:SI 4 "reg_or_0_operand" "rM")
+ (match_operand:SI 5 "arith11_operand" "rI")])))]
+ ""
+ "{com%I2clr|cmp%I2clr},%S3 %2,%1,%%r0\;{com%I5clr|cmp%I5clr},%B6 %5,%4,%0\;ldi 1,%0"
+@@ -763,10 +763,10 @@
+ (define_insn ""
+ [(set (match_operand:DI 0 "register_operand" "=r")
+ (ior:DI (match_operator:DI 3 "comparison_operator"
+- [(match_operand:DI 1 "register_operand" "r")
++ [(match_operand:DI 1 "reg_or_0_operand" "rM")
+ (match_operand:DI 2 "arith11_operand" "rI")])
+ (match_operator:DI 6 "comparison_operator"
+- [(match_operand:DI 4 "register_operand" "r")
++ [(match_operand:DI 4 "reg_or_0_operand" "rM")
+ (match_operand:DI 5 "arith11_operand" "rI")])))]
+ "TARGET_64BIT"
+ "cmp%I2clr,*%S3 %2,%1,%%r0\;cmp%I5clr,*%B6 %5,%4,%0\;ldi 1,%0"
+@@ -778,7 +778,7 @@
+ (define_insn "negscc"
+ [(set (match_operand:SI 0 "register_operand" "=r")
+ (neg:SI (match_operator:SI 3 "comparison_operator"
+- [(match_operand:SI 1 "register_operand" "r")
++ [(match_operand:SI 1 "reg_or_0_operand" "rM")
+ (match_operand:SI 2 "arith11_operand" "rI")])))]
+ ""
+ "{com%I2clr|cmp%I2clr},%B3 %2,%1,%0\;ldi -1,%0"
+@@ -788,7 +788,7 @@
+ (define_insn ""
+ [(set (match_operand:DI 0 "register_operand" "=r")
+ (neg:DI (match_operator:DI 3 "comparison_operator"
+- [(match_operand:DI 1 "register_operand" "r")
++ [(match_operand:DI 1 "reg_or_0_operand" "rM")
+ (match_operand:DI 2 "arith11_operand" "rI")])))]
+ "TARGET_64BIT"
+ "cmp%I2clr,*%B3 %2,%1,%0\;ldi -1,%0"
Index: gcc/config/pa/pa.c
===================================================================
--- a/src/gcc/config/pa/pa.c (.../tags/gcc_4_7_3_release)
@@ -5335,6 +6268,26 @@ Index: gcc/config/pa/pa.c
}
crtl->uses_pic_offset_table = 1;
return reg;
+@@ -4001,7 +4003,8 @@
+ || (! TARGET_64BIT && df_regs_ever_live_p (i + 1)))
+ {
+ rtx addr, insn, reg;
+- addr = gen_rtx_MEM (DFmode, gen_rtx_POST_INC (DFmode, tmpreg));
++ addr = gen_rtx_MEM (DFmode,
++ gen_rtx_POST_INC (word_mode, tmpreg));
+ reg = gen_rtx_REG (DFmode, i);
+ insn = emit_move_insn (addr, reg);
+ if (DO_FRAME_NOTES)
+@@ -4291,7 +4294,8 @@
+ if (df_regs_ever_live_p (i)
+ || (! TARGET_64BIT && df_regs_ever_live_p (i + 1)))
+ {
+- rtx src = gen_rtx_MEM (DFmode, gen_rtx_POST_INC (DFmode, tmpreg));
++ rtx src = gen_rtx_MEM (DFmode,
++ gen_rtx_POST_INC (word_mode, tmpreg));
+ rtx dest = gen_rtx_REG (DFmode, i);
+ emit_move_insn (dest, src);
+ }
Index: gcc/config/v850/t-rtems
===================================================================
--- a/src/gcc/config/v850/t-rtems (.../tags/gcc_4_7_3_release)