------- Comment #3 from dje at gcc dot gnu dot org  2006-07-14 19:11 -------
This is because the E500 DOUBLE support wasn't prepared for complex doubles.

Index: rs6000.c
===================================================================
--- rs6000.c    (revision 115431)
+++ rs6000.c    (working copy)
@@ -3638,8 +3638,13 @@
   if (FP_REGNO_P (regno))
     return (GET_MODE_SIZE (mode) + UNITS_PER_FP_WORD - 1) / UNITS_PER_FP_WORD;

-  if (TARGET_E500_DOUBLE && mode == DFmode)
-    return 1;
+  if (TARGET_E500_DOUBLE)
+    {
+      if (mode == DFmode)
+       return 1;
+      if (mode == DCmode)
+       return 2;
+    }

   if (SPE_SIMD_REGNO_P (regno) && TARGET_SPE && SPE_VECTOR_MODE (mode))
     return (GET_MODE_SIZE (mode) + UNITS_PER_SPE_WORD - 1) /
UNITS_PER_SPE_WORD;

I could make this cuter with tests for FLOAT_MODE_P, but I am worried about the
effect on SPE vector modes and there are not enough mode to warrant a case
table, so just use an explicit test.


-- 

dje at gcc dot gnu dot org changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |dje at gcc dot gnu dot org


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=24036

Reply via email to