@@ -301,64 +301,67 @@ macro_rules! impl_wide_int {
301
301
impl_wide_int ! ( u32 , u64 , 32 ) ;
302
302
impl_wide_int ! ( u64 , u128 , 64 ) ;
303
303
304
- #[ no_mangle]
305
- #[ cfg( any(
306
- target_pointer_width = "16" ,
307
- target_pointer_width = "32" ,
308
- target_pointer_width = "64"
309
- ) ) ]
310
- pub extern "C" fn __clzsi2 ( mut x : usize ) -> usize {
311
- // TODO: const this? Would require const-if
312
- let mut y: usize ;
313
- let mut n: usize = {
304
+ intrinsics ! {
305
+ #[ cfg( any(
306
+ target_pointer_width = "16" ,
307
+ target_pointer_width = "32" ,
308
+ target_pointer_width = "64"
309
+ ) ) ]
310
+ pub extern "C" fn __clzsi2( x: usize ) -> usize {
311
+ // TODO: const this? Would require const-if
312
+ // Note(Lokathor): the `intrinsics!` macro can't process mut inputs
313
+ let mut x = x;
314
+ let mut y: usize ;
315
+ let mut n: usize = {
316
+ #[ cfg( target_pointer_width = "64" ) ]
317
+ {
318
+ 64
319
+ }
320
+ #[ cfg( target_pointer_width = "32" ) ]
321
+ {
322
+ 32
323
+ }
324
+ #[ cfg( target_pointer_width = "16" ) ]
325
+ {
326
+ 16
327
+ }
328
+ } ;
314
329
#[ cfg( target_pointer_width = "64" ) ]
315
330
{
316
- 64
331
+ y = x >> 32 ;
332
+ if y != 0 {
333
+ n -= 32 ;
334
+ x = y;
335
+ }
317
336
}
318
- #[ cfg( target_pointer_width = "32" ) ]
337
+ #[ cfg( any ( target_pointer_width = "32" , target_pointer_width = "64" ) ) ]
319
338
{
320
- 32
339
+ y = x >> 16 ;
340
+ if y != 0 {
341
+ n -= 16 ;
342
+ x = y;
343
+ }
321
344
}
322
- #[ cfg( target_pointer_width = "16" ) ]
323
- {
324
- 16
345
+ y = x >> 8 ;
346
+ if y != 0 {
347
+ n -= 8 ;
348
+ x = y;
325
349
}
326
- } ;
327
- #[ cfg( target_pointer_width = "64" ) ]
328
- {
329
- y = x >> 32 ;
350
+ y = x >> 4 ;
330
351
if y != 0 {
331
- n -= 32 ;
352
+ n -= 4 ;
332
353
x = y;
333
354
}
334
- }
335
- #[ cfg( any( target_pointer_width = "32" , target_pointer_width = "64" ) ) ]
336
- {
337
- y = x >> 16 ;
355
+ y = x >> 2 ;
338
356
if y != 0 {
339
- n -= 16 ;
357
+ n -= 2 ;
340
358
x = y;
341
359
}
342
- }
343
- y = x >> 8 ;
344
- if y != 0 {
345
- n -= 8 ;
346
- x = y;
347
- }
348
- y = x >> 4 ;
349
- if y != 0 {
350
- n -= 4 ;
351
- x = y;
352
- }
353
- y = x >> 2 ;
354
- if y != 0 {
355
- n -= 2 ;
356
- x = y;
357
- }
358
- y = x >> 1 ;
359
- if y != 0 {
360
- n - 2
361
- } else {
362
- n - x
360
+ y = x >> 1 ;
361
+ if y != 0 {
362
+ n - 2
363
+ } else {
364
+ n - x
365
+ }
363
366
}
364
367
}
0 commit comments