about summary refs log tree commit diff stats
path: root/src/dynarec/arm64/dynarec_arm64_functions.c
diff options
context:
space:
mode:
authorptitSeb <sebastien.chev@gmail.com>2024-07-05 18:53:32 +0200
committerptitSeb <sebastien.chev@gmail.com>2024-07-05 18:53:32 +0200
commit267bffb0ec2b8afdea35cdc7f2d5983f7cd1566b (patch)
tree2da1f1246e1773e731b74f4d10926dc6d1103ee4 /src/dynarec/arm64/dynarec_arm64_functions.c
parent054621622895a6a8b43173be87ddda9637b0897d (diff)
downloadbox64-267bffb0ec2b8afdea35cdc7f2d5983f7cd1566b.tar.gz
box64-267bffb0ec2b8afdea35cdc7f2d5983f7cd1566b.zip
[ARM64_DYNAREC] More improvment on YMM handling
Diffstat (limited to 'src/dynarec/arm64/dynarec_arm64_functions.c')
-rw-r--r--src/dynarec/arm64/dynarec_arm64_functions.c17
1 files changed, 15 insertions, 2 deletions
diff --git a/src/dynarec/arm64/dynarec_arm64_functions.c b/src/dynarec/arm64/dynarec_arm64_functions.c
index ea60745c..afb1ed6b 100644
--- a/src/dynarec/arm64/dynarec_arm64_functions.c
+++ b/src/dynarec/arm64/dynarec_arm64_functions.c
@@ -168,6 +168,10 @@ static void fpu_reset_reg_neoncache(neoncache_t* n)
         n->fpuused[i]=0;
         n->neoncache[i].v = 0;
     }
+    n->ymm_regs = 0;
+    n->ymm_removed = 0;
+    n->ymm_used = 0;
+    n->ymm_write = 0;
 
 }
 void fpu_reset_reg(dynarec_arm_t* dyn)
@@ -767,7 +771,7 @@ static void sse_reset(neoncache_t* n)
             n->neoncache[i].v = 0;
 }
 
-void fpu_reset(dynarec_arm_t* dyn)
+void fpu_reset(dynarec_native_t* dyn)
 {
     x87_reset(&dyn->n);
     mmx_reset(&dyn->n);
@@ -776,12 +780,21 @@ void fpu_reset(dynarec_arm_t* dyn)
     dyn->ymm_zero = 0;
 }
 
-void fpu_reset_ninst(dynarec_arm_t* dyn, int ninst)
+void fpu_reset_ninst(dynarec_native_t* dyn, int ninst)
 {
     x87_reset(&dyn->insts[ninst].n);
     mmx_reset(&dyn->insts[ninst].n);
     sse_reset(&dyn->insts[ninst].n);
     fpu_reset_reg_neoncache(&dyn->insts[ninst].n);
+
+}
+
+void arm64_fpu_reset(dynarec_native_t* dyn, int ninst, int step)
+{
+    if(step<2) {
+        dyn->insts[ninst].ymm0_in = 0;
+        dyn->insts[ninst].ymm0_out = 0;
+    }
 }
 
 int fpu_is_st_freed(dynarec_native_t* dyn, int ninst, int st)