@@ -4895,9 +4895,6 @@ static bool mb_fast_check_utf8_default(zend_string *str)
4895
4895
size_t len = ZSTR_LEN (str );
4896
4896
4897
4897
static const int8_t _verror [] = {9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 1 };
4898
- static const int8_t _prev_not_ascii [] = {-1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -16 , -32 , -64 };
4899
-
4900
- int8x16_t bad_mask_prev_not_ascii = vld1q_s8 (_prev_not_ascii );
4901
4898
4902
4899
/* error flag vertor */
4903
4900
int8x16_t has_error = vdupq_n_s8 (0 );
@@ -4907,13 +4904,13 @@ static bool mb_fast_check_utf8_default(zend_string *str)
4907
4904
if (len >= 16 ) {
4908
4905
for (; i <= len - 16 ; i += 16 ) {
4909
4906
int8x16_t current_bytes = vld1q_s8 ((int8_t * )(p + i ));
4910
- /* top bit is all 0 , it is ASCII */
4907
+ /* All bytes are lower than 0x7F , it is ASCII */
4911
4908
int8x16_t is_ascii = vreinterpretq_s8_u8 (vqsubq_u8 (vreinterpretq_u8_s8 (current_bytes ), vdupq_n_u8 (0x7F )));
4912
4909
if (vmaxvq_u8 (is_ascii ) == 0 ) {
4913
- int8x16_t bad = vceqq_s8 ( vandq_s8 ( previous .rawbytes , bad_mask_prev_not_ascii ), bad_mask_prev_not_ascii );
4914
- if ( vmaxvq_u8 ( vreinterpretq_u8_s8 ( bad )) != 0 ) {
4915
- return false ;
4916
- }
4910
+ previous .rawbytes = vdupq_n_s8 ( 0 );
4911
+ previous . high_nibbles = vdupq_n_s8 ( 0 );
4912
+ previous . carried_continuations = vdupq_n_s8 ( 0 ) ;
4913
+ continue ;
4917
4914
}
4918
4915
neon_check_utf8_bytes (current_bytes , & previous , & has_error );
4919
4916
}
0 commit comments