summaryrefslogtreecommitdiffstats
path: root/chromium/v8/src/wasm/local-decl-encoder.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/v8/src/wasm/local-decl-encoder.cc')
-rw-r--r--chromium/v8/src/wasm/local-decl-encoder.cc25
1 files changed, 16 insertions, 9 deletions
diff --git a/chromium/v8/src/wasm/local-decl-encoder.cc b/chromium/v8/src/wasm/local-decl-encoder.cc
index 257f384bef3..aea6e573e9b 100644
--- a/chromium/v8/src/wasm/local-decl-encoder.cc
+++ b/chromium/v8/src/wasm/local-decl-encoder.cc
@@ -28,11 +28,17 @@ size_t LocalDeclEncoder::Emit(byte* buffer) const {
byte* pos = buffer;
LEBHelper::write_u32v(&pos, static_cast<uint32_t>(local_decls.size()));
for (auto& local_decl : local_decls) {
- LEBHelper::write_u32v(&pos, local_decl.first);
- *pos = local_decl.second.value_type_code();
+ uint32_t locals_count = local_decl.first;
+ ValueType locals_type = local_decl.second;
+ LEBHelper::write_u32v(&pos, locals_count);
+ *pos = locals_type.value_type_code();
++pos;
- if (local_decl.second.has_immediate()) {
- LEBHelper::write_u32v(&pos, local_decl.second.ref_index());
+ if (locals_type.has_depth()) {
+ *pos = locals_type.depth();
+ ++pos;
+ }
+ if (locals_type.encoding_needs_heap_type()) {
+ LEBHelper::write_u32v(&pos, locals_type.heap_type_code());
}
}
DCHECK_EQ(Size(), pos - buffer);
@@ -56,11 +62,12 @@ uint32_t LocalDeclEncoder::AddLocals(uint32_t count, ValueType type) {
size_t LocalDeclEncoder::Size() const {
size_t size = LEBHelper::sizeof_u32v(local_decls.size());
for (auto p : local_decls) {
- size +=
- LEBHelper::sizeof_u32v(p.first) + // number of locals
- 1 + // Opcode
- (p.second.has_immediate() ? LEBHelper::sizeof_u32v(p.second.ref_index())
- : 0); // immediate
+ size += LEBHelper::sizeof_u32v(p.first) + // number of locals
+ 1 + // Opcode
+ (p.second.has_depth() ? 1 : 0) + // Inheritance depth
+ (p.second.encoding_needs_heap_type()
+ ? LEBHelper::sizeof_u32v(p.second.heap_type_code())
+ : 0); // ref. index
}
return size;
}