diff options
author | Jan Hubicka <jh@suse.cz> | 2000-03-29 13:10:44 +0000 |
---|---|---|
committer | Jan Hubicka <hubicka@gcc.gnu.org> | 2000-03-29 13:10:44 +0000 |
commit | f73ad30e011e5fa64e634e576bd6297b667f9364 (patch) | |
tree | f907c433c28df15d0d9341afb54624130db44220 /gcc/final.c | |
parent | db8cb48e64684efc2956b1229e9b1fbac558229a (diff) | |
download | gcc-f73ad30e011e5fa64e634e576bd6297b667f9364.zip gcc-f73ad30e011e5fa64e634e576bd6297b667f9364.tar.gz gcc-f73ad30e011e5fa64e634e576bd6297b667f9364.tar.bz2 |
Convert ACCUMULATE_OUTGOING_ARGS to an expression.
* calls.c (PUSH_ARGS_REVERSED) Change to expression.
(ACCUMULATE_OUTGOING_ARGS, PUSH_ARGS): Provide default value.
(struct arg_data): Remove #ifdef ACCUMULATE_OUTGOING_ARGS.
(save_fixed_argument_area, restore_fixed_argument_area):
conditionize by #ifdef REG_PARM_STACK_SPACE only.
(emit_call): Change #ifdefs on ACCUMULATE_OUTGOING_ARGS
to conditions, handle RETURN_POPS_ARGS on ACCUMULATE_OUTGOING_ARGS.
(precompute_register_parameters): Avoid #ifdefs on
ACCUMULATE_OUTGOING_ARGS and PUSH_ARGS_REVERSED.
(stire_one_args): Likewise.
(expand_call): Likewise; conditionize PUSH_ROUNDING code by PUSH_ARGS.
(emit_library_call_value_1): Likewise.
(compute_argument_block_size): Align to STACK_BOUNDARY only for
ACCUMULATE_OUTGOING_ARGS.
* combine.c (ACCUMULATE_OUTGOING_ARGS, PUSH_ARGS): Provide default
value.
(nonzero_bits): Conditionize PUSH_ROUNDING code by USE_PUSH.
(use_crosses_set_p): Likewise.
* all targets (ACCUMULATE_OUTGOING_ARGS define): Change to
#define ACCUMULATE_OUTGOING_ARGS 1.
* i386.c (ix86_compute_frame_size): Handle ACCUMULATE_OUTGOING_ARGS
frames.
* i386.h (MASK_NO_PUSH_ARGS, MASK_ACCUMULATE_OUTGOING_ARGS): New
constants.
(TARGET_PUSH_ARGS, TARGET_ACCUMULATE_OUTGOING_ARGS): New macros.
(TARGET_SWITCHES): Add push-args, no-push-args,
accumulate-outgoing-args and no-accumulate-outgoing-args.
(ACCUMULATE_OUTGOING_ARGS, PUSH_ARGS): New macro.
* expr.c (ACCUMULATE_OUTGONG_ARGS, PUSH_ARGS): Provide default.
(push_block): Avoid ifdefs on ACCUMULATE_OUTGONG_ARGS
and PUSH_ROUNDING.
(emit_push_insn): Likewise.
* final.c (ACCUMULATE_OUTGOING_ARGS): Provide default.
(final_scan_insn): Avoid ifdefs on ACCUMULATE_OUTGOING_ARGS.
* function.c (ACCUMULATE_OUTGOING_ARGS): Provide default.
(STACK_DYNAMIC_OFFSET): Define correctly for both
ACCUMULATE_OUTGOING_ARGS and normal mode.
* invoke.texi (-mpush_args, -maccumulate-outgoing-args): Document.
* tm.texi (PUSH_ARGS): Document.
(ACCUMULATE_OUTGOING_ARGS, PUSH_ROUNDING): Update documentation.
From-SVN: r32803
Diffstat (limited to 'gcc/final.c')
-rw-r--r-- | gcc/final.c | 34 |
1 files changed, 21 insertions, 13 deletions
diff --git a/gcc/final.c b/gcc/final.c index 5693d46..34db2ae 100644 --- a/gcc/final.c +++ b/gcc/final.c @@ -80,6 +80,10 @@ Boston, MA 02111-1307, USA. */ #endif /* DBX_DEBUGGING_INFO || XCOFF_DEBUGGING_INFO */ +#ifndef ACCUMULATE_OUTGOING_ARGS +#define ACCUMULATE_OUTGOING_ARGS 0 +#endif + #ifdef XCOFF_DEBUGGING_INFO #include "xcoffout.h" #endif @@ -2279,10 +2283,10 @@ final_scan_insn (insn, file, optimize, prescan, nopeepholes) break; case BARRIER: -#if defined (DWARF2_UNWIND_INFO) && !defined (ACCUMULATE_OUTGOING_ARGS) +#if defined (DWARF2_UNWIND_INFO) /* If we push arguments, we need to check all insns for stack adjustments. */ - if (dwarf2out_do_frame ()) + if (!ACCUMULATE_OUTGOING_ARGS && dwarf2out_do_frame ()) dwarf2out_frame_debug (insn); #endif break; @@ -2885,9 +2889,10 @@ final_scan_insn (insn, file, optimize, prescan, nopeepholes) debug_insn = insn; -#if defined (DWARF2_UNWIND_INFO) && !defined (ACCUMULATE_OUTGOING_ARGS) +#if defined (DWARF2_UNWIND_INFO) /* If we push arguments, we want to know where the calls are. */ - if (GET_CODE (insn) == CALL_INSN && dwarf2out_do_frame ()) + if (!ACCUMULATE_OUTGOING_ARGS && GET_CODE (insn) == CALL_INSN + && dwarf2out_do_frame ()) dwarf2out_frame_debug (insn); #endif @@ -2934,19 +2939,22 @@ final_scan_insn (insn, file, optimize, prescan, nopeepholes) output_asm_insn (template, recog_data.operand); #if defined (DWARF2_UNWIND_INFO) -#if !defined (ACCUMULATE_OUTGOING_ARGS) /* If we push arguments, we need to check all insns for stack adjustments. */ - if (GET_CODE (insn) == INSN && dwarf2out_do_frame ()) - dwarf2out_frame_debug (insn); -#else + if (!ACCUMULATE_OUTGOING_ARGS) + { + if (GET_CODE (insn) == INSN && dwarf2out_do_frame ()) + dwarf2out_frame_debug (insn); + } + else + { #if defined (HAVE_prologue) - /* If this insn is part of the prologue, emit DWARF v2 - call frame info. */ - if (RTX_FRAME_RELATED_P (insn) && dwarf2out_do_frame ()) - dwarf2out_frame_debug (insn); -#endif + /* If this insn is part of the prologue, emit DWARF v2 + call frame info. */ + if (RTX_FRAME_RELATED_P (insn) && dwarf2out_do_frame ()) + dwarf2out_frame_debug (insn); #endif + } #endif #if 0 |