Repository navigation
feat(libc): implement unsigned 32-bit minimum - #11295
Conversation
|
Some comparisons could not be completed because a pull request conflicts with the base branch. Review these shared files manually before concluding that there is no overlap.
|
|
Windows run of head AI-assisted: yes (Claude Code); results above were run on this machine. |
MarcZX10
left a comment
There was a problem hiding this comment.
The unsigned scan and its boundary, alignment, preservation, and differential coverage look sound from the submitted diff. The branch is 158 commits behind current main; both Api.hpp and docs/dev/debt/libc.md changed after its merge base. The reported Windows/WSL and combined-helper runs are useful, but the contribution rules require branches to be based on and kept up to date with main. Please rebase onto current main and rerun the focused guest_vector_algorithms and public_headers checks on the resulting head before this is approved.
MarcZX10
left a comment
There was a problem hiding this comment.
I refreshed the exact-head sync check against current upstream/main 204c6747d0a1cbaf932def3dea0778810cc3935e: this head is 1 ahead / 255 behind. The merge preview is clean, but Api.hpp and docs/dev/debt/libc.md changed on main since this branch’s base (#9269, #10354 and #10608); preserve those declarations and entries. The reported Windows/WSL and combined-helper results remain useful but predate this current base. Please rebase and rerun guest_vector_algorithms and public_headers on the resulting exact head. No new function-specific defect found.
f237f50 to
ae84a8e
Compare
ae84a8e to
be750a1
Compare
Dismissing a stale review: the requested changes were addressed after it (new head) and the merge queue blocks on it. Please request changes again if anything is still open.
|
Checked the diff against |
What
Add the missing libc export
__std_min_4u(60rcqDrkUNY): read a nonempty range of unsigned 32-bit elements and return the minimum value. Reads use the existingmemcpyhelper, accepting unaligned ranges and leaving the input untouched. Declare the export once in the publicApi.hpp; tests include that header. Null, empty, reversed and partial-element ranges callNotImplemented_nid_no_patch; their native failure behavior remains unimplemented and recorded in debt. Tests cover valid inputs without pinning those unsupported paths.Contract evidence: the
libc.prxbundled with PPSA03671 v01.001.005 exports this NID at RVA0x62680, size0x1a2; ELF SHA256483961e086b8a1fffa8138b3c0badf798987fb5f35ec908d828946408be2d8a6. Reading the original confirms range pointers inrdi/rsi, 4-byte elements, unsigned minimum selection (vpminudat0x626c0andcmovb %ecx,%eaxat0x62815) and a value returned ineax. It has no calls or image-relative data references. The original function was also run directly from its isolated mapped load segments on this Windows host, without relocations, module initializers or other module exports. This is a host differential, not a console measurement. Microsoft STL's public implementation independently corroborates the unsigned 32-bit value-returning signature. The implementation is a generic scalar scan written from that contract.Main and all 1,394 open PR heads were scanned for the name and raw NID before implementation: no matches. No third-party code, module bytes or title files are added. No current title dependency, title unblock or performance improvement is claimed.
Tested
Current-main synchronization (27 October 2026). Exact tested/published head:
be750a1f384f784cfb5c99e5682359ac1c5bc778. Main base:cb45ae2ddf6e113a4619e8fed91fe7b9333c5c0f.ae84a8e11a1340e521176a83920f53fc691fadcbonto the two newer main commits. Main changed only thewindows_crash_stack_wordstest regex incore/libs/prx/libc/CMakeLists.txt(fix(main): windows_crash_stack_words regex crossed by '~' in register dump #11633). The entire four-file contribution patch is byte-identical before and after the rebase; no implementation or regression assertion changed.guest_vector_algorithms_testsin the existing full-project Release configurations.guest_vector_algorithmsandpublic_headerspass 2/2 on Windows 11 / WinLibs GCC 15.2.0 and 2/2 on Ubuntu 24.04 WSL / GCC 13.3.0.7da0577e45f238c6bfa01a818bd7e27f727ebeffalso builds and passes both focused tests on Windows and Ubuntu. This synchronization ran 32 focused checks in total across the seven individual heads and the combined head.a27d73c1f43135378c54ed6477af71273135ec42; only the unrelated upstream CMake regex differs. The previous original-module differential, standalone-header and AddressSanitizer evidence below retains its stated revisions and was not rerun for this synchronization.Earlier implementation validation and provenance
Current-main refresh (27 October 2026). Exact tested/published head:
ae84a8e11a1340e521176a83920f53fc691fadcb. Fetched main base:74acfad65b3f0fd4eab653f3a3989d298fba1157.f237f5085cc5dd4881dae7231132c730a39fd792. The__std_min_4uproduction body is byte-identical to that head. Every existing main declaration and debt entry is preserved; the patch still changes only the implementation, public declaration, regression cases and debt entry. The unchanged debt bullet was moved away from the _Thrd_lt insertion in feat(libc): implement _Thrd_lt #10788, removing that documentation-only content conflict.guest_vector_algorithms_tests;ctest --test-dir build -R "^(guest_vector_algorithms|public_headers)$" -V --output-on-failurepassed 2/2 on this exact head (19.66 s).a27d73c1f43135378c54ed6477af71273135ec42also builds and passes both focused checks on Windows and Ubuntu.92db947130efc9e7e12c492683329f2ebc3e1996merges cleanly with the main base, each individual helper and the seven-helper composition. This is a content-merge check for feat(libc): implement _Thrd_lt #10788; its implementation was not part of the combined runtime run.tools/check_main_sync.py --base origin/main --head ae84a8e11a1340e521176a83920f53fc691fadcb --strictpass. The sync check is one ahead and zero behind the fetched main base above. Bundled dependencies use that base's pinned revisions; no contribution dependency was introduced.public_headersaudits unique declarations and umbrella coverage. Its current upstream 90-second timeout is unchanged. The full set of 64 standalone-header batches and the full CTest suite were not run; the targeted header checks below were added afterward.Additional validation on 27 October 2026, combined revision
a27d73c1f43135378c54ed6477af71273135ec42(the same seven-helper composition described above):include/Api.hpp,include/exceptions/Runtime.hpp,include/exceptions/Unwind.hpp,include/SonyCrt.hpp, andlibc.hpp), plus a compilation unit including all 368 library umbrellas together, pass with C++20 and-Werroron Windows/WinLibs GCC 15.2.0 and Ubuntu/GCC 13.3.0. Every header is included twice, and the existing checker also rejects third-party header dependencies: 6 compilation units per platform, all pass. This is targeted coverage, not the full 64-batch matrix.ANYPS5_ENABLE_ASAN=ON, RelWithDebInfo, rebuilt libc andguest_vector_algorithms_tests.ASAN_OPTIONS=halt_on_error=1:detect_leaks=1 ctest --test-dir build-asan-libc-followup-20261027-a -R '^guest_vector_algorithms$' -V --output-on-failurepassed 1/1, with no AddressSanitizer or LeakSanitizer finding.The earlier differential and negative-control results below belong to their stated heads. The original-module differential was not rerun for this refresh. No console, title or GPU execution and no performance claim.
Earlier implementation validation and provenance
Current-main refresh (26 October 2026), exact published/tested head
f237f5085cc5dd4881dae7231132c730a39fd792, main basebf77a9e9cba4b02c358779b35295176dd9cae164:c685175f955ff5067b52288ab8defd6cb3f67b2aonto the main base above. All existing main declarations and debt entries are retained. The__std_min_4uproduction function body is byte-identical to the previously reviewed head; the patch still changes only its implementation, public declaration, regression cases and debt entry.guest_vector_algorithms_tests;ctest --test-dir build -R "^(guest_vector_algorithms|public_headers)$" -V --output-on-failurepassed 2/2 on this exact head (19.56 s).public_headersis the unique-declaration and umbrella-coverage audit; standalone-header compilation batches and the full CTest suite were not run in this refresh.tools/check_conventions.py --base origin/main, PR-diff whitespace checks andtools/check_main_sync.py --base origin/main --head f237f5085cc5dd4881dae7231132c730a39fd792 --strictpass. The sync check reports one commit ahead and zero behind the fetched main base above.The previous baseline, differential and negative-control evidence below belongs to the earlier heads stated there. The original-module comparison was not rerun for this rebase-only refresh, and no console measurement was made.
Earlier implementation validation and provenance
Base:
e41113fd39c8528de37028a933eae49ca5f7ebd2. Tested/published head:c685175f955ff5067b52288ab8defd6cb3f67b2a.BUILD_TESTING=ON, full-project configuration: built productionlibs,relinkerandguest_vector_algorithms_tests.guest_vector_algorithmsandpublic_headerspass on the initial unmodified main (898a7fe). Added regression cases cover single values, all pairs of eight unsigned edge values, unsigned/sign and 16/32-bit boundaries, 20 lengths through 257 elements, offsets 0–31, unchanged input/canaries, repeated minima, all-maximum ranges and a unique minimum at every position.ctest --test-dir build -R "^(guest_vector_algorithms|public_headers)$" -V --output-on-failure: both pass on Windows. The public-header audit verifies unique declarations and umbrella coverage (368 libraries, 12,224 exports); standalone-header compilation batches and the full CTest suite were not run.UINT32_MAXand every pair of eight edge values. Input ranges remain unchanged.Overlap:
tools/pr_overlap.py --branch feat/libc-unsigned-min32 --repo boykopovar/AnyPS5against97d33464c5ae244079d0e36d27340fc4aac276a0reports no confirmed overlap. Manually inspected all 39 stale shared-file patches against their merge bases: #5021, #5303, #6565, #6713, #7081, #7386, #7447, #7544, #7648, #7715, #8150, #8417, #9087, #9269, #9371, #9447, #9526, #9669, #9771, #9863, #9873, #9929, #10007, #10113, #10158, #10200, #10222, #10226, #10229, #10283, #10346, #10349, #10405, #10467, #10610, #10742, #10788, #10898, #10989. They change other debt entries; the public-header additions in #10742, #10788 and #10989 concern math, thread and versioned-filesystem exports. None changes this export or its neighboring vector declarations/debt entry. Those stale branches are not claimed merge-clean. Trial merges with our independent #10460 and #11289 both succeed without content conflicts; no dependency on either.The final rebase onto
e41113fd39c8528de37028a933eae49ca5f7ebd2adds upstream strcoll, symbolic-link test and import-audit changes; it changes none of the four files in this patch. The contribution diff is byte-for-byte identical to the scanned revision, and both OS tests and the native differential were repeated on the published head.Checklist
main; no other open PR implements the same functionsNotImplemented_nid_no_patch); silent stubs are listed under Silent stubs in their library's technical debt file.mdfiles or images added to the repository (attach them to this PR)