diff options
author | Kimplul <kimi.h.kuparinen@gmail.com> | 2025-04-09 20:20:48 +0300 |
---|---|---|
committer | Kimplul <kimi.h.kuparinen@gmail.com> | 2025-04-09 20:20:48 +0300 |
commit | 057131cb20fb1c46e90adecfb4a16eb62f100580 (patch) | |
tree | 82081321522eaef1b049cce1fb4627a75a6d6664 /src/interp.c | |
parent | 6824dd4b1ee22184f0e600115db3998924ed39d6 (diff) | |
download | ejit-057131cb20fb1c46e90adecfb4a16eb62f100580.tar.gz ejit-057131cb20fb1c46e90adecfb4a16eb62f100580.zip |
add taili
Diffstat (limited to 'src/interp.c')
-rw-r--r-- | src/interp.c | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/src/interp.c b/src/interp.c index 132ba4a..268bfb3 100644 --- a/src/interp.c +++ b/src/interp.c @@ -214,7 +214,9 @@ union interp_ret ejit_run(struct ejit_func *f, size_t paramc, struct ejit_arg pa [EJIT_OP_PARAM_F] = &&PARAM_F, [EJIT_OP_CALLI] = &&CALLI, + [EJIT_OP_TAILR] = &&TAILR, + [EJIT_OP_TAILI] = &&TAILI, [EJIT_OP_ESCAPEI_I] = &&ESCAPEI_I, [EJIT_OP_ESCAPEI_F] = &&ESCAPEI_F, @@ -1056,6 +1058,18 @@ top: args[argc++] = a; DISPATCH(); + DO(TAILI); + f = (struct ejit_func *)(uintptr_t)i.o; + + assert(!f->direct_call && "trying to interpret compiled fun"); + + paramc = argc; + for (size_t i = 0; i < argc; ++i) + params[i] = args[i]; + + goto top; + DISPATCH(); + DO(TAILR); f = (struct ejit_func *)gpr[i.r1]; |