deps/lightrec/reaper.o
endif
OBJS += deps/lightrec/tlsf/tlsf.o
-OBJS += libpcsxcore/lightrec/plugin.o
+OBJS += libpcsxcore/lightrec/plugin.o \
+ libpcsxcore/lightrec/internals.o
OBJS += deps/lightning/lib/jit_disasm.o \
deps/lightning/lib/jit_memory.o \
deps/lightning/lib/jit_names.o \
--- /dev/null
+// internals: stuff lightrec's public API doesn't provide
+#include <assert.h>
+#include "lightrec-private.h"
+#include "blockcache.h"
+#include "internals.h"
+
+void lightrec_plugin_clear_block_caches(struct lightrec_state *state)
+{
+ if (state == NULL)
+ return;
+
+ lightrec_invalidate_all(state);
+ lightrec_free_block_cache(state->block_cache);
+ state->block_cache = lightrec_blockcache_init(state);
+ assert(state->block_cache);
+}
-#include <lightrec.h>
#include <errno.h>
#include <stdbool.h>
#include <stdio.h>
#include <sys/mman.h>
#endif
+#include "lightrec.h"
+#include "internals.h"
#include "../cdrom.h"
#include "../gpu.h"
#include "../gte.h"
static void lightrec_plugin_apply_config()
{
+ static u32 cycles_per_op_old;
u32 cycle_mult = Config.cycle_multiplier_override && Config.cycle_multiplier == CYCLE_MULT_DEFAULT
? Config.cycle_multiplier_override : Config.cycle_multiplier;
- assert(cycle_mult);
+ u32 cycles_per_op = cycle_mult * 1024 / 100;
+ assert(cycles_per_op);
- lightrec_set_cycles_per_opcode(lightrec_state, cycle_mult * 1024 / 100);
+ if (cycles_per_op_old && cycles_per_op_old != cycles_per_op) {
+ SysPrintf("lightrec: reinit block cache for cycles_per_op %.2f\n",
+ cycles_per_op / 1024.f);
+ lightrec_plugin_clear_block_caches(lightrec_state);
+ }
+ cycles_per_op_old = cycles_per_op;
+ lightrec_set_cycles_per_opcode(lightrec_state, cycles_per_op);
}
static void lightrec_plugin_shutdown(void)