diff options
| author | phorcys <phorcys@126.com> | 2025-07-09 14:10:41 +0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-07-09 08:10:41 +0200 |
| commit | 614d142205241a06733fa49f438c47a6906a5ab2 (patch) | |
| tree | 63451a032d08a6e48336262e91df6759a4a63d96 /src | |
| parent | aeec79ec008e373fa9797f3fabb0a03261526fe6 (diff) | |
| download | box64-614d142205241a06733fa49f438c47a6906a5ab2.tar.gz box64-614d142205241a06733fa49f438c47a6906a5ab2.zip | |
[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
Diffstat (limited to 'src')
| -rw-r--r-- | src/dynarec/la64/dynarec_la64_avx_66_0f.c | 3 | ||||
| -rw-r--r-- | src/dynarec/la64/dynarec_la64_avx_f2_0f.c | 3 | ||||
| -rw-r--r-- | src/dynarec/la64/dynarec_la64_avx_f3_0f.c | 15 |
3 files changed, 6 insertions, 15 deletions
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: |