[ARM64_DYNAREC] Small optim on some 256bits VPMOV[S/Z]X* opcodes

This commit is contained in:
ptitSeb 2025-04-25 17:28:28 +02:00
parent f9475aa540
commit b6b069cf8d

View File

@ -554,12 +554,11 @@ uintptr_t dynarec64_AVX_66_0F38(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip
nextop = F8; nextop = F8;
if(vex.l) {GETEX64(q1, 0, 0);} else {GETEX32(q1, 0, 0);} if(vex.l) {GETEX64(q1, 0, 0);} else {GETEX32(q1, 0, 0);}
GETGX_empty(q0); GETGX_empty(q0);
SXTL_8(q0, q1);
if(vex.l) { if(vex.l) {
GETGY_empty(v0, -1, -1, -1); GETGY_empty(v0, -1, -1, -1);
SXTL_8(v0, q1); SXTL2_16(v0, q0);
SXTL2_16(v0, v0);
} else YMM0(gd); } else YMM0(gd);
SXTL_8(q0, q1);
SXTL_16(q0, q0); SXTL_16(q0, q0);
break; break;
case 0x22: case 0x22:
@ -567,14 +566,12 @@ uintptr_t dynarec64_AVX_66_0F38(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip
nextop = F8; nextop = F8;
if(vex.l) {GETEX32(q1, 0, 0);} else {GETEX16(q1, 0, 0);} if(vex.l) {GETEX32(q1, 0, 0);} else {GETEX16(q1, 0, 0);}
GETGX_empty(q0); GETGX_empty(q0);
if(vex.l) {
GETGY_empty(v0, -1, -1, -1);
SXTL_8(v0, q1);
SXTL_16(v0, v0);
SXTL2_32(v0, v0);
} else YMM0(gd);
SXTL_8(q0, q1); SXTL_8(q0, q1);
SXTL_16(q0, q0); SXTL_16(q0, q0);
if(vex.l) {
GETGY_empty(v0, -1, -1, -1);
SXTL2_32(v0, q0);
} else YMM0(gd);
SXTL_32(q0, q0); SXTL_32(q0, q0);
break; break;
case 0x23: case 0x23:
@ -593,12 +590,11 @@ uintptr_t dynarec64_AVX_66_0F38(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip
nextop = F8; nextop = F8;
if(vex.l) {GETEX64(q1, 0, 0);} else {GETEX32(q1, 0, 0);} if(vex.l) {GETEX64(q1, 0, 0);} else {GETEX32(q1, 0, 0);}
GETGX_empty(q0); GETGX_empty(q0);
SXTL_16(q0, q1);
if(vex.l) { if(vex.l) {
GETGY_empty(v0, -1, -1, -1); GETGY_empty(v0, -1, -1, -1);
SXTL_16(v0, q1); SXTL2_32(v0, q0);
SXTL2_32(v0, v0);
} else YMM0(gd); } else YMM0(gd);
SXTL_16(q0, q1);
SXTL_32(q0, q0); SXTL_32(q0, q0);
break; break;
case 0x25: case 0x25:
@ -928,12 +924,11 @@ uintptr_t dynarec64_AVX_66_0F38(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip
GETG; GETG;
if(vex.l) { GETEX64(q1, 0, 0); } else { GETEX32(q1, 0, 0); YMM0(gd); } if(vex.l) { GETEX64(q1, 0, 0); } else { GETEX32(q1, 0, 0); YMM0(gd); }
GETGX_empty(q0); GETGX_empty(q0);
UXTL_8(q0, q1);
if(vex.l) { if(vex.l) {
GETGY_empty(v0, -1, -1, -1); GETGY_empty(v0, -1, -1, -1);
UXTL_8(v0, q1); UXTL2_16(v0, q0);
UXTL2_16(v0, v0);
} }
UXTL_8(q0, q1);
UXTL_16(q0, q0); UXTL_16(q0, q0);
break; break;
case 0x32: case 0x32:
@ -942,14 +937,12 @@ uintptr_t dynarec64_AVX_66_0F38(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip
GETG; GETG;
if(vex.l) { GETEX32(q1, 0, 0); } else { GETEX16(q1, 0, 0); YMM0(gd); } if(vex.l) { GETEX32(q1, 0, 0); } else { GETEX16(q1, 0, 0); YMM0(gd); }
GETGX_empty(q0); GETGX_empty(q0);
if(vex.l) {
GETGY_empty(v0, -1, -1, -1);
UXTL_8(v0, q1);
UXTL_16(v0, v0);
UXTL2_32(v0, v0);
}
UXTL_8(q0, q1); UXTL_8(q0, q1);
UXTL_16(q0, q0); UXTL_16(q0, q0);
if(vex.l) {
GETGY_empty(v0, -1, -1, -1);
UXTL2_32(v0, q0);
}
UXTL_32(q0, q0); UXTL_32(q0, q0);
break; break;
case 0x33: case 0x33:
@ -970,12 +963,11 @@ uintptr_t dynarec64_AVX_66_0F38(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip
GETG; GETG;
if(vex.l) { GETEX64(q1, 0, 0); } else { GETEX32(q1, 0, 0); YMM0(gd); } if(vex.l) { GETEX64(q1, 0, 0); } else { GETEX32(q1, 0, 0); YMM0(gd); }
GETGX_empty(q0); GETGX_empty(q0);
UXTL_16(q0, q1);
if(vex.l) { if(vex.l) {
GETGY_empty(v0, -1, -1, -1); GETGY_empty(v0, -1, -1, -1);
UXTL_16(v0, q1); UXTL2_32(v0, q0);
UXTL2_32(v0, v0);
} }
UXTL_16(q0, q1);
UXTL_32(q0, q0); UXTL_32(q0, q0);
break; break;
case 0x35: case 0x35: