From 61fb6bac57de2f2dc9fea793c0050fea84d52ab8 Mon Sep 17 00:00:00 2001 From: "J\"orn Rennecke" Date: Fri, 15 May 1998 03:26:52 +0000 Subject: [PATCH] sh.c (gen_shl_and): Don't sign extend constant for kind two. * sh.c (gen_shl_and): Don't sign extend constant for kind two. Abort if trying to split kind 3 or 4 outside of combine. From-SVN: r19772 --- gcc/ChangeLog | 5 +++++ gcc/config/sh/sh.c | 6 +++++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 0f06f62e95f..f3c35da89b7 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +Fri May 15 11:21:16 1998 J"orn Rennecke + + * sh.c (gen_shl_and): Don't sign extend constant for kind two. + Abort if trying to split kind 3 or 4 outside of combine. + Fri May 15 01:47:37 1998 Jeffrey A Law (law@cygnus.com) * mips.c (print_operand, case 'x'): Use HOST_WIDE_INT_PRINT_HEX. diff --git a/gcc/config/sh/sh.c b/gcc/config/sh/sh.c index f9a3caa874e..ac30a6676fa 100644 --- a/gcc/config/sh/sh.c +++ b/gcc/config/sh/sh.c @@ -1335,13 +1335,13 @@ gen_shl_and (dest, left_rtx, mask_rtx, source) } case 4: shift_gen_fun = gen_shifty_op; - case 2: case 3: /* If the topmost bit that matters is set, set the topmost bits that don't matter. This way, we might be able to get a shorter signed constant. */ if (mask & ((HOST_WIDE_INT)1 << 31 - total_shift)) mask |= (HOST_WIDE_INT)~0 << (31 - total_shift); + case 2: /* Don't expand fine-grained when combining, because that will make the pattern fail. */ if (rtx_equal_function_value_matters @@ -1349,6 +1349,10 @@ gen_shl_and (dest, left_rtx, mask_rtx, source) { rtx operands[3]; + /* Cases 3 and 4 should be handled by this split + only while combining */ + if (kind > 2) + abort (); if (right) { emit_insn (gen_lshrsi3 (dest, source, GEN_INT (right))); -- 2.30.2