OSDN Git Service

* combine.c (combine_simplify_rtx): Give FLOAT_STORE_FLAG_VALUE a mode.
authorrth <rth@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 18 Jan 2000 00:30:17 +0000 (00:30 +0000)
committerrth <rth@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 18 Jan 2000 00:30:17 +0000 (00:30 +0000)
        * cse.c (find_comparison_args, fold_rtx): Likewise.
        * integrate.c (subst_constants): Likewise.
        * loop.c (get_condition): Likewise.

        * tm.texi (FLOAT_STORE_FLAG_VALUE): Update docs.

        * alpha.h (FLOAT_STORE_FLAG_VALUE): Use REAL_VALUE_ATOF.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@31479 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/combine.c
gcc/config/alpha/alpha.h
gcc/cse.c
gcc/integrate.c
gcc/loop.c
gcc/tm.texi

index d884eae..e1f1277 100644 (file)
@@ -1,3 +1,14 @@
+2000-01-17  Richard Henderson  <rth@cygnus.com>
+
+       * combine.c (combine_simplify_rtx): Give FLOAT_STORE_FLAG_VALUE a mode.
+       * cse.c (find_comparison_args, fold_rtx): Likewise.
+       * integrate.c (subst_constants): Likewise.
+       * loop.c (get_condition): Likewise.
+
+       * tm.texi (FLOAT_STORE_FLAG_VALUE): Update docs.
+
+       * alpha.h (FLOAT_STORE_FLAG_VALUE): Use REAL_VALUE_ATOF.
+
 2000-01-18  Martin v. Löwis  <loewis@informatik.hu-berlin.de>
 
        * c-parse.in (SAVE_WARN_FLAGS): Create an INTEGER_CST.
index 4bf6dd8..99fe499 100644 (file)
@@ -3555,9 +3555,13 @@ combine_simplify_rtx (x, op0_mode, last, in_dest)
       temp = simplify_relational_operation (code, op0_mode,
                                            XEXP (x, 0), XEXP (x, 1));
 #ifdef FLOAT_STORE_FLAG_VALUE
-      if (temp != 0 && GET_MODE_CLASS (GET_MODE (x)) == MODE_FLOAT)
-       temp = ((temp == const0_rtx) ? CONST0_RTX (GET_MODE (x))
-               : immed_real_const_1 (FLOAT_STORE_FLAG_VALUE, GET_MODE (x)));
+      if (temp != 0 && GET_MODE_CLASS (mode) == MODE_FLOAT)
+       {
+         if (temp == const0_rtx)
+           temp = CONST0_RTX (mode);
+         else
+           temp = immed_real_const_1 (FLOAT_STORE_FLAG_VALUE (mode), mode);
+       }
 #endif
       break;
     case 'c':
index 09f8974..cf88a9a 100644 (file)
@@ -1674,7 +1674,8 @@ do {                                                                      \
 
 /* Define the value returned by a floating-point comparison instruction.  */
 
-#define FLOAT_STORE_FLAG_VALUE (TARGET_FLOAT_VAX ? 0.5 : 2.0)
+#define FLOAT_STORE_FLAG_VALUE(MODE) \
+  REAL_VALUE_ATOF ((TARGET_FLOAT_VAX ? "0.5" : "2.0"), (MODE))
 
 /* Canonicalize a comparison from one we don't have to one we do have.  */
 
index 40d30a7..b346199 100644 (file)
--- a/gcc/cse.c
+++ b/gcc/cse.c
@@ -2899,7 +2899,8 @@ find_comparison_args (code, parg1, parg2, pmode1, pmode2)
                  && code == LT && STORE_FLAG_VALUE == -1)
 #ifdef FLOAT_STORE_FLAG_VALUE
              || (GET_MODE_CLASS (GET_MODE (arg1)) == MODE_FLOAT
-                 && FLOAT_STORE_FLAG_VALUE < 0)
+                 && (REAL_VALUE_NEGATIVE
+                     (FLOAT_STORE_FLAG_VALUE (GET_MODE (arg1)))))
 #endif
              )
            x = arg1;
@@ -2908,7 +2909,8 @@ find_comparison_args (code, parg1, parg2, pmode1, pmode2)
                       && code == GE && STORE_FLAG_VALUE == -1)
 #ifdef FLOAT_STORE_FLAG_VALUE
                   || (GET_MODE_CLASS (GET_MODE (arg1)) == MODE_FLOAT
-                      && FLOAT_STORE_FLAG_VALUE < 0)
+                      && (REAL_VALUE_NEGATIVE
+                          (FLOAT_STORE_FLAG_VALUE (GET_MODE (arg1)))))
 #endif
                   )
            x = arg1, reverse_code = 1;
@@ -2954,7 +2956,8 @@ find_comparison_args (code, parg1, parg2, pmode1, pmode2)
 #ifdef FLOAT_STORE_FLAG_VALUE
                   || (code == LT
                       && GET_MODE_CLASS (inner_mode) == MODE_FLOAT
-                      && FLOAT_STORE_FLAG_VALUE < 0)
+                      && (REAL_VALUE_NEGATIVE
+                          (FLOAT_STORE_FLAG_VALUE (GET_MODE (arg1)))))
 #endif
                   )
                  && GET_RTX_CLASS (GET_CODE (p->exp)) == '<'))
@@ -2973,7 +2976,8 @@ find_comparison_args (code, parg1, parg2, pmode1, pmode2)
 #ifdef FLOAT_STORE_FLAG_VALUE
                    || (code == GE
                        && GET_MODE_CLASS (inner_mode) == MODE_FLOAT
-                       && FLOAT_STORE_FLAG_VALUE < 0)
+                       && (REAL_VALUE_NEGATIVE
+                           (FLOAT_STORE_FLAG_VALUE (GET_MODE (arg1)))))
 #endif
                    )
                   && GET_RTX_CLASS (GET_CODE (p->exp)) == '<')
@@ -3639,8 +3643,8 @@ fold_rtx (x, insn)
 #ifdef FLOAT_STORE_FLAG_VALUE
          if (GET_MODE_CLASS (mode) == MODE_FLOAT)
            {
-             true = CONST_DOUBLE_FROM_REAL_VALUE (FLOAT_STORE_FLAG_VALUE,
-                                                  mode);
+             true = (CONST_DOUBLE_FROM_REAL_VALUE
+                     (FLOAT_STORE_FLAG_VALUE (mode), mode));
              false = CONST0_RTX (mode);
            }
 #endif
@@ -3753,8 +3757,8 @@ fold_rtx (x, insn)
 #ifdef FLOAT_STORE_FLAG_VALUE
              if (GET_MODE_CLASS (mode) == MODE_FLOAT)
                {
-                 true = CONST_DOUBLE_FROM_REAL_VALUE (FLOAT_STORE_FLAG_VALUE,
-                                                      mode);
+                 true = (CONST_DOUBLE_FROM_REAL_VALUE
+                         (FLOAT_STORE_FLAG_VALUE (mode), mode));
                  false = CONST0_RTX (mode);
                }
 #endif
@@ -3784,8 +3788,13 @@ fold_rtx (x, insn)
                                           const_arg1 ? const_arg1 : folded_arg1);
 #ifdef FLOAT_STORE_FLAG_VALUE
       if (new != 0 && GET_MODE_CLASS (mode) == MODE_FLOAT)
-       new = ((new == const0_rtx) ? CONST0_RTX (mode)
-              : CONST_DOUBLE_FROM_REAL_VALUE (FLOAT_STORE_FLAG_VALUE, mode));
+       {
+         if (new == const0_rtx)
+           new = CONST0_RTX (mode);
+         else
+           new = (CONST_DOUBLE_FROM_REAL_VALUE
+                  (FLOAT_STORE_FLAG_VALUE (mode), mode));
+       }
 #endif
       break;
 
index bd48cd8..0cbff9d 100644 (file)
@@ -2384,9 +2384,16 @@ subst_constants (loc, insn, map, memonly)
                                               XEXP (x, 0), XEXP (x, 1));
 #ifdef FLOAT_STORE_FLAG_VALUE
          if (new != 0 && GET_MODE_CLASS (GET_MODE (x)) == MODE_FLOAT)
-         new = ((new == const0_rtx) ? CONST0_RTX (GET_MODE (x))
-                : CONST_DOUBLE_FROM_REAL_VALUE (FLOAT_STORE_FLAG_VALUE,
-                                                GET_MODE (x)));
+           {
+             enum machine_mode mode = GET_MODE (x);
+             if (new == const0_rtx)
+               new = CONST0_RTX (mode);
+             else
+               {
+                 REAL_VALUE_TYPE val = FLOAT_STORE_FLAG_VALUE (mode);
+                 new = CONST_DOUBLE_FROM_REAL_VALUE (val, mode);
+               }
+           }
 #endif
          break;
       }
index 88782f6..b02e4b0 100644 (file)
@@ -9103,7 +9103,8 @@ get_condition (jump, earliest)
 #ifdef FLOAT_STORE_FLAG_VALUE
                     || (code == LT
                         && GET_MODE_CLASS (inner_mode) == MODE_FLOAT
-                        && FLOAT_STORE_FLAG_VALUE < 0)
+                        && (REAL_VALUE_NEGATIVE
+                            (FLOAT_STORE_FLAG_VALUE (inner_mode))))
 #endif
                     ))
                   && GET_RTX_CLASS (GET_CODE (SET_SRC (set))) == '<'))
@@ -9122,7 +9123,8 @@ get_condition (jump, earliest)
 #ifdef FLOAT_STORE_FLAG_VALUE
                     || (code == GE
                         && GET_MODE_CLASS (inner_mode) == MODE_FLOAT
-                        && FLOAT_STORE_FLAG_VALUE < 0)
+                        && (REAL_VALUE_NEGATIVE
+                            (FLOAT_STORE_FLAG_VALUE (inner_mode))))
 #endif
                     ))
                   && GET_RTX_CLASS (GET_CODE (SET_SRC (set))) == '<'
index ed74148..d3357c1 100644 (file)
@@ -7485,8 +7485,8 @@ You need not define @code{STORE_FLAG_VALUE} if the machine has no store-flag
 instructions.
 
 @findex FLOAT_STORE_FLAG_VALUE
-@item FLOAT_STORE_FLAG_VALUE
-A C expression that gives a non-zero floating point value that is
+@item FLOAT_STORE_FLAG_VALUE (@var{mode})
+A C expression that gives a non-zero @code{REAL_VALUE_TYPE} value that is
 returned when comparison operators with floating-point results are true.
 Define this macro on machine that have comparison operations that return
 floating-point values.  If there are no such operations, do not define