]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
m32r-protos.h (m32r_pass_by_reference): Declare.
authorDoug Evans <dje@sebabeach.org>
Fri, 13 Jun 2003 16:57:26 +0000 (16:57 +0000)
committerDoug Evans <devans@gcc.gnu.org>
Fri, 13 Jun 2003 16:57:26 +0000 (16:57 +0000)
* config/m32r/m32r-protos.h (m32r_pass_by_reference): Declare.
* config/m32r/m32r.c (m32r_pass_by_reference): New fn.
(m32r_va_arg): Use it.
* config/m32r/m32r.h (FUNCTION_ARG_PASS_BY_REFERENCE): Ditto.
(RETURN_IN_MEMORY): Ditto.

Co-Authored-By: Kazuhiro Inaoka <inaoka.kazuhiro@renesas.com>
From-SVN: r67906

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

index 8327e0f26ffae18f97673d475584ba889cf3d9d1..484152d6ce2e841803a7e9c2d09f217eec659155 100644 (file)
@@ -1,3 +1,12 @@
+2003-06-13  Doug Evans  <dje@sebabeach.org>
+           Kazuhiro Inaoka <inaoka.kazuhiro@renesas.com>
+
+       * config/m32r/m32r-protos.h (m32r_pass_by_reference): Declare.
+       * config/m32r/m32r.c (m32r_pass_by_reference): New fn.
+       (m32r_va_arg): Use it.
+       * config/m32r/m32r.h (FUNCTION_ARG_PASS_BY_REFERENCE): Ditto.
+       (RETURN_IN_MEMORY): Ditto.
+
 2003-06-13  Nathanael Nerode  <neroden@gcc.gnu.org>
 
        * c-typeck.c: Remove #if 0 clauses.
index ec549bada030fc9ea51ca0e6cfc0cadc1b6e4edf..103bff790bff104976c44a1e3acfdc1e0ee93e8b 100644 (file)
@@ -93,6 +93,7 @@ extern int    reg_or_zero_operand               PARAMS ((rtx, Mmode));
 
 #ifdef TREE_CODE
 extern struct rtx_def * m32r_va_arg            PARAMS ((tree, tree));
+extern int m32r_pass_by_reference              PARAMS ((tree));
 #endif /* TREE_CODE */
 #endif /* RTX_CODE */
 
index 4ea130f438fd33b64c3eb66fe27b56cb6b78daac..8d42306b1f8cdbad16784825aeee9875ebb790ff 100644 (file)
@@ -1002,6 +1002,21 @@ large_insn_p (op, mode)
   return get_attr_length (op) != 2;
 }
 
+/* Return non-zero if TYPE must be passed or returned in memory.
+   The m32r treats both directions the same so we handle both directions
+   in this function.  */
+
+int
+m32r_pass_by_reference (type)
+     tree type;
+{
+  int size = int_size_in_bytes (type);
+
+  if (size < 0 || size > 8)
+    return 1;
+
+  return 0;
+}
 \f
 /* Comparisons.  */
 
@@ -1425,7 +1440,7 @@ m32r_va_arg (valist, type)
   size = int_size_in_bytes (type);
   rsize = (size + UNITS_PER_WORD - 1) & -UNITS_PER_WORD;
 
-  if (size > 8)
+  if (m32r_pass_by_reference (type))
     {
       tree type_ptr, type_ptr_ptr;
 
index 36bd20643fb30549dc9e6fca0d31399fced6d383..13205ae84b39d0f29078d255e72a9aaebdc797b2 100644 (file)
@@ -1134,7 +1134,7 @@ M32R_STACK_ALIGN (current_function_outgoing_args_size)
    appropriate for passing a pointer to that type.  */
 /* All arguments greater than 8 bytes are passed this way.  */
 #define FUNCTION_ARG_PASS_BY_REFERENCE(CUM, MODE, TYPE, NAMED) \
-  ((TYPE) && int_size_in_bytes (TYPE) > 8)
+  ((TYPE) && m32r_pass_by_reference (TYPE))
 
 /* Update the data in CUM to advance over an argument
    of mode MODE and data type TYPE.
@@ -1210,8 +1210,7 @@ M32R_STACK_ALIGN (current_function_outgoing_args_size)
    to return the function value in memory, just as large structures are
    always returned.  Here TYPE will be a C expression of type `tree',
    representing the data type of the value.  */
-#define RETURN_IN_MEMORY(TYPE) \
-(int_size_in_bytes (TYPE) > 8)
+#define RETURN_IN_MEMORY(TYPE) m32r_pass_by_reference (TYPE)
 
 /* Tell GCC to use RETURN_IN_MEMORY.  */
 #define DEFAULT_PCC_STRUCT_RETURN 0