mirror of git://gcc.gnu.org/git/gcc.git
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>
|
2016-04-29 Uros Bizjak <ubizjak@gmail.com>
|
||||||
|
|
||||||
* config/i386/i386.md
|
* config/i386/i386.md
|
||||||
|
|
|
||||||
|
|
@ -88,6 +88,7 @@
|
||||||
UNSPEC_SET_GOT_OFFSET
|
UNSPEC_SET_GOT_OFFSET
|
||||||
UNSPEC_MEMORY_BLOCKAGE
|
UNSPEC_MEMORY_BLOCKAGE
|
||||||
UNSPEC_STACK_CHECK
|
UNSPEC_STACK_CHECK
|
||||||
|
UNSPEC_PROBE_STACK
|
||||||
|
|
||||||
;; TLS support
|
;; TLS support
|
||||||
UNSPEC_TP
|
UNSPEC_TP
|
||||||
|
|
@ -17552,6 +17553,30 @@
|
||||||
DONE;
|
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>"
|
(define_insn "adjust_stack_and_probe<mode>"
|
||||||
[(set (match_operand:P 0 "register_operand" "=r")
|
[(set (match_operand:P 0 "register_operand" "=r")
|
||||||
(unspec_volatile:P [(match_operand:P 1 "register_operand" "0")]
|
(unspec_volatile:P [(match_operand:P 1 "register_operand" "0")]
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue