Skip to content

Commit 56c34a4

Browse files
committed
Simplify updatig search->ptr when there are no more matches in a chunk.
1 parent 5de293a commit 56c34a4

File tree

1 file changed

+4
-5
lines changed

1 file changed

+4
-5
lines changed

ext/json/ext/generator/generator.c

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,7 @@ typedef struct _search_state {
114114

115115
#ifdef ENABLE_SIMD
116116
const char *chunk_base;
117+
const char *chunk_end;
117118
uint8_t has_matches;
118119

119120
#ifdef HAVE_SIMD_NEON
@@ -344,11 +345,7 @@ static inline unsigned char search_escape_basic_neon(search_state *search)
344345
// neon_next_match will only advance search->ptr up to the last matching character.
345346
// Skip over any characters in the last chunk that occur after the last match.
346347
search->has_matches = 0;
347-
if (RB_UNLIKELY(search->chunk_base + sizeof(uint8x16_t) >= search->end)) {
348-
search->ptr = search->end;
349-
} else {
350-
search->ptr = search->chunk_base + sizeof(uint8x16_t);
351-
}
348+
search->ptr = search->chunk_end;
352349
}
353350
}
354351

@@ -403,6 +400,7 @@ static inline unsigned char search_escape_basic_neon(search_state *search)
403400
search->matches_mask = mask;
404401
search->has_matches = 1;
405402
search->chunk_base = search->ptr;
403+
search->chunk_end = search->ptr + sizeof(uint8x16_t);
406404
return neon_next_match(search);
407405
}
408406

@@ -425,6 +423,7 @@ static inline unsigned char search_escape_basic_neon(search_state *search)
425423

426424
search->matches_mask = neon_match_mask(needs_escape);
427425
search->has_matches = 1;
426+
search->chunk_end = search->end;
428427
search->chunk_base = search->ptr;
429428
return neon_next_match(search);
430429
}

0 commit comments

Comments
 (0)