use super::super::f16;
use casting::CastFrom;
impl CastFrom<f16> for i32 {
#[inline]
#[allow(unsafe_code)]
fn cast_from(value: f16) -> i32 {
let result: i32;
unsafe {
core::arch::asm!(
"vmovd xmm0, eax", "vcvtsh2si eax, xmm0", in("eax") value.0 as u32,
out("eax") result,
options(pure, nomem, nostack)
);
}
result
}
}
impl CastFrom<i32> for f16 {
#[inline]
#[allow(unsafe_code)]
fn cast_from(value: i32) -> f16 {
let result: u16;
unsafe {
core::arch::asm!(
"vcvtsi2sh xmm0, xmm0, eax", "vmovd eax, xmm0", in("eax") value,
out("eax") result,
options(pure, nomem, nostack)
);
}
f16(result)
}
}
impl CastFrom<f16> for u32 {
#[inline]
#[allow(unsafe_code)]
fn cast_from(value: f16) -> u32 {
let result: u32;
unsafe {
core::arch::asm!(
"vmovd xmm0, eax", "vcvtsh2usi eax, xmm0", in("eax") value.0 as u32,
out("eax") result,
options(pure, nomem, nostack)
);
}
result
}
}
impl CastFrom<u32> for f16 {
#[inline]
#[allow(unsafe_code)]
fn cast_from(value: u32) -> f16 {
let result: u16;
unsafe {
core::arch::asm!(
"vcvtusi2sh xmm0, xmm0, eax", "vmovd eax, xmm0", in("eax") value,
out("eax") result,
options(pure, nomem, nostack)
);
}
f16(result)
}
}