Fizzy 0.5.0
This release focuses on behind the scenes code and test cleanups, and preparation for a public API.
Fizzy passes all(*) of the official test suite (spectest 1.0):
- 17911 of 17913 binary parser and execution tests,
- 989 of 989 validation tests,
- 477 skipped due to testing text format parser.
(*) The two failures are caused by, in our opinion, two bugs in the test cases.
A notable change is the upgrade from WABT 1.0.12 to 1.0.19 in our testing infrastructure.
While this allows us to conduct fuzzing, it must be noted there is a significant speed regression
with the newer WABT.
There is a slight speed regression compared to Fizzy 0.4.0, which can be attributed to
the code layout restructuring in #518.
Detailed benchmark results
Instantiation
| fizzy | wabt | wasm3 |
| 0.5.0 | 0.4.0 | 1.0.19 | 0.4.7 |
abs. [µs] rel. [%] rel. [%] rel. [%] rel. [%]
geometric mean 100 101 279 27
blake2b 28 100 99 306 38
ecpairing 1399 100 101 305 3
keccak256 47 100 103 289 18
memset 10 100 100 285 79
mul256_opt0 12 100 101 246 56
ramanujan_pi 28 100 101 260 30
sha1 43 100 101 284 19
sha256 69 100 100 297 12
taylor_pi 7 100 99 246 116
Execution
| fizzy | wabt | wasm3 |
| 0.5.0 | 0.4.0 | 1.0.19 | 1.0.12 | 0.4.7 |
abs. [µs] rel. [%] rel. [%] rel. [%] rel. [%] rel. [%]
geometirc mean 100 95 508 167 26
blake2b/512_bytes_rounds_1 87 100 97 523 172 26
blake2b/512_bytes_rounds_16 1329 100 96 525 172 26
ecpairing/onepoint 411770 100 102 516 172 38
keccak256/512_bytes_rounds_1 105 100 96 416 162 18
keccak256/512_bytes_rounds_16 1548 100 96 418 162 18
memset/256_bytes 7 100 96 509 155 28
memset/60000_bytes 1623 100 95 507 155 28
mul256_opt0/input0 29 100 91 545 152 22
mul256_opt0/input1 29 100 89 543 152 22
ramanujan_pi/33_runs 138 100 91 483 163 22
sha1/512_bytes_rounds_1 94 100 97 563 181 29
sha1/512_bytes_rounds_16 1318 100 96 566 179 29
sha256/512_bytes_rounds_1 96 100 98 539 186 30
sha256/512_bytes_rounds_16 1326 100 97 540 186 30
taylor_pi/pi_1000000_runs 41668 100 96 465 154 29
Added
fizzy-testfloat
tool to check floating-point instructions implementation against Berkeley TestFloat test suite. #511instantiate
function now hasmemory_pages_limit
parameter to configure hard limit on memory allocation.fizzy-spectests
uses the required 4 GB memory limit now. #515fizzy-spectests
tool can now run tests form a single*.wast
file. #525- The
shellcheck
linter is now used on CI. #537 - There is now
lib/fizzy/cxx20
directory with substitute implementations of C++20 standard library features, which Fizzy uses when compiled in pre-C++20 standard (default). Currently it containsbit_cast
andspan
utilities. #535 #541
Changed
- Optimization in
execute
to allocate memory only once for all of the arguments, locals, and operand stack. #382 - Trap handling in
execute
has been simplified. #425 fizzy-bench
now uses WABT version 1.0.19. #443- New simpler implementation of
f32.nearest
andf64.nearest
. #504 execute.hpp
now includes declarations only forexecute
functions. Other functions of C++ API (instantiate
,resolve_imported_functions
, exports access) have been moved toinstantiate.hpp
. #518- More strict compiler warnings have been enabled. #508
- Remove some less useful benchmarking cases. #555
- CI improvements. #465 #516 #519 #520 #523 #532 #549
- Code and test cleanups and refactoring. #495 #505 #521 #522
Fixed
- Incorrect results in some floating point operations with NaNs in GCC builds without optimization. #513
- Potential undefined behaviour in pointer arithmetic in parser. #539
- Ensure (in debug mode) that
execute()
receives the correct number of inputs and returns the correct number of output. #547 - Incorrect failure logging in
fizzy-spectests
tool. #548