xenia-project / xenia

Xbox 360 Emulator Research Project
https://xenia.jp
Other
8.27k stars 1.14k forks source link

[a64] Implement an ARM64 backend #2259

Open Wunkolo opened 6 months ago

Wunkolo commented 6 months ago

Implements a 64-bit ARM backend that emits a64 instructions using oaknut.

image

image

Depends on https://github.com/xenia-project/xenia/pull/2258 and https://github.com/xenia-project/FFmpeg/pull/8

Addresses https://github.com/xenia-project/xenia/issues/2002

Tested on a ThinkPad X13s and uses unit tests from https://github.com/xenia-project/xenia/pull/1348 as well. There is currently a ARMv8.1-a requirement due to the use of some of the newer atomic instructions such as CASAL.

Wunkolo commented 6 months ago

Debugger, instruction-stepping, call-stack unwinding, etc have been implemented as well: image

Wunkolo commented 5 months ago

Latest iteration running Beautiful Katamari and Geometry Wars. Still some minor issues but serving gameplay now.

https://github.com/xenia-project/xenia/assets/644247/948debb5-abb8-4270-955d-2fc45d0fb02f

https://github.com/xenia-project/xenia/assets/644247/364692fa-fafb-4c77-9b29-2a78f69841cb

Wunkolo commented 5 months ago

No longer requires Armv8.1. Instructions are emitted with an Armv8.0-a baseline and will detect features such as FP16 and LSE and such before utilizing them(and expose them in the feature-mask config similar to x64).