From 614d142205241a06733fa49f438c47a6906a5ab2 Mon Sep 17 00:00:00 2001 From: phorcys Date: Wed, 9 Jul 2025 14:10:41 +0800 Subject: [LA64_DYNAREC] Opt/fix la64 avx mov ops. (#2800) * opt VEX.66.0F.D6 VMOVD * opt VEX.F2.0F.10 VMOSD * opt VEX.F3.0F.10 VMOVSS * opt/fix VEX.F3.0F.7E VMOVD --- src/dynarec/la64/dynarec_la64_avx_66_0f.c | 3 +-- src/dynarec/la64/dynarec_la64_avx_f2_0f.c | 3 +-- src/dynarec/la64/dynarec_la64_avx_f3_0f.c | 15 ++++----------- 3 files changed, 6 insertions(+), 15 deletions(-) (limited to 'src') diff --git a/src/dynarec/la64/dynarec_la64_avx_66_0f.c b/src/dynarec/la64/dynarec_la64_avx_66_0f.c index 3f04d192..4fff9660 100644 --- a/src/dynarec/la64/dynarec_la64_avx_66_0f.c +++ b/src/dynarec/la64/dynarec_la64_avx_66_0f.c @@ -333,8 +333,7 @@ uintptr_t dynarec64_AVX_66_0F(dynarec_la64_t* dyn, uintptr_t addr, uintptr_t ip, GETGYx(q0, 0); if (MODREG) { GETEYx_empty(q1, 0); - XVXOR_V(q1, q1, q1); - XVINSVE0_D(q1, q0, 0); + XVPICKVE_D(q1, q0, 0); YMM_UNMARK_UPPER_ZERO(q1); } else { addr = geted(dyn, addr, ninst, nextop, &ed, x4, x5, &fixedaddress, rex, NULL, 1, 0); diff --git a/src/dynarec/la64/dynarec_la64_avx_f2_0f.c b/src/dynarec/la64/dynarec_la64_avx_f2_0f.c index f97e9890..ad42f029 100644 --- a/src/dynarec/la64/dynarec_la64_avx_f2_0f.c +++ b/src/dynarec/la64/dynarec_la64_avx_f2_0f.c @@ -70,8 +70,7 @@ uintptr_t dynarec64_AVX_F2_0F(dynarec_la64_t* dyn, uintptr_t addr, uintptr_t ip, } else { GETEYSD(q2, 0, 0); GETGYx_empty(q0); - XVXOR_V(q0, q0, q0); - XVINSVE0_D(q0, q2, 0); + XVPICKVE_D(q0, q2, 0); YMM_UNMARK_UPPER_ZERO(q0); } break; diff --git a/src/dynarec/la64/dynarec_la64_avx_f3_0f.c b/src/dynarec/la64/dynarec_la64_avx_f3_0f.c index f6f4535d..2415e6a5 100644 --- a/src/dynarec/la64/dynarec_la64_avx_f3_0f.c +++ b/src/dynarec/la64/dynarec_la64_avx_f3_0f.c @@ -56,8 +56,7 @@ uintptr_t dynarec64_AVX_F3_0F(dynarec_la64_t* dyn, uintptr_t addr, uintptr_t ip, } else { GETEYSS(q2, 0, 0); GETGYx_empty(q0); - XVXOR_V(q0, q0, q0); - XVINSVE0_W(q0, q2, 0); + XVPICKVE_W(q0, q2, 0); YMM_UNMARK_UPPER_ZERO(q0); } break; @@ -125,15 +124,9 @@ uintptr_t dynarec64_AVX_F3_0F(dynarec_la64_t* dyn, uintptr_t addr, uintptr_t ip, case 0x7E: INST_NAME("VMOVD Gx, Ex"); nextop = F8; - if (MODREG) { - GETEYx(q1, 0, 0); - GETGYx_empty(q0); - } else { - GETEYSD(q1, 0, 0); - GETGYx_empty(q0); - } - XVXOR_V(q0, q0, q0); - XVINSVE0_D(q0, q1, 0); + GETEYSD(q1, 0, 0); + GETGYx_empty(q0); + XVPICKVE_D(q0, q1, 0); YMM_UNMARK_UPPER_ZERO(q0); break; case 0x7F: -- cgit 1.4.1