diff options
| author | Martin Kagamino Lehoux <martin@lehoux.net> | 2025-08-23 22:07:34 +0200 |
|---|---|---|
| committer | Martin Kagamino Lehoux <martin@lehoux.net> | 2025-08-27 11:46:25 +0200 |
| commit | 37516080db6878bef6fb1e6c5542165f3f982792 (patch) | |
| tree | d6d37921249b52b53df7166aaf67db510469f3c4 /src/json.c | |
| parent | b22b59adb72371d6ca7072eca2c166f4c2534677 (diff) | |
code upgrade
Diffstat (limited to 'src/json.c')
| -rw-r--r-- | src/json.c | 9 |
1 files changed, 5 insertions, 4 deletions
@@ -1,5 +1,6 @@ #include <ctype.h> #include <immintrin.h> +#include <stdbit.h> #include <stddef.h> #include <stdint.h> #include <stdio.h> @@ -185,15 +186,15 @@ parse_result parse_string(byte *src, uptr start_pos, uptr max_pos) { result.pos = start_pos + 1; // SIMD optimization: process 32 bytes at a time using AVX2 - byte_32 quote_mask = _mm256_set1_epi8('"'); + bytex32 quote_mask = _mm256_set1_epi8('"'); for (; result.pos + 32 <= max_pos; result.pos += 32) { - byte_32 chunk = _mm256_loadu_si256((byte_32 *)(src + result.pos)); - byte_32 cmp = _mm256_cmpeq_epi8(chunk, quote_mask); + bytex32 chunk = _mm256_loadu_si256((bytex32 *)(src + result.pos)); + bytex32 cmp = _mm256_cmpeq_epi8(chunk, quote_mask); i32 mask = _mm256_movemask_epi8(cmp); if (mask != 0) { - result.pos += __builtin_ctz(mask); + result.pos += stdc_trailing_zeros_ui(mask); if (src[result.pos - 1] != '\\') break; }; } |
