3
3
//! <https://developer.apple.com/documentation/kernel/1387446-sysctlbyname/determining_instruction_set_characteristics>
4
4
5
5
use crate :: detect:: { cache, Feature } ;
6
+ use core:: ffi:: CStr ;
6
7
7
8
#[ inline]
8
- fn _sysctlbyname ( name : & str ) -> bool {
9
+ fn _sysctlbyname ( name : & CStr ) -> bool {
9
10
use libc;
10
11
11
12
let mut enabled: i32 = 0 ;
@@ -14,7 +15,7 @@ fn _sysctlbyname(name: &str) -> bool {
14
15
15
16
let ret = unsafe {
16
17
libc:: sysctlbyname (
17
- name. as_ptr ( ) as * const i8 ,
18
+ name. as_ptr ( ) ,
18
19
enabled_ptr,
19
20
& mut enabled_len,
20
21
core:: ptr:: null_mut ( ) ,
@@ -38,35 +39,35 @@ pub(crate) fn detect_features() -> cache::Initializer {
38
39
}
39
40
} ;
40
41
41
- let asimd = _sysctlbyname ( "hw.optional.AdvSIMD\0 " ) ;
42
- let pmull = _sysctlbyname ( "hw.optional.arm.FEAT_PMULL\0 " ) ;
43
- let fp = _sysctlbyname ( "hw.optional.floatingpoint\0 " ) ;
44
- let fp16 = _sysctlbyname ( "hw.optional.arm.FEAT_FP16\0 " ) ;
45
- let crc = _sysctlbyname ( "hw.optional.armv8_crc32\0 " ) ;
46
- let lse = _sysctlbyname ( "hw.optional.arm.FEAT_LSE\0 " ) ;
47
- let lse2 = _sysctlbyname ( "hw.optional.arm.FEAT_LSE2\0 " ) ;
48
- let rdm = _sysctlbyname ( "hw.optional.arm.FEAT_RDM\0 " ) ;
49
- let rcpc = _sysctlbyname ( "hw.optional.arm.FEAT_LRCPC\0 " ) ;
50
- let rcpc2 = _sysctlbyname ( "hw.optional.arm.FEAT_LRCPC2\0 " ) ;
51
- let dotprod = _sysctlbyname ( "hw.optional.arm.FEAT_DotProd\0 " ) ;
52
- let fhm = _sysctlbyname ( "hw.optional.arm.FEAT_FHM\0 " ) ;
53
- let flagm = _sysctlbyname ( "hw.optional.arm.FEAT_FlagM\0 " ) ;
54
- let ssbs = _sysctlbyname ( "hw.optional.arm.FEAT_SSBS\0 " ) ;
55
- let sb = _sysctlbyname ( "hw.optional.arm.FEAT_SB\0 " ) ;
56
- let paca = _sysctlbyname ( "hw.optional.arm.FEAT_PAuth\0 " ) ;
57
- let dpb = _sysctlbyname ( "hw.optional.arm.FEAT_DPB\0 " ) ;
58
- let dpb2 = _sysctlbyname ( "hw.optional.arm.FEAT_DPB2\0 " ) ;
59
- let frintts = _sysctlbyname ( "hw.optional.arm.FEAT_FRINTTS\0 " ) ;
60
- let i8mm = _sysctlbyname ( "hw.optional.arm.FEAT_I8MM\0 " ) ;
61
- let bf16 = _sysctlbyname ( "hw.optional.arm.FEAT_BF16\0 " ) ;
62
- let bti = _sysctlbyname ( "hw.optional.arm.FEAT_BTI\0 " ) ;
63
- let fcma = _sysctlbyname ( "hw.optional.arm.FEAT_FCMA\0 " ) ;
64
- let aes = _sysctlbyname ( "hw.optional.arm.FEAT_AES\0 " ) ;
65
- let sha1 = _sysctlbyname ( "hw.optional.arm.FEAT_SHA1\0 " ) ;
66
- let sha2 = _sysctlbyname ( "hw.optional.arm.FEAT_SHA256\0 " ) ;
67
- let sha3 = _sysctlbyname ( "hw.optional.arm.FEAT_SHA3\0 " ) ;
68
- let sha512 = _sysctlbyname ( "hw.optional.arm.FEAT_SHA512\0 " ) ;
69
- let jsconv = _sysctlbyname ( "hw.optional.arm.FEAT_JSCVT\0 " ) ;
42
+ let asimd = _sysctlbyname ( c "hw.optional.AdvSIMD") ;
43
+ let pmull = _sysctlbyname ( c "hw.optional.arm.FEAT_PMULL") ;
44
+ let fp = _sysctlbyname ( c "hw.optional.floatingpoint") ;
45
+ let fp16 = _sysctlbyname ( c "hw.optional.arm.FEAT_FP16") ;
46
+ let crc = _sysctlbyname ( c "hw.optional.armv8_crc32") ;
47
+ let lse = _sysctlbyname ( c "hw.optional.arm.FEAT_LSE") ;
48
+ let lse2 = _sysctlbyname ( c "hw.optional.arm.FEAT_LSE2") ;
49
+ let rdm = _sysctlbyname ( c "hw.optional.arm.FEAT_RDM") ;
50
+ let rcpc = _sysctlbyname ( c "hw.optional.arm.FEAT_LRCPC") ;
51
+ let rcpc2 = _sysctlbyname ( c "hw.optional.arm.FEAT_LRCPC2") ;
52
+ let dotprod = _sysctlbyname ( c "hw.optional.arm.FEAT_DotProd") ;
53
+ let fhm = _sysctlbyname ( c "hw.optional.arm.FEAT_FHM") ;
54
+ let flagm = _sysctlbyname ( c "hw.optional.arm.FEAT_FlagM") ;
55
+ let ssbs = _sysctlbyname ( c "hw.optional.arm.FEAT_SSBS") ;
56
+ let sb = _sysctlbyname ( c "hw.optional.arm.FEAT_SB") ;
57
+ let paca = _sysctlbyname ( c "hw.optional.arm.FEAT_PAuth") ;
58
+ let dpb = _sysctlbyname ( c "hw.optional.arm.FEAT_DPB") ;
59
+ let dpb2 = _sysctlbyname ( c "hw.optional.arm.FEAT_DPB2") ;
60
+ let frintts = _sysctlbyname ( c "hw.optional.arm.FEAT_FRINTTS") ;
61
+ let i8mm = _sysctlbyname ( c "hw.optional.arm.FEAT_I8MM") ;
62
+ let bf16 = _sysctlbyname ( c "hw.optional.arm.FEAT_BF16") ;
63
+ let bti = _sysctlbyname ( c "hw.optional.arm.FEAT_BTI") ;
64
+ let fcma = _sysctlbyname ( c "hw.optional.arm.FEAT_FCMA") ;
65
+ let aes = _sysctlbyname ( c "hw.optional.arm.FEAT_AES") ;
66
+ let sha1 = _sysctlbyname ( c "hw.optional.arm.FEAT_SHA1") ;
67
+ let sha2 = _sysctlbyname ( c "hw.optional.arm.FEAT_SHA256") ;
68
+ let sha3 = _sysctlbyname ( c "hw.optional.arm.FEAT_SHA3") ;
69
+ let sha512 = _sysctlbyname ( c "hw.optional.arm.FEAT_SHA512") ;
70
+ let jsconv = _sysctlbyname ( c "hw.optional.arm.FEAT_JSCVT") ;
70
71
71
72
enable_feature ( Feature :: asimd, asimd) ;
72
73
enable_feature ( Feature :: pmull, pmull) ;
0 commit comments