__attribute__((no_sanitize_address))
103vect_t vc1 = VDUPQ(c1);
105 #elif defined(FFCS_2) 107vect_t vc1 = VDUPQ(c1);
109vect_t vc2 = VDUPQ(c2);
111 #elif defined(FFCS_MASK) 113vect_t vc1 = VDUPQ(c1);
115vect_t vmask = VDUPQ(
mask);
119compare_type compare1_type = compare_match1;
120compare_type compare2_type = compare_match1;
121vect_t cmp1a, cmp1b, cmp2a, cmp2b;
122 const sljit_u32diff = IN_UCHARS(offs1 - offs2);
126 # ifdef FFCPS_CHAR1A2A 127cmp1a = VDUPQ(char1a);
128cmp2a = VDUPQ(char2a);
134 if(char1a == char1b)
136cmp1a = VDUPQ(char1a);
142 if(is_powerof2(bit1))
144compare1_type = compare_match1i;
145cmp1a = VDUPQ(char1a | bit1);
150compare1_type = compare_match2;
151cmp1a = VDUPQ(char1a);
152cmp1b = VDUPQ(char1b);
156 if(char2a == char2b)
158cmp2a = VDUPQ(char2a);
164 if(is_powerof2(bit2))
166compare2_type = compare_match1i;
167cmp2a = VDUPQ(char2a | bit2);
172compare2_type = compare_match2;
173cmp2a = VDUPQ(char2a);
174cmp2b = VDUPQ(char2b);
179*str_ptr += IN_UCHARS(offs1);
182 #if PCRE2_CODE_UNIT_WIDTH != 8 183vect_t char_mask = VDUPQ(0xff);
191 if(*str_ptr >= str_end)
197vect_t
data= VLD1Q(*str_ptr);
198 #if PCRE2_CODE_UNIT_WIDTH != 8 203vect_t
eq= VCEQQ(
data, vc1);
205 #elif defined(FFCS_2) 206vect_t eq1 = VCEQQ(
data, vc1);
207vect_t eq2 = VCEQQ(
data, vc2);
208vect_t
eq= VORRQ(eq1, eq2);
210 #elif defined(FFCS_MASK) 211vect_t
eq= VORRQ(
data, vmask);
212 eq= VCEQQ(
eq, vc1);
215 # if defined(FFCPS_DIFF1) 216vect_t prev_data =
data;
222data2 = VLD1Q(*str_ptr - diff);
223 #if PCRE2_CODE_UNIT_WIDTH != 8 224data2 = VANDQ(data2, char_mask);
228data2 = shift_left_n_lanes(
data, offs1 - offs2);
230 if(compare1_type == compare_match1)
233 data= fast_forward_char_pair_compare(compare1_type,
data, cmp1a, cmp1b);
235 if(compare2_type == compare_match1)
236data2 = VCEQQ(data2, cmp2a);
238data2 = fast_forward_char_pair_compare(compare2_type, data2, cmp2a, cmp2b);
240vect_t
eq= VANDQ(
data, data2);
245 if(align_offset < 8)
247qw.dw[0] >>= align_offset * 8;
250*str_ptr += align_offset + __builtin_ctzll(qw.dw[0]) / 8;
255*str_ptr += 8 + __builtin_ctzll(qw.dw[1]) / 8;
261qw.dw[1] >>= (align_offset - 8) * 8;
264*str_ptr += align_offset + __builtin_ctzll(qw.dw[1]) / 8;
270 while(*str_ptr < str_end)
272vect_t orig_data = VLD1Q(*str_ptr);
273 #if PCRE2_CODE_UNIT_WIDTH != 8 274orig_data = VANDQ(orig_data, char_mask);
281 #elif defined(FFCS_2) 282eq1 = VCEQQ(
data, vc1);
283eq2 = VCEQQ(
data, vc2);
284 eq= VORRQ(eq1, eq2);
286 #elif defined(FFCS_MASK) 287 eq= VORRQ(
data, vmask);
288 eq= VCEQQ(
eq, vc1);
292 # if defined (FFCPS_DIFF1) 293data2 = VEXTQ(prev_data,
data, VECTOR_FACTOR - 1);
295data2 = VLD1Q(*str_ptr - diff);
296 # if PCRE2_CODE_UNIT_WIDTH != 8 297data2 = VANDQ(data2, char_mask);
301 # ifdef FFCPS_CHAR1A2A 303data2 = VCEQQ(data2, cmp2a);
305 if(compare1_type == compare_match1)
308 data= fast_forward_char_pair_compare(compare1_type,
data, cmp1a, cmp1b);
309 if(compare2_type == compare_match1)
310data2 = VCEQQ(data2, cmp2a);
312data2 = fast_forward_char_pair_compare(compare2_type, data2, cmp2a, cmp2b);
315 eq= VANDQ(
data, data2);
320*str_ptr += __builtin_ctzll(qw.dw[0]) / 8;
322*str_ptr += 8 + __builtin_ctzll(qw.dw[1]) / 8;
325 #if defined (FFCPS_DIFF1) 326prev_data = orig_data;
332 if(*str_ptr >= str_end)
337 if(utf_continue((
PCRE2_SPTR)*str_ptr - offs1))
340*str_ptr += IN_UCHARS(1);
347*str_ptr -= IN_UCHARS(offs1);
ncbi::TMaskedQueryRegions mask
static const BitmapCharRec *const chars[]
bool eq(T x_, T y_, T round_)
static sljit_u8 *SLJIT_FUNC FF_FUN(sljit_u8 *str_end, sljit_u8 **str_ptr, sljit_uw offs1, sljit_uw offs2, sljit_uw chars)
static int match(PCRE2_SPTR start_eptr, PCRE2_SPTR start_ecode, uint16_t top_bracket, PCRE2_SIZE frame_size, pcre2_match_data *match_data, match_block *mb)
#define SLJIT_UNUSED_ARG(arg)
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4