[INTERP] Fixed edge-case for VPERM2[F/I]128 opcodes

This commit is contained in:
ptitSeb 2025-05-01 11:13:01 +02:00
parent 16b0922ec5
commit 830cc8a498

View File

@ -202,14 +202,14 @@ uintptr_t RunAVX_660F3A(x64emu_t *emu, vex_t vex, uintptr_t addr, int *step)
case 1 : GX->u128 = VY->u128; break;
case 2 : GX->u128 = EX->u128; break;
case 3 : GX->u128 = EY->u128; break;
default: GX->u128 = 0; break;
default: if(u8&0x08) GX->u128 = 0; break;
}
switch((u8>>4)&0x0f) {
case 0 : GY->u128 = VX->u128; break;
case 1 : GY->u128 = VY->u128; break;
case 2 : GY->u128 = EX->u128; break;
case 3 : GY->u128 = EY->u128; break;
default: GY->u128 = 0; break;
default: if(u8&0x80) GY->u128 = 0; break;
}
break;
@ -780,14 +780,14 @@ uintptr_t RunAVX_660F3A(x64emu_t *emu, vex_t vex, uintptr_t addr, int *step)
eay2 = *VY;
VY = &eay2;
}
switch(u8&0x0f) {
switch(u8&0b1011) {
case 0 : GX->u128 = VX->u128; break;
case 1 : GX->u128 = VY->u128; break;
case 2 : GX->u128 = EX->u128; break;
case 3 : GX->u128 = EY->u128; break;
default: GX->u128 = 0; break;
}
switch((u8>>4)&0x0f) {
switch((u8>>4)&0b1011) {
case 0 : GY->u128 = VX->u128; break;
case 1 : GY->u128 = VY->u128; break;
case 2 : GY->u128 = EX->u128; break;