pub mod abm {
pub mod u64 {
use generic::BitOps;
#[inline(always)]
pub fn lzcnt(src: u64) -> u64 {
src.o_count_leading() as u64
}
#[inline(always)]
pub fn popcnt(src: u64) -> u64 {
src.i_count_total() as u64
}
}
}
pub mod bmi1 {
pub mod u64 {
use generic::BitOps;
#[inline(always)]
pub fn andn(src1: u64, src2: u64) -> u64 {
src1.b_and_not(src2)
}
#[inline(always)]
pub fn bextr(src: u64, start: u32, len: u32) -> u64 {
src.b_get_block_from(start as usize, len as usize)
}
#[allow(unsigned_negation)]
#[inline(always)]
pub fn blsi(src: u64) -> u64 {
src.i_get()
}
#[inline(always)]
pub fn blsmsk(src: u64) -> u64 {
src.i_mask_upto()
}
#[inline(always)]
pub fn blsr(src: u64) -> u64 {
src.i_flip()
}
#[inline(always)]
pub fn tzcnt(src: u64) -> u64 {
src.o_count_trailing() as u64
}
}
}
pub mod bmi2 {
pub mod u64 {
use generic::BitOps;
#[inline(always)]
pub fn bzhi(src: u64, index: u32) -> u64 {
src.b_zero_high_from_pos(index as usize)
}
#[inline(always)]
pub fn pdep(val: u64, mask: u64) -> u64 {
val.b_scatter(mask)
}
#[inline(always)]
pub fn pext(val: u64, mask: u64) -> u64 {
val.b_gather(mask)
}
}
}
pub mod tbm {
pub mod u64 {
use generic::BitOps;
#[inline(always)]
pub fn blcfill(src: u64) -> u64 {
src.o_fill_upto()
}
#[inline(always)]
pub fn blci(src: u64) -> u64 {
src.o_get()
}
#[inline(always)]
pub fn blcic(src: u64) -> u64 {
src.o_get_invert()
}
#[inline(always)]
pub fn blcmsk(src: u64) -> u64 {
src.o_mask_upto()
}
#[inline(always)]
pub fn blcs(src: u64) -> u64 {
src.o_flip()
}
#[inline(always)]
pub fn blsfill(src: u64) -> u64 {
src.i_fill_upto()
}
#[inline(always)]
pub fn blsic(src: u64) -> u64 {
src.i_get_invert()
}
#[inline(always)]
pub fn t1mskc(src: u64) -> u64 {
src.i_mask_upto_invert()
}
#[inline(always)]
pub fn tzmsk(src: u64) -> u64 {
src.o_mask_upto_invert()
}
}
}