aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Jacobowitz <drow@mvista.com>2002-11-19 18:27:01 +0000
committerDaniel Jacobowitz <drow@gcc.gnu.org>2002-11-19 18:27:01 +0000
commit85af47b9e63a79018beeb7f19190860cb990cdba (patch)
tree791aa842a20236baa6b2332895b5ec15d1a21358
parent9675a91e9b34e7f8e0ecdcad732c58f14784d465 (diff)
downloadgcc-85af47b9e63a79018beeb7f19190860cb990cdba.zip
gcc-85af47b9e63a79018beeb7f19190860cb990cdba.tar.gz
gcc-85af47b9e63a79018beeb7f19190860cb990cdba.tar.bz2
sh.c (gen_shl_and): Revert previous patch.
* config/sh/sh.c (gen_shl_and): Revert previous patch. * config/sh/sh.md (ashrdi3+1, ashrdi3+2): Predicate on reload_completed. From-SVN: r59269
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/config/sh/sh.c28
-rw-r--r--gcc/config/sh/sh.md4
3 files changed, 15 insertions, 23 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index a4f11ed..31e3bbb 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2002-11-19 Daniel Jacobowitz <drow@mvista.com>
+
+ * config/sh/sh.c (gen_shl_and): Revert previous patch.
+ * config/sh/sh.md (ashrdi3+1, ashrdi3+2): Predicate on
+ reload_completed.
+
2002-11-19 Kazu Hirata <kazu@cs.umass.edu>
* config/h8300/h8300.c (print_operand): Update the use of
diff --git a/gcc/config/sh/sh.c b/gcc/config/sh/sh.c
index 7ea35dc..70cb0c1 100644
--- a/gcc/config/sh/sh.c
+++ b/gcc/config/sh/sh.c
@@ -1823,16 +1823,11 @@ gen_shl_and (dest, left_rtx, mask_rtx, source)
if (first < 0)
{
- enum machine_mode mode
- = ((mask << right) <= 0xff) ? QImode : HImode;
- rtx lowpart = gen_lowpart (mode, source);
-
- if (no_new_pseudos && ! TARGET_SHMEDIA
- && ! arith_reg_operand (lowpart, mode))
- return -1;
emit_insn ((mask << right) <= 0xff
- ? gen_zero_extendqisi2(dest, lowpart)
- : gen_zero_extendhisi2(dest, lowpart));
+ ? gen_zero_extendqisi2(dest,
+ gen_lowpart (QImode, source))
+ : gen_zero_extendhisi2(dest,
+ gen_lowpart (HImode, source)));
source = dest;
}
if (source != dest)
@@ -1851,18 +1846,9 @@ gen_shl_and (dest, left_rtx, mask_rtx, source)
mask <<= first;
}
if (first >= 0)
- {
- enum machine_mode mode = (mask <= 0xff) ? QImode : HImode;
- rtx lowpart = gen_lowpart (mode, dest);
-
- if (no_new_pseudos && ! TARGET_SHMEDIA
- && ! arith_reg_operand (lowpart, mode))
- return -1;
- emit_insn (mask <= 0xff
- ? gen_zero_extendqisi2(dest, lowpart)
- : gen_zero_extendhisi2(dest, lowpart));
- }
-
+ emit_insn (mask <= 0xff
+ ? gen_zero_extendqisi2(dest, gen_lowpart (QImode, dest))
+ : gen_zero_extendhisi2(dest, gen_lowpart (HImode, dest)));
if (total_shift > 0)
{
operands[2] = GEN_INT (total_shift);
diff --git a/gcc/config/sh/sh.md b/gcc/config/sh/sh.md
index d57583b..ed14fbd 100644
--- a/gcc/config/sh/sh.md
+++ b/gcc/config/sh/sh.md
@@ -2694,7 +2694,7 @@
(and:SI (ashift:SI (match_operand:SI 1 "register_operand" "")
(match_operand:SI 2 "const_int_operand" ""))
(match_operand:SI 3 "const_int_operand" "")))]
- "TARGET_SH1 && (unsigned)INTVAL (operands[2]) < 32"
+ "TARGET_SH1 && reload_completed && (unsigned)INTVAL (operands[2]) < 32"
[(use (reg:SI R0_REG))]
"if (gen_shl_and (operands[0], operands[2], operands[3], operands[1])) FAIL;
DONE;")
@@ -2705,7 +2705,7 @@
(match_operand:SI 2 "const_int_operand" ""))
(match_operand:SI 3 "const_int_operand" "")))
(clobber (reg:SI T_REG))]
- "TARGET_SH1 && (unsigned)INTVAL (operands[2]) < 32"
+ "TARGET_SH1 && reload_completed && (unsigned)INTVAL (operands[2]) < 32"
[(use (reg:SI R0_REG))]
"if (gen_shl_and (operands[0], operands[2], operands[3], operands[1])) FAIL;
DONE;")