diff --git a/gcc/config/sh/sh.md b/gcc/config/sh/sh.md index 7a1c4d33a58..6a619845897 100644 --- a/gcc/config/sh/sh.md +++ b/gcc/config/sh/sh.md @@ -835,9 +835,13 @@ (define_insn_and_split "*cmp_div0s_1" [(set (match_operand:SI 0 "arith_reg_dest" "") - (ge:SI (xor:SI (match_operand:SI 1 "arith_reg_operand" "") - (match_operand:SI 2 "arith_reg_operand" "")) - (const_int 0))) +;; (ge:SI (xor:SI (match_operand:SI 1 "arith_reg_operand" "") +;; (match_operand:SI 2 "arith_reg_operand" "")) +;; (const_int 0))) + (xor:SI (lshiftrt:SI (match_operand:SI 1 "arith_reg_operand") + (const_int 31)) + (ge:SI (match_operand:SI 2 "arith_reg_operand") + (const_int 0)))) (clobber (reg:SI T_REG))] "TARGET_SH1" "#" @@ -853,9 +857,13 @@ (define_insn_and_split "*cmp_div0s_1" [(set (reg:SI T_REG) - (ge:SI (xor:SI (match_operand:SI 0 "arith_reg_operand" "") - (match_operand:SI 1 "arith_reg_operand" "")) - (const_int 0)))] +;; (ge:SI (xor:SI (match_operand:SI 0 "arith_reg_operand" "") +;; (match_operand:SI 1 "arith_reg_operand" "")) +;; (const_int 0)))] + (eq:SI (lshiftrt:SI (match_operand:SI 0 "arith_reg_operand") + (const_int 31)) + (ge:SI (match_operand:SI 1 "arith_reg_operand") + (const_int 0))))] "TARGET_SH1" "#" "&& can_create_pseudo_p ()" @@ -1002,9 +1010,13 @@ (define_insn_and_split "*cbranch_div0s" [(set (pc) - (if_then_else (ge (xor:SI (match_operand:SI 0 "arith_reg_operand" "") - (match_operand:SI 1 "arith_reg_operand" "")) - (const_int 0)) +;; (if_then_else (ge (xor:SI (match_operand:SI 0 "arith_reg_operand" "") +;; (match_operand:SI 1 "arith_reg_operand" "")) +;; (const_int 0)) + (if_then_else (eq (lshiftrt:SI (match_operand:SI 0 "arith_reg_operand") + (const_int 31)) + (ge:SI (match_operand:SI 1 "arith_reg_operand") + (const_int 0))) (label_ref (match_operand 2)) (pc))) (clobber (reg:SI T_REG))] @@ -10669,6 +10681,19 @@ label: DONE; }) +;; The *cstoresi pattern is for combine, so that it can apply some +;; comparison canonicalization if it hasn't been done before. +(define_insn_and_split "*cstoresi" + [(set (match_operand:SI 0 "arith_reg_dest") + (ge:SI (match_operand:SI 1 "arith_reg_operand") + (const_int 0))) + (clobber (reg:SI T_REG))] + "TARGET_SH1" + "#" + "&& 1" + [(set (reg:SI T_REG) (ge:SI (match_dup 1) (const_int 0))) + (set (match_dup 0) (reg:SI T_REG))]) + (define_expand "cstoredi4" [(set (match_operand:SI 0 "register_operand" "=r") (match_operator:SI 1 "comparison_operator" diff --git a/gcc/testsuite/gcc.target/sh/pr52933-1.c b/gcc/testsuite/gcc.target/sh/pr52933-1.c index 037f916f34f..4f2dc9821af 100644 --- a/gcc/testsuite/gcc.target/sh/pr52933-1.c +++ b/gcc/testsuite/gcc.target/sh/pr52933-1.c @@ -8,7 +8,7 @@ /* { dg-final { scan-assembler-times "div0s" 25 } } */ /* { dg-final { scan-assembler-not "tst" } } */ -typedef unsigned char bool; +// typedef unsigned char bool; int other_func_a (int, int); int other_func_b (int, int); diff --git a/libgcc/ChangeLog b/libgcc/ChangeLog index 683d2d113aa..693f395b6da 100644 --- a/libgcc/ChangeLog +++ b/libgcc/ChangeLog @@ -1,3 +1,10 @@ +2012-10-04 Oleg Endo + + PR target/33135 + * config/sh/t-sh (HOST_LIBGCC2_CFLAGS): Delete. + * config/sh/t-netbsd (HOST_LIBGCC2_CFLAGS): Delete. + * config/sh/t-linux (HOST_LIBGCC2_CFLAGS): Remove mieee option. + 2012-10-03 Oleg Endo PR target/50457 diff --git a/libgcc/config/sh/t-linux b/libgcc/config/sh/t-linux index 60dee8de11a..d316db93708 100644 --- a/libgcc/config/sh/t-linux +++ b/libgcc/config/sh/t-linux @@ -2,7 +2,7 @@ LIB1ASMFUNCS_CACHE = _ic_invalidate _ic_invalidate_array LIB2ADD = $(srcdir)/config/sh/linux-atomic.c -HOST_LIBGCC2_CFLAGS += -mieee -DNO_FPSCR_VALUES +HOST_LIBGCC2_CFLAGS += -DNO_FPSCR_VALUES # Silence atomic built-in related warnings in linux-atomic.c. # Unfortunately the conflicting types warning can't be disabled selectively. diff --git a/libgcc/config/sh/t-netbsd b/libgcc/config/sh/t-netbsd index 3c5739e2ffc..93fe287e5c8 100644 --- a/libgcc/config/sh/t-netbsd +++ b/libgcc/config/sh/t-netbsd @@ -1,3 +1,2 @@ LIB1ASMFUNCS_CACHE = _ic_invalidate -HOST_LIBGCC2_CFLAGS += -mieee diff --git a/libgcc/config/sh/t-sh b/libgcc/config/sh/t-sh index efbaff8479e..61cfe79a6f8 100644 --- a/libgcc/config/sh/t-sh +++ b/libgcc/config/sh/t-sh @@ -59,5 +59,3 @@ div_table-4-300.o: $(srcdir)/config/sh/lib1funcs-4-300.S libgcc-4-300.a: div_table-4-300.o $(AR_CREATE_FOR_TARGET) $@ div_table-4-300.o -HOST_LIBGCC2_CFLAGS += -mieee -