Merge origin/release-4-6 into master
[alexxy/gromacs.git] / src / gromacs / legacyheaders / vec.h
index dc25bce58b2f95cff04d8e795d2f920040f22a79..ec0785566b924c81bdda465c603c1b27aac4932f 100644 (file)
@@ -208,15 +208,27 @@ static real gmx_invsqrt(real x)
 #define INVSQRT_DONE
 #endif /* powerpc_invsqrt */
 
-
 #ifndef INVSQRT_DONE
-#define gmx_invsqrt(x) (1.0f/sqrt(x))
+#    ifdef GMX_DOUBLE
+#        ifdef HAVE_RSQRT
+#            define gmx_invsqrt(x)     rsqrt(x)
+#        else
+#            define gmx_invsqrt(x)     (1.0/sqrt(x))
+#        endif
+#    else /* single */
+#        ifdef HAVE_RSQRTF
+#            define gmx_invsqrt(x)     rsqrtf(x)
+#        elif defined HAVE_RSQRT
+#            define gmx_invsqrt(x)     rsqrt(x)
+#        elif defined HAVE_SQRTF
+#            define gmx_invsqrt(x)     (1.0/sqrtf(x))
+#        else
+#            define gmx_invsqrt(x)     (1.0/sqrt(x))
+#        endif
+#    endif
 #endif
 
 
-
-
-
 static real sqr(real x)
 {
   return (x*x);
@@ -516,8 +528,10 @@ static gmx_inline real norm(const rvec a)
    * float/double case here instead to avoid gmx_sqrt() being accidentally used. */
 #ifdef GMX_DOUBLE
   return dnorm(a);
-#else
+#elif defined HAVE_SQRTF
   return sqrtf(iprod(a, a));
+#else
+  return sqrt(iprod(a, a));
 #endif
 }