Fallback unsupported database SPU decoder on ARM64 (#18651)

## Summary
- fall back from database-applied `SPU Decoder: Recompiler (ASMJIT)` to
`Recompiler (LLVM)` on ARM64 builds during boot
- log the fallback in `fixup_settings()` instead of letting SPU
initialization fail later

## Problem
`Need for Speed: Most Wanted [BLES01659]` receives `SPU Decoder:
Recompiler (ASMJIT)` from the config database. On ARM64 builds that
decoder is unsupported, which caused RPCS3 to abort during SPU
initialization with `Unsupported spu decoder` while the UI remained on
the loading screen.

## Validation
- built RPCS3 locally on macOS Apple Silicon
- booted `BLES01659` through the database config path with the custom
per-game override temporarily removed
- verified the log now shows the ARM64 fallback warning and `SPU
Decoder: Recompiler (LLVM)` instead of the previous fatal error
- observed the title proceed past the old boot blocker into active RSX
program compilation

---------

Co-authored-by: Elad <18193363+elad335@users.noreply.github.com>
This commit is contained in:
Cicero Hellmann Ratti 2026-07-01 13:08:54 +02:00 committed by GitHub
parent 03647fdb4e
commit 6647c5a2bd
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -336,6 +336,20 @@ static void fixup_settings(const psf::registry* _psf)
} }
} }
#if defined(ARCH_ARM64)
if (g_cfg.core.spu_decoder == spu_decoder_type::asmjit)
{
#ifdef LLVM_AVAILABLE
constexpr auto arm64_spu_fallback = spu_decoder_type::dynamic;
#else
constexpr auto arm64_spu_fallback = spu_decoder_type::_static;
#endif
sys_log.warning("The setting '%s' is currently not supported on ARM64 builds and will therefore be changed from '%s' to '%s' during emulation.",
g_cfg.core.spu_decoder.get_name(), spu_decoder_type::asmjit, arm64_spu_fallback);
g_cfg.core.spu_decoder.set(arm64_spu_fallback);
}
#endif
if (const u32 psf_resolution = _psf ? psf::get_integer(*_psf, "RESOLUTION", 0) : 0) if (const u32 psf_resolution = _psf ? psf::get_integer(*_psf, "RESOLUTION", 0) : 0)
{ {
const std::map<video_resolution, u32> resolutions const std::map<video_resolution, u32> resolutions