Skip to content

Commit 5a2c034

Browse files
committed
correct ifdefs, without resolver support
1 parent 1826161 commit 5a2c034

File tree

1 file changed

+9
-11
lines changed

1 file changed

+9
-11
lines changed

ext/json/json_encoder.c

Lines changed: 9 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -30,9 +30,9 @@
3030
#include "zend_property_hooks.h"
3131
#include "zend_lazy_objects.h"
3232

33-
#include <nmmintrin.h>
34-
# pragma GCC push_options
35-
# pragma GCC target ("sse4.2")
33+
#ifdef ZEND_INTRIN_SSE4_2_NATIVE
34+
# include <nmmintrin.h>
35+
#endif
3636

3737
static const char digits[] = "0123456789abcdef";
3838

@@ -432,8 +432,7 @@ static zend_always_inline bool php_json_printable_ascii_escape(smart_str *buf, u
432432
return true;
433433
}
434434

435-
#ifdef __SSE2__
436-
// TODO: may be unused
435+
#ifdef ZEND_INTRIN_SSE4_2_NATIVE
437436
static zend_always_inline __m128i php_json_create_sse_escape_mask(int options)
438437
{
439438
const char sentinel = 1; /* outside of the printable range, so no false matches are possible */
@@ -483,9 +482,8 @@ zend_result php_json_escape_string(
483482

484483
pos = 0;
485484

486-
#ifdef __SSE2__
485+
#ifdef ZEND_INTRIN_SSE4_2_NATIVE
487486
const __m128i sse_escape_mask = php_json_create_sse_escape_mask(options);
488-
(void) sse_escape_mask;
489487
#endif
490488

491489
do {
@@ -505,7 +503,10 @@ zend_result php_json_escape_string(
505503
max_shift = __builtin_ctz(input_range_mask);
506504
}
507505

508-
#if 0
506+
#ifdef ZEND_INTRIN_SSE4_2_NATIVE /* TODO: resolver support */
507+
const __m128i result_individual_bytes = _mm_cmpistrm(sse_escape_mask, input, _SIDD_SBYTE_OPS | _SIDD_CMP_EQUAL_ANY | _SIDD_BIT_MASK);
508+
int mask = _mm_cvtsi128_si32(result_individual_bytes);
509+
#else
509510
const __m128i result_34 = _mm_cmpeq_epi8(input, _mm_set1_epi8('"'));
510511
const __m128i result_38 = _mm_cmpeq_epi8(input, _mm_set1_epi8('&'));
511512
const __m128i result_39 = _mm_cmpeq_epi8(input, _mm_set1_epi8('\''));
@@ -523,9 +524,6 @@ zend_result php_json_escape_string(
523524

524525
const __m128i result_individual_bytes = _mm_or_si128(result_34_38_39_47, result_60_62_92);
525526
int mask = _mm_movemask_epi8(result_individual_bytes);
526-
#else
527-
const __m128i result_individual_bytes = _mm_cmpistrm(sse_escape_mask, input, _SIDD_SBYTE_OPS | _SIDD_CMP_EQUAL_ANY | _SIDD_BIT_MASK);
528-
int mask = _mm_cvtsi128_si32(result_individual_bytes);
529527
#endif
530528
if (mask != 0) {
531529
if (max_shift < 16) {

0 commit comments

Comments
 (0)