in src/detail/escape_sse42.cpp [48:84]
void write_escaped_sse42(
encode_context &context,
const char *begin,
const char *end) {
const auto buf = context.reserve(6 * (end - begin)); // 6 is the length of \u00xx
auto out = buf;
const __m128i ranges = _mm_setr_epi8(
0x00, 0x1F, // null byte & control characters
0x22, 0x22, // double quotation mark
0x5C, 0x5C, // reverse solidus (backslash)
0, 0, 0, 0, 0, 0, 0, 0, 0, 0
);
if (json_unaligned_2(begin) && (end - begin) >= 1) { write_escaped_1(out, begin); }
if (json_unaligned_4(begin) && (end - begin) >= 2) { write_escaped_2(out, begin); }
if (json_unaligned_8(begin) && (end - begin) >= 4) { write_escaped_4(out, begin); }
if (json_unaligned_16(begin) && (end - begin) >= 8) { write_escaped_8(out, begin); }
for (; end - begin >= 16; begin += 16) {
const __m128i chunk = _mm_load_si128(reinterpret_cast<const __m128i *>(begin));
const unsigned has_character_in_ranges = _mm_cmpestrc(ranges, 6, chunk, 16, _SIDD_CMP_RANGES);
if (json_likely(!has_character_in_ranges)) {
_mm_storeu_si128(reinterpret_cast<__m128i *>(out), chunk);
out += 16;
} else {
write_escaped_16_sse42(out, chunk);
}
}
if ((end - begin) >= 8) { write_escaped_8(out, begin); }
if ((end - begin) >= 4) { write_escaped_4(out, begin); }
if ((end - begin) >= 2) { write_escaped_2(out, begin); }
if ((end - begin) >= 1) { write_escaped_1(out, begin); }
context.advance(out - buf);
}