about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
authorptitSeb <sebastien.chev@gmail.com>2023-03-30 15:19:34 +0000
committerptitSeb <sebastien.chev@gmail.com>2023-03-30 15:19:34 +0000
commitf81d99289fe9fcc96893b67b10e535f1b1251cd9 (patch)
tree13f59f1bc03f67c0d4b5b146fcd4ac4ed7fab141 /src
parent97739f885217343be2110832e06735b534423370 (diff)
downloadbox64-f81d99289fe9fcc96893b67b10e535f1b1251cd9.tar.gz
box64-f81d99289fe9fcc96893b67b10e535f1b1251cd9.zip
[RV64_DYNAREC] pass0 and 1 where missing fpu propagation
Diffstat (limited to 'src')
-rw-r--r--src/dynarec/rv64/dynarec_rv64_pass0.h5
-rw-r--r--src/dynarec/rv64/dynarec_rv64_pass1.h3
2 files changed, 7 insertions, 1 deletions
diff --git a/src/dynarec/rv64/dynarec_rv64_pass0.h b/src/dynarec/rv64/dynarec_rv64_pass0.h
index fd0f617f..dc5b9705 100644
--- a/src/dynarec/rv64/dynarec_rv64_pass0.h
+++ b/src/dynarec/rv64/dynarec_rv64_pass0.h
@@ -17,7 +17,7 @@
         dyn->f.dfnone=((B)&SF_SET)?1:0;
 #define EMIT(A)     
 #define JUMP(A, C)         add_next(dyn, (uintptr_t)A); dyn->insts[ninst].x64.jmp = A; dyn->insts[ninst].x64.jmp_cond = C
-#define BARRIER(A)      if(A!=BARRIER_MAYBE) {fpu_purgecache(dyn, ninst, 0, x1, x2, x3); dyn->insts[ninst].x64.barrier = A;} else dyn->insts[ninst].barrier_maybe = 1
+#define BARRIER(A)      if(A!=BARRIER_MAYBE) {fpu_purgecache(dyn, ninst, 1, x1, x2, x3); dyn->insts[ninst].x64.barrier = A;} else dyn->insts[ninst].barrier_maybe = 1
 #define BARRIER_NEXT(A) dyn->insts[ninst+1].x64.barrier = A
 #define NEW_INST \
         ++dyn->size;                            \
@@ -27,11 +27,14 @@
                 dyn->cap *= 2;                  \
         }                                       \
         dyn->insts[ninst].x64.addr = ip;        \
+        dyn->e.combined1 = dyn->e.combined2 = 0;\
+        dyn->e.swapped = 0; dyn->e.barrier = 0; \
         dyn->insts[ninst].f_entry = dyn->f;     \
         if(ninst) {dyn->insts[ninst-1].x64.size = dyn->insts[ninst].x64.addr - dyn->insts[ninst-1].x64.addr;}
 
 #define INST_EPILOG                             \
         dyn->insts[ninst].f_exit = dyn->f;      \
+        dyn->insts[ninst].e = dyn->e;           \
         dyn->insts[ninst].x64.has_next = (ok>0)?1:0;
 #define INST_NAME(name) 
 #define DEFAULT                         \
diff --git a/src/dynarec/rv64/dynarec_rv64_pass1.h b/src/dynarec/rv64/dynarec_rv64_pass1.h
index 9e80d7b0..c818c26c 100644
--- a/src/dynarec/rv64/dynarec_rv64_pass1.h
+++ b/src/dynarec/rv64/dynarec_rv64_pass1.h
@@ -4,8 +4,11 @@
 #define EMIT(A)     
 #define NEW_INST                                \
         dyn->insts[ninst].f_entry = dyn->f;     \
+        dyn->e.combined1 = dyn->e.combined2 = 0;\
+        dyn->e.swapped = 0; dyn->e.barrier = 0
 
 #define INST_EPILOG                             \
+        dyn->insts[ninst].e = dyn->e;           \
         dyn->insts[ninst].f_exit = dyn->f
 
 #define INST_NAME(name)