From 683af61a5ebb666b45a9f36d0cfbbf4a92ddb613 Mon Sep 17 00:00:00 2001 From: Alex Crichton Date: Wed, 24 Jan 2018 15:20:48 -0800 Subject: [PATCH] Fix some typos/bugs with float comparison intrinsics * I believe `__gtdf2` erroneously used `f32` instead of `f64` * Most of these needed `#[arm_aeabi_alias]` to ensure they're correctly called through the alias * Some existing aliases were corrected with the right names --- build.rs | 2 -- src/float/cmp.rs | 18 +++++++++++++++--- 2 files changed, 15 insertions(+), 5 deletions(-) diff --git a/build.rs b/build.rs index cb8f810f..a7351cc9 100644 --- a/build.rs +++ b/build.rs @@ -5430,10 +5430,8 @@ mod c { if target_arch == "arm" && target_os != "ios" { sources.extend( &[ - "arm/aeabi_dcmp.S", "arm/aeabi_div0.c", "arm/aeabi_drsub.c", - "arm/aeabi_fcmp.S", "arm/aeabi_frsub.c", "arm/bswapdi2.S", "arm/bswapsi2.S", diff --git a/src/float/cmp.rs b/src/float/cmp.rs index e884872f..40a31fd8 100644 --- a/src/float/cmp.rs +++ b/src/float/cmp.rs @@ -112,61 +112,73 @@ fn unord(a: F, b: F) -> bool where } intrinsics! { + #[arm_aeabi_alias = __aeabi_fcmple] pub extern "C" fn __lesf2(a: f32, b: f32) -> i32 { cmp(a, b).to_le_abi() } + #[arm_aeabi_alias = __aeabi_fcmpge] pub extern "C" fn __gesf2(a: f32, b: f32) -> i32 { cmp(a, b).to_ge_abi() } - #[arm_aeabi_alias = fcmpun] + #[arm_aeabi_alias = __aeabi_fcmpun] pub extern "C" fn __unordsf2(a: f32, b: f32) -> i32 { unord(a, b) as i32 } + #[arm_aeabi_alias = __aeabi_fcmpeq] pub extern "C" fn __eqsf2(a: f32, b: f32) -> i32 { cmp(a, b).to_le_abi() } + #[arm_aeabi_alias = __aeabi_fcmplt] pub extern "C" fn __ltsf2(a: f32, b: f32) -> i32 { cmp(a, b).to_le_abi() } + #[arm_aeabi_alias = __aeabi_fcmpne] pub extern "C" fn __nesf2(a: f32, b: f32) -> i32 { cmp(a, b).to_le_abi() } + #[arm_aeabi_alias = __aeabi_fcmpgt] pub extern "C" fn __gtsf2(a: f32, b: f32) -> i32 { cmp(a, b).to_ge_abi() } + #[arm_aeabi_alias = __aeabi_dcmple] pub extern "C" fn __ledf2(a: f64, b: f64) -> i32 { cmp(a, b).to_le_abi() } + #[arm_aeabi_alias = __aeabi_dcmpge] pub extern "C" fn __gedf2(a: f64, b: f64) -> i32 { cmp(a, b).to_ge_abi() } - #[arm_aeabi_alias = dcmpun] + #[arm_aeabi_alias = __aeabi_dcmpun] pub extern "C" fn __unorddf2(a: f64, b: f64) -> i32 { unord(a, b) as i32 } + #[arm_aeabi_alias = __aeabi_dcmpeq] pub extern "C" fn __eqdf2(a: f64, b: f64) -> i32 { cmp(a, b).to_le_abi() } + #[arm_aeabi_alias = __aeabi_dcmplt] pub extern "C" fn __ltdf2(a: f64, b: f64) -> i32 { cmp(a, b).to_le_abi() } + #[arm_aeabi_alias = __aeabi_dcmpne] pub extern "C" fn __nedf2(a: f64, b: f64) -> i32 { cmp(a, b).to_le_abi() } - pub extern "C" fn __gtdf2(a: f32, b: f32) -> i32 { + #[arm_aeabi_alias = __aeabi_dcmpgt] + pub extern "C" fn __gtdf2(a: f64, b: f64) -> i32 { cmp(a, b).to_ge_abi() } }