diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 807897d060e3e88c56ba9d7d24ae60ef85d562cb..b59abe05f5f2dbd3fd8216e3cf02c10b0e958a59 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2002-12-22  Kazu Hirata  <kazu@cs.umass.edu>
+
+	* config/h8300/h8300.md (negsf2): New.
+	(*negsf2_h8300): Likewise.
+	(*negsf2_h8300hs): Likewise.
+
 2002-12-21  Geoffrey Keating  <geoffk@apple.com>
 
 	* integrate.c (output_inline_function): Don't hold private
diff --git a/gcc/config/h8300/h8300.md b/gcc/config/h8300/h8300.md
index 7b44c8873b2c18db0efac41066d0fd248800f8fa..f5254f1fce83e4835248e41f5c6af04a464a1da1 100644
--- a/gcc/config/h8300/h8300.md
+++ b/gcc/config/h8300/h8300.md
@@ -1389,6 +1389,28 @@
   [(set_attr "length" "2")
    (set_attr "cc" "set_zn")])
 
+(define_expand "negsf2"
+  [(set (match_operand:SF 0 "register_operand" "")
+	(neg:SF (match_operand:SF 1 "register_operand" "")))]
+  ""
+  "")
+
+(define_insn "*negsf2_h8300"
+  [(set (match_operand:SF 0 "register_operand" "=r")
+	(neg:SF (match_operand:SF 1 "register_operand" "0")))]
+  "TARGET_H8300"
+  "xor.b\t#128,%z0"
+  [(set_attr "cc" "clobber")
+   (set_attr "length" "2")])
+
+(define_insn "*negsf2_h8300hs"
+  [(set (match_operand:SF 0 "register_operand" "=r")
+	(neg:SF (match_operand:SF 1 "register_operand" "0")))]
+  "TARGET_H8300H || TARGET_H8300S"
+  "xor.w\t#32768,%e0"
+  [(set_attr "cc" "clobber")
+   (set_attr "length" "4")])
+
 ;; ----------------------------------------------------------------------
 ;; NOT INSTRUCTIONS
 ;; ----------------------------------------------------------------------