about summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorptitSeb <sebastien.chev@gmail.com>2023-06-10 15:19:21 +0200
committerptitSeb <sebastien.chev@gmail.com>2023-06-10 15:19:21 +0200
commitd0acd59adc3d998bda5b13b9f7abf8719cedaaa6 (patch)
treee2622131f855daebc20fc4066fca44277e27d059
parent8ad6ffc93d01fbba74ce9d918997dade8ecbdb19 (diff)
downloadbox64-d0acd59adc3d998bda5b13b9f7abf8719cedaaa6.tar.gz
box64-d0acd59adc3d998bda5b13b9f7abf8719cedaaa6.zip
Added 0F EA/EE opcodes ([ARM64_DYNAREC] too) (for #829)
-rwxr-xr-xsrc/dynarec/arm64/dynarec_arm64_0f.c16
-rw-r--r--src/emu/x64run0f.c16
2 files changed, 28 insertions, 4 deletions
diff --git a/src/dynarec/arm64/dynarec_arm64_0f.c b/src/dynarec/arm64/dynarec_arm64_0f.c
index 2fc80915..b19c6590 100755
--- a/src/dynarec/arm64/dynarec_arm64_0f.c
+++ b/src/dynarec/arm64/dynarec_arm64_0f.c
@@ -1848,7 +1848,13 @@ uintptr_t dynarec64_0F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin
             GETEM(q0, 0);

             SQSUB_16(v0, v0, q0);

             break;

-

+        case 0xEA:

+            INST_NAME("PMINSW Gx,Ex");

+            nextop = F8;

+            GETGM(v0);

+            GETEM(q0, 0);

+            SMIN_16(v0, v0, q0);

+            break;

         case 0xEB:

             INST_NAME("POR Gm, Em");

             nextop = F8;

@@ -1870,7 +1876,13 @@ uintptr_t dynarec64_0F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin
             GETEM(d1, 0);

             SQADD_16(d0, d0, d1);

             break;

-

+        case 0xEE:

+            INST_NAME("PMAXSW Gx,Ex");

+            nextop = F8;

+            GETGM(v0);

+            GETEM(q0, 0);

+            SMAX_16(v0, v0, q0);

+            break;

         case 0xEF:

             INST_NAME("PXOR Gm,Em");

             nextop = F8;

diff --git a/src/emu/x64run0f.c b/src/emu/x64run0f.c
index d6c0a0e2..f96dfe0d 100644
--- a/src/emu/x64run0f.c
+++ b/src/emu/x64run0f.c
@@ -1598,7 +1598,13 @@ uintptr_t Run0F(x64emu_t *emu, rex_t rex, uintptr_t addr, int *step)
                 GM->sw[i] = (tmp32s>32767)?32767:((tmp32s<-32768)?-32768:tmp32s);

             }

             break;

-

+        case 0xEA:                  /* PMINSW Gm,Em */

+            nextop = F8;

+            GETEM(0);

+            GETGM;

+            for (int i=0; i<4; ++i)

+                GM->sw[i] = (GM->sw[i]<EM->sw[i])?GM->sw[i]:EM->sw[i];

+            break;

         case 0xEB:                   /* POR Gm, Em */

             nextop = F8;

             GETEM(0);

@@ -1623,7 +1629,13 @@ uintptr_t Run0F(x64emu_t *emu, rex_t rex, uintptr_t addr, int *step)
                 GM->sw[i] = (tmp32s>32767)?32767:((tmp32s<-32768)?-32768:tmp32s);

             }

             break;

-

+        case 0xEE:                  /* PMAXSW Gm,Em */

+            nextop = F8;

+            GETEM(0);

+            GETGM;

+            for (int i=0; i<4; ++i)

+                GM->sw[i] = (GM->sw[i]>EM->sw[i])?GM->sw[i]:EM->sw[i];

+            break;

         case 0xEF:                   /* PXOR Gm, Em */

             nextop = F8;

             GETEM(0);