bug in logarithm()
Martin Koeppe
mkoeppe@gmx.de
Wed Oct 17 22:58:00 GMT 2007
Hi Jeff, hi Patrick,
On Wed, 17 Oct 2007, Jeff Johnston wrote:
> Patrick Mansfield wrote:
>> On Wed, Oct 17, 2007 at 12:28:47PM +0200, Martin Koeppe wrote:
>>
>>> I'm using newlib on a i386 architecture, and now I wonder if it's possible
>>> to configure libm in such a way that the fast asm versions of e.g. log()
>>> are used. In my current newlib-libm.a there are the entry points for
>>> _f_log() etc., but apparently log() doesn't make use of _f_log().
>>>
>>> (How) Is it possible to configure newlib's libm to make use of _f_log
>>> within log()?
>>>
>>> Thank you very much
>>>
>>
>> They aren't compatible per comments in the code. You could call them
>> directly. AFAIUI there should be prototypes and proper names (without
>> underscore prefix, like #define f_log _f_log) for them in newlib, but I
>> don't see any.
>>
>> -- Patrick Mansfield
>>
> Actually, they are meant to be called when the user specifies -ffast-math on
> the compilation.
>
> The definitions used to be part of libc/include/machine/fastmath.h with an
> i386 check. This got inadvertently left out when we initially made the
> transition of newlib from internal to external repositories.
>
> Anyway, I have added libc/machine/i386/machine/fastmath.h based on the older
> sources plus a few changes. If you compile your code with the -ffast-math
> option, <math.h> will bring in <machine/fastmath.h> and you will get access
> to the few fast math routines available for x86, including log().
I use newlib's libm, and only the libm, not the whole libc+libm, on
Interix, as replacement for the buggy standard libm there. So I don't
want to use any different header files if at all possible.
I can see from the code that e.g. log() and _f_log() don't provide the
same functionality, e.g. errno is set by the former, but not by the
latter. My question/wishlist item was more that I would like to
compile newlib with some option like -ffast-math, or better a
configure option, just like --enable-newlib-hw-fp, so that log()
checks the argument and sets errno, but then calls _f_log() to
calculate the logarithm instead of using the Newton algorithm.
User programs then still could be further optimized by skipping errno
processing and call _f_log() directly with -ffast-math if necessary,
but even without that it would be reasonably fast.
BTW: Are there any snapshots available for easy building?
Martin
More information about the Newlib
mailing list