]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR target/56979 (ICE in output_operand: invalid operand for code 'P')
authorRichard Earnshaw <rearnsha@arm.com>
Wed, 21 Aug 2013 16:21:04 +0000 (16:21 +0000)
committerRichard Earnshaw <rearnsha@gcc.gnu.org>
Wed, 21 Aug 2013 16:21:04 +0000 (16:21 +0000)
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.

From-SVN: r201904

gcc/ChangeLog
gcc/config/arm/arm.c

index 702f6bc33409dc94ffb981e365f96a9c7399b19b..5bcf448354c6883c1a12827b705221800b2b6943 100644 (file)
@@ -1,3 +1,10 @@
+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
index 1fb7d70108f2bc2d74815222bbff1dee0ed67ce6..6ed3575269a509c9c7d1c39f3a47cb8d9134b8e3 100644 (file)
@@ -4355,7 +4355,9 @@ aapcs_vfp_allocate (CUMULATIVE_ARGS *pcum, enum machine_mode mode,
     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;