Repository navigation
v0.0.147
rePIU v0.0.147
이전 릴리스 v0.0.146 이후의 변경입니다. 이번 릴리스는 pumpito 로딩 중 수백만 번
예외 경로로 빠지던 zlib DEFLATE 상태 분기를 AOT에서 직접 실행하도록 개선합니다.
pumpito 로딩 성능
- pumpito의 내장 zlib 1.1.3
inflate_codes()가 사용하는 byte 상태 jump table을 AOT가
인식합니다. 해당 분기는 기존 로그에서 약 1,226만 회 HLE dispatcher를 왕복한 로딩
병목이었습니다. - 새 matcher는
cmp low-r8, bound; jnbe; and parent-r32, 0xff; jmp cs:[parent-r32*4+table]의 register 관계와 mask를 검증한 뒤 기존 native jump-table
emitter로 연결합니다. - pumpito 전용 주소나 실행 파일 이름, zlib 함수 이름을 조건으로 사용하지 않습니다.
같은 machine-code 계약을 사용하는 다른 바이너리에도 적용되는 공용 AOT 최적화입니다. - mask나 destination register가 다르거나 high-byte register를 비교하거나 정규화가 생략되면
기존 dispatcher 경로로 안전하게 복귀합니다.
검증
- 실제 pumpito
PIU.EXE의inflate_codes()구간을 직접 entry로 계획했을 때 10개 target의
native jump table 1개가 생성되고 HLE boundary는 0개였습니다. - synthetic probe에서 정상 byte-guard 형태, 기존 32-bit guard 형태와 네 가지 fail-closed
변형을 검증했습니다. - Win32 x86 Release의
repiu와repiu_aot_probe빌드 및 전체 probe suite가 통과했습니다.
알려진 제한
- 로딩 시간과 exception 감소량은 사용자 게임 자산으로 새 실행 로그를 받아 최종 측정해야
합니다. 정적 계획과 code-cache 생성은 검증됐지만 릴리스 노트에는 아직 실측 개선 배수를
기재하지 않습니다. - 저작권이 있는 ROM ZIP과 CHD는 배포하지 않습니다.
rePIU v0.0.147
Everything since the previous release, v0.0.146. This release makes AOT execute the zlib
DEFLATE state dispatch that previously fell through the exception path millions of times during
pumpito loading.
pumpito loading performance
- AOT now recognizes the byte-state jump table used by pumpito's statically linked zlib 1.1.3
inflate_codes(). The previous log recorded roughly 12.26 million HLE dispatcher round trips
at this loading hotspot. - The matcher validates the register and mask relationship in
cmp low-r8, bound; jnbe; and parent-r32, 0xff; jmp cs:[parent-r32*4+table], then reuses the existing native jump-table
emitter. - No pumpito-specific address, executable name, or zlib function name participates in matching.
This is a general AOT optimization for binaries with the same machine-code contract. - A different mask or destination register, a high-byte comparison, or omitted normalization
safely falls back to the existing dispatcher path.
Verification
- Planning directly from pumpito
PIU.EXE'sinflate_codes()region produces one native jump
table with ten targets and zero HLE boundaries. - Synthetic probes cover the supported byte-guard form, the existing 32-bit guard form, and four
fail-closed variants. - Win32 x86 Release builds of
repiuandrepiu_aot_probe, plus the full probe suite, pass.
Known limitations
- Loading-time and exception-count reductions still require final measurement from a new run with
user-supplied game assets. Static planning and code-cache generation are verified, so no measured
speedup multiplier is claimed yet. - Copyrighted ROM ZIP and CHD assets are not distributed.