diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2021-03-31 17:30:43 +0200 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2021-03-31 17:30:43 +0200 |
| commit | d78dbbe4c72f48d8c8b74b304192c783eb0649e3 (patch) | |
| tree | 558f8d8b153855a4f0ab6d9db405bee6af1c6be4 /src | |
| parent | 663ac80fd060342aeb48ac09e057a9468e79a81b (diff) | |
| download | box64-d78dbbe4c72f48d8c8b74b304192c783eb0649e3.tar.gz box64-d78dbbe4c72f48d8c8b74b304192c783eb0649e3.zip | |
[DYNAREC] Added 0F 6E/6F opcodes
Diffstat (limited to 'src')
| -rwxr-xr-x | src/dynarec/dynarec_arm64_0f.c | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/src/dynarec/dynarec_arm64_0f.c b/src/dynarec/dynarec_arm64_0f.c index 446b2cb9..087727ce 100755 --- a/src/dynarec/dynarec_arm64_0f.c +++ b/src/dynarec/dynarec_arm64_0f.c @@ -531,6 +531,40 @@ uintptr_t dynarec64_0F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin } break; + case 0x7E: + INST_NAME("MOVD Ed, Gm"); + nextop = F8; + GETGM(v0); + if((nextop&0xC0)==0xC0) { + ed = xRAX + (nextop&7) + (rex.b<<3); + if(rex.w) { + VMOVQDto(ed, v0, 0); + } else { + VMOVSto(ed, v0, 0); + MOVxw_REG(ed, ed); + } + } else { + addr = geted(dyn, addr, ninst, nextop, &ed, x1, &fixedaddress, 0xfff<<(2+rex.w), (1<<(2+rex.w))-1, rex, 0, 0); + if(rex.w) { + VSTR64_U12(v0, ed, fixedaddress); + } else { + VSTR32_U12(v0, ed, fixedaddress); + } + } + break; + case 0x7F: + INST_NAME("MOVQ Em, Gm"); + nextop = F8; + GETGM(v0); + if(MODREG) { + v1 = mmx_get_reg_empty(dyn, ninst, x1, nextop&7); + VMOV(v1, v0); + } else { + addr = geted(dyn, addr, ninst, nextop, &ed, x1, &fixedaddress, 0xfff<<3, 7, rex, 0, 0); + VSTR64_U12(v0, ed, fixedaddress); + } + break; + #define GO(GETFLAGS, NO, YES, F) \ READFLAGS(F); \ i32_ = F32S; \ |