diff options
author | cpopetz <cpopetz@138bc75d-0d04-0410-961f-82ee72b054a4> | 2000-01-14 21:19:51 +0000 |
---|---|---|
committer | cpopetz <cpopetz@138bc75d-0d04-0410-961f-82ee72b054a4> | 2000-01-14 21:19:51 +0000 |
commit | 726e25884f2e4ce259199c5d747e44c63898920e (patch) | |
tree | f9a35a30ce0a91f50eb0507d969b47230adec015 /gcc/config/mips | |
parent | 8386a92abc77788a501a23c67853ab5f95437357 (diff) | |
download | gcc-726e25884f2e4ce259199c5d747e44c63898920e.tar.gz |
* builtins.c (PAD_VARARGS_DOWN): Define.
(std_expand_builtin_va_arg): Use the above macro.
* config/mips/mips.c (PAD_VARARGS_DOWN): Define.
* tm.texi (Register Arguments): Document the above macro.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@31421 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/config/mips')
-rw-r--r-- | gcc/config/mips/mips.c | 18 |
1 files changed, 12 insertions, 6 deletions
diff --git a/gcc/config/mips/mips.c b/gcc/config/mips/mips.c index 67859dff135..43601a7d782 100644 --- a/gcc/config/mips/mips.c +++ b/gcc/config/mips/mips.c @@ -1,5 +1,5 @@ /* Subroutines for insn-output.c for MIPS - Copyright (C) 1989, 90, 91, 93-98, 1999 Free Software Foundation, Inc. + Copyright (C) 1989, 90, 91, 93-98, 1999, 2000 Free Software Foundation, Inc. Contributed by A. Lichnewsky, lich@inria.inria.fr. Changes by Michael Meissner, meissner@osf.org. 64 bit r4000 support by Ian Lance Taylor, ian@cygnus.com, and @@ -4045,11 +4045,10 @@ mips_va_start (stdarg_p, valist, nextarg) tree valist; rtx nextarg; { - int arg_words, fp_arg_words; + int arg_words; tree t; arg_words = current_function_args_info.arg_words; - fp_arg_words = current_function_args_info.fp_arg_words; if (mips_abi == ABI_EABI) { @@ -4059,6 +4058,11 @@ mips_va_start (stdarg_p, valist, nextarg) tree gprv, fprv; int gpro, fpro; + fpro = (8 - current_function_args_info.fp_arg_words); + + if (!TARGET_64BIT) + fpro /= 2; + f_fpr = TYPE_FIELDS (va_list_type_node); f_rem = TREE_CHAIN (f_fpr); f_gpr = TREE_CHAIN (f_rem); @@ -4084,16 +4088,15 @@ mips_va_start (stdarg_p, valist, nextarg) expand_expr (t, const0_rtx, VOIDmode, EXPAND_NORMAL); t = build (MODIFY_EXPR, integer_type_node, rem, - build_int_2 (8 - fp_arg_words, 0)); + build_int_2 (fpro, 0)); TREE_SIDE_EFFECTS (t) = 1; expand_expr (t, const0_rtx, VOIDmode, EXPAND_NORMAL); - fpro = (8 - fp_arg_words) * 8; if (fpro == 0) fprv = gprv; else fprv = fold (build (PLUS_EXPR, ptr_type_node, gprv, - build_int_2 (-fpro, -1))); + build_int_2 (-(fpro*8), -1))); if (! TARGET_64BIT) fprv = fold (build (BIT_AND_EXPR, ptr_type_node, fprv, @@ -4199,6 +4202,9 @@ mips_va_arg (valist, type) if (r != addr_rtx) emit_move_insn (addr_rtx, r); + /* Ensure that the POSTINCREMENT is emitted before lab_over */ + emit_queue(); + emit_jump (lab_over); emit_barrier (); emit_label (lab_false); |