Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(32)

Unified Diff: src/wasm/encoder.cc

Issue 1750153002: Replace __init__ function in asm-wasm-builder with the start function section (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 4 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: src/wasm/encoder.cc
diff --git a/src/wasm/encoder.cc b/src/wasm/encoder.cc
index a6b2f43983e9d1952f0274a7aa5f55e6d244f435..99227c70b0a1b87c3c98cfb784bbbaa0d5c8e613 100644
--- a/src/wasm/encoder.cc
+++ b/src/wasm/encoder.cc
@@ -333,7 +333,6 @@ void WasmDataSegmentEncoder::Serialize(byte* buffer, byte** header,
(*body) += data_.size();
}
-
WasmModuleBuilder::WasmModuleBuilder(Zone* zone)
: zone_(zone),
signatures_(zone),
@@ -341,8 +340,9 @@ WasmModuleBuilder::WasmModuleBuilder(Zone* zone)
data_segments_(zone),
indirect_functions_(zone),
globals_(zone),
- signature_map_(zone) {}
-
+ signature_map_(zone),
+ has_start_function_(false),
+ start_function_index_(0) {}
uint16_t WasmModuleBuilder::AddFunction() {
functions_.push_back(new (zone_) WasmFunctionBuilder(zone_));
@@ -399,6 +399,10 @@ void WasmModuleBuilder::AddIndirectFunction(uint16_t index) {
indirect_functions_.push_back(index);
}
+void WasmModuleBuilder::MarkStartFunction(uint16_t index) {
+ has_start_function_ = true;
+ start_function_index_ = index;
+}
WasmModuleWriter* WasmModuleBuilder::Build(Zone* zone) {
WasmModuleWriter* writer = new (zone) WasmModuleWriter(zone);
@@ -417,6 +421,8 @@ WasmModuleWriter* WasmModuleBuilder::Build(Zone* zone) {
for (auto global : globals_) {
writer->globals_.push_back(global);
}
+ writer->has_start_function_ = has_start_function_;
+ writer->start_function_index_ = start_function_index_;
return writer;
}
@@ -482,6 +488,15 @@ WasmModuleIndex* WasmModuleWriter::WriteTo(Zone* zone) const {
function->NameSize());
}
+ if (has_start_function_) {
+ sizes.Add(1, 0);
+ uint16_t size = start_function_index_;
+ do {
titzer 2016/03/01 02:09:33 Let's lift out this varint encoding into a helper
aseemgarg 2016/03/01 02:37:34 This is enclosed in AddSection for other. Just for
titzer 2016/03/01 02:43:58 At least lift it out to a helper that computes the
aseemgarg 2016/03/01 03:00:24 Done.
+ sizes.Add(1, 0);
+ size = size >> 7;
+ } while (size > 0);
+ }
+
sizes.AddSection(data_segments_.size());
for (auto segment : data_segments_) {
sizes.Add(segment->HeaderSize(), segment->BodySize());
@@ -547,6 +562,12 @@ WasmModuleIndex* WasmModuleWriter::WriteTo(Zone* zone) const {
}
}
+ // -- emit start function index ----------------------------------------------
+ if (has_start_function_) {
+ EmitUint8(&header, kDeclStartFunction);
+ EmitVarInt(&header, start_function_index_);
+ }
+
// -- emit data segments -----------------------------------------------------
if (data_segments_.size() > 0) {
EmitUint8(&header, kDeclDataSegments);
« src/wasm/encoder.h ('K') | « src/wasm/encoder.h ('k') | test/mjsunit/wasm/asm-wasm.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698