Skip to content

Commit 7c966a6

Browse files
committed
wip
1 parent 2a2008e commit 7c966a6

File tree

1 file changed

+11
-4
lines changed

1 file changed

+11
-4
lines changed

ext/json/json_encoder.c

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -492,15 +492,22 @@ zend_result php_json_escape_string(
492492
static const uint32_t charmap[8] = {
493493
0xffffffff, 0x500080c4, 0x10000000, 0x00000000,
494494
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff};
495-
495+
// printf("pos %d\n", pos);
496496
#ifdef __SSE2__
497497
while (len >= sizeof(__m128i)) {
498498
const __m128i input = _mm_loadu_si128((__m128i *) (s + pos));
499-
const __m128i input_range = _mm_cmpgt_epi8(input, _mm_set1_epi8(31));
499+
const __m128i input_range = _mm_cmplt_epi8(input, _mm_set1_epi8(32));
500+
501+
//const uint8_t *raw = (const uint8_t *) &input_range;
502+
//for (int i =0;i<16;i++) {
503+
// printf("%x ", raw[i]);
504+
//}
505+
//printf("\n");
500506

507+
// TODO: problem if the first UTF-8 char comes before the first escape char
501508
int input_range_mask = _mm_movemask_epi8(input_range);
502-
if (input_range_mask != 0xffff) {
503-
int shift = __builtin_clz(~input_range_mask);
509+
if (input_range_mask != 0) {
510+
int shift = __builtin_ctz(input_range_mask);
504511
pos += shift;
505512
len -= shift;
506513
break;

0 commit comments

Comments
 (0)