[ARM64_DYNAREC] Small improvment to VPBROADCAST[B/W] opcodes

This commit is contained in:
ptitSeb 2025-04-30 17:17:08 +02:00
parent 89dbd81f27
commit eae608f35c

View File

@ -1224,48 +1224,38 @@ uintptr_t dynarec64_AVX_66_0F38(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip
break;
case 0x78:
INST_NAME("VBROADCASTB Gx, Ex");
INST_NAME("VPBROADCASTB Gx, Ex");
nextop = F8;
if(MODREG) {
v1 = sse_get_reg(dyn, ninst, x1, (nextop&7)+(rex.b<<3), 0);
GETGX_empty(v0);
VDUPQ_8(v0, v1, 0);
if(vex.l) {
GETGY_empty(v0, -1, -1, -1);
VDUPQ_8(v0, v1, 0);
}
} else {
GETGX_empty(v0);
addr = geted(dyn, addr, ninst, nextop, &ed, x3, &fixedaddress, NULL, 0, 0, rex, NULL, 0, 0);
VLDQ1R_8(v0, ed);
if(vex.l) {
GETGY_empty(v0, -1, -1, -1);
VLDQ1R_8(v0, ed);
}
}
if(!vex.l) YMM0(gd);
if(vex.l) {
GETGY_empty(v1, -1, -1, -1);
VMOVQ(v0, v1);
} else YMM0(gd);
break;
case 0x79:
INST_NAME("VBROADCASTW Gx, Ex");
INST_NAME("VPBROADCASTW Gx, Ex");
nextop = F8;
if(MODREG) {
v1 = sse_get_reg(dyn, ninst, x1, (nextop&7)+(rex.b<<3), 0);
GETGX_empty(v0);
VDUPQ_16(v0, v1, 0);
if(vex.l) {
GETGY_empty(v0, -1, -1, -1);
VDUPQ_16(v0, v1, 0);
}
} else {
GETGX_empty(v0);
addr = geted(dyn, addr, ninst, nextop, &ed, x3, &fixedaddress, NULL, 0, 0, rex, NULL, 0, 0);
VLDQ1R_16(v0, ed);
if(vex.l) {
GETGY_empty(v0, -1, -1, -1);
VLDQ1R_16(v0, ed);
}
}
if(!vex.l) YMM0(gd);
if(vex.l) {
GETGY_empty(v1, -1, -1, -1);
VMOVQ(v0, v1);
} else YMM0(gd);
break;
case 0x8C: