about summary refs log tree commit diff stats
path: root/src/dynarec/dynarec_native.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/dynarec/dynarec_native.c')
-rw-r--r--src/dynarec/dynarec_native.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/src/dynarec/dynarec_native.c b/src/dynarec/dynarec_native.c
index 7ac19234..4f509ac1 100644
--- a/src/dynarec/dynarec_native.c
+++ b/src/dynarec/dynarec_native.c
@@ -553,9 +553,15 @@ void* FillBlock64(dynablock_t* block, uintptr_t addr, int alternate, int is32bit
                     k=i2;
             }*/
             if(k!=-1) {
-                if(k!=-1 && !helper.insts[i].barrier_maybe)
+                if(!helper.insts[i].barrier_maybe)
                     helper.insts[k].x64.barrier |= BARRIER_FULL;
                 helper.insts[i].x64.jmp_insts = k;
+                if(helper.insts[i].ymm_zero || helper.insts[k].ymm_zero) {
+                    // move to pureg the reg that are present in k (jump to) but not in i (jump from)
+                    uint16_t to_purge = helper.insts[k].ymm_zero & ~helper.insts[i].ymm_zero;
+                    helper.insts[k].purge_ymm0 |= to_purge;
+                    helper.insts[k].ymm_zero &= ~to_purge;
+                }
             }
         }
     }