diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 15dfb25db7f2269a46a5ef424647dccdfea36f94..76793fb896f0ff29d76a76c7ab763ae4961a848f 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,11 @@
+Mon Sep 30 14:57:18 CEST 2002  Jan Hubicka  <jh@suse.cz>
+
+	* i386.h (TARGET_CPP_CPU_BUILTINS): Define __SSE_MATH__.
+
+	* gcse.c (cprop_jump): Check that the register has not
+	been modified
+	(cprop_jump): Likewise.
+
 2002-09-30  Richard Earnshaw  <rearnsha@arm.com>
 
 	* arm.h (BASE_REG_CLASS): Always return LO_REGS for Thumb.
diff --git a/gcc/config/i386/i386.h b/gcc/config/i386/i386.h
index 68fa7409b7ea44b4995a1c64da466f63a4c903cd..af9c37fc131776369171bcaf648b75e7d3180386 100644
--- a/gcc/config/i386/i386.h
+++ b/gcc/config/i386/i386.h
@@ -529,6 +529,10 @@ extern int x86_prefetch_sse;
 	builtin_define ("__SSE__");				\
       if (TARGET_SSE2)						\
 	builtin_define ("__SSE2__");				\
+      if (TARGET_SSE_MATH && TARGET_SSE)			\
+	builtin_define ("__SSE_MATH__");			\
+      if (TARGET_SSE_MATH && TARGET_SSE2)			\
+	builtin_define ("__SSE2_MATH__");			\
 								\
       /* Built-ins based on -march=.  */			\
       if (ix86_arch == PROCESSOR_I486)				\
diff --git a/gcc/gcse.c b/gcc/gcse.c
index fbe3fcb1200782106c2f5d31ef0a3eac9be84f2e..081275a0c7de1e87728c2d40c6094f28c991455b 100644
--- a/gcc/gcse.c
+++ b/gcc/gcse.c
@@ -4054,7 +4054,9 @@ cprop_jump (bb, setcc, jump, from, src)
 
   /* First substitute in the INSN condition as the SET_SRC of the JUMP,
      then substitute that given values in this expanded JUMP.  */
-  if (setcc != NULL)
+  if (setcc != NULL
+      && !modified_between_p (from, setcc, jump)
+      && !modified_between_p (src, setcc, jump))
     {
       rtx setcc_set = single_set (setcc);
       new_set = simplify_replace_rtx (SET_SRC (set),
@@ -4068,7 +4070,7 @@ cprop_jump (bb, setcc, jump, from, src)
 
   /* If no simplification can be made, then try the next
      register.  */
-  if (rtx_equal_p (new, new_set))
+  if (rtx_equal_p (new, new_set) || rtx_equal_p (new, SET_SRC (set)))
     return 0;
 
   /* If this is now a no-op delete it, otherwise this must be a valid insn.  */
@@ -4076,6 +4078,11 @@ cprop_jump (bb, setcc, jump, from, src)
     delete_insn (jump);
   else
     {
+      /* Ensure the value computed inside the jump insn to be equivalent
+         to one computed by setcc.  */
+      if (setcc 
+	  && modified_in_p (new, setcc))
+	return 0;
       if (! validate_change (jump, &SET_SRC (set), new, 0))
 	return 0;