mirror of
https://github.com/ptitSeb/box64.git
synced 2025-05-09 00:21:32 +08:00
[INTERP] Small change to various (V)MOVNT* opcodes, forbidding reg -> reg form
This commit is contained in:
parent
926e4b2da8
commit
af555abb6f
@ -211,10 +211,12 @@ uintptr_t Run660F(x64emu_t *emu, rex_t rex, uintptr_t addr)
|
||||
break;
|
||||
case 0x2B: /* MOVNTPD Ex, Gx */
|
||||
nextop = F8;
|
||||
GETEX(0);
|
||||
GETGX;
|
||||
EX->q[0] = GX->q[0];
|
||||
EX->q[1] = GX->q[1];
|
||||
if(!MODREG) {
|
||||
GETEX(0);
|
||||
GETGX;
|
||||
EX->q[0] = GX->q[0];
|
||||
EX->q[1] = GX->q[1];
|
||||
}
|
||||
break;
|
||||
case 0x2C: /* CVTTPD2PI Gm, Ex */
|
||||
nextop = F8;
|
||||
@ -554,10 +556,12 @@ uintptr_t Run660F(x64emu_t *emu, rex_t rex, uintptr_t addr)
|
||||
break;
|
||||
case 0x2A: /* MOVNTDQA Gx, Ex */
|
||||
nextop = F8;
|
||||
GETEX(0);
|
||||
GETGX;
|
||||
GX->q[0] = EX->q[0];
|
||||
GX->q[1] = EX->q[1];
|
||||
if(!MODREG) {
|
||||
GETEX(0);
|
||||
GETGX;
|
||||
GX->q[0] = EX->q[0];
|
||||
GX->q[1] = EX->q[1];
|
||||
}
|
||||
break;
|
||||
case 0x2B: /* PACKUSDW Gx, Ex */
|
||||
nextop = F8;
|
||||
@ -2454,10 +2458,12 @@ uintptr_t Run660F(x64emu_t *emu, rex_t rex, uintptr_t addr)
|
||||
break;
|
||||
case 0xE7: /* MOVNTDQ Ex, Gx */
|
||||
nextop = F8;
|
||||
GETEX(0);
|
||||
GETGX;
|
||||
EX->q[0] = GX->q[0];
|
||||
EX->q[1] = GX->q[1];
|
||||
if(!MODREG) {
|
||||
GETEX(0);
|
||||
GETGX;
|
||||
EX->q[0] = GX->q[0];
|
||||
EX->q[1] = GX->q[1];
|
||||
}
|
||||
break;
|
||||
case 0xE8: /* PSUBSB Gx,Ex */
|
||||
nextop = F8;
|
||||
|
@ -207,15 +207,17 @@ uintptr_t RunAVX_0F(x64emu_t *emu, vex_t vex, uintptr_t addr, int *step)
|
||||
|
||||
case 0x2B: /* VMOVNTPS Ex,Gx */
|
||||
nextop = F8;
|
||||
GETEX(0);
|
||||
GETGX;
|
||||
EX->q[0] = GX->q[0];
|
||||
EX->q[1] = GX->q[1];
|
||||
if(vex.l) {
|
||||
GETEY;
|
||||
GETGY;
|
||||
EY->q[0] = GY->q[0];
|
||||
EY->q[1] = GY->q[1];
|
||||
if(!MODREG) {
|
||||
GETEX(0);
|
||||
GETGX;
|
||||
EX->q[0] = GX->q[0];
|
||||
EX->q[1] = GX->q[1];
|
||||
if(vex.l) {
|
||||
GETEY;
|
||||
GETGY;
|
||||
EY->q[0] = GY->q[0];
|
||||
EY->q[1] = GY->q[1];
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
|
@ -187,15 +187,17 @@ uintptr_t RunAVX_660F(x64emu_t *emu, vex_t vex, uintptr_t addr, int *step)
|
||||
|
||||
case 0x2B: /* MOVNTPD Ex, Gx */
|
||||
nextop = F8;
|
||||
GETEX(0);
|
||||
GETGX;
|
||||
EX->q[0] = GX->q[0];
|
||||
EX->q[1] = GX->q[1];
|
||||
if(vex.l) {
|
||||
GETGY;
|
||||
GETEY;
|
||||
EY->q[0] = GY->q[0];
|
||||
EY->q[1] = GY->q[1];
|
||||
if(!MODREG) {
|
||||
GETEX(0);
|
||||
GETGX;
|
||||
EX->q[0] = GX->q[0];
|
||||
EX->q[1] = GX->q[1];
|
||||
if(vex.l) {
|
||||
GETGY;
|
||||
GETEY;
|
||||
EY->q[0] = GY->q[0];
|
||||
EY->q[1] = GY->q[1];
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
@ -1712,15 +1714,17 @@ uintptr_t RunAVX_660F(x64emu_t *emu, vex_t vex, uintptr_t addr, int *step)
|
||||
break;
|
||||
case 0xE7: /* VMOVNTDQ Ex, Gx */
|
||||
nextop = F8;
|
||||
GETEX(0);
|
||||
GETGX;
|
||||
EX->q[0] = GX->q[0];
|
||||
EX->q[1] = GX->q[1];
|
||||
if(vex.l) {
|
||||
GETEY;
|
||||
GETGY;
|
||||
EY->q[0] = GY->q[0];
|
||||
EY->q[1] = GY->q[1];
|
||||
if(!MODREG) {
|
||||
GETEX(0);
|
||||
GETGX;
|
||||
EX->q[0] = GX->q[0];
|
||||
EX->q[1] = GX->q[1];
|
||||
if(vex.l) {
|
||||
GETEY;
|
||||
GETGY;
|
||||
EY->q[0] = GY->q[0];
|
||||
EY->q[1] = GY->q[1];
|
||||
}
|
||||
}
|
||||
break;
|
||||
case 0xE8: /* VSUBSB Gx, Vx, Ex */
|
||||
|
@ -777,17 +777,19 @@ uintptr_t RunAVX_660F38(x64emu_t *emu, vex_t vex, uintptr_t addr, int *step)
|
||||
break;
|
||||
case 0x2A: /* VMOVNTDQA Gx, Ex */
|
||||
nextop = F8;
|
||||
GETEX(0);
|
||||
GETGX;
|
||||
GETGY;
|
||||
GX->q[0] = EX->q[0];
|
||||
GX->q[1] = EX->q[1];
|
||||
if(vex.l) {
|
||||
GETEY;
|
||||
GY->q[0] = EY->q[0];
|
||||
GY->q[1] = EY->q[1];
|
||||
} else
|
||||
GY->u128 = 0;
|
||||
if(!MODREG) {
|
||||
GETEX(0);
|
||||
GETGX;
|
||||
GETGY;
|
||||
GX->q[0] = EX->q[0];
|
||||
GX->q[1] = EX->q[1];
|
||||
if(vex.l) {
|
||||
GETEY;
|
||||
GY->q[0] = EY->q[0];
|
||||
GY->q[1] = EY->q[1];
|
||||
} else
|
||||
GY->u128 = 0;
|
||||
}
|
||||
break;
|
||||
case 0x2B: /* VPACKUSDW Gx, Vx, Ex */
|
||||
nextop = F8;
|
||||
|
@ -90,9 +90,11 @@ uintptr_t RunF20F(x64emu_t *emu, rex_t rex, uintptr_t addr, int *step)
|
||||
break;
|
||||
case 0x2B: /* MOVNTSD Ex, Gx */
|
||||
nextop = F8;
|
||||
GETEX8(0);
|
||||
GETGX;
|
||||
EX->q[0] = GX->q[0];
|
||||
if(!MODREG) {
|
||||
GETEX8(0);
|
||||
GETGX;
|
||||
EX->q[0] = GX->q[0];
|
||||
}
|
||||
break;
|
||||
case 0x2C: /* CVTTSD2SI Gd, Ex */
|
||||
nextop = F8;
|
||||
|
@ -96,9 +96,11 @@ uintptr_t RunF30F(x64emu_t *emu, rex_t rex, uintptr_t addr)
|
||||
break;
|
||||
case 0x2B: /* MOVNTSS Ex Gx */
|
||||
nextop = F8;
|
||||
GETEX4(0);
|
||||
GETGX;
|
||||
EX->ud[0] = GX->ud[0];
|
||||
if(!MODREG) {
|
||||
GETEX4(0);
|
||||
GETGX;
|
||||
EX->ud[0] = GX->ud[0];
|
||||
}
|
||||
break;
|
||||
case 0x2C: /* CVTTSS2SI Gd, Ex */
|
||||
nextop = F8;
|
||||
|
Loading…
x
Reference in New Issue
Block a user