#[link(name = "numkong")]
extern "C" {
fn nk_configure_thread(capabilities: u64) -> i32;
fn nk_uses_dynamic_dispatch() -> i32;
fn nk_capabilities() -> u64;
}
pub fn available() -> u64 { unsafe { nk_capabilities() } }
pub fn configure_thread() -> bool {
unsafe { nk_configure_thread(!0) != 0 }
}
pub fn uses_dynamic_dispatch() -> bool { unsafe { nk_uses_dynamic_dispatch() != 0 } }
pub mod cap {
pub const SERIAL: u64 = 1 << 0; pub const NEON: u64 = 1 << 1; pub const HASWELL: u64 = 1 << 2; pub const SKYLAKE: u64 = 1 << 3; pub const NEONHALF: u64 = 1 << 4; pub const NEONSDOT: u64 = 1 << 5; pub const NEONFHM: u64 = 1 << 6; pub const ICELAKE: u64 = 1 << 7; pub const GENOA: u64 = 1 << 8; pub const NEONBFDOT: u64 = 1 << 9; pub const SVE: u64 = 1 << 10; pub const SVEHALF: u64 = 1 << 11; pub const SVESDOT: u64 = 1 << 12; pub const ALDER: u64 = 1 << 13; pub const SVEBFDOT: u64 = 1 << 14; pub const SVE2: u64 = 1 << 15; pub const V128RELAXED: u64 = 1 << 16; pub const SAPPHIRE: u64 = 1 << 17; pub const SAPPHIREAMX: u64 = 1 << 18; pub const RVV: u64 = 1 << 19; pub const RVVHALF: u64 = 1 << 20; pub const RVVBF16: u64 = 1 << 21; pub const GRANITEAMX: u64 = 1 << 22; pub const TURIN: u64 = 1 << 23; pub const SME: u64 = 1 << 24; pub const SME2: u64 = 1 << 25; pub const SMEF64: u64 = 1 << 26; pub const SMEFA64: u64 = 1 << 27; pub const SVE2P1: u64 = 1 << 28; pub const SME2P1: u64 = 1 << 29; pub const SMEHALF: u64 = 1 << 30; pub const SMEBF16: u64 = 1 << 31; pub const SMELUT2: u64 = 1 << 32; pub const RVVBB: u64 = 1 << 33; pub const SIERRA: u64 = 1 << 34; pub const SMEBI32: u64 = 1 << 35; pub const LOONGSONASX: u64 = 1 << 36; pub const POWERVSX: u64 = 1 << 37; pub const DIAMOND: u64 = 1 << 38; pub const NEONFP8: u64 = 1 << 39; }