X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=libpcsxcore%2Fnew_dynarec%2Fassem_arm.c;h=b9dd3cf96a62833fd60b9a9f5637d5d48d6593b2;hb=53358c1d5b032cc7186b71e3cc14f0ad6c2d5468;hp=381a54191cf1cb442b920682f7a1fb61ea8cec23;hpb=337887986422262fb88611d0b6cfcd79936e11c8;p=pcsx_rearmed.git diff --git a/libpcsxcore/new_dynarec/assem_arm.c b/libpcsxcore/new_dynarec/assem_arm.c index 381a5419..b9dd3cf9 100644 --- a/libpcsxcore/new_dynarec/assem_arm.c +++ b/libpcsxcore/new_dynarec/assem_arm.c @@ -101,8 +101,6 @@ const u_int invalidate_addr_reg[16] = { 0, 0}; -static u_int needs_clear_cache[1<<(TARGET_SIZE_2-17)]; - /* Linker */ static void set_jump_target(void *addr, void *target_) @@ -524,12 +522,8 @@ static void emit_pcreladdr(u_int rt) static void emit_loadreg(int r, int hr) { - if(r&64) { - SysPrintf("64bit load in 32bit mode!\n"); - assert(0); - return; - } - if((r&63)==0) + assert(hr != EXCLUDE_REG); + if (r == 0) emit_zeroreg(hr); else { void *addr; @@ -547,18 +541,14 @@ static void emit_loadreg(int r, int hr) } u_int offset = (u_char *)addr - (u_char *)&dynarec_local; assert(offset<4096); - assem_debug("ldr %s,fp+%d\n",regname[hr],offset); + assem_debug("ldr %s,fp+%d # r%d\n",regname[hr],offset,r); output_w32(0xe5900000|rd_rn_rm(hr,FP,0)|offset); } } static void emit_storereg(int r, int hr) { - if(r&64) { - SysPrintf("64bit store in 32bit mode!\n"); - assert(0); - return; - } + assert(hr != EXCLUDE_REG); int addr = (int)&psxRegs.GPR.r[r]; switch (r) { //case HIREG: addr = &hi; break; @@ -568,7 +558,7 @@ static void emit_storereg(int r, int hr) } u_int offset = addr-(u_int)&dynarec_local; assert(offset<4096); - assem_debug("str %s,fp+%d\n",regname[hr],offset); + assem_debug("str %s,fp+%d # r%d\n",regname[hr],offset,r); output_w32(0xe5800000|rd_rn_rm(hr,FP,0)|offset); } @@ -1642,7 +1632,8 @@ static void emit_extjump2(u_char *addr, u_int target, void *linker) emit_loadlp(target,0); emit_loadlp((u_int)addr,1); - assert(addr>=ndrc->translation_cache&&addr<(ndrc->translation_cache+(1<translation_cache <= addr && + addr < ndrc->translation_cache + sizeof(ndrc->translation_cache)); //assert((target>=0x80000000&&target<0x80800000)||(target>0xA4000000&&target<0xA4001000)); //DEBUG > #ifdef DEBUG_CYCLE_COUNT @@ -1809,7 +1800,7 @@ static void inline_readstub(enum stub_type type, int i, u_int addr, { int rs=get_reg(regmap,target); int rt=get_reg(regmap,target); - if(rs<0) rs=get_reg(regmap,-1); + if(rs<0) rs=get_reg_temp(regmap); assert(rs>=0); u_int is_dynamic; uintptr_t host_addr = 0; @@ -1963,7 +1954,7 @@ static void do_writestub(int n) static void inline_writestub(enum stub_type type, int i, u_int addr, const signed char regmap[], int target, int adj, u_int reglist) { - int rs=get_reg(regmap,-1); + int rs=get_reg_temp(regmap); int rt=get_reg(regmap,target); assert(rs>=0); assert(rt>=0);