This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

patch for FP conditionals on rs6000



I noticed I still had this patch uncommitted in my tree.  I'm
committing it.  It's been tested on at least powerpc-eabisim.

-- 
Geoff Keating <geoffk@redhat.com>

===File ~/z=================================================
Index: ChangeLog
===================================================================
RCS file: /cvs/gcc/gcc/gcc/ChangeLog,v
retrieving revision 1.9246
diff -p -u -p -r1.9246 ChangeLog
--- ChangeLog	2001/02/12 19:39:51	1.9246
+++ ChangeLog	2001/02/12 19:45:54
@@ -1,5 +1,13 @@
 2001-02-12  Geoffrey Keating  <geoffk@redhat.com>
 
+	* config/rs6000/rs6000.c (rs6000_float_const): Remove warning.
+	(setup_incoming_varargs): Remove warning.
+
+	* config/rs6000/rs6000.c (validate_condition_mode): When
+	flag_fast_math, allow floating-point conditionals to be reversed.
+	(rs6000_generate_compare): When flag_fast_math, don't generate
+	cror operations for FP conditionals.
+
 	* config/rs6000/sysv4.h (SUBTARGET_OVERRIDE_OPTIONS): Handle
 	-mcall-i960.
 	(ASM_SPEC): Likewise.
Index: config/rs6000/rs6000.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/config/rs6000/rs6000.c,v
retrieving revision 1.167
diff -p -u -p -r1.167 rs6000.c
--- rs6000.c	2001/02/09 03:15:56	1.167
+++ rs6000.c	2001/02/12 19:45:55
@@ -471,7 +471,8 @@ rs6000_float_const (string, mode)
      const char *string;
      enum machine_mode mode;
 {
-  REAL_VALUE_TYPE value = REAL_VALUE_ATOF (string, mode);
+  REAL_VALUE_TYPE value;
+  value = REAL_VALUE_ATOF (string, mode);
   return immed_real_const_1 (value, mode);
 }
 
@@ -2206,7 +2207,7 @@ setup_incoming_varargs (cum, mode, type,
 {
   CUMULATIVE_ARGS next_cum;
   int reg_size = TARGET_32BIT ? 4 : 8;
-  rtx save_area, mem;
+  rtx save_area = NULL_RTX, mem;
   int first_reg_offset, set;
 
   if (DEFAULT_ABI == ABI_V4 || DEFAULT_ABI == ABI_SOLARIS)
@@ -3237,8 +3238,9 @@ validate_condition_mode (code, mode)
 	  || code == UNGE || code == UNLE))
     abort();
   
-  /* These should never be generated.  */
+  /* These should never be generated except for fast_math.  */
   if (mode == CCFPmode
+      && ! flag_fast_math
       && (code == LE || code == GE
 	  || code == UNEQ || code == LTGT
 	  || code == UNGT || code == UNLT))
@@ -4451,8 +4453,10 @@ rs6000_generate_compare (code)
 					   rs6000_compare_op0, 
 					   rs6000_compare_op1)));
   
-  /* Some kinds of FP comparisons need an OR operation.  */
+  /* Some kinds of FP comparisons need an OR operation;
+     except that for fast_math we don't bother.  */
   if (rs6000_compare_fp_p
+      && ! flag_fast_math
       && (code == LE || code == GE
 	  || code == UNEQ || code == LTGT
 	  || code == UNGT || code == UNLT))
============================================================


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]