diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2024-05-26 16:11:26 +0200 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2024-05-26 16:11:26 +0200 |
| commit | 580fbf47b2d42c934fd8125d74fb16326aafc4a3 (patch) | |
| tree | 2c9343835581171de196c0fc488104a46abe972d /src | |
| parent | 4bffdce8af8884c7ff4b46cac8f988b3998b5a22 (diff) | |
| download | box64-580fbf47b2d42c934fd8125d74fb16326aafc4a3.tar.gz box64-580fbf47b2d42c934fd8125d74fb16326aafc4a3.zip | |
[INTERPRETER] Added avx (66 0F) DB opcode and more fixes to some avx opcodes
Diffstat (limited to 'src')
| -rw-r--r-- | src/emu/x64runavx660f.c | 38 |
1 files changed, 28 insertions, 10 deletions
diff --git a/src/emu/x64runavx660f.c b/src/emu/x64runavx660f.c index c94c9315..2051b287 100644 --- a/src/emu/x64runavx660f.c +++ b/src/emu/x64runavx660f.c @@ -240,21 +240,39 @@ uintptr_t RunAVX_660F(x64emu_t *emu, vex_t vex, uintptr_t addr, int *step) } break; + case 0xDB: /* VPAND Gx,Ex */ + nextop = F8; + GETEX(0); + GETGX; + GETVX; + GX->q[0] = VX->q[0] & EX->q[0]; + GX->q[1] = VX->q[1] & EX->q[1]; + GETGY; + if(vex.l) { + GETEY; + GETVY; + GY->q[0] = VY->q[0] & EY->q[0]; + GY->q[1] = VY->q[1] & EY->q[1]; + } else { + GY->q[0] = GY->q[1] = 0; + } + break; + case 0xEB: /* VPOR Gx,Ex */ nextop = F8; GETEX(0); GETGX; GETVX; - VX->q[0] = GX->q[0] | EX->q[0]; - VX->q[1] = GX->q[1] | EX->q[1]; + GX->q[0] = VX->q[0] | EX->q[0]; + GX->q[1] = VX->q[1] | EX->q[1]; GETGY; - GETVY; if(vex.l) { GETEY; - VY->q[0] = GY->q[0] | EY->q[0]; - VY->q[1] = GY->q[1] | EY->q[1]; + GETVY; + GY->q[0] = VY->q[0] | EY->q[0]; + GY->q[1] = VY->q[1] | EY->q[1]; } else { - VY->q[0] = VY->q[1] = 0; + GY->q[0] = GY->q[1] = 0; } break; @@ -266,13 +284,13 @@ uintptr_t RunAVX_660F(x64emu_t *emu, vex_t vex, uintptr_t addr, int *step) VX->q[0] = GX->q[0] ^ EX->q[0]; VX->q[1] = GX->q[1] ^ EX->q[1]; GETGY; - GETVY; if(vex.l) { GETEY; - VY->q[0] = GY->q[0] ^ EY->q[0]; - VY->q[1] = GY->q[1] ^ EY->q[1]; + GETVY; + GY->q[0] = VY->q[0] ^ EY->q[0]; + GY->q[1] = VY->q[1] ^ EY->q[1]; } else { - VY->q[0] = VY->q[1] = 0; + GY->q[0] = GY->q[1] = 0; } break; |