mirror of
https://github.com/RPCS3/rpcs3.git
synced 2025-04-20 11:36:13 +00:00
rsx fifo: Fix call cmd offset mask
highest 3 bits are masked according to tests, also filter certainly invalid jumps with offset higher than max
This commit is contained in:
parent
c2aa10cccd
commit
098d634328
2 changed files with 5 additions and 5 deletions
|
@ -465,7 +465,7 @@ namespace rsx
|
|||
// Check for flow control
|
||||
if ((cmd & RSX_METHOD_OLD_JUMP_CMD_MASK) == RSX_METHOD_OLD_JUMP_CMD)
|
||||
{
|
||||
const u32 offs = cmd & 0x1ffffffc;
|
||||
const u32 offs = cmd & RSX_METHOD_OLD_JUMP_OFFSET_MASK;
|
||||
if (offs == fifo_ctrl->get_pos())
|
||||
{
|
||||
//Jump to self. Often preceded by NOP
|
||||
|
@ -484,7 +484,7 @@ namespace rsx
|
|||
}
|
||||
if ((cmd & RSX_METHOD_NEW_JUMP_CMD_MASK) == RSX_METHOD_NEW_JUMP_CMD)
|
||||
{
|
||||
const u32 offs = cmd & 0xfffffffc;
|
||||
const u32 offs = cmd & RSX_METHOD_NEW_JUMP_OFFSET_MASK;
|
||||
if (offs == fifo_ctrl->get_pos())
|
||||
{
|
||||
//Jump to self. Often preceded by NOP
|
||||
|
@ -511,7 +511,7 @@ namespace rsx
|
|||
return;
|
||||
}
|
||||
|
||||
const u32 offs = cmd & 0xfffffffc;
|
||||
const u32 offs = cmd & RSX_METHOD_CALL_OFFSET_MASK;
|
||||
m_return_addr = fifo_ctrl->get_pos() + 4;
|
||||
fifo_ctrl->set_get(offs);
|
||||
return;
|
||||
|
|
|
@ -1047,13 +1047,13 @@ enum Method
|
|||
RSX_METHOD_NON_INCREMENT_COUNT_SHIFT = 18,
|
||||
RSX_METHOD_NON_INCREMENT_METHOD_MASK = 0x0000fffc,
|
||||
|
||||
RSX_METHOD_NEW_JUMP_CMD_MASK = 0x00000003,
|
||||
RSX_METHOD_NEW_JUMP_CMD_MASK = 0xe0000003,
|
||||
RSX_METHOD_NEW_JUMP_CMD = 0x00000001,
|
||||
RSX_METHOD_NEW_JUMP_OFFSET_MASK = 0xfffffffc,
|
||||
|
||||
RSX_METHOD_CALL_CMD_MASK = 0x00000003,
|
||||
RSX_METHOD_CALL_CMD = 0x00000002,
|
||||
RSX_METHOD_CALL_OFFSET_MASK = 0xfffffffc,
|
||||
RSX_METHOD_CALL_OFFSET_MASK = 0x1ffffffc,
|
||||
|
||||
RSX_METHOD_NON_METHOD_CMD_MASK = 0xa0030003,
|
||||
RSX_METHOD_RETURN_CMD = 0x00020000,
|
||||
|
|
Loading…
Add table
Reference in a new issue