diff options
author | notaz | 2011-10-08 16:57:19 +0300 |
---|---|---|
committer | notaz | 2011-10-10 00:25:54 +0300 |
commit | 13e35c04a17506ac0848d7fb089fa817b3d697e9 (patch) | |
tree | 432cbb23c484f5aaaa64b132b668fe4e4a4c3b97 /libpcsxcore/new_dynarec/assem_arm.c | |
parent | ffb0b9e0f051789f97f5efdcfab0b261e62688f9 (diff) | |
download | pcsx_rearmed-13e35c04a17506ac0848d7fb089fa817b3d697e9.tar.gz pcsx_rearmed-13e35c04a17506ac0848d7fb089fa817b3d697e9.tar.bz2 pcsx_rearmed-13e35c04a17506ac0848d7fb089fa817b3d697e9.zip |
drc: remove some old inline memhandlers
generic code handles it better now.
Diffstat (limited to 'libpcsxcore/new_dynarec/assem_arm.c')
-rw-r--r-- | libpcsxcore/new_dynarec/assem_arm.c | 31 |
1 files changed, 17 insertions, 14 deletions
diff --git a/libpcsxcore/new_dynarec/assem_arm.c b/libpcsxcore/new_dynarec/assem_arm.c index e29f6c3..57c6e91 100644 --- a/libpcsxcore/new_dynarec/assem_arm.c +++ b/libpcsxcore/new_dynarec/assem_arm.c @@ -2677,9 +2677,18 @@ emit_extjump_ds(int addr, int target) emit_extjump2(addr, target, (int)dyna_linker_ds); } -#ifdef PCSX -#include "pcsxmem_inline.c" -#endif +// put rt_val into rt, potentially making use of rs with value rs_val +static void emit_movimm_from(u_int rs_val,int rs,u_int rt_val,int rt) +{ + u_int xor=rs_val^rt_val; + u_int xs; + for(xs=xor;xs!=0&&(xs&3)==0;xs>>=2) + ; + if(xs<0x100) + emit_xorimm(rs,xor,rt); + else + emit_movimm(rt_val,rt); +} // trashes r2 static void pass_args(int a0, int a1) @@ -2906,14 +2915,12 @@ inline_readstub(int type, int i, u_int addr, signed char regmap[], int target, i assert(rs>=0); #ifdef PCSX u_int handler,host_addr=0; - if(pcsx_direct_read(type,addr,target?rs:-1,rt)) - return; handler=get_direct_memhandler(mem_rtab,addr,type,&host_addr); if (handler==0) { if(rt<0) return; - if(target==0||addr!=host_addr) - emit_movimm(host_addr,rs); + if(addr!=host_addr) + emit_movimm_from(addr,rs,host_addr,rs); switch(type) { case LOADB_STUB: emit_movsbl_indexed(0,rs,rt); break; case LOADBU_STUB: emit_movzbl_indexed(0,rs,rt); break; @@ -3211,12 +3218,10 @@ inline_writestub(int type, int i, u_int addr, signed char regmap[], int target, assert(rt>=0); #ifdef PCSX u_int handler,host_addr=0; - if(pcsx_direct_write(type,addr,rs,rt,regmap)) - return; handler=get_direct_memhandler(mem_wtab,addr,type,&host_addr); if (handler==0) { - if(target==0||addr!=host_addr) - emit_movimm(host_addr,rs); + if(addr!=host_addr) + emit_movimm_from(addr,rs,host_addr,rs); switch(type) { case STOREB_STUB: emit_writebyte_indexed(rt,0,rs); break; case STOREH_STUB: emit_writehword_indexed(rt,0,rs); break; @@ -3228,9 +3233,7 @@ inline_writestub(int type, int i, u_int addr, signed char regmap[], int target, // call a memhandler save_regs(reglist); - pass_args(target!=0?rs:-1,rt); - if(target==0) - emit_movimm(addr,0); + pass_args(rs,rt); int cc=get_reg(regmap,CCREG); if(cc<0) emit_loadreg(CCREG,2); |