aboutsummaryrefslogtreecommitdiff
path: root/gcc/explow.c
diff options
context:
space:
mode:
authorRichard Kenner <kenner@vlsi1.ultra.nyu.edu>2001-01-22 18:59:36 +0000
committerRichard Kenner <kenner@gcc.gnu.org>2001-01-22 13:59:36 -0500
commitf5f5363f77c3b6cd53cf40d53f67e14ab71a6cdc (patch)
treef5e8f6715a0be21af19590c3f435a3e5898db37a /gcc/explow.c
parenta09b9232cd7029bde88a5d23514b169d78f02a72 (diff)
downloadgcc-f5f5363f77c3b6cd53cf40d53f67e14ab71a6cdc.zip
gcc-f5f5363f77c3b6cd53cf40d53f67e14ab71a6cdc.tar.gz
gcc-f5f5363f77c3b6cd53cf40d53f67e14ab71a6cdc.tar.bz2
explow.c (probe_stack_range): Ensure value passed to stack_check_libfunc is ptr_mode, not Pmode.
* explow.c (probe_stack_range): Ensure value passed to stack_check_libfunc is ptr_mode, not Pmode. From-SVN: r39185
Diffstat (limited to 'gcc/explow.c')
-rw-r--r--gcc/explow.c20
1 files changed, 14 insertions, 6 deletions
diff --git a/gcc/explow.c b/gcc/explow.c
index a1c6380..aa1e8a6 100644
--- a/gcc/explow.c
+++ b/gcc/explow.c
@@ -1558,12 +1558,20 @@ probe_stack_range (first, size)
/* First see if the front end has set up a function for us to call to
check the stack. */
if (stack_check_libfunc != 0)
- emit_library_call (stack_check_libfunc, 0, VOIDmode, 1,
- memory_address (QImode,
- gen_rtx (STACK_GROW_OP, Pmode,
- stack_pointer_rtx,
- plus_constant (size, first))),
- ptr_mode);
+ {
+ rtx addr = memory_address (QImode,
+ gen_rtx (STACK_GROW_OP, Pmode,
+ stack_pointer_rtx,
+ plus_constant (size, first)));
+
+#ifdef POINTERS_EXTEND_UNSIGNED
+ if (GET_MODE (addr) != ptr_mode)
+ addr = convert_memory_address (ptr_mode, addr);
+#endif
+
+ emit_library_call (stack_check_libfunc, 0, VOIDmode, 1, addr,
+ ptr_mode);
+ }
/* Next see if we have an insn to check the stack. Use it if so. */
#ifdef HAVE_check_stack