assem_debug("add %s,%s,#%d\n",regname[rt],regname[rs],imm);
output_w32(0xe2800000|rd_rn_rm(rt,rs,0)|armval);
}else if(genimm(-imm,&armval)) {
- assem_debug("sub %s,%s,#%d\n",regname[rt],regname[rs],imm);
+ assem_debug("sub %s,%s,#%d\n",regname[rt],regname[rs],-imm);
output_w32(0xe2400000|rd_rn_rm(rt,rs,0)|armval);
}else if(imm<0) {
assert(imm>-65536);
set_jump_target(restore_jump,(int)out);
restore_regs(reglist);
ra=stubs[n][2];
- if(!restore_jump) ra+=4*3; // skip invcode check
emit_jmp(ra);
#else // if !PCSX
if(addr<0) addr=get_reg(i_regmap,-1);
static void c2op_prologue(u_int op,u_int reglist)
{
save_regs_all(reglist);
+#ifdef PCNT
+ emit_movimm(op,0);
+ emit_call((int)pcnt_gte_start);
+#endif
emit_addimm(FP,(int)&psxRegs.CP2D.r[0]-(int)&dynarec_local,0); // cop2 regs
}
static void c2op_epilogue(u_int op,u_int reglist)
{
+#ifdef PCNT
+ emit_movimm(op,0);
+ emit_call((int)pcnt_gte_end);
+#endif
restore_regs_all(reglist);
}