mirror of
https://github.com/RPCS3/rpcs3.git
synced 2025-07-09 08:21:29 +12:00
SPU LLVM Recompiler (preview)
This commit is contained in:
parent
a975ecdc4f
commit
1ca51a023c
6 changed files with 2311 additions and 10 deletions
File diff suppressed because it is too large
Load diff
|
@ -10,6 +10,7 @@ protected:
|
||||||
SPUThread& m_spu;
|
SPUThread& m_spu;
|
||||||
|
|
||||||
u32 m_pos;
|
u32 m_pos;
|
||||||
|
u32 m_size;
|
||||||
|
|
||||||
std::bitset<0x10000> m_block_info;
|
std::bitset<0x10000> m_block_info;
|
||||||
|
|
||||||
|
@ -35,4 +36,7 @@ public:
|
||||||
|
|
||||||
// Create recompiler instance (ASMJIT)
|
// Create recompiler instance (ASMJIT)
|
||||||
static std::unique_ptr<spu_recompiler_base> make_asmjit_recompiler(SPUThread& spu);
|
static std::unique_ptr<spu_recompiler_base> make_asmjit_recompiler(SPUThread& spu);
|
||||||
|
|
||||||
|
// Create recompiler instance (LLVM)
|
||||||
|
static std::unique_ptr<spu_recompiler_base> make_llvm_recompiler(SPUThread& spu);
|
||||||
};
|
};
|
||||||
|
|
|
@ -536,6 +536,7 @@ SPUThread::SPUThread(const std::string& name, u32 index, lv2_spu_group* group)
|
||||||
|
|
||||||
if (g_cfg.core.spu_decoder == spu_decoder_type::llvm)
|
if (g_cfg.core.spu_decoder == spu_decoder_type::llvm)
|
||||||
{
|
{
|
||||||
|
jit = spu_recompiler_base::make_llvm_recompiler(*this);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -851,7 +851,18 @@ void Emulator::Load(bool add_only)
|
||||||
|
|
||||||
if (g_cfg.core.spu_debug)
|
if (g_cfg.core.spu_debug)
|
||||||
{
|
{
|
||||||
fs::file log(Emu.GetCachePath() + "SPUJIT.log", fs::rewrite);
|
fs::file log;
|
||||||
|
|
||||||
|
if (g_cfg.core.spu_decoder == spu_decoder_type::asmjit)
|
||||||
|
{
|
||||||
|
log.open(Emu.GetCachePath() + "SPUJIT.log", fs::rewrite);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (g_cfg.core.spu_decoder == spu_decoder_type::llvm)
|
||||||
|
{
|
||||||
|
log.open(Emu.GetCachePath() + "SPU.log", fs::rewrite);
|
||||||
|
}
|
||||||
|
|
||||||
log.write(fmt::format("SPU JIT Log\n\nTitle: %s\nTitle ID: %s\n\n", Emu.GetTitle(), Emu.GetTitleID()));
|
log.write(fmt::format("SPU JIT Log\n\nTitle: %s\nTitle ID: %s\n\n", Emu.GetTitle(), Emu.GetTitleID()));
|
||||||
fs::create_dir(Emu.GetCachePath() + "SPU");
|
fs::create_dir(Emu.GetCachePath() + "SPU");
|
||||||
fs::remove_all(Emu.GetCachePath() + "SPU", false);
|
fs::remove_all(Emu.GetCachePath() + "SPU", false);
|
||||||
|
|
|
@ -16,7 +16,7 @@
|
||||||
"precise": "This is extremely slow but may fix broken graphics in some games.",
|
"precise": "This is extremely slow but may fix broken graphics in some games.",
|
||||||
"fast": "This is slower than the SPU Recompiler but significantly faster than the precise interpreter.\nGames rarely need this however.",
|
"fast": "This is slower than the SPU Recompiler but significantly faster than the precise interpreter.\nGames rarely need this however.",
|
||||||
"ASMJIT": "This is the fastest option with very good compatibility.\nIf unsure, use this option.",
|
"ASMJIT": "This is the fastest option with very good compatibility.\nIf unsure, use this option.",
|
||||||
"LLVM": "This doesn't exist (yet)"
|
"LLVM": ""
|
||||||
},
|
},
|
||||||
"libraries": {
|
"libraries": {
|
||||||
"auto": "Automatically selects the LLE libraries to load.\nWhile this option works fine in most cases, liblv2 is the preferred option.",
|
"auto": "Automatically selects the LLE libraries to load.\nWhile this option works fine in most cases, liblv2 is the preferred option.",
|
||||||
|
|
|
@ -106,9 +106,6 @@
|
||||||
</item>
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<widget class="QRadioButton" name="spu_llvm">
|
<widget class="QRadioButton" name="spu_llvm">
|
||||||
<property name="enabled">
|
|
||||||
<bool>false</bool>
|
|
||||||
</property>
|
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>LLVM Recompiler</string>
|
<string>LLVM Recompiler</string>
|
||||||
</property>
|
</property>
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue