about summary refs log tree commit diff stats
path: root/src/dynarec/dynarec_native.c
diff options
context:
space:
mode:
authorptitSeb <sebastien.chev@gmail.com>2024-05-30 12:12:45 +0200
committerptitSeb <sebastien.chev@gmail.com>2024-05-30 12:12:45 +0200
commit3e5784cbc560d21539b1ad1b157206102f25b25c (patch)
treeb0b943b3b09d9d48f4663e83bca8f54167ce0ead /src/dynarec/dynarec_native.c
parent98d9f36f9cc98343217d09473db5587de1fe05b6 (diff)
downloadbox64-3e5784cbc560d21539b1ad1b157206102f25b25c.tar.gz
box64-3e5784cbc560d21539b1ad1b157206102f25b25c.zip
[ARM64_DYNAREC] Added a fisrt 128bits only AVX opcode
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;
+                }
             }
         }
     }