diff options
Diffstat (limited to 'contrib/gcc/config/ia64/ia64.md')
-rw-r--r-- | contrib/gcc/config/ia64/ia64.md | 33 |
1 files changed, 32 insertions, 1 deletions
diff --git a/contrib/gcc/config/ia64/ia64.md b/contrib/gcc/config/ia64/ia64.md index c88e8b0..7b11c06 100644 --- a/contrib/gcc/config/ia64/ia64.md +++ b/contrib/gcc/config/ia64/ia64.md @@ -4848,7 +4848,7 @@ [(set (match_operand:DI 0 "register_operand" "=r,r,r") (plus:DI (match_operand:DI 1 "register_operand" "%r,r,a") (match_operand:DI 2 "gr_reg_or_22bit_operand" "r,I,J"))) - (set (match_operand:DI 3 "register_operand" "=r,r,r") + (set (match_operand:DI 3 "register_operand" "+r,r,r") (match_dup 3))] "" "@ @@ -5045,6 +5045,37 @@ [(set_attr "itanium_class" "stop_bit") (set_attr "predicable" "no")]) +(define_expand "trap" + [(trap_if (const_int 1) (const_int 0))] + "" + "") + +;; ??? We don't have a match-any slot type. Setting the type to unknown +;; produces worse code that setting the slot type to A. + +(define_insn "*trap" + [(trap_if (const_int 1) (match_operand 0 "const_int_operand" ""))] + "" + "break %0" + [(set_attr "itanium_class" "chk_s")]) + +(define_expand "conditional_trap" + [(trap_if (match_operand 0 "" "") (match_operand 1 "" ""))] + "" +{ + operands[0] = ia64_expand_compare (GET_CODE (operands[0]), VOIDmode); +}) + +(define_insn "*conditional_trap" + [(trap_if (match_operator 0 "predicate_operator" + [(match_operand:BI 1 "register_operand" "c") + (const_int 0)]) + (match_operand 2 "const_int_operand" ""))] + "" + "(%J0) break %2" + [(set_attr "itanium_class" "chk_s") + (set_attr "predicable" "no")]) + (define_insn "break_f" [(unspec_volatile [(const_int 0)] 3)] "" |