blob: 8ed05f3827f14e73c107612cee4b49da67001659 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
|
#include "./memory.h"
#ifdef __wasm__
const intptr_t PAGE_SIZE = 65536;
void* shed__runtime__memory_init(intptr_t alignment) {
return (void*) (__builtin_wasm_memory_size(0) * PAGE_SIZE);
}
void* shed__runtime__memory_grow(intptr_t increment) {
if (increment % PAGE_SIZE != 0) {
increment += PAGE_SIZE - (increment % PAGE_SIZE);
}
return (void*) (__builtin_wasm_memory_grow(0, increment / PAGE_SIZE) * PAGE_SIZE);
}
#else
#include <unistd.h>
void* shed__runtime__memory_init(intptr_t alignment) {
void* ptr = sbrk(0);
intptr_t remainder = (intptr_t) ptr % alignment;
if (remainder != 0) {
intptr_t increment = alignment - remainder;
// TODO: check for -1 from sbrk
sbrk(increment);
// TODO: assert alignment is correct
ptr += increment;
}
return ptr;
}
void* shed__runtime__memory_grow(intptr_t increment) {
return sbrk(increment);
}
#endif
|