Hello, I'm beginning to study Wasm as a hobby. I think I've found some editorial bugs.
As a first step in learning, I wanted to know what kind of instructions Wasm has, so I searched and found wasm-ops. That chart was a great help, but I noticed it was a bit outdated, so I next tried to create a new chart.
Since I was at it, I thought I'd automate the table creation and started writing a script. But now, as a beginner, I'm a bit confused.
When I generated a table from the instruction list, I realized multiple name inconsistencies within the specification pages themselves.
I found such inconsistencies on (at least) three pages. I believe that each pages provide a comprehensive list of Wasm instructions.
- Index of Instructions1
- Instructions in Binary Format section2
- Instructions in Structure section3
The following are examples of contradiction. I'm not sure which one is correct, but could you fix the inconsistencies?
- 1 contains
end (0x0B), but 3 does not, and 2 does not refer to it in instr :: = definition
- 1 and 3 contain
call_ref (0x14), but 2 does not
- 1 contains instructions that end with
{name}_{numtype}_{sx} (like i32.trunc_f32_u), but others contain {name}_{sx}_{numtype} (i32.trunc_u_f32) with the same {name}
- 2 says
0xBB is f32.promote_f64 but others say it's f64.promote_f32
- [Update] 2 and Text Format4 categorizes
struct.*/array.* as "Reference Instructions," as the same as ref.*, but 3 categorizes them as a separate "Aggregate Instructions"
- In addition, Validation5 categorizes them as "Aggregate Reference Instructions" (another different name)
However, I don't believe the above is complete. For example, there seem to be at least three other pages titled "Instructions,"564 but I haven't investigated those yet.
I would appreciate it if they could be corrected.
Hello, I'm beginning to study Wasm as a hobby. I think I've found some editorial bugs.
As a first step in learning, I wanted to know what kind of instructions Wasm has, so I searched and found wasm-ops. That chart was a great help, but I noticed it was a bit outdated, so I next tried to create a new chart.
Since I was at it, I thought I'd automate the table creation and started writing a script. But now, as a beginner, I'm a bit confused.
When I generated a table from the instruction list, I realized multiple name inconsistencies within the specification pages themselves.
I found such inconsistencies on (at least) three pages. I believe that each pages provide a comprehensive list of Wasm instructions.
The following are examples of contradiction. I'm not sure which one is correct, but could you fix the inconsistencies?
end(0x0B), but 3 does not, and 2 does not refer to it ininstr :: =definitioncall_ref(0x14), but 2 does not{name}_{numtype}_{sx}(likei32.trunc_f32_u), but others contain{name}_{sx}_{numtype}(i32.trunc_u_f32) with the same{name}0xBBisf32.promote_f64but others say it'sf64.promote_f32struct.*/array.*as "Reference Instructions," as the same asref.*, but 3 categorizes them as a separate "Aggregate Instructions"However, I don't believe the above is complete. For example, there seem to be at least three other pages titled "Instructions,"564 but I haven't investigated those yet.
I would appreciate it if they could be corrected.
Footnotes
https://webassembly.github.io/spec/core/appendix/index-instructions.html ↩ ↩2 ↩3 ↩4
https://webassembly.github.io/spec/core/binary/instructions.html ↩ ↩2 ↩3 ↩4 ↩5
https://webassembly.github.io/spec/core/syntax/instructions.html ↩ ↩2 ↩3 ↩4
https://webassembly.github.io/spec/core/text/instructions.html ↩ ↩2
https://webassembly.github.io/spec/core/valid/instructions.html ↩ ↩2
https://webassembly.github.io/spec/core/exec/instructions.html ↩