-
Notifications
You must be signed in to change notification settings - Fork 1.3k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
aarch64: Migrate
uextend
/sextend
to ISLE
This commit migrates the sign/zero extension instructions from `lower_inst.rs` to ISLE. There's actually a fair amount going on in this migration since a few other pieces needed touching up along the way as well: * First is the actual migration of `uextend` and `sextend`. These instructions are relatively simple but end up having a number of special cases. I've attempted to replicate all the cases here but double-checks would be good. * This commit actually fixes a few issues where if the result of a vector extraction is sign/zero-extended into i128 that actually results in panics in the current backend. * This commit adds exhaustive testing for extension-of-a-vector-extraction is a noop wrt extraction. * A bugfix around ISLE glue was required to get this commit working, notably the case where the `RegMapper` implementation was trying to map an input to an output (meaning ISLE was passing through an input unmodified to the output) wasn't working. This requires a `mov` instruction to be generated and this commit updates the glue to do this. At the same time this commit updates the ISLE glue to share more infrastructure between x64 and aarch64 so both backends get this fix instead of just aarch64. Overall I think that the translation to ISLE was a net benefit for these instructions. It's relatively obvious what all the cases are now unlike before where it took a few reads of the code and some boolean switches to figure out which path was taken for each flavor of input. I think there's still possible improvements here where, for example, the `put_in_reg_{s,z}ext64` helper doesn't use this logic so technically those helpers could also pattern match the "well atomic loads and vector extractions automatically do this for us" but that's a possible future improvement for later (and shouldn't be too too hard with some ISLE refactoring).
- Loading branch information
1 parent
20e090b
commit d89410e
Showing
11 changed files
with
936 additions
and
390 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
4 changes: 2 additions & 2 deletions
4
cranelift/codegen/src/isa/aarch64/lower/isle/generated_code.manifest
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,4 +1,4 @@ | ||
src/clif.isle be1359b4b6b153f378517c1dd95cd80f4a6bed0c7b86eaba11c088fd71b7bfe80a3c868ace245b2da0bfbbd6ded262ea9576c8e0eeacbf89d03c34a17a709602 | ||
src/prelude.isle d3d2a6a42fb778231a4cdca30995324e1293a9ca8073c5a27a501535759eb51f84a6718322a93dfba4b66ee4f0c9afce7dcec0428516ef0c5bc96e8c8b76925d | ||
src/isa/aarch64/inst.isle cec03d88680e8da01424eecc05ef73a48e4055d29fe841fceaa3e6ea4e7cb9abb887401bb5acb2e058c9fc993188640990b699e88272d62e243781b231cdfb0d | ||
src/isa/aarch64/lower.isle e1ae53adc953ad395feeecd8edc8bcfd288491a4e4a71510e5f06e221f767518c6e060ff0d795c7c2510b7d898cc8b9bc0313906412e0176605c33427926f828 | ||
src/isa/aarch64/inst.isle 70d7b319ba0b28173d2ef1820bd0e9c4b8cf7a5ab34475a43f03bdc5a6b945a7faf40d7b539a12050ddd8ebc4c6b0fe82df5940eaf966420bb4d58e7420d4206 | ||
src/isa/aarch64/lower.isle dfc622b2fecea98079fff182ce3443ada5448256662f598ea009caed3d9bcf6b4816f736a8c7f70142467febf8fc97230c57287f06e80e6101f3b401208c599c |
Oops, something went wrong.