#include #include #define BYTES_AT_ONCE 16 #define MBTYPE __m128i #define MASKTYPE int inline MASKTYPE forget_bits(MASKTYPE m,int b){return (m >>(b))<<(b);} const uint64_t ones=0x0101010101010101; MBTYPE make_mask(unsigned char c,int shift){ return _mm_set_epi64x(ones*((uint64_t)c),(ones >> (8*shift))*((uint64_t)c)); } #define LOAD(x) _mm_load_si128(( long long int * )x) #define test_eq _mm_cmpeq_epi8 #define AND _mm_and_si128 #define OR _mm_or_si128 #define shift_down _mm_srli_si128 #define shift_up _mm_slli_si128 inline int get_mask(MBTYPE x){ return _mm_movemask_epi8(x); } #define GET_BIT(x,y) (x&(1<<(y)))