33use crate :: float:: Float ;
44use crate :: int:: MinInt ;
55
6+ // https://github.com/llvm/llvm-project/blob/1e6ba3cd2fe96be00b6ed6ba28b3d9f9271d784d/compiler-rt/lib/builtins/fp_compare_impl.inc#L22
7+ #[ cfg( target_arch = "avr" ) ]
8+ pub type CmpResult = i8 ;
9+
10+ // https://github.com/llvm/llvm-project/blob/1e6ba3cd2fe96be00b6ed6ba28b3d9f9271d784d/compiler-rt/lib/builtins/fp_compare_impl.inc#L25
11+ #[ cfg( not( target_arch = "avr" ) ) ]
12+ pub type CmpResult = i32 ;
13+
614#[ derive( Clone , Copy ) ]
715enum Result {
816 Less ,
@@ -12,7 +20,7 @@ enum Result {
1220}
1321
1422impl Result {
15- fn to_le_abi ( self ) -> i32 {
23+ fn to_le_abi ( self ) -> CmpResult {
1624 match self {
1725 Result :: Less => -1 ,
1826 Result :: Equal => 0 ,
@@ -21,7 +29,7 @@ impl Result {
2129 }
2230 }
2331
24- fn to_ge_abi ( self ) -> i32 {
32+ fn to_ge_abi ( self ) -> CmpResult {
2533 match self {
2634 Result :: Less => -1 ,
2735 Result :: Equal => 0 ,
@@ -99,120 +107,99 @@ fn unord<F: Float>(a: F, b: F) -> bool {
99107}
100108
101109intrinsics ! {
102- #[ avr_skip]
103- pub extern "C" fn __lesf2( a: f32 , b: f32 ) -> i32 {
110+ pub extern "C" fn __lesf2( a: f32 , b: f32 ) -> crate :: float:: cmp:: CmpResult {
104111 cmp( a, b) . to_le_abi( )
105112 }
106113
107- #[ avr_skip]
108- pub extern "C" fn __gesf2( a: f32 , b: f32 ) -> i32 {
114+ pub extern "C" fn __gesf2( a: f32 , b: f32 ) -> crate :: float:: cmp:: CmpResult {
109115 cmp( a, b) . to_ge_abi( )
110116 }
111117
112- #[ avr_skip]
113118 #[ arm_aeabi_alias = __aeabi_fcmpun]
114- pub extern "C" fn __unordsf2( a: f32 , b: f32 ) -> i32 {
115- unord( a, b) as i32
119+ pub extern "C" fn __unordsf2( a: f32 , b: f32 ) -> crate :: float :: cmp :: CmpResult {
120+ unord( a, b) as crate :: float :: cmp :: CmpResult
116121 }
117122
118- #[ avr_skip]
119- pub extern "C" fn __eqsf2( a: f32 , b: f32 ) -> i32 {
123+ pub extern "C" fn __eqsf2( a: f32 , b: f32 ) -> crate :: float:: cmp:: CmpResult {
120124 cmp( a, b) . to_le_abi( )
121125 }
122126
123- #[ avr_skip]
124- pub extern "C" fn __ltsf2( a: f32 , b: f32 ) -> i32 {
127+ pub extern "C" fn __ltsf2( a: f32 , b: f32 ) -> crate :: float:: cmp:: CmpResult {
125128 cmp( a, b) . to_le_abi( )
126129 }
127130
128- #[ avr_skip]
129- pub extern "C" fn __nesf2( a: f32 , b: f32 ) -> i32 {
131+ pub extern "C" fn __nesf2( a: f32 , b: f32 ) -> crate :: float:: cmp:: CmpResult {
130132 cmp( a, b) . to_le_abi( )
131133 }
132134
133- #[ avr_skip]
134- pub extern "C" fn __gtsf2( a: f32 , b: f32 ) -> i32 {
135+ pub extern "C" fn __gtsf2( a: f32 , b: f32 ) -> crate :: float:: cmp:: CmpResult {
135136 cmp( a, b) . to_ge_abi( )
136137 }
137138
138- #[ avr_skip]
139- pub extern "C" fn __ledf2( a: f64 , b: f64 ) -> i32 {
139+ pub extern "C" fn __ledf2( a: f64 , b: f64 ) -> crate :: float:: cmp:: CmpResult {
140140 cmp( a, b) . to_le_abi( )
141141 }
142142
143- #[ avr_skip]
144- pub extern "C" fn __gedf2( a: f64 , b: f64 ) -> i32 {
143+ pub extern "C" fn __gedf2( a: f64 , b: f64 ) -> crate :: float:: cmp:: CmpResult {
145144 cmp( a, b) . to_ge_abi( )
146145 }
147146
148- #[ avr_skip]
149147 #[ arm_aeabi_alias = __aeabi_dcmpun]
150- pub extern "C" fn __unorddf2( a: f64 , b: f64 ) -> i32 {
151- unord( a, b) as i32
148+ pub extern "C" fn __unorddf2( a: f64 , b: f64 ) -> crate :: float :: cmp :: CmpResult {
149+ unord( a, b) as crate :: float :: cmp :: CmpResult
152150 }
153151
154- #[ avr_skip]
155- pub extern "C" fn __eqdf2( a: f64 , b: f64 ) -> i32 {
152+ pub extern "C" fn __eqdf2( a: f64 , b: f64 ) -> crate :: float:: cmp:: CmpResult {
156153 cmp( a, b) . to_le_abi( )
157154 }
158155
159- #[ avr_skip]
160- pub extern "C" fn __ltdf2( a: f64 , b: f64 ) -> i32 {
156+ pub extern "C" fn __ltdf2( a: f64 , b: f64 ) -> crate :: float:: cmp:: CmpResult {
161157 cmp( a, b) . to_le_abi( )
162158 }
163159
164- #[ avr_skip]
165- pub extern "C" fn __nedf2( a: f64 , b: f64 ) -> i32 {
160+ pub extern "C" fn __nedf2( a: f64 , b: f64 ) -> crate :: float:: cmp:: CmpResult {
166161 cmp( a, b) . to_le_abi( )
167162 }
168163
169- #[ avr_skip]
170- pub extern "C" fn __gtdf2( a: f64 , b: f64 ) -> i32 {
164+ pub extern "C" fn __gtdf2( a: f64 , b: f64 ) -> crate :: float:: cmp:: CmpResult {
171165 cmp( a, b) . to_ge_abi( )
172166 }
173167}
174168
175169#[ cfg( f128_enabled) ]
176170intrinsics ! {
177- #[ avr_skip]
178171 #[ ppc_alias = __lekf2]
179- pub extern "C" fn __letf2( a: f128, b: f128) -> i32 {
172+ pub extern "C" fn __letf2( a: f128, b: f128) -> crate :: float :: cmp :: CmpResult {
180173 cmp( a, b) . to_le_abi( )
181174 }
182175
183- #[ avr_skip]
184176 #[ ppc_alias = __gekf2]
185- pub extern "C" fn __getf2( a: f128, b: f128) -> i32 {
177+ pub extern "C" fn __getf2( a: f128, b: f128) -> crate :: float :: cmp :: CmpResult {
186178 cmp( a, b) . to_ge_abi( )
187179 }
188180
189- #[ avr_skip]
190181 #[ ppc_alias = __unordkf2]
191- pub extern "C" fn __unordtf2( a: f128, b: f128) -> i32 {
192- unord( a, b) as i32
182+ pub extern "C" fn __unordtf2( a: f128, b: f128) -> crate :: float :: cmp :: CmpResult {
183+ unord( a, b) as crate :: float :: cmp :: CmpResult
193184 }
194185
195- #[ avr_skip]
196186 #[ ppc_alias = __eqkf2]
197- pub extern "C" fn __eqtf2( a: f128, b: f128) -> i32 {
187+ pub extern "C" fn __eqtf2( a: f128, b: f128) -> crate :: float :: cmp :: CmpResult {
198188 cmp( a, b) . to_le_abi( )
199189 }
200190
201- #[ avr_skip]
202191 #[ ppc_alias = __ltkf2]
203- pub extern "C" fn __lttf2( a: f128, b: f128) -> i32 {
192+ pub extern "C" fn __lttf2( a: f128, b: f128) -> crate :: float :: cmp :: CmpResult {
204193 cmp( a, b) . to_le_abi( )
205194 }
206195
207- #[ avr_skip]
208196 #[ ppc_alias = __nekf2]
209- pub extern "C" fn __netf2( a: f128, b: f128) -> i32 {
197+ pub extern "C" fn __netf2( a: f128, b: f128) -> crate :: float :: cmp :: CmpResult {
210198 cmp( a, b) . to_le_abi( )
211199 }
212200
213- #[ avr_skip]
214201 #[ ppc_alias = __gtkf2]
215- pub extern "C" fn __gttf2( a: f128, b: f128) -> i32 {
202+ pub extern "C" fn __gttf2( a: f128, b: f128) -> crate :: float :: cmp :: CmpResult {
216203 cmp( a, b) . to_ge_abi( )
217204 }
218205}
0 commit comments