| $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 | |