58 lines
1.2 KiB
C
58 lines
1.2 KiB
C
|
//
|
||
|
// Wasm3 - high performance WebAssembly interpreter written in C.
|
||
|
//
|
||
|
// Copyright © 2019 Steven Massey, Volodymyr Shymanskyy.
|
||
|
// All rights reserved.
|
||
|
//
|
||
|
|
||
|
#include <stdio.h>
|
||
|
#include <stdlib.h>
|
||
|
#include <emscripten.h>
|
||
|
|
||
|
#include "wasm3.h"
|
||
|
#include "m3_env.h"
|
||
|
|
||
|
IM3Environment env;
|
||
|
|
||
|
EMSCRIPTEN_KEEPALIVE
|
||
|
void init() {
|
||
|
env = m3_NewEnvironment ();
|
||
|
if (!env) return;
|
||
|
}
|
||
|
|
||
|
EMSCRIPTEN_KEEPALIVE
|
||
|
IM3Runtime new_runtime() {
|
||
|
return m3_NewRuntime (env, 64*1024, NULL);
|
||
|
}
|
||
|
|
||
|
EMSCRIPTEN_KEEPALIVE
|
||
|
void free_runtime(IM3Runtime runtime) {
|
||
|
m3_FreeRuntime (runtime);
|
||
|
}
|
||
|
|
||
|
EMSCRIPTEN_KEEPALIVE
|
||
|
void load(IM3Runtime runtime, uint8_t* wasm, size_t fsize) {
|
||
|
M3Result result = m3Err_none;
|
||
|
|
||
|
IM3Module module;
|
||
|
result = m3_ParseModule (env, &module, wasm, fsize);
|
||
|
if (result) return;
|
||
|
|
||
|
result = m3_LoadModule (runtime, module);
|
||
|
if (result) return;
|
||
|
}
|
||
|
|
||
|
EMSCRIPTEN_KEEPALIVE
|
||
|
uint32_t call(IM3Runtime runtime, int argc, const char* argv[]) {
|
||
|
M3Result result = m3Err_none;
|
||
|
|
||
|
IM3Function f;
|
||
|
result = m3_FindFunction (&f, runtime, argv[0]);
|
||
|
if (result) return -1;
|
||
|
|
||
|
result = m3_CallArgv (f, argc-1, argv+1);
|
||
|
if (result) return -2;
|
||
|
|
||
|
return *(uint64_t*)(runtime->stack);
|
||
|
}
|