diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2021-03-30 21:02:19 +0200 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2021-03-30 21:02:19 +0200 |
| commit | af7bfc7de77d5d5af6c0725d1a68df5eccfc7f85 (patch) | |
| tree | 94f6e19bc34c3d5a7522392d1cd597ec606fc33a /src | |
| parent | e3759a5cd071258c56d99ddf9a5b0a140536164d (diff) | |
| download | box64-af7bfc7de77d5d5af6c0725d1a68df5eccfc7f85.tar.gz box64-af7bfc7de77d5d5af6c0725d1a68df5eccfc7f85.zip | |
Added F2 0F 12 opcode ([DYNAREC] too)
Diffstat (limited to 'src')
| -rwxr-xr-x | src/dynarec/dynarec_arm64_f20f.c | 15 | ||||
| -rw-r--r-- | src/emu/x64runf20f.c | 6 |
2 files changed, 21 insertions, 0 deletions
diff --git a/src/dynarec/dynarec_arm64_f20f.c b/src/dynarec/dynarec_arm64_f20f.c index 1d351aea..8fe7cc3a 100755 --- a/src/dynarec/dynarec_arm64_f20f.c +++ b/src/dynarec/dynarec_arm64_f20f.c @@ -90,6 +90,21 @@ uintptr_t dynarec64_F20F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int n VSTR64_U12(v0, ed, fixedaddress); } break; + case 0x12: + INST_NAME("MOVDDUP Gx, Ex"); + nextop = F8; + GETG; + if(MODREG) { + d0 = sse_get_reg(dyn, ninst, x1, (nextop&7)+(rex.b<<3)); + v0 = sse_get_reg_empty(dyn, ninst, x1, gd); + VMOVeD(v0, 0, d0, 0); + } else { + v0 = sse_get_reg_empty(dyn, ninst, x1, gd); + addr = geted(dyn, addr, ninst, nextop, &ed, x1, &fixedaddress, 0xfff<<3, 7, rex, 0, 0); + VLDR64_U12(v0, ed, fixedaddress); + } + VMOVeD(v0, 1, v0, 0); + break; case 0x2A: INST_NAME("CVTSI2SD Gx, Ed"); diff --git a/src/emu/x64runf20f.c b/src/emu/x64runf20f.c index 18ec9645..44e77a1b 100644 --- a/src/emu/x64runf20f.c +++ b/src/emu/x64runf20f.c @@ -53,6 +53,12 @@ int RunF20F(x64emu_t *emu, rex_t rex) GETGX; EX->q[0] = GX->q[0]; break; + case 0x12: /* MOVDDUP Gx, Ex */ + nextop = F8; + GETEX(0); + GETGX; + GX->q[1] = GX->q[0] = EX->q[0]; + break; case 0x2A: /* CVTSI2SD Gx, Ed */ nextop = F8; |