about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
authorptitSeb <sebastien.chev@gmail.com>2023-04-08 13:53:21 +0200
committerptitSeb <sebastien.chev@gmail.com>2023-04-08 13:53:21 +0200
commitd9e907535e2c39aface40c3b19b87c529ab24961 (patch)
tree866c5ea31b0c5d7512911c87336cae82fa716916 /src
parentd1426e85b32557cbd609f0f2bfd5721787b84de1 (diff)
downloadbox64-d9e907535e2c39aface40c3b19b87c529ab24961.tar.gz
box64-d9e907535e2c39aface40c3b19b87c529ab24961.zip
Added 66 0F 38 2A opcode ([ARM64_DYNAREC] too)
Diffstat (limited to 'src')
-rwxr-xr-xsrc/dynarec/arm64/dynarec_arm64_660f.c23
-rw-r--r--src/emu/x64run660f.c8
2 files changed, 21 insertions, 10 deletions
diff --git a/src/dynarec/arm64/dynarec_arm64_660f.c b/src/dynarec/arm64/dynarec_arm64_660f.c
index d756738e..29225c85 100755
--- a/src/dynarec/arm64/dynarec_arm64_660f.c
+++ b/src/dynarec/arm64/dynarec_arm64_660f.c
@@ -512,7 +512,20 @@ uintptr_t dynarec64_660F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int n
                     }

                     VSMULL_32(q0, q0, v0);

                     break;

-

+                case 0x29:

+                    INST_NAME("PCMPEQQ Gx, Ex");  // SSE4 opcode!

+                    nextop = F8;

+                    GETEX(q1, 0, 0);

+                    GETGX_empty(q0);

+                    VCMEQQ_64(q0, q0, q1);

+                    break;

+                case 0x2A:

+                    INST_NAME("MOVNTDQA Gx, Ex");

+                    nextop = F8;

+                    GETEX(q1, 0, 0);

+                    GETGX(q0, 1);

+                    VMOVQ(q0, q1);

+                    break;

                 case 0x2B:

                     INST_NAME("PACKUSDW Gx, Ex");  // SSE4 opcode!

                     nextop = F8;

@@ -531,14 +544,6 @@ uintptr_t dynarec64_660F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int n
                     }

                     break;

 

-                case 0x29:

-                    INST_NAME("PCMPEQQ Gx, Ex");  // SSE4 opcode!

-                    nextop = F8;

-                    GETEX(q1, 0, 0);

-                    GETGX_empty(q0);

-                    VCMEQQ_64(q0, q0, q1);

-                    break;

-

                 case 0x30:

                     INST_NAME("PMOVZXBW Gx, Ex");  // SSE4 opcode!

                     nextop = F8;

diff --git a/src/emu/x64run660f.c b/src/emu/x64run660f.c
index 7011ab6f..a0f7f6ae 100644
--- a/src/emu/x64run660f.c
+++ b/src/emu/x64run660f.c
@@ -513,7 +513,13 @@ uintptr_t Run660F(x64emu_t *emu, rex_t rex, uintptr_t addr)
                 for(int i=1; i>=0; --i)

                     GX->sq[i] = (GX->sq[i]==EX->sq[i])?-1LL:0LL;

                 break;

-

+            case 0x2A:  /* MOVNTDQA Gx, Ex */

+                nextop = F8;

+                GETEX(0);

+                GETGX;

+                GX->q[0] = EX->q[0];

+                GX->q[1] = EX->q[1];

+                break;

             case 0x2B:  /* PACKUSDW Gx, Ex */

                 nextop = F8;

                 GETEX(0);