Skip to content

Commit a970298

Browse files
committed
Optimize sbrk after #12213
1 parent 40f669e commit a970298

File tree

5 files changed

+23
-40
lines changed

5 files changed

+23
-40
lines changed

system/lib/sbrk.c

Lines changed: 5 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -29,29 +29,12 @@
2929
#define SET_ERRNO()
3030
#endif
3131

32-
// FIXME just use = &sbrk_val here. That is simpler, but currently it has a
33-
// code size cost for tiny programs that don't use malloc. We link in malloc by
34-
// default, and depend on metadce to remove it when not used, which we can do,
35-
// but a static assignment here would mean a nonzero value in a memory segment,
36-
// which metadce cannot remove (it can remove code, but not data in segments).
37-
// The current code allows tiny programs without malloc to have no data segments
38-
// at all, while programs that use malloc may suffer a few more bytes of code
39-
// size, but that's negligible compared to malloc itself.
40-
// TODO: when we stop including malloc by default we can use the simpler way.
41-
static intptr_t sbrk_val = 0;
32+
extern size_t __heap_base;
4233

34+
static intptr_t sbrk_val = (intptr_t)&__heap_base;
35+
36+
// TODO: remove this, but SAFE_HEAP depends on it currently
4337
intptr_t* emscripten_get_sbrk_ptr() {
44-
extern size_t __heap_base;
45-
intptr_t* sbrk_ptr = &sbrk_val;
46-
#if __EMSCRIPTEN_PTHREADS__
47-
if (__c11_atomic_load((_Atomic(intptr_t)*)sbrk_ptr, __ATOMIC_SEQ_CST) == 0) {
48-
__c11_atomic_store((_Atomic(intptr_t)*)sbrk_ptr, (intptr_t)&__heap_base, __ATOMIC_SEQ_CST);
49-
}
50-
#else
51-
if (sbrk_val == 0) {
52-
sbrk_val = (intptr_t)&__heap_base;
53-
}
54-
#endif
5538
return &sbrk_val;
5639
}
5740

@@ -67,7 +50,7 @@ void *sbrk(intptr_t increment) {
6750
intptr_t expected;
6851
while (1) {
6952
#endif // __EMSCRIPTEN_PTHREADS__
70-
intptr_t* sbrk_ptr = emscripten_get_sbrk_ptr();
53+
intptr_t* sbrk_ptr = &sbrk_val;
7154
#if __EMSCRIPTEN_PTHREADS__
7255
intptr_t old_brk = __c11_atomic_load((_Atomic(intptr_t)*)sbrk_ptr, __ATOMIC_SEQ_CST);
7356
#else

tests/code_size/hello_webgl2_wasm.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@
33
"a.html.gz": 377,
44
"a.js": 5035,
55
"a.js.gz": 2395,
6-
"a.wasm": 10910,
7-
"a.wasm.gz": 6928,
6+
"a.wasm": 10891,
7+
"a.wasm.gz": 6915,
88
"total": 16508,
9-
"total_gz": 9700
9+
"total_gz": 9687
1010
}
Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
{
22
"a.html": 588,
33
"a.html.gz": 386,
4-
"a.js": 22128,
5-
"a.js.gz": 8459,
6-
"a.mem": 3168,
7-
"a.mem.gz": 2711,
8-
"total": 25884,
9-
"total_gz": 11556
4+
"a.js": 22091,
5+
"a.js.gz": 8449,
6+
"a.mem": 3171,
7+
"a.mem.gz": 2715,
8+
"total": 25847,
9+
"total_gz": 11550
1010
}

tests/code_size/hello_webgl_wasm.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@
33
"a.html.gz": 377,
44
"a.js": 4519,
55
"a.js.gz": 2219,
6-
"a.wasm": 10910,
7-
"a.wasm.gz": 6928,
6+
"a.wasm": 10891,
7+
"a.wasm.gz": 6915,
88
"total": 15992,
9-
"total_gz": 9524
9+
"total_gz": 9511
1010
}
Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
{
22
"a.html": 588,
33
"a.html.gz": 386,
4-
"a.js": 21617,
5-
"a.js.gz": 8297,
6-
"a.mem": 3168,
7-
"a.mem.gz": 2711,
8-
"total": 25373,
9-
"total_gz": 11394
4+
"a.js": 21580,
5+
"a.js.gz": 8289,
6+
"a.mem": 3171,
7+
"a.mem.gz": 2715,
8+
"total": 25336,
9+
"total_gz": 11390
1010
}

0 commit comments

Comments
 (0)