diff --git a/library/compiler-builtins/README.md b/library/compiler-builtins/README.md index cef2fb0974a7..d10b44f8f782 100644 --- a/library/compiler-builtins/README.md +++ b/library/compiler-builtins/README.md @@ -156,11 +156,11 @@ features = ["c"] - [x] fixunssfdi.c - [x] fixunssfsi.c - [x] floatdidf.c -- [ ] floatdisf.c +- [x] floatdisf.c - [x] floatsidf.c - [x] floatsisf.c - [x] floatundidf.c -- [ ] floatundisf.c +- [x] floatundisf.c - [x] floatunsidf.c - [x] floatunsisf.c - [ ] i386/ashldi3.S diff --git a/library/compiler-builtins/build.rs b/library/compiler-builtins/build.rs index 789311051de4..c625abbfc5b0 100644 --- a/library/compiler-builtins/build.rs +++ b/library/compiler-builtins/build.rs @@ -174,8 +174,6 @@ mod c { "divsc3.c", "divxc3.c", "extendhfsf2.c", - "floatdisf.c", - "floatundisf.c", "int_util.c", "muldc3.c", "mulsc3.c", diff --git a/library/compiler-builtins/src/float/conv.rs b/library/compiler-builtins/src/float/conv.rs index 33644ce56aaf..53844c17b49d 100644 --- a/library/compiler-builtins/src/float/conv.rs +++ b/library/compiler-builtins/src/float/conv.rs @@ -80,6 +80,18 @@ intrinsics! { int_to_float!(i, i32, f64) } + #[use_c_shim_if(all(target_arch = "x86", not(target_env = "msvc")))] + #[arm_aeabi_alias = __aeabi_l2f] + pub extern "C" fn __floatdisf(i: i64) -> f32 { + // On x86_64 LLVM will use native instructions for this conversion, we + // can just do it directly + if cfg!(target_arch = "x86_64") { + i as f32 + } else { + int_to_float!(i, i64, f32) + } + } + #[use_c_shim_if(all(target_arch = "x86", not(target_env = "msvc")))] #[arm_aeabi_alias = __aeabi_l2d] pub extern "C" fn __floatdidf(i: i64) -> f64 { @@ -112,6 +124,14 @@ intrinsics! { int_to_float!(i, u32, f64) } + #[use_c_shim_if(all(not(target_env = "msvc"), + any(target_arch = "x86", + all(not(windows), target_arch = "x86_64"))))] + #[arm_aeabi_alias = __aeabi_ul2f] + pub extern "C" fn __floatundisf(i: u64) -> f32 { + int_to_float!(i, u64, f32) + } + #[use_c_shim_if(all(not(target_env = "msvc"), any(target_arch = "x86", all(not(windows), target_arch = "x86_64"))))]