diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2021-04-02 16:16:31 +0200 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2021-04-02 16:16:31 +0200 |
| commit | 931a8063b450c4bac3be3b2eed0fb5c93f56edc6 (patch) | |
| tree | 1ad1b8f1f171ee6b4567c06b8bbec98e13038833 /src | |
| parent | c74406c89e81be0f331c0568c716fb98185afa07 (diff) | |
| download | box64-931a8063b450c4bac3be3b2eed0fb5c93f56edc6.tar.gz box64-931a8063b450c4bac3be3b2eed0fb5c93f56edc6.zip | |
[DYNAREC] Added 0F E8/E9 opcodes and fixed 0F E7 opcode
Diffstat (limited to 'src')
| -rwxr-xr-x | src/dynarec/dynarec_arm64_0f.c | 30 |
1 files changed, 22 insertions, 8 deletions
diff --git a/src/dynarec/dynarec_arm64_0f.c b/src/dynarec/dynarec_arm64_0f.c index 7cc8d402..e446b734 100755 --- a/src/dynarec/dynarec_arm64_0f.c +++ b/src/dynarec/dynarec_arm64_0f.c @@ -1372,6 +1372,16 @@ uintptr_t dynarec64_0F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin URHADD_8(v0, v0, v1); break; + case 0xE5: + INST_NAME("PMULHW Gm,Em"); + nextop = F8; + GETGM(v0); + GETEM(v1, 0); + q0 = fpu_get_scratch(dyn); + VSMULL_16(q0, v0, v1); + SQSHRN_16(v0, q0, 16); + break; + case 0xE7: INST_NAME("MOVNTQ Em, Gm"); // Non Temporal par not handled for now nextop = F8; @@ -1381,18 +1391,22 @@ uintptr_t dynarec64_0F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin } else { v0 = mmx_get_reg(dyn, ninst, x1, gd); addr = geted(dyn, addr, ninst, nextop, &ed, x1, &fixedaddress, 0xfff<<3, 7, rex, 0, 0); - VST1_64(v0, ed, fixedaddress); + VSTR64_U12(v0, ed, fixedaddress); } break; - - case 0xE5: - INST_NAME("PMULHW Gm,Em"); + case 0xE8: + INST_NAME("PSUBSB Gm,Em"); nextop = F8; GETGM(v0); - GETEM(v1, 0); - q0 = fpu_get_scratch(dyn); - VSMULL_16(q0, v0, v1); - SQSHRN_16(v0, q0, 16); + GETEM(q0, 0); + SQSUB_8(v0, v0, q0); + break; + case 0xE9: + INST_NAME("PSUBSW Gm,Em"); + nextop = F8; + GETGM(v0); + GETEM(q0, 0); + SQSUB_16(v0, v0, q0); break; case 0xEB: |