4472dbe5e3
mostly-MI floating-point implementation for use by gcc -msoft-float. It's currently only used by arm26, but should be usable by other ports without too much hacking, assuming doubles and u_int64_ts are passed and returned the same way, and FP formats are IEEEish.
150 lines
6.3 KiB
Plaintext
150 lines
6.3 KiB
Plaintext
$NetBSD: timesoftfloat.txt,v 1.1 2000/06/06 08:15:11 bjh21 Exp $
|
|
|
|
Documentation for the `timesoftfloat' Program of SoftFloat Release 2a
|
|
|
|
John R. Hauser
|
|
1998 December 14
|
|
|
|
|
|
-------------------------------------------------------------------------------
|
|
Introduction
|
|
|
|
The `timesoftfloat' program evaluates the speed of SoftFloat's floating-
|
|
point routines. Each routine can be evaluated for every relevant rounding
|
|
mode, tininess mode, and/or rounding precision.
|
|
|
|
|
|
-------------------------------------------------------------------------------
|
|
Contents
|
|
|
|
Introduction
|
|
Contents
|
|
Legal Notice
|
|
Executing `timesoftfloat'
|
|
Options
|
|
-help
|
|
-precision32, -precision64, -precision80
|
|
-nearesteven, -tozero, -down, -up
|
|
-tininessbefore, -tininessafter
|
|
Function Sets
|
|
|
|
|
|
|
|
-------------------------------------------------------------------------------
|
|
Legal Notice
|
|
|
|
The `timesoftfloat' program was written by John R. Hauser.
|
|
|
|
THIS SOFTWARE IS DISTRIBUTED AS IS, FOR FREE. Although reasonable effort
|
|
has been made to avoid it, THIS SOFTWARE MAY CONTAIN FAULTS THAT WILL AT
|
|
TIMES RESULT IN INCORRECT BEHAVIOR. USE OF THIS SOFTWARE IS RESTRICTED TO
|
|
PERSONS AND ORGANIZATIONS WHO CAN AND WILL TAKE FULL RESPONSIBILITY FOR ANY
|
|
AND ALL LOSSES, COSTS, OR OTHER PROBLEMS ARISING FROM ITS USE.
|
|
|
|
|
|
-------------------------------------------------------------------------------
|
|
Executing `timesoftfloat'
|
|
|
|
The `timesoftfloat' program is intended to be invoked from a command line
|
|
interpreter as follows:
|
|
|
|
timesoftfloat [<option>...] <function>
|
|
|
|
Here square brackets ([]) indicate optional items, while angled brackets
|
|
(<>) denote parameters to be filled in. The `<function>' argument is
|
|
the name of the SoftFloat routine to evaluate, such as `float32_add' or
|
|
`float64_to_int32'. The allowed options are detailed in the next section,
|
|
_Options_. If `timesoftfloat' is executed without any arguments, a summary
|
|
of usage is written. It is also possible to evaluate all machine functions
|
|
in a single invocation as explained in the section _Function_Sets_ later in
|
|
this document.
|
|
|
|
Ordinarily, a function's speed will be evaulated separately for each of
|
|
the four rounding modes, one after the other. If the rounding mode is not
|
|
supposed to have any affect on the results of a function--for instance,
|
|
some operations do not require rounding--only the nearest/even rounding mode
|
|
is timed. In the same way, if a function is affected by the way in which
|
|
underflow tininess is detected, `timesoftfloat' times the function both with
|
|
tininess detected before rounding and after rounding. For extended double-
|
|
precision operations affected by rounding precision control, `timesoftfloat'
|
|
also times the function for all three rounding precision modes, one after
|
|
the other. Evaluation of a function can be limited to a single rounding
|
|
mode, a single tininess mode, and/or a single rounding precision with
|
|
appropriate options (see _Options_).
|
|
|
|
For each function and mode evaluated, `timesoftfloat' reports the speed of
|
|
the function in kops/s, or ``thousands of operations per second''. This
|
|
unit of measure differs from the traditional MFLOPS (``millions of floating-
|
|
point operations per second'') only in being a factor of 1000 smaller.
|
|
(1000 kops/s is exactly 1 MFLOPS.) Speeds are reported in thousands instead
|
|
of millions because software floating-point often executes at less than
|
|
1 MFLOPS.
|
|
|
|
The speeds reported by `timesoftfloat' may be affected somewhat by other
|
|
programs executing at the same time as `timesoftfloat'.
|
|
|
|
Note that the remainder operations (`float32_rem', `float64_rem',
|
|
`floatx80_rem' and `float128_rem') will be markedly slower than other
|
|
operations, particularly for extended double precision (`floatx80') and
|
|
quadruple precision (`float128'). This is inherent to the remainder
|
|
function itself and is not a failing of the SoftFloat implementation.
|
|
|
|
|
|
-------------------------------------------------------------------------------
|
|
Options
|
|
|
|
The `timesoftfloat' program accepts several command options. If mutually
|
|
contradictory options are given, the last one has priority.
|
|
|
|
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
-help
|
|
|
|
The `-help' option causes a summary of program usage to be written, after
|
|
which the program exits.
|
|
|
|
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
-precision32, -precision64, -precision80
|
|
|
|
For extended double-precision functions affected by rounding precision
|
|
control, the `-precision32' option restricts evaluation to only the cases
|
|
in which rounding precision is equivalent to single precision. The other
|
|
rounding precision options are not timed. Likewise, the `-precision64'
|
|
and `-precision80' options fix the rounding precision equivalent to double
|
|
precision or extended double precision, respectively. These options are
|
|
ignored for functions not affected by rounding precision control.
|
|
|
|
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
-nearesteven, -tozero, -down, -up
|
|
|
|
The `-nearesteven' option restricts evaluation to only the cases in which
|
|
the rounding mode is nearest/even. The other rounding mode options are not
|
|
timed. Likewise, `-tozero' forces rounding to zero; `-down' forces rounding
|
|
down; and `-up' forces rounding up. These options are ignored for functions
|
|
that are exact and thus do not round.
|
|
|
|
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
-tininessbefore, -tininessafter
|
|
|
|
The `-tininessbefore' option restricts evaluation to only the cases
|
|
detecting underflow tininess before rounding. Tininess after rounding
|
|
is not timed. Likewise, `-tininessafter' forces underflow tininess to be
|
|
detected after rounding only. These options are ignored for functions not
|
|
affected by the way in which underflow tininess is detected.
|
|
|
|
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
|
|
|
|
-------------------------------------------------------------------------------
|
|
Function Sets
|
|
|
|
Just as `timesoftfloat' can test an operation for all four rounding modes in
|
|
sequence, multiple operations can also be tested with a single invocation.
|
|
Three sets are recognized: `-all1', `-all2', and `-all'. The set `-all1'
|
|
comprises all one-operand functions; `-all2' is all two-operand functions;
|
|
and `-all' is all functions. A function set can be used in place of a
|
|
function name in the command line, as in
|
|
|
|
timesoftfloat [<option>...] -all
|
|
|
|
|