diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 364c1f561d53ea1d66acecde6ebdad639d67436e..caf1f4bce781e6ce4170c43dc08c3c358cdad9a7 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,7 @@
+2002-12-11  Kazu Hirata  <kazu@cs.umass.edu>
+
+	* config/h8300/h8300.md (two define_peephole2): New.
+
 2002-12-11  Kazu Hirata  <kazu@cs.umass.edu>
 
 	* config/h8300/h8300.h (CONST_OK_FOR_J): Remove.
diff --git a/gcc/config/h8300/h8300.md b/gcc/config/h8300/h8300.md
index b1d39d7d663240361031de5cf0b7b939f313a7ca..051b81fa693601c6f98d138418f0bb867cb99520 100644
--- a/gcc/config/h8300/h8300.md
+++ b/gcc/config/h8300/h8300.md
@@ -2689,3 +2689,59 @@
 	      (set (mem:SI (plus:SI (reg:SI SP_REG) (const_int -8)))
 		   (match_dup 1))])]
   "")
+
+;; Turn
+;;
+;;   mov.w #2,r0
+;;   add.w r7,r0  (6 bytes)
+;;
+;; into
+;;
+;;   mov.w r7,r0
+;;   adds  #2,r0  (4 bytes)
+
+(define_peephole2
+  [(set (match_operand:HI 0 "register_operand" "")
+	(match_operand:HI 1 "const_int_operand" ""))
+   (set (match_dup 0)
+	(plus:HI (match_dup 0)
+		 (match_operand:HI 2 "register_operand" "")))]
+  "REG_P (operands[0]) && REG_P (operands[2])
+   && REGNO (operands[0]) != REGNO (operands[2])
+   && (CONST_OK_FOR_L (INTVAL (operands[1]))
+       || CONST_OK_FOR_N (INTVAL (operands[1])))"
+  [(set (match_dup 0)
+	(match_dup 2))
+   (set (match_dup 0)
+	(plus:HI (match_dup 0)
+		 (match_dup 1)))]
+  "")
+
+;; Turn
+;;
+;;   sub.l  er0,er0
+;;   add.b  #4,r0l
+;;   add.l  er7,er0  (6 bytes)
+;;
+;; into
+;;
+;;   mov.l  er7,er0
+;;   adds   #4,er0   (4 bytes)
+
+(define_peephole2
+  [(set (match_operand:SI 0 "register_operand" "")
+	(match_operand:SI 1 "const_int_operand" ""))
+   (set (match_dup 0)
+	(plus:SI (match_dup 0)
+		 (match_operand:SI 2 "register_operand" "")))]
+  "(TARGET_H8300H || TARGET_H8300S)
+   && REG_P (operands[0]) && REG_P (operands[2])
+   && REGNO (operands[0]) != REGNO (operands[2])
+   && (CONST_OK_FOR_L (INTVAL (operands[1]))
+       || CONST_OK_FOR_N (INTVAL (operands[1])))"
+  [(set (match_dup 0)
+	(match_dup 2))
+   (set (match_dup 0)
+	(plus:SI (match_dup 0)
+		 (match_dup 1)))]
+  "")