]> gcc.gnu.org Git - gcc.git/commitdiff
rs6000-protos.h (function_value): Protoize.
authorAldy Hernandez <aldyh@redhat.com>
Thu, 15 May 2003 20:01:10 +0000 (20:01 +0000)
committerAldy Hernandez <aldyh@gcc.gnu.org>
Thu, 15 May 2003 20:01:10 +0000 (20:01 +0000)
2003-05-15  Aldy Hernandez  <aldyh@redhat.com>

        * config/rs6000/rs6000-protos.h (function_value): Protoize.

        * config/rs6000/rs6000.h (FUNCTION_VALUE): Call function.

        * config/rs6000/rs6000.c (rs6000_function_value): New.

From-SVN: r66841

gcc/ChangeLog
gcc/config/rs6000/rs6000-protos.h
gcc/config/rs6000/rs6000.c
gcc/config/rs6000/rs6000.h

index 34752f14fec1ab57a26b5aaa25c5b38ba2649c6f..363ea14cfb4842896bb8af67da4a91d3f4584959 100644 (file)
@@ -1,3 +1,11 @@
+2003-05-15  Aldy Hernandez  <aldyh@redhat.com>
+
+        * config/rs6000/rs6000-protos.h (function_value): Protoize.
+
+        * config/rs6000/rs6000.h (FUNCTION_VALUE): Call function.
+
+        * config/rs6000/rs6000.c (rs6000_function_value): New.
+
 2003-05-15  Philip Blundell  <philb@gnu.org>
 
        * config/arm/arm.c (arm_is_xscale): Rename to arm_arch_xscale.
index 8ee39e21bc330373d2b03986274d6c216d653f44..da75516de376e234416b23e9ef3db05ad436c6de 100644 (file)
@@ -152,6 +152,7 @@ extern int function_arg_pass_by_reference PARAMS ((CUMULATIVE_ARGS *,
 extern void setup_incoming_varargs PARAMS ((CUMULATIVE_ARGS *,
                                            enum machine_mode, tree,
                                            int *, int));
+extern rtx rs6000_function_value (tree, tree);
 extern struct rtx_def *rs6000_va_arg PARAMS ((tree, tree));
 extern int function_ok_for_sibcall PARAMS ((tree));
 #ifdef ARGS_SIZE_RTX
index 965c3e1ad1ad89807b30202d258ce38dfcd759ae..e451f20c0eeda1f9356edee7f8be98bc707e1735 100644 (file)
@@ -14396,6 +14396,44 @@ rs6000_memory_move_cost (mode, class, in)
     return 4 + rs6000_register_move_cost (mode, class, GENERAL_REGS);
 }
 
+/* Define how to find the value returned by a function.
+   VALTYPE is the data type of the value (as a tree).
+   If the precise function being called is known, FUNC is its FUNCTION_DECL;
+   otherwise, FUNC is 0.
+
+   On the SPE, both FPs and vectors are returned in r3.
+
+   On RS/6000 an integer value is in r3 and a floating-point value is in
+   fp1, unless -msoft-float.  */
+
+rtx
+rs6000_function_value (tree valtype, tree func ATTRIBUTE_UNUSED)
+{
+  enum machine_mode mode;
+  unsigned int regno = GP_ARG_RETURN;
+
+  if ((INTEGRAL_TYPE_P (valtype)
+       && TYPE_PRECISION (valtype) < BITS_PER_WORD)
+      || POINTER_TYPE_P (valtype))
+    mode = word_mode;
+  else
+    mode = TYPE_MODE (valtype);
+
+  if (TREE_CODE (valtype) == REAL_TYPE)
+    {
+      if (TARGET_HARD_FLOAT && TARGET_FPRS)
+       regno = FP_ARG_RETURN;
+      else if (TARGET_SPE_ABI && !TARGET_FPRS)
+       regno = GP_ARG_RETURN;
+    }
+  else if (TARGET_ALTIVEC && TREE_CODE (valtype) == VECTOR_TYPE)
+    regno = ALTIVEC_ARG_RETURN;
+  else
+    regno = GP_ARG_RETURN;
+
+  return gen_rtx_REG (mode, regno);
+}
+
 /* Return true if TYPE is of type __ev64_opaque__.  */
 
 static bool
index d07eb6edb305018626451e9d9edfafc68c23ef1c..8cd28acb3746b0d7fd09301510c438eddae1402c 100644 (file)
@@ -1555,26 +1555,9 @@ typedef struct rs6000_stack {
 /* Define how to find the value returned by a function.
    VALTYPE is the data type of the value (as a tree).
    If the precise function being called is known, FUNC is its FUNCTION_DECL;
-   otherwise, FUNC is 0.
-
-   On the SPE, both FPs and vectors are returned in r3.
-
-   On RS/6000 an integer value is in r3 and a floating-point value is in
-   fp1, unless -msoft-float.  */
-
-#define FUNCTION_VALUE(VALTYPE, FUNC)                          \
-  gen_rtx_REG ((INTEGRAL_TYPE_P (VALTYPE)                      \
-               && TYPE_PRECISION (VALTYPE) < BITS_PER_WORD)    \
-              || POINTER_TYPE_P (VALTYPE)                      \
-              ? word_mode : TYPE_MODE (VALTYPE),               \
-              TREE_CODE (VALTYPE) == VECTOR_TYPE               \
-              && TARGET_ALTIVEC ? ALTIVEC_ARG_RETURN           \
-              : TREE_CODE (VALTYPE) == REAL_TYPE               \
-                && TARGET_SPE_ABI && !TARGET_FPRS              \
-              ? GP_ARG_RETURN                                  \
-              : TREE_CODE (VALTYPE) == REAL_TYPE               \
-                && TARGET_HARD_FLOAT && TARGET_FPRS            \
-               ? FP_ARG_RETURN : GP_ARG_RETURN)
+   otherwise, FUNC is 0.  */
+
+#define FUNCTION_VALUE(VALTYPE, FUNC) rs6000_function_value ((VALTYPE), (FUNC))
 
 /* Define how to find the value returned by a library function
    assuming the value has mode MODE.  */
This page took 0.105485 seconds and 5 git commands to generate.