@@ -301,64 +301,67 @@ macro_rules! impl_wide_int {
301301impl_wide_int ! ( u32 , u64 , 32 ) ;
302302impl_wide_int ! ( u64 , u128 , 64 ) ;
303303
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+ } ;
314329 #[ cfg( target_pointer_width = "64" ) ]
315330 {
316- 64
331+ y = x >> 32 ;
332+ if y != 0 {
333+ n -= 32 ;
334+ x = y;
335+ }
317336 }
318- #[ cfg( target_pointer_width = "32" ) ]
337+ #[ cfg( any ( target_pointer_width = "32" , target_pointer_width = "64" ) ) ]
319338 {
320- 32
339+ y = x >> 16 ;
340+ if y != 0 {
341+ n -= 16 ;
342+ x = y;
343+ }
321344 }
322- #[ cfg( target_pointer_width = "16" ) ]
323- {
324- 16
345+ y = x >> 8 ;
346+ if y != 0 {
347+ n -= 8 ;
348+ x = y;
325349 }
326- } ;
327- #[ cfg( target_pointer_width = "64" ) ]
328- {
329- y = x >> 32 ;
350+ y = x >> 4 ;
330351 if y != 0 {
331- n -= 32 ;
352+ n -= 4 ;
332353 x = y;
333354 }
334- }
335- #[ cfg( any( target_pointer_width = "32" , target_pointer_width = "64" ) ) ]
336- {
337- y = x >> 16 ;
355+ y = x >> 2 ;
338356 if y != 0 {
339- n -= 16 ;
357+ n -= 2 ;
340358 x = y;
341359 }
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+ }
363366 }
364367}
0 commit comments