tm.texi (STACK_CHECK_PROTECT): Document alternate default.

* doc/tm.texi (STACK_CHECK_PROTECT): Document alternate default.
	* doc/md.texi (check_stack): Clarify.
	(probe_stack): Likewise.
	* config/rs6000/rs6000.md (UNSPEC_PROBE_STACK): New constant.
	(probe_stack): New insn.

From-SVN: r155209
This commit is contained in:
Eric Botcazou 2009-12-14 10:12:43 +00:00 committed by Eric Botcazou
parent e11ddaf56e
commit 507d0069fa
4 changed files with 32 additions and 15 deletions

View File

@ -1,3 +1,11 @@
2009-12-14 Eric Botcazou <ebotcazou@adacore.com>
* doc/tm.texi (STACK_CHECK_PROTECT): Document alternate default.
* doc/md.texi (check_stack): Clarify.
(probe_stack): Likewise.
* config/rs6000/rs6000.md (UNSPEC_PROBE_STACK): New constant.
(probe_stack): New insn.
2009-12-14 Ben Elliston <bje@au.ibm.com>
* lto-streamer-in.c (lto_get_builtin_tree): fclass can only be a

View File

@ -55,6 +55,7 @@
(define_constants
[(UNSPEC_FRSP 0) ; frsp for POWER machines
(UNSPEC_PROBE_STACK 4) ; probe stack memory reference
(UNSPEC_TIE 5) ; tie stack contents and stack pointer
(UNSPEC_TOCPTR 6) ; address of a word pointing to the TOC
(UNSPEC_TOC 7) ; address of the TOC (more-or-less)
@ -12549,6 +12550,13 @@
[(unspec_volatile [(const_int 0)] UNSPECV_BLOCK)]
""
"")
(define_insn "probe_stack"
[(unspec [(match_operand 0 "memory_operand" "=m")] UNSPEC_PROBE_STACK)]
""
"{st%U0%X0|stw%U0%X0} 0,%0"
[(set_attr "type" "store")
(set_attr "length" "4")])
;; Compare insns are next. Note that the RS/6000 has two types of compares,
;; signed & unsigned, and one type of branch.

View File

@ -5035,21 +5035,20 @@ operations in addition to updating the stack pointer.
@cindex @code{check_stack} instruction pattern
@item @samp{check_stack}
If stack checking cannot be done on your system by probing the stack with
a load or store instruction (@pxref{Stack Checking}), define this pattern
to perform the needed check and signal an error if the stack has overflowed.
The single operand is the address in the stack furthest from the current
stack pointer that you need to validate. Normally, on machines where this
pattern is needed, you would obtain the stack limit from a global or
thread-specific variable or register.
If stack checking (@pxref{Stack Checking}) cannot be done on your system by
probing the stack, define this pattern to perform the needed check and signal
an error if the stack has overflowed. The single operand is the address in
the stack farthest from the current stack pointer that you need to validate.
Normally, on platforms where this pattern is needed, you would obtain the
stack limit from a global or thread-specific variable or register.
@cindex @code{probe_stack} instruction pattern
@item @samp{probe_stack}
If stack checking can be done on your system by probing the stack but doing
it with a load or store instruction is not optimal (@pxref{Stack Checking}),
define this pattern to do the probing differently and signal an error if
the stack has overflowed. The single operand is the memory location in the
stack that needs to be probed.
If stack checking (@pxref{Stack Checking}) can be done on your system by
probing the stack but doing it with a ``store zero'' instruction is not valid
or optimal, define this pattern to do the probing differently and signal an
error if the stack has overflowed. The single operand is the memory reference
in the stack that needs to be probed.
@cindex @code{nonlocal_goto} instruction pattern
@item @samp{nonlocal_goto}

View File

@ -3574,9 +3574,11 @@ default value of this macro is zero.
@end defmac
@defmac STACK_CHECK_PROTECT
The number of bytes of stack needed to recover from a stack overflow,
for languages where such a recovery is supported. The default value of
75 words should be adequate for most machines.
The number of bytes of stack needed to recover from a stack overflow, for
languages where such a recovery is supported. The default value of 75 words
with the @code{setjmp}/@code{longjmp}-based exception handling mechanism and
8192 bytes with other exception handling mechanisms should be adequate for
most machines.
@end defmac
The following macros are relevant only if neither STACK_CHECK_BUILTIN