Make engine dep-free/standalone and add Wasm target
This commit is contained in:
80
libc-lite.h
Normal file
80
libc-lite.h
Normal file
@@ -0,0 +1,80 @@
|
||||
|
||||
#include <limits.h>
|
||||
#include <stddef.h>
|
||||
#include <stdint.h>
|
||||
|
||||
static uint64_t g_rand_seed = 1;
|
||||
|
||||
void my_srand(uint64_t n)
|
||||
{
|
||||
g_rand_seed = n == 0 ? 1 : n;
|
||||
}
|
||||
|
||||
uint64_t my_rand64()
|
||||
{
|
||||
/*
|
||||
* Xorshift RNG [1] + multiply
|
||||
* [1]: https://www.jstatsoft.org/article/view/v008i14/916 */
|
||||
uint64_t x = g_rand_seed;
|
||||
x ^= x >> 12ULL;
|
||||
x ^= x << 25ULL;
|
||||
x ^= x >> 27ULL;
|
||||
g_rand_seed = x;
|
||||
return x * 2685821657736338717ULL;
|
||||
}
|
||||
|
||||
static int my_tolower(int ch)
|
||||
{
|
||||
return ch >= 'A' && ch <= 'Z'
|
||||
? ch - 'A' + 'a'
|
||||
: ch;
|
||||
}
|
||||
|
||||
static int my_isdigit(int ch)
|
||||
{
|
||||
return ch >= '0' && ch <= '9';
|
||||
}
|
||||
|
||||
void* my_memset(void *b, int c, size_t len)
|
||||
{
|
||||
unsigned char* x = b;
|
||||
unsigned char ch = (unsigned char)c;
|
||||
for (size_t i = 0; i < len; ++i) {
|
||||
x[i] = ch;
|
||||
}
|
||||
return b;
|
||||
}
|
||||
|
||||
void* my_memcpy(void* restrict dst, void const* restrict src, size_t n)
|
||||
{
|
||||
uint8_t* d = dst;
|
||||
uint8_t const* s = src;
|
||||
|
||||
for (size_t i = 0; i < n; ++i) {
|
||||
d[i] = s[i];
|
||||
}
|
||||
|
||||
return dst;
|
||||
}
|
||||
|
||||
int my_memcmp(void const* s1, void const* s2, size_t n)
|
||||
{
|
||||
/* todo: SIMD optimize or use 64 bit strides initially if optimizer
|
||||
doesn't catch this */
|
||||
int8_t const* a = s1;
|
||||
int8_t const* b = s2;
|
||||
for (size_t i = 0; i < n; ++i) {
|
||||
int8_t diff = a[i] - b[i];
|
||||
if (diff)
|
||||
return diff;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
size_t strlen(char const* s)
|
||||
{
|
||||
size_t n = 0;
|
||||
while (s[n++])
|
||||
;
|
||||
return n;
|
||||
}
|
||||
Reference in New Issue
Block a user