mirror of
https://github.com/boykopovar/AnyPS5.git
synced 2026-10-22 00:22:57 -05:00
Dusklight (PPSA99305) imports atanhf (cPGyc5FGjy0) from libSceLibcInternal.prx; the libc.prx it bundles only has a zero-return stub for it. The implementation follows the atanhf of the libc.prx bundled with PPSA28319 (0x438a0), read from its disassembly: FreeBSD msun's e_atanhf.c calling msun's s_log1pf.c, both as of 59bc2f09 (stable/9, the revision the sinhf port took expm1f and expf from). The log1pf paths for the positive arguments atanhf passes are inlined, as the exported log1pf is still the host's. For |x| > 1, the infinities and NaN, Sony's error helper raises FE_INVALID and sets errno to EDOM before returning (x - x) / (x - x); for |x| = 1 it sets errno to ERANGE before returning x / 0. Other arguments leave errno alone. Running that code from the title's libc.prx on a Windows host gives the same bits, errno and floating-point exceptions as the built libc.prx for all 2^32 arguments, and msun's own e_atanhf.c and s_log1pf.c built with the host compiler give the same bits. With the host log1pf instead of the msun one, 4.7% of the arguments in [0, 1) differ. guest_math pins bits for every branch reachable from atanhf, both signs, and the errno and exception behaviour. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>