diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2025-06-23 13:00:45 +0200 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2025-06-23 13:00:45 +0200 |
| commit | c66630da497c18622205cc58cb058a1f8cba7cd1 (patch) | |
| tree | a6c9c55bff71ecfdd80b9d2bff3b15e6c8724ce0 /src/dynarec/dynarec_native.c | |
| parent | 0cc58732fb3f6992918b10d5da7a9937edb4a0b4 (diff) | |
| download | box64-c66630da497c18622205cc58cb058a1f8cba7cd1.tar.gz box64-c66630da497c18622205cc58cb058a1f8cba7cd1.zip | |
[DYNAREC] Refactored a bit BARRIER_FLOAT ([ARM64] olny for now, todo for RV64 and LA64)
Diffstat (limited to 'src/dynarec/dynarec_native.c')
| -rw-r--r-- | src/dynarec/dynarec_native.c | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/src/dynarec/dynarec_native.c b/src/dynarec/dynarec_native.c index 8e142b57..98aa0e61 100644 --- a/src/dynarec/dynarec_native.c +++ b/src/dynarec/dynarec_native.c @@ -702,6 +702,10 @@ dynablock_t* FillBlock64(uintptr_t addr, int alternate, int is32bits, int inst_m #endif { helper.insts[i].x64.need_after |= X_PEND; + if(helper.insts[i].barrier_maybe) { + helper.insts[i].x64.barrier|=BARRIER_FLOAT; + helper.insts[i].barrier_maybe = 0; + } } else { // find jump address instruction int k=-1; @@ -734,8 +738,6 @@ dynablock_t* FillBlock64(uintptr_t addr, int alternate, int is32bits, int inst_m k=i2; }*/ if(k!=-1) { - if(!helper.insts[i].barrier_maybe) - helper.insts[k].x64.barrier |= BARRIER_FULL; // special case, loop on itself with some nop in between if(k<i && !helper.insts[i].x64.has_next && is_nops(&helper, helper.insts[k].x64.addr, helper.insts[i].x64.addr-helper.insts[k].x64.addr)) { #ifndef ARCH_NOP @@ -746,6 +748,12 @@ dynablock_t* FillBlock64(uintptr_t addr, int alternate, int is32bits, int inst_m #endif } helper.insts[i].x64.jmp_insts = k; + helper.insts[i].barrier_maybe = 0; + } else { + if(helper.insts[i].barrier_maybe) { + helper.insts[i].x64.barrier|=BARRIER_FLOAT; + helper.insts[i].barrier_maybe = 0; + } } } } |