diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2024-05-27 10:02:33 +0200 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2024-05-27 10:02:33 +0200 |
| commit | fc2d50c7d30eff7286cfad69b037e73edfaae024 (patch) | |
| tree | 266cac3fbb25653e061a5fdf696244b85b5c20d1 /src | |
| parent | aaed0364bdef43b6c83cfe647a341b84227c742e (diff) | |
| download | box64-fc2d50c7d30eff7286cfad69b037e73edfaae024.tar.gz box64-fc2d50c7d30eff7286cfad69b037e73edfaae024.zip | |
[INTERPRETER] Added avx (F3 0F) 7F opcode
Diffstat (limited to 'src')
| -rw-r--r-- | src/emu/x64runavxf30f.c | 22 |
1 files changed, 16 insertions, 6 deletions
diff --git a/src/emu/x64runavxf30f.c b/src/emu/x64runavxf30f.c index bfee9b13..0f4c0205 100644 --- a/src/emu/x64runavxf30f.c +++ b/src/emu/x64runavxf30f.c @@ -58,19 +58,29 @@ uintptr_t RunAVX_F30F(x64emu_t *emu, vex_t vex, uintptr_t addr, int *step) switch(opcode) { - case 0x6F: // VMOVDQU + case 0x6F: // VMOVDQU Gx, Ex nextop = F8; GETEX(0); GETGX; memcpy(GX, EX, 16); // unaligned... + GETGY; + if(vex.l) { + GETEY; + memcpy(GY, EY, 16); + } else + GY->q[0] = GY->q[1] = 0; + break; + + case 0x7F: /* VMOVDQU Ex, Gx */ + nextop = F8; + GETEX(0); + GETGX; + memcpy(EX, GX, 16); // unaligned... if(vex.l) { GETGY; GETEY; - if(MODREG) - memcpy(GY, EY, 16); - else - memset(GY, 0, 16); - } + memcpy(EY, GY, 16); + } // no ymm raz here it seems break; default: |