about summary refs log tree commit diff
path: root/library/stdarch/crates/std_detect/src
AgeCommit message (Collapse)AuthorLines
2025-03-24resolve `clippy::doc_lazy_continuation`Tsukasa OI-3/+3
This commit adds indentation as suggested by the Clippy warning.
2025-03-24silence `clippy::eq_op` while checkingTsukasa OI-0/+1
This error occurs when the RISC-V "A" Extension is being tested.
2025-03-24std_detect: Support detecting more features on AArch64 WindowsTaiki Endo-1/+49
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/+28
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-25Remove some `allow(unsafe_op_in_unsafe_fn)`s and use target_feature 1.1 in ↵Eduardo Sánchez Muñoz-1/+0
examples
2025-02-23add newly-added s390x features to `is_s390x_feature_detected`Folkert de Vries-0/+70
2025-02-13Add runtime feature detection for keylockersayantn-0/+13
2025-02-09Format with style edition 2024Eric Huss-13/+13
2025-02-09Allow unsafe_op_in_unsafe_fnEric Huss-0/+1
Because stdarch has a really large number of unsafe functions with single-line calls, `unsafe_op_in_unsafe_fn` would end up adding a lot of noise, so for now we will allow it to migrate to 2024.
2025-02-09Apply missing_unsafe_on_externEric Huss-2/+2
2025-01-16add `is_s390x_feature_detected`Folkert de Vries-8/+133
2024-12-23Expand feature detection on AArch64 DarwinLaine Taffin Altman-38/+84
This reflects the currently available set of sysctl values as of macOS 15, on 2024-12-21. Features not (yet) exposed by `is_aarch64_feature_detected` have been left in comments to document their existence for the future.
2024-11-30Fix the `features` macro.Nicholas Nethercote-1/+1
The first rule of the `features` macro looks like this: ``` macro_rules! features { ( @TARGET: $target:ident; @CFG: $cfg:meta; @MACRO_NAME: $macro_name:ident; @MACRO_ATTRS: $(#[$macro_attrs:meta])* $(@BIND_FEATURE_NAME: $bind_feature:tt; $feature_impl:tt; $(#[$deprecate_attr:meta];)?)* $(@NO_RUNTIME_DETECTION: $nort_feature:tt; )* $(@FEATURE: #[$stability_attr:meta] $feature:ident: $feature_lit:tt; $(without cfg check: $feature_cfg_check:literal;)? $(implied by target_features: [$($target_feature_lit:tt),*];)? $(#[$feature_comment:meta])*)* ) => { ``` Notice all the `tt` specifiers. They are used because they are forwarded to another macro. Only `ident`, `lifetime`, and `tt` specifiers can be forwarded this way. But there is an exception: `$feature_lit:tt`, which was added recently. In theory it should cause an error like this: ``` error: no rules expected `literal` metavariable --> /home/njn/dev/rust3/library/stdarch/crates/std_detect/src/detect/macros.rs:54:91 | 51 | / macro_rules! $macro_name { 52 | | $( 53 | | ($feature_lit) => { 54 | | $crate::detect_feature!($feature, $feature_lit $(, without cfg check: $feature_cfg_check)? ... | | ^^^^^^^^^^^^^^^^^^ no rules expected this token in macro call ... | 88 | | }; 89 | | } | |_________- in this expansion of `is_x86_feature_detected!` | ::: std/tests/run-time-detect.rs:145:27 | 145 | println!("tsc: {:?}", is_x86_feature_detected!("tsc")); | ------------------------------- in this macro invocation | note: while trying to match keyword `true` --> /home/njn/dev/rust3/library/stdarch/crates/std_detect/src/detect/macros.rs:12:55 | 12 | ($feature:tt, $feature_lit:tt, without cfg check: true) => { | ^^^^ = note: captured metavariables except for `:tt`, `:ident` and `:lifetime` cannot be compared to other tokens = note: see <https://doc.rust-lang.org/nightly/reference/macros-by-example.html#forwarding-a-matched-fragment> for more information ``` (The URL at the end of the error has more details about this forwarding limitation.) In practice it doesn't cause this error. I'm not sure why, but the existing macro implementation in rustc is far from perfect, so it's believable that it does the wrong thing here. Why does this matter? Because https://github.com/rust-lang/rust/pull/124141 is modifying the macro implementation, and when that PR is applied the error *does* occur. (It's one of several cases I have found where the existing compiler accepts code it shouldn't, but #124141 causes that code to be rejected.) Fortunately the fix is simple: replace the `literal` specifier with `tt`.
2024-11-30Enable `without cfg check` test in `std_detect`Urgau-3/+2
2024-11-08Add compile-time tests against unexpected target features cfgsUrgau-0/+24
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-11-08Add ability to declare a feature without cfg checkingUrgau-1/+5
This is necessary to avoid `unexpected_cfgs` warnings for unexpected/ missing target features, in user code.
2024-10-27std_detect: Add pauth-lr aarch64 target featureKajetan Puchalski-0/+7
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-30Minor lintingYuri Astrakhan-1/+1
2024-09-18std_detect: Add sme-b16b16 as an explicit aarch64 target featureKajetan Puchalski-7/+10
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-09-18Use C string literalTaiki Endo-40/+39
2024-09-18std_detect: Fix link in mips.rsTaiki Endo-1/+1
2024-09-18std_detect: Use elf_aux_info on FreeBSDTaiki Endo-58/+22
2024-09-14Enable feature detection on all Apple/Darwin targetsMads Marquart-3/+5
Tested in the simulator and on the device I had lying around, a 1st generation iPad Mini (which isn't Aarch64, but shows that the `sysctlbyname` calls still work even there, even if they return false). `sysctlbyname` _should_ be safe to use without causing rejections from the app store, as its usage is documented in: https://developer.apple.com/documentation/kernel/1387446-sysctlbyname/determining_instruction_set_characteristics Also, the standard library will use these soon anyhow, so this shouldn't affect the situation: https://github.com/rust-lang/rust/pull/129019
2024-07-25std_detect: Update aarch64 feature dependencies to LLVM upstreamKajetan Puchalski-26/+29
Feature dependencies for newer aarch64 fetaures differ between LLVM 18 in the Rust tree and upstream LLVM 19. This commit updates those dependencies to reflect new LLVM upstream changes.
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/+115
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-9/+171
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/+3
2024-07-06Added runtime detectionsayantn-0/+26
Cannot do a `cupid` test because they don't support `amx`.
2024-07-06Add detection for SHA512, SM3 and SM4sayantn-0/+13
Cannot cross-verify with `cupid` because they do not have these features yet.
2024-06-29Remove `has_cpuid`Jubilee Young-7/+2
2024-06-23Added runtime detectionsayantn-20/+55
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-05-07Remove libc dependency on Windows by using Win32 to get env varsDaniel Paoliello-9/+34
2024-03-13arm64ecDaniel Paoliello-3/+4
2024-03-07std_detect: loongarch: Add runtime detectable features from LLVMWANG Rui-4/+45
* f * d * frecipe * lbt
2024-03-07std_detect: loongarch: Remove features not supported by LLVMWANG Rui-32/+0
2024-03-05check sub-leaf to detect avx512bf16Mingzhuo Yin-7/+7
Signed-off-by: Mingzhuo Yin <yinmingzhuo@gmail.com>
2024-03-05fix: invalid bit for detecting avx512 featureMingzhuo Yin-9/+15
Signed-off-by: Mingzhuo Yin <yinmingzhuo@gmail.com>
2024-02-24feat: std_detect avx512fp16usamoi-6/+11
Signed-off-by: usamoi <usamoi@outlook.com>
2024-02-16Improve feature detect for combined aarch64 featuresAdam Gemmell-10/+12
LLVM's `ssbs` and `mte` target_features represent two Arm features. Linux's HWCAP also represents the same two features, so this is just a documentation update. LLVM's `ras` target_feature represents two Arm features - FEAT_RAS and FEAT_RASv1p1. There is no runtime detection for this, so this is a no-op in stdarch. LLVM's `aes` feature covers both `FEAT_AES` and `FEAT_PMULL`, but Linux exposes seperate feature bits. This patch makes the `aes` target_feature correctly shortcut runtime `pmull` detection and also makes the `aes` feature check for `pmull` at runtime to bring it in line with the target_feature behaviour. In practice I think this makes the two runtime features identical since the ID_AA64ISAR0_EL1 register does not allow for PMULL without AES.
2024-02-14Remove last mention of `stdsimd`daxpedda-8/+1
2024-01-16Add CPU detection for macOS/aarch64.Makoto Kato-0/+101
2024-01-05Fix std_detect not being an unstable crateAmanieu d'Antras-3/+3
More fallout from #1486
2024-01-04Fix std build failure on non-x86 architecturesAmanieu d'Antras-1/+7
This is more fallout from #1486
2024-01-02Fixes for use in the standard libraryAmanieu d'Antras-0/+1
2023-11-30Stabilize Ratified RISC-V Target FeaturesGijs Burghoorn-64/+51
As shortly discussed on Zulip (https://rust-lang.zulipchat.com/#narrow/stream/250483-t-compiler.2Frisc-v/topic/Stabilization.20of.20RISC-V.20Target.20Features/near/394793704), this commit stabilizes the ratified RISC-V instruction bases and extensions. Specifically, this commit stabilizes the: * Atomic Instructions (A) on v2.0 * Compressed Instructions (C) on v2.0 * Integer Multiplication and Division (M) on v2.0 * Bit Manipulations (B) on v1.0 listed as `zba`, `zbc`, `zbs` * Scalar Cryptography (Zk) v1.0.1 listed as `zk`, `zkn`, `zknd`, `zkne`, `zknh`, `zkr`, `zks`, `zksed`, `zksh`, `zkt`, `zbkb`, `zbkc` `zkbx`
2023-10-31std_detect: Add support for LoongArchZHAI Xiang-1/+95
Co-authored-by: WANG Rui <wangrui@loongson.cn>