diff --git a/criterion-measurement/cbits/cycles.c b/criterion-measurement/cbits/cycles.c index 9cb9266..2cdee78 100644 --- a/criterion-measurement/cbits/cycles.c +++ b/criterion-measurement/cbits/cycles.c @@ -68,6 +68,18 @@ criterion_rdtsc (void) return result; } +#elif wasm32_HOST_ARCH + +#include + +StgWord64 criterion_rdtsc(void) +{ + struct timespec ts; + StgWord64 result_stg = 0; + clock_gettime(CLOCK_REALTIME, &ts); + result_stg = ts.tv_sec * 1000000000LL + ts.tv_nsec; + return result_stg; +} #else #error Unsupported OS/architecture/compiler! diff --git a/criterion-measurement/cbits/time-posix.c b/criterion-measurement/cbits/time-posix.c index 36e5977..a55d830 100644 --- a/criterion-measurement/cbits/time-posix.c +++ b/criterion-measurement/cbits/time-posix.c @@ -18,7 +18,11 @@ double criterion_getcputime(void) { struct timespec ts; +#ifndef __wasi__ clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &ts); +#else + clock_gettime(CLOCK_REALTIME, &ts); +#endif return ts.tv_sec + ts.tv_nsec * 1e-9; }