diff options
author | froydnj <froydnj@138bc75d-0d04-0410-961f-82ee72b054a4> | 2010-06-29 12:18:36 +0000 |
---|---|---|
committer | froydnj <froydnj@138bc75d-0d04-0410-961f-82ee72b054a4> | 2010-06-29 12:18:36 +0000 |
commit | f5bc28dae417e7cd7eddaa71046445d359481467 (patch) | |
tree | 2ea3f022499b2b52e578f958001d178d596536d8 /gcc/config | |
parent | 2f25e4ca07e6763cd89b62f7c54e6c962580c9f0 (diff) | |
download | gcc-f5bc28dae417e7cd7eddaa71046445d359481467.tar.gz |
* reginfo.c (init_reg_sets_1): Adjust comments.
* combine-stack-adj.c (rest_of_handle_stack_adjustments): Likewise.
* calls.c (prepare_call_address): Likewise.
(emit_call_1): Use targetm.calls.return_pops_args.
(expand_call): Likewise.
* function.c (assign_parms): Likewise.
* system.h (RETURN_POPS_ARGS): Add to #pragma poison list.
* target.h (struct gcc_target) [struct calls]: Add
return_pops_args field.
* targhooks.h (default_return_pops_args): Declare.
* targhooks.c (default_return_pops_args): Define.
* target-def.h (TARGET_RETURN_POPS_ARGS): Define.
(TARGET_CALLS): Add TARGET_RETURN_POPS_ARGS.
* doc/tm.texi (RETURN_POPS_ARGS): Rename to...
(TARGET_RETURN_POPS_ARGS): ...this. Use deftypefn. Adjust
documentation.
* config/alpha/alpha.h (RETURN_POPS_ARGS): Delete.
* config/arc/arc.h (RETURN_POPS_ARGS): Likewise.
* config/arm/arm.h (RETURN_POPS_ARGS): Likewise.
* config/avr/avr.h (RETURN_POPS_ARGS): Likewise.
* config/bfin/bfin.h (RETURN_POPS_ARGS): Likewise.
* config/cris/cris.h (RETURN_POPS_ARGS): Likewise.
* config/crx/crx.h (RETURN_POPS_ARGS): Likewise.
* config/fr30/fr30.h (RETURN_POPS_ARGS): Likewise.
* config/frv/frv.h (RETURN_POPS_ARGS): Likewise.
* config/h8300/h8300.h (RETURN_POPS_ARGS): Likewise.
* config/ia64/ia64.h (RETURN_POPS_ARGS): Likewise.
* config/iq2000/iq2000.h (RETURN_POPS_ARGS): Likewise.
* config/lm32/lm32.h (RETURN_POPS_ARGS): Likewise.
* config/m32c/m32c.h (RETURN_POPS_ARGS): Likewise.
* config/m32r/m32r.h (RETURN_POPS_ARGS): Likewise.
* config/m68hc11/m68hc11.h (RETURN_POPS_ARGS): Likewise.
* config/mcore/mcore.h (RETURN_POPS_ARGS): Likewise.
* config/mep/mep.h (RETURN_POPS_ARGS): Likewise.
* config/mips/mips.h (RETURN_POPS_ARGS): Likewise.
* config/mmix/mmix.h (RETURN_POPS_ARGS): Likewise.
* config/mn10300/mn10300.h (RETURN_POPS_ARGS): Likewise.
* config/moxie/moxie.h (RETURN_POPS_ARGS): Likewise.
* config/pa/pa.h (RETURN_POPS_ARGS): Likewise.
* config/pdp11/pdp11.h (RETURN_POPS_ARGS): Likewise.
* config/picochip/picochip.h (RETURN_POPS_ARGS): Likewise.
* config/rs6000/rs6000.h (RETURN_POPS_ARGS): Likewise.
* config/rx/rx.h (RETURN_POPS_ARGS): Likewise.
* config/s390/s390.h (RETURN_POPS_ARGS): Likewise.
* config/score/score.h (RETURN_POPS_ARGS): Likewise.
* config/sh/sh.h (RETURN_POPS_ARGS): Likewise.
* config/sparc/sparc.h (RETURN_POPS_ARGS): Likewise.
* config/spu/spu.h (RETURN_POPS_ARGS): Likewise.
* config/stormy16/stormy16.h (RETURN_POPS_ARGS): Likewise.
* config/v850/v850.h (RETURN_POPS_ARGS): Likewise.
* config/xtensa/xtensa.h (RETURN_POPS_ARGS): Likewise.
* config/i386/i386-protos.h (ix86_return_pops_args): Delete.
* config/i386/i386.h (RETURN_POPS_ARGS): Delete.
* config/i386/i386.c (ix86_return_pops_args): Make static.
Constify arguments.
(TARGET_RETURN_POPS_ARGS): Define.
* config/m68k/m68k.h (RETURN_POPS_ARGS): Move to...
* config/m68k/m68k.c (m68k_return_pops_args): ...here. New function.
(TARGET_RETURN_POPS_ARGS): Define.
* config/vax/vax.h (RETURN_POPS_ARGS): Move to...
* config/vax/vax.c (vax_return_pops_args): ...here. New function.
(TARGET_RETURN_POPS_ARGS): Define.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@161528 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/config')
42 files changed, 46 insertions, 292 deletions
diff --git a/gcc/config/alpha/alpha.h b/gcc/config/alpha/alpha.h index 6235d9ff90a..c8590b9c782 100644 --- a/gcc/config/alpha/alpha.h +++ b/gcc/config/alpha/alpha.h @@ -703,15 +703,6 @@ extern int alpha_memory_latency; in a register. */ /* #define REG_PARM_STACK_SPACE */ -/* Value is the number of bytes of arguments automatically - popped when returning from a subroutine call. - FUNDECL is the declaration node of the function (as a tree), - FUNTYPE is the data type of the function (as a tree), - 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. */ - -#define RETURN_POPS_ARGS(FUNDECL,FUNTYPE,SIZE) 0 - /* 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; diff --git a/gcc/config/arc/arc.h b/gcc/config/arc/arc.h index 5127a123e31..9a4e360504b 100644 --- a/gcc/config/arc/arc.h +++ b/gcc/config/arc/arc.h @@ -530,14 +530,6 @@ extern enum reg_class arc_regno_reg_class[FIRST_PSEUDO_REGISTER]; increase the stack frame size by this amount. */ #define ACCUMULATE_OUTGOING_ARGS 1 -/* Value is the number of bytes of arguments automatically - popped when returning from a subroutine call. - FUNDECL is the declaration node of the function (as a tree), - FUNTYPE is the data type of the function (as a tree), - 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. */ -#define RETURN_POPS_ARGS(DECL, FUNTYPE, SIZE) 0 - /* Define a data type for recording info about an argument list during the scan of that argument list. This data type should hold all necessary information about the function itself diff --git a/gcc/config/arm/arm.h b/gcc/config/arm/arm.h index 9066bbefb61..fcd1ef3d2eb 100644 --- a/gcc/config/arm/arm.h +++ b/gcc/config/arm/arm.h @@ -1498,17 +1498,6 @@ do { \ /* Offset of first parameter from the argument pointer register value. */ #define FIRST_PARM_OFFSET(FNDECL) (TARGET_ARM ? 4 : 0) -/* Value is the number of byte of arguments automatically - popped when returning from a subroutine call. - FUNDECL is the declaration node of the function (as a tree), - FUNTYPE is the data type of the function (as a tree), - 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 ARM, the caller does not pop any of its arguments that were passed - on the stack. */ -#define RETURN_POPS_ARGS(FUNDECL, FUNTYPE, SIZE) 0 - /* Define how to find the value returned by a library function assuming the value has mode MODE. */ #define LIBCALL_VALUE(MODE) \ diff --git a/gcc/config/avr/avr.h b/gcc/config/avr/avr.h index 398b412dd91..32ff27eedf4 100644 --- a/gcc/config/avr/avr.h +++ b/gcc/config/avr/avr.h @@ -376,8 +376,6 @@ enum reg_class { for POST_DEC targets (PR27386). */ /*#define PUSH_ROUNDING(NPUSHED) (NPUSHED)*/ -#define RETURN_POPS_ARGS(FUNDECL, FUNTYPE, STACK_SIZE) 0 - #define FUNCTION_ARG(CUM, MODE, TYPE, NAMED) (function_arg (&(CUM), MODE, TYPE, NAMED)) typedef struct avr_args { diff --git a/gcc/config/bfin/bfin.h b/gcc/config/bfin/bfin.h index a1bd556003e..367cd96dbc8 100644 --- a/gcc/config/bfin/bfin.h +++ b/gcc/config/bfin/bfin.h @@ -871,8 +871,6 @@ typedef struct { #define FUNCTION_ARG_ADVANCE(CUM, MODE, TYPE, NAMED) \ (function_arg_advance (&CUM, MODE, TYPE, NAMED)) -#define RETURN_POPS_ARGS(FDECL, FUNTYPE, STKSIZE) 0 - /* 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; diff --git a/gcc/config/cris/cris.h b/gcc/config/cris/cris.h index ae2bfee4757..4c685489a8c 100644 --- a/gcc/config/cris/cris.h +++ b/gcc/config/cris/cris.h @@ -859,8 +859,6 @@ enum reg_class #define ACCUMULATE_OUTGOING_ARGS 1 -#define RETURN_POPS_ARGS(FUNDECL, FUNTYPE, STACKSIZE) 0 - /* Node: Register Arguments */ diff --git a/gcc/config/crx/crx.h b/gcc/config/crx/crx.h index 1d5cb87af3e..a6260f48aa2 100644 --- a/gcc/config/crx/crx.h +++ b/gcc/config/crx/crx.h @@ -313,8 +313,6 @@ enum reg_class #define PUSH_ROUNDING(BYTES) (((BYTES) + 3) & ~3) -#define RETURN_POPS_ARGS(FNDECL, FUNTYPE, SIZE) 0 - #define FUNCTION_ARG(CUM, MODE, TYPE, NAMED) \ ((rtx) crx_function_arg(&(CUM), (MODE), (TYPE), (NAMED))) diff --git a/gcc/config/fr30/fr30.h b/gcc/config/fr30/fr30.h index 5e6237895b5..ed675b16e6a 100644 --- a/gcc/config/fr30/fr30.h +++ b/gcc/config/fr30/fr30.h @@ -568,41 +568,6 @@ enum reg_class proper. */ #define ACCUMULATE_OUTGOING_ARGS 1 -/* A C expression that should indicate the number of bytes of its own arguments - that a function pops on returning, or 0 if the function pops no arguments - and the caller must therefore pop them all after the function returns. - - FUNDECL is a C variable whose value is a tree node that describes the - function in question. Normally it is a node of type `FUNCTION_DECL' that - describes the declaration of the function. From this it is possible to - obtain the DECL_ATTRIBUTES of the function. - - FUNTYPE is a C variable whose value is a tree node that describes the - function in question. Normally it is a node of type `FUNCTION_TYPE' that - describes the data type of the function. From this it is possible to obtain - the data types of the value and arguments (if known). - - When a call to a library function is being considered, FUNTYPE will contain - an identifier node for the library function. Thus, if you need to - distinguish among various library functions, you can do so by their names. - Note that "library function" in this context means a function used to - perform arithmetic, whose name is known specially in the compiler and was - not mentioned in the C code being compiled. - - STACK-SIZE is the number of bytes of arguments passed on the stack. If a - variable number of bytes is passed, it is zero, and argument popping will - always be the responsibility of the calling function. - - On the VAX, all functions always pop their arguments, so the definition of - this macro is STACK-SIZE. On the 68000, using the standard calling - convention, no functions pop their arguments, so the value of the macro is - always 0 in this case. But an alternative calling convention is available - in which functions that take a fixed number of arguments pop them but other - functions (such as `printf') pop nothing (the caller pops all). When this - convention is in use, FUNTYPE is examined to determine whether a function - takes a fixed number of arguments. */ -#define RETURN_POPS_ARGS(FUNDECL, FUNTYPE, STACK_SIZE) 0 - /*}}}*/ /*{{{ Function Arguments in Registers. */ diff --git a/gcc/config/frv/frv.h b/gcc/config/frv/frv.h index 1bf8b6bb080..56db4e4a21e 100644 --- a/gcc/config/frv/frv.h +++ b/gcc/config/frv/frv.h @@ -1614,41 +1614,6 @@ typedef struct frv_stack { proper. */ #define ACCUMULATE_OUTGOING_ARGS 1 -/* A C expression that should indicate the number of bytes of its own arguments - that a function pops on returning, or 0 if the function pops no arguments - and the caller must therefore pop them all after the function returns. - - FUNDECL is a C variable whose value is a tree node that describes the - function in question. Normally it is a node of type `FUNCTION_DECL' that - describes the declaration of the function. From this it is possible to - obtain the DECL_ATTRIBUTES of the function. - - FUNTYPE is a C variable whose value is a tree node that describes the - function in question. Normally it is a node of type `FUNCTION_TYPE' that - describes the data type of the function. From this it is possible to obtain - the data types of the value and arguments (if known). - - When a call to a library function is being considered, FUNTYPE will contain - an identifier node for the library function. Thus, if you need to - distinguish among various library functions, you can do so by their names. - Note that "library function" in this context means a function used to - perform arithmetic, whose name is known specially in the compiler and was - not mentioned in the C code being compiled. - - STACK-SIZE is the number of bytes of arguments passed on the stack. If a - variable number of bytes is passed, it is zero, and argument popping will - always be the responsibility of the calling function. - - On the VAX, all functions always pop their arguments, so the definition of - this macro is STACK-SIZE. On the 68000, using the standard calling - convention, no functions pop their arguments, so the value of the macro is - always 0 in this case. But an alternative calling convention is available - in which functions that take a fixed number of arguments pop them but other - functions (such as `printf') pop nothing (the caller pops all). When this - convention is in use, FUNTYPE is examined to determine whether a function - takes a fixed number of arguments. */ -#define RETURN_POPS_ARGS(FUNDECL, FUNTYPE, STACK_SIZE) 0 - /* The number of register assigned to holding function arguments. */ diff --git a/gcc/config/h8300/h8300.h b/gcc/config/h8300/h8300.h index 1ce1585544e..4e0a3b6728e 100644 --- a/gcc/config/h8300/h8300.h +++ b/gcc/config/h8300/h8300.h @@ -536,17 +536,6 @@ enum reg_class { #define FIRST_PARM_OFFSET(FNDECL) 0 -/* Value is the number of bytes of arguments automatically - popped when returning from a subroutine call. - FUNDECL is the declaration node of the function (as a tree), - FUNTYPE is the data type of the function (as a tree), - 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 H8 the return does not pop anything. */ - -#define RETURN_POPS_ARGS(FUNDECL, FUNTYPE, SIZE) 0 - /* Definitions for register eliminations. This is an array of structures. Each structure initializes one pair diff --git a/gcc/config/i386/i386-protos.h b/gcc/config/i386/i386-protos.h index 308f9eef5e8..f3facb3598f 100644 --- a/gcc/config/i386/i386-protos.h +++ b/gcc/config/i386/i386-protos.h @@ -188,8 +188,6 @@ extern void function_arg_advance (CUMULATIVE_ARGS *, enum machine_mode, #endif /* RTX_CODE */ #ifdef TREE_CODE -extern int ix86_return_pops_args (tree, tree, int); - extern int ix86_data_alignment (tree, int); extern unsigned int ix86_local_alignment (tree, enum machine_mode, unsigned int); diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c index bd1cc05cfbd..39308db4332 100644 --- a/gcc/config/i386/i386.c +++ b/gcc/config/i386/i386.c @@ -4865,7 +4865,7 @@ ix86_eax_live_at_start_p (void) The attribute stdcall is equivalent to RTD on a per module basis. */ -int +static int ix86_return_pops_args (tree fundecl, tree funtype, int size) { int rtd; @@ -30888,6 +30888,8 @@ ix86_enum_va_list (int idx, const char **pname, tree *ptree) #define TARGET_STATIC_CHAIN ix86_static_chain #undef TARGET_TRAMPOLINE_INIT #define TARGET_TRAMPOLINE_INIT ix86_trampoline_init +#undef TARGET_RETURN_POPS_ARGS +#define TARGET_RETURN_POPS_ARGS ix86_return_pops_args #undef TARGET_GIMPLIFY_VA_ARG_EXPR #define TARGET_GIMPLIFY_VA_ARG_EXPR ix86_gimplify_va_arg diff --git a/gcc/config/i386/i386.h b/gcc/config/i386/i386.h index 67f1f60f3a1..05adfc5894e 100644 --- a/gcc/config/i386/i386.h +++ b/gcc/config/i386/i386.h @@ -1542,26 +1542,6 @@ enum reg_class #define OUTGOING_REG_PARM_STACK_SPACE(FNTYPE) \ (ix86_function_type_abi (FNTYPE) == MS_ABI) -/* Value is the number of bytes of arguments automatically - popped when returning from a subroutine call. - FUNDECL is the declaration node of the function (as a tree), - FUNTYPE is the data type of the function (as a tree), - 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 80386, 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. - - The attribute stdcall is equivalent to RTD on a per module basis. */ - -#define RETURN_POPS_ARGS(FUNDECL, FUNTYPE, SIZE) \ - ix86_return_pops_args ((FUNDECL), (FUNTYPE), (SIZE)) - /* Define how to find the value returned by a library function assuming the value has mode MODE. */ diff --git a/gcc/config/ia64/ia64.h b/gcc/config/ia64/ia64.h index bf24f73f04e..d3821f6c6f4 100644 --- a/gcc/config/ia64/ia64.h +++ b/gcc/config/ia64/ia64.h @@ -1042,12 +1042,6 @@ enum reg_class #define ACCUMULATE_OUTGOING_ARGS 1 -/* A C expression that should indicate the number of bytes of its own arguments - that a function pops on returning, or 0 if the function pops no arguments - and the caller must therefore pop them all after the function returns. */ - -#define RETURN_POPS_ARGS(FUNDECL, FUNTYPE, STACK_SIZE) 0 - /* Function Arguments in Registers */ diff --git a/gcc/config/iq2000/iq2000.h b/gcc/config/iq2000/iq2000.h index 53a6b5cad04..07d4c2d864b 100644 --- a/gcc/config/iq2000/iq2000.h +++ b/gcc/config/iq2000/iq2000.h @@ -365,8 +365,6 @@ enum reg_class #define OUTGOING_REG_PARM_STACK_SPACE(FNTYPE) 1 -#define RETURN_POPS_ARGS(FUNDECL,FUNTYPE,SIZE) 0 - /* Function Arguments in Registers. */ diff --git a/gcc/config/lm32/lm32.h b/gcc/config/lm32/lm32.h index 3a814576722..0bf37455627 100644 --- a/gcc/config/lm32/lm32.h +++ b/gcc/config/lm32/lm32.h @@ -273,8 +273,6 @@ enum reg_class #define ACCUMULATE_OUTGOING_ARGS 1 -#define RETURN_POPS_ARGS(DECL, FUNTYPE, SIZE) 0 - /*--------------------------------*/ /* Passing Arguments in Registers */ /*--------------------------------*/ diff --git a/gcc/config/m32c/m32c.h b/gcc/config/m32c/m32c.h index a98005c78c1..8f7b720c696 100644 --- a/gcc/config/m32c/m32c.h +++ b/gcc/config/m32c/m32c.h @@ -503,7 +503,6 @@ enum reg_class #define PUSH_ARGS 1 #define PUSH_ROUNDING(N) m32c_push_rounding (N) -#define RETURN_POPS_ARGS(D,T,S) 0 #define CALL_POPS_ARGS(C) 0 /* Passing Arguments in Registers */ diff --git a/gcc/config/m32r/m32r.h b/gcc/config/m32r/m32r.h index 28d06a4b23c..91d055bcb5b 100644 --- a/gcc/config/m32r/m32r.h +++ b/gcc/config/m32r/m32r.h @@ -823,14 +823,6 @@ extern enum reg_class m32r_regno_reg_class[FIRST_PSEUDO_REGISTER]; increase the stack frame size by this amount. */ #define ACCUMULATE_OUTGOING_ARGS 1 -/* Value is the number of bytes of arguments automatically - popped when returning from a subroutine call. - FUNDECL is the declaration node of the function (as a tree), - FUNTYPE is the data type of the function (as a tree), - 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. */ -#define RETURN_POPS_ARGS(DECL, FUNTYPE, SIZE) 0 - /* Define a data type for recording info about an argument list during the scan of that argument list. This data type should hold all necessary information about the function itself diff --git a/gcc/config/m68hc11/m68hc11.h b/gcc/config/m68hc11/m68hc11.h index aef48a6e894..2ea80a76396 100644 --- a/gcc/config/m68hc11/m68hc11.h +++ b/gcc/config/m68hc11/m68hc11.h @@ -896,15 +896,6 @@ extern enum reg_class m68hc11_tmp_regs_class; stack pointer really advances by. No rounding or alignment needed for MC6811. */ #define PUSH_ROUNDING(BYTES) (BYTES) - -/* Value is 1 if returning from a function call automatically pops the - arguments described by the number-of-args field in the call. FUNTYPE is - the data type of the function (as a tree), or for a library call it is - an identifier node for the subroutine name. - - The standard MC6811 call, with arg count word, includes popping the - args as part of the call template. */ -#define RETURN_POPS_ARGS(FUNDECL,FUNTYPE,SIZE) 0 /* Passing Arguments in Registers. */ diff --git a/gcc/config/m68k/m68k.c b/gcc/config/m68k/m68k.c index 0ca5cd1d12a..529266ca23f 100644 --- a/gcc/config/m68k/m68k.c +++ b/gcc/config/m68k/m68k.c @@ -153,6 +153,7 @@ static bool m68k_return_in_memory (const_tree, const_tree); #endif static void m68k_output_dwarf_dtprel (FILE *, int, rtx) ATTRIBUTE_UNUSED; static void m68k_trampoline_init (rtx, tree, rtx); +static int m68k_return_pops_args (tree, tree, int); static rtx m68k_delegitimize_address (rtx); @@ -271,6 +272,9 @@ const char *m68k_library_id_string = "_current_shared_library_a5_offset_"; #undef TARGET_TRAMPOLINE_INIT #define TARGET_TRAMPOLINE_INIT m68k_trampoline_init +#undef TARGET_RETURN_POPS_ARGS +#define TARGET_RETURN_POPS_ARGS m68k_return_pops_args + #undef TARGET_DELEGITIMIZE_ADDRESS #define TARGET_DELEGITIMIZE_ADDRESS m68k_delegitimize_address @@ -6520,4 +6524,25 @@ m68k_trampoline_init (rtx m_tramp, tree fndecl, rtx chain_value) FINALIZE_TRAMPOLINE (XEXP (m_tramp, 0)); } +/* 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. */ + +static int +m68k_return_pops_args (tree fundecl, tree funtype, int size) +{ + return ((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); +} + #include "gt-m68k.h" diff --git a/gcc/config/m68k/m68k.h b/gcc/config/m68k/m68k.h index 5787e8aa1fd..ac478619f73 100644 --- a/gcc/config/m68k/m68k.h +++ b/gcc/config/m68k/m68k.h @@ -534,21 +534,6 @@ extern enum reg_class regno_reg_class[]; #define FIRST_PARM_OFFSET(FNDECL) 8 -/* 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) \ - ((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) - /* On the m68k the return value defaults to D0. */ #define FUNCTION_VALUE(VALTYPE, FUNC) \ gen_rtx_REG (TYPE_MODE (VALTYPE), D0_REG) diff --git a/gcc/config/mcore/mcore.h b/gcc/config/mcore/mcore.h index 4f0ef1d7d6b..7421d5dbb85 100644 --- a/gcc/config/mcore/mcore.h +++ b/gcc/config/mcore/mcore.h @@ -540,16 +540,6 @@ extern const enum reg_class reg_class_from_letter[]; /* Offset of first parameter from the argument pointer register value. */ #define FIRST_PARM_OFFSET(FNDECL) 0 -/* Value is the number of byte of arguments automatically - popped when returning from a subroutine call. - FUNTYPE is the data type of the function (as a tree), - 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 MCore, the callee does not pop any of its arguments that were passed - on the stack. */ -#define RETURN_POPS_ARGS(FUNDECL,FUNTYPE,SIZE) 0 - /* 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; diff --git a/gcc/config/mep/mep.h b/gcc/config/mep/mep.h index 9d286e33b94..d3af0734951 100644 --- a/gcc/config/mep/mep.h +++ b/gcc/config/mep/mep.h @@ -503,8 +503,6 @@ extern unsigned int mep_selected_isa; #define ACCUMULATE_OUTGOING_ARGS 1 -#define RETURN_POPS_ARGS(FUNDECL, FUNTYPE, STACK_SIZE) 0 - /* The ABI is thus: Arguments are in $1, $2, $3, $4, stack. Arguments diff --git a/gcc/config/mips/mips.h b/gcc/config/mips/mips.h index 4026bd73714..ea79eba2550 100644 --- a/gcc/config/mips/mips.h +++ b/gcc/config/mips/mips.h @@ -2162,8 +2162,6 @@ enum reg_class #define STACK_BOUNDARY (TARGET_NEWABI ? 128 : 64) -#define RETURN_POPS_ARGS(FUNDECL,FUNTYPE,SIZE) 0 - /* Symbolic macros for the registers used to return integer and floating point values. */ diff --git a/gcc/config/mmix/mmix.h b/gcc/config/mmix/mmix.h index 2886443c66d..48551028d5b 100644 --- a/gcc/config/mmix/mmix.h +++ b/gcc/config/mmix/mmix.h @@ -586,8 +586,6 @@ enum reg_class #define ACCUMULATE_OUTGOING_ARGS 1 -#define RETURN_POPS_ARGS(FUNDECL, FUNTYPE, STACKSIZE) 0 - /* Node: Register Arguments */ #define FUNCTION_ARG(CUM, MODE, TYPE, NAMED) \ diff --git a/gcc/config/mn10300/mn10300.h b/gcc/config/mn10300/mn10300.h index 12e78612014..1700f1a25be 100644 --- a/gcc/config/mn10300/mn10300.h +++ b/gcc/config/mn10300/mn10300.h @@ -492,15 +492,6 @@ enum reg_class { them whenever possible. */ #define CAN_DEBUG_WITHOUT_FP -/* Value is the number of bytes of arguments automatically - popped when returning from a subroutine call. - FUNDECL is the declaration node of the function (as a tree), - FUNTYPE is the data type of the function (as a tree), - 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. */ - -#define RETURN_POPS_ARGS(FUNDECL,FUNTYPE,SIZE) 0 - /* We use d0/d1 for passing parameters, so allocate 8 bytes of space for a register flushback area. */ #define REG_PARM_STACK_SPACE(DECL) 8 diff --git a/gcc/config/moxie/moxie.h b/gcc/config/moxie/moxie.h index 266a244c570..0a53b6b7216 100644 --- a/gcc/config/moxie/moxie.h +++ b/gcc/config/moxie/moxie.h @@ -453,8 +453,6 @@ enum reg_class /* All load operations zero extend. */ #define LOAD_EXTEND_OP(MEM) ZERO_EXTEND -#define RETURN_POPS_ARGS(FUNDECL, FUNTYPE, STACK_SIZE) 0 - /* A C expression that is nonzero if X is a legitimate constant for an immediate operand on the target machine. */ #define LEGITIMATE_CONSTANT_P(X) 1 diff --git a/gcc/config/pa/pa.h b/gcc/config/pa/pa.h index 8a18289b0d2..4eae700b077 100644 --- a/gcc/config/pa/pa.h +++ b/gcc/config/pa/pa.h @@ -553,14 +553,6 @@ extern struct rtx_def *hppa_pic_save_rtx (void); ? (STACK_POINTER_OFFSET) \ : ((STACK_POINTER_OFFSET) - crtl->outgoing_args_size)) -/* Value is 1 if returning from a function call automatically - pops the arguments described by the number-of-args field in the call. - FUNDECL is the declaration node of the function (as a tree), - FUNTYPE is the data type of the function (as a tree), - or for a library call it is an identifier node for the subroutine name. */ - -#define RETURN_POPS_ARGS(FUNDECL,FUNTYPE,SIZE) 0 - /* Define how to find the value returned by a library function assuming the value has mode MODE. */ diff --git a/gcc/config/pdp11/pdp11.h b/gcc/config/pdp11/pdp11.h index 15eef844a34..006fb4cbd86 100644 --- a/gcc/config/pdp11/pdp11.h +++ b/gcc/config/pdp11/pdp11.h @@ -435,14 +435,6 @@ extern int current_first_parm_offset; */ #define FIRST_PARM_OFFSET(FNDECL) 4 -/* Value is 1 if returning from a function call automatically - pops the arguments described by the number-of-args field in the call. - FUNDECL is the declaration node of the function (as a tree), - FUNTYPE is the data type of the function (as a tree), - or for a library call it is an identifier node for the subroutine name. */ - -#define RETURN_POPS_ARGS(FUNDECL,FUNTYPE,SIZE) 0 - /* 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; diff --git a/gcc/config/picochip/picochip.h b/gcc/config/picochip/picochip.h index 7269fa062ad..b4aec727df5 100644 --- a/gcc/config/picochip/picochip.h +++ b/gcc/config/picochip/picochip.h @@ -406,9 +406,6 @@ extern const enum reg_class picochip_regno_reg_class[FIRST_PSEUDO_REGISTER]; #define PUSH_ARGS 0 -/* Functions don't pop their args. */ -#define RETURN_POPS_ARGS(FNDECL, FNTYPE, STACK) 0 - /* Passing Arguments in Registers */ /* Store the offset of the next argument. */ diff --git a/gcc/config/rs6000/rs6000.h b/gcc/config/rs6000/rs6000.h index 3f37c4b4836..2ee3da18284 100644 --- a/gcc/config/rs6000/rs6000.h +++ b/gcc/config/rs6000/rs6000.h @@ -1578,15 +1578,6 @@ extern enum rs6000_abi rs6000_current_abi; /* available for use by subtarget */ found in the variable crtl->outgoing_args_size. */ #define ACCUMULATE_OUTGOING_ARGS 1 -/* Value is the number of bytes of arguments automatically - popped when returning from a subroutine call. - FUNDECL is the declaration node of the function (as a tree), - FUNTYPE is the data type of the function (as a tree), - 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. */ - -#define RETURN_POPS_ARGS(FUNDECL,FUNTYPE,SIZE) 0 - /* Define how to find the value returned by a library function assuming the value has mode MODE. */ diff --git a/gcc/config/rx/rx.h b/gcc/config/rx/rx.h index cb63951108b..afaa07b0bc5 100644 --- a/gcc/config/rx/rx.h +++ b/gcc/config/rx/rx.h @@ -154,7 +154,6 @@ extern enum rx_cpu_types rx_cpu_type; #define MOVE_MAX 4 #define STARTING_FRAME_OFFSET 0 -#define RETURN_POPS_ARGS(FUNDECL, FUNTYPE, SIZE) 0 #define TRULY_NOOP_TRUNCATION(OUTPREC, INPREC) 1 #define LEGITIMATE_CONSTANT_P(X) rx_is_legitimate_constant (X) diff --git a/gcc/config/s390/s390.h b/gcc/config/s390/s390.h index 1d74d30c000..cbe28991c18 100644 --- a/gcc/config/s390/s390.h +++ b/gcc/config/s390/s390.h @@ -673,9 +673,6 @@ extern const enum reg_class regclass_map[FIRST_PSEUDO_REGISTER]; /* We need current_function_outgoing_args to be valid. */ #define ACCUMULATE_OUTGOING_ARGS 1 -/* Return doesn't modify the stack. */ -#define RETURN_POPS_ARGS(FUNDECL, FUNTYPE, SIZE) 0 - /* Register arguments. */ diff --git a/gcc/config/score/score.h b/gcc/config/score/score.h index cde9c222546..98ca0a3537b 100644 --- a/gcc/config/score/score.h +++ b/gcc/config/score/score.h @@ -581,8 +581,6 @@ extern enum reg_class score_char_to_class[256]; `crtl->outgoing_args_size'. */ #define OUTGOING_REG_PARM_STACK_SPACE(FNTYPE) 1 -#define RETURN_POPS_ARGS(FUNDECL, FUNTYPE, STACK_SIZE) 0 - /* Passing Arguments in Registers */ /* Determine where to put an argument to a function. Value is zero to push the argument on the stack, diff --git a/gcc/config/sh/sh.h b/gcc/config/sh/sh.h index 9482387ea56..ee3e05995d6 100644 --- a/gcc/config/sh/sh.h +++ b/gcc/config/sh/sh.h @@ -1423,17 +1423,6 @@ extern enum reg_class regno_reg_class[FIRST_PSEUDO_REGISTER]; /* Offset of first parameter from the argument pointer register value. */ #define FIRST_PARM_OFFSET(FNDECL) 0 -/* Value is the number of byte of arguments automatically - popped when returning from a subroutine call. - FUNDECL is the declaration node of the function (as a tree), - FUNTYPE is the data type of the function (as a tree), - 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 SH, the caller does not pop any of its arguments that were passed - on the stack. */ -#define RETURN_POPS_ARGS(FUNDECL,FUNTYPE,SIZE) 0 - /* Value is the number of bytes of arguments automatically popped when calling a subroutine. CUM is the accumulated argument list. diff --git a/gcc/config/sparc/sparc.h b/gcc/config/sparc/sparc.h index 6c28e9838c8..6f6aec7d3f9 100644 --- a/gcc/config/sparc/sparc.h +++ b/gcc/config/sparc/sparc.h @@ -1387,15 +1387,6 @@ extern char leaf_reg_remap[]; the function! */ #define ACCUMULATE_OUTGOING_ARGS 1 -/* Value is the number of bytes of arguments automatically - popped when returning from a subroutine call. - FUNDECL is the declaration node of the function (as a tree), - FUNTYPE is the data type of the function (as a tree), - 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. */ - -#define RETURN_POPS_ARGS(FUNDECL,FUNTYPE,SIZE) 0 - /* Define this macro if the target machine has "register windows". This C expression returns the register number as seen by the called function corresponding to register number OUT as seen by the calling function. diff --git a/gcc/config/spu/spu.h b/gcc/config/spu/spu.h index 54b461235a7..d3880418c2f 100644 --- a/gcc/config/spu/spu.h +++ b/gcc/config/spu/spu.h @@ -334,8 +334,6 @@ targetm.resolve_overloaded_builtin = spu_resolve_overloaded_builtin; \ #define OUTGOING_REG_PARM_STACK_SPACE(FNTYPE) 1 -#define RETURN_POPS_ARGS(FUNDECL,FUNTYPE,SIZE) (0) - /* Register Arguments */ diff --git a/gcc/config/stormy16/stormy16.h b/gcc/config/stormy16/stormy16.h index cf6acf586c2..4ea89a218db 100644 --- a/gcc/config/stormy16/stormy16.h +++ b/gcc/config/stormy16/stormy16.h @@ -328,8 +328,6 @@ enum reg_class #define PUSH_ROUNDING(BYTES) (((BYTES) + 1) & ~1) -#define RETURN_POPS_ARGS(FUNDECL, FUNTYPE, STACK_SIZE) 0 - /* Function Arguments in Registers. */ diff --git a/gcc/config/v850/v850.h b/gcc/config/v850/v850.h index 4c4c270db71..25faff1e7dd 100644 --- a/gcc/config/v850/v850.h +++ b/gcc/config/v850/v850.h @@ -556,15 +556,6 @@ enum reg_class /* Keep the stack pointer constant throughout the function. */ #define ACCUMULATE_OUTGOING_ARGS 1 -/* Value is the number of bytes of arguments automatically - popped when returning from a subroutine call. - FUNDECL is the declaration node of the function (as a tree), - FUNTYPE is the data type of the function (as a tree), - 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. */ - -#define RETURN_POPS_ARGS(FUNDECL,FUNTYPE,SIZE) 0 - #define RETURN_ADDR_RTX(COUNT, FP) v850_return_addr (COUNT) /* Define a data type for recording info about an argument list diff --git a/gcc/config/vax/vax.c b/gcc/config/vax/vax.c index 5d547fee8d5..b3dfcb1e079 100644 --- a/gcc/config/vax/vax.c +++ b/gcc/config/vax/vax.c @@ -58,6 +58,7 @@ static rtx vax_struct_value_rtx (tree, int); static rtx vax_builtin_setjmp_frame_value (void); static void vax_asm_trampoline_template (FILE *); static void vax_trampoline_init (rtx, tree, rtx); +static int vax_return_pops_args (tree, tree, int); /* Initialize the GCC target structure. */ #undef TARGET_ASM_ALIGNED_HI_OP @@ -106,6 +107,8 @@ static void vax_trampoline_init (rtx, tree, rtx); #define TARGET_ASM_TRAMPOLINE_TEMPLATE vax_asm_trampoline_template #undef TARGET_TRAMPOLINE_INIT #define TARGET_TRAMPOLINE_INIT vax_trampoline_init +#undef TARGET_RETURN_POPS_ARGS +#define TARGET_RETURN_POPS_ARGS vax_return_pops_args struct gcc_target targetm = TARGET_INITIALIZER; @@ -2068,3 +2071,18 @@ vax_trampoline_init (rtx m_tramp, tree fndecl, rtx cxt) emit_insn (gen_sync_istream ()); } +/* Value is the number of bytes of arguments automatically + popped when returning from a subroutine call. + FUNDECL is the declaration node of the function (as a tree), + FUNTYPE is the data type of the function (as a tree), + 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 VAX, the RET insn pops a maximum of 255 args for any function. */ + +static int +vax_return_pops_args (tree fundecl ATTRIBUTE_UNUSED, + tree funtype ATTRIBUTE_UNUSED, int size) +{ + return size > 255 * 4 ? 0 : size; +} diff --git a/gcc/config/vax/vax.h b/gcc/config/vax/vax.h index e85ce01f820..88a8f1c9b1f 100644 --- a/gcc/config/vax/vax.h +++ b/gcc/config/vax/vax.h @@ -305,18 +305,6 @@ enum reg_class { NO_REGS, ALL_REGS, LIM_REG_CLASSES }; /* Offset of first parameter from the argument pointer register value. */ #define FIRST_PARM_OFFSET(FNDECL) 4 -/* Value is the number of bytes of arguments automatically - popped when returning from a subroutine call. - FUNDECL is the declaration node of the function (as a tree), - FUNTYPE is the data type of the function (as a tree), - 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 VAX, the RET insn pops a maximum of 255 args for any function. */ - -#define RETURN_POPS_ARGS(FUNDECL,FUNTYPE,SIZE) \ - ((SIZE) > 255 * 4 ? 0 : (SIZE)) - /* 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; diff --git a/gcc/config/xtensa/xtensa.h b/gcc/config/xtensa/xtensa.h index 80c296d930f..32819bc0de7 100644 --- a/gcc/config/xtensa/xtensa.h +++ b/gcc/config/xtensa/xtensa.h @@ -547,9 +547,6 @@ extern const enum reg_class xtensa_regno_to_class[FIRST_PSEUDO_REGISTER]; 128-bit datatypes defined in TIE (e.g., for Vectra). */ #define STACK_BOUNDARY 128 -/* Functions do not pop arguments off the stack. */ -#define RETURN_POPS_ARGS(FUNDECL, FUNTYPE, SIZE) 0 - /* Use a fixed register window size of 8. */ #define WINDOW_SIZE 8 |