Commit Graph

9382 Commits

Author SHA1 Message Date
Nick Fitzgerald
be618cc316 Add notes for Cranelift 2021-12-13 meeting 2021-12-13 08:52:15 -08:00
Andrew Brown
86611d3bbc isle: expand enums in ISLE (#3586)
* x64: expand FloatCC enum in ISLE
* isle: regenerate manifests
* isle: generate all enum fields in `clif.isle`

This expands the `gen_isle` function to write all of the immediate
`enum`s out explicitly in `clif.isle`. Non-`enum` immediates are still
`extern primitive`.

* Only compile `enum_values` with `rebuild-isle` feature
* Only compile `gen_enum_isle` with `rebuild-isle` feature
2021-12-12 18:31:42 -08:00
Chris Fallin
fab77e0d0f Merge pull request #3595 from Monadic-Cat/cranelift-jit-arm64call
Add support for `Arm64Call` relocations in `cranelift-jit`
2021-12-10 15:38:49 -08:00
Monadic Cat
0d6688f81a rustfmt compiled_blob.rs 2021-12-10 16:55:03 -06:00
Monadic Cat
b6ade80025 use an unaligned read and write on compiled blob 2021-12-10 16:42:55 -06:00
Monadic Cat
dcb64dc311 assert that offset is in bounds for Arm64Call 2021-12-10 16:31:10 -06:00
Monadic Cat
ad36df5495 add support for Arm64Call relocations in cranelift-jit 2021-12-10 15:15:59 -06:00
Nick Fitzgerald
da73952021 cranelift-codegen: port bnot lowering to ISLE in x64 2021-12-09 08:38:10 -08:00
Nick Fitzgerald
b5e5366550 Merge pull request #3591 from fitzgen/min-max-isle
cranelift-codegen: Port lowering of `{i,u}{max,min}` to ISLE for x64
2021-12-08 16:33:02 -08:00
Nick Fitzgerald
cded0989aa cranelift-codegen: Port lowering of {i,u}{max,min}` to ISLE for x64 2021-12-08 15:50:42 -08:00
Nick Fitzgerald
471c1e32a4 Consolidate XmmRmR-based instructions together 2021-12-08 15:37:24 -08:00
Nick Fitzgerald
bea0c0d886 Merge pull request #3585 from abrown/assert-tmp-dsts
x64: assert that temporary and destination registers match during renaming
2021-12-08 14:10:54 -08:00
Chris Fallin
7bc17fda39 Fix iadd_ifcout lowering in ISLE to return a register corresponding to the iflags.
This register is not initialized, but we protect against its being used
by never allowing an iflags/fflags-typed value to be used with
`put_value_in_regs`. All `iflags`/`fflags` usages should be handled by
pattern-matching: e.g., `trapif` explicitly matches an `iadd_ifcout`
input.

Eventually (#3249) we need to simplify this by removing
iflags/fflags-tyepd values and using bool flags instead,
pattern-matching to get the same efficient lowerings as today. For now,
this allows the ISLE assertions to pass.
2021-12-08 11:59:38 -08:00
Andrew Brown
acaa84068d aarch64: assert that temporary and destination registers match during renaming 2021-12-08 11:59:11 -08:00
Andrew Brown
594509b734 x64: assert that temporary and destination registers match during renaming 2021-12-08 11:58:45 -08:00
Benjamin Bouvier
34ab2f9b19 Update wasmtime agenda for next meeting (#3590) 2021-12-08 19:14:18 +01:00
Nick Fitzgerald
1a9a034b2a Merge pull request #3587 from fitzgen/isle-exact-dep
cranelift-codegen: depend on an exact version of `isle`
2021-12-07 15:39:27 -08:00
Nick Fitzgerald
6af8d2a292 Rename the isle crate to cranelift-isle
The `isle` crate name is already taken on crates.io :(
2021-12-07 14:56:26 -08:00
Nick Fitzgerald
7e80c061f2 cranelift-codegen: depend on an exact version of isle
This should (hopefully) fix our publish script.
2021-12-07 14:23:41 -08:00
Peter Huene
3fe15ffa49 Merge pull request #3582 from Amanieu/c-api-vec
Fix issues with the C API vector implementation
2021-12-03 17:44:52 -08:00
Amanieu d'Antras
ce67e7fcd1 Fix ownership in *_vec_new functions in the C API
These functions are specified to take ownership of the objects in the
given slice, not clone them.
2021-12-03 23:57:19 +00:00
Amanieu d'Antras
6d61c1578f Add a proper implementation of Clone for C API vector types
The previous implementation used a shallow copy, which is incorrect and
could lead to a use-after-free.
2021-12-03 23:57:19 +00:00
Pat Hickey
1db2f38420 Merge pull request #3584 from bytecodealliance/pch/rust_1.57_warnings
cranelift codegen & filetests: silence new dead code warnings in rust 1.57
2021-12-03 12:36:52 -08:00
Pat Hickey
cf03b2a513 cranelift codegen & filetests: silence new dead code warnings in rust 1.57 2021-12-03 10:33:09 -08:00
Alex Crichton
c890fab5dd Update criterion to remove duplicate itertools dep (#3579)
Helps remove a crate in `deny.toml`
2021-12-01 16:25:18 -06:00
Alex Crichton
0e90d4b903 Update addr2line and gimli deps (#3580)
Just a routine update, figured it was good to stay close to their most
recent versions
2021-12-01 15:48:36 -06:00
Chris Fallin
ccf31a33b8 Merge pull request #3578 from bnjbvr/tidy-deps
Tidy up dependencies
2021-12-01 08:43:45 -08:00
Benjamin Bouvier
1b33553cea Tidy up unused dependencies 2021-12-01 11:33:27 +01:00
Benjamin Bouvier
b34788ae8a Make miette optional in cranelift-codegen, as it's only used when rebuilding isle 2021-12-01 11:24:59 +01:00
Chris Fallin
9186713163 Merge pull request #3560 from cfallin/isle-docs
Add ISLE reference documentation.
2021-11-30 14:10:04 -08:00
Chris Fallin
5a765c65ea Add link to ISLE language reference to ISLE Cranelift integration doc. 2021-11-30 13:25:08 -08:00
Chris Fallin
edef533d1f Move ISLE docs into cranelift/isle/docs/ and update links. 2021-11-30 13:24:02 -08:00
Chris Fallin
001d91c73c Address review feedback. 2021-11-30 11:42:17 -08:00
Chris Fallin
b6bed81ba2 Add ISLE reference documentation.
This documentation provides details for all of the ISLE language
features, and detailed rationale for why many of them are designed in
the way that they are. It is hopefully both a reasonable tutorial and
reference for someone looking to understand the DSL.

Note that this documentation is separate from and orthogonal to the
work to document the Cranelift bindings and integration work that
@fitzgen has covered well in #3556. This document can link to that one
and vice-versa once they are both in-tree.
2021-11-30 11:42:17 -08:00
Nick Fitzgerald
0580c84405 Merge pull request #3570 from alexcrichton/isle-3-umulhi
aarch64: Migrate `{s,u}mulhi` to ISLE
2021-11-30 09:48:47 -08:00
Nick Fitzgerald
9e9a38a5c7 Merge pull request #3556 from fitzgen/isle-integration-docs
Add a document describing how ISLE is integrated with Cranelift
2021-11-29 19:16:28 -08:00
Chris Fallin
952ef031af Merge pull request #2953 from scottmcm/add-memcmp
Cranelift: Add `LibCall::Memcmp`
2021-11-29 18:36:12 -08:00
Alex Crichton
25b380d5fc aarch64: Migrate {s,u}mulhi to ISLE
This starts moving over some sign/zero-extend helpers also present in
lowering in Rust. Otherwise this is a relatively unsurprising transition
with the various cases of the instructions mapping well to ISLE
utilities.
2021-11-29 18:11:42 -08:00
Nick Fitzgerald
66432ab461 docs: Clarify isle integration docs 2021-11-29 17:01:55 -08:00
Nick Fitzgerald
f148b50201 Add a document describing how ISLE is integrated with Cranelift 2021-11-29 17:01:55 -08:00
Nick Fitzgerald
3f16cc86cb Merge pull request #3569 from alexcrichton/isle-2-imul
aarch64: Migrate `imul` to ISLE
2021-11-29 17:00:24 -08:00
Scott McMurray
ca7c54b5f8 Add Type::int_with_byte_size constructor 2021-11-29 16:53:54 -08:00
Alex Crichton
33dba07e6b aarch64: Migrate imul to ISLE
This commit migrates the `imul` clif instruction lowering for AArch64 to
ISLE. This is a relatively complicated instruction with lots of special
cases due to the simd proposal for wasm. Like x64, however, the special
casing lends itself to ISLE quite well and the lowerings here in theory
are pretty straightforward.

The main gotcha of this commit is that this encounters a unique
situation which hasn't been encountered yet with other lowerings, namely
the `Umlal32` instruction used in the implementation of `i64x2.mul` is
unique in the `VecRRRLongOp` class of instructions in that it both reads
and writes the destination register (`use_mod` instead of simply
`use_def`). This meant that I needed to add another helper in ISLe for
creating a `vec_rrrr_long` instruction (despite this enum variant not
actually existing) which implicitly moves the first operand into the
destination before issuing the actual `VecRRRLong` instruction.
2021-11-29 16:05:57 -08:00
Dan Gohman
42b23dac4a Make the trap name for unreachable traps more descriptive. (#3568)
Following up on WebAssembly/wasi-sdk#210, this makes the trap message
for `unreachable` traps more descriptive of what actually caused the
trap, so that it doesn't sound like maybe Wasmtime itself executed a
`unreachable!()` macro in Rust.

Before:
```
wasm trap: unreachable
wasm backtrace:
     [...]
```

After:
```
wasm trap: wasm `unreachable` instruction executed
wasm backtrace:
     [...]
```
2021-11-29 15:55:10 -08:00
Nick Fitzgerald
b1a40646e3 Merge pull request #3553 from alexcrichton/ineg
aarch64: Migrate `ineg` to ISLE
2021-11-29 14:20:20 -08:00
Alex Crichton
868c40cde2 Add today's cranelift meeting notes (#3566) 2021-11-29 11:38:30 -06:00
Alex Crichton
fa63e7de5a aarch64: Migrate ineg to ISLE
Needed a new `vec_misc` instruction construction helper but otherwise a
pretty straightforward translation.
2021-11-29 08:03:17 -08:00
Scott McMurray
d55a19365e Add FunctionBuilder::emit_small_memory_compare
This takes an IntCC for the comparison to do, though panics for Signed*
since memcmp is an unsigned comparison.  Currently it's most useful for
(Not)Equal, but once big-endian loads are implemented it'll be able to
support the other Unsigned* comparisons nicely on more than just bytes.
2021-11-29 02:08:04 -08:00
Scott McMurray
c266f7f4c3 Cranelift: Add LibCall::Memcmp
The comment says the enum is "likely to grow" and the function's been in libc since C89, so hopefully this is ok.

I'd like to use it for emitting things like array equality.
2021-11-29 01:42:59 -08:00
Chris Fallin
d1e9a7840e Merge pull request #3561 from cfallin/aarch64-isle-rule-explicit-ordering
Update aarch64 backend's ISLE code to be rule-ordering-independent.
2021-11-24 11:57:52 -08:00