diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2023-05-04 10:06:27 +0200 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2023-05-04 10:06:27 +0200 |
| commit | 1462d5c6bd62cc62f9c16e3c879cbe729b37d356 (patch) | |
| tree | cba478c4971f9ee0eff0fba295e536aa42727603 /src | |
| parent | 60d2efc74b4fe9d9dc907726040ea780bda4247f (diff) | |
| download | box64-1462d5c6bd62cc62f9c16e3c879cbe729b37d356.tar.gz box64-1462d5c6bd62cc62f9c16e3c879cbe729b37d356.zip | |
[DYNAREC_TEST] Improved 67 DB and 0F AE opcodes handling
Diffstat (limited to 'src')
| -rw-r--r-- | src/emu/modrm.h | 1 | ||||
| -rw-r--r-- | src/emu/x64run0f.c | 6 | ||||
| -rw-r--r-- | src/emu/x64run67.c | 2 |
3 files changed, 7 insertions, 2 deletions
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; |