added FREXPF() macro (bug 4060)
authorBrian Paul <brian.paul@tungstengraphics.com>
Fri, 12 Aug 2005 18:56:56 +0000 (18:56 +0000)
committerBrian Paul <brian.paul@tungstengraphics.com>
Fri, 12 Aug 2005 18:56:56 +0000 (18:56 +0000)
src/mesa/main/imports.h
src/mesa/math/m_debug_util.h
src/mesa/tnl/t_vb_arbprogram.c

index 11b0eebf12905a1130e15ef67ab7dfa92bee676b..c63cc64eb865042f3c7000858378113fc3b2c1f6 100644 (file)
@@ -331,23 +331,28 @@ static INLINE int GET_FLOAT_BITS( float x )
  *** CEILF: ceiling of float
  *** FLOORF: floor of float
  *** FABSF: absolute value of float
+ *** LDEXPF: multiply value by an integral power of two
+ *** FREXPF: extract mantissa and exponent from value
  ***/
 #if defined(XFree86LOADER) && defined(IN_MODULE)
 #define CEILF(x)   ((GLfloat) xf86ceil(x))
 #define FLOORF(x)  ((GLfloat) xf86floor(x))
 #define FABSF(x)   ((GLfloat) xf86fabs(x))
 #define LDEXPF(x,y)   ((GLfloat) xf86ldexp(x,y))
+#define FREXPF(x,y)   ((GLfloat) xf86frexp(x,y))
 #elif defined(__gnu_linux__)
 /* C99 functions */
 #define CEILF(x)   ceilf(x)
 #define FLOORF(x)  floorf(x)
 #define FABSF(x)   fabsf(x)
 #define LDEXPF(x,y)  ldexpf(x,y)
+#define FREXPF(x,y)  frexpf(x,y)
 #else
 #define CEILF(x)   ((GLfloat) ceil(x))
 #define FLOORF(x)  ((GLfloat) floor(x))
 #define FABSF(x)   ((GLfloat) fabs(x))
 #define LDEXPF(x,y)  ((GLfloat) ldexp(x,y))
+#define FREXPF(x,y)  ((GLfloat) frexp(x,y))
 #endif
 
 
index 765f54dfb5a4d6df0442c8df79bc6cce93b2f3a2..1b7d742a80b63697b4a444abb9d584aabbb3706e 100644 (file)
@@ -286,9 +286,9 @@ static int significand_match( GLfloat a, GLfloat b )
       return 0;
    }
 
-   frexp( a, &a_ex );
-   frexp( b, &b_ex );
-   frexp( d, &d_ex );
+   FREXPF( a, &a_ex );
+   FREXPF( b, &b_ex );
+   FREXPF( d, &d_ex );
 
    if ( a_ex < b_ex ) {
       return a_ex - d_ex;
index c55fc84feaafe9b3e73880a0504d9d5369485e0f..5cee3d78dc36ebaaef66971f1b9cdec1a5ff99e4 100644 (file)
@@ -2,7 +2,7 @@
  * Mesa 3-D graphics library
  * Version:  6.3
  *
- * Copyright (C) 1999-2004  Brian Paul   All Rights Reserved.
+ * Copyright (C) 1999-2005  Brian Paul   All Rights Reserved.
  *
  * Permission is hereby granted, free of charge, to any person obtaining a
  * copy of this software and associated documentation files (the "Software"),
@@ -351,11 +351,7 @@ static void do_LOG( struct arb_vp_machine *m, union instruction op )
    const GLfloat *arg0 = m->File[op.alu.file0][op.alu.idx0];
    GLfloat tmp = FABSF(arg0[0]);
    int exponent;
-#ifdef _WIN32
-   GLfloat mantissa = (GLfloat) frexp((double)tmp, &exponent);
-#else
-   GLfloat mantissa = frexpf(tmp, &exponent);
-#endif
+   GLfloat mantissa = FREXPF(tmp, &exponent);
 
    result[0] = (GLfloat) (exponent - 1);
    result[1] = 2.0 * mantissa; /* map [.5, 1) -> [1, 2) */