On a PS5 the builder writes 15 dwords: a tag write of 0xc6000006, opcode 0x3a with its arguments, initiator 0x80 whatever the modifier, and a closing tag write; GetSize returns 60. AnyPS5 wrote NUM_INSTANCES and DRAW_INDEX_2 under argument meanings nothing confirms. The driver refuses 0x3a, whose field meanings are not known, and names it DRAW_INDEX_MULTI_INST as Linux's nvd.h does.
Create, CreateEx, Destroy, GetSize and Initialize follow the firmware
13.42 export measurements reported on the pull request: bases 0x813F0000
and 0x81770000, the pointer validated first (+0x01), then sample rate
(+0x10/+0x0F), channels (+0x0D/+0x0C) and application (+0x11/+0x10), the
required caller application 2051 for CELT and 2048 for SILK, the 0x17B2
state marker at +0xCC/+0xE8 behind Destroy (+0x16/+0x15) and fixed
728/752-byte GetSize values; a successful create zero-fills the console
state size. The internal encoder keeps the restricted celt and silk
applications whose packet identity the tests compare, float included.
The tests declare entry points through the libraries' Api.hpp instead of
local prototypes, cast states to the opaque encoder types, drop the silk
ctl/cancel/priority/timeout and live-encoder Terminate throw pins and
compare both float sections against opus_encode_float. Ctl,
Encode*WithPriority and the silk cancel and timeout entry points keep
their throwing stubs, and the debt notes carry the measurement with the
remaining gaps.
PublishStatus updates FileStream's guest status word with atomic operations
from the thread that just read, while KeepDirectoryReadError read it with a
plain load, a data race that ThreadSanitizer reports in guest_gets when two
threads read the same stream.
Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
On a PS5, sceAgcAcbWaitOnAddressGetSize and sceAgcDcbWaitOnAddressGetSize return 56 for size 0, 64 for size 1 and 0 for any other 32-bit value, and sceAgcDcbContextStateOpGetSize returns 0 for an operation above 3. The ACB wait size takes a 32-bit argument instead of a byte.
tanh returned the host's tanh, whose last bit differs from the titles' copy
on Windows. The titles' copy is FreeBSD msun's s_tanh.c over msun's expm1,
and it sets no errno. tanh now computes that algorithm over this file's
Expm1.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
trunc, ceil, floor and nearbyint and their float forms returned the
host's result, which on Windows passes a signalling NaN through
unchanged. The titles' copies follow FreeBSD msun, which returns x + x
for a NaN, so the NaN comes back quieted with its payload and sign; these
functions now do the same before calling the host for other arguments.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
asinf left errno unchanged for |x| > 1, the infinities and NaN, following
included, stores EDOM there and leaves it alone for |x| <= 1; asinf now
does the same, and the test expects it.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
asinf returned the host asin, so its last bit depended on the host: on
Windows it differs from the libc.prx that titles ship on 5,413,834 of the
floats in (-1, 1). That libc.prx is msun's e_asinf.c, which gives the same
bits as PPSA07923's and PPSA05916's copies for all 2^32 arguments. errno
is still left unchanged for |x| > 1 and NaN.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
cbrt returned the host's cbrt, whose last bit differs from the titles' copy
on Windows on 99,933,841 of 320 million random arguments, about 31%. The
titles' copy is FreeBSD msun's s_cbrt.c, and cbrt now computes it.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
The ctype functions threw std::invalid_argument for any value below EOF,
so a title passing a plain char with its high bit set, such as a UTF-8
byte, aborted. The libc.prx bundled with titles accepts -128 to -2: each
class function returns 0 for them, as for 128 to 255 in the C locale,
and toupper and tolower return them unchanged. Values outside -128 to
255 still throw.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
sceAgcDcbWaitRegMem and sceAgcDcbDrawIndirectMulti now write their 0x342 tag writes with header flag bit 2 and sceAgcAcbWaitRegMem with no flags, as libSceAgc on a PS5 does, instead of the predicate bit. ValidateWait accepts both forms and Pm4::IsTagMarker no longer depends on the header flags.