mirror of
https://github.com/RPCS3/rpcs3.git
synced 2025-07-06 15:01:28 +12:00
Improved be_t
Fixed NV4097_SET_TWO_SIDE_LIGHT_EN Added LIS, ORI, NOP & BLR to PPU Jit
This commit is contained in:
parent
64158b1b10
commit
eada1fe12c
13 changed files with 93 additions and 119 deletions
|
@ -5,6 +5,7 @@
|
|||
#include "Emu/SysCalls/Static.h"
|
||||
#include "Crypto/sha1.h"
|
||||
#include "ModuleManager.h"
|
||||
#include "Emu/Cell/PPUInstrTable.h"
|
||||
|
||||
u32 getFunctionId(const char* name)
|
||||
{
|
||||
|
@ -149,12 +150,12 @@ void Module::SetName(const std::string& name)
|
|||
|
||||
bool Module::CheckID(u32 id) const
|
||||
{
|
||||
return Emu.GetIdManager().CheckID(id) && Emu.GetIdManager().GetID(id).m_name == GetName();
|
||||
return Emu.GetIdManager().CheckID(id) && Emu.GetIdManager().GetID(id).GetName() == GetName();
|
||||
}
|
||||
|
||||
bool Module::CheckID(u32 id, ID*& _id) const
|
||||
{
|
||||
return Emu.GetIdManager().CheckID(id) && (_id = &Emu.GetIdManager().GetID(id))->m_name == GetName();
|
||||
return Emu.GetIdManager().CheckID(id) && (_id = &Emu.GetIdManager().GetID(id))->GetName() == GetName();
|
||||
}
|
||||
|
||||
bool Module::RemoveId(u32 id)
|
||||
|
@ -174,12 +175,15 @@ void Module::PushNewFuncSub(SFunc* func)
|
|||
|
||||
void fix_import(Module* module, u32 func, u32 addr)
|
||||
{
|
||||
vm::write32(addr + 0x0, 0x3d600000 | (func >> 16)); /* lis r11, (func_id >> 16) */
|
||||
vm::write32(addr + 0x4, 0x616b0000 | (func & 0xffff)); /* ori r11, (func_id & 0xffff) */
|
||||
vm::write32(addr + 0x8, 0x60000000); /* nop */
|
||||
// leave rtoc saving at 0xC
|
||||
vm::write64(addr + 0x10, 0x440000024e800020ull); /* sc + blr */
|
||||
vm::write64(addr + 0x18, 0x6000000060000000ull); /* nop + nop */
|
||||
using namespace PPU_instr;
|
||||
|
||||
vm::write32(addr + 0x0, LIS(11, func >> 16)); /* lis r11, (func_id >> 16) */
|
||||
vm::write32(addr + 0x4, ORI(11, 11, func & 0xffff)); /* ori r11, (func_id & 0xffff) */
|
||||
vm::write32(addr + 0x8, NOP());
|
||||
vm::write32(addr + 0x10, BLR());
|
||||
vm::write32(addr + 0x14, SC(2));
|
||||
vm::write32(addr + 0x18, NOP());
|
||||
vm::write32(addr + 0x20, NOP());
|
||||
|
||||
module->Load(func);
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue