@@ -99,7 +99,7 @@ mod tests {
9999 use qc:: { U32 , U64 } ;
100100
101101 check ! {
102- fn __divdi3( f: extern fn ( i64 , i64 ) -> i64 , n: U64 , d: U64 ) -> Option <i64 > {
102+ fn __divdi3( f: extern "C" fn ( i64 , i64 ) -> i64 , n: U64 , d: U64 ) -> Option <i64 > {
103103 let ( n, d) = ( n. 0 as i64 , d. 0 as i64 ) ;
104104 if d == 0 {
105105 None
@@ -108,7 +108,7 @@ mod tests {
108108 }
109109 }
110110
111- fn __moddi3( f: extern fn ( i64 , i64 ) -> i64 , n: U64 , d: U64 ) -> Option <i64 > {
111+ fn __moddi3( f: extern "C" fn ( i64 , i64 ) -> i64 , n: U64 , d: U64 ) -> Option <i64 > {
112112 let ( n, d) = ( n. 0 as i64 , d. 0 as i64 ) ;
113113 if d == 0 {
114114 None
@@ -117,7 +117,8 @@ mod tests {
117117 }
118118 }
119119
120- fn __divmoddi4( f: extern fn ( i64 , i64 , & mut i64 ) -> i64 ,
120+ #[ cfg( target_arch = "arm" ) ]
121+ fn __divmoddi4( f: extern "aapcs" fn ( i64 , i64 , & mut i64 ) -> i64 ,
121122 n: U64 ,
122123 d: U64 ) -> Option <( i64 , i64 ) > {
123124 let ( n, d) = ( n. 0 as i64 , d. 0 as i64 ) ;
@@ -130,7 +131,21 @@ mod tests {
130131 }
131132 }
132133
133- fn __divsi3( f: extern fn ( i32 , i32 ) -> i32 ,
134+ #[ cfg( not( target_arch = "arm" ) ) ]
135+ fn __divmoddi4( f: extern "C" fn ( i64 , i64 , & mut i64 ) -> i64 ,
136+ n: U64 ,
137+ d: U64 ) -> Option <( i64 , i64 ) > {
138+ let ( n, d) = ( n. 0 as i64 , d. 0 as i64 ) ;
139+ if d == 0 {
140+ None
141+ } else {
142+ let mut r = 0 ;
143+ let q = f( n, d, & mut r) ;
144+ Some ( ( q, r) )
145+ }
146+ }
147+
148+ fn __divsi3( f: extern "C" fn ( i32 , i32 ) -> i32 ,
134149 n: U32 ,
135150 d: U32 ) -> Option <i32 > {
136151 let ( n, d) = ( n. 0 as i32 , d. 0 as i32 ) ;
@@ -141,7 +156,7 @@ mod tests {
141156 }
142157 }
143158
144- fn __modsi3( f: extern fn ( i32 , i32 ) -> i32 ,
159+ fn __modsi3( f: extern "C" fn ( i32 , i32 ) -> i32 ,
145160 n: U32 ,
146161 d: U32 ) -> Option <i32 > {
147162 let ( n, d) = ( n. 0 as i32 , d. 0 as i32 ) ;
@@ -152,7 +167,7 @@ mod tests {
152167 }
153168 }
154169
155- fn __divmodsi4( f: extern fn ( i32 , i32 , & mut i32 ) -> i32 ,
170+ fn __divmodsi4( f: extern "C" fn ( i32 , i32 , & mut i32 ) -> i32 ,
156171 n: U32 ,
157172 d: U32 ) -> Option <( i32 , i32 ) > {
158173 let ( n, d) = ( n. 0 as i32 , d. 0 as i32 ) ;
@@ -176,7 +191,7 @@ mod tests_i128 {
176191 use qc:: U128 ;
177192 check ! {
178193
179- fn __divti3( f: extern fn ( i128 , i128 ) -> i128 , n: U128 , d: U128 ) -> Option <i128 > {
194+ fn __divti3( f: extern "C" fn ( i128 , i128 ) -> i128 , n: U128 , d: U128 ) -> Option <i128 > {
180195 let ( n, d) = ( n. 0 as i128 , d. 0 as i128 ) ;
181196 if d == 0 {
182197 None
@@ -185,7 +200,7 @@ mod tests_i128 {
185200 }
186201 }
187202
188- fn __modti3( f: extern fn ( i128 , i128 ) -> i128 , n: U128 , d: U128 ) -> Option <i128 > {
203+ fn __modti3( f: extern "C" fn ( i128 , i128 ) -> i128 , n: U128 , d: U128 ) -> Option <i128 > {
189204 let ( n, d) = ( n. 0 as i128 , d. 0 as i128 ) ;
190205 if d == 0 {
191206 None
0 commit comments