i386.md (unspec): Add UNSPEC_PROBE_STACK.
* config/i386/i386.md (unspec): Add UNSPEC_PROBE_STACK. (probe_stack): New expander. (probe_stack_<mode>): New insn pattern. From-SVN: r235642
This commit is contained in:
parent
b891ade601
commit
febaf72616
@ -1,3 +1,9 @@
|
||||
2016-04-29 Uros Bizjak <ubizjak@gmail.com>
|
||||
|
||||
* config/i386/i386.md (unspec): Add UNSPEC_PROBE_STACK.
|
||||
(probe_stack): New expander.
|
||||
(probe_stack_<mode>): New insn pattern.
|
||||
|
||||
2016-04-29 Uros Bizjak <ubizjak@gmail.com>
|
||||
|
||||
* config/i386/i386.md
|
||||
|
@ -88,6 +88,7 @@
|
||||
UNSPEC_SET_GOT_OFFSET
|
||||
UNSPEC_MEMORY_BLOCKAGE
|
||||
UNSPEC_STACK_CHECK
|
||||
UNSPEC_PROBE_STACK
|
||||
|
||||
;; TLS support
|
||||
UNSPEC_TP
|
||||
@ -17552,6 +17553,30 @@
|
||||
DONE;
|
||||
})
|
||||
|
||||
(define_expand "probe_stack"
|
||||
[(match_operand 0 "memory_operand")]
|
||||
""
|
||||
{
|
||||
rtx (*insn) (rtx, rtx)
|
||||
= (GET_MODE (operands[0]) == DImode
|
||||
? gen_probe_stack_di : gen_probe_stack_si);
|
||||
|
||||
emit_insn (insn (operands[0], const0_rtx));
|
||||
DONE;
|
||||
})
|
||||
|
||||
;; Use OR for stack probes, this is shorter.
|
||||
(define_insn "probe_stack_<mode>"
|
||||
[(set (match_operand:W 0 "memory_operand" "=m")
|
||||
(unspec:W [(match_operand:W 1 "const0_operand")]
|
||||
UNSPEC_PROBE_STACK))
|
||||
(clobber (reg:CC FLAGS_REG))]
|
||||
""
|
||||
"or{<imodesuffix>}\t{%1, %0|%0, %1}"
|
||||
[(set_attr "type" "alu1")
|
||||
(set_attr "mode" "<MODE>")
|
||||
(set_attr "length_immediate" "1")])
|
||||
|
||||
(define_insn "adjust_stack_and_probe<mode>"
|
||||
[(set (match_operand:P 0 "register_operand" "=r")
|
||||
(unspec_volatile:P [(match_operand:P 1 "register_operand" "0")]
|
||||
|
Loading…
Reference in New Issue
Block a user