Skip to content

Commit a1cfd4a

Browse files
committed
Let binaryen split our memory data up
1 parent 5a125c7 commit a1cfd4a

File tree

2 files changed

+19
-0
lines changed

2 files changed

+19
-0
lines changed

src/compiler.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -831,6 +831,11 @@ export class Compiler extends DiagnosticEmitter {
831831
}
832832
}
833833

834+
if (options.willOptimize) {
835+
// Binaryen will split this up more efficiently
836+
memorySegments = module.combineMemorySegments(memorySegments);
837+
}
838+
834839
// Setup internal memory with default name "0"
835840
module.setMemory(
836841
initialPages,

src/module.ts

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2337,6 +2337,20 @@ export class Module {
23372337
/** Unlimited memory constant. */
23382338
static readonly UNLIMITED_MEMORY: Index = <Index>-1;
23392339

2340+
combineMemorySegments(
2341+
segments: MemorySegment[]
2342+
) : MemorySegment[] {
2343+
if (!segments.length) return segments;
2344+
segments = segments.slice(0);
2345+
let lastSegment = segments[segments.length - 1];
2346+
let length = u32(lastSegment.offset) + lastSegment.buffer.length;
2347+
let newBuffer = new Uint8Array(u32(length));
2348+
segments.forEach(segment => {
2349+
newBuffer.set(segment.buffer, u32(segment.offset));
2350+
});
2351+
return [new MemorySegment(newBuffer, i64_new(0))];
2352+
}
2353+
23402354
setMemory(
23412355
initial: Index,
23422356
maximum: Index,

0 commit comments

Comments
 (0)