diff options
author | Alex Crichton <alex@alexcrichton.com> | 2019-01-29 14:09:50 -0600 |
---|---|---|
committer | Ben Smith <binjimin@gmail.com> | 2019-01-29 12:09:50 -0800 |
commit | 4c95f0e9fbedd922b7161a0a00c90c8eb7dac694 (patch) | |
tree | d87917832f45b9ba95adee96fb017182ad3e072f /src | |
parent | 12e8de7f5b3a5be01e3e6347c64168ea34b85a38 (diff) | |
download | wabt-4c95f0e9fbedd922b7161a0a00c90c8eb7dac694.tar.gz wabt-4c95f0e9fbedd922b7161a0a00c90c8eb7dac694.tar.bz2 wabt-4c95f0e9fbedd922b7161a0a00c90c8eb7dac694.zip |
Update bulk memory instruction binary encodings (#999)
This commit updates wabt wrt to two recent PRs:
* WebAssembly/bulk-memory-operations#43
* WebAssembly/bulk-memory-operations#45
Diffstat (limited to 'src')
-rw-r--r-- | src/binary-reader.cc | 29 | ||||
-rw-r--r-- | src/binary-writer.cc | 6 |
2 files changed, 22 insertions, 13 deletions
diff --git a/src/binary-reader.cc b/src/binary-reader.cc index c01216e4..33fd3337 100644 --- a/src/binary-reader.cc +++ b/src/binary-reader.cc @@ -1343,22 +1343,22 @@ Result BinaryReader::ReadFunctionBody(Offset end_offset) { } case Opcode::TableInit: { + Index segment; + CHECK_RESULT(ReadIndex(&segment, "elem segment index")); uint8_t reserved; CHECK_RESULT(ReadU8(&reserved, "reserved table index")); ERROR_UNLESS(reserved == 0, "reserved value must be 0"); - Index segment; - CHECK_RESULT(ReadIndex(&segment, "elem segment index")); CALLBACK(OnTableInitExpr, segment); CALLBACK(OnOpcodeUint32Uint32, segment, reserved); break; } case Opcode::MemoryInit: { + Index segment; + CHECK_RESULT(ReadIndex(&segment, "elem segment index")); uint8_t reserved; CHECK_RESULT(ReadU8(&reserved, "reserved memory index")); ERROR_UNLESS(reserved == 0, "reserved value must be 0"); - Index segment; - CHECK_RESULT(ReadIndex(&segment, "elem segment index")); CALLBACK(OnMemoryInitExpr, segment); CALLBACK(OnOpcodeUint32Uint32, segment, reserved); break; @@ -1377,26 +1377,33 @@ Result BinaryReader::ReadFunctionBody(Offset end_offset) { break; } - case Opcode::MemoryCopy: case Opcode::MemoryFill: { uint8_t reserved; CHECK_RESULT(ReadU8(&reserved, "reserved memory index")); ERROR_UNLESS(reserved == 0, "reserved value must be 0"); - if (opcode == Opcode::MemoryCopy) { - CALLBACK(OnMemoryCopyExpr); - } else { - CALLBACK(OnMemoryFillExpr); - } + CALLBACK(OnMemoryFillExpr); CALLBACK(OnOpcodeUint32, reserved); break; } + case Opcode::MemoryCopy: { + uint8_t reserved; + CHECK_RESULT(ReadU8(&reserved, "reserved memory index")); + ERROR_UNLESS(reserved == 0, "reserved value must be 0"); + CHECK_RESULT(ReadU8(&reserved, "reserved memory index")); + ERROR_UNLESS(reserved == 0, "reserved value must be 0"); + CALLBACK(OnMemoryCopyExpr); + CALLBACK(OnOpcodeUint32Uint32, reserved, reserved); + break; + } case Opcode::TableCopy: { uint8_t reserved; CHECK_RESULT(ReadU8(&reserved, "reserved table index")); ERROR_UNLESS(reserved == 0, "reserved value must be 0"); + CHECK_RESULT(ReadU8(&reserved, "reserved table index")); + ERROR_UNLESS(reserved == 0, "reserved value must be 0"); CALLBACK(OnTableCopyExpr); - CALLBACK(OnOpcodeUint32, reserved); + CALLBACK(OnOpcodeUint32Uint32, reserved, reserved); break; } diff --git a/src/binary-writer.cc b/src/binary-writer.cc index b6c33ccc..be117869 100644 --- a/src/binary-writer.cc +++ b/src/binary-writer.cc @@ -566,6 +566,7 @@ void BinaryWriter::WriteExpr(const Func* func, const Expr* expr) { case ExprType::MemoryCopy: WriteOpcode(stream_, Opcode::MemoryCopy); WriteU32Leb128(stream_, 0, "memory.copy reserved"); + WriteU32Leb128(stream_, 0, "memory.copy reserved"); break; case ExprType::MemoryDrop: { Index index = @@ -586,8 +587,8 @@ void BinaryWriter::WriteExpr(const Func* func, const Expr* expr) { Index index = module_->GetDataSegmentIndex(cast<MemoryInitExpr>(expr)->var); WriteOpcode(stream_, Opcode::MemoryInit); - WriteU32Leb128(stream_, 0, "memory.init reserved"); WriteU32Leb128(stream_, index, "memory.init segment"); + WriteU32Leb128(stream_, 0, "memory.init reserved"); break; } case ExprType::MemorySize: @@ -597,6 +598,7 @@ void BinaryWriter::WriteExpr(const Func* func, const Expr* expr) { case ExprType::TableCopy: WriteOpcode(stream_, Opcode::TableCopy); WriteU32Leb128(stream_, 0, "table.copy reserved"); + WriteU32Leb128(stream_, 0, "table.copy reserved"); break; case ExprType::TableDrop: { Index index = @@ -609,8 +611,8 @@ void BinaryWriter::WriteExpr(const Func* func, const Expr* expr) { Index index = module_->GetElemSegmentIndex(cast<TableInitExpr>(expr)->var); WriteOpcode(stream_, Opcode::TableInit); - WriteU32Leb128(stream_, 0, "table.init reserved"); WriteU32Leb128(stream_, index, "table.init segment"); + WriteU32Leb128(stream_, 0, "table.init reserved"); break; } case ExprType::Nop: |