From d0a8790445769513aec254863d4f892cbc10a561 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20B=C3=A9chet?= Date: Wed, 29 May 2024 22:23:25 +0200 Subject: [PATCH 1/2] Add generic unorddf2vfp() and unordsf2vfp() --- README.md | 4 ++-- src/float/cmp.rs | 10 ++++++++++ testcrate/tests/cmp.rs | 6 ++++-- 3 files changed, 16 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 9a847da3f..b8f1b209d 100644 --- a/README.md +++ b/README.md @@ -150,8 +150,8 @@ rely on CI. - [ ] arm/udivmodsi4.S (generic version is done) - [ ] arm/udivsi3.S (generic version is done) - [ ] arm/umodsi3.S (generic version is done) -- [ ] arm/unorddf2vfp.S -- [ ] arm/unordsf2vfp.S +- [x] arm/unorddf2vfp.S (generic version is done) +- [x] arm/unordsf2vfp.S (generic version is done) - [x] ashldi3.c - [x] ashrdi3.c - [x] comparedf2.c diff --git a/src/float/cmp.rs b/src/float/cmp.rs index 5c431304c..a3c6dd8af 100644 --- a/src/float/cmp.rs +++ b/src/float/cmp.rs @@ -115,6 +115,11 @@ intrinsics! { unord(a, b) as i32 } + #[avr_skip] + pub extern "C" fn __unordsf2vfp(a: f32, b: f32) -> i32 { + unord(a, b) + } + #[avr_skip] pub extern "C" fn __eqsf2(a: f32, b: f32) -> i32 { cmp(a, b).to_le_abi() @@ -151,6 +156,11 @@ intrinsics! { unord(a, b) as i32 } + #[avr_skip] + pub extern "C" fn __unorddf2vfp(a: f64, b: f64) -> i32 { + unord(a, b) as i32 + } + #[avr_skip] pub extern "C" fn __eqdf2(a: f64, b: f64) -> i32 { cmp(a, b).to_le_abi() diff --git a/testcrate/tests/cmp.rs b/testcrate/tests/cmp.rs index e8a0eb165..ba355e30e 100644 --- a/testcrate/tests/cmp.rs +++ b/testcrate/tests/cmp.rs @@ -58,11 +58,12 @@ mod float_comparisons { #[test] fn cmp_f32() { use compiler_builtins::float::cmp::{ - __eqsf2, __gesf2, __gtsf2, __lesf2, __ltsf2, __nesf2, __unordsf2, + __eqsf2, __gesf2, __gtsf2, __lesf2, __ltsf2, __nesf2, __unordsf2, __unordsf2vfp, }; fuzz_float_2(N, |x: f32, y: f32| { assert_eq!(__unordsf2(x, y) != 0, x.is_nan() || y.is_nan()); + assert_eq!(__unordsf2vfp(x, y) != 0, x.is_nan() || y.is_nan()); cmp!(f32, x, y, Single, all(), 1, __ltsf2; 1, __lesf2; @@ -77,11 +78,12 @@ mod float_comparisons { #[test] fn cmp_f64() { use compiler_builtins::float::cmp::{ - __eqdf2, __gedf2, __gtdf2, __ledf2, __ltdf2, __nedf2, __unorddf2, + __eqdf2, __gedf2, __gtdf2, __ledf2, __ltdf2, __nedf2, __unorddf2, __unorddf2vfp, }; fuzz_float_2(N, |x: f64, y: f64| { assert_eq!(__unorddf2(x, y) != 0, x.is_nan() || y.is_nan()); + assert_eq!(__unorddf2vfp(x, y) != 0, x.is_nan() || y.is_nan()); cmp!(f64, x, y, Double, all(), 1, __ltdf2; 1, __ledf2; From 66764fdf0ec062fe4e813a9ca510bca3d6787dab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20B=C3=A9chet?= Date: Wed, 29 May 2024 22:23:25 +0200 Subject: [PATCH 2/2] Add generic unorddf2vfp() and unordsf2vfp() --- src/float/cmp.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/float/cmp.rs b/src/float/cmp.rs index a3c6dd8af..1f08f9405 100644 --- a/src/float/cmp.rs +++ b/src/float/cmp.rs @@ -117,7 +117,7 @@ intrinsics! { #[avr_skip] pub extern "C" fn __unordsf2vfp(a: f32, b: f32) -> i32 { - unord(a, b) + unord(a, b) as i32 } #[avr_skip]