This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
patch for FP conditionals on rs6000
- To: gcc-patches at gcc dot gnu dot org
- Subject: patch for FP conditionals on rs6000
- From: Geoffrey Keating <geoffk at thief dot cygnus dot com>
- Date: Mon, 12 Feb 2001 11:46:54 -0800
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))
============================================================