notaz.gp2x.de
/
pcsx_rearmed.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
psxbios: experimental vsync HLE
[pcsx_rearmed.git]
/
libpcsxcore
/
new_dynarec
/
new_dynarec.c
diff --git
a/libpcsxcore/new_dynarec/new_dynarec.c
b/libpcsxcore/new_dynarec/new_dynarec.c
index
07cd619
..
090165e
100644
(file)
--- a/
libpcsxcore/new_dynarec/new_dynarec.c
+++ b/
libpcsxcore/new_dynarec/new_dynarec.c
@@
-37,6
+37,7
@@
static Jit g_jit;
#include "new_dynarec_config.h"
#include "../psxhle.h"
#include "../psxinterpreter.h"
#include "new_dynarec_config.h"
#include "../psxhle.h"
#include "../psxinterpreter.h"
+#include "../psxcounters.h"
#include "../gte.h"
#include "emu_if.h" // emulator interface
#include "linkage_offsets.h"
#include "../gte.h"
#include "emu_if.h" // emulator interface
#include "linkage_offsets.h"
@@
-6500,6
+6501,15
@@
void new_dynarec_print_stats(void)
#endif
}
#endif
}
+static void force_intcall(int i)
+{
+ memset(&dops[i], 0, sizeof(dops[i]));
+ dops[i].itype = INTCALL;
+ dops[i].rs1 = CCREG;
+ dops[i].is_exception = 1;
+ cinfo[i].ba = -1;
+}
+
static int apply_hacks(void)
{
int i;
static int apply_hacks(void)
{
int i;
@@
-6534,6
+6544,18
@@
static int apply_hacks(void)
return 1;
}
}
return 1;
}
}
+ if (Config.HLE)
+ {
+ if (start <= psxRegs.biosBranchCheck && psxRegs.biosBranchCheck < start + i*4)
+ {
+ i = (psxRegs.biosBranchCheck - start) / 4u + 23;
+ if (dops[i].is_jump && !dops[i+1].bt)
+ {
+ force_intcall(i);
+ dops[i+1].is_ds = 0;
+ }
+ }
+ }
return 0;
}
return 0;
}
@@
-6547,15
+6569,6
@@
static int is_ld_use_hazard(const struct decoded_insn *op_ld,
return op->itype != CJUMP && op->itype != SJUMP;
}
return op->itype != CJUMP && op->itype != SJUMP;
}
-static void force_intcall(int i)
-{
- memset(&dops[i], 0, sizeof(dops[i]));
- dops[i].itype = INTCALL;
- dops[i].rs1 = CCREG;
- dops[i].is_exception = 1;
- cinfo[i].ba = -1;
-}
-
static void disassemble_one(int i, u_int src)
{
unsigned int type, op, op2, op3;
static void disassemble_one(int i, u_int src)
{
unsigned int type, op, op2, op3;