From 347abdf0874459c0435671c4622b4cef8beecb98 Mon Sep 17 00:00:00 2001 From: Vinnie Falco Date: Sun, 3 Nov 2019 09:16:03 -0800 Subject: [PATCH] Fix sse treatment of chars --- include/boost/json/detail/sse2.hpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/include/boost/json/detail/sse2.hpp b/include/boost/json/detail/sse2.hpp index f4ba2abc..70953c40 100644 --- a/include/boost/json/detail/sse2.hpp +++ b/include/boost/json/detail/sse2.hpp @@ -30,6 +30,7 @@ count_unescaped( __m128i const q1 = _mm_set1_epi8( '"' ); __m128i const q2 = _mm_set1_epi8( '\\' ); __m128i const q3 = _mm_set1_epi8( 0x20 ); + __m128i const q4 = _mm_set1_epi8( -1 ); char const * s0 = s; @@ -39,7 +40,7 @@ count_unescaped( __m128i v2 = _mm_cmpeq_epi8( v1, q1 ); __m128i v3 = _mm_cmpeq_epi8( v1, q2 ); - __m128i v4 = _mm_cmplt_epi8( v1, q3 ); + __m128i v4 = _mm_and_si128( _mm_cmplt_epi8( v1, q3 ), _mm_cmpgt_epi8( v1, q4 ) ); // ch > -1 && ch < 0x20 __m128i v5 = _mm_or_si128( v2, v3 ); __m128i v6 = _mm_or_si128( v5, v4 );