diff options
author | Kimplul <kimi.h.kuparinen@gmail.com> | 2025-05-17 13:42:33 +0300 |
---|---|---|
committer | Kimplul <kimi.h.kuparinen@gmail.com> | 2025-05-17 13:42:33 +0300 |
commit | b9372c7be73a7cad6d741f5323dc8b2b758198d4 (patch) | |
tree | 66b766bccad93abd2311b9215651bd94456b3728 /src/ejit.c | |
parent | 5c11915931ad43617ba6f62189bb11630b9624d4 (diff) | |
download | ejit-b9372c7be73a7cad6d741f5323dc8b2b758198d4.tar.gz ejit-b9372c7be73a7cad6d741f5323dc8b2b758198d4.zip |
Diffstat (limited to 'src/ejit.c')
-rw-r--r-- | src/ejit.c | 8 |
1 files changed, 8 insertions, 0 deletions
@@ -341,6 +341,7 @@ struct ejit_func *ejit_create_func(enum ejit_type rtype, size_t argc, f->sign = types_create(0); f->insns = insns_create(0); f->labels = labels_create(0); + f->barriers = barriers_create(0); f->gpr = gpr_stats_create(0); f->fpr = fpr_stats_create(0); f->arena = NULL; @@ -434,6 +435,7 @@ void ejit_destroy_func(struct ejit_func *f) types_destroy(&f->sign); insns_destroy(&f->insns); labels_destroy(&f->labels); + barriers_destroy(&f->barriers); gpr_stats_destroy(&f->gpr); fpr_stats_destroy(&f->fpr); free(f); @@ -452,6 +454,12 @@ void ejit_patch(struct ejit_func *f, struct ejit_reloc r, struct ejit_label l) /** @todo some assert that checks the opcode? */ i.r0 = l.addr; *insns_at(&f->insns, r.insn) = i; + + struct barrier_tuple tuple = { + .start = r.insn > l.addr ? l.addr : r.insn, + .end = r.insn > l.addr ? r.insn : l.addr + }; + barriers_append(&f->barriers, tuple); } void ejit_taili(struct ejit_func *s, struct ejit_func *f, |