//! Chip detection and capability probing for Apple Silicon M1โ€“M4.
//!
//! Uses raw `sysctlbyname` calls โ€” no external dependencies.

use crate::CpuError;
use std::ffi::CStr;
use std::sync::OnceLock;

// ---------------------------------------------------------------------------
// FFI: sysctlbyname from libSystem
// ---------------------------------------------------------------------------

extern "C" {
    fn sysctlbyname(
        name: *const u8,
        oldp: *mut u8,
        oldlenp: *mut usize,
        newp: *const u8,
        newlen: usize,
    ) -> i32;
}

// ---------------------------------------------------------------------------
// Chip enum
// ---------------------------------------------------------------------------

/// Apple Silicon chip variant.
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
pub enum Chip {
    M1,
    M1Pro,
    M1Max,
    M1Ultra,
    M2,
    M2Pro,
    M2Max,
    M2Ultra,
    M3,
    M3Pro,
    M3Max,
    M3Ultra,
    M4,
    M4Pro,
    M4Max,
    Unknown,
}

impl Chip {
    /// Identify the chip from sysctl strings.
    ///
    /// Tries `machdep.cpu.brand_string` first, then falls back to
    /// the product identifier from `hw.product`.
    pub fn detect() -> Chip {
        // Try brand string first (available on macOS 13+)
        if let Ok(brand) = sysctl_string(b"machdep.cpu.brand_string\0") {
            if let Some(c) = Self::parse_brand(&brand) {
                return c;
            }
        }
        // Fallback: hw.product (e.g. "MacBookPro18,1")
        if let Ok(product) = sysctl_string(b"hw.product\0") {
            if let Some(c) = Self::parse_product(&product) {
                return c;
            }
        }
        // Last resort: check hw.optional.arm.FEAT_SME โ€” only M4 family has it
        if sysctl_u32(b"hw.optional.arm.FEAT_SME\0").unwrap_or(0) != 0 {
            return Chip::M4;
        }
        Chip::Unknown
    }

    fn parse_brand(brand: &str) -> Option<Chip> {
        let b = brand.to_ascii_lowercase();
        // Match most specific first (Ultra before plain).
        if b.contains("m1 ultra") {
            Some(Chip::M1Ultra)
        } else if b.contains("m1 max") {
            Some(Chip::M1Max)
        } else if b.contains("m1 pro") {
            Some(Chip::M1Pro)
        } else if b.contains("m1") {
            Some(Chip::M1)
        } else if b.contains("m2 ultra") {
            Some(Chip::M2Ultra)
        } else if b.contains("m2 max") {
            Some(Chip::M2Max)
        } else if b.contains("m2 pro") {
            Some(Chip::M2Pro)
        } else if b.contains("m2") {
            Some(Chip::M2)
        } else if b.contains("m3 ultra") {
            Some(Chip::M3Ultra)
        } else if b.contains("m3 max") {
            Some(Chip::M3Max)
        } else if b.contains("m3 pro") {
            Some(Chip::M3Pro)
        } else if b.contains("m3") {
            Some(Chip::M3)
        } else if b.contains("m4 max") {
            Some(Chip::M4Max)
        } else if b.contains("m4 pro") {
            Some(Chip::M4Pro)
        } else if b.contains("m4") {
            Some(Chip::M4)
        } else {
            None
        }
    }

    /// Coarse chip-generation detection from product board IDs.
    fn parse_product(product: &str) -> Option<Chip> {
        // Board IDs like "MacBookPro18,3" (M1 Pro), "Mac14,6" (M2 Max) etc.
        // We only map the generation; the exact SKU variant needs brand_string.
        let p = product.to_ascii_lowercase();
        if p.starts_with("virtualm") || p.starts_with("apple m") {
            // VM environments sometimes expose the chip name directly.
            return Self::parse_brand(product);
        }
        // Without a full product-id table, return Unknown and let other
        // heuristics (SME feature flag etc.) refine later.
        None
    }

    /// AMX version supported by this chip generation.
    pub fn amx_version(self) -> u8 {
        match self {
            Chip::M1 | Chip::M1Pro | Chip::M1Max | Chip::M1Ultra => 1,
            Chip::M2 | Chip::M2Pro | Chip::M2Max | Chip::M2Ultra => 1,
            Chip::M3 | Chip::M3Pro | Chip::M3Max | Chip::M3Ultra => 2,
            Chip::M4 | Chip::M4Pro | Chip::M4Max => 2,
            Chip::Unknown => 0,
        }
    }
}

impl std::fmt::Display for Chip {
    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
        let name = match self {
            Chip::M1 => "Apple M1",
            Chip::M1Pro => "Apple M1 Pro",
            Chip::M1Max => "Apple M1 Max",
            Chip::M1Ultra => "Apple M1 Ultra",
            Chip::M2 => "Apple M2",
            Chip::M2Pro => "Apple M2 Pro",
            Chip::M2Max => "Apple M2 Max",
            Chip::M2Ultra => "Apple M2 Ultra",
            Chip::M3 => "Apple M3",
            Chip::M3Pro => "Apple M3 Pro",
            Chip::M3Max => "Apple M3 Max",
            Chip::M3Ultra => "Apple M3 Ultra",
            Chip::M4 => "Apple M4",
            Chip::M4Pro => "Apple M4 Pro",
            Chip::M4Max => "Apple M4 Max",
            Chip::Unknown => "Unknown",
        };
        f.write_str(name)
    }
}

// ---------------------------------------------------------------------------
// Feature enum
// ---------------------------------------------------------------------------

/// ARM CPU feature extension.
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
pub enum Feature {
    /// Half-precision floating point (FP16 / FEAT_FP16)
    Fp16,
    /// BFloat16 (FEAT_BF16)
    Bf16,
    /// Advanced SIMD dot-product (FEAT_DotProd)
    DotProd,
    /// Int8 matrix multiply (FEAT_I8MM)
    I8mm,
    /// Floating-point complex multiply-add (FEAT_FCMA)
    Fcma,
    /// Rounding double multiply-add (FEAT_RDM)
    Rdm,
    /// Large System Extensions โ€” atomics (FEAT_LSE)
    Lse,
    /// Load-acquire RCpc (FEAT_LRCPC)
    Lrcpc,
    /// Scalable Matrix Extension (FEAT_SME) โ€” M4+
    Sme,
    /// Scalable Matrix Extension v2 with LUTI2/LUTI4 (FEAT_SME2) โ€” M4+
    Sme2,
    /// FP64 outer product in ZA (FEAT_SME_F64F64) โ€” M4+
    SmeF64F64,
    /// I16ร—I16 โ†’ I64 outer product (FEAT_SME_I16I64) โ€” M4+
    SmeI16I64,
}

// ---------------------------------------------------------------------------
// Features struct
// ---------------------------------------------------------------------------

/// Detected hardware capabilities (cached, immutable).
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
pub struct Features {
    pub chip: Chip,
    /// AMX coprocessor version (0 = not detected, 1 = M1/M2, 2 = M3/M4)
    pub amx_ver: u8,
    pub has_fp16: bool,
    pub has_bf16: bool,
    pub has_dotprod: bool,
    pub has_i8mm: bool,
    pub has_fcma: bool,
    pub has_rdm: bool,
    pub has_lse: bool,
    pub has_lrcpc: bool,
    /// Scalable Matrix Extension base (FEAT_SME) โ€” present on M4+
    pub has_sme: bool,
    /// SME v2 with LUTI2/LUTI4 multi-vector lookup (FEAT_SME2) โ€” M4+
    pub has_sme2: bool,
    /// FP64 outer product in ZA (FEAT_SME_F64F64) โ€” M4+
    pub has_sme_f64f64: bool,
    /// I16ร—I16 โ†’ I64 outer product (FEAT_SME_I16I64) โ€” M4+
    pub has_sme_i16i64: bool,
    /// Streaming vector length in bytes (0 if SME absent).
    /// 64 on every shipping Apple SME implementation (SVL = 512 bits).
    pub svl_bytes: u16,
    /// Performance (P) cores
    pub p_cores: u8,
    /// Efficiency (E) cores
    pub e_cores: u8,
    /// L1 cache line size in bytes
    pub l1_line: usize,
    /// L2 cache size in bytes
    pub l2_size: usize,
}

impl Features {
    /// Check whether a given CPU feature is available.
    pub fn has(&self, feat: Feature) -> bool {
        match feat {
            Feature::Fp16 => self.has_fp16,
            Feature::Bf16 => self.has_bf16,
            Feature::DotProd => self.has_dotprod,
            Feature::I8mm => self.has_i8mm,
            Feature::Fcma => self.has_fcma,
            Feature::Rdm => self.has_rdm,
            Feature::Lse => self.has_lse,
            Feature::Lrcpc => self.has_lrcpc,
            Feature::Sme => self.has_sme,
            Feature::Sme2 => self.has_sme2,
            Feature::SmeF64F64 => self.has_sme_f64f64,
            Feature::SmeI16I64 => self.has_sme_i16i64,
        }
    }
}

// ---------------------------------------------------------------------------
// sysctl helpers
// ---------------------------------------------------------------------------

/// Query a sysctl key that returns a `u32`.
fn sysctl_u32(name: &[u8]) -> Result<u32, CpuError> {
    let mut val: u32 = 0;
    let mut len = std::mem::size_of::<u32>();
    let rc = unsafe {
        sysctlbyname(
            name.as_ptr(),
            &mut val as *mut u32 as *mut u8,
            &mut len,
            std::ptr::null(),
            0,
        )
    };
    if rc != 0 {
        let key = CStr::from_bytes_with_nul(name)
            .map(|c| c.to_string_lossy().into_owned())
            .unwrap_or_else(|_| String::from("<invalid>"));
        return Err(CpuError::SysctlFailed(key));
    }
    Ok(val)
}

/// Query a sysctl key that returns a `u64`.
fn sysctl_u64(name: &[u8]) -> Result<u64, CpuError> {
    let mut val: u64 = 0;
    let mut len = std::mem::size_of::<u64>();
    let rc = unsafe {
        sysctlbyname(
            name.as_ptr(),
            &mut val as *mut u64 as *mut u8,
            &mut len,
            std::ptr::null(),
            0,
        )
    };
    if rc != 0 {
        let key = CStr::from_bytes_with_nul(name)
            .map(|c| c.to_string_lossy().into_owned())
            .unwrap_or_else(|_| String::from("<invalid>"));
        return Err(CpuError::SysctlFailed(key));
    }
    Ok(val)
}

/// Query a sysctl key that returns a C string.
fn sysctl_string(name: &[u8]) -> Result<String, CpuError> {
    // First call: get the required buffer length.
    let mut len: usize = 0;
    let rc = unsafe {
        sysctlbyname(
            name.as_ptr(),
            std::ptr::null_mut(),
            &mut len,
            std::ptr::null(),
            0,
        )
    };
    if rc != 0 || len == 0 {
        let key = CStr::from_bytes_with_nul(name)
            .map(|c| c.to_string_lossy().into_owned())
            .unwrap_or_else(|_| String::from("<invalid>"));
        return Err(CpuError::SysctlFailed(key));
    }

    let mut buf = vec![0u8; len];
    let rc = unsafe {
        sysctlbyname(
            name.as_ptr(),
            buf.as_mut_ptr(),
            &mut len,
            std::ptr::null(),
            0,
        )
    };
    if rc != 0 {
        let key = CStr::from_bytes_with_nul(name)
            .map(|c| c.to_string_lossy().into_owned())
            .unwrap_or_else(|_| String::from("<invalid>"));
        return Err(CpuError::SysctlFailed(key));
    }

    // Strip trailing NUL.
    if let Some(pos) = buf.iter().position(|&b| b == 0) {
        buf.truncate(pos);
    }
    String::from_utf8(buf).map_err(|e| CpuError::SysctlFailed(e.to_string()))
}

/// Check a `hw.optional.arm.FEAT_*` flag (returns `false` on any error).
fn feat_flag(name: &[u8]) -> bool {
    sysctl_u32(name).unwrap_or(0) != 0
}

// ---------------------------------------------------------------------------
// Core-count helpers
// ---------------------------------------------------------------------------

fn detect_p_cores() -> u8 {
    sysctl_u32(b"hw.perflevel0.physicalcpu\0").unwrap_or(0) as u8
}

fn detect_e_cores() -> u8 {
    sysctl_u32(b"hw.perflevel1.physicalcpu\0").unwrap_or(0) as u8
}

fn detect_l1_line() -> usize {
    sysctl_u64(b"hw.cachelinesize\0").unwrap_or(128) as usize
}

fn detect_l2_size() -> usize {
    sysctl_u64(b"hw.l2cachesize\0").unwrap_or(0) as usize
}

// ---------------------------------------------------------------------------
// Feature detection
// ---------------------------------------------------------------------------

struct DetectedFeatures {
    fp16: bool,
    bf16: bool,
    dotprod: bool,
    i8mm: bool,
    fcma: bool,
    rdm: bool,
    lse: bool,
    lrcpc: bool,
    sme: bool,
    sme2: bool,
    sme_f64f64: bool,
    sme_i16i64: bool,
}

fn detect_features() -> DetectedFeatures {
    DetectedFeatures {
        fp16: feat_flag(b"hw.optional.arm.FEAT_FP16\0"),
        bf16: feat_flag(b"hw.optional.arm.FEAT_BF16\0"),
        dotprod: feat_flag(b"hw.optional.arm.FEAT_DotProd\0"),
        i8mm: feat_flag(b"hw.optional.arm.FEAT_I8MM\0"),
        fcma: feat_flag(b"hw.optional.arm.FEAT_FCMA\0"),
        rdm: feat_flag(b"hw.optional.arm.FEAT_RDM\0"),
        lse: feat_flag(b"hw.optional.arm.FEAT_LSE\0"),
        lrcpc: feat_flag(b"hw.optional.arm.FEAT_LRCPC\0"),
        sme: feat_flag(b"hw.optional.arm.FEAT_SME\0"),
        sme2: feat_flag(b"hw.optional.arm.FEAT_SME2\0"),
        sme_f64f64: feat_flag(b"hw.optional.arm.FEAT_SME_F64F64\0"),
        sme_i16i64: feat_flag(b"hw.optional.arm.FEAT_SME_I16I64\0"),
    }
}

/// Streaming vector length in bytes for chips that advertise SME.
///
/// Every shipping Apple SME implementation uses SVL = 512 bits = 64 bytes.
/// The streaming module verifies this at first SMSTART by reading RDSVL.
fn svl_for(has_sme: bool) -> u16 {
    if has_sme {
        64
    } else {
        0
    }
}

// ---------------------------------------------------------------------------
// Public API
// ---------------------------------------------------------------------------

static CAPS: OnceLock<Features> = OnceLock::new();

/// Detect hardware capabilities. The result is computed once and cached for
/// the lifetime of the process.
pub fn scan() -> &'static Features {
    CAPS.get_or_init(|| {
        let chip = Chip::detect();
        let amx_ver = chip.amx_version();
        let f = detect_features();

        Features {
            chip,
            amx_ver,
            has_fp16: f.fp16,
            has_bf16: f.bf16,
            has_dotprod: f.dotprod,
            has_i8mm: f.i8mm,
            has_fcma: f.fcma,
            has_rdm: f.rdm,
            has_lse: f.lse,
            has_lrcpc: f.lrcpc,
            has_sme: f.sme,
            has_sme2: f.sme2,
            has_sme_f64f64: f.sme_f64f64,
            has_sme_i16i64: f.sme_i16i64,
            svl_bytes: svl_for(f.sme),
            p_cores: detect_p_cores(),
            e_cores: detect_e_cores(),
            l1_line: detect_l1_line(),
            l2_size: detect_l2_size(),
        }
    })
}

/// Convenience: return the detected chip variant.
pub fn chip() -> Chip {
    scan().chip
}

/// Convenience: check whether a CPU feature is available.
pub fn has(feat: Feature) -> bool {
    scan().has(feat)
}

// ---------------------------------------------------------------------------
// Tests
// ---------------------------------------------------------------------------

#[cfg(test)]
mod tests {
    use super::*;

    #[test]
    fn parse_brand_m1() {
        assert_eq!(Chip::parse_brand("Apple M1"), Some(Chip::M1));
        assert_eq!(Chip::parse_brand("Apple M1 Pro"), Some(Chip::M1Pro));
        assert_eq!(Chip::parse_brand("Apple M1 Max"), Some(Chip::M1Max));
        assert_eq!(Chip::parse_brand("Apple M1 Ultra"), Some(Chip::M1Ultra));
    }

    #[test]
    fn parse_brand_m4() {
        assert_eq!(Chip::parse_brand("Apple M4"), Some(Chip::M4));
        assert_eq!(Chip::parse_brand("Apple M4 Pro"), Some(Chip::M4Pro));
        assert_eq!(Chip::parse_brand("Apple M4 Max"), Some(Chip::M4Max));
    }

    #[test]
    fn parse_brand_unknown() {
        assert_eq!(Chip::parse_brand("Intel Core i9"), None);
    }

    #[test]
    fn amx_versions() {
        assert_eq!(Chip::M1.amx_version(), 1);
        assert_eq!(Chip::M2Ultra.amx_version(), 1);
        assert_eq!(Chip::M3.amx_version(), 2);
        assert_eq!(Chip::M4Max.amx_version(), 2);
        assert_eq!(Chip::Unknown.amx_version(), 0);
    }

    #[test]
    fn caps_has_roundtrip() {
        let caps = Features {
            chip: Chip::M1,
            amx_ver: 1,
            has_fp16: true,
            has_bf16: false,
            has_dotprod: true,
            has_i8mm: false,
            has_fcma: true,
            has_rdm: true,
            has_lse: true,
            has_lrcpc: true,
            has_sme: false,
            has_sme2: false,
            has_sme_f64f64: false,
            has_sme_i16i64: false,
            svl_bytes: 0,
            p_cores: 4,
            e_cores: 4,
            l1_line: 128,
            l2_size: 12 * 1024 * 1024,
        };
        assert!(caps.has(Feature::Fp16));
        assert!(!caps.has(Feature::Bf16));
        assert!(caps.has(Feature::DotProd));
        assert!(!caps.has(Feature::I8mm));
        assert!(!caps.has(Feature::Sme));
    }

    #[test]
    fn sme_implies_svl() {
        let caps = scan();
        if caps.has_sme {
            assert_eq!(
                caps.svl_bytes, 64,
                "Apple SME implementations use SVL=512 bits"
            );
        } else {
            assert_eq!(caps.svl_bytes, 0);
        }
    }

    #[test]
    fn m4_has_sme() {
        // On any M4 host this must be true; on other hosts the test is informational.
        let caps = scan();
        if matches!(caps.chip, Chip::M4 | Chip::M4Pro | Chip::M4Max) {
            assert!(caps.has_sme, "M4 family must advertise FEAT_SME");
            assert!(caps.has_sme2, "M4 family must advertise FEAT_SME2");
        }
    }

    #[test]
    fn scan_returns_consistent() {
        // Calling scan twice must yield the same pointer (OnceLock).
        let a = scan() as *const Features;
        let b = scan() as *const Features;
        assert_eq!(a, b);
    }

    #[test]
    fn chip_display() {
        assert_eq!(format!("{}", Chip::M3Pro), "Apple M3 Pro");
        assert_eq!(format!("{}", Chip::Unknown), "Unknown");
    }
}

Homonyms

soft3/glia/run/ir/mod.rs
neural/trident/src/cli/mod.rs
soft3/glia/run/core/mod.rs
cyb/optica/src/scanner/mod.rs
cyb/optica/src/render/mod.rs
neural/trident/src/compile/mod.rs
soft3/tru/rs/graph/mod.rs
neural/trident/src/field/mod.rs
cyb/optica/src/graph/mod.rs
soft3/nox/rs/jets/mod.rs
cyb/prysm/atoms/rs/mod.rs
soft3/glia/run/backend/mod.rs
neural/trident/src/syntax/mod.rs
cyb/optica/src/output/mod.rs
soft3/cybergraph/tests/common/mod.rs
soft3/mudra/src/proof/mod.rs
neural/trident/src/gpu/mod.rs
cyb/optica/src/parser/mod.rs
soft3/glia/import/loader/mod.rs
soft3/tru/rs/model/mod.rs
neural/trident/src/cost/mod.rs
cyb/prysm/system/rs/mod.rs
cyb/shell/src/shell/mod.rs
soft3/nox/rs/patterns/mod.rs
cyb/shell/src/worlds/mod.rs
soft3/mir/src/epoch/mod.rs
soft3/tru/rs/pass/mod.rs
neural/trident/src/config/mod.rs
soft3/glia/run/arch/mod.rs
neural/trident/src/package/mod.rs
soft3/glia/run/bench/mod.rs
neural/trident/src/import/mod.rs
cyb/optica/src/server/mod.rs
neural/trident/src/api/mod.rs
neural/trident/src/neural/mod.rs
neural/trident/src/runtime/mod.rs
neural/trident/src/ast/mod.rs
soft3/nox/rs/data/mod.rs
soft3/mir/src/graph/mod.rs
neural/trident/src/diagnostic/mod.rs
neural/trident/src/typecheck/mod.rs
neural/trident/src/verify/mod.rs
neural/trident/src/deploy/mod.rs
cyb/optica/src/query/mod.rs
soft3/mir/src/frame/mod.rs
neural/trident/src/ir/mod.rs
cyb/prysm/molecules/rs/mod.rs
soft3/tru/rs/focusing/mod.rs
neural/trident/src/lsp/mod.rs
soft3/glia/run/tokenizer/mod.rs
cyb/shell/src/agent/mod.rs
soft3/mir/src/bevy/mod.rs
neural/trident/src/cost/stack_verifier/mod.rs
cyb/honeycrisp/acpu/src/pulse/mod.rs
cyb/honeycrisp/aruminium/src/render/mod.rs
cyb/honeycrisp/acpu/src/gemm/mod.rs
neural/rs/rsc/src/lints/mod.rs
cyb/honeycrisp/acpu/src/sme/mod.rs
cyb/wysm/crates/wasmi/tests/mod.rs
cyb/honeycrisp/acpu/src/lut/mod.rs
cyb/honeycrisp/acpu/src/vector/mod.rs
neural/trident/src/syntax/format/mod.rs
neural/rs/core/src/bounded/mod.rs
cyb/honeycrisp/acpu/src/sync/mod.rs
cyb/honeycrisp/aruminium/src/ffi/mod.rs
cyb/wysm/crates/wasi/tests/mod.rs
neural/trident/src/config/scaffold/mod.rs
cyb/honeycrisp/acpu/src/matrix/mod.rs
soft3/zheng/rs/src/spartan/mod.rs
neural/eidos/rs/src/surface/mod.rs
neural/eidos/rs/src/elab/mod.rs
cyb/shell/src/worlds/vault/mod.rs
neural/eidos/rs/src/tactic_ext/mod.rs
neural/trident/src/ir/tir/mod.rs
neural/trident/src/package/hash/mod.rs
cyb/honeycrisp/acpu/src/field/mod.rs
cyb/honeycrisp/rane/src/mil/mod.rs
neural/trident/src/syntax/lexer/mod.rs
cyb/shell/src/worlds/sigma/mod.rs
neural/trident/src/lsp/util/mod.rs
neural/trident/src/package/manifest/mod.rs
neural/rs/macros/src/cell/mod.rs
neural/trident/src/verify/sym/mod.rs
soft3/zheng/rs/src/phi/mod.rs
cyb/shell/src/worlds/models/mod.rs
cyb/honeycrisp/unimem/src/block/mod.rs
neural/trident/src/typecheck/tests/mod.rs
neural/trident/src/api/tests/mod.rs
cyb/shell/src/worlds/body/mod.rs
neural/rs/macros/src/addressed/mod.rs
soft3/glia/run/cli/cmd/mod.rs
cyb/honeycrisp/acpu/src/streaming/mod.rs
neural/trident/src/ir/lir/mod.rs
neural/trident/src/neural/model/mod.rs
soft3/glia/run/backend/cpu/mod.rs
neural/trident/src/config/resolve/mod.rs
soft3/glia/run/arch/decoder/mod.rs
soft3/glia/run/backend/wgpu/mod.rs
neural/trident/src/verify/smt/mod.rs
neural/trident/src/verify/equiv/mod.rs
neural/trident/src/verify/synthesize/mod.rs
soft3/bbg/rs/src/storage/mod.rs
neural/trident/src/neural/training/mod.rs
cyb/honeycrisp/acpu/src/numeric/mod.rs
neural/trident/src/cost/model/mod.rs
neural/trident/src/package/registry/mod.rs
soft3/radio/cyber-bao/src/io/mod.rs
soft3/zheng/rs/src/sumcheck/mod.rs
neural/trident/src/neural/data/mod.rs
neural/trident/src/ir/tree/mod.rs
neural/trident/src/neural/inference/mod.rs
neural/trident/src/syntax/grammar/mod.rs
cyb/shell/src/worlds/robot/mod.rs
neural/rs/macros/src/registers/mod.rs
neural/trident/src/verify/solve/mod.rs
soft3/nox/rs/jets/backends/mod.rs
cyb/shell/src/worlds/com/mod.rs
soft3/glia/run/backend/honeycrisp/mod.rs
neural/rs/core/src/fixed_point/mod.rs
neural/rs/darwin-sys/src/ffi/mod.rs
neural/eidos/rs/src/stdlib/mod.rs
neural/trident/src/ir/kir/mod.rs
cyb/wysm/crates/wast/tests/mod.rs
soft3/radio/iroh-blobs/src/store/mod.rs
neural/trident/src/lsp/semantic/mod.rs
neural/trident/src/package/store/mod.rs
soft3/zheng/rs/src/ccs/mod.rs
soft3/radio/iroh-blobs/examples/common/mod.rs
soft3/strata/nebu/rs/extension/mod.rs
cyb/honeycrisp/acpu/src/crypto/mod.rs
soft3/zheng/rs/src/folding/mod.rs
neural/trident/src/syntax/parser/mod.rs
neural/trident/src/verify/report/mod.rs
cyb/honeycrisp/acpu/src/sparse/mod.rs
soft3/radio/quinn/quinn/src/runtime/mod.rs
cyb/wysm/crates/fuzz/src/oracle/mod.rs
soft3/radio/quinn/quinn-proto/src/config/mod.rs
cyb/evy/forks/bevy_anti_alias/src/contrast_adaptive_sharpening/mod.rs
cyb/evy/forks/bevy_core_pipeline/src/tonemapping/mod.rs
cyb/evy/forks/naga/src/arena/mod.rs
cyb/evy/forks/bevy_core_pipeline/src/experimental/mod.rs
cyb/evy/forks/bevy_render/src/render_phase/mod.rs
cyb/evy/forks/bevy_ecs/src/entity/mod.rs
cyb/evy/forks/bevy_render/src/mesh/mod.rs
neural/trident/src/ir/tir/builder/mod.rs
cyb/wysm/crates/collections/src/arena/mod.rs
soft3/radio/quinn/quinn-proto/src/connection/mod.rs
cyb/wysm/crates/core/src/memory/mod.rs
cyb/evy/forks/bevy_core_pipeline/src/skybox/mod.rs
cyb/evy/forks/bevy_ecs/src/event/mod.rs
neural/trident/src/ir/lir/lower/mod.rs
cyb/evy/forks/bevy_pbr/src/lightmap/mod.rs
cyb/evy/forks/bevy_pbr/src/ssao/mod.rs
cyb/evy/forks/bevy_post_process/src/bloom/mod.rs
cyb/evy/forks/bevy_anti_alias/src/fxaa/mod.rs
soft3/strata/trop/wgsl/src/shaders/mod.rs
cyb/evy/forks/bevy_pbr/src/prepass/mod.rs
cyb/evy/forks/bevy_ecs/src/schedule/mod.rs
cyb/evy/forks/bevy_core_pipeline/src/core_3d/mod.rs
cyb/evy/forks/bevy_ecs/src/relationship/mod.rs
cyb/wysm/crates/wasmi/src/func/mod.rs
cyb/wysm/crates/wasmi/src/engine/mod.rs
cyb/evy/forks/bevy_render/src/render_resource/mod.rs
cyb/evy/forks/bevy_core_pipeline/src/oit/mod.rs
soft3/strata/jali/wgsl/src/shaders/mod.rs
neural/trident/src/ir/tir/stack/mod.rs
cyb/evy/forks/naga/src/valid/mod.rs
soft3/radio/quinn/quinn-proto/src/range_set/mod.rs
soft3/radio/quinn/quinn/examples/common/mod.rs
cyb/evy/forks/bevy_core_pipeline/src/core_2d/mod.rs
cyb/evy/forks/bevy_anti_alias/src/taa/mod.rs
cyb/wysm/crates/wasmi/src/memory/mod.rs
cyb/evy/forks/bevy_sprite_render/src/tilemap_chunk/mod.rs
cyb/wysm/crates/wasmi/benches/bench/mod.rs
cyb/wysm/crates/wasmi/src/table/mod.rs
soft3/radio/quinn/quinn-udp/src/cmsg/mod.rs
cyb/evy/forks/bevy_ecs/src/reflect/mod.rs
cyb/wysm/crates/cli/src/commands/mod.rs
cyb/evy/forks/bevy_render/src/experimental/mod.rs
cyb/evy/forks/naga/src/keywords/mod.rs
cyb/evy/forks/bevy_ecs/src/bundle/mod.rs
cyb/evy/crates/evy_prysm_core/src/layout/mod.rs
cyb/evy/forks/bevy_pbr/src/ssr/mod.rs
cyb/evy/forks/bevy_sprite_render/src/mesh2d/mod.rs
cyb/evy/forks/bevy_ecs/src/storage/mod.rs
cyb/evy/forks/bevy_ecs/src/message/mod.rs
cyb/evy/forks/bevy_render/src/diagnostic/mod.rs
cyb/evy/forks/bevy_sprite_render/src/render/mod.rs
cyb/evy/forks/bevy_ecs/src/world/mod.rs
cyb/evy/forks/bevy_anti_alias/src/smaa/mod.rs
cyb/evy/forks/bevy_ecs/src/change_detection/mod.rs
cyb/evy/forks/bevy_ecs/src/system/mod.rs
cyb/wysm/crates/wasmi/src/store/mod.rs
neural/trident/src/ir/kir/lower/mod.rs
cyb/wysm/crates/wasi/src/sync/mod.rs
cyb/wysm/crates/core/src/table/mod.rs
warriors/trisha/.vendor/twenty-first/src/tip5/mod.rs
cyb/evy/forks/bevy_render/src/render_graph/mod.rs
soft3/glia/run/backend/wgpu/kernels/mod.rs
cyb/wysm/crates/ir/src/decode/mod.rs
cyb/evy/forks/bevy_post_process/src/dof/mod.rs
soft3/strata/kuro/wgsl/src/shaders/mod.rs
cyb/evy/forks/naga/src/front/mod.rs
soft3/glia/run/backend/cpu/quant/mod.rs
soft3/glia/run/arch/decoder/families/mod.rs
soft3/strata/genies/wgsl/src/shaders/mod.rs
neural/trident/src/ir/tir/neural/mod.rs
neural/trident/src/ir/tir/optimize/mod.rs
cyb/evy/forks/bevy_tasks/src/iter/mod.rs
cyb/evy/forks/bevy_sprite/src/texture_slice/mod.rs
cyb/evy/forks/bevy_render/src/batching/mod.rs
cyb/evy/forks/bevy_pbr/src/light_probe/mod.rs
cyb/evy/forks/bevy_pbr/src/volumetric_fog/mod.rs
neural/trident/src/ir/tir/lower/mod.rs
cyb/wysm/crates/wasmi/tests/integration/mod.rs
cyb/evy/forks/naga/src/back/mod.rs
cyb/evy/forks/bevy_anti_alias/src/dlss/mod.rs
neural/trident/src/syntax/parser/tests/mod.rs
cyb/evy/forks/bevy_render/src/renderer/mod.rs
cyb/evy/forks/bevy_render/src/view/mod.rs
cyb/evy/forks/bevy_ecs/src/component/mod.rs
cyb/wysm/crates/wasmi/src/instance/mod.rs
neural/trident/src/ir/tree/lower/mod.rs
soft3/radio/quinn/quinn-proto/src/tests/mod.rs
cyb/evy/forks/bevy_pbr/src/decal/mod.rs
cyb/evy/forks/bevy_core_pipeline/src/upscaling/mod.rs
neural/trident/src/neural/data/tir_graph/mod.rs
cyb/evy/forks/bevy_pbr/src/atmosphere/mod.rs
cyb/honeycrisp/acpu/src/field/tip5/mod.rs
cyb/evy/forks/bevy_post_process/src/auto_exposure/mod.rs
cyb/evy/forks/bevy_render/src/texture/mod.rs
cyb/evy/forks/bevy_ecs/src/error/mod.rs
cyb/evy/forks/bevy_mesh/src/primitives/mod.rs
soft3/glia/run/backend/honeycrisp/kernels/mod.rs
cyb/evy/forks/bevy_pbr/src/render/mod.rs
cyb/evy/forks/bevy_sprite_render/src/text2d/mod.rs
cyb/evy/forks/bevy_core_pipeline/src/blit/mod.rs
cyb/evy/forks/naga/src/common/mod.rs
cyb/evy/forks/bevy_gizmos/src/primitives/mod.rs
cyb/wysm/crates/c_api/src/types/mod.rs
cyb/wysm/crates/wasmi/src/module/mod.rs
cyb/evy/forks/bevy_post_process/src/effect_stack/mod.rs
cyb/evy/forks/bevy_pbr/src/deferred/mod.rs
cyb/evy/forks/bevy_sprite_render/src/texture_slice/mod.rs
cyb/evy/forks/bevy_post_process/src/motion_blur/mod.rs
cyb/evy/forks/naga/src/proc/mod.rs
cyb/evy/forks/naga/src/compact/mod.rs
cyb/evy/forks/bevy_ecs/src/observer/mod.rs
cyb/evy/forks/bevy_transform/src/components/mod.rs
cyb/evy/forks/bevy_core_pipeline/src/prepass/mod.rs
cyb/evy/forks/bevy_pbr/src/meshlet/mod.rs
cyb/evy/forks/bevy_ecs/src/query/mod.rs
cyb/evy/forks/bevy_core_pipeline/src/deferred/mod.rs
cyb/evy/forks/bevy_core_pipeline/src/fullscreen_vertex_shader/mod.rs
cyb/evy/forks/bevy_render/src/view/window/mod.rs
cyb/evy/forks/naga/src/front/wgsl/mod.rs
neural/inf/rs/cozo/cozorocks/src/bridge/mod.rs
cyb/evy/forks/bevy_ecs/src/storage/table/mod.rs
cyb/evy/forks/bevy_mesh/src/primitives/dim3/mod.rs
soft3/radio/quinn/quinn-proto/src/connection/streams/mod.rs
neural/inf/rs/cozo/cozo-core/src/parse/mod.rs
cyb/evy/forks/naga/src/back/wgsl/mod.rs
cyb/evy/forks/naga/src/back/hlsl/mod.rs
struct Baz { m: mat3x2, } struct Baz { float2 m_0; float2 m_1; float2 m_2; }; float3x2 GetMatmOnBaz(Baz obj) { return float3x2(obj.m_0, obj.m_1, obj.m_2); }
neural/inf/rs/cozo/cozo-core/src/storage/mod.rs
cyb/wysm/crates/wasi/src/sync/snapshots/mod.rs
neural/inf/rs/cozo/cozo-core/src/runtime/mod.rs
cyb/evy/forks/bevy_render/src/view/visibility/mod.rs
cyb/wysm/crates/wasmi/src/module/parser/mod.rs
cyb/evy/forks/bevy_ecs/src/system/commands/mod.rs
neural/inf/rs/cozo/cozo-core/src/fixed_rule/mod.rs
cyb/evy/forks/naga/src/back/glsl/mod.rs
cyb/evy/forks/naga/src/back/dot/mod.rs
soft3/radio/quinn/quinn-proto/src/congestion/bbr/mod.rs
cyb/evy/forks/naga/src/front/spv/mod.rs
cyb/evy/forks/bevy_ecs/src/schedule/executor/mod.rs
cyb/wysm/crates/wasmi/src/engine/limits/mod.rs
neural/inf/rs/cozo/cozo-core/src/query/mod.rs
neural/inf/rs/cozo/cozo-core/src/fts/mod.rs
cyb/evy/forks/bevy_core_pipeline/src/experimental/mip_generation/mod.rs
cyb/evy/forks/bevy_core_pipeline/src/oit/resolve/mod.rs
cyb/evy/forks/naga/src/front/glsl/mod.rs
cyb/evy/forks/bevy_ecs/src/schedule/graph/mod.rs
cyb/evy/forks/naga/src/back/spv/mod.rs
neural/inf/rs/cozo/cozo-core/src/data/mod.rs
cyb/wysm/crates/wasmi/src/engine/executor/mod.rs
cyb/evy/forks/bevy_ecs/src/world/entity_access/mod.rs
cyb/evy/forks/naga/src/back/msl/mod.rs
cyb/wysm/crates/wasmi/src/module/instantiate/mod.rs
cyb/wysm/crates/wasmi/src/engine/translator/mod.rs
cyb/evy/forks/bevy_render/src/experimental/occlusion_culling/mod.rs
cyb/honeycrisp/.claude/worktrees/agent-ad6c77c38e86bc291/acpu/src/lut/mod.rs
cyb/honeycrisp/.claude/worktrees/agent-ad6c77c38e86bc291/acpu/src/crypto/mod.rs
cyb/honeycrisp/.claude/worktrees/agent-ad6c77c38e86bc291/aruminium/src/render/mod.rs
cyb/honeycrisp/.claude/worktrees/agent-aa1259cb10112b22a/acpu/src/probe/mod.rs
cyb/honeycrisp/.claude/worktrees/agent-ad6c77c38e86bc291/acpu/src/vector/mod.rs
neural/inf/rs/cozo/cozo-core/src/fts/cangjie/mod.rs
cyb/evy/forks/naga/src/front/wgsl/parse/mod.rs
cyb/honeycrisp/.claude/worktrees/agent-ad6c77c38e86bc291/acpu/src/sme/mod.rs
cyb/honeycrisp/.claude/worktrees/agent-ad6c77c38e86bc291/acpu/src/probe/mod.rs
cyb/honeycrisp/.claude/worktrees/agent-aa1259cb10112b22a/acpu/src/gemm/mod.rs
cyb/honeycrisp/.claude/worktrees/agent-aa1259cb10112b22a/aruminium/src/render/mod.rs
cyb/wysm/crates/wasmi/src/engine/translator/func/mod.rs
cyb/honeycrisp/.claude/worktrees/agent-aa1259cb10112b22a/acpu/src/pulse/mod.rs
cyb/honeycrisp/.claude/worktrees/agent-ad6c77c38e86bc291/acpu/src/numeric/mod.rs
cyb/honeycrisp/.claude/worktrees/agent-ad6c77c38e86bc291/acpu/src/sparse/mod.rs
cyb/honeycrisp/.claude/worktrees/agent-aa1259cb10112b22a/acpu/src/field/mod.rs
cyb/honeycrisp/.claude/worktrees/agent-ad6c77c38e86bc291/rane/src/mil/mod.rs
cyb/honeycrisp/.claude/worktrees/agent-ad6c77c38e86bc291/acpu/src/streaming/mod.rs
cyb/honeycrisp/.claude/worktrees/agent-aa1259cb10112b22a/acpu/src/crypto/mod.rs
cyb/honeycrisp/.claude/worktrees/agent-aa1259cb10112b22a/acpu/src/matrix/mod.rs
neural/inf/rs/cozo/cozo-core/src/fixed_rule/utilities/mod.rs
cyb/honeycrisp/.claude/worktrees/agent-aa1259cb10112b22a/rane/src/mil/mod.rs
cyb/honeycrisp/.claude/worktrees/agent-aa1259cb10112b22a/acpu/src/sync/mod.rs
cyb/honeycrisp/.claude/worktrees/agent-ad6c77c38e86bc291/acpu/src/matrix/mod.rs
cyb/wysm/crates/wasmi/src/engine/executor/handler/mod.rs
neural/inf/rs/cozo/cozo-core/src/fts/tokenizer/mod.rs
cyb/honeycrisp/.claude/worktrees/agent-aa1259cb10112b22a/acpu/src/vector/mod.rs
cyb/honeycrisp/.claude/worktrees/agent-ad6c77c38e86bc291/acpu/src/field/mod.rs
cyb/honeycrisp/.claude/worktrees/agent-ad6c77c38e86bc291/acpu/src/sync/mod.rs
cyb/evy/forks/naga/src/back/wgsl/polyfill/mod.rs
neural/inf/rs/cozo/cozo-core/src/data/tests/mod.rs
cyb/honeycrisp/.claude/worktrees/agent-ad6c77c38e86bc291/acpu/src/pulse/mod.rs
cyb/honeycrisp/.claude/worktrees/agent-aa1259cb10112b22a/acpu/src/sparse/mod.rs
cyb/honeycrisp/.claude/worktrees/agent-ad6c77c38e86bc291/aruminium/src/ffi/mod.rs
cyb/honeycrisp/.claude/worktrees/agent-ad6c77c38e86bc291/acpu/src/gemm/mod.rs
cyb/honeycrisp/.claude/worktrees/agent-aa1259cb10112b22a/acpu/src/numeric/mod.rs
cyb/evy/forks/naga/src/front/wgsl/lower/mod.rs
cyb/honeycrisp/.claude/worktrees/agent-aa1259cb10112b22a/aruminium/src/ffi/mod.rs
neural/inf/rs/cozo/cozo-core/src/fixed_rule/algos/mod.rs
cyb/wysm/crates/wasmi/src/engine/translator/func/stack/mod.rs
cyb/honeycrisp/.claude/worktrees/agent-aa1259cb10112b22a/acpu/src/field/tip5/mod.rs
cyb/wysm/crates/wasmi/src/engine/executor/handler/dispatch/mod.rs
cyb/wysm/crates/wasmi/src/engine/translator/func/simd/mod.rs
neural/inf/rs/cozo/cozo-core/src/fts/tokenizer/stop_word_filter/mod.rs
cyb/honeycrisp/.claude/worktrees/agent-ad6c77c38e86bc291/acpu/src/field/tip5/mod.rs

Graph