diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 0390e7a58b8..601d8fa352e 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,7 @@ +Mon Apr 27 20:22:08 1998 J"orn Rennecke + + * sh.c (gen_ashift_hi): Don't make SUBREG of a SUBREG. + Mon Apr 27 18:23:51 1998 J"orn Rennecke * sh.c (sh_expand_prologue, sh_expand_epilogue): diff --git a/gcc/config/sh/sh.c b/gcc/config/sh/sh.c index 03f6b8a5f5a..7e4fa2c93a1 100644 --- a/gcc/config/sh/sh.c +++ b/gcc/config/sh/sh.c @@ -922,8 +922,16 @@ gen_ashift_hi (type, n, reg) zero/sign extension. gen_ashift_hi is only called in contexts where we know that the sign extension works out correctly. */ - gen_ashift (type, n, gen_rtx_SUBREG (SImode, reg, 0)); - break; + { + int word = 0; + if (GET_CODE (reg) == SUBREG) + { + word = SUBREG_WORD (reg); + reg = SUBREG_REG (reg); + } + gen_ashift (type, n, gen_rtx_SUBREG (SImode, reg, word)); + break; + } case ASHIFT: emit_insn (gen_ashlhi3_k (reg, reg, GEN_INT (n))); break;