diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 65e8ed77067dd771e1faf5914686d18af4f2f0f4..114be4503a81b7b12f56ef34e516917468f2dc80 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,7 @@
+2002-12-23  Kazu Hirata  <kazu@cs.umass.edu>
+
+	* config/h8300/h8300.c (output_a_shift): Remove unused code.
+
 2002-12-22  Mark Mitchell  <mark@codesourcery.com>
 
 	* stor-layout.c (update_alignment_for_field): Guard use of
diff --git a/gcc/config/h8300/h8300.c b/gcc/config/h8300/h8300.c
index 0eb973dc078f5db059f2690631f2413965afc1dc..6d8cbb637a1918f52e1808ab4fa9a1845b3091f3 100644
--- a/gcc/config/h8300/h8300.c
+++ b/gcc/config/h8300/h8300.c
@@ -3104,29 +3104,15 @@ output_a_shift (operands)
 	      output_asm_insn (info.shift1, operands);
 
 	    /* Now mask off the high bits.  */
-	    switch (mode)
-	      {
-	      case QImode:
-		sprintf (insn_buf, "and\t#%d,%%X0", mask);
-		cc_status.value1 = operands[0];
-		cc_status.flags |= CC_NO_CARRY;
-		break;
-	      case HImode:
-		if (TARGET_H8300)
-		  {
-		    sprintf (insn_buf, "and\t#%d,%%s0\n\tand\t#%d,%%t0",
-			     mask & 255, mask >> 8);
-		  }
-		else
-		  {
-		    sprintf (insn_buf, "and.w\t#%d,%%T0", mask);
-		    cc_status.value1 = operands[0];
-		    cc_status.flags |= CC_NO_CARRY;
-		  }
-		break;
-	      default:
-		abort ();
-	      }
+	    if (mode == QImode)
+	      sprintf (insn_buf, "and\t#%d,%%X0", mask);
+	    else if (mode == HImode && (TARGET_H8300H || TARGET_H8300S))
+	      sprintf (insn_buf, "and.w\t#%d,%%T0", mask);
+	    else
+	      abort ();
+
+	    cc_status.value1 = operands[0];
+	    cc_status.flags |= CC_NO_CARRY;
 	    output_asm_insn (insn_buf, operands);
 	    return "";
 	  }