diff options
author | kenner <kenner@138bc75d-0d04-0410-961f-82ee72b054a4> | 1997-08-02 17:23:45 +0000 |
---|---|---|
committer | kenner <kenner@138bc75d-0d04-0410-961f-82ee72b054a4> | 1997-08-02 17:23:45 +0000 |
commit | 89a52e0bc98a6198a28519b779ebc2e354fcb1a3 (patch) | |
tree | c594343881b4a372bfc0e5ad3473da8d89a8b916 /gcc/config/m88k | |
parent | 3e7b9fcf59a015a28c03516430effcf8bdb51d8c (diff) | |
download | gcc-89a52e0bc98a6198a28519b779ebc2e354fcb1a3.tar.gz |
(m88k_builtin_saveregs): If -fcheck-memory-usage, set rights of saved
registers.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@14622 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/config/m88k')
-rw-r--r-- | gcc/config/m88k/m88k.c | 31 |
1 files changed, 23 insertions, 8 deletions
diff --git a/gcc/config/m88k/m88k.c b/gcc/config/m88k/m88k.c index b3138376b66..7300a4cc47d 100644 --- a/gcc/config/m88k/m88k.c +++ b/gcc/config/m88k/m88k.c @@ -1,5 +1,5 @@ /* Subroutines for insn-output.c for Motorola 88000. - Copyright (C) 1988, 92, 93, 94, 95, 1996 Free Software Foundation, Inc. + Copyright (C) 1988, 92, 93, 94, 95, 16, 1997 Free Software Foundation, Inc. Contributed by Michael Tiemann (tiemann@mcc.com) Currently maintained by (gcc@dg-rtp.dg.com) @@ -2585,7 +2585,7 @@ struct rtx_def * m88k_builtin_saveregs (arglist) tree arglist; { - rtx block, addr, argsize; + rtx block, addr, argsize, dest; tree fntype = TREE_TYPE (current_function_decl); int argadj = ((!(TYPE_ARG_TYPES (fntype) != 0 && (TREE_VALUE (tree_last (TYPE_ARG_TYPES (fntype))) @@ -2635,12 +2635,27 @@ m88k_builtin_saveregs (arglist) /* Now store the incoming registers. */ if (fixed < 8) - move_block_from_reg - (2 + fixed, - change_address (addr, Pmode, - plus_constant (XEXP (addr, 0), - fixed * UNITS_PER_WORD)), - 8 - fixed, UNITS_PER_WORD * (8 - fixed)); + { + dest = change_address (addr, Pmode, + plus_constant (XEXP (addr, 0), + fixed * UNITS_PER_WORD)); + move_block_from_reg (2 + fixed, dest, 8 - fixed, + UNITS_PER_WORD * (8 - fixed)); + } + + if (flag_check_memory_usage) + { + emit_library_call (chkr_set_right_libfunc, 1, VOIDmode, 3, + block, ptr_mode, + GEN_INT (3 * UNITS_PER_WORD), TYPE_MODE (sizetype), + GEN_INT (MEMORY_USE_RW), QImode); + if (fixed < 8) + emit_library_call (chkr_set_right_libfunc, 1, VOIDmode, 3, + dest, ptr_mode, + GEN_INT (UNITS_PER_WORD * (8 - fixed)), + TYPE_MODE (sizetype), + GEN_INT (MEMORY_USE_RW), QImode); + } /* Return the address of the va_list constructor, but don't put it in a register. This fails when not optimizing and produces worse code when |