diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2023-06-10 15:19:21 +0200 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2023-06-10 15:19:21 +0200 |
| commit | d0acd59adc3d998bda5b13b9f7abf8719cedaaa6 (patch) | |
| tree | e2622131f855daebc20fc4066fca44277e27d059 | |
| parent | 8ad6ffc93d01fbba74ce9d918997dade8ecbdb19 (diff) | |
| download | box64-d0acd59adc3d998bda5b13b9f7abf8719cedaaa6.tar.gz box64-d0acd59adc3d998bda5b13b9f7abf8719cedaaa6.zip | |
Added 0F EA/EE opcodes ([ARM64_DYNAREC] too) (for #829)
| -rwxr-xr-x | src/dynarec/arm64/dynarec_arm64_0f.c | 16 | ||||
| -rw-r--r-- | src/emu/x64run0f.c | 16 |
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); |