Disable SPU asmjit on ARM. Only supported on x86

This commit is contained in:
Vestral 2025-03-21 09:48:31 +09:00 committed by Megamouse
parent 77eef4d783
commit e110334c2c
3 changed files with 51 additions and 8 deletions

View file

@ -842,6 +842,7 @@ void spu_cache::initialize(bool build_existing_cache)
// Initialize compiler instances for parallel compilation // Initialize compiler instances for parallel compilation
std::unique_ptr<spu_recompiler_base> compiler; std::unique_ptr<spu_recompiler_base> compiler;
#if defined(ARCH_X64)
if (g_cfg.core.spu_decoder == spu_decoder_type::asmjit) if (g_cfg.core.spu_decoder == spu_decoder_type::asmjit)
{ {
compiler = spu_recompiler_base::make_asmjit_recompiler(); compiler = spu_recompiler_base::make_asmjit_recompiler();
@ -850,6 +851,22 @@ void spu_cache::initialize(bool build_existing_cache)
{ {
compiler = spu_recompiler_base::make_llvm_recompiler(); compiler = spu_recompiler_base::make_llvm_recompiler();
} }
else
{
fmt::throw_exception("Unsupported spu decoder '%s'", g_cfg.core.spu_decoder);
}
#elif defined(ARCH_ARM64)
if (g_cfg.core.spu_decoder == spu_decoder_type::llvm)
{
compiler = spu_recompiler_base::make_llvm_recompiler();
}
else
{
fmt::throw_exception("Unsupported spu decoder '%s'", g_cfg.core.spu_decoder);
}
#else
#error "Unimplemented"
#endif
compiler->init(); compiler->init();

View file

@ -2140,20 +2140,31 @@ spu_thread::spu_thread(lv2_spu_group* group, u32 index, std::string_view name, u
, lv2_id(lv2_id) , lv2_id(lv2_id)
, spu_tname(make_single<std::string>(name)) , spu_tname(make_single<std::string>(name))
{ {
#if defined(ARCH_X64)
if (g_cfg.core.spu_decoder == spu_decoder_type::asmjit) if (g_cfg.core.spu_decoder == spu_decoder_type::asmjit)
{ {
jit = spu_recompiler_base::make_asmjit_recompiler(); jit = spu_recompiler_base::make_asmjit_recompiler();
} }
else if (g_cfg.core.spu_decoder == spu_decoder_type::llvm) else if (g_cfg.core.spu_decoder == spu_decoder_type::llvm)
{ {
#if defined(ARCH_X64)
jit = spu_recompiler_base::make_fast_llvm_recompiler(); jit = spu_recompiler_base::make_fast_llvm_recompiler();
}
else
{
fmt::throw_exception("Unsupported spu decoder '%s'", g_cfg.core.spu_decoder);
}
#elif defined(ARCH_ARM64) #elif defined(ARCH_ARM64)
if (g_cfg.core.spu_decoder == spu_decoder_type::llvm)
{
jit = spu_recompiler_base::make_llvm_recompiler(); jit = spu_recompiler_base::make_llvm_recompiler();
}
else
{
fmt::throw_exception("Unsupported spu decoder '%s'", g_cfg.core.spu_decoder);
}
#else #else
#error "Unimplemented" #error "Unimplemented"
#endif #endif
}
if (g_cfg.core.mfc_debug) if (g_cfg.core.mfc_debug)
{ {
@ -2215,20 +2226,31 @@ spu_thread::spu_thread(utils::serial& ar, lv2_spu_group* group)
, lv2_id(ar) , lv2_id(ar)
, spu_tname(make_single<std::string>(ar.operator std::string())) , spu_tname(make_single<std::string>(ar.operator std::string()))
{ {
#if defined(ARCH_X64)
if (g_cfg.core.spu_decoder == spu_decoder_type::asmjit) if (g_cfg.core.spu_decoder == spu_decoder_type::asmjit)
{ {
jit = spu_recompiler_base::make_asmjit_recompiler(); jit = spu_recompiler_base::make_asmjit_recompiler();
} }
else if (g_cfg.core.spu_decoder == spu_decoder_type::llvm) else if (g_cfg.core.spu_decoder == spu_decoder_type::llvm)
{ {
#if defined(ARCH_X64)
jit = spu_recompiler_base::make_fast_llvm_recompiler(); jit = spu_recompiler_base::make_fast_llvm_recompiler();
}
else
{
fmt::throw_exception("Unsupported spu decoder '%s'", g_cfg.core.spu_decoder);
}
#elif defined(ARCH_ARM64) #elif defined(ARCH_ARM64)
if (g_cfg.core.spu_decoder == spu_decoder_type::llvm)
{
jit = spu_recompiler_base::make_llvm_recompiler(); jit = spu_recompiler_base::make_llvm_recompiler();
}
else
{
fmt::throw_exception("Unsupported spu decoder '%s'", g_cfg.core.spu_decoder);
}
#else #else
#error "Unimplemented" #error "Unimplemented"
#endif #endif
}
if (g_cfg.core.mfc_debug) if (g_cfg.core.mfc_debug)
{ {

View file

@ -398,6 +398,10 @@ settings_dialog::settings_dialog(std::shared_ptr<gui_settings> gui_settings, std
spu_bg->addButton(ui->spu_asmjit, static_cast<int>(spu_decoder_type::asmjit)); spu_bg->addButton(ui->spu_asmjit, static_cast<int>(spu_decoder_type::asmjit));
spu_bg->addButton(ui->spu_llvm, static_cast<int>(spu_decoder_type::llvm)); spu_bg->addButton(ui->spu_llvm, static_cast<int>(spu_decoder_type::llvm));
#ifndef ARCH_X64
ui->spu_asmjit->setEnabled(false);
#endif
connect(spu_bg, &QButtonGroup::idToggled, [this](int id, bool checked) connect(spu_bg, &QButtonGroup::idToggled, [this](int id, bool checked)
{ {
if (!checked) return; if (!checked) return;