From 8ce539f85e3142911d299e58b3874f9e612bf274 Mon Sep 17 00:00:00 2001 From: Anthony Pesch Date: Mon, 20 Nov 2017 20:43:51 -0500 Subject: [PATCH] more hacks --- src/guest/sh4/sh4_ccn.c | 6 ++++++ src/jit/backend/x64/x64_backend.cc | 5 +++++ src/jit/jit.c | 8 +++++--- 3 files changed, 16 insertions(+), 3 deletions(-) diff --git a/src/guest/sh4/sh4_ccn.c b/src/guest/sh4/sh4_ccn.c index e38155b8..3bf961a2 100644 --- a/src/guest/sh4/sh4_ccn.c +++ b/src/guest/sh4/sh4_ccn.c @@ -29,9 +29,15 @@ static void sh4_ccn_reset(struct sh4 *sh4) { jit_invalidate_code(sh4->jit); } +extern int sh4_ccn_pref_hack; + void sh4_ccn_pref(struct sh4 *sh4, uint32_t addr) { struct memory *mem = sh4->dc->mem; + if (sh4_ccn_pref_hack) { + LOG_INFO("sh4_ccn_pref addr=0x%08x", addr); + } + /* make sure this is a sq related prefetch */ DCHECK(addr >= 0xe0000000 && addr <= 0xe3ffffff); diff --git a/src/jit/backend/x64/x64_backend.cc b/src/jit/backend/x64/x64_backend.cc index f5e1e46c..eb587630 100644 --- a/src/jit/backend/x64/x64_backend.cc +++ b/src/jit/backend/x64/x64_backend.cc @@ -625,6 +625,9 @@ static void x64_backend_emit_prolog(struct x64_backend *backend, struct ir *ir, e.add(e.dword[guestctx + guest->offset_instrs], num_instrs); } +extern int lse_hack_enable; +extern int sh4_ccn_pref_hack; + static void x64_backend_emit(struct x64_backend *backend, struct ir *ir, jit_emit_cb emit_cb, void *emit_data) { auto &e = *backend->codegen; @@ -633,6 +636,8 @@ static void x64_backend_emit(struct x64_backend *backend, struct ir *ir, e.inLocalLabel(); + e.mov(e.dword[&sh4_ccn_pref_hack], lse_hack_enable); + list_for_each_entry(block, &ir->blocks, struct ir_block, it) { int first = 1; uint8_t *block_addr = e.getCurr(); diff --git a/src/jit/jit.c b/src/jit/jit.c index 4801db67..c5273911 100644 --- a/src/jit/jit.c +++ b/src/jit/jit.c @@ -321,6 +321,7 @@ static void jit_promote_fastmem(struct jit *jit, struct jit_block *block, int lse_hack_enable; int lse_hack_count; +int sh4_ccn_pref_hack; void jit_compile_code(struct jit *jit, uint32_t guest_addr) { #if 0 @@ -350,10 +351,14 @@ void jit_compile_code(struct jit *jit, uint32_t guest_addr) { jit_free_block(jit, existing); } + lse_hack_enable = guest_addr == 0x8c083726; + lse_hack_count = 0; + /* translate guest code into ir */ struct ir ir = {0}; ir.buffer = jit->ir_buffer; ir.capacity = sizeof(jit->ir_buffer); + jit->frontend->translate_code(jit->frontend, guest_addr, guest_size, &ir); /* dump raw ir */ @@ -365,9 +370,6 @@ void jit_compile_code(struct jit *jit, uint32_t guest_addr) { jit_promote_fastmem(jit, block, &ir); cfa_run(jit->cfa, &ir); - lse_hack_enable = guest_addr == 0x8c0664c6; - lse_hack_count = 0; - static const uint32_t test[] = { 0x0, };