From 256632ea4c21bbadc2131cfb65aaebfde4af3215 Mon Sep 17 00:00:00 2001 From: Yang Liu Date: Mon, 13 Oct 2025 03:02:42 +0800 Subject: [INTERP] Improved cosim handling on 16bit BT/BTS/BTR/BTC opcodes (#3063) --- src/emu/x64run660f.c | 32 ++++++++++++++++++++++++++++---- 1 file changed, 28 insertions(+), 4 deletions(-) (limited to 'src') diff --git a/src/emu/x64run660f.c b/src/emu/x64run660f.c index 8b801b92..24838805 100644 --- a/src/emu/x64run660f.c +++ b/src/emu/x64run660f.c @@ -1799,7 +1799,15 @@ uintptr_t Run660F(x64emu_t *emu, rex_t rex, uintptr_t addr) tmp32s >>= (rex.w?6:4); if(!MODREG) { + #ifdef TEST_INTERPRETER + test->memaddr=((test->memaddr)+(tmp32s<<(rex.w?3:1))); + if(rex.w) + *(uint64_t*)test->mem = *(uint64_t*)test->memaddr; + else + *(uint16_t*)test->mem = *(uint16_t*)test->memaddr; + #else EW=(reg64_t*)(((uintptr_t)(EW))+(tmp32s<<(rex.w?3:1))); + #endif } if(rex.w) { if(EW->q[0] & (1LL<>= (rex.w?6:4); if(!MODREG) { + #ifdef TEST_INTERPRETER + test->memaddr=((test->memaddr)+(tmp32s<<(rex.w?3:1))); + if(rex.w) + *(uint64_t*)test->mem = *(uint64_t*)test->memaddr; + else + *(uint16_t*)test->mem = *(uint16_t*)test->memaddr; + #else EW=(reg64_t*)(((uintptr_t)(EW))+(tmp32s<<(rex.w?3:1))); + #endif } if(rex.w) { if(EW->q[0] & (1LL<sq[0]:GW->sword[0]; - tmp8u=tmp64s&(rex.w?63:15); - tmp64s >>= (rex.w?6:4); + tmp32s = rex.w?GW->sdword[0]:GW->sword[0]; + tmp8u=tmp32s&(rex.w?63:15); + tmp32s >>= (rex.w?6:4); if(!MODREG) { - EW=(reg64_t*)(((uintptr_t)(EW))+(tmp64s<<(rex.w?3:1))); + #ifdef TEST_INTERPRETER + test->memaddr=((test->memaddr)+(tmp32s<<(rex.w?3:1))); + if(rex.w) + *(uint64_t*)test->mem = *(uint64_t*)test->memaddr; + else + *(uint16_t*)test->mem = *(uint16_t*)test->memaddr; + #else + EW=(reg64_t*)(((uintptr_t)(EW))+(tmp32s<<(rex.w?3:1))); + #endif } if(rex.w) { if(EW->q[0] & (1LL<