about summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorptitSeb <sebastien.chev@gmail.com>2023-03-14 18:30:40 +0100
committerptitSeb <sebastien.chev@gmail.com>2023-03-14 18:30:50 +0100
commit2fdf52afb83b2b09f152758e9ff84131bdaf6322 (patch)
treee372c336c790787f01ac6c5e0b907611a891cbeb
parenta651cf33f4345dfda3a4e6071f5fcab978d5b6fb (diff)
downloadbox64-2fdf52afb83b2b09f152758e9ff84131bdaf6322.tar.gz
box64-2fdf52afb83b2b09f152758e9ff84131bdaf6322.zip
Added 66 0F 38 29 PCMPEQQ opcde ([ARM64_DYNAREC] too) (for #558)
-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);