X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?p=pcsx_rearmed.git;a=blobdiff_plain;f=libpcsxcore%2Fnew_dynarec%2Fassem_arm.c;h=45edd6553740563c5e4e5830f7b4ac113d49cfd4;hp=8fe88fdc4c5553c5d4e694002d2f7dc4e617a705;hb=4d6467383217647e3fbc58ab9213a31c0f3bd8c9;hpb=4b5b6cf713480df38c7e79d669cb9e72d70b3ba0 diff --git a/libpcsxcore/new_dynarec/assem_arm.c b/libpcsxcore/new_dynarec/assem_arm.c index 8fe88fdc..45edd655 100644 --- a/libpcsxcore/new_dynarec/assem_arm.c +++ b/libpcsxcore/new_dynarec/assem_arm.c @@ -34,6 +34,12 @@ char translation_cache[1 << TARGET_SIZE_2] __attribute__((aligned(4096))); #endif +#ifndef __MACH__ +#define CALLER_SAVE_REGS 0x100f +#else +#define CALLER_SAVE_REGS 0x120f +#endif + extern int cycle_count; extern int last_count; extern int pcaddr; @@ -2627,13 +2633,13 @@ static void restore_regs_all(u_int reglist) // Save registers before function call static void save_regs(u_int reglist) { - reglist&=0x100f; // only save the caller-save registers, r0-r3, r12 + reglist&=CALLER_SAVE_REGS; // only save the caller-save registers, r0-r3, r12 save_regs_all(reglist); } // Restore registers after function call static void restore_regs(u_int reglist) { - reglist&=0x100f; // only restore the caller-save registers, r0-r3, r12 + reglist&=CALLER_SAVE_REGS; restore_regs_all(reglist); } @@ -4518,7 +4524,7 @@ static void c2op_assemble(int i,struct regstat *i_regs) for(hr=0;hrregmap[hr]>=0) reglist_full|=1<>63); // +1 because of how liveness detection works @@ -4536,7 +4542,7 @@ static void c2op_assemble(int i,struct regstat *i_regs) int v = (source[i] >> 15) & 3; int cv = (source[i] >> 13) & 3; int mx = (source[i] >> 17) & 3; - reglist=reglist_full&0x10ff; // +{r4-r7} + reglist=reglist_full&(CALLER_SAVE_REGS|0xf0); // +{r4-r7} c2op_prologue(c2op,reglist); /* r4,r5 = VXYZ(v) packed; r6 = &MX11(mx); r7 = &CV1(cv) */ if(v<3) @@ -5414,7 +5420,7 @@ void multdiv_assemble_arm(int i,struct regstat *i_regs) assert(m2h>=0); assert(m1l>=0); assert(m2l>=0); - save_regs(0x100f); + save_regs(CALLER_SAVE_REGS); if(m1l!=0) emit_mov(m1l,0); if(m1h==0) emit_readword((int)&dynarec_local,1); else if(m1h>1) emit_mov(m1h,1); @@ -5423,7 +5429,7 @@ void multdiv_assemble_arm(int i,struct regstat *i_regs) if(m2h<3) emit_readword((int)&dynarec_local+m2h*4,3); else if(m2h>3) emit_mov(m2h,3); emit_call((int)&multu64); - restore_regs(0x100f); + restore_regs(CALLER_SAVE_REGS); signed char hih=get_reg(i_regs->regmap,HIREG|64); signed char hil=get_reg(i_regs->regmap,HIREG); signed char loh=get_reg(i_regs->regmap,LOREG|64); @@ -5494,7 +5500,7 @@ void multdiv_assemble_arm(int i,struct regstat *i_regs) assert(d2h>=0); assert(d1l>=0); assert(d2l>=0); - save_regs(0x100f); + save_regs(CALLER_SAVE_REGS); if(d1l!=0) emit_mov(d1l,0); if(d1h==0) emit_readword((int)&dynarec_local,1); else if(d1h>1) emit_mov(d1h,1); @@ -5503,7 +5509,7 @@ void multdiv_assemble_arm(int i,struct regstat *i_regs) if(d2h<3) emit_readword((int)&dynarec_local+d2h*4,3); else if(d2h>3) emit_mov(d2h,3); emit_call((int)&div64); - restore_regs(0x100f); + restore_regs(CALLER_SAVE_REGS); signed char hih=get_reg(i_regs->regmap,HIREG|64); signed char hil=get_reg(i_regs->regmap,HIREG); signed char loh=get_reg(i_regs->regmap,LOREG|64); @@ -5527,7 +5533,7 @@ void multdiv_assemble_arm(int i,struct regstat *i_regs) assert(d2h>=0); assert(d1l>=0); assert(d2l>=0); - save_regs(0x100f); + save_regs(CALLER_SAVE_REGS); if(d1l!=0) emit_mov(d1l,0); if(d1h==0) emit_readword((int)&dynarec_local,1); else if(d1h>1) emit_mov(d1h,1); @@ -5536,7 +5542,7 @@ void multdiv_assemble_arm(int i,struct regstat *i_regs) if(d2h<3) emit_readword((int)&dynarec_local+d2h*4,3); else if(d2h>3) emit_mov(d2h,3); emit_call((int)&divu64); - restore_regs(0x100f); + restore_regs(CALLER_SAVE_REGS); signed char hih=get_reg(i_regs->regmap,HIREG|64); signed char hil=get_reg(i_regs->regmap,HIREG); signed char loh=get_reg(i_regs->regmap,LOREG|64);