Skip to content

Commit 2b7671c

Browse files
authored
Add crypto target feature detection to arm32 (#833)
1 parent abe96ca commit 2b7671c

File tree

3 files changed

+19
-0
lines changed

3 files changed

+19
-0
lines changed

crates/std_detect/src/detect/arch/arm.rs

+2
Original file line numberDiff line numberDiff line change
@@ -16,4 +16,6 @@ features! {
1616
/// Polynomial Multiply
1717
@FEATURE: #[unstable(feature = "stdsimd", issue = "27731")] crc: "crc";
1818
/// CRC32 (Cyclic Redundancy Check)
19+
@FEATURE: #[unstable(feature = "stdsimd", issue = "27731")] crypto: "crypto";
20+
/// Crypto: AES + PMULL + SHA1 + SHA2
1921
}

crates/std_detect/src/detect/os/linux/arm.rs

+16
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,14 @@ pub(crate) fn detect_features() -> cache::Initializer {
2020
enable_feature(&mut value, Feature::neon, bit::test(auxv.hwcap, 12));
2121
enable_feature(&mut value, Feature::pmull, bit::test(auxv.hwcap2, 1));
2222
enable_feature(&mut value, Feature::crc, bit::test(auxv.hwcap2, 4));
23+
enable_feature(
24+
&mut value,
25+
Feature::crypto,
26+
bit::test(auxv.hwcap2, 0)
27+
&& bit::test(auxv.hwcap2, 1)
28+
&& bit::test(auxv.hwcap2, 2)
29+
&& bit::test(auxv.hwcap2, 3),
30+
);
2331
return value;
2432
}
2533

@@ -31,6 +39,14 @@ pub(crate) fn detect_features() -> cache::Initializer {
3139
);
3240
enable_feature(&mut value, Feature::pmull, c.field("Features").has("pmull"));
3341
enable_feature(&mut value, Feature::crc, c.field("Features").has("crc32"));
42+
enable_feature(
43+
&mut value,
44+
Feature::crypto,
45+
c.field("Features").has("aes")
46+
&& c.field("Features").has("pmull")
47+
&& c.field("Features").has("sha1")
48+
&& c.field("Features").has("sha2"),
49+
);
3450
return value;
3551
}
3652
value

crates/std_detect/tests/cpu-detection.rs

+1
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ fn arm_linux() {
2525
println!("neon: {}", is_arm_feature_detected!("neon"));
2626
println!("pmull: {}", is_arm_feature_detected!("pmull"));
2727
println!("crc: {}", is_arm_feature_detected!("crc"));
28+
println!("crypto: {}", is_arm_feature_detected!("crypto"));
2829
}
2930

3031
#[test]

0 commit comments

Comments
 (0)