Brian DegenhardtandClaude 14c8481277 S4-4: outline COP2 macro FMAC tails into shared DynGen stubs
The hand-rolled COP2 macro arithmetic ops re-emitted the same ~24-insn
tail at every site: the ±FLT_MAX result clamp, the MAC/status flag
extraction, and (at chain boundaries) the status denormalize/normalize
bodies. These were the top three repeated instruction shapes in the UYA
hot-block corpus — the largest single contributor to the EE hot-core
emission-density gap vs the icache-friendly reference emitters, which
generate this family once and BL to it (design adapted from
neither/LRPS2's emitSharedVUBody, GPLv3, credit pstef).

Seven stubs are emitted once per recompiler reset alongside the S4-2
sync stubs: two in-place clamps (q30/q31), three flag tails
(mac+status / mac-only / status-only; xyzw dest mask in w1, result in
q30 left clamped), and the status-chain denormalize/normalize pair.
FMAC bodies now compute into RQSCRATCH and the per-site tail is a bare
BL (flag-dead) or Mov-mask + BL (flag-live); operand pre-clamps are a
Mov + BL. The flag stubs run the extraction with a single weight-vector
load (new cop2Rec.macPackWeightsRev) instead of two literal-pool loads,
and never clobber the result register, retiring the q28 park dance.
The compute-into-cache-slot path (cop2ResultReg) stays for the
tail-less ops; full-mask FMAC writes pay one Mov at the dest-mask
apply in exchange. The denorm-in-w8 forwarding token is retired — the
normalize stub always reloads (store-forwarded when adjacent).

Flag semantics are unchanged: same clamp order, same lane math, same
denorm-scratch RMW masks, same EP-4 chain gating. Pinned by the
existing EeVu0Cop2MacroLazyStatus / cop2 macro suites (1389 tests
green) and a UYA slot-02 stepdiff A/B (identical benign-only outcome
vs base). Emitted-size A/B on the S4 hot set (same scene, same
startpcs): -18.7% sample-weighted, COP2-dense physics blocks -30..-60%,
whole shared corpus -5.5%.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-07-20 11:16:13 -07:00
2026-07-03 18:45:30 -07:00

yaps2

This is a fork of PCSX2 targeting ARM based linux handheld devices. We're aiming to be performant and compatible on lower end ARM hardware, and adopt a "by any means" philosophy.

Thanks

A massive thank you to the PCSX2 team for 20 years of dedication. yaps2 doesn't meet the rigor required of PCSX2 upstream commits, but maybe someday it will.

The following people worked on the yaps2 fork of this project:

  • bmdhacks
  • tokyovigilante
  • pstef

FAQ

Is it good?

A: Yeah. It's pretty fast.

Where do I get builds of this software?

A: Builds are available in nightly releases of Rocknix and Batocera

Did you vibe code it? I see that claude authors your commits you cheater!

A: This fork was written by seasoned developers using LLM devleopment tools. Our philosophy is focused on results, not policing methodology, and modern LLM tools are the most effective way for us to reach our goals.

Can I contribute?

A: Sure. Send a PR. If it's vibe-coded trash we'll reject it. If it's good we'll use it.

Can I fork this project for my own purposes?

A: Sure. If you do cool stuff we'll probably use your code.

Don't you know about XYZ project that already does this

A: Yes we probably copied a lot of their techniques.

Can I make feature requests or tell you that I don't like what you're doing or how you're doing it?

A: Look, we're not trying to be a serious project here so no.

Can I make bug reports?

A: Absolutely, file a github issue and we might look at it.

S
Description
No description provided
Readme
512 MiB
Languages
C++ 68.2%
Kotlin 9.8%
Swift 7.7%
C 5.6%
Objective-C++ 2.2%
Other 6.4%