]> git.mxchange.org Git - simgear.git/commitdiff
add float_to_int() rounding function from Cockpit/hud_opts.hxx. The original
authormfranz <mfranz>
Fri, 16 Jun 2006 09:29:54 +0000 (09:29 +0000)
committermfranz <mfranz>
Fri, 16 Jun 2006 09:29:54 +0000 (09:29 +0000)
file said "(c) FlightGear Project" and "probably written by Norman Vine".

simgear/math/fastmath.cxx
simgear/math/fastmath.hxx

index f7379bd54cb479339df54eeb629995e2f58e56d5..41b2739d4bfea9a27571edefbe7d8b19b5813161 100644 (file)
@@ -2,7 +2,7 @@
  * \file fastmath.cxx
  * fast mathematics routines.
  *
- * Refferences:
+ * References:
  *
  * A Fast, Compact Approximation of the Exponential Function
  * Nicol N. Schraudolph
index 97851e33e9e88bd2801c2ed3bfc645296197789d..f78fddc52c009ee65a0eae0ce3d31499f595029c 100644 (file)
@@ -112,5 +112,36 @@ inline int fast_sgn(float f)
     return 1+(((*(int*)&f)>>31)<<1);
 }
 
+
+
+/**
+ * Quick rounding function.
+ */
+#if defined(i386)
+#define USE_X86_ASM
+#endif
+
+#if defined(USE_X86_ASM)
+static __inline__ int float_to_int(float f)
+{
+    int r;
+    __asm__ ("fistpl %0" : "=m" (r) : "t" (f) : "st");
+    return r;
+}
+#elif  defined(__MSC__) && defined(__WIN32__)
+static __inline int float_to_int(float f)
+{
+    int r;
+    _asm {
+        fld f
+        fistp r
+    }
+    return r;
+}
+#else
+#define float_to_int(F) ((int) ((F) < 0.0f ? (F)-0.5f : (F)+0.5f))
+#endif
+
+
 #endif // !_SG_FMATH_HXX