diff --git a/test/wasi/README.md b/test/wasi/README.md index a71e309..8f37d45 100644 --- a/test/wasi/README.md +++ b/test/wasi/README.md @@ -1,15 +1,22 @@ ## Compile ```sh -wasicc -Oz wasi_printf.c -o wasi_printf.wasm - -# Disassemble: -wasm2wat wasi_printf.wasm -o wasi_printf.wat +wasicc -O3 wasi_printf.c -o wasi_printf.wasm ``` ## Run ```sh ../../build/wasm3 wasi_printf.wasm _start + +$ENGINES_PATH/wasm-micro-runtime/core/iwasm/products/linux/build/iwasm wasi_printf.wasm + +$ENGINES_PATH/wac/wax wasi_printf.wasm + +$ENGINES_PATH/WAVM/Release/bin/wavm run wasi_printf.wasm + +wasmer run wasi_printf.wasm + +wasmer-js run wasi_printf.wasm ``` diff --git a/test/wasi/wasi_printf.c b/test/wasi/wasi_printf.c index e0a00a6..f7ec4bf 100644 --- a/test/wasi/wasi_printf.c +++ b/test/wasi/wasi_printf.c @@ -1,8 +1,48 @@ -#include #include +#include +#include -int main(int args, char* argv[]) { - //puts("Hello world!"); - printf("Hell%x w%d%s!\n", 0, 0, "rld"); - return 0; +#define WASM_EXPORT __attribute__((used)) __attribute__((visibility ("default"))) + +struct timespec timespec_diff(struct timespec start, struct timespec end) +{ + struct timespec temp; + if ((end.tv_nsec-start.tv_nsec)<0) { + temp.tv_sec = end.tv_sec-start.tv_sec-1; + temp.tv_nsec = 1000000000+end.tv_nsec-start.tv_nsec; + } else { + temp.tv_sec = end.tv_sec-start.tv_sec; + temp.tv_nsec = end.tv_nsec-start.tv_nsec; + } + return temp; +} + +WASM_EXPORT +uint32_t fib(uint32_t n) +{ + if(n < 2) { + return n; + } + return fib(n-1) + fib(n-2); +} + +int main() +{ + struct timespec start, finish; + + // Chew up some CPU time + volatile int n=38, result; + + printf("Calculating fib(%d)...\n", n); + + clock_gettime(CLOCK_REALTIME, &start); + result = fib(n); + clock_gettime(CLOCK_REALTIME, &finish); + + struct timespec delta = timespec_diff(start, finish); + + printf("Finished in: %lu ms\n", (delta.tv_sec*1000) + (delta.tv_nsec/1000000)); + //printf("ms: %lf\n", delta_s*1000.0 + delta_ns/1000000.0); + + return 0; } diff --git a/test/wasi/wasi_printf.wasm b/test/wasi/wasi_printf.wasm index 3372771..df44dfe 100755 Binary files a/test/wasi/wasi_printf.wasm and b/test/wasi/wasi_printf.wasm differ