33use crate :: float:: Float ;
44use crate :: int:: MinInt ;
55
6+ #[ cfg( target_arch = "avr" ) ]
7+ type CmpResult = i8 ;
8+
9+ #[ cfg( not( target_arch = "avr" ) ) ]
10+ type CmpResult = i32 ;
11+
612#[ derive( Clone , Copy ) ]
713enum Result {
814 Less ,
@@ -12,7 +18,7 @@ enum Result {
1218}
1319
1420impl Result {
15- fn to_le_abi ( self ) -> i32 {
21+ fn to_le_abi ( self ) -> CmpResult {
1622 match self {
1723 Result :: Less => -1 ,
1824 Result :: Equal => 0 ,
@@ -21,7 +27,7 @@ impl Result {
2127 }
2228 }
2329
24- fn to_ge_abi ( self ) -> i32 {
30+ fn to_ge_abi ( self ) -> CmpResult {
2531 match self {
2632 Result :: Less => -1 ,
2733 Result :: Equal => 0 ,
@@ -99,120 +105,99 @@ fn unord<F: Float>(a: F, b: F) -> bool {
99105}
100106
101107intrinsics ! {
102- #[ avr_skip]
103- pub extern "C" fn __lesf2( a: f32 , b: f32 ) -> i32 {
108+ pub extern "C" fn __lesf2( a: f32 , b: f32 ) -> CmpResult {
104109 cmp( a, b) . to_le_abi( )
105110 }
106111
107- #[ avr_skip]
108- pub extern "C" fn __gesf2( a: f32 , b: f32 ) -> i32 {
112+ pub extern "C" fn __gesf2( a: f32 , b: f32 ) -> CmpResult {
109113 cmp( a, b) . to_ge_abi( )
110114 }
111115
112- #[ avr_skip]
113116 #[ arm_aeabi_alias = __aeabi_fcmpun]
114- pub extern "C" fn __unordsf2( a: f32 , b: f32 ) -> i32 {
115- unord( a, b) as i32
117+ pub extern "C" fn __unordsf2( a: f32 , b: f32 ) -> CmpResult {
118+ unord( a, b) as CmpResult
116119 }
117120
118- #[ avr_skip]
119- pub extern "C" fn __eqsf2( a: f32 , b: f32 ) -> i32 {
121+ pub extern "C" fn __eqsf2( a: f32 , b: f32 ) -> CmpResult {
120122 cmp( a, b) . to_le_abi( )
121123 }
122124
123- #[ avr_skip]
124- pub extern "C" fn __ltsf2( a: f32 , b: f32 ) -> i32 {
125+ pub extern "C" fn __ltsf2( a: f32 , b: f32 ) -> CmpResult {
125126 cmp( a, b) . to_le_abi( )
126127 }
127128
128- #[ avr_skip]
129- pub extern "C" fn __nesf2( a: f32 , b: f32 ) -> i32 {
129+ pub extern "C" fn __nesf2( a: f32 , b: f32 ) -> CmpResult {
130130 cmp( a, b) . to_le_abi( )
131131 }
132132
133- #[ avr_skip]
134- pub extern "C" fn __gtsf2( a: f32 , b: f32 ) -> i32 {
133+ pub extern "C" fn __gtsf2( a: f32 , b: f32 ) -> CmpResult {
135134 cmp( a, b) . to_ge_abi( )
136135 }
137136
138- #[ avr_skip]
139- pub extern "C" fn __ledf2( a: f64 , b: f64 ) -> i32 {
137+ pub extern "C" fn __ledf2( a: f64 , b: f64 ) -> CmpResult {
140138 cmp( a, b) . to_le_abi( )
141139 }
142140
143- #[ avr_skip]
144- pub extern "C" fn __gedf2( a: f64 , b: f64 ) -> i32 {
141+ pub extern "C" fn __gedf2( a: f64 , b: f64 ) -> CmpResult {
145142 cmp( a, b) . to_ge_abi( )
146143 }
147144
148- #[ avr_skip]
149145 #[ arm_aeabi_alias = __aeabi_dcmpun]
150- pub extern "C" fn __unorddf2( a: f64 , b: f64 ) -> i32 {
151- unord( a, b) as i32
146+ pub extern "C" fn __unorddf2( a: f64 , b: f64 ) -> CmpResult {
147+ unord( a, b) as CmpResult
152148 }
153149
154- #[ avr_skip]
155- pub extern "C" fn __eqdf2( a: f64 , b: f64 ) -> i32 {
150+ pub extern "C" fn __eqdf2( a: f64 , b: f64 ) -> CmpResult {
156151 cmp( a, b) . to_le_abi( )
157152 }
158153
159- #[ avr_skip]
160- pub extern "C" fn __ltdf2( a: f64 , b: f64 ) -> i32 {
154+ pub extern "C" fn __ltdf2( a: f64 , b: f64 ) -> CmpResult {
161155 cmp( a, b) . to_le_abi( )
162156 }
163157
164- #[ avr_skip]
165- pub extern "C" fn __nedf2( a: f64 , b: f64 ) -> i32 {
158+ pub extern "C" fn __nedf2( a: f64 , b: f64 ) -> CmpResult {
166159 cmp( a, b) . to_le_abi( )
167160 }
168161
169- #[ avr_skip]
170- pub extern "C" fn __gtdf2( a: f64 , b: f64 ) -> i32 {
162+ pub extern "C" fn __gtdf2( a: f64 , b: f64 ) -> CmpResult {
171163 cmp( a, b) . to_ge_abi( )
172164 }
173165}
174166
175167#[ cfg( f128_enabled) ]
176168intrinsics ! {
177- #[ avr_skip]
178169 #[ ppc_alias = __lekf2]
179- pub extern "C" fn __letf2( a: f128, b: f128) -> i32 {
170+ pub extern "C" fn __letf2( a: f128, b: f128) -> CmpResult {
180171 cmp( a, b) . to_le_abi( )
181172 }
182173
183- #[ avr_skip]
184174 #[ ppc_alias = __gekf2]
185- pub extern "C" fn __getf2( a: f128, b: f128) -> i32 {
175+ pub extern "C" fn __getf2( a: f128, b: f128) -> CmpResult {
186176 cmp( a, b) . to_ge_abi( )
187177 }
188178
189- #[ avr_skip]
190179 #[ ppc_alias = __unordkf2]
191- pub extern "C" fn __unordtf2( a: f128, b: f128) -> i32 {
192- unord( a, b) as i32
180+ pub extern "C" fn __unordtf2( a: f128, b: f128) -> CmpResult {
181+ unord( a, b) as CmpResult
193182 }
194183
195- #[ avr_skip]
196184 #[ ppc_alias = __eqkf2]
197- pub extern "C" fn __eqtf2( a: f128, b: f128) -> i32 {
185+ pub extern "C" fn __eqtf2( a: f128, b: f128) -> CmpResult {
198186 cmp( a, b) . to_le_abi( )
199187 }
200188
201- #[ avr_skip]
202189 #[ ppc_alias = __ltkf2]
203- pub extern "C" fn __lttf2( a: f128, b: f128) -> i32 {
190+ pub extern "C" fn __lttf2( a: f128, b: f128) -> CmpResult {
204191 cmp( a, b) . to_le_abi( )
205192 }
206193
207- #[ avr_skip]
208194 #[ ppc_alias = __nekf2]
209- pub extern "C" fn __netf2( a: f128, b: f128) -> i32 {
195+ pub extern "C" fn __netf2( a: f128, b: f128) -> CmpResult {
210196 cmp( a, b) . to_le_abi( )
211197 }
212198
213- #[ avr_skip]
214199 #[ ppc_alias = __gtkf2]
215- pub extern "C" fn __gttf2( a: f128, b: f128) -> i32 {
200+ pub extern "C" fn __gttf2( a: f128, b: f128) -> CmpResult {
216201 cmp( a, b) . to_ge_abi( )
217202 }
218203}
0 commit comments