I could have sworn I sent this patch out in mid-December, but I don't see it,
so I'm resending this now.

This patch fixes the problem that breaks some code on the SPE.  I have patches
for 4.8 and 4.9.  Roland says that it fixes the problem in 4.8.  In 4.9 there
are other unrelated problems that Roland is currently working on.

I tested these patches on powerpc linux, and I did not see a regression.  Are
these patches ok to check into both the 4.8 and 4.9 branches?

2013-12-12  Roland Stigge  <sti...@antcom.de>
            Michael Meissner  <meiss...@linux.vnet.ibm.com>

        * config/rs6000/rs6000.c (rs6000_legitimate_offset_address_p):
        Only check TFmode for SPE constants.  Don't check TImode or
        TDmode.

-- 
Michael Meissner, IBM
IBM, M/S 2506R, 550 King Street, Littleton, MA 01460-6245, USA
email: meiss...@linux.vnet.ibm.com, phone: +1 (978) 899-4797
Index: gcc/config/rs6000/rs6000.c
===================================================================
--- gcc/config/rs6000/rs6000.c  (revision 205902)
+++ gcc/config/rs6000/rs6000.c  (working copy)
@@ -5428,12 +5428,13 @@ rs6000_legitimate_offset_address_p (enum
       break;
 
     case TFmode:
-    case TDmode:
-    case TImode:
       if (TARGET_E500_DOUBLE)
        return (SPE_CONST_OFFSET_OK (offset)
                && SPE_CONST_OFFSET_OK (offset + 8));
+      /* fall through */
 
+    case TDmode:
+    case TImode:
       extra = 8;
       if (!worst_case)
        break;
Index: gcc/config/rs6000/rs6000.c
===================================================================
--- gcc/config/rs6000/rs6000.c  (revision 205896)
+++ gcc/config/rs6000/rs6000.c  (working copy)
@@ -6321,13 +6321,14 @@ rs6000_legitimate_offset_address_p (enum
       break;
 
     case TFmode:
-    case TDmode:
-    case TImode:
-    case PTImode:
       if (TARGET_E500_DOUBLE)
        return (SPE_CONST_OFFSET_OK (offset)
                && SPE_CONST_OFFSET_OK (offset + 8));
+      /* fall through */
 
+    case TDmode:
+    case TImode:
+    case PTImode:
       extra = 8;
       if (!worst_case)
        break;

Reply via email to