diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index bab0cf09cc245657935044e089ad026ea621b328..5e6e9258005b092863a6cf2a010a5a032dbdbded 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,14 @@
+2004-06-17  Jan Hubicka  <jh@suse.cz>
+
+	PR target/15433
+	* i386.md (SSE SF cmov 0 splitter): The conditional is VOIDmode; fix
+	operand numbering in the output template.
+	(SSE DF cmov 0 splitter): The conditional is VOIDmode.
+
+2004-06-17  Jan Hubicka  <jh@suse.cz>
+
+	* except.c (can_throw_internal): Recognize RESX expresisons.
+
 2004-06-17  Jan Hubicka  <jh@suse.cz>
 
 	* cfgbuild.c (make_edges): Do not use label_value_list.
diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md
index ed2c579330b579121ad22f7d0ece655e092dd5dd..bb6aebfb04705072cfe64b11abe23c9723a2a179 100644
--- a/gcc/config/i386/i386.md
+++ b/gcc/config/i386/i386.md
@@ -18191,7 +18191,7 @@
 
 (define_split
   [(set (match_operand:SF 0 "register_operand" "")
-	(if_then_else (match_operator:SF 1 "comparison_operator"
+	(if_then_else (match_operator 1 "comparison_operator"
 			[(match_operand:SF 4 "nonimmediate_operand" "")
 			 (match_operand:SF 5 "nonimmediate_operand" "")])
 		      (match_operand:SF 2 "nonmemory_operand" "")
@@ -18217,19 +18217,19 @@
   if (const0_operand (operands[2], GET_MODE (operands[2])))
     {
       operands[7] = operands[3];
-      operands[6] = gen_rtx_NOT (V4SFmode, operands[5]);
+      operands[6] = gen_rtx_NOT (V4SFmode, operands[8]);
     }
   else
     {
       operands[7] = operands[2];
-      operands[6] = operands[0];
+      operands[6] = operands[8];
     }
   operands[7] = simplify_gen_subreg (V4SFmode, operands[7], SFmode, 0);
 })
 
 (define_split
   [(set (match_operand:DF 0 "register_operand" "")
-	(if_then_else (match_operator:DF 1 "comparison_operator"
+	(if_then_else (match_operator 1 "comparison_operator"
 			[(match_operand:DF 4 "nonimmediate_operand" "")
 			 (match_operand:DF 5 "nonimmediate_operand" "")])
 		      (match_operand:DF 2 "nonmemory_operand" "")
diff --git a/gcc/except.c b/gcc/except.c
index 7815fbb6141bf5cbaabcadb77cd06049bee71d1c..3e663dbff8af8b6f6bb4562b66ed3ebef89c4faf 100644
--- a/gcc/except.c
+++ b/gcc/except.c
@@ -3114,6 +3114,11 @@ can_throw_internal (rtx insn)
   if (! INSN_P (insn))
     return false;
 
+  if (GET_CODE (insn) == JUMP_INSN
+      && GET_CODE (PATTERN (insn)) == RESX
+      && XINT (PATTERN (insn), 0) > 0)
+    return can_throw_internal_1 (XINT (PATTERN (insn), 0));
+
   if (GET_CODE (insn) == INSN
       && GET_CODE (PATTERN (insn)) == SEQUENCE)
     insn = XVECEXP (PATTERN (insn), 0, 0);