E.g.:
i8x16.eq gets matched by shape.vbinop, which uses the rule vbinop_shape, which is eq_i8x16 which applies eq_i8 lanewise.
Not sure how to solve this yet, filing a bug to track this. We might need a special rule to match comparisons and do a "signed extension" step after the comparisons. Or define a new set of comparisons that return -1.
Note that only the text is wrong, the interpreter implementation doing the right thing.
Comparisons should set a lane to 0 if false or all ones if true (https://github.com/WebAssembly/simd/blob/master/proposals/simd/SIMD.md#comparisons).
For
{i8x16,i16x8,i32x4}.{eq,ne...}
, the specification seems to rely on http://localhost:9000/exec/numerics.html#xref-exec-numerics-op-ieq-mathrm-ieq-n-i-1-i-2 which sets a lane to1
or0
.E.g.: i8x16.eq gets matched by
shape.vbinop
, which uses the rulevbinop_shape
, which iseq_i8x16
which applieseq_i8
lanewise.Not sure how to solve this yet, filing a bug to track this. We might need a special rule to match comparisons and do a "signed extension" step after the comparisons. Or define a new set of comparisons that return
-1
.Note that only the text is wrong, the interpreter implementation doing the right thing.