about summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorptitSeb <sebastien.chev@gmail.com>2021-09-16 20:54:40 +0200
committerptitSeb <sebastien.chev@gmail.com>2021-09-16 20:54:40 +0200
commit2b1e12dafd022b8a3627092d07f5cdf9059c8f64 (patch)
tree44b1cfdc1d5c8cbced27ab3decbea6b3911ffeb9
parentb4ca2be9e01492c053c64b3d43c08e9d31957de5 (diff)
downloadbox64-2b1e12dafd022b8a3627092d07f5cdf9059c8f64.tar.gz
box64-2b1e12dafd022b8a3627092d07f5cdf9059c8f64.zip
Fixed 66 0F 3A 22 opcode for REX.W ([DYNAREC] too) (should help #81)
-rwxr-xr-xsrc/dynarec/dynarec_arm64_660f.c6
-rw-r--r--src/emu/x64run660f.c5
2 files changed, 9 insertions, 2 deletions
diff --git a/src/dynarec/dynarec_arm64_660f.c b/src/dynarec/dynarec_arm64_660f.c
index b1049e96..8f7882d5 100755
--- a/src/dynarec/dynarec_arm64_660f.c
+++ b/src/dynarec/dynarec_arm64_660f.c
@@ -532,7 +532,11 @@ uintptr_t dynarec64_660F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int n
                     GETGX(q0);

                     GETED(1);

                     u8 = F8;

-                    VMOVQSfrom(q0, (u8&3), ed);

+                    if(rex.w) {

+                        VMOVQDfrom(q0, (u8&1), ed);

+                    } else {

+                        VMOVQSfrom(q0, (u8&3), ed);

+                    }

                     break;

 

                 default:

diff --git a/src/emu/x64run660f.c b/src/emu/x64run660f.c
index 6f0a4d9d..1e7fcdf8 100644
--- a/src/emu/x64run660f.c
+++ b/src/emu/x64run660f.c
@@ -647,7 +647,10 @@ int Run660F(x64emu_t *emu, rex_t rex)
                 GETED(1);

                 GETGX;

                 tmp8u = F8;

-                GX->ud[tmp8u&0x3] = ED->dword[0];

+                if(rex.w)

+                    GX->q[tmp8u&0x1] = ED->q[0];

+                else

+                    GX->ud[tmp8u&0x3] = ED->dword[0];

                 break;

 

             case 0x40:  /* DPPS Gx, Ex, Ib */