blob: 7de6a776190c9f57279ffe5820e29f2226314919 [file]
//@ compile-flags: -Copt-level=3
#![crate_type = "lib"]
#![feature(f16b)]
#![allow(improper_ctypes_definitions)]
extern crate core;
use core::num::f16b;
// CHECK-LABEL: define{{.*}} bfloat @identity_f16b(bfloat
#[no_mangle]
pub extern "C" fn identity_f16b(value: f16b) -> f16b {
// CHECK: ret bfloat
value
}
// CHECK-LABEL: define{{.*}} i16 @f16b_to_bits(bfloat
#[no_mangle]
pub extern "C" fn f16b_to_bits(value: f16b) -> u16 {
// CHECK: bitcast bfloat %value to i16
value.to_bits()
}
// CHECK-LABEL: define{{.*}} bfloat @f16b_from_bits(i16
#[no_mangle]
pub extern "C" fn f16b_from_bits(bits: u16) -> f16b {
// CHECK: bitcast i16 %bits to bfloat
f16b::from_bits(bits)
}
// CHECK-LABEL: define{{.*}} float @widen_f16b(bfloat
#[no_mangle]
pub extern "C" fn widen_f16b(value: f16b) -> f32 {
// CHECK: bitcast bfloat %value to i16
// CHECK: zext i16
// CHECK: shl nuw i32 {{.*}}, 16
// CHECK: bitcast i32 {{.*}} to float
f32::from(value)
}