diff options
author | ebotcazou <ebotcazou@138bc75d-0d04-0410-961f-82ee72b054a4> | 2012-05-10 22:15:07 +0000 |
---|---|---|
committer | ebotcazou <ebotcazou@138bc75d-0d04-0410-961f-82ee72b054a4> | 2012-05-10 22:15:07 +0000 |
commit | 28d5c3d93ab64606c9c4bf18bb17383160508ce0 (patch) | |
tree | d8b039c3645b15a3789fe67a891798b24923faaa /gcc/explow.c | |
parent | e8e650cfbb307b24acc8ac2549441ccd772861cb (diff) | |
download | gcc-28d5c3d93ab64606c9c4bf18bb17383160508ce0.tar.gz |
* doc/md.texi (Standard Names): Document probe_stack_address.
* explow.c (emit_stack_probe): Handle probe_stack_address.
* config/ia64/ia64.md (UNSPECV_PROBE_STACK_ADDRESS): New constant.
(UNSPECV_PROBE_STACK_RANGE): Likewise.
(probe_stack_address): New insn.
(probe_stack_range): Likewise.
* config/ia64/ia64.c: Include common/common-target.h.
(ia64_compute_frame_size): Mark r2 and r3 as used if static stack
checking is enabled.
(ia64_emit_probe_stack_range): New function.
(output_probe_stack_range): Likewise.
(ia64_expand_prologue): Invoke ia64_emit_probe_stack_range if static
builtin stack checking is enabled.
(rtx_needs_barrier) <UNSPEC_VOLATILE>: Handle UNSPECV_PROBE_STACK_RANGE
and UNSPECV_PROBE_STACK_ADDRESS.
(unknown_for_bundling_p): New predicate.
(group_barrier_needed): Use important_for_bundling_p.
(ia64_dfa_new_cycle): Use unknown_for_bundling_p.
(issue_nops_and_insn): Likewise.
(bundling): Likewise.
(final_emit_insn_group_barriers): Likewise.
* config/ia64/ia64-protos.h (output_probe_stack_range): Declare.
* config/ia64/hpux.h (STACK_CHECK_STATIC_BUILTIN): Define.
(STACK_CHECK_PROTECT): Likewise.
* config/ia64/linux.h (STACK_CHECK_STATIC_BUILTIN): Likewise.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@187383 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/explow.c')
-rw-r--r-- | gcc/explow.c | 21 |
1 files changed, 14 insertions, 7 deletions
diff --git a/gcc/explow.c b/gcc/explow.c index cc4391c5e8d..5513a123e3d 100644 --- a/gcc/explow.c +++ b/gcc/explow.c @@ -1525,17 +1525,24 @@ set_stack_check_libfunc (const char *libfunc_name) void emit_stack_probe (rtx address) { - rtx memref = gen_rtx_MEM (word_mode, address); +#ifdef HAVE_probe_stack_address + if (HAVE_probe_stack_address) + emit_insn (gen_probe_stack_address (address)); + else +#endif + { + rtx memref = gen_rtx_MEM (word_mode, address); - MEM_VOLATILE_P (memref) = 1; + MEM_VOLATILE_P (memref) = 1; - /* See if we have an insn to probe the stack. */ + /* See if we have an insn to probe the stack. */ #ifdef HAVE_probe_stack - if (HAVE_probe_stack) - emit_insn (gen_probe_stack (memref)); - else + if (HAVE_probe_stack) + emit_insn (gen_probe_stack (memref)); + else #endif - emit_move_insn (memref, const0_rtx); + emit_move_insn (memref, const0_rtx); + } } /* Probe a range of stack addresses from FIRST to FIRST+SIZE, inclusive. |