diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2025-05-01 12:11:10 +0200 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2025-05-01 12:11:10 +0200 |
| commit | 198eea49a83909209d203eea2e718112cca5dc48 (patch) | |
| tree | 76de95dcf7ce8e503433316cff8e73c29028f75a /src | |
| parent | b500a6ebc20785176ff10b1683d2df184fdda5b4 (diff) | |
| download | box64-198eea49a83909209d203eea2e718112cca5dc48.tar.gz box64-198eea49a83909209d203eea2e718112cca5dc48.zip | |
[ARM64_DYNAREC] Small changes in a few AVX shift opcodes
Diffstat (limited to 'src')
| -rw-r--r-- | src/dynarec/arm64/dynarec_arm64_avx_66_0f38.c | 27 |
1 files changed, 6 insertions, 21 deletions
diff --git a/src/dynarec/arm64/dynarec_arm64_avx_66_0f38.c b/src/dynarec/arm64/dynarec_arm64_avx_66_0f38.c index 503d8a63..f59c6121 100644 --- a/src/dynarec/arm64/dynarec_arm64_avx_66_0f38.c +++ b/src/dynarec/arm64/dynarec_arm64_avx_66_0f38.c @@ -1074,7 +1074,6 @@ uintptr_t dynarec64_AVX_66_0F38(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip if(!l) { GETGX_empty_VXEX(v0, v2, v1, 0); } else { GETGY_empty_VYEY(v0, v2, v1); } if(!MODREG) q0 = v1; if(rex.w) { - VEORQ(q1, q1, q1); MOVI_32(q1, 64); // no 64bits vmin/vmax UQXTN_32(q0, v1); @@ -1083,7 +1082,6 @@ uintptr_t dynarec64_AVX_66_0F38(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip NEGQ_64(q0, q0); USHLQ_64(v0, v2, q0); } else { - VEORQ(q1, q1, q1); MOVIQ_32(q1, 32); UMINQ_32(q0, v1, q1); NEGQ_32(q0, q0); @@ -1093,29 +1091,18 @@ uintptr_t dynarec64_AVX_66_0F38(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip if(!vex.l) YMM0(gd); break; case 0x46: - INST_NAME("VPSRAVD/Q Gx, Vx, Ex"); + INST_NAME("VPSRAVD Gx, Vx, Ex"); nextop = F8; + if(rex.w) {DEFAULT; return addr;} if(MODREG) q0 = fpu_get_scratch(dyn, ninst); q1 = fpu_get_scratch(dyn, ninst); for(int l=0; l<1+vex.l; ++l) { if(!l) { GETGX_empty_VXEX(v0, v2, v1, 0); } else { GETGY_empty_VYEY(v0, v2, v1); } if(!MODREG) q0 = v1; - if(rex.w) { - VEORQ(q1, q1, q1); - MOVI_32(q1, 64); - // no 64bits vmin/vmax - UQXTN_32(q0, v1); - UMIN_32(q0, q0, q1); - UXTL_32(q0, q0); - NEGQ_64(q0, q0); - SSHLQ_64(v0, v2, q0); - } else { - VEORQ(q1, q1, q1); - MOVIQ_32(q1, 32); - UMINQ_32(q0, v1, q1); - NEGQ_32(q0, q0); - SSHLQ_32(v0, v2, q0); - } + MOVIQ_32(q1, 32); + UMINQ_32(q0, v1, q1); + NEGQ_32(q0, q0); + SSHLQ_32(v0, v2, q0); } if(!vex.l) YMM0(gd); break; @@ -1128,7 +1115,6 @@ uintptr_t dynarec64_AVX_66_0F38(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip if(!l) { GETGX_empty_VXEX(v0, v2, v1, 0); } else { GETGY_empty_VYEY(v0, v2, v1); } if(!MODREG) q0 = v1; if(rex.w) { - VEORQ(q1, q1, q1); MOVI_32(q1, 64); // no 64bits vmin/vmax UQXTN_32(q0, v1); @@ -1136,7 +1122,6 @@ uintptr_t dynarec64_AVX_66_0F38(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip UXTL_32(q0, q0); USHLQ_64(v0, v2, q0); } else { - VEORQ(q1, q1, q1); MOVIQ_32(q1, 32); UMINQ_32(q0, v1, q1); USHLQ_32(v0, v2, q0); |