@@ -101,7 +101,7 @@ return CMP(SLJIT_NOT_EQUAL, reg, 0, SLJIT_IMM, 0xdc00);
101101}
102102#endif
103103
104- #endif /* SLJIT_CONFIG_X86 || SLJIT_CONFIG_S390X */
104+ #endif /* SLJIT_CONFIG_X86 || SLJIT_CONFIG_ARM_64 || SLJIT_CONFIG_S390X || SLJIT_CONFIG_LOONGARCH_64 */
105105
106106#if (defined SLJIT_CONFIG_X86 && SLJIT_CONFIG_X86 )
107107
@@ -229,7 +229,14 @@ switch (step)
229229 }
230230}
231231
232+ /* The AVX2 code path is currently disabled.
232233#define JIT_HAS_FAST_FORWARD_CHAR_SIMD (sljit_has_cpu_feature(SLJIT_HAS_SIMD))
234+ */
235+ #if defined(SLJIT_CONFIG_X86_64 ) && SLJIT_CONFIG_X86_64
236+ #define JIT_HAS_FAST_FORWARD_CHAR_SIMD 1
237+ #else
238+ #define JIT_HAS_FAST_FORWARD_CHAR_SIMD (sljit_has_cpu_feature(SLJIT_HAS_FPU))
239+ #endif
233240
234241static void fast_forward_char_simd (compiler_common * common , PCRE2_UCHAR char1 , PCRE2_UCHAR char2 , sljit_s32 offset )
235242{
@@ -247,10 +254,10 @@ struct sljit_jump *quit;
247254struct sljit_jump * partial_quit [2 ];
248255vector_compare_type compare_type = vector_compare_match1 ;
249256sljit_s32 tmp1_reg_ind = sljit_get_register_index (SLJIT_GP_REGISTER , TMP1 );
250- sljit_s32 data_ind = sljit_get_register_index (SLJIT_SIMD_REG_128 , SLJIT_VR0 );
251- sljit_s32 cmp1_ind = sljit_get_register_index (SLJIT_SIMD_REG_128 , SLJIT_VR1 );
252- sljit_s32 cmp2_ind = sljit_get_register_index (SLJIT_SIMD_REG_128 , SLJIT_VR2 );
253- sljit_s32 tmp_ind = sljit_get_register_index (SLJIT_SIMD_REG_128 , SLJIT_VR3 );
257+ sljit_s32 data_ind = sljit_get_register_index (reg_type , SLJIT_VR0 );
258+ sljit_s32 cmp1_ind = sljit_get_register_index (reg_type , SLJIT_VR1 );
259+ sljit_s32 cmp2_ind = sljit_get_register_index (reg_type , SLJIT_VR2 );
260+ sljit_s32 tmp_ind = sljit_get_register_index (reg_type , SLJIT_VR3 );
254261sljit_u32 bit = 0 ;
255262int i ;
256263
@@ -366,7 +373,14 @@ if (common->utf && offset > 0)
366373#endif
367374}
368375
376+ /* The AVX2 code path is currently disabled.
369377#define JIT_HAS_FAST_REQUESTED_CHAR_SIMD (sljit_has_cpu_feature(SLJIT_HAS_SIMD))
378+ */
379+ #if defined(SLJIT_CONFIG_X86_64 ) && SLJIT_CONFIG_X86_64
380+ #define JIT_HAS_FAST_REQUESTED_CHAR_SIMD 1
381+ #else
382+ #define JIT_HAS_FAST_REQUESTED_CHAR_SIMD (sljit_has_cpu_feature(SLJIT_HAS_FPU))
383+ #endif
370384
371385static jump_list * fast_requested_char_simd (compiler_common * common , PCRE2_UCHAR char1 , PCRE2_UCHAR char2 )
372386{
@@ -381,10 +395,10 @@ struct sljit_jump *quit;
381395jump_list * not_found = NULL ;
382396vector_compare_type compare_type = vector_compare_match1 ;
383397sljit_s32 tmp1_reg_ind = sljit_get_register_index (SLJIT_GP_REGISTER , TMP1 );
384- sljit_s32 data_ind = sljit_get_register_index (SLJIT_SIMD_REG_128 , SLJIT_VR0 );
385- sljit_s32 cmp1_ind = sljit_get_register_index (SLJIT_SIMD_REG_128 , SLJIT_VR1 );
386- sljit_s32 cmp2_ind = sljit_get_register_index (SLJIT_SIMD_REG_128 , SLJIT_VR2 );
387- sljit_s32 tmp_ind = sljit_get_register_index (SLJIT_SIMD_REG_128 , SLJIT_VR3 );
398+ sljit_s32 data_ind = sljit_get_register_index (reg_type , SLJIT_VR0 );
399+ sljit_s32 cmp1_ind = sljit_get_register_index (reg_type , SLJIT_VR1 );
400+ sljit_s32 cmp2_ind = sljit_get_register_index (reg_type , SLJIT_VR2 );
401+ sljit_s32 tmp_ind = sljit_get_register_index (reg_type , SLJIT_VR3 );
388402sljit_u32 bit = 0 ;
389403int i ;
390404
@@ -472,7 +486,14 @@ return not_found;
472486
473487#ifndef _WIN64
474488
489+ /* The AVX2 code path is currently disabled.
475490#define JIT_HAS_FAST_FORWARD_CHAR_PAIR_SIMD (sljit_has_cpu_feature(SLJIT_HAS_SIMD))
491+ */
492+ #if defined(SLJIT_CONFIG_X86_64 ) && SLJIT_CONFIG_X86_64
493+ #define JIT_HAS_FAST_FORWARD_CHAR_PAIR_SIMD 1
494+ #else
495+ #define JIT_HAS_FAST_FORWARD_CHAR_PAIR_SIMD (sljit_has_cpu_feature(SLJIT_HAS_FPU))
496+ #endif
476497
477498static void fast_forward_char_pair_simd (compiler_common * common , sljit_s32 offs1 ,
478499 PCRE2_UCHAR char1a , PCRE2_UCHAR char1b , sljit_s32 offs2 , PCRE2_UCHAR char2a , PCRE2_UCHAR char2b )
@@ -489,14 +510,14 @@ sljit_u32 bit1 = 0;
489510sljit_u32 bit2 = 0 ;
490511sljit_u32 diff = IN_UCHARS (offs1 - offs2 );
491512sljit_s32 tmp1_reg_ind = sljit_get_register_index (SLJIT_GP_REGISTER , TMP1 );
492- sljit_s32 data1_ind = sljit_get_register_index (SLJIT_SIMD_REG_128 , SLJIT_VR0 );
493- sljit_s32 data2_ind = sljit_get_register_index (SLJIT_SIMD_REG_128 , SLJIT_VR1 );
494- sljit_s32 cmp1a_ind = sljit_get_register_index (SLJIT_SIMD_REG_128 , SLJIT_VR2 );
495- sljit_s32 cmp2a_ind = sljit_get_register_index (SLJIT_SIMD_REG_128 , SLJIT_VR3 );
496- sljit_s32 cmp1b_ind = sljit_get_register_index (SLJIT_SIMD_REG_128 , SLJIT_VR4 );
497- sljit_s32 cmp2b_ind = sljit_get_register_index (SLJIT_SIMD_REG_128 , SLJIT_VR5 );
498- sljit_s32 tmp1_ind = sljit_get_register_index (SLJIT_SIMD_REG_128 , SLJIT_VR6 );
499- sljit_s32 tmp2_ind = sljit_get_register_index (SLJIT_SIMD_REG_128 , SLJIT_TMP_DEST_VREG );
513+ sljit_s32 data1_ind = sljit_get_register_index (reg_type , SLJIT_VR0 );
514+ sljit_s32 data2_ind = sljit_get_register_index (reg_type , SLJIT_VR1 );
515+ sljit_s32 cmp1a_ind = sljit_get_register_index (reg_type , SLJIT_VR2 );
516+ sljit_s32 cmp2a_ind = sljit_get_register_index (reg_type , SLJIT_VR3 );
517+ sljit_s32 cmp1b_ind = sljit_get_register_index (reg_type , SLJIT_VR4 );
518+ sljit_s32 cmp2b_ind = sljit_get_register_index (reg_type , SLJIT_VR5 );
519+ sljit_s32 tmp1_ind = sljit_get_register_index (reg_type , SLJIT_VR6 );
520+ sljit_s32 tmp2_ind = sljit_get_register_index (reg_type , SLJIT_TMP_DEST_VREG );
500521struct sljit_label * start ;
501522#if defined SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH != 32
502523struct sljit_label * restart ;
0 commit comments