The R8000 extends the R4000 floating-point architecture to include another control bit whose states are labeled PERF and PREX, for Performance Mode and Precise Exception Mode, respectively. In Performance Mode the R8000 hardware (see Table 5-3) does the following:
The E bit, which becomes sticky in Performance Mode, signifies that a denormalized number was mapped to 0 or minN. Note that the R8000 can only flush denormalized input operands to zero, as opposed to either zero or minN. This deviation is unfortunate but unlikely to be noticeable and is not scheduled to be fixed.
In Precise Exception Mode the R8000 hardware (see Table 5-4) does the following:
Value | Input | Result | Flags |
---|---|---|---|
A:TooSmall | - | trap | U=1, I=1 |
B:ExactDenorm | trap | trap | U=1, I=1 |
C:InexactDenorm | - | trap | U=1, I=1 |
D:ExactNorm | D | D | U=0, I=0 |
E: InexactNorm | - | rnd(E) | U=0, I=1 |
Unlike the R4400, the R8000 totally ignores the FS bit in this case and relies on softfp to emulate the result. This simplification degrades the performance of Precise Exception Mode but does not alter the results.
Performance Mode is retrofitted on the R4400 by enhancing the kernel and softfp. The emulation of Performance Mode deviates from the definition in that the cause bits of the FSR are not cleared by every floating-point operation, but instead continue to be updated based on the result of the operation. This deviation is necessary to achieve acceptable performance.