re PR target/64180 (PowerPC carry bit improvements)
authorSegher Boessenkool <segher@kernel.crashing.org>
Wed, 10 Dec 2014 18:28:57 +0000 (19:28 +0100)
committerSegher Boessenkool <segher@gcc.gnu.org>
Wed, 10 Dec 2014 18:28:57 +0000 (19:28 +0100)
PR target/64180
* config/rs6000/rs6000.c (TARGET_MD_ASM_CLOBBERS): Define.
(rs6000_md_asm_clobbers): New function.

From-SVN: r218589

gcc/ChangeLog
gcc/config/rs6000/rs6000.c

index 7073979f8cae47e2de2cdf6c635c08259b025770..2d4a8f99d78ec9471b232bfd4714720ad0419d71 100644 (file)
@@ -1,3 +1,9 @@
+2014-12-10  Segher Boessenkool  <segher@kernel.crashing.org>
+
+       PR target/64180
+       * config/rs6000/rs6000.c (TARGET_MD_ASM_CLOBBERS): Define.
+       (rs6000_md_asm_clobbers): New function.
+
 2014-12-10  Felix Yang  <felix.yang@huawei.com>
 
        * config/aarch64/aarch64-protos.h (aarch64_function_profiler): Remove
index be092a64eb9e0c7d2360f9d58cae465ddebb11bc..1c2070bd3058828d465c4a25423ef8769b0795d2 100644 (file)
@@ -1556,6 +1556,9 @@ static const struct attribute_spec rs6000_attribute_table[] =
 #undef TARGET_ASM_LOOP_ALIGN_MAX_SKIP
 #define TARGET_ASM_LOOP_ALIGN_MAX_SKIP rs6000_loop_align_max_skip
 
+#undef TARGET_MD_ASM_CLOBBERS
+#define TARGET_MD_ASM_CLOBBERS rs6000_md_asm_clobbers
+
 #undef TARGET_OPTION_OVERRIDE
 #define TARGET_OPTION_OVERRIDE rs6000_option_override
 
@@ -3146,6 +3149,19 @@ rs6000_builtin_mask_calculate (void)
          | ((TARGET_LONG_DOUBLE_128)       ? RS6000_BTM_LDBL128 : 0));
 }
 
+/* Implement TARGET_MD_ASM_CLOBBERS.  All asm statements are considered
+   to clobber the XER[CA] bit because clobbering that bit without telling
+   the compiler worked just fine with versions of GCC before GCC 5, and
+   breaking a lot of older code in ways that are hard to track down is
+   not such a great idea.  */
+
+static tree
+rs6000_md_asm_clobbers (tree, tree, tree clobbers)
+{
+  tree s = build_string (strlen (reg_names[CA_REGNO]), reg_names[CA_REGNO]);
+  return tree_cons (NULL_TREE, s, clobbers);
+}
+
 /* Override command line options.  Mostly we process the processor type and
    sometimes adjust other TARGET_ options.  */