diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2022-07-16 21:33:56 +0200 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2022-07-16 21:33:56 +0200 |
| commit | aee1fe1004f46624f2fb15278035bbac772f6c77 (patch) | |
| tree | 665d92747b16199135a2268df7c6a7e6b3afabe9 /src | |
| parent | fbcd77a1a78bc387ecb3a3922fdeb8417693c143 (diff) | |
| download | box64-aee1fe1004f46624f2fb15278035bbac772f6c77.tar.gz box64-aee1fe1004f46624f2fb15278035bbac772f6c77.zip | |
[DYNAREC] Improved pred_sz computation
Diffstat (limited to 'src')
| -rwxr-xr-x | src/dynarec/dynarec_native.c | 18 |
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; + } } } |