Zig 0.17.0-dev (Split by item)
This is an example of documentation generated by
ZigDoc , an alternative to Zig's built-in
Auto Doc feature. See also
examples in other modes/formats . The project being documented here (as the example) is the Zig library itself.
Zig › compiler_rt/ › bitreverse.zig
bitreverse.zig
Index
File
Code
const std = @import ("std" );
const builtin = @import ("builtin" );
const compiler_rt = @import ("../compiler_rt.zig" );
const symbol = compiler_rt .symbol ;
comptime {
symbol (&__bitreversesi2 , "__bitreversesi2" );
symbol (&__bitreversedi2 , "__bitreversedi2" );
symbol (&__bitreverseti2 , "__bitreverseti2" );
}
inline fn bitreverseXi2 (comptime T : type , a : T ) T {
switch (@bitSizeOf (T )) {
32 => {
var t : T = a ;
t = ((t >> 1 ) & 0x55555555 ) | ((t & 0x55555555 ) << 1 );
t = ((t >> 2 ) & 0x33333333 ) | ((t & 0x33333333 ) << 2 );
t = ((t >> 4 ) & 0x0F0F0F0F ) | ((t & 0x0F0F0F0F ) << 4 );
t = ((t >> 8 ) & 0x00FF00FF ) | ((t & 0x00FF00FF ) << 8 );
t = (t >> 16 ) | (t << 16 );
return t ;
},
64 => {
var t : T = a ;
t = ((t >> 1 ) & 0x5555555555555555 ) | ((t & 0x5555555555555555 ) << 1 );
t = ((t >> 2 ) & 0x3333333333333333 ) | ((t & 0x3333333333333333 ) << 2 );
t = ((t >> 4 ) & 0x0F0F0F0F0F0F0F0F ) | ((t & 0x0F0F0F0F0F0F0F0F ) << 4 );
t = ((t >> 8 ) & 0x00FF00FF00FF00FF ) | ((t & 0x00FF00FF00FF00FF ) << 8 );
t = ((t >> 16 ) & 0x0000FFFF0000FFFF ) | ((t & 0x0000FFFF0000FFFF ) << 16 );
t = (t >> 32 ) | (t << 32 );
return t ;
},
128 => {
var t : T = a ;
t = ((t >> 1 ) & 0x55555555555555555555555555555555 ) | ((t & 0x55555555555555555555555555555555 ) << 1 );
t = ((t >> 2 ) & 0x33333333333333333333333333333333 ) | ((t & 0x33333333333333333333333333333333 ) << 2 );
t = ((t >> 4 ) & 0x0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F ) | ((t & 0x0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F ) << 4 );
t = ((t >> 8 ) & 0x00FF00FF00FF00FF00FF00FF00FF00FF ) | ((t & 0x00FF00FF00FF00FF00FF00FF00FF00FF ) << 8 );
t = ((t >> 16 ) & 0x0000FFFF0000FFFF0000FFFF0000FFFF ) | ((t & 0x0000FFFF0000FFFF0000FFFF0000FFFF ) << 16 );
t = ((t >> 32 ) & 0x00000000FFFFFFFF00000000FFFFFFFF ) | ((t & 0x00000000FFFFFFFF00000000FFFFFFFF ) << 32 );
t = (t >> 64 ) | (t << 64 );
return t ;
},
else => unreachable ,
}
}
pub fn __bitreversesi2 (a : u32 ) callconv (.c ) u32 {
return bitreverseXi2 (u32 , a );
}
pub fn __bitreversedi2 (a : u64 ) callconv (.c ) u64 {
return bitreverseXi2 (u64 , a );
}
pub fn __bitreverseti2 (a : u128 ) callconv (.c ) u128 {
return bitreverseXi2 (u128 , a );
}
test {
_ = @import ("bitreversesi2_test.zig" );
_ = @import ("bitreversedi2_test.zig" );
_ = @import ("bitreverseti2_test.zig" );
}