about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
authorptitSeb <sebastien.chev@gmail.com>2023-05-04 10:06:27 +0200
committerptitSeb <sebastien.chev@gmail.com>2023-05-04 10:06:27 +0200
commit1462d5c6bd62cc62f9c16e3c879cbe729b37d356 (patch)
treecba478c4971f9ee0eff0fba295e536aa42727603 /src
parent60d2efc74b4fe9d9dc907726040ea780bda4247f (diff)
downloadbox64-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.h1
-rw-r--r--src/emu/x64run0f.c6
-rw-r--r--src/emu/x64run67.c2
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;