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=7641bbcc77bb99f58bc9a6dedf00467eaef6dd7a;hp=8693c2ddbd17c819b69e954c1cb7bd270d2b7838;hb=df4dc2b13cf71f32751cf842b03ef87991b2c55a;hpb=dd114d7d8e8d30bde79eb72d3ae1afc2f06cebb7 diff --git a/libpcsxcore/new_dynarec/assem_arm.c b/libpcsxcore/new_dynarec/assem_arm.c index 8693c2dd..7641bbcc 100644 --- a/libpcsxcore/new_dynarec/assem_arm.c +++ b/libpcsxcore/new_dynarec/assem_arm.c @@ -127,26 +127,27 @@ static u_int needs_clear_cache[1<<(TARGET_SIZE_2-17)]; /* Linker */ -static void set_jump_target(int addr,u_int target) +static void set_jump_target(void *addr, void *target_) { - u_char *ptr=(u_char *)addr; + u_int target = (u_int)target_; + u_char *ptr = addr; u_int *ptr2=(u_int *)ptr; if(ptr[3]==0xe2) { assert((target-(u_int)ptr2-8)<1024); - assert((addr&3)==0); + assert(((uintptr_t)addr&3)==0); assert((target&3)==0); *ptr2=(*ptr2&0xFFFFF000)|((target-(u_int)ptr2-8)>>2)|0xF00; - //printf("target=%x addr=%x insn=%x\n",target,addr,*ptr2); + //printf("target=%x addr=%p insn=%x\n",target,addr,*ptr2); } else if(ptr[3]==0x72) { // generated by emit_jno_unlikely if((target-(u_int)ptr2-8)<1024) { - assert((addr&3)==0); + assert(((uintptr_t)addr&3)==0); assert((target&3)==0); *ptr2=(*ptr2&0xFFFFF000)|((target-(u_int)ptr2-8)>>2)|0xF00; } else if((target-(u_int)ptr2-8)<4096&&!((target-(u_int)ptr2-8)&15)) { - assert((addr&3)==0); + assert(((uintptr_t)addr&3)==0); assert((target&3)==0); *ptr2=(*ptr2&0xFFFFF000)|((target-(u_int)ptr2-8)>>4)|0xE00; } @@ -227,9 +228,9 @@ static int get_pointer(void *stub) // Find the "clean" entry point from a "dirty" entry point // by skipping past the call to verify_code -static u_int get_clean_addr(int addr) +static void *get_clean_addr(void *addr) { - int *ptr=(int *)addr; + signed int *ptr = addr; #ifndef HAVE_ARMV7 ptr+=4; #else @@ -239,9 +240,9 @@ static u_int get_clean_addr(int addr) assert((*ptr&0xFF000000)==0xeb000000); // bl instruction ptr++; if((*ptr&0xFF000000)==0xea000000) { - return (int)ptr+((*ptr<<8)>>6)+8; // follow jump + return (char *)ptr+((*ptr<<8)>>6)+8; // follow jump } - return (u_int)ptr; + return ptr; } static int verify_dirty(u_int *ptr) @@ -278,7 +279,7 @@ static int verify_dirty(u_int *ptr) // This doesn't necessarily find all clean entry points, just // guarantees that it's not dirty -static int isclean(int addr) +static int isclean(void *addr) { #ifndef HAVE_ARMV7 u_int *ptr=((u_int *)addr)+4; @@ -2467,10 +2468,10 @@ static void literal_pool_jumpover(int n) if(n) { if((int)out-literals[0][0]<4096-n) return; } - int jaddr=(int)out; + void *jaddr = out; emit_jmp(0); literal_pool(0); - set_jump_target(jaddr,(int)out); + set_jump_target(jaddr, out); } static void emit_extjump2(u_int addr, int target, int linker) @@ -2586,7 +2587,7 @@ static void do_readstub(int n) { assem_debug("do_readstub %x\n",start+stubs[n][3]*4); literal_pool(256); - set_jump_target(stubs[n][1],(int)out); + set_jump_target(stubs[n][1], out); int type=stubs[n][0]; int i=stubs[n][3]; int rs=stubs[n][4]; @@ -2600,7 +2601,8 @@ static void do_readstub(int n) rt=get_reg(i_regmap,rt1[i]); } assert(rs>=0); - int r,temp=-1,temp2=HOST_TEMPREG,regs_saved=0,restore_jump=0; + int r,temp=-1,temp2=HOST_TEMPREG,regs_saved=0; + void *restore_jump = NULL; reglist|=(1<=0); assert(rt>=0); - int rtmp,temp=-1,temp2=HOST_TEMPREG,regs_saved=0,restore_jump=0,ra; + int rtmp,temp=-1,temp2=HOST_TEMPREG,regs_saved=0,ra; + void *restore_jump = NULL; int reglist2=reglist|(1<