------- 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