about summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rwxr-xr-xsrc/dynarec/arm64/dynarec_arm64_660f.c8
-rw-r--r--src/emu/x64run660f.c8
2 files changed, 16 insertions, 0 deletions
diff --git a/src/dynarec/arm64/dynarec_arm64_660f.c b/src/dynarec/arm64/dynarec_arm64_660f.c
index 96fb223a..821d3ae0 100755
--- a/src/dynarec/arm64/dynarec_arm64_660f.c
+++ b/src/dynarec/arm64/dynarec_arm64_660f.c
@@ -412,6 +412,14 @@ uintptr_t dynarec64_660F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int n
                     UQXTN2_16(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 0x30:

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

                     nextop = F8;

diff --git a/src/emu/x64run660f.c b/src/emu/x64run660f.c
index 91f54814..8bed5cbf 100644
--- a/src/emu/x64run660f.c
+++ b/src/emu/x64run660f.c
@@ -445,6 +445,14 @@ uintptr_t Run660F(x64emu_t *emu, rex_t rex, uintptr_t addr)
                     GX->sq[i] = EX->sd[i];

                 break;

             

+            case 0x29:  /* PCMPEQQ Gx, Ex */

+                nextop = F8;

+                GETEX(0);

+                GETGX;

+                for(int i=1; i>=0; --i)

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

+                break;

+

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

                 nextop = F8;

                 GETEX(0);