diff options
Diffstat (limited to 'gcc/config/bfin/bfin.md')
-rw-r--r-- | gcc/config/bfin/bfin.md | 22 |
1 files changed, 13 insertions, 9 deletions
diff --git a/gcc/config/bfin/bfin.md b/gcc/config/bfin/bfin.md index 903c8bb076f..a96d1a7bda6 100644 --- a/gcc/config/bfin/bfin.md +++ b/gcc/config/bfin/bfin.md @@ -1461,12 +1461,19 @@ "%0 = ~%1;" [(set_attr "type" "alu0")]) +(define_expand "clrsbsi2" + [(set (match_dup 2) + (clrsb:HI (match_operand:SI 1 "register_operand" "d"))) + (set (match_operand:SI 0 "register_operand") + (zero_extend:SI (match_dup 2)))] + "" +{ + operands[2] = gen_reg_rtx (HImode); +}) + (define_insn "signbitssi2" [(set (match_operand:HI 0 "register_operand" "=d") - (if_then_else:HI - (lt (match_operand:SI 1 "register_operand" "d") (const_int 0)) - (clz:HI (not:SI (match_dup 1))) - (clz:HI (match_dup 1))))] + (clrsb:HI (match_operand:SI 1 "register_operand" "d")))] "" "%h0 = signbits %1%!" [(set_attr "type" "dsp32")]) @@ -1518,12 +1525,9 @@ "%0 = -%1 (V)%!" [(set_attr "type" "dsp32")]) -(define_insn "signbitshi2" +(define_insn "clrsbhi2" [(set (match_operand:HI 0 "register_operand" "=d") - (if_then_else:HI - (lt (match_operand:HI 1 "register_operand" "d") (const_int 0)) - (clz:HI (not:HI (match_dup 1))) - (clz:HI (match_dup 1))))] + (clrsb:HI (match_operand:HI 1 "register_operand" "d")))] "" "%h0 = signbits %h1%!" [(set_attr "type" "dsp32")]) |