From aec48ce3f0c31716e2bf8adad39f2b171e3b1947 Mon Sep 17 00:00:00 2001 From: Dennis Ranke Date: Thu, 30 Mar 2023 00:12:46 +0200 Subject: [PATCH] implement trampoline --- main.c | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/main.c b/main.c index c36aa6e..4deff30 100644 --- a/main.c +++ b/main.c @@ -68,7 +68,18 @@ void linkSystemFunctions(IM3Runtime runtime, IM3Module mod) { } m3ApiRawFunction(platformTrampoline) { - fprintf(stderr, "Trampoline not yet implemented\n"); + IM3Function func = (IM3Function)_ctx->userdata; + uint32_t retCount = m3_GetRetCount(func); + uint32_t argCount = m3_GetArgCount(func); + const void* args[16]; + for(uint32_t i = 0; i < argCount; ++i) { + args[i] = &_sp[retCount + i]; + } + verifyM3(runtime, m3_Call(func, m3_GetArgCount(func), args)); + for(uint32_t i = 0; i < retCount; ++i) { + args[i] = &_sp[i]; + } + verifyM3(runtime, m3_GetResults(func, retCount, args)); m3ApiSuccess(); }