mirror of
https://github.com/mitch030504/Wiicompiled_VR_Frame.git
synced 2026-10-06 01:00:14 +02:00
Every translated guest load and store tests RequiresCheckedAccess(). On x86-64 and Windows that is a compile-time false, but on AArch64 it read a global flag, which under PIE is a GOT load plus a byte load and a branch on every access, re-read after every guest store. The flag is only true on kernels with pages larger than 4 KiB. The Steam Frame's SteamOS kernel uses 4 KiB pages (getconf PAGESIZE on the headset reports 4096), so the native --headset steam_frame build now folds the test away like x86-64 does. GuestFlat::Initialize checks the page size at startup in that build and refuses to start with a clear message if it is ever anything else. Android and other AArch64 builds still probe at runtime. Checked with clang --target=aarch64-linux-gnu -O2 -fPIE: a FlatRead32 loop loses both flag loads and the checked Memory::Read32 fallback. Follows the finding from nx-mod/wiicompiled-nx 18ef16f6, which made the flag hidden instead; a compile-time constant removes it entirely. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_018NKSMYZU43wUfYtm1sxGsC