1999-12-24 01:06:59

by Arthur Jerijian

[permalink] [raw]
Subject: Linux Kernel Floating Point Emulation and CORDIC

For the mathematics and theoretical computer science enthusiasts here on this
list:

I have taken a look at the source code of the Linux Kernel floating point
emulation engine for i386 (as of 2.2.12, don't know if it changed in 2.3.x). I
noticed that it uses Taylor/Maclaurin polynomials to approximate the sine,
cosine, tangent, and inverse tangent functions. Wouldn't CORDIC be a better
algorithm for computing trigonometric and exponential functions instead? CORDIC
is a method for calculating mathematical functions using only addition,
shifting, and looking up entries in a table. More details can be found at
http://www.ezcomm.com/%7Ecyliax/Articles/RobNav/sidebar.html

Thanks,
--Arthur


1999-12-24 01:38:52

by Brian Gerst

[permalink] [raw]
Subject: Re: Linux Kernel Floating Point Emulation and CORDIC

Arthur Jerijian wrote:
>
> For the mathematics and theoretical computer science enthusiasts here on this
> list:
>
> I have taken a look at the source code of the Linux Kernel floating point
> emulation engine for i386 (as of 2.2.12, don't know if it changed in 2.3.x). I
> noticed that it uses Taylor/Maclaurin polynomials to approximate the sine,
> cosine, tangent, and inverse tangent functions. Wouldn't CORDIC be a better
> algorithm for computing trigonometric and exponential functions instead? CORDIC
> is a method for calculating mathematical functions using only addition,
> shifting, and looking up entries in a table. More details can be found at
> http://www.ezcomm.com/%7Ecyliax/Articles/RobNav/sidebar.html

I don't think it's worth the effort to rewrite and retest the FP
emulation code. It is only needed on some 386 and 486 machines, as all
pentiums and later always have built in FPUs. Nobody should be doing
any serious number crunching on those old processors. Just my 2 cents
though.

--

Brian Gerst

1999-12-24 17:13:06

by Matthew Wilcox

[permalink] [raw]
Subject: Re: Linux Kernel Floating Point Emulation and CORDIC

On Thu, Dec 23, 1999 at 08:50:47PM -0500, Brian Gerst wrote:
> I don't think it's worth the effort to rewrite and retest the FP
> emulation code. It is only needed on some 386 and 486 machines, as all
> pentiums and later always have built in FPUs. Nobody should be doing
> any serious number crunching on those old processors. Just my 2 cents
> though.

But not all the world is intel -- there is FP emulation code for Alpha,
ARM, MIPS, m68k, PPC and Sparc in the tree. However, I seem to remember
someone analysing the FP emulator (on ARM) and concluding that the
cost of emulating FP instructions was dominated by the trap handler
and instruction decode. So there's not much point in replacing the
algorithms with more efficient algorithms when it's not going to make
much difference.

1999-12-24 22:54:38

by nathan.zook

[permalink] [raw]
Subject: RE: Linux Kernel Floating Point Emulation and CORDIC

EEEEEwwww! Cordic is UGLY! There is a reason that Intel & we (AMD) have
gone with polyonmial & rational function approximations. BTW, our
algorithms are quite accurate. If you are running in another world, or just
want to emulate, look into equal-ripple approximations. You will chew some
serious processor power finding good functions, but what you get can be
nice.

Nathan


> -----Original Message-----
> From: Arthur Jerijian [SMTP:[email protected]]
> Sent: Thursday, December 23, 1999 5:58 PM
> To: [email protected]
> Subject: Linux Kernel Floating Point Emulation and CORDIC
>
> For the mathematics and theoretical computer science enthusiasts here on
> this
> list:
>
> I have taken a look at the source code of the Linux Kernel floating point
> emulation engine for i386 (as of 2.2.12, don't know if it changed in
> 2.3.x). I
> noticed that it uses Taylor/Maclaurin polynomials to approximate the sine,
> cosine, tangent, and inverse tangent functions. Wouldn't CORDIC be a
> better
> algorithm for computing trigonometric and exponential functions instead?
> CORDIC
> is a method for calculating mathematical functions using only addition,
> shifting, and looking up entries in a table. More details can be found at
> http://www.ezcomm.com/%7Ecyliax/Articles/RobNav/sidebar.html
>
> Thanks,
> --Arthur
>
> -
> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
> the body of a message to [email protected]
> Please read the FAQ at http://www.tux.org/lkml/