diff options
| -rwxr-xr-x | src/dynarec/arm64/dynarec_arm64_660f.c | 8 | ||||
| -rw-r--r-- | src/emu/x64run660f.c | 8 |
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); |