about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
authorptitSeb <sebastien.chev@gmail.com>2022-07-16 21:33:56 +0200
committerptitSeb <sebastien.chev@gmail.com>2022-07-16 21:33:56 +0200
commitaee1fe1004f46624f2fb15278035bbac772f6c77 (patch)
tree665d92747b16199135a2268df7c6a7e6b3afabe9 /src
parentfbcd77a1a78bc387ecb3a3922fdeb8417693c143 (diff)
downloadbox64-aee1fe1004f46624f2fb15278035bbac772f6c77.tar.gz
box64-aee1fe1004f46624f2fb15278035bbac772f6c77.zip
[DYNAREC] Improved pred_sz computation
Diffstat (limited to 'src')
-rwxr-xr-xsrc/dynarec/dynarec_native.c18
1 files changed, 10 insertions, 8 deletions
diff --git a/src/dynarec/dynarec_native.c b/src/dynarec/dynarec_native.c
index 268d1e1e..c44c42be 100755
--- a/src/dynarec/dynarec_native.c
+++ b/src/dynarec/dynarec_native.c
@@ -289,16 +289,16 @@ static void fillPredecessors(dynarec_native_t* dyn)
     // compute total size of predecessor to alocate the array
     // first compute the jumps
     for(int i=0; i<dyn->size; ++i) {
-        if(dyn->insts[i].x64.jmp && dyn->insts[i].x64.jmp_insts!=-1) {
-            ++pred_sz;
-            ++dyn->insts[dyn->insts[i].x64.jmp_insts].pred_sz;
+        if(dyn->insts[i].x64.jmp && (dyn->insts[i].x64.jmp_insts!=-1)) {
+            pred_sz++;
+            dyn->insts[dyn->insts[i].x64.jmp_insts].pred_sz++;
         }
     }
     // second the "has_next"
     for(int i=0; i<dyn->size-1; ++i) {
         if(dyn->insts[i].x64.has_next) {
-            ++pred_sz;
-            ++dyn->insts[i+1].pred_sz;
+            pred_sz++;
+            dyn->insts[i+1].pred_sz++;
         }
     }
     dyn->predecessor = (int*)malloc(pred_sz*sizeof(int));
@@ -311,10 +311,12 @@ static void fillPredecessors(dynarec_native_t* dyn)
     }
     // fill pred
     for(int i=0; i<dyn->size; ++i) {
-        if(i!=dyn->size-1 && dyn->insts[i].x64.has_next && (!i || dyn->insts[i].pred_sz))
+        if((i!=dyn->size-1) && dyn->insts[i].x64.has_next)
             dyn->insts[i+1].pred[dyn->insts[i+1].pred_sz++] = i;
-        if(dyn->insts[i].x64.jmp && dyn->insts[i].x64.jmp_insts!=-1)
-            dyn->insts[dyn->insts[i].x64.jmp_insts].pred[dyn->insts[dyn->insts[i].x64.jmp_insts].pred_sz++] = i;
+        if(dyn->insts[i].x64.jmp && (dyn->insts[i].x64.jmp_insts!=-1)) {
+            int j = dyn->insts[i].x64.jmp_insts;
+            dyn->insts[j].pred[dyn->insts[j].pred_sz++] = i;
+        }
     }
 
 }