fpmode - run a command in specified floating point and/or memory mode
fpmode precise|performance|smm|nsmm|spec|nonspec command [ arguments ]
fpmode executes command, forcing it to use the specified floating point
exception and memory access mode. This is only meaningful on processors
that support multiple modes. On these processors, the default mode is
usually performance mode (also called imprecise exception mode) and nonsequential
memory (nsmm) mode. On all other processors, the default is
precise exception and sequential (smm) mode.
The R8000 is the only processor which supports both a precise exception
mode and a performance mode. All other processors support only precise
exceptions, though automatic flushing of denormalized results to zero may
be controlled through the setting of the FS bit in the FP control and
status register by calling set_fpc_csr().
In precise exception mode, all floating point exceptions/interrupts are
reported on the instruction that caused the exception, so floating point
signal handlers can clean up the FP state and continue execution. In
performance mode, floating point interrupts are asynchronous and the
reported program counter is meaningless. Precise mode is provided as a
means of debugging processes and/or backward compatibility for programs
that have knowledge of the FP state. It causes significant performance
When a program is run in performance mode on an R8000, the floating point
processor automatically flushes all denormalized results to zero
regardless of the setting of the FS (flush denormalized results to zero)
bit in the FP control and status register. This bit is turned on at
exec() time. Turning it off (by calling set_fpc_csr()) will cause
performance degradation. When the same program is run in precise mode,
the FS bit is turned off at exec() time (for backward compatibility with
older processors). Note that this means a given program may generate
different results when run in performance and precise modes.
Non-sequential memory access mode allows the processor to do floating
point and integer memory operations out of order, thus possibly providing
better performance. This is only supported on R8000 processors.
Turning on speculative execution (spec) mode tells the kernel to ignore
all memory access faults generated by the program. This mode is used by
the compiler to provide better performance in some cases by allowing
eager instruction scheduling. Note that this may also cause significantly
worse performance if used indiscriminately and should be avoided when
debugging since it masks potential problems.
The floating point mode is inherited across fork() and exec() system
calls. To modify both exception and memory modes, use fpmode twice; e.g.,
fpmode precise fpmode smm command
syssgi(2), get_fpc_csr(3), set_fpc_csr(3).
In the case of the following command
fpmode precise command1; command2
fpmode applies only to command1. The command
fpmode precise (command1; command2)
is syntactically incorrect.
PPPPaaaaggggeeee 2222 [ Back ]