BitMagic-C++
|
Processor specific optimizations for SSE2 instructions (internals) More...
Data Structures | |
class | bm::sse_empty_guard |
SSE2 reinitialization guard class. More... | |
Functions | |
void | bm::sse2_xor_arr_2_mask (__m128i *BMRESTRICT dst, const __m128i *BMRESTRICT src, const __m128i *BMRESTRICT src_end, bm::word_t mask) |
XOR array elements to specified mask dst = *src ^ mask. | |
void | bm::sse2_andnot_arr_2_mask (__m128i *BMRESTRICT dst, const __m128i *BMRESTRICT src, const __m128i *BMRESTRICT src_end, bm::word_t mask) |
Inverts array elements and NOT them to specified mask dst = ~*src & mask. | |
unsigned | bm::sse2_and_block (__m128i *BMRESTRICT dst, const __m128i *BMRESTRICT src) |
AND blocks2 dst &= *src. | |
unsigned | bm::sse2_and_arr_unal (__m128i *BMRESTRICT dst, const __m128i *BMRESTRICT src, const __m128i *BMRESTRICT src_end) |
AND array elements against another array (unaligned) dst &= *src. | |
bool | bm::sse2_or_block (__m128i *BMRESTRICT dst, const __m128i *BMRESTRICT src) |
OR array elements against another array dst |= *src. | |
bool | bm::sse2_or_arr_unal (__m128i *BMRESTRICT dst, const __m128i *BMRESTRICT src, const __m128i *BMRESTRICT src_end) |
OR array elements against another array (unaligned) dst |= *src. | |
bool | bm::sse2_or_block_2way (__m128i *BMRESTRICT dst, const __m128i *BMRESTRICT src1, const __m128i *BMRESTRICT src2) |
OR 2 blocks anc copy result to the destination dst = *src1 | src2. | |
bool | bm::sse2_or_block_3way (__m128i *BMRESTRICT dst, const __m128i *BMRESTRICT src1, const __m128i *BMRESTRICT src2) |
OR array elements against another 2 arrays dst |= *src1 | src2. | |
bool | bm::sse2_or_block_5way (__m128i *BMRESTRICT dst, const __m128i *BMRESTRICT src1, const __m128i *BMRESTRICT src2, const __m128i *BMRESTRICT src3, const __m128i *BMRESTRICT src4) |
OR array elements against another 2 arrays dst |= *src1 | src2 | src3 | src4. | |
unsigned | bm::sse2_xor_block (__m128i *BMRESTRICT dst, const __m128i *BMRESTRICT src) |
XOR block against another dst ^= *src. | |
unsigned | bm::sse2_xor_block_2way (__m128i *BMRESTRICT dst, const __m128i *BMRESTRICT src1, const __m128i *BMRESTRICT src2) |
3 operand XOR dst = *src1 ^ src2 | |
unsigned | bm::sse2_sub_block (__m128i *BMRESTRICT dst, const __m128i *BMRESTRICT src) |
AND-NOT (SUB) array elements against another array dst &= ~*src. | |
BMFORCEINLINE void | bm::sse2_set_block (__m128i *BMRESTRICT dst, bm::word_t value) |
SSE2 block memset dst = value. | |
BMFORCEINLINE void | bm::sse2_copy_block (__m128i *BMRESTRICT dst, const __m128i *BMRESTRICT src) |
SSE2 block copy dst = *src. | |
BMFORCEINLINE void | bm::sse2_stream_block (__m128i *BMRESTRICT dst, const __m128i *BMRESTRICT src) |
SSE2 block copy dst = *src. | |
void | bm::sse2_invert_block (__m128i *dst) |
Invert bit block dst = ~*dst or dst ^= *dst. | |
bm::id_t | bm::sse2_bit_count (const __m128i *block, const __m128i *block_end) |
unsigned | bm::sse2_gap_bfind (const unsigned short *BMRESTRICT buf, unsigned pos, unsigned *BMRESTRICT is_set) |
Hybrid binary search, starts as binary, then switches to linear scan. | |
unsigned | bm::sse2_gap_test (const unsigned short *BMRESTRICT buf, unsigned pos) |
Hybrid binary search, starts as binary, then switches to scan. | |
Processor specific optimizations for SSE2 instructions (internals)
|
inline |
AND array elements against another array (unaligned) dst &= *src.
Definition at line 175 of file bmsse_util.h.
References BM_ALIGN16, and BM_ALIGN16ATTR.
Referenced by bm::decoder::get_32_AND().
|
inline |
AND blocks2 dst &= *src.
Definition at line 125 of file bmsse_util.h.
References BM_ALIGN16, BM_ALIGN16ATTR, BMRESTRICT, and bm::set_block_size.
|
inline |
Inverts array elements and NOT them to specified mask dst = ~*src & mask.
Definition at line 102 of file bmsse_util.h.
|
inline |
SSE2 optimized bitcounting function implements parallel bitcounting algorithm for SSE2 instruction set.
unsigned CalcBitCount32(unsigned b) { b = (b & 0x55555555) + (b >> 1 & 0x55555555); b = (b & 0x33333333) + (b >> 2 & 0x33333333); b = (b + (b >> 4)) & 0x0F0F0F0F; b = b + (b >> 8); b = (b + (b >> 16)) & 0x0000003F; return b; }
Definition at line 62 of file bmsse2.h.
References BM_ALIGN16, and BM_ALIGN16ATTR.
BMFORCEINLINE void bm::sse2_copy_block | ( | __m128i *BMRESTRICT | dst, |
const __m128i *BMRESTRICT | src | ||
) |
SSE2 block copy dst = *src.
Definition at line 739 of file bmsse_util.h.
References BMRESTRICT, and bm::set_block_size.
|
inline |
Hybrid binary search, starts as binary, then switches to linear scan.
buf | - GAP buffer pointer. |
pos | - index of the element. |
is_set | - output. GAP value (0 or 1). |
Definition at line 413 of file bmsse2.h.
References BM_ASSERT, and bm::sse2_gap_find().
Referenced by bm::sse2_gap_test().
|
inline |
Hybrid binary search, starts as binary, then switches to scan.
Definition at line 461 of file bmsse2.h.
References bm::sse2_gap_bfind().
Referenced by bm::gap_test_unr().
|
inline |
Invert bit block dst = ~*dst or dst ^= *dst.
Definition at line 824 of file bmsse_util.h.
References BMRESTRICT, and bm::set_block_size.
|
inline |
OR array elements against another array (unaligned) dst |= *src.
Definition at line 342 of file bmsse_util.h.
Referenced by bm::decoder::get_32_OR().
|
inline |
OR array elements against another array dst |= *src.
Definition at line 288 of file bmsse_util.h.
References BMRESTRICT, and bm::set_block_size.
|
inline |
OR 2 blocks anc copy result to the destination dst = *src1 | src2.
Definition at line 394 of file bmsse_util.h.
References BMRESTRICT, and bm::set_block_size.
|
inline |
OR array elements against another 2 arrays dst |= *src1 | src2.
Definition at line 440 of file bmsse_util.h.
References BMRESTRICT, and bm::set_block_size.
|
inline |
OR array elements against another 2 arrays dst |= *src1 | src2 | src3 | src4.
Definition at line 491 of file bmsse_util.h.
References BMRESTRICT, and bm::set_block_size.
BMFORCEINLINE void bm::sse2_set_block | ( | __m128i *BMRESTRICT | dst, |
bm::word_t | value | ||
) |
SSE2 block memset dst = value.
Definition at line 710 of file bmsse_util.h.
References BMRESTRICT, and bm::set_block_size.
BMFORCEINLINE void bm::sse2_stream_block | ( | __m128i *BMRESTRICT | dst, |
const __m128i *BMRESTRICT | src | ||
) |
SSE2 block copy dst = *src.
Definition at line 780 of file bmsse_util.h.
References BMRESTRICT, and bm::set_block_size.
|
inline |
AND-NOT (SUB) array elements against another array dst &= ~*src.
Definition at line 660 of file bmsse_util.h.
References BM_ALIGN16, BM_ALIGN16ATTR, BMRESTRICT, and bm::set_block_size.
|
inline |
XOR array elements to specified mask dst = *src ^ mask.
Definition at line 78 of file bmsse_util.h.
|
inline |
XOR block against another dst ^= *src.
Definition at line 562 of file bmsse_util.h.
References BM_ALIGN16, BM_ALIGN16ATTR, BMRESTRICT, and bm::set_block_size.
|
inline |
3 operand XOR dst = *src1 ^ src2
Definition at line 609 of file bmsse_util.h.
References BM_ALIGN16, BM_ALIGN16ATTR, BMRESTRICT, and bm::set_block_size.