diff options
author | Cyrille Bagard <nocbos@gmail.com> | 2023-09-12 19:45:40 (GMT) |
---|---|---|
committer | Cyrille Bagard <nocbos@gmail.com> | 2023-09-12 19:45:40 (GMT) |
commit | eddea5535071c775ea2efc543a88adbc775318d0 (patch) | |
tree | 3f3d4338e0dcbe88856bb8077461aff31cc585b0 /src/analysis | |
parent | bd24020c0e3419c6ce479a88c04b84c0ecd9a207 (diff) |
Check for CPU features before compiling.
Diffstat (limited to 'src/analysis')
-rw-r--r-- | src/analysis/scan/patterns/backends/bitap-int.h | 14 | ||||
-rw-r--r-- | src/analysis/scan/patterns/backends/bitap.c | 47 |
2 files changed, 44 insertions, 17 deletions
diff --git a/src/analysis/scan/patterns/backends/bitap-int.h b/src/analysis/scan/patterns/backends/bitap-int.h index 83ecc17..ea739b4 100644 --- a/src/analysis/scan/patterns/backends/bitap-int.h +++ b/src/analysis/scan/patterns/backends/bitap-int.h @@ -33,12 +33,15 @@ #include "../backend-int.h" #include "../../../../common/cpu.h" +#include "../../../../../config.h" #define BITAP_ATOM_SIZE 7 +#ifdef HAVE_AVX2 + /* Suivi d'un groupe de chaînes */ typedef struct _grouped_strings_avx2_t { @@ -64,6 +67,9 @@ typedef struct _group_manager_avx2_t } group_manager_avx2_t; +#endif + +#ifdef HAVE_AVX512_F /* Suivi d'un groupe de chaînes */ typedef struct _grouped_strings_avx512_t @@ -90,6 +96,8 @@ typedef struct _group_manager_avx512_t } group_manager_avx512_t; +#endif + /* Méthode de recherche basée sur l'algorithme Bitap (instance) */ struct _GBitapBackend @@ -98,11 +106,17 @@ struct _GBitapBackend CPUSMIDFeature optimization; /* Mode de calculs */ +#if defined HAVE_AVX2 || defined HAVE_AVX512_F union { +# ifdef HAVE_AVX2 group_manager_avx2_t manager_avx2; /* Gestionnaire pour AVX2 */ +# endif +# ifdef HAVE_AVX512_F group_manager_avx512_t manager_avx512;/* Gestionnaire pour AVX-512 */ +# endif }; +#endif }; diff --git a/src/analysis/scan/patterns/backends/bitap.c b/src/analysis/scan/patterns/backends/bitap.c index adf66d6..99e16e5 100644 --- a/src/analysis/scan/patterns/backends/bitap.c +++ b/src/analysis/scan/patterns/backends/bitap.c @@ -73,6 +73,8 @@ static void g_bitap_backend_output_stats(const GBitapBackend *); /* ---------------------- OPTIMISATIONS POUR ARCHITECTURE AVX2 ---------------------- */ +#ifdef HAVE_AVX2 + /* Indique la valeur portée par une expression rationnelle. */ static void extend_grouped_strings_avx2(grouped_strings_avx2_t ***, size_t *); @@ -82,13 +84,15 @@ static patid_t enroll_plain_pattern_avx2(GBitapBackend *, GScanContext *, const /* Parcours un contenu binaire à la recherche de motifs. */ static void run_scan_avx2(const GBitapBackend *, GScanContext *, const bin_t *, phys_t); - +#endif /* --------------------- OPTIMISATIONS POUR ARCHITECTURE AVX512 --------------------- */ +#ifdef HAVE_AVX512_F + /* Indique la valeur portée par une expression rationnelle. */ static void extend_grouped_strings_avx512(grouped_strings_avx512_t ***, size_t *); @@ -98,7 +102,7 @@ static patid_t enroll_plain_pattern_avx512(GBitapBackend *, GScanContext *, cons /* Parcours un contenu binaire à la recherche de motifs. */ static void run_scan_avx512(const GBitapBackend *, GScanContext *, const bin_t *, phys_t); - +#endif @@ -270,21 +274,19 @@ static patid_t g_bitap_backend_enroll_plain_pattern(GBitapBackend *backend, GSca { patid_t result; /* Identifiant à retourner */ - - - result = INVALID_PATTERN_ID; - - - - +#ifdef HAVE_AVX512_F if (0) + result = enroll_plain_pattern_avx512(backend, context, plain, len); + else +#endif +#ifdef HAVE_AVX2 + if (0) result = enroll_plain_pattern_avx2(backend, context, plain, len); - else +#endif - result = enroll_plain_pattern_avx512(backend, context, plain, len); - + result = INVALID_PATTERN_ID; return result; @@ -351,13 +353,22 @@ static void g_bitap_backend_run_scan(const GBitapBackend *backend, GScanContext assert(data != NULL); + + + +#ifdef HAVE_AVX512_F if (0) + run_scan_avx512(backend, context, data, dlen); + else +#endif +#ifdef HAVE_AVX2 + if (0) run_scan_avx2(backend, context, data, dlen); - else +#endif - run_scan_avx512(backend, context, data, dlen); + ; g_object_unref(G_OBJECT(content)); @@ -397,6 +408,7 @@ static void g_bitap_backend_output_stats(const GBitapBackend *backend) * Cf. https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#techs=AVX,AVX2 */ +#ifdef HAVE_AVX2 /****************************************************************************** * * @@ -1481,6 +1493,8 @@ static void run_scan_avx2(const GBitapBackend *backend, GScanContext *context, G +#endif + /* ---------------------------------------------------------------------------------- */ @@ -1494,6 +1508,7 @@ static void run_scan_avx2(const GBitapBackend *backend, GScanContext *context, G * - https://uops.info/table.html */ +#ifdef HAVE_AVX512_F /****************************************************************************** * * @@ -1619,9 +1634,6 @@ static patid_t enroll_plain_pattern_avx512(GBitapBackend *backend, GScanContext } - - - /****************************************************************************** * * * Paramètres : backend = moteur de recherche à manipuler. * @@ -2762,3 +2774,4 @@ static void run_scan_avx512__saved(const GBitapBackend *backend, GScanContext *c +#endif |