* fix misprints in doc comments
* added global gas tracker variable and local gas fn
* all exported functions of the module to accept a new param and to set the gas_left global to its value at their very start
* make module support both gas metering methods
* tests fixed for the old metering method
* better naming
* MutableGlobal metering method implemented, tests for the old method pass
* gas_metering::tests updated and pass
* all tests udpdated and pass
* emacs backup files to .gitignore
* docs updated
* clippy fix
* iff = if and only if
* more clippy
* docs misprints fixes
* refactored to have Backend trait and two implementations in separate sub-modules
* docs updated
* fixed old benches (updating them is coming next)
* added bench for an instrumented wasm-coremark
* updated benches: added them for both gas_metering instrumentations
* benches contest first ver
* added debug prints to the bench
* refactored to better fit frontend-backend pattern
* docs update
* updated benches
* design updated on feedback
* re-structured sub-modules
re-structured sub-modules & updated docs
* docs improved
* addressed latest feedback comments
* re-writed the local gas function
* coremark benches show ~20% performance improvement
* fix ci: test + clippy
* save before re-factoring prepare_in_wasm()
* bare_call_16 shows 16% worse perf
* + fibonacci recursive bench
* refactored benchmarks
* + factorial recursive bench
* benches on wasmi fixtures show no perf improvement, coremark runs ~20% faster being instrumented with mutable_global gas metering
* charge gas for local gas func isntructions execution
* replaced benchmark which requires multi_value feature
* save: optimized gas func a bit (benches work, fixture tests fail)
* 1033% overhead on many_blocks.wasm when mut_global gas_metering together with stack_height
* size overhead test for both gas metering methods + stack limiter
* added more benches
* improved print_size_overhead test
* test for comparing size overheads of two gas_metering injectors
* before optimization: benches + size overhead
* optimization try-1: inline part of gas func instructions: +benches +size overheads
* optimization try-2: inline hot path of gas fn: +benches +size overheads
* opt try-3: count for gas fn cost on the caller side: +benches +size overhead
* revert to initial version but with static gas fn cost on the caller side: +benches +sizes
* tests fixed
* use newest wasmi 0.20: +benches +docs updated
* use if-else block instead of Return: +benches
* fix tests
* clippy fix
* addressed review comments
* Update changelog
Co-authored-by: Alexander Theißen <alex.theissen@me.com>
The code assumed that the number of `Local` and number of locals is the
same thing. In reality though it is not. `Local` actually represents a
group of locals with the same type. The group can declare more than one
variable and the number of them is returned by `Local::count`.
In this PR we acknowledge this fact. Along the way we add a checked
arithmetic for locals_count and max_stack_height summation.
Right now if there is a diff between the actual and expected results,
the expected file will be overwritten. This may be annoying. To make it
controlled we introduce BLESS option.
This means that the expected files won't be regenerated unless this
environment variable is set.
Therefore to regenerate the tests use:
BLESS=1 cargo test
* No need for mem::replace when doing a simple assignment
* Allow specifying the module of the imported 'gas' function
This allows users to place the imported function inside a custom
module instead of the generic 'env' module.