Test some Wasm instructions more strictly #1009
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Hi, thank you for SIMDe! I'm working on wasm2c and trying to get the full Wasm testsuite passing when using SIMDe as backend for the Wasm simd128 operations. We're seeing a small number of differences from the Wasm-specified behavior (WebAssembly/wabt#2021 (comment)), most involving either negative zero or NaNs.
As a first step, here is a PR that cranks up the strictness of the Wasm tests for demote, floor, max, min,
nearest,pmax, pmin, and trunc. Currently these are tested to within the nearest 0.1; this PR would change that to an exact comparison (which I think is acceptable even in a fast-math situation as these are basically all selectors or integer truncation?). This also changes the overall test.h to do an exact bitwise comparison when slop=0, rather than==
.The intention is to write tests that capture the Wasm behavior related to negative zero and implement these instructions in a conforming way. (E.g., Wasm requires that min(-0, 0) → -0 , and checking that requires a bitwise comparison or at least
signbit()
.)(Update: removed
nearest
from this list because it already has a test that involves negative zero. This test passes on GCC using__builtin_roundeven
but fails on clang with SIMDe's C implementation ofsimde_math_roundeven
.)