diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2022-03-03 12:49:37 +0100 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2022-03-03 12:49:37 +0100 |
| commit | 6f4ce37cceaa3f623d43d68f8607151f56216fb9 (patch) | |
| tree | a98778c94af8ee2a95ef0238199a376d887b20ba /src | |
| parent | 23bbab10b4d119fb53f0649ee45674e978c43b91 (diff) | |
| download | box64-6f4ce37cceaa3f623d43d68f8607151f56216fb9.tar.gz box64-6f4ce37cceaa3f623d43d68f8607151f56216fb9.zip | |
Added 64 0F 11 opcode ([DYNAREC] too)
Diffstat (limited to 'src')
| -rw-r--r-- | src/dynarec/arm64/dynarec_arm64_64.c | 19 | ||||
| -rw-r--r-- | src/emu/x64run64.c | 6 |
2 files changed, 24 insertions, 1 deletions
diff --git a/src/dynarec/arm64/dynarec_arm64_64.c b/src/dynarec/arm64/dynarec_arm64_64.c index d604047c..4ec25223 100644 --- a/src/dynarec/arm64/dynarec_arm64_64.c +++ b/src/dynarec/arm64/dynarec_arm64_64.c @@ -34,7 +34,7 @@ uintptr_t dynarec64_64(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin uint8_t gd, ed, eb1, eb2, gb1, gb2; uint8_t wback, wb1, wb2, wb; int64_t i64, j64; - int v0; + int v0, v1; int q0; int d0; int64_t fixedaddress; @@ -48,6 +48,7 @@ uintptr_t dynarec64_64(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin MAYUSE(d0); MAYUSE(q0); MAYUSE(v0); + MAYUSE(v1); while((opcode==0xF2) || (opcode==0xF3)) { rep = opcode-0xF1; @@ -117,6 +118,22 @@ uintptr_t dynarec64_64(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin break; case 0x11: switch(rep) { + case 0: + INST_NAME("MOVUPS Ex,Gx"); + nextop = F8; + GETG; + v0 = sse_get_reg(dyn, ninst, x1, gd); + if(MODREG) { + ed = (nextop&7)+(rex.b<<3); + v1 = sse_get_reg_empty(dyn, ninst, x1, ed); + VMOVQ(v1, v0); + } else { + grab_segdata(dyn, addr, ninst, x4, seg); + addr = geted(dyn, addr, ninst, nextop, &ed, x1, &fixedaddress, 0xfff<<4, 15, rex, 0, 0); + ADDx_REG(x4, x4, ed); + VSTR128_U12(v0, x4, fixedaddress); + } + break; case 1: INST_NAME("MOVSD Ex, Gx"); nextop = F8; diff --git a/src/emu/x64run64.c b/src/emu/x64run64.c index 8717d46a..a1e5a38b 100644 --- a/src/emu/x64run64.c +++ b/src/emu/x64run64.c @@ -136,6 +136,12 @@ int Run64(x64emu_t *emu, rex_t rex, int seg) break; case 0x11: switch(rep) { + case 0: /* MOVUPS FS:Ex, Gx */ + nextop = F8; + GETEX_OFFS(0, tlsdata); + GETGX; + EX->u128 = GX->u128; + break; case 1: /* MOVSD Ex, Gx */ nextop = F8; GETEX_OFFS(0, tlsdata); |