#define SL( v, o ) __shiftleft128( *((v)+1), *((v)), o ) __forceinline U8 cmpBits( const register U64 *hay, const register U64 *pin, U8 register ohay, U8 register opin, U64 lpin ) { U64 register i; for( i=0; i < lpin/64; ++i, ++hay, ++pin ) { if( SL( hay, ohay ) != SL( pin, opin ) ) return 0; } { U8 lastbits = lpin % 64; U64 mask = ( ( 1ull << ( lastbits ) ) -1 ) << ( 64 - lastbits ); if( ( SL( hay, ohay ) & mask ) != ( SL( pin, opin ) & mask ) ) return 0; } return 1; } U64 bitstrnstrn( const register U64 *hay, const register U64 *pin, U8 register ohay, U8 register opin, U64 lhay, U64 lpin ) { U64 register i; for( i = ohay; i < lhay+ohay; ++i ) { if( cmpBits( hay+(i/64), pin, i%64, opin, lpin ) ) return i; } return -1; }