-
Notifications
You must be signed in to change notification settings - Fork 0
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Create manual.yml #1
base: master
Are you sure you want to change the base?
Conversation
…tend-sextend aarch64: Migrate `uextend`/`sextend` to ISLE
* Enable the SIMD proposal by default This commit updates Wasmtime to enable the SIMD proposal for WebAssembly by default. Support has been implemented for quite some time and recently fuzzing has been running for multiple weeks without incident, so it seems like it might be time to go ahead and enable this! * Refactor CLI feature specification Don't store a `bool` but rather an `Option<bool>` so we can inherit the defaults from Wasmtime rather than having to keep the defaults in-sync.
* aarch64: Migrate some bit-ops to ISLE This commit migrates these instructions to ISLE: * `bnot` * `band` * `bor` * `bxor` * `band_not` * `bor_not` * `bxor_not` The translations were relatively straightforward but the interesting part here was trying to reduce the duplication between all these instructions. I opted for a route that's similar to what the lowering does today, having a `decl` which takes the `ALUOp` and then performs further pattern matching internally. This enabled each instruction's lowering to be pretty simple while we still get to handle all the fancy cases of shifts, constants, etc, for each instruction. * Actually delete previous lowerings * Remove dead code
This commit adds a few more CLI flags for random fiddly bits in the `Config` structure to make it a bit easier to play around on the command line and see the effect of various flags on compiled code.
Cranelift shuffles require indices to be in-bounds, which the avx512-using backend also requires via a debug assert, so this commit fixes a test with simd shuffles to only use in-bounds indices. This is motivated by another failure on CI where the machine we were running on presumably had avx512 things enabled. This should fix those failures. Closes bytecodealliance#3581
Uncovered by @bjorn3 (thanks!): 8- and 16-bit rotates were not working properly in recent versions of Cranelift with part of the lowering migrated to ISLE. This PR fixes a few issues: - 8- and 16-bit rotate-left needs to mask a constant amount, if any, because we use a 32-bit rotate instruction and so don't get the appropriate shift-amount masking for free from x86 semantics. - `operand_size_from_type` was incorrect: it only handled 32- and 64-bit types and silently returned `OperandSize::Size32` for everything else. Now uses the `OperandSize::from_ty(ty)` helper as the pre-ISLE code did. Our test coverage for narrow value types is not great; this PR adds some runtests for rotl/rotr but more would always be better!
…e-width for shifts.
…-rotate Fix some 16- and 8-bit behavior in x64 backend related to rotates.
* aarch64: Migrate ishl/ushr/sshr to ISLE This commit migrates the `ishl`, `ushr`, and `sshr` instructions to ISLE. These involve special cases for almost all types of integers (including vectors) and helper functions for the i128 lowerings since the i128 lowerings look to be used for other instructions as well. This doesn't delete the i128 lowerings in the Rust code just yet because they're still used by Rust lowerings, but they should be deletable in due time once those lowerings are translated to ISLE. * Use more descriptive names for i128 lowerings * Use a with_flags-lookalike for csel * Use existing `with_flags_*` * Coment backwards order * Update generated code
This commit translates the `rotl` and `rotr` lowerings already existing to ISLE. The port was relatively straightforward with the biggest changing being the instructions generated around i128 rotl/rotr primarily due to register changes.
* Update to cap-std 0.22.0. The main change relevant to Wasmtime here is that this includes the rustix fix for compilation errors on Rust nightly with the `asm!` macro. * Add itoa to deny.toml. * Update the doc and fuzz builds to the latest Rust nightly. * Update to libc 0.2.112 to pick up the `POLLRDHUP` fix. * Update to cargo-fuzz 0.11, for compatibility with Rust nightly. This appears to be the fix for rust-fuzz/cargo-fuzz#277.
Fixes bytecodealliance#3609. It turns out that `sha2` is a nontrivial dependency for Cranelift in many contexts, partly because it pulls in a number of other crates as well. One option is to remove the hash check under certain circumstances, as implemented in bytecodealliance#3616. However, this is undesirable for other reasons: having different dependency options in Wasmtime in particular for crates.io vs. local builds is not really possible, and so either we still have the higher build cost in Wasmtime, or we turn off the checks by default, which goes against the original intent of ensuring developer safety (no mysterious stale-source bugs). This PR uses `SipHash` instead, which is built into the standard library. `SipHash` is deprecated, but it's fixed and deterministic (across runs and across Rust versions), which is what we need, unlike the suggested replacement `std::collections::hash_map::DefaultHasher`. The result is only 64 bits, and is not cryptographically secure, but we never needed that; we just need a simple check to indicate when we forget a `rebuild-isle`.
Fix popcnt for small integers
…iphash Use SipHasher rather than SHA-512 for ISLE manifest.
* aarch64: Use smaller instruction helpers in ISLE This commit moves the aarch64 backend's ISLE to be more similar to the x64 backend's ISLE where one-liner instruction builders are used for various forms of instructions instead of always using the constructor-per-variant-of-`Inst`. Overall I think this change worked out quite well and sets up some naming idioms as well for various forms of instructions. * rebase conflict
While using VTune, it seemed a good idea to check that the VTune documentation for Wasmtime was still correct. It is and VTune support still works (improvements: click-through to x86 assembly is not available). These changes simply re-organize the documentation and add a section for running VTune from a GUI.
The name of the VTune collector CLI has [now changed](intel/ittapi#32 (comment)) to `vtune`; `amplxe-cl` is deprecated.
This update is no real change in functionality but brings in several of the latest changes to the `ittapi-rs` library: minor fixes to the C library, a new license expression for the Cargo crate, better documentation, updated Rust bindings, and the removal of `cmake` as a dependency (uses `cc` directly instead).
The whole point of patch releases is that they're not on the `main` branch, so this is an attempt to handle bytecodealliance#3621.
This was accidentally ommitted from our CI configuration which meant that release branches didn't get PR CI. They still won't get on-merge CI but that shouldn't be an issue because the PR CI is the full CI.
…ngs-2022 Add Cranelift meeting agendas through May; add item on Jan 10.
It seems that Doxygen 1.9.1 was removed; this upgrades to 1.9.3.
Fix "Doc build" CI job.
It is already available through ctx.mach_compile_result and rarely needed.
f373f84
to
de67e87
Compare
Performance results in clockticks (lower is better):
|
Performance results based on clockticks comparison with main HEAD (higher %change shows improvement):
|
e8b2210
to
3df4a12
Compare
3df4a12
to
60358c7
Compare
Performance results based on clockticks comparison with main HEAD (higher %change shows improvement):
|
5644042
to
f2fc770
Compare
/bench_x64 |
1 similar comment
/bench_x64 |
f2fc770
to
71a0a75
Compare
/bench_x64 |
71a0a75
to
c3bd6f0
Compare
/bench_x64 |
/bench_x64 |
/bench_x64 |
/bench_x64 |
1 similar comment
/bench_x64 |
/bench_x64 edit
|
* Initial forward-edge CFI implementation Give the user the option to start all basic blocks that are targets of indirect branches with the BTI instruction introduced by the Branch Target Identification extension to the Arm instruction set architecture. Copyright (c) 2022, Arm Limited. * Refactor `from_artifacts` to avoid second `make_executable` (#1) This involves "parsing" twice but this is parsing just the header of an ELF file so it's not a very intensive operation and should be ok to do twice. * Address the code review feedback Copyright (c) 2022, Arm Limited. Co-authored-by: Alex Crichton <[email protected]>
…dealliance#7029) * Rename `Host*` things to avoid name conflicts with bindings. * Update to the latest resource-enabled wit files. * Adapting the code to the new bindings. * Update wasi-http to the resource-enabled wit deps. * Start adapting the wasi-http code to the new bindings. * Make `get_directories` always return new owned handles. * Simplify the `poll_one` implementation. * Update the wasi-preview1-component-adapter. FIXME: temporarily disable wasi-http tests. Add logging to the cli world, since stderr is now a reseource that can only be claimed once. * Work around a bug hit by poll-list, fix a bug in poll-one. * Comment out `test_fd_readwrite_invalid_fd`, which panics now. * Fix a few FIXMEs. * Use `.as_ref().trapping_unwrap()` instead of `TrappingUnwrapRef`. * Use `drop_in_place`. * Remove `State::with_mut`. * Remove the `RefCell` around the `State`. * Update to wit-bindgen 0.12. * Update wasi-http to use resources for poll and I/O. This required making incoming-body and outgoing-body resourrces too, to work with `push_input_stream_child` and `push_output_stream_child`. * Re-enable disabled tests, remove logging from the worlds. * Remove the `poll_list` workarounds that are no longer needed. * Remove logging from the adapter. That said, there is no replacement yet, so add a FIXME comment. * Reenable a test that now passes. * Remove `.descriptors_mut` and use `with_descriptors_mut` instead. Replace `.descriptors()` and `.descriptors_mut()` with functions that take closures, which limits their scope, to prevent them from invalid aliasing. * Implement dynamic borrow checking for descriptors. * Add a cargo-vet audit for wasmtime-wmemcheck. * Update cargo vet for wit-bindgen 0.12. * Cut down on duplicate sync/async resource types (#1) * Allow calling `get-directories` more than once (#2) For now `Clone` the directories into new descriptor slots as needed. * Start to lift restriction of stdio only once (#3) * Start to lift restriction of stdio only once This commit adds new `{Stdin,Stdout}Stream` traits which take over the job of the stdio streams in `WasiCtxBuilder` and `WasiCtx`. These traits bake in the ability to create a stream at any time to satisfy the API of `wasi:cli`. The TTY functionality is folded into them as while I was at it. The implementation for stdin is relatively trivial since the stdin implementation already handles multiple streams reading it. Built-in impls of the `StdinStream` trait are also provided for helper types in `preview2::pipe` which resulted in the implementation of `MemoryInputPipe` being updated to support `Clone` where all clones read the same original data. * Get tests building * Un-ignore now-passing test * Remove unneeded argument from `WasiCtxBuilder::build` * Fix tests * Remove some workarounds Stdio functions can now be called multiple times. * If `poll_oneoff` fails part-way through, clean up properly. Fix the `Drop` implementation for pollables to only drop the pollables that have been successfully added to the list. This fixes the poll_oneoff_files failure and removes a FIXME. --------- Co-authored-by: Alex Crichton <[email protected]>
No description provided.