This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
[patch] m32r: Hookize some target macros.
- From: Kazu Hirata <kazu at cs dot umass dot edu>
- To: gcc-patches at gcc dot gnu dot org
- Cc: nickc at redhat dot com, inaoka dot kazuhiro at renesas dot com
- Date: Sun, 25 Jan 2004 00:50:29 -0500 (EST)
- Subject: [patch] m32r: Hookize some target macros.
Hi,
Attached is a patch to hookize some target macros.
Built cc1 of m32r-elf. OK to apply?
Kazu Hirata
2004-01-25 Kazu Hirata <kazu@cs.umass.edu>
* config/m32r/m32r-protos.h: Remove the prototype for
m32r_setup_incoming_varargs.
* config/m32r/m32r.c (TARGET_PROMOTE_PROTOTYPES): New.
(TARGET_STRUCT_VALUE_RTX): Likewise.
(TARGET_RETURN_IN_MEMORY): Likewise.
(TARGET_SETUP_INCOMING_VARARGS): Likewise.
(m32r_return_in_memory): New.
(m32r_setup_incoming_varargs): Make it static.
* config/m32r/m32r.h: Remove #undef of
ASM_OUTPUT_EXTERNAL_LIBCALL. Remove the commented-out
definitions of PROMOTE_FUNCTION_ARGS and
PROMOTE_FUNCTION_RETURN.
(PROMOTE_PROTOTYPES): Remove.
(RETURN_IN_MEMORY): Likewise.
(STRUCT_VALUE): Likewise.
Index: m32r-protos.h
===================================================================
RCS file: /cvs/gcc/gcc/gcc/config/m32r/m32r-protos.h,v
retrieving revision 1.21
diff -u -r1.21 m32r-protos.h
--- m32r-protos.h 9 Jan 2004 15:33:46 -0000 1.21
+++ m32r-protos.h 25 Jan 2004 05:47:08 -0000
@@ -36,7 +36,6 @@
extern enum m32r_function_type m32r_compute_function_type (tree);
#ifdef HAVE_MACHINE_MODES
-extern void m32r_setup_incoming_varargs (CUMULATIVE_ARGS *, Mmode, tree, int *, int);
extern int function_arg_partial_nregs (CUMULATIVE_ARGS *, Mmode, tree, int);
#endif
#endif /* TREE_CODE */
Index: m32r.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/config/m32r/m32r.c,v
retrieving revision 1.80
diff -u -r1.80 m32r.c
--- m32r.c 9 Jan 2004 17:04:47 -0000 1.80
+++ m32r.c 25 Jan 2004 05:47:09 -0000
@@ -101,6 +101,9 @@
static void m32r_encode_section_info (tree, rtx, int);
static bool m32r_in_small_data_p (tree);
+static bool m32r_return_in_memory (tree, tree);
+static void m32r_setup_incoming_varargs (CUMULATIVE_ARGS *, enum machine_mode,
+ tree, int *, int);
static void init_idents (void);
static bool m32r_rtx_costs (rtx, int, int, int *);
@@ -144,6 +147,17 @@
#undef TARGET_ADDRESS_COST
#define TARGET_ADDRESS_COST hook_int_rtx_0
+#undef TARGET_PROMOTE_PROTOTYPES
+#define TARGET_PROMOTE_PROTOTYPES hook_bool_tree_true
+
+#undef TARGET_STRUCT_VALUE_RTX
+#define TARGET_STRUCT_VALUE_RTX hook_rtx_tree_int_null
+#undef TARGET_RETURN_IN_MEMORY
+#define TARGET_RETURN_IN_MEMORY m32r_return_in_memory
+
+#undef TARGET_SETUP_INCOMING_VARARGS
+#define TARGET_SETUP_INCOMING_VARARGS m32r_setup_incoming_varargs
+
struct gcc_target targetm = TARGET_INITIALIZER;
/* Called by OVERRIDE_OPTIONS to initialize various things. */
@@ -1348,6 +1362,12 @@
return ret;
}
+static bool
+m32r_return_in_memory (tree type, tree fntype ATTRIBUTE_UNUSED)
+{
+ return m32r_pass_by_reference (type);
+}
+
/* Do any needed setup for a variadic function. For the M32R, we must
create a register parameter block, and then copy any anonymous arguments
in registers to memory.
@@ -1355,7 +1375,7 @@
CUM has not been updated for the last named argument which has type TYPE
and mode MODE, and we rely on this fact. */
-void
+static void
m32r_setup_incoming_varargs (CUMULATIVE_ARGS *cum, enum machine_mode mode,
tree type, int *pretend_size, int no_rtl)
{
Index: m32r.h
===================================================================
RCS file: /cvs/gcc/gcc/gcc/config/m32r/m32r.h,v
retrieving revision 1.101
diff -u -r1.101 m32r.h
--- m32r.h 21 Jan 2004 12:16:07 -0000 1.101
+++ m32r.h 25 Jan 2004 05:47:11 -0000
@@ -30,7 +30,6 @@
#undef PTRDIFF_TYPE
#undef WCHAR_TYPE
#undef WCHAR_TYPE_SIZE
-#undef ASM_OUTPUT_EXTERNAL_LIBCALL
#undef TARGET_VERSION
#undef CPP_SPEC
#undef ASM_SPEC
@@ -500,15 +499,6 @@
(MODE) = SImode; \
}
-/* Define this macro if the promotion described by `PROMOTE_MODE'
- should also be done for outgoing function arguments. */
-/*#define PROMOTE_FUNCTION_ARGS*/
-
-/* Likewise, if the function return value is promoted.
- If defined, FUNCTION_VALUE must perform the same promotions done by
- PROMOTE_MODE. */
-/*#define PROMOTE_FUNCTION_RETURN*/
-
/* Allocation boundary (in *bits*) for storing arguments in argument list. */
#define PARM_BOUNDARY 32
@@ -1023,9 +1013,6 @@
/* Function argument passing. */
-/* When a prototype says `char' or `short', really pass an `int'. */
-#define PROMOTE_PROTOTYPES 1
-
/* If defined, the maximum amount of space required for outgoing
arguments will be computed and placed into the variable
`current_function_outgoing_args_size'. No space will be pushed
@@ -1150,36 +1137,6 @@
? PARM_BOUNDARY : 2 * PARM_BOUNDARY)
#endif
-/* This macro offers an alternative
- to using `__builtin_saveregs' and defining the macro
- `EXPAND_BUILTIN_SAVEREGS'. Use it to store the anonymous register
- arguments into the stack so that all the arguments appear to have
- been passed consecutively on the stack. Once this is done, you
- can use the standard implementation of varargs that works for
- machines that pass all their arguments on the stack.
-
- The argument ARGS_SO_FAR is the `CUMULATIVE_ARGS' data structure,
- containing the values that obtain after processing of the named
- arguments. The arguments MODE and TYPE describe the last named
- argument--its machine mode and its data type as a tree node.
-
- The macro implementation should do two things: first, push onto the
- stack all the argument registers *not* used for the named
- arguments, and second, store the size of the data thus pushed into
- the `int'-valued variable whose name is supplied as the argument
- PRETEND_SIZE. The value that you store here will serve as
- additional offset for setting up the stack frame.
-
- If the argument NO_RTL is nonzero, it means that the
- arguments of the function are being analyzed for the second time.
- This happens for an inline function, which is not actually
- compiled until the end of the source file. The macro
- `SETUP_INCOMING_VARARGS' should not generate any instructions in
- this case. */
-
-#define SETUP_INCOMING_VARARGS(ARGS_SO_FAR, MODE, TYPE, PRETEND_SIZE, NO_RTL) \
- m32r_setup_incoming_varargs (& ARGS_SO_FAR, MODE, TYPE, & PRETEND_SIZE, NO_RTL)
-
/* Implement `va_arg'. */
#define EXPAND_BUILTIN_VA_ARG(valist, type) \
m32r_va_arg (valist, type)
@@ -1201,19 +1158,8 @@
/* ??? What about r1 in DI/DF values. */
#define FUNCTION_VALUE_REGNO_P(N) ((N) == 0)
-/* A C expression which can inhibit the returning of certain function
- values in registers, based on the type of value. A nonzero value says
- 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) m32r_pass_by_reference (TYPE)
-
/* Tell GCC to use RETURN_IN_MEMORY. */
#define DEFAULT_PCC_STRUCT_RETURN 0
-
-/* Register in which address to store a structure value
- is passed to a function, or 0 to use `invisible' first argument. */
-#define STRUCT_VALUE 0
/* Function entry and exit. */