svn commit: r251327 - in head/lib/msun: ld128 ld80
Steve Kargl
kargl at FreeBSD.org
Mon Jun 3 17:51:09 UTC 2013
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;
More information about the svn-src-all
mailing list