Author: kargl
Date: Mon Jun  3 17:51:08 2013
New Revision: 251327
URL: http://svnweb.freebsd.org/changeset/base/251327

Log:
  Introduce the macro LOG2_INTERVAL, which is log2(number of intervals).
  Use the macroi as a micro-optimization to convert a subtraction and
  division to a shift.
  
  Obtained from:        bde

Modified:
  head/lib/msun/ld128/s_expl.c
  head/lib/msun/ld80/s_expl.c

Modified: head/lib/msun/ld128/s_expl.c
==============================================================================
--- head/lib/msun/ld128/s_expl.c        Mon Jun  3 17:41:11 2013        
(r251326)
+++ head/lib/msun/ld128/s_expl.c        Mon Jun  3 17:51:08 2013        
(r251327)
@@ -38,6 +38,7 @@ __FBSDID("$FreeBSD$");
 #include "math_private.h"
 
 #define        INTERVALS       128
+#define        LOG2_INTERVALS  7
 #define        BIAS    (LDBL_MAX_EXP - 1)
 
 static volatile const long double tiny = 0x1p-10000L;
@@ -229,7 +230,7 @@ expl(long double x)
        fn = x * INV_L + 0x1.8p112 - 0x1.8p112;
        n = (int)fn;
        n2 = (unsigned)n % INTERVALS;
-       k = (n - n2) / INTERVALS;
+       k = n >> LOG2_INTERVALS;
        r1 = x - fn * L1;
        r2 = -fn * L2;
 

Modified: head/lib/msun/ld80/s_expl.c
==============================================================================
--- head/lib/msun/ld80/s_expl.c Mon Jun  3 17:41:11 2013        (r251326)
+++ head/lib/msun/ld80/s_expl.c Mon Jun  3 17:51:08 2013        (r251327)
@@ -50,6 +50,7 @@ __FBSDID("$FreeBSD$");
 #include "math_private.h"
 
 #define        INTERVALS       128
+#define        LOG2_INTERVALS  7
 #define        BIAS    (LDBL_MAX_EXP - 1)
 
 static const long double
@@ -269,7 +270,8 @@ expl(long double x)
        n = (int)fn;
 #endif
        n2 = (unsigned)n % INTERVALS;
-       k = (n - n2) / INTERVALS;
+       /* Depend on the sign bit being propagated: */
+       k = n >> LOG2_INTERVALS;
        r1 = x - fn * L1;
        r2 = -fn * L2;
 
_______________________________________________
svn-src-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to