From 0a2ea72d72109f82dea964461127619710428039 Mon Sep 17 00:00:00 2001 From: ptitSeb Date: Wed, 21 Apr 2021 14:53:01 +0200 Subject: Added special case for unaligned LOCK INC QWord ptr[ED] --- src/emu/x64runf0.c | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) (limited to 'src') diff --git a/src/emu/x64runf0.c b/src/emu/x64runf0.c index d126313f..5366e142 100644 --- a/src/emu/x64runf0.c +++ b/src/emu/x64runf0.c @@ -631,9 +631,19 @@ int RunF0(x64emu_t *emu, rex_t rex) case 0: /* INC Ed */ #ifdef DYNAREC if(rex.w) - do { - tmp64u = arm64_lock_read_dd(ED); - } while(arm64_lock_write_dd(ED, inc64(emu, tmp64u))); + if(((uintptr_t)ED)&7) { + // unaligned + do { + tmp64u = ED->q[0] & 0xffffffffffffff00LL; + tmp64u |= arm64_lock_read_b(ED); + tmp64u = inc64(emu, tmp64u); + } while(arm64_lock_write_b(ED, tmp64u&0xff)); + ED->q[0] = tmp64u; + } + else + do { + tmp64u = arm64_lock_read_dd(ED); + } while(arm64_lock_write_dd(ED, inc64(emu, tmp64u))); else { if((uintptr_t)ED&3) { //meh. -- cgit 1.4.1