about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/dynarec/rv64/dynarec_rv64_helper.c24
1 files changed, 13 insertions, 11 deletions
diff --git a/src/dynarec/rv64/dynarec_rv64_helper.c b/src/dynarec/rv64/dynarec_rv64_helper.c
index f3badafb..de725ec0 100644
--- a/src/dynarec/rv64/dynarec_rv64_helper.c
+++ b/src/dynarec/rv64/dynarec_rv64_helper.c
@@ -1470,18 +1470,20 @@ int sse_get_reg(dynarec_rv64_t* dyn, int ninst, int s1, int a, int single)
 int sse_get_reg_empty(dynarec_rv64_t* dyn, int ninst, int s1, int a, int single)
 {
     if(dyn->e.ssecache[a].v!=-1) {
-        if(dyn->e.ssecache[a].single!=single && single) {
-            // writting back the double
-            FSD(dyn->e.ssecache[a].reg, xEmu, offsetof(x64emu_t, xmm[a]));
-            // need to wipe the half high 32bits of old Double because we now have a single
-            //SW(xZR, xEmu, offsetof(x64emu_t, xmm[a])+4);
+        if(dyn->e.ssecache[a].single!=single) {
+            if (single) {
+                // writing back the double
+                FSD(dyn->e.ssecache[a].reg, xEmu, offsetof(x64emu_t, xmm[a]));
+                // need to wipe the half high 32bits of old Double because we now have a single
+                //SW(xZR, xEmu, offsetof(x64emu_t, xmm[a])+4);
+            }
+            dyn->e.olds[a].changed = 1;
+            dyn->e.olds[a].purged = 0;
+            dyn->e.olds[a].reg = EXTIDX(dyn->e.ssecache[a].reg);
+            dyn->e.olds[a].single = 1-single;
+            dyn->e.ssecache[a].single = single;
+            dyn->e.extcache[EXTIDX(dyn->e.ssecache[a].reg)].t = single?EXT_CACHE_SS:EXT_CACHE_SD;
         }
-        dyn->e.olds[a].changed = 1;
-        dyn->e.olds[a].purged = 0;
-        dyn->e.olds[a].reg = EXTIDX(dyn->e.ssecache[a].reg);
-        dyn->e.olds[a].single = 1-single;
-        dyn->e.ssecache[a].single = single;
-        dyn->e.extcache[EXTIDX(dyn->e.ssecache[a].reg)].t = single?EXT_CACHE_SS:EXT_CACHE_SD;
         return dyn->e.ssecache[a].reg;
     }
     dyn->e.ssecache[a].reg = fpu_get_reg_xmm(dyn, single?EXT_CACHE_SS:EXT_CACHE_SD, a);