Skip to content

Commit

Permalink
rsx: Optimize RET returning to following CALL
Browse files Browse the repository at this point in the history
  • Loading branch information
elad335 committed Aug 25, 2023
1 parent 82c5c4d commit 31053c3
Showing 1 changed file with 17 additions and 0 deletions.
17 changes: 17 additions & 0 deletions rpcs3/Emu/RSX/RSXFIFO.cpp
Expand Up @@ -701,6 +701,23 @@ namespace rsx
return;
}

// Optimize returning to another CALL
if ((ctrl->put & ~3) != fifo_ret_addr)
{
if (u32 addr = iomap_table.get_addr(fifo_ret_addr); addr != umax)
{
const u32 cmd0 = vm::read32(addr);

if ((cmd0 & RSX_METHOD_CALL_CMD_MASK) == RSX_METHOD_CALL_CMD)
{
fifo_ctrl->set_get(cmd0 & RSX_METHOD_CALL_OFFSET_MASK);
last_known_code_start = ctrl->get;
fifo_ret_addr += 4;
return;
}
}
}

fifo_ctrl->set_get(std::exchange(fifo_ret_addr, RSX_CALL_STACK_EMPTY));
last_known_code_start = ctrl->get;
return;
Expand Down

0 comments on commit 31053c3

Please sign in to comment.