summaryrefslogtreecommitdiff
path: root/src/analysis/scan/patterns
diff options
context:
space:
mode:
authorCyrille Bagard <nocbos@gmail.com>2023-09-12 19:45:40 (GMT)
committerCyrille Bagard <nocbos@gmail.com>2023-09-12 19:45:40 (GMT)
commiteddea5535071c775ea2efc543a88adbc775318d0 (patch)
tree3f3d4338e0dcbe88856bb8077461aff31cc585b0 /src/analysis/scan/patterns
parentbd24020c0e3419c6ce479a88c04b84c0ecd9a207 (diff)
Check for CPU features before compiling.
Diffstat (limited to 'src/analysis/scan/patterns')
-rw-r--r--src/analysis/scan/patterns/backends/bitap-int.h14
-rw-r--r--src/analysis/scan/patterns/backends/bitap.c47
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