Skip to content

Commit 964ec9f

Browse files
committed
Micro optimization
1 parent 15ffa35 commit 964ec9f

1 file changed

Lines changed: 6 additions & 14 deletions

File tree

src/transform/RLT.cpp

Lines changed: 6 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -122,27 +122,19 @@ bool RLT::forward(SliceArray<kanzi::byte>& input, SliceArray<kanzi::byte>& outpu
122122
// Main loop
123123
while (true) {
124124
if (prev == src[srcIdx]) {
125-
const uint32 v = 0x01010101 * uint32(prev);
125+
const uint32 v = 0x01010101u * uint32(prev);
126+
const uint32 diff = uint32(LittleEndian::readInt32(&src[srcIdx])) ^ v;
126127

127-
if (KANZI_MEM_EQ4(reinterpret_cast<const kanzi::byte*>(&v), &src[srcIdx])) {
128+
if (diff == 0) {
128129
srcIdx += 4; run += 4;
129130

130131
if ((run < MAX_RUN4) && (srcIdx < srcEnd4))
131132
continue;
132133
}
133134
else {
134-
srcIdx++; run++;
135-
136-
if (prev == src[srcIdx]) {
137-
srcIdx++; run++;
138-
139-
if (prev == src[srcIdx]) {
140-
srcIdx++; run++;
141-
142-
if ((run < MAX_RUN4) && (srcIdx < srcEnd4))
143-
continue;
144-
}
145-
}
135+
const int n = Global::trailingZeros(diff) >> 3;
136+
srcIdx += n;
137+
run += n;
146138
}
147139
}
148140

0 commit comments

Comments
 (0)