re PR target/56979 (ICE in output_operand: invalid operand for code 'P')
authorRichard Earnshaw <rearnsha@arm.com>
Thu, 8 Aug 2013 13:34:45 +0000 (13:34 +0000)
committerRichard Earnshaw <rearnsha@gcc.gnu.org>
Thu, 8 Aug 2013 13:34:45 +0000 (13:34 +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: r201598

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

index 4410a8c..5645867 100644 (file)
@@ -1,3 +1,10 @@
+2013-08-08  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-08  Bernd Edlinger  <bernd.edlinger@hotmail.de>
 
        PR target/58065
index 8c1dce9..f731bb6 100644 (file)
@@ -4544,7 +4544,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;