3
3
use crate :: float:: Float ;
4
4
use crate :: int:: MinInt ;
5
5
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
+
6
14
#[ derive( Clone , Copy ) ]
7
15
enum Result {
8
16
Less ,
@@ -12,7 +20,7 @@ enum Result {
12
20
}
13
21
14
22
impl Result {
15
- fn to_le_abi ( self ) -> i32 {
23
+ fn to_le_abi ( self ) -> CmpResult {
16
24
match self {
17
25
Result :: Less => -1 ,
18
26
Result :: Equal => 0 ,
@@ -21,7 +29,7 @@ impl Result {
21
29
}
22
30
}
23
31
24
- fn to_ge_abi ( self ) -> i32 {
32
+ fn to_ge_abi ( self ) -> CmpResult {
25
33
match self {
26
34
Result :: Less => -1 ,
27
35
Result :: Equal => 0 ,
@@ -99,120 +107,99 @@ fn unord<F: Float>(a: F, b: F) -> bool {
99
107
}
100
108
101
109
intrinsics ! {
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 {
104
111
cmp( a, b) . to_le_abi( )
105
112
}
106
113
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 {
109
115
cmp( a, b) . to_ge_abi( )
110
116
}
111
117
112
- #[ avr_skip]
113
118
#[ 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
116
121
}
117
122
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 {
120
124
cmp( a, b) . to_le_abi( )
121
125
}
122
126
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 {
125
128
cmp( a, b) . to_le_abi( )
126
129
}
127
130
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 {
130
132
cmp( a, b) . to_le_abi( )
131
133
}
132
134
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 {
135
136
cmp( a, b) . to_ge_abi( )
136
137
}
137
138
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 {
140
140
cmp( a, b) . to_le_abi( )
141
141
}
142
142
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 {
145
144
cmp( a, b) . to_ge_abi( )
146
145
}
147
146
148
- #[ avr_skip]
149
147
#[ 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
152
150
}
153
151
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 {
156
153
cmp( a, b) . to_le_abi( )
157
154
}
158
155
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 {
161
157
cmp( a, b) . to_le_abi( )
162
158
}
163
159
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 {
166
161
cmp( a, b) . to_le_abi( )
167
162
}
168
163
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 {
171
165
cmp( a, b) . to_ge_abi( )
172
166
}
173
167
}
174
168
175
169
#[ cfg( f128_enabled) ]
176
170
intrinsics ! {
177
- #[ avr_skip]
178
171
#[ 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 {
180
173
cmp( a, b) . to_le_abi( )
181
174
}
182
175
183
- #[ avr_skip]
184
176
#[ 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 {
186
178
cmp( a, b) . to_ge_abi( )
187
179
}
188
180
189
- #[ avr_skip]
190
181
#[ 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
193
184
}
194
185
195
- #[ avr_skip]
196
186
#[ 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 {
198
188
cmp( a, b) . to_le_abi( )
199
189
}
200
190
201
- #[ avr_skip]
202
191
#[ 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 {
204
193
cmp( a, b) . to_le_abi( )
205
194
}
206
195
207
- #[ avr_skip]
208
196
#[ 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 {
210
198
cmp( a, b) . to_le_abi( )
211
199
}
212
200
213
- #[ avr_skip]
214
201
#[ 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 {
216
203
cmp( a, b) . to_ge_abi( )
217
204
}
218
205
}
0 commit comments