[LA64_DYNAREC] Add mmx arith ops. (#2530)

This commit is contained in:
phorcys 2025-04-14 19:30:37 +08:00 committed by GitHub
parent 0021fbbea3
commit f559bc48a4
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -1633,6 +1633,13 @@ uintptr_t dynarec64_0F(dynarec_la64_t* dyn, uintptr_t addr, uintptr_t ip, int ni
VSRL_D(d0, d0, d1);
VAND_V(d0, d0, v0);
break;
case 0xD4:
INST_NAME("PADDQ Gm,Em");
nextop = F8;
GETGM(v0);
GETEM(v1, 0);
VADD_D(v0, v0, v1);
break;
case 0xD5:
INST_NAME("PMULLW Gm, Em");
nextop = F8;
@ -1664,6 +1671,13 @@ uintptr_t dynarec64_0F(dynarec_la64_t* dyn, uintptr_t addr, uintptr_t ip, int ni
GETEM(q1, 0);
VSSUB_HU(q0, q0, q1);
break;
case 0xDA:
INST_NAME("PMINUB Gm, Em");
nextop = F8;
GETGM(v0);
GETEM(v1, 0);
VMIN_BU(v0, v0, v1);
break;
case 0xDB:
INST_NAME("PAND Gm, Em");
nextop = F8;
@ -1685,6 +1699,13 @@ uintptr_t dynarec64_0F(dynarec_la64_t* dyn, uintptr_t addr, uintptr_t ip, int ni
GETEM(q1, 0);
VSADD_HU(q0, q0, q1);
break;
case 0xDE:
INST_NAME("PMAXUB Gm, Em");
nextop = F8;
GETGM(d0);
GETEM(d1, 0);
VMAX_BU(d0, d0, d1);
break;
case 0xDF:
INST_NAME("PANDN Gm, Em");
nextop = F8;
@ -1712,6 +1733,25 @@ uintptr_t dynarec64_0F(dynarec_la64_t* dyn, uintptr_t addr, uintptr_t ip, int ni
VREPLVEI_W(q0, q0, 0);
VSRA_W(v0, v0, q0);
break;
case 0xE0:
INST_NAME("PAVGB Gm, Em");
nextop = F8;
GETGM(v0);
GETEM(v1, 0);
VAVGR_BU(v0, v0, v1);
break;
case 0xE3:
INST_NAME("PAVGW Gm,Em");
nextop = F8;
GETGM(v0);
GETEM(v1, 0);
VAVG_HU(v0, v0, v1);
break;
case 0xE4:
INST_NAME("PMULHUW Gm,Em");
q1 = fpu_get_scratch(dyn);
VMUH_HU(q0, v0, v1);
break;
case 0xE5:
INST_NAME("PMULHW Gm, Em");
nextop = F8;
@ -1746,6 +1786,13 @@ uintptr_t dynarec64_0F(dynarec_la64_t* dyn, uintptr_t addr, uintptr_t ip, int ni
GETEM(q0, 0);
VSSUB_H(v0, v0, q0);
break;
case 0xEA:
INST_NAME("PMINSW Gx,Ex");
nextop = F8;
GETGM(v0);
GETEM(v1, 0);
VMIN_H(v0, v0, v1);
break;
case 0xEB:
INST_NAME("POR Gm, Em");
nextop = F8;
@ -1767,6 +1814,13 @@ uintptr_t dynarec64_0F(dynarec_la64_t* dyn, uintptr_t addr, uintptr_t ip, int ni
GETEM(d1, 0);
VSADD_H(d0, d0, d1);
break;
case 0xEE:
INST_NAME("PMAXSW Gm,Em");
nextop = F8;
GETGM(v0);
GETEM(v1, 0);
VMAX_H(v0, v0, v1);
break;
case 0xEF:
INST_NAME("PXOR Gm, Em");
nextop = F8;
@ -1809,6 +1863,13 @@ uintptr_t dynarec64_0F(dynarec_la64_t* dyn, uintptr_t addr, uintptr_t ip, int ni
VSLL_D(d0, d0, d1);
VAND_V(d0, d0, v0);
break;
case 0xF4:
INST_NAME("PMULUDQ Gm,Em");
nextop = F8;
GETGM(v0);
GETEM(v1, 0);
VMULWEV_D_WU(v0, v0, v1);
break;
case 0xF5:
INST_NAME("PMADDWD Gm, Em");
nextop = F8;
@ -1820,6 +1881,16 @@ uintptr_t dynarec64_0F(dynarec_la64_t* dyn, uintptr_t addr, uintptr_t ip, int ni
VMADDWOD_W_H(q0, v0, v1);
VBSLL_V(v0, q0, 0);
break;
case 0xF6:
INST_NAME("PSADBW Gm, Em");
nextop = F8;
GETGM(v0);
GETEM(v1, 0);
VABSD_BU(v0, v0, v1);
VHADDW_HU_BU(v0, v0, v0);
VHADDW_WU_HU(v0, v0, v0);
VHADDW_DU_WU(v0, v0, v0);
break;
case 0xF7:
INST_NAME("MASKMOVQ Gm, Em");
nextop = F8;