use cxx::{type_id, ExternType};
#[allow(non_camel_case_types)]
#[derive(Clone, Copy)]
#[repr(C)]
pub struct float16_t {
pub bits: u16,
}
unsafe impl ExternType for float16_t {
type Id = type_id!("mlx::core::float16_t");
type Kind = cxx::kind::Trivial;
}
#[cxx::bridge(namespace = "mlx::core")]
pub mod ffi {
unsafe extern "C++" {
include!("mlx/types/half_types.h");
type float16_t = crate::types::float16::float16_t;
}
}
#[cfg(feature = "half")]
impl From<half::f16> for float16_t {
fn from(value: half::f16) -> Self {
ffi::f16 {
bits: value.to_bits(),
}
}
}
#[cfg(feature = "half")]
impl From<float16_t> for half::f16 {
fn from(value: ffi::f16) -> Self {
half::f16::from_bits(value.bits)
}
}