Math Products
GoFast® for SH Series
Fast Floating Point Library
Features
- Fast
- Reentrant
- ROMable
- Conforms to IEEE 754 Format
- Includes single and double precision
- "Link and Go" compiler support
- Includes startup code
- Includes complete source, test programs, and make file
Description
GoFast for SH1, SH2 and SH3 was carefully designed for high performance
operation and ease of use including "link and go" compatibility with SH7000 specific C
compilers. GoFast provides full IEEE and ANSI compatible floating point support for
the Hitachi SH Series architectures.
Floating Point Technology
GoFast for SH Series is based on U S Software's "Architecture Independent
Technology" (AIT) and proven floating point algorithms the company has been
developing for over decade. The algorithms have been thoroughly tested using
automated methods. GoFast was specifically optimized and integrated for enhanced
performance on SH Series C processors.
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
Compiler Support
GoFast for SH Series includes drop-in libraries for "link and go", seamless operation
with the SH Series C compilers. GNU compiler support is available for SH1, SH2, and
SH3 while Hitachi compiler support is available for SH3 only.
The GoFast routines directly replace the compiler's floating point runtime library
routines. In addition, routines normally not supported by the compiler are available with
GoFast.
Functionality
GoFast contains the following floating point routines in both single and double
precision:
- + - * /
- conversion operations
- sqrt
- sin, cos, tan
- asin, acos, atan, atan2
- sinh, cosh, tanh
- log, log10
- exp, pow
- floor, ceil, fabs
- modf, fmod, frexp, ldexp
Additional support includes test programs and make files.
Performance
GoFast delivers the optimized performance you expect with an SH2 library and
processor. The following timings were measured using an E7000 emulator at 6.144
MHz, with data and instruction cache enabled.
Microsecond Timings
Function |
double |
single |
add |
57.3 |
36.0 |
subtract |
61.5 |
38.3 |
multiply |
62.0 |
33.9 |
divide |
84.5 |
44.6 |
sqrt |
225.1 |
76.2 |
exp |
314.7 |
75.7 |
log |
380.2 |
91.1 |
log10 |
390.8 |
94.3 |
sin |
273.5 |
66.6 |
cos |
272.0 |
65.3 |
tan |
373.0 |
77.5 |
asin |
520.6 |
195.4 |
acos |
586.0 |
216.0 |
atan |
341.9 |
109.4 |
atan2 |
400.2 |
139.7 |
pow |
577.6 |
179.7 |
The following table gives the timing of some floating-point operations in microseconds.
The times were measured using the 7708 processor, 15 MHz board and 60MHz CPU.
Microsecond Timings
|
GNU C
with
GoFast |
GNU C
with Original
Library |
Hitachi C
with
GoFast |
Hitachi C
with Original
Library |
Function |
double |
single |
double |
single |
double |
single |
double |
single |
add |
18.2 |
12.7 |
54.8 |
36.4 |
17.5 |
10.8 |
19.6 |
10.6 |
subtract |
20.8 |
13.9 |
60.8 |
39.6 |
19.8 |
12.4 |
23.1 |
10.9 |
multiply |
18.6 |
11.2 |
170.2 |
60.2 |
17.9 |
9.7 |
26.1 |
9.9 |
divide |
29.8 |
16.6 |
158.2 |
63.4 |
29.7 |
15.4 |
79.9 |
13.8 |
sqrt |
45.7 |
27.3 |
240.9 |
120.6 |
44.7 |
25.9 |
167.5 |
57.5 |
exp |
73.2 |
19.3 |
2126.8 |
984.6 |
65.4 |
18.1 |
642.5 |
310.4 |
log |
97.7 |
27.6 |
3159.9 |
1358.8 |
88.0 |
26.4 |
563.9 |
270.5 |
log10 |
101.0 |
28.6 |
3508.0 |
1535.7 |
94.7 |
27.4 |
588.1 |
286.0 |
sin |
70.8 |
19.4 |
1723.7 |
714.1 |
62.0 |
18.1 |
359.2 |
169.3 |
cos |
65.3 |
19.6 |
2152.9 |
950.0 |
58.0 |
18.4 |
335.3 |
157.1 |
tan |
91.0 |
25.9 |
3654.6 |
1538.3 |
83.8 |
24.7 |
476.6 |
212.5 |
asin |
113.3 |
58.1 |
3931.7 |
1765.6 |
106.1 |
57.1 |
912.5 |
385.6 |
acos |
107.3 |
66.4 |
3623.0 |
1569.7 |
98.6 |
65.6 |
934.5 |
401.5 |
atan |
95.7 |
29.7 |
3593.8 |
1589.7 |
88.1 |
28.8 |
560.6 |
234.4 |
atan 2 |
118.9 |
39.7 |
3871.3 |
1731.0 |
113.5 |
38.1 |
685.2 |
265.5 |
pow |
153.0 |
50.2 |
10172.7 |
4498.1 |
146.1 |
48.8 |
1268.4 |
605.1 |
|