aboutsummaryrefslogtreecommitdiff
path: root/libpcsxcore/new_dynarec/assem_arm.c
diff options
context:
space:
mode:
authornotaz2011-07-31 23:50:19 +0300
committernotaz2011-08-01 23:32:21 +0300
commitf968d35dc0302f3fb7fba5a1bafb5feed1f758f6 (patch)
tree0a9ff0e2abb86149d1deeb10c7192809455a636d /libpcsxcore/new_dynarec/assem_arm.c
parentb17618c006c1a79ea0aa38c5e452a384f7f2bc95 (diff)
downloadpcsx_rearmed-f968d35dc0302f3fb7fba5a1bafb5feed1f758f6.tar.gz
pcsx_rearmed-f968d35dc0302f3fb7fba5a1bafb5feed1f758f6.tar.bz2
pcsx_rearmed-f968d35dc0302f3fb7fba5a1bafb5feed1f758f6.zip
drc: fix page get code in linkage_arm.s
it did not match what was used elsewhere for PCSX, causing rare crashes due to making bad links.. Also comment get_pointer, it's not obvious what it does.
Diffstat (limited to 'libpcsxcore/new_dynarec/assem_arm.c')
-rw-r--r--libpcsxcore/new_dynarec/assem_arm.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/libpcsxcore/new_dynarec/assem_arm.c b/libpcsxcore/new_dynarec/assem_arm.c
index 0c668d3..33ecf8e 100644
--- a/libpcsxcore/new_dynarec/assem_arm.c
+++ b/libpcsxcore/new_dynarec/assem_arm.c
@@ -186,11 +186,15 @@ void *kill_pointer(void *stub)
return i_ptr;
}
+// find where external branch is liked to using addr of it's stub:
+// get address that insn one after stub loads (dyna_linker arg1),
+// treat it as a pointer to branch insn,
+// return addr where that branch jumps to
int get_pointer(void *stub)
{
//printf("get_pointer(%x)\n",(int)stub);
int *ptr=(int *)(stub+4);
- assert((*ptr&0x0ff00000)==0x05900000);
+ assert((*ptr&0x0fff0000)==0x059f0000);
u_int offset=*ptr&0xfff;
int **l_ptr=(void *)ptr+offset+8;
int *i_ptr=*l_ptr;