i386 fix

Jan Hubicka jh@suse.cz
Sat Jan 6 13:53:00 GMT 2001


Hi
The i386.c attempts to always use reverse_condition on comparison
codes sometimes resulting in UNKNOWN causing it to crash few
function later.

So led  6 22:32:32 CET 2001  Jan Hubicka  <jh@suse.cz>

	* i386.c (ix86_expand_int_movcc): Take care to reverse fp conditions
	properly.

*** /p1/gcc/config/i386/i386.c	Sat Jan  6 17:04:11 2001
--- i386.c	Sat Jan  6 22:25:04 2001
*************** ix86_expand_int_movcc (operands)
*** 5395,5402 ****
  	  HOST_WIDE_INT tmp;
  	  tmp = ct, ct = cf, cf = tmp;
  	  diff = -diff;
! 	  compare_code = reverse_condition (compare_code);
! 	  code = reverse_condition (code);
  	}
        if (diff == 1 || diff == 2 || diff == 4 || diff == 8
  	  || diff == 3 || diff == 5 || diff == 9)
--- 5395,5410 ----
  	  HOST_WIDE_INT tmp;
  	  tmp = ct, ct = cf, cf = tmp;
  	  diff = -diff;
! 	  if (FLOAT_MODE_P (GET_MODE (ix86_compare_op0)))
! 	    {
! 	      compare_code = reverse_condition_maybe_unordered (compare_code);
! 	      code = reverse_condition_maybe_unordered (code);
! 	    }
! 	  else
! 	    {
! 	      compare_code = reverse_condition (compare_code);
! 	      code = reverse_condition (code);
! 	    }
  	}
        if (diff == 1 || diff == 2 || diff == 4 || diff == 8
  	  || diff == 3 || diff == 5 || diff == 9)
*************** ix86_expand_int_movcc (operands)
*** 5485,5492 ****
  	    {
  	      ct = cf;
  	      cf = 0;
! 	      compare_code = reverse_condition (compare_code);
! 	      code = reverse_condition (code);
  	    }
  
  	  out = emit_store_flag (out, code, ix86_compare_op0,
--- 5493,5508 ----
  	    {
  	      ct = cf;
  	      cf = 0;
! 	      if (FLOAT_MODE_P (GET_MODE (ix86_compare_op0)))
! 		{
! 		  compare_code = reverse_condition_maybe_unordered (compare_code);
! 		  code = reverse_condition_maybe_unordered (code);
! 		}
! 	      else
! 		{
! 		  compare_code = reverse_condition (compare_code);
! 		  code = reverse_condition (code);
! 		}
  	    }
  
  	  out = emit_store_flag (out, code, ix86_compare_op0,


More information about the Gcc-patches mailing list