Math Products
GoFast® for PowerPC / Power Architecture C Compilers
Fast Floating Point Library
Features
- Fast
- Reentrant
- ROMable
- Conforms to IEEE 754 Format
- Includes single and double precision
- "Link and Go" compiler support
- Includes complete source, test programs, project files, and startup code
Compiler Support
GoFast libraries are designed for “link and go” operation with each compiler. These
libraries provide the user with a significant speed advantage when no floating point
coprocessor hardware is available. This is of particular significance in real-time
embedded systems.
GoFast for PowerPC / Power Architecture includes drop-in libraries for “link and go” seamless operation
with Diab Data, GNU, IBM, Metaware, and Freescale PowerPC / Power Architecture C compilers.
The GoFast routines directly replace the compiler’s floating point runtime library
routines. Two types of interfaces are provided. The first is an emulator interface, which
uses a processor interrupt to pick up the floating-point instructions and emulate them in
software. Separate subdirectories in the GoFast distribution contain an emulator
specific to the PowerPC 602 and an emulator, which supports other variants of the PowerPC. The second interface is through callable libraries. The product distribution contains
directories that are specific to each C compiler supported. The Embedded Application Binary Interface (EABI) is supported for both Metaware and Diab Data
compilers and the emulator library interface is supported for the IBM compiler.
Functionality
GoFast contains the following floating point routines in both single and double precision:
- add, subtract, multiply, divide
- conversion operations
- compare operations
- sin, cos, tan
- asin, acos, atan, atan2
- sinh, cosh, atanh
- log, log10
- exp, pow
- floor, ceil, fabs
- modf, fmod, frexp, ldexp
Timings
The following table gives the times for all floating point operations, for GoFast and the GNU floating point library. The times, in microseconds, were measured using the indicated processor and board.
Microsecond Timings
PPC440GX EVB, External SDRAM
|
Double Precision |
Single Precision |
Function |
GoFast |
GNU |
GoFast |
GNU |
add |
0.150 |
0.454 |
0.121 |
0.387 |
subtract |
0.156 |
0.478 |
0.123 |
0.395 |
multiply |
0.157 |
0.532 |
0.110 |
0.265 |
divide |
0.552 |
2.141 |
0.284 |
0.641 |
sqrt |
0.928 |
1.981 |
0.385 |
2.452 |
exp |
0.878 |
16.203 |
0.303 |
16.548 |
log |
1.230 |
16.891 |
0.445 |
17.353 |
log10 |
1.296 |
20.064 |
0.459 |
20.517 |
pow |
2.101 |
56.297 |
0.769 |
56.752 |
sin |
0.710 |
15.297 |
0.281 |
15.763 |
cos |
0.696 |
15.585 |
0.281 |
16.072 |
tan |
1.247 |
28.076 |
0.475 |
28.498 |
asin |
1.192 |
18.128 |
0.925 |
18.568 |
acos |
1.102 |
16.798 |
1.089 |
17.295 |
atan |
1.414 |
16.270 |
0.537 |
16.780 |
atan2 |
1.849 |
21.077 |
0.725 |
21.635 |
sinh |
1.283 |
27.025 |
0.507 |
27.521 |
cosh |
1.254 |
19.363 |
0.486 |
19.882 |
tanh |
1.322 |
26.158 |
0.644 |
26.539 |
modf |
0.285 |
0.891 |
0.103 |
1.380 |
fmod |
1.058 |
1.511 |
0.816 |
2.258 |
fabs |
0.064 |
0.079 |
0.058 |
0.555 |
floor |
0.095 |
0.824 |
0.080 |
1.302 |
ceil |
0.096 |
0.823 |
0.081 |
1.308 |
ldexp |
0.083 |
0.708 |
0.080 |
1.177 |
frexp |
0.077 |
0.134 |
0.072 |
0.645 |
feq/gt/lt... |
0.102 |
0.252 |
0.083 |
0.252 |
fp to long |
0.068 |
0.145 |
0.062 |
0.154 |
fp to ulong |
0.067 |
0.392 |
0.062 |
0.404 |
long to fp |
0.072 |
0.962 |
0.070 |
0.185 |
ulong to fp |
0.080 |
1.135 |
0.084 |
0.255 |
fp to llong |
0.739 |
3.195 |
0.771 |
3.326 |
fp to ullong |
0.628 |
2.963 |
0.689 |
3.132 |
llong to fp |
0.588 |
3.388 |
0.677 |
3.584 |
ullong to fp |
0.662 |
3.578 |
0.749 |
3.763 |
sgl to dbl |
0.067 |
0.214 |
— |
— |
dbl to sgl |
0.081 |
0.184 |
— |
— |
Times were measured on a 440GX board with GCC v3.4.2 using uClibc v0.9.28.
GoFast is a registered trademark of Lantronix Inc.
|