diff --git a/src/parser3.h b/src/parser3.h index 1c4d324..664d162 100644 --- a/src/parser3.h +++ b/src/parser3.h @@ -441,14 +441,15 @@ inline WeaselJsonStatus n_string2(Parser3 *self) { } break; } - uint8x16_t x; + int8x16_t x; memcpy(&x, self->buf, 16); - const auto dubquote = vceqq_s8(vdupq_n_u8('"'), x); - const auto backslash = vceqq_s8(vdupq_n_u8('\\'), x); - const auto control_or_negative = vcgtq_s8(vdupq_n_u8(0x20), x); + const auto dubquote = vreinterpretq_s8_u8(vceqq_s8(vdupq_n_s8('"'), x)); + const auto backslash = vreinterpretq_s8_u8(vceqq_s8(vdupq_n_s8('\\'), x)); + const auto control_or_negative = + vreinterpretq_s8_u8(vcgtq_s8(vdupq_n_s8(0x20), x)); const auto non_normal = vget_lane_u64( - vreinterpret_u64_u16(vshrn_n_u16( - vreinterpretq_u16_u8( + vreinterpret_u64_u8(vshrn_n_u16( + vreinterpretq_u16_s8( vorrq_s8(vorrq_s8(dubquote, backslash), control_or_negative)), 4)), 0);