aboutsummaryrefslogtreecommitdiff
path: root/src/interp.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/interp.c')
-rw-r--r--src/interp.c14
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];