Skip to content

Commit 5c7251e

Browse files
authored
Remove unrolling of last iteration of loop for x86 decode (#80)
* Remove unrolling of last iteration of loop for x86 decode It is not clear why this was originally done. There is no comment in the source code, but it does not seem to improve performance. * Load keys for current loop iteration instead of next iteration
1 parent a29ecf0 commit 5c7251e

1 file changed

Lines changed: 3 additions & 33 deletions

File tree

src/streamvbyte_x64_decode.c

Lines changed: 3 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -48,39 +48,9 @@ static inline const uint8_t *svb_decode_sse41_simple(uint32_t *out,
4848
int64_t Offset = -(int64_t)keybytes / 8 + 1;
4949

5050
const uint64_t *keyPtr64 = (const uint64_t *)keyPtr - Offset;
51-
uint64_t nextkeys;
52-
memcpy(&nextkeys, keyPtr64 + Offset, sizeof(nextkeys));
53-
for (; Offset != 0; ++Offset) {
54-
uint64_t keys = nextkeys;
55-
memcpy(&nextkeys, keyPtr64 + Offset + 1, sizeof(nextkeys));
56-
57-
Data = svb_decode_sse41((keys & 0xFF), &dataPtr);
58-
svb_write_sse41(out, Data);
59-
Data = svb_decode_sse41((keys & 0xFF00) >> 8, &dataPtr);
60-
svb_write_sse41(out + 4, Data);
61-
62-
keys >>= 16;
63-
Data = svb_decode_sse41((keys & 0xFF), &dataPtr);
64-
svb_write_sse41(out + 8, Data);
65-
Data = svb_decode_sse41((keys & 0xFF00) >> 8, &dataPtr);
66-
svb_write_sse41(out + 12, Data);
67-
68-
keys >>= 16;
69-
Data = svb_decode_sse41((keys & 0xFF), &dataPtr);
70-
svb_write_sse41(out + 16, Data);
71-
Data = svb_decode_sse41((keys & 0xFF00) >> 8, &dataPtr);
72-
svb_write_sse41(out + 20, Data);
73-
74-
keys >>= 16;
75-
Data = svb_decode_sse41((keys & 0xFF), &dataPtr);
76-
svb_write_sse41(out + 24, Data);
77-
Data = svb_decode_sse41((keys & 0xFF00) >> 8, &dataPtr);
78-
svb_write_sse41(out + 28, Data);
79-
80-
out += 32;
81-
}
82-
{
83-
uint64_t keys = nextkeys;
51+
uint64_t keys;
52+
for (; Offset != 1; ++Offset) {
53+
memcpy(&keys, keyPtr64 + Offset, sizeof(keys));
8454

8555
Data = svb_decode_sse41((keys & 0xFF), &dataPtr);
8656
svb_write_sse41(out, Data);

0 commit comments

Comments
 (0)