Openwall GNU/*/Linux - a small security-enhanced Linux distro for servers
[<prev] [next>] [day] [month] [year] [list]
Date: Sun, 28 Oct 2012 22:32:42 +0100
From: Szabolcs Nagy <>
Subject: libm todo

my libm todo list for the record (not in priority order):

- use errno on softfloat arch:
	if ((math_errhandling & MATH_ERREXCEPT) == 0) errno = ...;
- arm hardfloat abi can have proper fenv
- add #pragma FENV_ACCESS ON whenever fenv is used in a function
	gcc does not support it but required by c99
- use c11 CMPLX(re,im) instead of cpack(re,im)
- check the ld80 expl.c that was recently added to freebsd
- FORCE_EVAL (when we need to eval an expression for side-effects)
	check if gcc has better workaround than volatile store
	check functions where this might be needed
- use unified bithack method (dshape vs union{..} in fabs, copysign..)
- __invtrig cleanup (aT is globally visible now but only used by atanl)
- check if strtod and printf %f work in all rounding modes
- check if large errors of non-nearest rounding mode can be fixed
	eg tan(pi/2-eps) in tozero mode has big errors
- check remaining volatile stuff (maybe apply strict_assign or force_eval)
- signbit is pure macro, __signbit is probably not needed (other than abi compatibility)
- fix __isrel in math.h (now it depends on long double isnan)
- long double macro versions of isnan, isinf
	representation specific, needs some ugly ifdefs
- trigonometric functions:
	__tan: 3rd arg semantics is probably not optimal
	__sin,__cos,..: z,w,.. -> x2,x4,.. so degree is easier to see
	use long double pi in long double code (casinl, cacosl,..)
- round to int trick fix
	check +0x1.8p52 usage in rint, rempio, sin_pi in lgamma_r
- fix integer issues
	int32_t -> uint32_t where needed (bit shift)
	int -> int32_t (where two's complement representation is assumed)
- implement missing functions:
	sqrtl -> sqrt
	tgamma, tgammaf, tgammal (using lanczos approx as in boost and python)
- remove long double bessel (j*l, y*l)
- add comments to *.s
- test vectors for special cases in c99 F.9 and G.6
- complex: fix casin[h], cacos[h], catan[h]
- fix the longdb.h header (endianness check for ld80 etc)

bug fixes we made so far compared to freebsd (and openbsd)
	many simple functions got rewritten to be cleaner
	some signed int related ub are fixed
	some useless volatile and compiler bug workarounds are cleaned up
	strict_assign macro got fixed (freebsd has no real long double by default)
	nextafterl did not raise underflow when result was zero
	tgammal incorrectly set signgam (openbsd)
	pow*(1,nan or inf) == 1 special case was wrong
	nan check in modf was wrong
	fmal ldexp vs ldexpl was wrong
	fma* x == 0 special case check was before the isfinite check
	invalid optimization in ldexp
	lrint* inexact clearing was optimized away because of gcc bug
	scalbn(0x1p1023, -2097)==0x1p-1074 was incorrect
	modfl(+-inf) was incorrect on ld80
	ilogbl was incorrect on ld80 (implicit bit was not taken into account)

Powered by blists - more mailing lists

Your e-mail address:

Confused about mailing lists and their use? Read about mailing lists on Wikipedia and check out these guidelines on proper formatting of your messages.