aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Kenner <kenner@vlsi1.ultra.nyu.edu>1997-08-02 17:24:48 +0000
committerRichard Kenner <kenner@vlsi1.ultra.nyu.edu>1997-08-02 17:24:48 +0000
commit6435421827c247f46b614aac2f44b48ebad276c8 (patch)
treec741165712a68c7781bebf24f81f3109e3645dd8
parentaaca022bfb572810311a067a3ec4fe9aa54a1b7f (diff)
(hppa_builtin_saveregs): f -fcheck-memory-usage, set rights of saved
registers. git-svn-id: https://gcc.gnu.org/svn/gcc/trunk@14623 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r--gcc/config/pa/pa.c19
1 files changed, 12 insertions, 7 deletions
diff --git a/gcc/config/pa/pa.c b/gcc/config/pa/pa.c
index b1b9d9dc1bc..a9288fc1ff6 100644
--- a/gcc/config/pa/pa.c
+++ b/gcc/config/pa/pa.c
@@ -1,5 +1,5 @@
/* Subroutines for insn-output.c for HPPA.
- Copyright (C) 1992, 1993, 1994, 1995, 1996 Free Software Foundation, Inc.
+ Copyright (C) 1992, , 1994, 95, 96, 1997 Free Software Foundation, Inc.
Contributed by Tim Moore (moore@cs.utah.edu), based on sparc.c
This file is part of GNU CC.
@@ -4269,7 +4269,7 @@ struct rtx_def *
hppa_builtin_saveregs (arglist)
tree arglist;
{
- rtx offset;
+ rtx offset, dest;
tree fntype = TREE_TYPE (current_function_decl);
int argadj = ((!(TYPE_ARG_TYPES (fntype) != 0
&& (TREE_VALUE (tree_last (TYPE_ARG_TYPES (fntype)))
@@ -4282,11 +4282,16 @@ hppa_builtin_saveregs (arglist)
offset = current_function_arg_offset_rtx;
/* Store general registers on the stack. */
- move_block_from_reg (23,
- gen_rtx (MEM, BLKmode,
- plus_constant
- (current_function_internal_arg_pointer, -16)),
- 4, 4 * UNITS_PER_WORD);
+ dest = gen_rtx (MEM, BLKmode,
+ plus_constant (current_function_internal_arg_pointer, -16));
+ move_block_from_reg (23, dest, 4, 4 * UNITS_PER_WORD);
+
+ if (flag_check_memory_usage)
+ emit_library_call (chkr_set_right_libfunc, 1, VOIDmode, 3,
+ dest, ptr_mode,
+ GEN_INT (4 * UNITS_PER_WORD), TYPE_MODE (sizetype),
+ GEN_INT (MEMORY_USE_RW), QImode);
+
return copy_to_reg (expand_binop (Pmode, add_optab,
current_function_internal_arg_pointer,
offset, 0, 0, OPTAB_LIB_WIDEN));