From aee1fe1004f46624f2fb15278035bbac772f6c77 Mon Sep 17 00:00:00 2001 From: ptitSeb Date: Sat, 16 Jul 2022 21:33:56 +0200 Subject: [DYNAREC] Improved pred_sz computation --- src/dynarec/dynarec_native.c | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) (limited to 'src') 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; isize; ++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; isize-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; isize; ++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; + } } } -- cgit 1.4.1