diff options
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 8 | ||||
-rw-r--r-- | gcc/config/bfin/bfin.md | 46 |
2 files changed, 32 insertions, 22 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 8124e22..76908e5 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,13 @@ 2011-05-03 Stuart Henderson <shenders@gcc.gnu.org> + From Bernd Schmidt: + * config/bfin/bfin.md (MOVCC): New mode_macro. + (mov<mode>cc_insn1, mov<mode>cc_insn2, mov<mode>cc): Renamed from + movsicc_insn1, movsicc_insn2 and movsicc and macroized. Remove + comments from generated assembly. + +2011-05-03 Stuart Henderson <shenders@gcc.gnu.org> + From Bernd Schmidt * config/bfin/t-bfin (LIB1ASMFUNCS): Add muldi3 and umulsi3_highpart. * config/bfin/t-bfin-elf (LIB1ASMFUNCS): Add muldi3. diff --git a/gcc/config/bfin/bfin.md b/gcc/config/bfin/bfin.md index 6f2c7a6..c4722d4 100644 --- a/gcc/config/bfin/bfin.md +++ b/gcc/config/bfin/bfin.md @@ -415,44 +415,46 @@ ;; Conditional moves -(define_expand "movsicc" - [(set (match_operand:SI 0 "register_operand" "") - (if_then_else:SI (match_operand 1 "comparison_operator" "") - (match_operand:SI 2 "register_operand" "") - (match_operand:SI 3 "register_operand" "")))] +(define_mode_iterator CCMOV [QI HI SI]) + +(define_expand "mov<mode>cc" + [(set (match_operand:CCMOV 0 "register_operand" "") + (if_then_else:CCMOV (match_operand 1 "comparison_operator" "") + (match_operand:CCMOV 2 "register_operand" "") + (match_operand:CCMOV 3 "register_operand" "")))] "" { - operands[1] = bfin_gen_compare (operands[1], SImode); + operands[1] = bfin_gen_compare (operands[1], <MODE>mode); }) -(define_insn "*movsicc_insn1" - [(set (match_operand:SI 0 "register_operand" "=da,da,da") - (if_then_else:SI +(define_insn "*mov<mode>cc_insn1" + [(set (match_operand:CCMOV 0 "register_operand" "=da,da,da") + (if_then_else:CCMOV (eq:BI (match_operand:BI 3 "register_operand" "C,C,C") (const_int 0)) - (match_operand:SI 1 "register_operand" "da,0,da") - (match_operand:SI 2 "register_operand" "0,da,da")))] + (match_operand:CCMOV 1 "register_operand" "da,0,da") + (match_operand:CCMOV 2 "register_operand" "0,da,da")))] "" "@ - if !cc %0 =%1; /* movsicc-1a */ - if cc %0 =%2; /* movsicc-1b */ - if !cc %0 =%1; if cc %0=%2; /* movsicc-1 */" + if !cc %0 = %1; + if cc %0 = %2; + if !cc %0 = %1; if cc %0 = %2;" [(set_attr "length" "2,2,4") (set_attr "type" "movcc") (set_attr "seq_insns" "*,*,multi")]) -(define_insn "*movsicc_insn2" - [(set (match_operand:SI 0 "register_operand" "=da,da,da") - (if_then_else:SI +(define_insn "*mov<mode>cc_insn2" + [(set (match_operand:CCMOV 0 "register_operand" "=da,da,da") + (if_then_else:CCMOV (ne:BI (match_operand:BI 3 "register_operand" "C,C,C") (const_int 0)) - (match_operand:SI 1 "register_operand" "0,da,da") - (match_operand:SI 2 "register_operand" "da,0,da")))] + (match_operand:CCMOV 1 "register_operand" "0,da,da") + (match_operand:CCMOV 2 "register_operand" "da,0,da")))] "" "@ - if !cc %0 =%2; /* movsicc-2b */ - if cc %0 =%1; /* movsicc-2a */ - if cc %0 =%1; if !cc %0=%2; /* movsicc-1 */" + if !cc %0 = %2; + if cc %0 = %1; + if cc %0 = %1; if !cc %0 = %2;" [(set_attr "length" "2,2,4") (set_attr "type" "movcc") (set_attr "seq_insns" "*,*,multi")]) |