diff --git a/rpcs3/Emu/Cell/PPUThread.cpp b/rpcs3/Emu/Cell/PPUThread.cpp index 2857240d20..7c0320d9d0 100644 --- a/rpcs3/Emu/Cell/PPUThread.cpp +++ b/rpcs3/Emu/Cell/PPUThread.cpp @@ -81,7 +81,6 @@ using spu_rdata_t = decltype(ppu_thread::rdata); extern void mov_rdata(spu_rdata_t& _dst, const spu_rdata_t& _src); extern void mov_rdata_nt(spu_rdata_t& _dst, const spu_rdata_t& _src); extern bool cmp_rdata(const spu_rdata_t& _lhs, const spu_rdata_t& _rhs); -extern u32(*const spu_getllar_tx)(u32 raddr, void* rdata, cpu_thread* _cpu, u64 rtime); // Verify AVX availability for TSX transactions static const bool s_tsx_avx = utils::has_avx(); @@ -1296,16 +1295,14 @@ const auto ppu_stcx_accurate_tx = build_function_asm(&vm::g_sudo_addr))); c.lea(x86::rbp, x86::qword_ptr(x86::rbp, args[0])); c.and_(x86::rbp, -128); c.prefetchw(x86::byte_ptr(x86::rbp, 0)); c.prefetchw(x86::byte_ptr(x86::rbp, 64)); c.movzx(args[0].r32(), args[0].r16()); c.shr(args[0].r32(), 1); - c.lea(x86::rbx, x86::qword_ptr(x86::rbx, args[0])); + c.lea(x86::rbx, x86::qword_ptr(reinterpret_cast(+vm::g_reservations), args[0])); c.and_(x86::rbx, -128 / 2); c.prefetchw(x86::byte_ptr(x86::rbx)); c.and_(args[0].r32(), 63); diff --git a/rpcs3/Emu/Cell/SPURecompiler.cpp b/rpcs3/Emu/Cell/SPURecompiler.cpp index fa9f65e293..fe3822fbd7 100644 --- a/rpcs3/Emu/Cell/SPURecompiler.cpp +++ b/rpcs3/Emu/Cell/SPURecompiler.cpp @@ -192,9 +192,6 @@ DECLARE(spu_runtime::g_gateway) = build_function_asm([](asmjit:: c.push(x86::rax); #endif - // Load tr_all function pointer to call actual compiled function - c.mov(x86::rax, asmjit::imm_ptr(spu_runtime::tr_all)); - // Save native stack pointer for longjmp emulation c.mov(x86::qword_ptr(args[0], ::offset32(&spu_thread::saved_native_sp)), x86::rsp); @@ -209,7 +206,7 @@ DECLARE(spu_runtime::g_gateway) = build_function_asm([](asmjit:: c.vzeroupper(); } - c.call(x86::rax); + c.call(asmjit::imm_ptr(spu_runtime::tr_all)); if (utils::has_avx()) { diff --git a/rpcs3/Emu/Cell/SPUThread.cpp b/rpcs3/Emu/Cell/SPUThread.cpp index 828e33f591..95d2d711e8 100644 --- a/rpcs3/Emu/Cell/SPUThread.cpp +++ b/rpcs3/Emu/Cell/SPUThread.cpp @@ -416,15 +416,13 @@ const auto spu_putllc_tx = build_function_asm(&vm::g_sudo_addr))); c.lea(x86::rbp, x86::qword_ptr(x86::rbp, args[0])); c.prefetchw(x86::byte_ptr(x86::rbp, 0)); c.prefetchw(x86::byte_ptr(x86::rbp, 64)); c.and_(args[0].r32(), 0xff80); c.shr(args[0].r32(), 1); - c.lea(x86::rbx, x86::qword_ptr(x86::rbx, args[0])); + c.lea(x86::rbx, x86::qword_ptr(reinterpret_cast(+vm::g_reservations), args[0])); c.prefetchw(x86::byte_ptr(x86::rbx)); c.mov(x86::r13, args[1]); @@ -821,15 +819,13 @@ const auto spu_putlluc_tx = build_function_asm(&vm::g_sudo_addr))); c.lea(x86::rbp, x86::qword_ptr(x86::rbp, args[0])); c.prefetchw(x86::byte_ptr(x86::rbp, 0)); c.prefetchw(x86::byte_ptr(x86::rbp, 64)); c.and_(args[0].r32(), 0xff80); c.shr(args[0].r32(), 1); - c.lea(x86::rbx, x86::qword_ptr(x86::rbx, args[0])); + c.lea(x86::rbx, x86::qword_ptr(reinterpret_cast(+vm::g_reservations), args[0])); c.prefetchw(x86::byte_ptr(x86::rbx)); c.mov(x86::r13, args[1]); @@ -1034,13 +1030,11 @@ const extern auto spu_getllar_tx = build_function_asm(&vm::g_sudo_addr))); c.lea(x86::rbp, x86::qword_ptr(x86::rbp, args[0])); c.and_(args[0].r32(), 0xff80); c.shr(args[0].r32(), 1); - c.lea(x86::rbx, x86::qword_ptr(x86::rbx, args[0])); + c.lea(x86::rbx, x86::qword_ptr(reinterpret_cast(+vm::g_reservations), args[0])); c.mov(x86::r13, args[1]); // Alloc args[0] to stamp0