mirror of
https://github.com/ARMSX2/ARMSX2.git
synced 2026-08-24 16:50:16 -07:00
DIV.S, SQRT.S and RSQRT.S ran on host doubles on every recompiler rung, which makes them correctly rounded; the EE's divide/square-root unit is a digit recurrence with no rounding step and is not. The interpreter has run the recurrence since the model landed, so mode 4 now calls the same two functions out of line rather than reproducing them. eeDivide and eeSqrtBits stop being static for it. RSQRT.S composes the two with an ordinary single in between, as silicon does, and its intermediate crosses the square root's call through the island's scratch. Only the value moves: the negative-operand and zero-divisor arms, and every flag they set, are the code they were. Modes 1 to 3 keep the host instruction and the FPUDivFPCR swap. The rsqrt sign table gains a mode-4 leg, which owes every row; the filter for the twenty rows mode 3 misses by one ULP stays where it is, now as that mode's own pin. The divide unit's console table gains a mode-4 leg beside its interpreter one.