Skip to content
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

rustc_target: RISC-V: add base I-related important extensions #138823

Open
wants to merge 1 commit into
base: master
Choose a base branch
from

Conversation

a4lg
Copy link

@a4lg a4lg commented Mar 22, 2025

Of ratified RISC-V features defined, this commit adds extensions satisfying following criteria:

  • Formerly a part of the I extension and splitted thereafter (now ratified as I + Zifencei + Zicsr + Zicntr + Zihpm) or
  • Dicoverable from newer versions of the Linux kernel and implemented as a part of std_detect's feature (Zihintpause) and
  • Available on LLVM 18.

This is based on the latest ratified ISA Manuals (version 20240411).

LLVM Definitions:

Additional (1):
One of those, Zicsr, is a dependency of many other ISA extensions and this commit adds correct dependencies to Zicsr.

Additional (2):
In RISC-V, G is an abbreviation of following extensions:

  • I
  • M
  • A
  • F
  • D
  • Zicsr (although implied by F)
  • Zifencei

and all RISC-V targets with the G abbreviation and targets for Android / VxWorks are updated accordingly.

Note:

Android will require RVA22 (likely RVA22U64) and some more extensions, which is a superset of RV64GC. For VxWorks, all BSPs currently distributed by Wind River are for boards with RV64GC (this commit also updates riscv32-wrs-vxworks though).


This is the version 4.
Ztso in the original proposal is removed on the PR version 2 due to the minimum LLVM version (non-experimental Ztso requires LLVM 19 while minimum LLVM version of Rust is 18). This is not back in PR version 3 and 4 after noticing adding Ztso is possible by checking host LLVM version because PR version 3 introduces compiler target changes (and adding more extensions would complicate the problems; sorry Zihintpause).

Version 4:

Related:

NOT Related but linked:

@rustbot r? @Amanieu
@rustbot label +T-compiler +O-riscv +A-target-feature

@rustbot rustbot added S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. T-compiler Relevant to the compiler team, which will review and decide on the PR/issue. A-target-feature Area: Enabling/disabling target features like AVX, Neon, etc. O-riscv Target: RISC-V architecture labels Mar 22, 2025
@a4lg a4lg force-pushed the riscv-feature-addition-base-i branch from 1649e52 to e04fb06 Compare March 24, 2025 02:30
@rustbot
Copy link
Collaborator

rustbot commented Mar 24, 2025

These commits modify compiler targets.
(See the Target Tier Policy.)

@a4lg a4lg changed the title rustc_target: Sync with stdarch (important parts) rustc_target: RISC-V: add base I-related important extensions Mar 24, 2025
@a4lg a4lg force-pushed the riscv-feature-addition-base-i branch from e04fb06 to b87155b Compare March 24, 2025 02:41
@taiki-e
Copy link
Member

taiki-e commented Mar 25, 2025

and all targets with either "riscv32gc" or "riscv64gc" are updated accordingly.

I think the following two that do not include extension names in the target name are also actually riscv64gc.

features: "+m,+a,+f,+d,+c,+zba,+zbb,+zbs,+v".into(),

features: "+m,+a,+f,+d,+c".into(),

@Amanieu
Copy link
Member

Amanieu commented Mar 28, 2025

@a4lg Could you update the 2 targets mentioned by @taiki-e. Then this should be good to merge.

@a4lg
Copy link
Author

a4lg commented Apr 1, 2025

@taiki-e I wasn't sure whether this is okay as RV64G.
@Amanieu Okay, I'll update that, too.

@a4lg
Copy link
Author

a4lg commented Apr 1, 2025

Confirmed.
Android will require RVA22 + vector + vector crypto extensions (I could not confirm which vector crypto extensions), which is a superset of RV(32|64)GCV.
I could not confirm minimum requirements of VxWorks but at least all BSPs currently supplied by Wind River are for boards with RV64GC (archive).

Of ratified RISC-V features defined, this commit adds extensions
satisfying following criteria:

*   Formerly a part of the "I" extension and splitted thereafter
    (now ratified as "I" + "Zifencei" + "Zicsr" + "Zicntr" + "Zihpm") or
*   Dicoverable from newer versions of the Linux kernel and implemented
    as a part of std_detect's feature ("Zihintpause").

This is based on the latest ratified ISA Manuals (version 20240411).

Additional (1):

One of those, "Zicsr", is a dependency of many other ISA extensions and
this commit adds correct dependencies to "Zicsr".

Additional (2):

In RISC-V, "G" is an abbreviation of following extensions:

*   "I"
*   "M"
*   "A"
*   "F"
*   "D"
*   "Zicsr" (although implied by "F")
*   "Zifencei"

and all RISC-V targets with the "G" abbreviation and targets for Android /
VxWorks are updated accordingly.

Note:

Android will require RVA22 (likely RVA22U64) and some more extensions,
which is a superset of RV64GC.  For VxWorks, all BSPs currently distributed
by Wind River are for boards with RV64GC (this commit also updates
riscv32-wrs-vxworks though).
@a4lg a4lg force-pushed the riscv-feature-addition-base-i branch from b87155b to 6f40f0c Compare April 2, 2025 01:15
@Amanieu
Copy link
Member

Amanieu commented Apr 2, 2025

@bors r+

@bors
Copy link
Collaborator

bors commented Apr 2, 2025

📌 Commit 6f40f0c has been approved by Amanieu

It is now in the queue for this repository.

@bors bors added S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. and removed S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. labels Apr 2, 2025
@a4lg
Copy link
Author

a4lg commented Apr 2, 2025

Reflected the changes (mainly based on the reviews but with an additional implication that is enabled by now merged #138742) and... thanks for approving!

Zalathar added a commit to Zalathar/rust that referenced this pull request Apr 2, 2025
…, r=Amanieu

rustc_target: RISC-V: add base `I`-related important extensions

Of ratified RISC-V features defined, this commit adds extensions satisfying following criteria:

*   Formerly a part of the `I` extension and splitted thereafter (now ratified as `I` + `Zifencei` + `Zicsr` + `Zicntr` + `Zihpm`) or
*   Dicoverable from newer versions of the Linux kernel and implemented as a part of `std_detect`'s feature (`Zihintpause`) and
*   Available on LLVM 18.

This is based on [the latest ratified ISA Manuals (version 20240411)](https://lf-riscv.atlassian.net/wiki/spaces/HOME/pages/16154769/RISC-V+Technical+Specifications).

LLVM Definitions:

*   [`Zifencei`](https://github.com/llvm/llvm-project/blob/llvmorg-20.1.0/llvm/lib/Target/RISCV/RISCVFeatures.td#L133-L137)
*   [`Zicsr`](https://github.com/llvm/llvm-project/blob/llvmorg-20.1.0/llvm/lib/Target/RISCV/RISCVFeatures.td#L116-L120)
*   [`Zicntr`](https://github.com/llvm/llvm-project/blob/llvmorg-20.1.0/llvm/lib/Target/RISCV/RISCVFeatures.td#L122-L124)
*   [`Zihpm`](https://github.com/llvm/llvm-project/blob/llvmorg-20.1.0/llvm/lib/Target/RISCV/RISCVFeatures.td#L153-L155)
*   [`Zihintpause`](https://github.com/llvm/llvm-project/blob/llvmorg-20.1.0/llvm/lib/Target/RISCV/RISCVFeatures.td#L139-L144)

Additional (1):
One of those, `Zicsr`, is a dependency of many other ISA extensions and this commit adds correct dependencies to `Zicsr`.

Additional (2):
In RISC-V, `G` is an abbreviation of following extensions:
*   `I`
*   `M`
*   `A`
*   `F`
*   `D`
*   `Zicsr` (although implied by `F`)
*   `Zifencei`

and all RISC-V targets with the `G` abbreviation and targets for Android / VxWorks are updated accordingly.

Note:

Android will require RVA22 (likely RVA22U64) and some more extensions, which is a superset of RV64GC.  For VxWorks, all BSPs currently distributed by Wind River are for boards with RV64GC (this commit also updates `riscv32-wrs-vxworks` though).

--------

This is the version 4.
`Ztso` in the original proposal is removed on the PR version 2 due to the minimum LLVM version (non-experimental `Ztso` requires LLVM 19 while minimum LLVM version of Rust is 18). This is not back in PR version 3 and 4 after noticing adding `Ztso` is possible by checking host LLVM version because PR version 3 introduces compiler target changes (and adding more extensions would complicate the problems; sorry `Zihintpause`).

Version 4:
*   Fixed some commit messages,
*   Added Android / VxWorks targets to imply `G` and
*   Added an implication from `Zve32x` to `Zicsr` (which makes all vector extension subsets to imply `Zicsr`)
    since rust-lang#138742 is now merged.

Related:
*   rust-lang#44839
    (`riscv_target_feature`)
*   rust-lang#114544
    (This PR can be a prerequisite of resolving a part of that tracking issue)
*   rust-lang#138742
    (Touches the same place and vector extensions depend on `Zicsr`)

NOT Related but linked:
*   rust-lang#132618
    (This PR won't be blocked by this issue since none of those extensions do not change the ABI)

`@rustbot` r? `@Amanieu`
`@rustbot` label +T-compiler +O-riscv +A-target-feature
bors added a commit to rust-lang-ci/rust that referenced this pull request Apr 2, 2025
Rollup of 14 pull requests

Successful merges:

 - rust-lang#135295 (Check empty SIMD vector in inline asm)
 - rust-lang#138003 (Add the new `amx` target features and the `movrs` target feature)
 - rust-lang#138823 (rustc_target: RISC-V: add base `I`-related important extensions)
 - rust-lang#138913 (Remove even more instances of `@ts-expect-error` from search.js)
 - rust-lang#138941 (Do not mix normalized and unnormalized caller bounds when constructing param-env for `receiver_is_dispatchable`)
 - rust-lang#139060 (replace commit placeholder in vendor status with actual commit)
 - rust-lang#139102 (coverage: Avoid splitting spans during span extraction/refinement)
 - rust-lang#139191 (small opaque type/borrowck cleanup)
 - rust-lang#139200 (Skip suggest impl or dyn when poly trait is not a real trait)
 - rust-lang#139208 (fix dead link netbsd.md)
 - rust-lang#139210 (chore: remove redundant backtick)
 - rust-lang#139212 (Update mdbook to 0.4.48)
 - rust-lang#139214 (Tell rustfmt to use the 2024 edition in ./x.py fmt)
 - rust-lang#139225 (move autodiff from EnzymeAD/Enzyme to our rust-lang/Enzyme soft-fork)

r? `@ghost`
`@rustbot` modify labels: rollup
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
A-target-feature Area: Enabling/disabling target features like AVX, Neon, etc. O-riscv Target: RISC-V architecture S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. T-compiler Relevant to the compiler team, which will review and decide on the PR/issue.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

5 participants