diff options
-rw-r--r-- | gcc/config/sh/sh.md | 43 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/sh/pr52933-1.c | 2 | ||||
-rw-r--r-- | libgcc/ChangeLog | 7 | ||||
-rw-r--r-- | libgcc/config/sh/t-linux | 2 | ||||
-rw-r--r-- | libgcc/config/sh/t-netbsd | 1 | ||||
-rw-r--r-- | libgcc/config/sh/t-sh | 2 |
6 files changed, 43 insertions, 14 deletions
diff --git a/gcc/config/sh/sh.md b/gcc/config/sh/sh.md index 7a1c4d3..6a61984 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 037f916..4f2dc98 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 683d2d1..693f395 100644 --- a/libgcc/ChangeLog +++ b/libgcc/ChangeLog @@ -1,3 +1,10 @@ +2012-10-04 Oleg Endo <olegendo@gcc.gnu.org> + + 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 <olegendo@gcc.gnu.org> PR target/50457 diff --git a/libgcc/config/sh/t-linux b/libgcc/config/sh/t-linux index 60dee8d..d316db9 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 3c5739e..93fe287 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 efbaff8..61cfe79 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 - |