luaur_code_gen/functions/
get_cpu_features_a_64.rs1use crate::enums::features_a_64::FeaturesA64;
2
3pub fn get_cpu_features_a_64() -> u32 {
4 let mut result: u32 = 0;
5
6 #[cfg(target_os = "macos")]
7 {
8 use core::mem;
9 use core::ptr;
10
11 extern "C" {
12 fn sysctlbyname(
13 name: *const core::ffi::c_char,
14 oldp: *mut core::ffi::c_void,
15 oldlenp: *mut usize,
16 newp: *mut core::ffi::c_void,
17 newlen: usize,
18 ) -> core::ffi::c_int;
19 }
20
21 unsafe {
22 let mut jscvt: core::ffi::c_int = 0;
23 let mut jscvt_len = mem::size_of_val(&jscvt);
24 if sysctlbyname(
25 c"hw.optional.arm.FEAT_JSCVT".as_ptr(),
26 &mut jscvt as *mut _ as *mut core::ffi::c_void,
27 &mut jscvt_len,
28 ptr::null_mut(),
29 0,
30 ) == 0
31 && jscvt == 1
32 {
33 result |= FeaturesA64::Feature_JSCVT as u32;
34 }
35
36 let mut adv_simd: core::ffi::c_int = 0;
37 let mut adv_simd_len = mem::size_of_val(&adv_simd);
38 if sysctlbyname(
39 c"hw.optional.arm.AdvSIMD".as_ptr(),
40 &mut adv_simd as *mut _ as *mut core::ffi::c_void,
41 &mut adv_simd_len,
42 ptr::null_mut(),
43 0,
44 ) == 0
45 && adv_simd == 1
46 {
47 result |= FeaturesA64::Feature_AdvSIMD as u32;
48 }
49 }
50 }
51
52 result
53}