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