diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2021-04-02 14:27:49 +0200 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2021-04-02 14:27:49 +0200 |
| commit | e2a7dd0f1760b0567067d20e55021746b57b2a37 (patch) | |
| tree | 681ab08423938c021493d2f0cd6de6416d62661c /src | |
| parent | f781537adbe4461a72ac61bf24ace40b63c0d1c7 (diff) | |
| download | box64-e2a7dd0f1760b0567067d20e55021746b57b2a37.tar.gz box64-e2a7dd0f1760b0567067d20e55021746b57b2a37.zip | |
Added 0F E7 opcode ([DYNAREC] too)
Diffstat (limited to 'src')
| -rwxr-xr-x | src/dynarec/dynarec_arm64_0f.c | 13 | ||||
| -rw-r--r-- | src/emu/x64run0f.c | 10 |
2 files changed, 22 insertions, 1 deletions
diff --git a/src/dynarec/dynarec_arm64_0f.c b/src/dynarec/dynarec_arm64_0f.c index c2f558f1..58380dfe 100755 --- a/src/dynarec/dynarec_arm64_0f.c +++ b/src/dynarec/dynarec_arm64_0f.c @@ -1275,6 +1275,19 @@ uintptr_t dynarec64_0F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin VMUL_16(q0, q0, q1); break; + case 0xE7: + INST_NAME("MOVNTQ Em, Gm"); // Non Temporal par not handled for now + nextop = F8; + gd = (nextop&0x38)>>3; + if((nextop&0xC0)==0xC0) { + DEFAULT; + } 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); + } + break; + case 0xE5: INST_NAME("PMULHW Gm,Em"); nextop = F8; diff --git a/src/emu/x64run0f.c b/src/emu/x64run0f.c index add4ba97..3aeb8c9a 100644 --- a/src/emu/x64run0f.c +++ b/src/emu/x64run0f.c @@ -22,6 +22,7 @@ #include "bridge.h" #include "signals.h" #ifdef DYNAREC +#include "custommem.h" #include "../dynarec/arm64_lock.h" #endif @@ -1360,7 +1361,14 @@ int Run0F(x64emu_t *emu, rex_t rex) GM->sw[i] = (tmp32s>>16)&0xffff; } break; - + case 0xE7: /* MOVNTQ Em,Gm */ + nextop = F8; + if((nextop&0xC0)==0xC0) + return 1; + GETEM(0); + GETGM; + EM->q = GM->q; + break; case 0xE8: /* PSUBSB Gm,Em */ nextop = F8; GETEM(0); |