aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authornotaz2011-09-24 18:44:23 +0300
committernotaz2011-09-25 01:17:59 +0300
commit15776b68de021ae41ebd5d8d646beca694c3784d (patch)
tree19be6a544ed29f8837cb2c6245c10e7c50eb703a
parentbb5cf0fcf7abafa7648734696320d5fa3bdb1e0a (diff)
downloadpcsx_rearmed-15776b68de021ae41ebd5d8d646beca694c3784d.tar.gz
pcsx_rearmed-15776b68de021ae41ebd5d8d646beca694c3784d.tar.bz2
pcsx_rearmed-15776b68de021ae41ebd5d8d646beca694c3784d.zip
drc: fix PCSX HLE hack for armv5
also adds some asserts I did during debugging this
-rw-r--r--libpcsxcore/new_dynarec/assem_arm.c5
-rw-r--r--libpcsxcore/new_dynarec/new_dynarec.c1
2 files changed, 4 insertions, 2 deletions
diff --git a/libpcsxcore/new_dynarec/assem_arm.c b/libpcsxcore/new_dynarec/assem_arm.c
index 33ecf8e..2a0a214 100644
--- a/libpcsxcore/new_dynarec/assem_arm.c
+++ b/libpcsxcore/new_dynarec/assem_arm.c
@@ -170,6 +170,7 @@ void set_jump_target_fillslot(int addr,u_int target,int copy)
/* Literal pool */
add_literal(int addr,int val)
{
+ assert(literalcount<sizeof(literals)/sizeof(literals[0]));
literals[literalcount][0]=addr;
literals[literalcount][1]=val;
literalcount++;
@@ -226,7 +227,7 @@ int verify_dirty(int addr)
u_int *ptr=(u_int *)addr;
#ifdef ARMv5_ONLY
// get from literal pool
- assert((*ptr&0xFFF00000)==0xe5900000);
+ assert((*ptr&0xFFFF0000)==0xe59f0000);
u_int offset=*ptr&0xfff;
u_int *l_ptr=(void *)ptr+offset+8;
u_int source=l_ptr[0];
@@ -279,7 +280,7 @@ void get_bounds(int addr,u_int *start,u_int *end)
u_int *ptr=(u_int *)addr;
#ifdef ARMv5_ONLY
// get from literal pool
- assert((*ptr&0xFFF00000)==0xe5900000);
+ assert((*ptr&0xFFFF0000)==0xe59f0000);
u_int offset=*ptr&0xfff;
u_int *l_ptr=(void *)ptr+offset+8;
u_int source=l_ptr[0];
diff --git a/libpcsxcore/new_dynarec/new_dynarec.c b/libpcsxcore/new_dynarec/new_dynarec.c
index 8ab3128..666b4d4 100644
--- a/libpcsxcore/new_dynarec/new_dynarec.c
+++ b/libpcsxcore/new_dynarec/new_dynarec.c
@@ -7980,6 +7980,7 @@ int new_recompile_block(int addr)
emit_movimm(start,0);
emit_writeword(0,(int)&pcaddr);
emit_jmp((int)new_dyna_leave);
+ literal_pool(0);
#ifdef __arm__
__clear_cache((void *)beginning,out);
#endif