* 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.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@67906
138bc75d-0d04-0410-961f-
82ee72b054a4
+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.
#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 */
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. */
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;
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.
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