History log of /freebsd-10.0-release/lib/msun/ld128/s_expl.c
Revision Date Author Comments
(<<< Hide modified files)
(Show modified files >>>)
# 259065 07-Dec-2013 gjb

- Copy stable/10 (r259064) to releng/10.0 as part of the
10.0-RELEASE cycle.
- Update __FreeBSD_version [1]
- Set branch name to -RC1

[1] 10.0-CURRENT __FreeBSD_version value ended at '55', so
start releng/10.0 at '100' so the branch is started with
a value ending in zero.

Approved by: re (implicit)
Sponsored by: The FreeBSD Foundation

# 256281 10-Oct-2013 gjb

Copy head (r256279) to stable/10 as part of the 10.0-RELEASE cycle.

Approved by: re (implicit)
Sponsored by: The FreeBSD Foundation


# 251345 03-Jun-2013 kargl

Change a comma to a semicolon.

Remove a blank line that crept into the declarations.

Fix a comment to show a sign on a NaN.


# 251343 03-Jun-2013 kargl

ld80 and ld128 implementations of expm1l(). This code started life
as a fairly faithful implementation of the algorithm found in

PTP Tang, "Table-driven implementation of the Expm1 function
in IEEE floating-point arithmetic," ACM Trans. Math. Soft., 18,
211-222 (1992).

Over the last 18-24 months, the code has under gone significant
optimization and testing.

Reviewed by: bde
Obtained from: bde (most of the optimizations)


# 251341 03-Jun-2013 kargl

Fix two comments that got lost in the disentanglement of the larger diff.


# 251339 03-Jun-2013 kargl

ld80/s_expl.c:

* Use integral numerical constants, and let the compiler do the
conversion to long double.

ld128/s_expl.c:

* Use integral numerical constants, and let the compiler do the
conversion to long double.
* Use the ENTERI/RETURNI macros, which are no-ops on ld128. This
however makes the ld80 and ld128 identical.

Reviewed by: bde (as part of larger diff)


# 251338 03-Jun-2013 kargl

Micro-optimization: move the unary mius operator to operate
on a literal constant.

Obtained from: bde


# 251337 03-Jun-2013 kargl

Add a comment to note that bde supplied most, if not all,
of the optimizations.


# 251335 03-Jun-2013 kargl

ld80/s_expl.c:

* In the special case x = -Inf or -NaN, use a micro-optimization
to eliminate the need to access u.xbits.man.

* Fix an off-by-one for small arguments |x| < 0x1p-65.

ld128/s_expl.c:

* In the special case x = -Inf or -NaN, use a micro-optimization
to eliminate the need to access u.xbits.manh and u.xbits.manl.

* Fix an off-by-one for small arguments |x| < 0x1p-114.

Obtained from: bde


# 251334 03-Jun-2013 kargl

ld80/s_expl.c:

* Update the evaluation of the polynomial. This allows the removal
of the now unused variables t23 and t45.

ld128/s_expl.c:

* Update the evaluation of the polynomial and the intermediate
result t. This update allows several numerical constants to be
written as double rather than long double constants. Update
the constants as appropriate.

Obtained from: bde


# 251330 03-Jun-2013 kargl

Update a comment to reflect that we are using an endpoint of
an interval instead of a midpoint.


# 251327 03-Jun-2013 kargl

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


# 251325 03-Jun-2013 kargl

Whitespace.


# 251321 03-Jun-2013 kargl

* Rename the polynomial coefficients from P2, P3, ... to A2, A3, ....
The names now coincide with the name used in PTP Tang's paper.

* Rename the variable from s to tbl to better reflect that
this is a table, and to be consistent with the naming scheme
in s_exp2l.c

Reviewed by: bde (as part of larger diff)


# 251315 03-Jun-2013 kargl

ld80/s_expl.c:

* Update Copyright years to include 2013.

ld128/s_expl.c:

* Correct and update Copyright years. This code originated from
the ld80 version, so it should reflect the same time period.

Reviewed by: bde (as part of larger diff)


# 240866 23-Sep-2012 kargl

* ld80/s_expl.c:
. Fix the threshold for expl(x) where |x| is small.
. Also update the previously incorrect comment to match the
new threshold.

* ld128/s_expl.c:
. Re-order logic in exceptional cases to match the logic used in
other long double functions.
. Fix the threshold for expl(x) where is |x| is small.
. Also update the previously incorrect comment to match the
new threshold.

Submitted by: bde
Approved by: das (mentor)


# 240864 23-Sep-2012 kargl

* ld80/s_expl.c:
. Guard a comment from reformatting by indent(1).
. Re-order variables in declarations to alphabetical order.
. Remove a banal comment.

* ld128/s_expl.c:
. Add a comment to point to ld80/s_expl.c for implementation details.
. Move the #define of INTERVAL to reduce the diff with ld80/s_expl.c.
. twom10000 does not need to be volatile, so move its declaration.
. Re-order variables in declarations to alphabetical order.
. Add a comment that describes the argument reduction.
. Remove the same banal comment found in ld80/s_expl.c.

Reviewed by: bde
Approved by: das (mentor)


# 238923 30-Jul-2012 kargl

Whitespace.

Submitted by: bde
Approved by: das (pre-approved)


# 238784 26-Jul-2012 kargl

Replace the macro name NUM with INTERVALS. This change provides
compatibility with the INTERVALS macro used in the soon-to-be-commmitted
expm1l() and someday-to-be-committed log*l() functions.

Add a comment into ld128/s_expl.c noting at gcc issue that was
deleted when rewriting ld80/e_expl.c as ld128/s_expl.c.

Requested by: bde
Approved by: das (mentor)


# 238783 26-Jul-2012 kargl

* ld80/expl.c:
. Remove a few #ifdefs that should have been removed in the initial
commit.
. Sort fpmath.h to its rightful place.

* ld128/s_expl.c:
. Replace EXPMASK with its actual value.
. Sort fpmath.h to its rightful place.

Requested by: bde
Approved by: das (mentor)


# 238722 23-Jul-2012 kargl

Compute the exponential of x for Intel 80-bit format and IEEE 128-bit
format. These implementations are based on

PTP Tang, "Table-driven implementation of the exponential function
in IEEE floating-point arithmetic," ACM Trans. Math. Soft., 15,
144-157 (1989).

PR: standards/152415
Submitted by: kargl
Reviewed by: bde, das
Approved by: das (mentor)