about summary refs log tree commit diff
path: root/library/stdarch/crates/std_detect/src/detect/arch
AgeCommit message (Collapse)AuthorLines
2025-07-22Move `std_detect` from `library/stdarch` to `library`Jakub Beránek-1201/+0
2025-07-14Merge pull request #1837 from heiher/loong32Amanieu d'Antras-2/+2
loongarch: Add basic support for LoongArch32
2025-07-07Update stabilization version of certain x86 intrinsics to 1.89Amanieu d'Antras-5/+5
These were left as `CURRENT_RUSTC_VERSION` in the submodule.
2025-06-28loongarch: Add basic support for LoongArch32WANG Rui-2/+2
2025-06-19s390x: add feature detection for the z17 target featuresFolkert de Vries-0/+21
2025-06-09add s390x z17 target featuresFolkert de Vries-0/+15
2025-06-01RISC-V: Linux 6.15 `riscv_hwprobe` supportTsukasa OI-0/+12
This commit adds support for `riscv_hwprobe` on the Linux kernel 6.15. It adds feature detection of 8 extensions (4 of them are new in this). Existing RISC-V Extensions: 1. "Zicntr" 2. "Zihpm" 3. "Zalrsc" 4. "Zaamo" New RISC-V Extensions: 5. "Zicbom" 6. "Zfbfmin" 7. "Zvfbfmin" 8. "Zvfbfwma"
2025-05-31Stabilize `sha512`, `sm3` and `sm4` intrinsics and runtime detectionsayantn-3/+3
2025-05-31Stabilize keylocker intrinsics and runtime detectionsayantn-2/+2
2025-05-30Check cfg on features that stage0 compiler supportTsukasa OI-20/+0
Since the bootstrap compiler of Rust is bumped to the commit 5dadfd5c417f0b66816cb7ca662859e2c8751fb3 (version 1.88.0-beta.3 2025-05-11), some features should be safe to enable cfg checks. RISC-V Features: * "zicsr" * "zicntr" * "zihpm" * "zifencei" * "zihintntl" * "zihintpause" * "zimop" * "zicboz" * "zicond" * "ztso" * "zfa" * "zca" * "zcb" * "zcmop" * "b" x86 Features: * "amx-avx512" * "amx-fp8" * "amx-movrs" * "amx-tf32" * "amx-transpose"
2025-05-26std_detect: RISC-V platform guide documentation (non-table part)Tsukasa OI-0/+15
This is a partial revert of a revert, making the commit e907456b2e10622ccd854a3bba8d02ce170b5dbb come around again for non-table part.
2025-05-17Correct rustc version for the stabilization of runtime detection of VEX ↵sayantn-5/+5
variants of avx512
2025-05-17Stabilize runtime detection of VEX variants of avx512sayantn-5/+5
2025-05-12Partially stabilize LoongArch target featuresWANG Rui-9/+9
2025-05-01Revert "std_detect: RISC-V platform guide documentation"Tsukasa OI-126/+78
This reverts commit e907456b2e10622ccd854a3bba8d02ce170b5dbb. This is due to a CI failure (technically broken HTML with duplicate IDs) caused by this commit (visibly fine but invalid per the HTML specification and detected by the LinkCheck tool on the Rust CI process). The author independently working on a rustdoc enhancement to enable writing multiple references to a single footnote. Once that change makes it to the stage0 compiler (the next beta), the original change will be acceptable again (postponed for possibly the version 1.89 cycle).
2025-04-23std_detect: RISC-V platform guide documentationTsukasa OI-78/+126
Since there's no architectural feature detection on RISC-V (unlike `CPUID` on x86 architectures and some system registers on Arm/AArch64), runtime feature detection entirely depends on the platform-specific facility. As a result, availability of each feature heavily depends on the platform and its version. To help users make a decision for feature checking on a RISC-V system, this commit adds a platform guide with minimum supported platform versions. Note: It intentionally omits the description of the reverse implication related to *extension groups* (such like implication of `B` *from* its members: `Zba`, `Zbb` and `Zbs` extensions) because it currently does not synchronize well with the `-Ctarget-feature` compiler option (due to missing reverse implication checks using `cfg` and due to constraints of the current Rust's feature handling). Instead, it only describes forward implications (like `D` implying `F`) due to the fact that it relatively synchronizes well between Rust and `stdarch` for this kind of feature handling (not fully synchronized though). Still, an extension group is considered "supported" once the platform/version supports runtime detection of all members in it.
2025-04-23Add power9 and power8 target-featuresLuca Barbato-0/+26
2025-04-16RISC-V: Remove privileged extensions for nowTsukasa OI-24/+0
Until in-kernel feature detection is implemented, runtime detection of privileged extensions is temporally removed along with features themselves since none of such privileged features are stable. Co-Authored-By: Taiki Endo <te316e89@gmail.com> Co-Authored-By: Amanieu d'Antras <amanieu@gmail.com>
2025-04-16RISC-V: `riscv_hwprobe`-based feature detection on Linux / AndroidTsukasa OI-0/+130
This commit implements `riscv_hwprobe`-based feature detection as available on newer versions of the Linux kernel. It also queries whether the vector extensions are enabled using `prctl` but this is not supported on QEMU's userland emulator (as of version 9.2.3) and use the auxiliary vector as a fallback. Currently, all extensions discoverable from the Linux kernel version 6.14 and related extension groups (except "Supm", which reports the existence of `prctl`-based pointer masking control and too OS-dependent) are implemented. Co-Authored-By: Taiki Endo <te316e89@gmail.com>
2025-04-16RISC-V: Add placeholder for the "B" extensionTsukasa OI-2/+5
The "B" extension is once abandoned (instead, it is ratified as a collection of "Zb*" extensions). However, it is later redefined and ratified as a superset of "Zba", "Zbb" and "Zbs" extensions (but not "Zbc" carry-less multiplication for limited benefits and implementation cost). Although non-functional (because feature detection is not yet implemented), it provides the foundation to implement this extension (along with straightforward documentation showing subsets of "B").
2025-04-16RISC-V: Add two "A" extension subsetsTsukasa OI-0/+6
The "A" extension comprises instructions provided by the "Zaamo" and "Zalrsc" extensions. To prepare for the "Zacas" extension (which provides compare-and-swap instructions and discoverable from Linux) which depends on the "Zaamo" extension, it would be better to support those subsets.
2025-04-12RISC-V: tidying: Fix separation of I-related extensionsTsukasa OI-1/+1
The author intended to split: 1. Former "I" extensions 2. Other "I"-related extensions but incorrectly separated between "Zihpm" (a supplement of "Zicntr" which is a former "I" extension) and "Zifencei" (a former "I" extension) while the author intended making a separation between "Zifencei" and "Zihintpause" (not a part of "I"). This commit fixes the separation.
2025-04-12RISC-V: doc: tidying: Move link to the ISA ManualTsukasa OI-2/+2
Not only moving the link to the end of the section, this commit changes the link so that we can reach to the *ratified* ISA manuals (note that, while the original URL (GitHub) is a good place to browse the latest draft, it's not easy to know which is the ratified version; even "Releases" page is not helpful since it's regularly updated).
2025-04-12RISC-V: doc: Updated status and clarificationTsukasa OI-24/+21
Some extensions are ratified at least on the ISA specification version 20240411. This commit moves such extensions. This commit also changes that: 1. Lower indentation of "Zk*" and "Zbk*" extensions to avoid extension groups from being misleading inside this section. 2. Raise indentation of "Zfhmin" and "Zhinxmin" extensions to show that they are a strict subset of "Zfh" and "Zhinx" (respectively). 3. Clarify that "s" is not an extension but a feature notifying the existence of the supervisor-level ISA. 4. Clarify that "h" is not just an existence of the hypervisor-level ISA but is also an extension name ("H").
2025-04-12RISC-V: doc: Capitalize some words for consistencyTsukasa OI-5/+5
RISC-V extension names are capitalized for consistency.
2025-04-10Disable cfg check for the recently-merged target features to allow stdarch ↵sayantn-0/+10
update
2025-04-07Add feature detection for new amx variants and movrssayantn-2/+20
2025-04-06RISC-V: check cfg (batch 1)Tsukasa OI-5/+0
rust-lang/rust#138823 added five new extensions as compiler target features. This commit reflects that fact and now checks static target features on `std::arch::is_riscv_feature_detected!` as well. * "Zicsr" * "Zicntr" * "Zihpm" * "Zifencei" * "Zihintpause"
2025-03-24tentatively remove the "B" RISC-V extension from the documentationTsukasa OI-1/+1
Although the "B" extension is redefined and ratified, keeping this in the documentation as-is have two issues: * "B" extension is not added to `riscv.rs` yet (to be added later). * "B" extension is ratified as a combination of "Zba", "Zbb" and "Zbs" extensions and "Zbc" is *not* a part of "B" itself (despite that it is listed under "B"), which makes the documentation misleading. This commit tentatively removes the reference to the "B" extension and replaced with "Bit Manipulation Extensions" without an extension name.
2025-03-24reword RISC-V feature documentationTsukasa OI-43/+43
As the version 20240411 of the RISC-V ISA Manual changed wording to describe many of the standard extensions, this commit largely follows this scheme in general. In many cases, words "Standard Extension" are replaced with "Extension" following the latest ratified ISA Manual. Some RISC-V extensions had tentative summary but it also fixes that (e.g. "Zihintpause"). Following extensions are described in parity with corresponding extensions using floating-point registers: * "Zfinx" Extension for Single-Precision Floating-Point in Integer Registers * "Zdinx" Extension for Double-Precision Floating-Point in Integer Registers * "Zhinx" Extension for Half-Precision Floating-Point in Integer Registers * "Zhinxmin" Extension for Minimal Half-Precision Floating-Point in Integer Registers Following extensions are named against the ISA Manual naming but considered inconsistency inside the ISA manual: * "Zfhmin" Extension for Minimal Half-Precision Floating-Point ISA Manual: "Zfhmin" Standard Extension for Minimal Half-Precision Floating-Point * "V" Extension for Vector Operations ISA Manual: "V" Standard Extension for Vector Operations Following extension is removed from the latest ratified ISA Manual but named like others: * "Zam" Extension for Misaligned Atomics "Zb*" extensions are described like "Extension for ..." using partial summary per extension (including cryptography-related "Zbk*" extensions). "Zk*" extensions are described like "Cryptography Extension for ..." using partial summary per extension (e.g. 'Zkne - NIST Suite: AES Encryption' in the ISA Manual to '"Zkne" Cryptography Extension for NIST Suite: AES Encryption') except following extensions: * "Zkr" Entropy Source Extension Following the general rule will make the description redundant. * "Zk" Cryptography Extension for Standard scalar cryptography The last word "extension" is removed as seemed redundant. Link: <https://lf-riscv.atlassian.net/wiki/spaces/HOME/pages/16154769/RISC-V+Technical+Specifications> (ISA Specifications, Version 20240411; published in May 2024)
2025-03-24reorder all RISC-V features for maintenanceTsukasa OI-51/+59
All RISC-V Features are reordered for better maintainability. The author has a plan to add many RISC-V ratified extensions (mainly discoverable from Linux) and this is a part of preparation. Sections are divided as follows: * Base ISAs * "I"-related * Extensions formerly a part of the base "I" extension but divided later (now all of them are ratified). * Other user-mode extensions "Zi*". * "M"-related (currently "M" only) * "A"-related "A", "Za*" and "Ztso" which is named differently but absolutely related to memory operations. * Base FP extensions * Base FP extensions using integer registers * "C"-related (currently "C" only) * "B"-related (except cryptography-related "Zbk*") * Scalar cryptography extensions (including "Zbk*") * Base Vector extensions (currently "V" only) * Ratified privileged extensions * Non-extensions and non-ratified extensions which is *not* going to be ratified, at least in the draft form The last section needs some explanation. "S" is not an extension (although some buggy implementations such as QEMU up to 7.0 emitted this character as well as "U" as an extension) and the DeviceTree parser in the Linux kernel explicitly workarounds this issue. There's no plan for ratification of the single-letter "J" extension (there's a room for redefinition like the "B" extension but unlikely). Instead, pointer masking extensions including "Supm" is one of the results of the task group discussing J extension*s*. There's also an instruction in the "Zfa" extension which accelerates FP-to-int conversion matching JavaScript semantics. "P" is being actively discussed (and will result in a single-letter "P" extension and various "Zp*" extensions) but it seems there needs some time until ratification. And there's one Rust-specific issue: Rust implements Packed-SIMD intrinsics based on an early draft of the "P" extension and they are *very unlikely* kept as-is. For instance, `add16` does not follow standard RISC-V instruction naming (ADD16 is the name from the Andes' proposal) and going to be renamed. Before moving "P" to above, we have to clearly understand what the final "P" extension will be and resolve existing intrinsics.
2025-03-24Temporary fix: change the feature gate of VEX variantssayantn-5/+5
2025-03-20std_detect: Add target features for LoongArch v1.1WANG Rui-0/+15
2025-03-20Fix: stabilized version of RISC-V feature macroTsukasa OI-21/+21
RISC-V runtime feature detection macro is stabilized on Rust 1.78.0, not Rust 1.76.0.
2025-02-23add newly-added s390x features to `is_s390x_feature_detected`Folkert de Vries-0/+33
2025-02-13Add runtime feature detection for keylockersayantn-0/+6
2025-01-16add `is_s390x_feature_detected`Folkert de Vries-0/+17
2024-11-08Mark feature with missing corresponding target feature cfgs as suchUrgau-0/+27
Computed by diffing of: $ rg "[ ]+@FEATURE: .*: \"(.*)\";" -r '$1' --no-filename \ crates/std_detect/src/detect/ | sort | uniq With (from the main Rust repo[^1]): $ rg "target_feature" tests/ui/check-cfg/well-known-values.stderr [^1]: https://github.com/rust-lang/rust/blob/e8c698bb3bdc121ac7f65919bd16d22f6567a3f1/tests/ui/check-cfg/well-known-values.stderr#L177
2024-10-27std_detect: Add pauth-lr aarch64 target featureKajetan Puchalski-0/+3
Add feature detection for aarch64 FEAT_PAuth_LR. There is currently no Linux cpuinfo support so the OS-specific lines are commented out.
2024-09-18std_detect: Add sme-b16b16 as an explicit aarch64 target featureKajetan Puchalski-2/+5
LLVM 20 split out what used to be called b16b16 and correspond to aarch64 FEAT_SVE_B16B16 into sve-b16b16 and sme-b16b16. Add sme-b16b16 as an explicit feature and update the detection accordingly.
2024-07-25std_detect: Sort aarch64 featuresKajetan Puchalski-153/+153
Alphabetically sort the list of aarch64 features. The list was getting a bit too chaotic so it was worth properly sorting.
2024-07-25std_detect: Add aarch64/linux/LLVM SME featuresKajetan Puchalski-0/+39
Add detection for SME features supported by LLVM and the Linux Kernel. Include commented-out hwcap fields for features supported by Linux but not by LLVM. This commit adds feature detection for the following features: - FEAT_SME - FEAT_SME_F16F16 - FEAT_SME_F64F64 - FEAT_SME_F8F16 - FEAT_SME_F8F32 - FEAT_SME_FA64 - FEAT_SME_I16I64 - FEAT_SME_LUTv2 - FEAT_SME2 - FEAT_SME2p1 - FEAT_SSVE_FP8DOT2 - FEAT_SSVE_FP8DOT4 - FEAT_SSVE_FP8FMA Linux features: https://github.com/torvalds/linux/blob/master/arch/arm64/include/uapi/asm/hwcap.h LLVM features: llvm-project/llvm/lib/Target/AArch64/AArch64.td
2024-07-25std_detect: Add aarch64/linux/LLVM featuresKajetan Puchalski-2/+61
Add detection for various aarch64 CPU features already supported by LLVM and Linux. This commit adds feature detection for the following features: - FEAT_CSSC - FEAT_ECV - FEAT_FAMINMAX - FEAT_FLAGM2 - FEAT_FP8 - FEAT_FP8DOT2 - FEAT_FP8DOT4 - FEAT_FP8FMA - FEAT_HBC - FEAT_LSE128 - FEAT_LUT - FEAT_MOPS - FEAT_LRCPC3 - FEAT_SVE_B16B16 - FEAT_SVE2p1 - FEAT_WFxT It also adds feature detection for FEAT_FPMR. It is somewhat of a special case because FPMR only exists as a feature in LLVM 18, it has been removed from the LLVM upstream. On that account the intention is for it to be detectable at runtime through stdarch but not have a corresponding compile-time Rust target feature. Linux features: https://github.com/torvalds/linux/blob/master/arch/arm64/include/uapi/asm/hwcap.h LLVM features: llvm-project/llvm/lib/Target/AArch64/AArch64.td
2024-07-06Implemented runtime detection of `xop` target-featuresayantn-0/+2
2024-07-06Added runtime detectionsayantn-0/+15
Cannot do a `cupid` test because they don't support `amx`.
2024-07-06Add detection for SHA512, SM3 and SM4sayantn-0/+9
Cannot cross-verify with `cupid` because they do not have these features yet.
2024-06-23Added runtime detectionsayantn-0/+15
Expanded the cache size to 93 (we will need this in near future) Fixed detection of VAES, GFNI and VPCLMULQDQ Could not test with `cupid` because they do not support these yet
2024-03-13arm64ecDaniel Paoliello-2/+2
2024-03-07std_detect: loongarch: Add runtime detectable features from LLVMWANG Rui-3/+15
* f * d * frecipe * lbt
2024-03-07std_detect: loongarch: Remove features not supported by LLVMWANG Rui-24/+0