gallium: move math macros from p_util.h to u_math.h
authorBrian Paul <brian.paul@tungstengraphics.com>
Fri, 22 Aug 2008 21:51:38 +0000 (15:51 -0600)
committerBrian Paul <brian.paul@tungstengraphics.com>
Fri, 22 Aug 2008 21:51:38 +0000 (15:51 -0600)
More can be done...

src/gallium/auxiliary/util/u_math.h
src/gallium/include/pipe/p_util.h

index e179ce7..09c55e4 100644 (file)
@@ -29,6 +29,9 @@
 /**
  * Math utilities and approximations for common math functions.
  * Reduced precision is usually acceptable in shaders...
+ *
+ * "fast" is used in the names of functions which are low-precision,
+ * or at least lower-precision than the normal C lib functions.
  */
 
 
@@ -36,6 +39,7 @@
 #define U_MATH_H
 
 
+#include "pipe/p_compiler.h"
 #include "pipe/p_util.h"
 #include "util/u_math.h"
 
@@ -141,4 +145,49 @@ util_fast_pow(float x, float y)
 }
 
 
+
+/**
+ * Floor(x), returned as int.
+ */
+static INLINE int
+util_ifloor(float f)
+{
+   int ai, bi;
+   double af, bf;
+   union fi u;
+   af = (3 << 22) + 0.5 + (double)f;
+   bf = (3 << 22) + 0.5 - (double)f;
+   u.f = (float) af;  ai = u.i;
+   u.f = (float) bf;  bi = u.i;
+   return (ai - bi) >> 1;
+}
+
+
+/**
+ * Round float to nearest int.
+ */
+static INLINE int
+util_iround(float f)
+{
+#if defined(PIPE_CC_GCC) && defined(PIPE_ARCH_X86) 
+   int r;
+   __asm__ ("fistpl %0" : "=m" (r) : "t" (f) : "st");
+   return r;
+#elif defined(PIPE_CC_MSVC) && defined(PIPE_ARCH_X86)
+   int r;
+   _asm {
+        fld f
+        fistp r
+       }
+   return r;
+#else
+   if (f >= 0.0f)
+      return (int) (f + 0.5f);
+   else
+      return (int) (f - 0.5f);
+#endif
+}
+
+
+
 #endif /* U_MATH_H */
index 660192b..8f5cb4d 100644 (file)
@@ -399,57 +399,6 @@ do {                                     \
 } while (0)
 
 
-static INLINE int ifloor(float f)
-{
-   int ai, bi;
-   double af, bf;
-   union fi u;
-
-   af = (3 << 22) + 0.5 + (double)f;
-   bf = (3 << 22) + 0.5 - (double)f;
-   u.f = (float) af;  ai = u.i;
-   u.f = (float) bf;  bi = u.i;
-   return (ai - bi) >> 1;
-}
-
-
-#if defined(PIPE_CC_GCC) && defined(PIPE_ARCH_X86) 
-static INLINE int iround(float f)
-{
-   int r;
-   __asm__ ("fistpl %0" : "=m" (r) : "t" (f) : "st");
-   return r;
-}
-#elif defined(PIPE_CC_MSVC) && defined(PIPE_ARCH_X86)
-static INLINE int iround(float f)
-{
-   int r;
-   _asm {
-        fld f
-        fistp r
-       }
-   return r;
-}
-#else
-#define IROUND(f)  ((int) (((f) >= 0.0F) ? ((f) + 0.5F) : ((f) - 0.5F)))
-#endif
-
-
-/* Could maybe have an inline version of this?
- */
-#if defined(__GNUC__)
-#define FABSF(x)   fabsf(x)
-#else
-#define FABSF(x)   ((float) fabs(x))
-#endif
-
-
-#if defined(__GNUC__)
-#define CEILF(x)   ceilf(x)
-#else
-#define CEILF(x)   ((float) ceil(x))
-#endif
-
 static INLINE int align(int value, int alignment)
 {
    return (value + alignment - 1) & ~(alignment - 1);