re PR target/23847 (Darwin -mpowerpc64 complex ABI breakage)
authorFariborz Jahanian <fjahanian@apple.com>
Mon, 26 Sep 2005 19:12:30 +0000 (19:12 +0000)
committerFariborz Jahanian <fjahanian@gcc.gnu.org>
Mon, 26 Sep 2005 19:12:30 +0000 (19:12 +0000)
PR target/23847.
Oked by David Edelsohn.

From-SVN: r104655

gcc/ChangeLog
gcc/config/rs6000/rs6000.c

index 8499938c80b7b561b8272de70e7d2453c9f1634c..4d6dd1646d97794f2fcb829b9317698d60ea5760 100644 (file)
@@ -1,3 +1,9 @@
+2005-09-23  Fariborz Jahanian <fjahanian@apple.com>
+
+       PR target/23847
+        * config/rs6000/rs6000.c (rs6000_function_value): Parallel pattern
+        for __complex__ double in -mcpu=G5 mode.
+
 2005-09-26  Sebastian Pop  <pop@cri.ensmp.fr>
 
        PR tree-optimization/23942
index 04493f7d66041ac2a6e5a99c6f6804d8e3bfae98..7077b6610038a5bf2a22314b8602e2536fd8b704 100644 (file)
@@ -18786,7 +18786,26 @@ rs6000_function_value (tree valtype, tree func ATTRIBUTE_UNUSED)
                                                   GP_ARG_RETURN + 1),
                                      GEN_INT (4))));
     }
-
+  if (TARGET_32BIT && TARGET_POWERPC64 && TYPE_MODE (valtype) == DCmode)
+    {
+      return gen_rtx_PARALLEL (DCmode,
+       gen_rtvec (4,
+                  gen_rtx_EXPR_LIST (VOIDmode,
+                                     gen_rtx_REG (SImode, GP_ARG_RETURN),
+                                     const0_rtx),
+                  gen_rtx_EXPR_LIST (VOIDmode,
+                                     gen_rtx_REG (SImode,
+                                                  GP_ARG_RETURN + 1),
+                                     GEN_INT (4)),
+                  gen_rtx_EXPR_LIST (VOIDmode,
+                                     gen_rtx_REG (SImode,
+                                                  GP_ARG_RETURN + 2),
+                                     GEN_INT (8)),
+                  gen_rtx_EXPR_LIST (VOIDmode,
+                                     gen_rtx_REG (SImode,
+                                                  GP_ARG_RETURN + 3),
+                                     GEN_INT (12))));
+    }
   if ((INTEGRAL_TYPE_P (valtype)
        && TYPE_PRECISION (valtype) < BITS_PER_WORD)
       || POINTER_TYPE_P (valtype))