diff options
author | Kimplul <kimi.h.kuparinen@gmail.com> | 2025-04-09 22:20:01 +0300 |
---|---|---|
committer | Kimplul <kimi.h.kuparinen@gmail.com> | 2025-04-09 22:20:01 +0300 |
commit | be5c83ba8e57bc67beee41bc2c7227e6b8ebd9d5 (patch) | |
tree | 2a0d208fed58629d710ac5f908f1cc49000ecf75 /src/interp.c | |
parent | 057131cb20fb1c46e90adecfb4a16eb62f100580 (diff) | |
download | ejit-be5c83ba8e57bc67beee41bc2c7227e6b8ebd9d5.tar.gz ejit-be5c83ba8e57bc67beee41bc2c7227e6b8ebd9d5.zip |
add callr_i/l/f/d
Diffstat (limited to 'src/interp.c')
-rw-r--r-- | src/interp.c | 41 |
1 files changed, 30 insertions, 11 deletions
diff --git a/src/interp.c b/src/interp.c index 268bfb3..6f94f98 100644 --- a/src/interp.c +++ b/src/interp.c @@ -213,14 +213,18 @@ union interp_ret ejit_run(struct ejit_func *f, size_t paramc, struct ejit_arg pa [EJIT_OP_PARAM] = &&PARAM, [EJIT_OP_PARAM_F] = &&PARAM_F, + [EJIT_OP_CALLR_I] = &&CALLR_I, + [EJIT_OP_CALLR_L] = &&CALLR_L, + [EJIT_OP_CALLR_F] = &&CALLR_F, + [EJIT_OP_CALLR_D] = &&CALLR_D, [EJIT_OP_CALLI] = &&CALLI, [EJIT_OP_TAILR] = &&TAILR, [EJIT_OP_TAILI] = &&TAILI, [EJIT_OP_ESCAPEI_I] = &&ESCAPEI_I, - [EJIT_OP_ESCAPEI_F] = &&ESCAPEI_F, [EJIT_OP_ESCAPEI_L] = &&ESCAPEI_L, + [EJIT_OP_ESCAPEI_F] = &&ESCAPEI_F, [EJIT_OP_ESCAPEI_D] = &&ESCAPEI_D, [EJIT_OP_START] = &&START, @@ -1084,33 +1088,48 @@ top: goto top; DISPATCH(); + DO(CALLR_I); + retval = ejit_run((struct ejit_func *)gpr[i.r1], argc, args, NULL); + argc = 0; + DISPATCH(); + + DO(CALLR_L); + retval = ejit_run((struct ejit_func *)gpr[i.r1], argc, args, NULL); + argc = 0; + DISPATCH(); + + DO(CALLR_F); + retval = ejit_run((struct ejit_func *)gpr[i.r1], argc, args, NULL); + argc = 0; + DISPATCH(); + + DO(CALLR_D); + retval = ejit_run((struct ejit_func *)gpr[i.r1], argc, args, NULL); + argc = 0; + DISPATCH(); + DO(CALLI); - struct ejit_func *f = i.p; - retval = ejit_run(f, argc, args, NULL); + retval = ejit_run((struct ejit_func *)i.p, argc, args, NULL); argc = 0; DISPATCH(); DO(ESCAPEI_I); - ejit_escape_i_t f = i.p; - retval.i = f(argc, args); + retval.i = ((ejit_escape_i_t)i.p)(argc, args); argc = 0; DISPATCH(); DO(ESCAPEI_L); - ejit_escape_l_t f = i.p; - retval.i = f(argc, args); + retval.i = ((ejit_escape_l_t)i.p)(argc, args); argc = 0; DISPATCH(); DO(ESCAPEI_F); - ejit_escape_f_t f = i.p; - retval.f = f(argc, args); + retval.f = ((ejit_escape_f_t)i.p)(argc, args); argc = 0; DISPATCH(); DO(ESCAPEI_D); - ejit_escape_d_t f = i.p; - retval.f = f(argc, args); + retval.f = ((ejit_escape_d_t)i.p)(argc, args); argc = 0; DISPATCH(); |