about summary refs log tree commit diff stats
path: root/src/dynarec/arm64/dynarec_arm64_functions.c
diff options
context:
space:
mode:
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)