Skip to content

Commit 8e29f65

Browse files
committed
Alter how segments are loaded
1 parent ad72048 commit 8e29f65

File tree

1 file changed

+50
-18
lines changed

1 file changed

+50
-18
lines changed

src/c-writer.cc

Lines changed: 50 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -2242,6 +2242,45 @@ void CWriter::WriteDataInitializers() {
22422242
Write(CloseBrace(), ";", Newline());
22432243
}
22442244

2245+
Write(Newline(),
2246+
"static const u8* active_data_segment_data_ptrs[] = ", OpenBrace());
2247+
for (const DataSegment* data_segment : module_->data_segments) {
2248+
if (data_segment->kind != SegmentKind::Active ||
2249+
data_segment->data.empty()) {
2250+
continue;
2251+
}
2252+
Write("data_segment_data_",
2253+
GlobalName(ModuleFieldType::DataSegment, data_segment->name), ",",
2254+
Newline());
2255+
}
2256+
Write(CloseBrace(), ";", Newline());
2257+
2258+
Write(Newline(),
2259+
"static const u32 active_data_segment_offsets[] = ", OpenBrace());
2260+
for (const DataSegment* data_segment : module_->data_segments) {
2261+
if (data_segment->kind != SegmentKind::Active ||
2262+
data_segment->data.empty()) {
2263+
continue;
2264+
}
2265+
Write(", // data_segment_data_",
2266+
GlobalName(ModuleFieldType::DataSegment, data_segment->name),
2267+
Newline());
2268+
}
2269+
Write(CloseBrace(), ";", Newline());
2270+
2271+
Write(Newline(),
2272+
"static const size_t active_data_segment_sizes[] = ", OpenBrace());
2273+
for (const DataSegment* data_segment : module_->data_segments) {
2274+
if (data_segment->kind != SegmentKind::Active ||
2275+
data_segment->data.empty()) {
2276+
continue;
2277+
}
2278+
Write(data_segment->data.size(), ", // data_segment_data_",
2279+
GlobalName(ModuleFieldType::DataSegment, data_segment->name),
2280+
Newline());
2281+
}
2282+
Write(CloseBrace(), ";", Newline());
2283+
22452284
Write(Newline(), "static void init_memories(", ModuleInstanceTypeName(),
22462285
"* instance) ", OpenBrace());
22472286
if (module_->memories.size() > module_->num_memory_imports) {
@@ -2262,24 +2301,17 @@ void CWriter::WriteDataInitializers() {
22622301
}
22632302
}
22642303

2265-
for (const DataSegment* data_segment : module_->data_segments) {
2266-
if (data_segment->kind != SegmentKind::Active) {
2267-
continue;
2268-
}
2269-
const Memory* memory =
2270-
module_->memories[module_->GetMemoryIndex(data_segment->memory_var)];
2271-
Write("LOAD_DATA(",
2272-
ExternalInstanceRef(ModuleFieldType::Memory, memory->name), ", ");
2273-
WriteInitExpr(data_segment->offset);
2274-
if (data_segment->data.empty()) {
2275-
Write(", NULL, 0");
2276-
} else {
2277-
Write(", data_segment_data_",
2278-
GlobalName(ModuleFieldType::DataSegment, data_segment->name), ", ",
2279-
data_segment->data.size());
2280-
}
2281-
Write(");", Newline());
2282-
}
2304+
Write(
2305+
"for (int i = 0; i < sizeof(active_data_segment_data_ptrs) / "
2306+
"sizeof(active_data_segment_data_ptrs[0]); i++) ",
2307+
OpenBrace(), Newline());
2308+
2309+
const Memory* memory = module_->memories[0];
2310+
2311+
Write("LOAD_DATA(",
2312+
ExternalInstanceRef(ModuleFieldType::Memory, memory->name), ", ");
2313+
WriteInitExpr(data_segment->offset);
2314+
Write(CloseBrace(), Newline());
22832315

22842316
Write(CloseBrace(), Newline());
22852317

0 commit comments

Comments
 (0)