diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/dynarec/la64/dynarec_la64_helper.c | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/src/dynarec/la64/dynarec_la64_helper.c b/src/dynarec/la64/dynarec_la64_helper.c index 6efc7bfb..bd925559 100644 --- a/src/dynarec/la64/dynarec_la64_helper.c +++ b/src/dynarec/la64/dynarec_la64_helper.c @@ -881,15 +881,17 @@ int sse_get_reg(dynarec_la64_t* dyn, int ninst, int s1, int a, int forwrite) } return dyn->lsx.ssecache[a].reg; } + int need_vld = 1; // migrate from avx to sse if (dyn->lsx.avxcache[a].v != -1) { avx_reflect_reg_upper128(dyn, ninst, a, forwrite); dyn->lsx.avxcache[a].v = -1; + need_vld = 0; } dyn->lsx.ssecache[a].reg = fpu_get_reg_xmm(dyn, forwrite ? LSX_CACHE_XMMW : LSX_CACHE_XMMR, a); int ret = dyn->lsx.ssecache[a].reg; dyn->lsx.ssecache[a].write = forwrite; - VLD(ret, xEmu, offsetof(x64emu_t, xmm[a])); + if(need_vld) VLD(ret, xEmu, offsetof(x64emu_t, xmm[a])); //skip VLD if migrate from avx return ret; } |