on master help sign in
encodeUtf8: squeeze out a little more fast path performance
12677f2Bryan O'Sullivan
cbits/cbits.c+14−1
@@ -245,8 +245,21 @@ _hs_text_encode_utf8(uint8_t **destp, const uint16_t *src, size_t srcoff,
245 while (srcend - src >= 4) {
245 while (srcend - src >= 4) {
246 uint64_t w = *((uint64_t *) src);
246 uint64_t w = *((uint64_t *) src);
247
247
248− if (w & 0xFF80FF80FF80FF80ULL)
248+ if (w & 0xFF80FF80FF80FF80ULL) {
249+ if (!(w & 0x000000000000FF80ULL)) {
250+ *dest++ = w & 0xFFFF;
251+ src++;
252+ if (!(w & 0x00000000FF800000ULL)) {
253+ *dest++ = (w >> 16) & 0xFFFF;
254+ src++;
255+ if (!(w & 0x0000FF8000000000ULL)) {
256+ *dest++ = (w >> 32) & 0xFFFF;
257+ src++;
258+ }
259+ }
260+ }
249 break;
261 break;
262+ }
250 *dest++ = w & 0xFFFF;
263 *dest++ = w & 0xFFFF;
251 *dest++ = (w >> 16) & 0xFFFF;
264 *dest++ = (w >> 16) & 0xFFFF;
252 *dest++ = (w >> 32) & 0xFFFF;
265 *dest++ = (w >> 32) & 0xFFFF;