applied Keith's patch for "safe" type-punning.
authorDaniel Borca <dborca@users.sourceforge.net>
Tue, 11 Jan 2005 10:56:39 +0000 (10:56 +0000)
committerDaniel Borca <dborca@users.sourceforge.net>
Tue, 11 Jan 2005 10:56:39 +0000 (10:56 +0000)
made IS_NEGATIVE produce a boolean (useful when xoring with other booleans).

src/mesa/main/imports.h

index b69b5fa..5158bcd 100644 (file)
@@ -340,8 +340,13 @@ static INLINE int IS_INF_OR_NAN( float x )
  *** IS_NEGATIVE: test if float is negative
  ***/
 #if defined(USE_IEEE)
-#define GET_FLOAT_BITS(x) ((fi_type *) &(x))->i
-#define IS_NEGATIVE(x) (GET_FLOAT_BITS(x) & (1<<31))
+static INLINE int GET_FLOAT_BITS( float x )
+{
+   fi_type fi;
+   fi.f = x;
+   return fi.i;
+}
+#define IS_NEGATIVE(x) (GET_FLOAT_BITS(x) < 0)
 #else
 #define IS_NEGATIVE(x) (x < 0.0F)
 #endif
@@ -567,14 +572,9 @@ static INLINE int iceil(float f)
 
 
 /***
- *** COPY_FLOAT: copy a float from src to dest, avoid slow FP regs if possible
+ *** COPY_FLOAT: copy a float from src to dest.
  ***/
-#if defined(USE_IEEE) && !defined(DEBUG)
-#define COPY_FLOAT( dst, src )                                 \
-       ((fi_type *) &(dst))->i = ((fi_type *) (void *) &(src))->i
-#else
 #define COPY_FLOAT( dst, src )         (dst) = (src)
-#endif
 
 
 /***