From 1462d5c6bd62cc62f9c16e3c879cbe729b37d356 Mon Sep 17 00:00:00 2001 From: ptitSeb Date: Thu, 4 May 2023 10:06:27 +0200 Subject: [DYNAREC_TEST] Improved 67 DB and 0F AE opcodes handling --- src/emu/modrm.h | 1 + src/emu/x64run0f.c | 6 +++++- src/emu/x64run67.c | 2 +- 3 files changed, 7 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/emu/modrm.h b/src/emu/modrm.h index 21ba6d3c..0d76e656 100644 --- a/src/emu/modrm.h +++ b/src/emu/modrm.h @@ -81,6 +81,7 @@ #define FAKEED32(D) GetEd32O(emu, &addr, rex, nextop, D, 0) #define GETEA(D) GetEA(emu, &addr, rex, nextop, D) #define _GETED(D) oped=GetEd(emu, &addr, rex, nextop, D) +#define _GETED32(D) oped=GetEd32O(emu, &addr, rex, nextop, D, 0) #define MODREG ((nextop&0xC0)==0xC0) diff --git a/src/emu/x64run0f.c b/src/emu/x64run0f.c index 5f46db5d..bfbc12de 100644 --- a/src/emu/x64run0f.c +++ b/src/emu/x64run0f.c @@ -929,10 +929,10 @@ uintptr_t Run0F(x64emu_t *emu, rex_t rex, uintptr_t addr, int *step) if((nextop&0xF8)==0xF8) { return addr; /* SFENCE */ } - GETED(0); switch((nextop>>3)&7) { case 0: /* FXSAVE Ed */ #ifndef TEST_INTERPRETER + GETED(0); if(rex.w) fpu_fxsave64(emu, ED); else @@ -941,6 +941,7 @@ uintptr_t Run0F(x64emu_t *emu, rex_t rex, uintptr_t addr, int *step) break; case 1: /* FXRSTOR Ed */ #ifndef TEST_INTERPRETER + GETED(0); if(rex.w) fpu_fxrstor64(emu, ED); else @@ -948,6 +949,7 @@ uintptr_t Run0F(x64emu_t *emu, rex_t rex, uintptr_t addr, int *step) #endif break; case 2: /* LDMXCSR Md */ + GETED(0); emu->mxcsr.x32 = ED->dword[0]; #ifndef TEST_INTERPRETER if(box64_sse_flushto0) @@ -955,10 +957,12 @@ uintptr_t Run0F(x64emu_t *emu, rex_t rex, uintptr_t addr, int *step) #endif break; case 3: /* STMXCSR Md */ + GETED(0); ED->dword[0] = emu->mxcsr.x32; break; case 7: /* CLFLUSH Ed */ #if defined(DYNAREC) && !defined(TEST_INTERPRETER) + GETED(0); if(box64_dynarec) cleanDBFromAddressRange((uintptr_t)ED, 8, 0); #endif diff --git a/src/emu/x64run67.c b/src/emu/x64run67.c index 8b058f6b..63fca1ab 100644 --- a/src/emu/x64run67.c +++ b/src/emu/x64run67.c @@ -259,7 +259,7 @@ uintptr_t Run67(x64emu_t *emu, rex_t rex, int rep, uintptr_t addr) case 0x8D: /* LEA Gd,M */ nextop = F8; - GETED32(0); + _GETED32(0); GETGD; if(rex.w) GD->q[0] = (uint64_t)ED; -- cgit 1.4.1