darmie opened PR #14006 from darmie:x64-vpdpbusd-evex to bytecodealliance:main:
Follow-up to #13964 (VEX AVX-VNNI
vpdpbusd). Adds the EVEX-encoded form so the same u8×i8 dot-accumulate fold also fires on hosts with AVX512-VNNI but no VEX AVX-VNNI (e.g. Ice Lake, Cascade Lake, Tiger Lake).Adds
vpdpbusd(EVEX.128.66.0F38.W0 50 /r) in the assembler-x64 DSL, ahas_avx512vnniISA flag with host detection, and a lowering rule at priority 7 that emits the EVEX form when the target has AVX512-VNNI + AVX512-VL. The existing VEX rule (priority 8) stays preferred when a host has both.has_avx512vnniis added to the cascadelake and icelake presets (propagating to cooperlake / icelake-server / tigerlake / sapphirerapids / graniterapids).As in #13964, the new ISA flag also gets its
has_avx512vnniarm in wasmtime's host-detect tables (engine.rs/config.rs) so serialized-module compatibility checks handle it.Tested with a
compilefiletest (the target setsavx512vnnibut notavx_vnni, so only the EVEX rule can fire) and an EVEXtest runadded to the shared runtest, executed under the Intel-SDE CI job on emulated AVX512-VNNI. VEX.128 / EVEX.128 only; 256-bit is a follow-up.
darmie requested cfallin for a review on PR #14006.
darmie requested wasmtime-compiler-reviewers for a review on PR #14006.
darmie requested wasmtime-core-reviewers for a review on PR #14006.
github-actions[bot] added the label cranelift on PR #14006.
github-actions[bot] added the label cranelift:meta on PR #14006.
github-actions[bot] added the label cranelift:area:x64 on PR #14006.
github-actions[bot] added the label isle on PR #14006.
github-actions[bot] added the label wasmtime:config on PR #14006.
github-actions[bot] added the label wasmtime:api on PR #14006.
github-actions[bot] commented on PR #14006:
Subscribe to Label Action
cc @cfallin, @fitzgen
<details>
This issue or pull request has been labeled: "cranelift", "cranelift:area:x64", "cranelift:meta", "isle", "wasmtime:api", "wasmtime:config"Thus the following users have been cc'd because of the following labels:
- cfallin: isle
- fitzgen: isle
To subscribe or unsubscribe from this label, edit the <code>.github/subscribe-to-label.json</code> configuration file.
Learn more.
</details>
github-actions[bot] commented on PR #14006:
Label Messager: wasmtime:config
It looks like you are changing Wasmtime's configuration options. Make sure to
complete this check list:
[ ] If you added a new
Configmethod, you wrote extensive documentation for
it.<details>
Our documentation should be of the following form:
```text
Short, simple summary sentence.More details. These details can be multiple paragraphs. There should be
information about not just the method, but its parameters and results as
well.Is this method fallible? If so, when can it return an error?
Can this method panic? If so, when does it panic?
Example
Optional example here.
```</details>
[ ] If you added a new
Configmethod, or modified an existing one, you
ensured that this configuration is exercised by the fuzz targets.<details>
For example, if you expose a new strategy for allocating the next instance
slot inside the pooling allocator, you should ensure that at least one of our
fuzz targets exercises that new strategy.Often, all that is required of you is to ensure that there is a knob for this
configuration option in [wasmtime_fuzzing::Config][fuzzing-config] (or one
of its nestedstructs).Rarely, this may require authoring a new fuzz target to specifically test this
configuration. See [our docs on fuzzing][fuzzing-docs] for more details.</details>
[ ] If you are enabling a configuration option by default, make sure that it
has been fuzzed for at least two weeks before turning it on by default.[fuzzing-config]: https://github.com/bytecodealliance/wasmtime/blob/ca0e8d0a1d8cefc0496dba2f77a670571d8fdcab/crates/fuzzing/src/generators.rs#L182-L194
[fuzzing-docs]: https://docs.wasmtime.dev/contributing-fuzzing.html
<details>
To modify this label's message, edit the <code>.github/label-messager/wasmtime-config.md</code> file.
To add new label messages or remove existing label messages, edit the
<code>.github/label-messager.json</code> configuration file.</details>
darmie commented on PR #14006:
Similar to #13964
This PR doesn't add or change any public Config method or configuration option. The config.rs and engine.rs edits are internal host-feature-detection plumbing (detect_host_feature, and the flag→feature-name map in check_compatible_with_native_host), required whenever a new Cranelift x86 ISA setting is added (here has_avx_vnni) so a serialized module's ISA flags can be checked against the host at load time.
Testing the new lowering: the
vpdpbusdfold has a compile filetest (isa/x64/simd-vpdpbusd.clif) and an executed runtest (runtests/simd-vpdpbusd.clif), including ab > 127case so the unsigned reading is observable; the runtest runs under the Intel-SDE CI job on emulated AVX-VNNI. One thing worth flagging directly: the assembler-x64 fuzz roundtrip skipsvpdpbusd, because the bundled capstone (0.14) doesn't disassemble AVX-VNNI and so has no reference to compare against; the encoding is instead verified by that executed runtest.
:thumbs_up: cfallin submitted PR review:
Thanks!
cfallin added PR #14006 cranelift(x64): add the EVEX AVX512-VNNI vpdpbusd form to the merge queue.
:check: cfallin merged PR #14006.
cfallin removed PR #14006 cranelift(x64): add the EVEX AVX512-VNNI vpdpbusd form from the merge queue.
Last updated: Jul 29 2026 at 05:03 UTC