diff options
| author | Tsukasa OI <floss_rust@irq.a4lg.com> | 2025-09-13 21:59:39 +0000 |
|---|---|---|
| committer | Tsukasa OI <floss_rust@irq.a4lg.com> | 2025-09-14 05:08:19 +0000 |
| commit | 8df078a3f0071b311be2449407ae523f89ca6a33 (patch) | |
| tree | bf2cc8066b26eb3363c2a04e81c2bc28a9d33032 /compiler/rustc_codegen_llvm/src | |
| parent | 33387434c539d63a1a9a4f1e9793219256ac9293 (diff) | |
| download | rust-8df078a3f0071b311be2449407ae523f89ca6a33.tar.gz rust-8df078a3f0071b311be2449407ae523f89ca6a33.zip | |
RISC-V: Improvements of inline assembly uses
This commit performs various improvements (better register allocation,
less register clobbering on the worst case and better readability) of
RISC-V inline assembly use cases.
Note that it does not change the `p` module (which defines the "P"
extension draft instructions but very likely to change).
1. Use `lateout` as possible.
Unlike `out(reg)` and `in(reg)` pair, `lateout(reg)` and `in(reg)`
can share the same register because they state that the late-output
register is written after all the reads are performed.
It can improve register allocation.
2. Add `preserves_flags` option as possible.
While RISC-V doesn't have _regular_ condition codes, RISC-V inline
assembly in the Rust language assumes that some registers
(mainly vector state registers) may be overwritten by default.
By adding `preserves_flags` to the intrinsics corresponding
instructions without overwriting them, it can minimize register
clobbering on the worst case.
3. Use trailing semicolon.
As `asm!` declares an action and it doesn't return a value by
itself, it would be better to have trailing semicolon to denote that
an `asm!` call is effectively a statement.
4. Make most of `asm!` calls multi-lined.
`rustfmt` makes some simple (yet long) `asm!` calls multi-lined but
it does not perform formatting of complex `asm!` calls with inputs
and/or outputs. To keep consistency, it makes most of the `asm!`
calls multi-lined.
Diffstat (limited to 'compiler/rustc_codegen_llvm/src')
0 files changed, 0 insertions, 0 deletions
