aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Kenner <kenner@gcc.gnu.org>1997-08-02 13:25:31 -0400
committerRichard Kenner <kenner@gcc.gnu.org>1997-08-02 13:25:31 -0400
commiteadceb598a8e7ec27f6a0c44c6f2e4200c40a482 (patch)
treea22e382c5aae82a48faf17cce4eae2b2256d2786
parent5e32727ccc4b252f1b8c7500d9dbe6fa6d165070 (diff)
downloadgcc-eadceb598a8e7ec27f6a0c44c6f2e4200c40a482.zip
gcc-eadceb598a8e7ec27f6a0c44c6f2e4200c40a482.tar.gz
gcc-eadceb598a8e7ec27f6a0c44c6f2e4200c40a482.tar.bz2
(sparc_builtin_saveregs): If -fcheck-memory-usage, set rights of saved
registers. From-SVN: r14624
-rw-r--r--gcc/config/sparc/sparc.c21
1 files changed, 21 insertions, 0 deletions
diff --git a/gcc/config/sparc/sparc.c b/gcc/config/sparc/sparc.c
index ead4da0..4235c93 100644
--- a/gcc/config/sparc/sparc.c
+++ b/gcc/config/sparc/sparc.c
@@ -3454,6 +3454,20 @@ sparc_builtin_saveregs (arglist)
gen_rtx (REG, DFmode,
BASE_INCOMING_ARG_REG (DFmode) + regno));
+ if (flag_check_memory_usage)
+ {
+ emit_library_call (chkr_set_right_libfunc, 1, VOIDmode, 3, regbuf,
+ ptr_mode, GEN_INT (n_intregs * UNITS_PER_WORD),
+ TYPE_MODE (sizetype), GEN_INT (MEMORY_USE_RW), QImode);
+
+ emit_library_call (chkr_set_right_libfunc, 1, VOIDmode, 3,
+ fpregs, ptr_mode,
+ GEN_INT (UNITS_PER_WORD
+ * GET_MODE_SIZE (SFmode)
+ * (NPARM_REGS (SFmode) - first_floatreg)),
+ TYPE_MODE (sizetype), GEN_INT (MEMORY_USE_RW), QImode);
+ }
+
/* Return the address of the regbuf. */
return XEXP (regbuf, 0);
@@ -3493,6 +3507,13 @@ sparc_builtin_saveregs (arglist)
GEN_INT (STACK_POINTER_OFFSET
+ UNITS_PER_WORD * first_reg));
+ if (flag_check_memory_usage)
+ emit_library_call (chkr_set_right_libfunc, 1, VOIDmode, 3,
+ address, ptr_mode,
+ GEN_INT (UNITS_PER_WORD
+ * (NPARM_REGS (SImode) - first_reg)),
+ TYPE_MODE (sizetype), GEN_INT (MEMORY_USE_RW), QImode);
+
return address;
}