m68k.h (MASK_RTD, [...]): Resurrect -mrtd option.

* config/m68k/m68k.h (MASK_RTD, TARGET_RTD, RETURN_POPS_ARGS):
	Resurrect -mrtd option.

From-SVN: r71658
This commit is contained in:
Bernardo Innocenti 2003-09-22 19:35:06 +02:00 committed by Bernardo Innocenti
parent 5463a4f35d
commit 6b475ad591
2 changed files with 28 additions and 2 deletions

View file

@ -1,3 +1,8 @@
2003-09-22 Bernardo Innocenti <bernie@develer.com>
* config/m68k/m68k.h (MASK_RTD, TARGET_RTD, RETURN_POPS_ARGS):
Resurrect -mrtd option.
2003-09-21 Andrew Pinski <pinskia@physics.uc.edu>
PR target/12281

View file

@ -201,6 +201,11 @@ extern int target_flags;
#define MASK_NO_STRICT_ALIGNMENT (1<<15)
#define TARGET_STRICT_ALIGNMENT (~target_flags & MASK_NO_STRICT_ALIGNMENT)
/* Compile using rtd insn calling sequence.
This will not work unless you use prototypes at least
for all functions that can take varying numbers of args. */
#define MASK_RTD (1<<16)
#define TARGET_RTD (target_flags & MASK_RTD)
/* Compile for a CPU32. A 68020 without bitfields is a good
heuristic for a CPU32. */
@ -306,6 +311,10 @@ extern int target_flags;
N_("Do not use unaligned memory references") }, \
{ "no-strict-align", MASK_NO_STRICT_ALIGNMENT, \
N_("Use unaligned memory references") }, \
{ "rtd", MASK_RTD, \
N_("Use different calling convention using 'rtd'") }, \
{ "nortd", - MASK_RTD, \
N_("Use normal calling convention") }, \
SUBTARGET_SWITCHES \
{ "", TARGET_DEFAULT, "" }}
/* TARGET_DEFAULT is defined in m68k-none.h, netbsd.h, etc. */
@ -790,9 +799,21 @@ enum reg_class {
or for a library call it is an identifier node for the subroutine name.
SIZE is the number of bytes of arguments passed on the stack.
On the m68k, the caller must always pop the args. */
On the 68000, the RTS insn cannot pop anything.
On the 68010, the RTD insn may be used to pop them if the number
of args is fixed, but if the number is variable then the caller
must pop them all. RTD can't be used for library calls now
because the library is compiled with the Unix compiler.
Use of RTD is a selectable option, since it is incompatible with
standard Unix calling sequences. If the option is not selected,
the caller must always pop the args. */
#define RETURN_POPS_ARGS(FUNDECL,FUNTYPE,SIZE) 0
#define RETURN_POPS_ARGS(FUNDECL,FUNTYPE,SIZE) \
((TARGET_RTD && (!(FUNDECL) || TREE_CODE (FUNDECL) != IDENTIFIER_NODE) \
&& (TYPE_ARG_TYPES (FUNTYPE) == 0 \
|| (TREE_VALUE (tree_last (TYPE_ARG_TYPES (FUNTYPE))) \
== void_type_node))) \
? (SIZE) : 0)
/* Define how to find the value returned by a function.
VALTYPE is the data type of the value (as a tree).