From 3c6d89c53db35f487699a6df610fbf2214e257f3 Mon Sep 17 00:00:00 2001 From: Yang Liu Date: Fri, 20 Mar 2026 17:41:41 +0800 Subject: [PATCH] [LA64_DYNAREC] Fixed avx_get_reg for readonly 128bit case --- src/dynarec/la64/dynarec_la64_helper.c | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/src/dynarec/la64/dynarec_la64_helper.c b/src/dynarec/la64/dynarec_la64_helper.c index bb2dd5048..48dd527e4 100644 --- a/src/dynarec/la64/dynarec_la64_helper.c +++ b/src/dynarec/la64/dynarec_la64_helper.c @@ -1489,14 +1489,9 @@ int avx_get_reg(dynarec_la64_t* dyn, int ninst, int s1, int a, int forwrite, int int ret = dyn->lsx.avxcache[a].reg; if (forwrite) dyn->lsx.avxcache[a].write = 1; dyn->lsx.avxcache[a].dirty = 0; - if (width == LSX_AVX_WIDTH_128) { + if (width == LSX_AVX_WIDTH_128 && forwrite) { VLD(ret, xEmu, offsetof(x64emu_t, xmm[a])); - if (forwrite) - dyn->lsx.avxcache[a].dirty = 1; - else { - XVXOR_V(SCRATCH, SCRATCH, SCRATCH); - XVPERMI_Q(ret, SCRATCH, XVPERMI_IMM_4_0(0, 2)); - } + dyn->lsx.avxcache[a].dirty = 1; } else { VLD(ret, xEmu, offsetof(x64emu_t, xmm[a])); VLD(SCRATCH, xEmu, offsetof(x64emu_t, ymm[a]));