inline fn clzXi2(comptime T: type, a: T) i32
inline fn clzXi2(comptime T: type, a: T) i32 { var x = switch (@bitSizeOf(T)) { 32 => @as(u32, @bitCast(a)), 64 => @as(u64, @bitCast(a)), 128 => @as(u128, @bitCast(a)), else => unreachable, }; var n: T = @bitSizeOf(T); // Count first bit set using binary search, from Hacker's Delight var y: @TypeOf(x) = 0; comptime var shift: u8 = @bitSizeOf(T); inline while (shift > 0) { shift = shift >> 1; y = x >> shift; if (y != 0) { n = n - shift; x = y; } } return @intCast(n - @as(T, @bitCast(x))); }