$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


