diff --git a/src/nfa/mcsheng.h b/src/nfa/mcsheng.h index 7cb808b7..0329e121 100644 --- a/src/nfa/mcsheng.h +++ b/src/nfa/mcsheng.h @@ -152,6 +152,6 @@ char nfaExecMcSheng64_16_expandState(const struct NFA *nfa, void *dest, #define nfaExecMcSheng64_16_testEOD NFA_API_NO_IMPL #define nfaExecMcSheng64_16_reportCurrent NFA_API_NO_IMPL -#endif //end of HAVE_AVX512VBM +#endif //end of HAVE_AVX512VBMI #endif diff --git a/src/nfa/mcsheng_compile.cpp b/src/nfa/mcsheng_compile.cpp index 3dca0fd8..fb75e49a 100644 --- a/src/nfa/mcsheng_compile.cpp +++ b/src/nfa/mcsheng_compile.cpp @@ -243,7 +243,6 @@ void populateBasicInfo(size_t state_size, const dfa_info &info, } } -#if defined(HAVE_AVX512VBMI) static mstate_aux *getAux64(NFA *n, dstate_id_t i) { mcsheng64 *m = (mcsheng64 *)getMutableImplNfa(n); @@ -343,7 +342,6 @@ void populateBasicInfo64(size_t state_size, const dfa_info &info, m->flags |= MCSHENG_FLAG_SINGLE; } } -#endif static size_t calcShermanRegionSize(const dfa_info &info) { @@ -719,7 +717,6 @@ void fill_in_succ_table_16(NFA *nfa, const dfa_info &info, } } -#if defined(HAVE_AVX512VBMI) static void fill_in_aux_info64(NFA *nfa, const dfa_info &info, const map &accel_escape_info, @@ -793,7 +790,6 @@ void fill_in_succ_table_64_16(NFA *nfa, const dfa_info &info, } } } -#endif #define MAX_SHERMAN_LIST_LEN 8 @@ -1113,7 +1109,6 @@ void fill_in_succ_table_8(NFA *nfa, const dfa_info &info, } } -#if defined(HAVE_AVX512VBMI) static void fill_in_sherman64(NFA *nfa, dfa_info &info, UNUSED u16 sherman_limit) { char *nfa_base = (char *)nfa; @@ -1267,7 +1262,6 @@ void fill_in_succ_table_64_8(NFA *nfa, const dfa_info &info, } } } -#endif static void allocateImplId8(dfa_info &info, dstate_id_t sheng_end, @@ -1366,7 +1360,6 @@ bytecode_ptr mcshengCompile8(dfa_info &info, dstate_id_t sheng_end, return nfa; } -#if defined(HAVE_AVX512VBMI) static bytecode_ptr mcsheng64Compile8(dfa_info &info, dstate_id_t sheng_end, const map &accel_escape_info) { @@ -1418,7 +1411,6 @@ bytecode_ptr mcsheng64Compile8(dfa_info &info, dstate_id_t sheng_end, return nfa; } -#endif bytecode_ptr mcshengCompile(raw_dfa &raw, const CompileContext &cc, const ReportManager &rm) { @@ -1468,13 +1460,17 @@ bytecode_ptr mcshengCompile(raw_dfa &raw, const CompileContext &cc, return nfa; } -#if defined(HAVE_AVX512VBMI) bytecode_ptr mcshengCompile64(raw_dfa &raw, const CompileContext &cc, const ReportManager &rm) { if (!cc.grey.allowMcSheng) { return nullptr; } + if (!cc.target_info.has_avx512vbmi()) { + DEBUG_PRINTF("McSheng64 failed, no HS_CPU_FEATURES_AVX512VBMI!\n"); + return nullptr; + } + mcclellan_build_strat mbs(raw, rm, false); dfa_info info(mbs); bool using8bit = cc.grey.allowMcClellan8 && info.size() <= 256; @@ -1523,7 +1519,6 @@ bytecode_ptr mcshengCompile64(raw_dfa &raw, const CompileContext &cc, DEBUG_PRINTF("compile done\n"); return nfa; } -#endif bool has_accel_mcsheng(const NFA *) { return true; /* consider the sheng region as accelerated */ diff --git a/src/nfa/mcsheng_data.c b/src/nfa/mcsheng_data.c index 64aafcbf..0701b4b3 100644 --- a/src/nfa/mcsheng_data.c +++ b/src/nfa/mcsheng_data.c @@ -53,4 +53,3 @@ const u64a mcsheng64_pext_mask[8] = { 0xff0000000000003f, }; #endif - diff --git a/src/nfa/mcsheng_dump.cpp b/src/nfa/mcsheng_dump.cpp index 1659987c..7cef82f4 100644 --- a/src/nfa/mcsheng_dump.cpp +++ b/src/nfa/mcsheng_dump.cpp @@ -174,7 +174,6 @@ void describeEdge(FILE *f, const mcsheng *m, const u16 *t, u16 i) { } } -#if defined(HAVE_AVX512VBMI) static const mstate_aux *getAux64(const NFA *n, dstate_id_t i) { auto *m = (const mcsheng64 *)getImplNfa(n); @@ -292,7 +291,6 @@ void describeEdge64(FILE *f, const mcsheng64 *m, const u16 *t, u16 i) { fprintf(f, "\" ];\n"); } } -#endif static void dumpAccelDot(FILE *f, u16 i, const union AccelAux *accel) { @@ -376,7 +374,6 @@ void describeNode(const NFA *n, const mcsheng *m, u16 i, FILE *f) { } -#if defined(HAVE_AVX512VBMI) static void describeNode64(const NFA *n, const mcsheng64 *m, u16 i, FILE *f) { const mstate_aux *aux = getAux64(n, i); @@ -436,7 +433,6 @@ void describeNode64(const NFA *n, const mcsheng64 *m, u16 i, FILE *f) { } } -#endif static void dumpDotPreambleDfa(FILE *f) { @@ -574,7 +570,6 @@ void dump_text_8(const NFA *nfa, FILE *f) { dumpTextReverse(nfa, f); } -#if defined(HAVE_AVX512VBMI) static void dump64_dot_16(const NFA *nfa, FILE *f) { auto *m = (const mcsheng64 *)getImplNfa(nfa); @@ -699,7 +694,6 @@ void dump64_text_16(const NFA *nfa, FILE *f) { fprintf(f, "\n"); dumpTextReverse(nfa, f); } -#endif void nfaExecMcSheng16_dump(const NFA *nfa, const string &base) { assert(nfa->type == MCSHENG_NFA_16); @@ -714,19 +708,15 @@ void nfaExecMcSheng8_dump(const NFA *nfa, const string &base) { } void nfaExecMcSheng64_16_dump(UNUSED const NFA *nfa, UNUSED const string &base) { -#if defined(HAVE_AVX512VBMI) assert(nfa->type == MCSHENG_64_NFA_16); dump64_text_16(nfa, StdioFile(base + ".txt", "w")); dump64_dot_16(nfa, StdioFile(base + ".dot", "w")); -#endif } void nfaExecMcSheng64_8_dump(UNUSED const NFA *nfa, UNUSED const string &base) { -#if defined(HAVE_AVX512VBMI) assert(nfa->type == MCSHENG_64_NFA_8); dump64_text_8(nfa, StdioFile(base + ".txt", "w")); dump64_dot_8(nfa, StdioFile(base + ".dot", "w")); -#endif } } // namespace ue2 diff --git a/src/nfa/mcsheng_internal.h b/src/nfa/mcsheng_internal.h index c8b28c13..d9855746 100644 --- a/src/nfa/mcsheng_internal.h +++ b/src/nfa/mcsheng_internal.h @@ -92,7 +92,6 @@ struct mcsheng { * representing the data from a u64a. */ extern const u64a mcsheng_pext_mask[8]; -#if defined(HAVE_AVX512VBMI) struct mcsheng64 { u16 state_count; /**< total number of states */ u32 length; /**< length of dfa in bytes */ @@ -121,6 +120,5 @@ struct mcsheng64 { }; extern const u64a mcsheng64_pext_mask[8]; -#endif #endif diff --git a/src/nfa/nfa_internal.h b/src/nfa/nfa_internal.h index 864ea900..ad27e28b 100644 --- a/src/nfa/nfa_internal.h +++ b/src/nfa/nfa_internal.h @@ -152,12 +152,8 @@ static really_inline int isMcClellanType(u8 t) { /** \brief True if the given type (from NFA::type) is a Sheng-McClellan hybrid * DFA. */ static really_inline int isShengMcClellanType(u8 t) { -#if defined(HAVE_AVX512VBMI) - return t == MCSHENG_64_NFA_8 || t == MCSHENG_64_NFA_16 || t == MCSHENG_NFA_8 || - t == MCSHENG_NFA_16; -#else - return t == MCSHENG_NFA_8 || t == MCSHENG_NFA_16; -#endif + return t == MCSHENG_NFA_8 || t == MCSHENG_NFA_16 || + t == MCSHENG_64_NFA_8 || t == MCSHENG_64_NFA_16; } /** \brief True if the given type (from NFA::type) is a Gough DFA. */ @@ -170,7 +166,6 @@ static really_inline int isSheng16Type(u8 t) { return t == SHENG_NFA; } -#if defined(HAVE_AVX512VBMI) /** \brief True if the given type (from NFA::type) is a Sheng32 DFA. */ static really_inline int isSheng32Type(u8 t) { return t == SHENG_NFA_32; @@ -180,15 +175,10 @@ static really_inline int isSheng32Type(u8 t) { static really_inline int isSheng64Type(u8 t) { return t == SHENG_NFA_64; } -#endif /** \brief True if the given type (from NFA::type) is a Sheng16/32/64 DFA. */ static really_inline int isShengType(u8 t) { -#if defined(HAVE_AVX512VBMI) return t == SHENG_NFA || t == SHENG_NFA_32 || t == SHENG_NFA_64; -#else - return t == SHENG_NFA; -#endif } /** diff --git a/src/nfa/sheng_internal.h b/src/nfa/sheng_internal.h index b3133e70..98536886 100644 --- a/src/nfa/sheng_internal.h +++ b/src/nfa/sheng_internal.h @@ -38,7 +38,6 @@ #define SHENG_STATE_MASK 0xF #define SHENG_STATE_FLAG_MASK 0x70 -#if defined (HAVE_AVX512VBMI) #define SHENG32_STATE_ACCEPT 0x20 #define SHENG32_STATE_DEAD 0x40 #define SHENG32_STATE_ACCEL 0x80 @@ -49,7 +48,6 @@ #define SHENG64_STATE_DEAD 0x80 #define SHENG64_STATE_MASK 0x3F #define SHENG64_STATE_FLAG_MASK 0xC0 -#endif #define SHENG_FLAG_SINGLE_REPORT 0x1 #define SHENG_FLAG_CAN_DIE 0x2 @@ -80,7 +78,6 @@ struct sheng { ReportID report; }; -#if defined (HAVE_AVX512VBMI) struct sheng32 { m512 succ_masks[256]; u32 length; @@ -106,6 +103,5 @@ struct sheng64 { u8 flags; ReportID report; }; -#endif #endif /* SHENG_INTERNAL_H_ */ diff --git a/src/nfa/shengcompile.cpp b/src/nfa/shengcompile.cpp index 54ef9efb..aa3faeb0 100644 --- a/src/nfa/shengcompile.cpp +++ b/src/nfa/shengcompile.cpp @@ -302,7 +302,6 @@ void dumpShuffleMask(const u8 chr, const u8 *buf, unsigned sz) { DEBUG_PRINTF("chr %3u: %s\n", chr, o.str().c_str()); } -#if defined (HAVE_AVX512VBMI) static really_inline void dumpShuffleMask32(const u8 chr, const u8 *buf, unsigned sz) { stringstream o; @@ -325,7 +324,6 @@ void dumpShuffleMask64(const u8 chr, const u8 *buf, unsigned sz) { DEBUG_PRINTF("chr %3u: %s\n", chr, o.str().c_str()); } #endif -#endif static void fillAccelOut(const map &accel_escape_info, @@ -358,7 +356,6 @@ u8 getShengState(dstate &state, dfa_info &info, return s; } -#if defined(HAVE_AVX512VBMI) template <> u8 getShengState(dstate &state, dfa_info &info, map &accelInfo) { @@ -387,7 +384,6 @@ u8 getShengState(dstate &state, dfa_info &info, } return s; } -#endif template static @@ -446,7 +442,6 @@ void populateBasicInfo(struct NFA *n, dfa_info &info, s->floating = getShengState(info.floating, info, accelInfo); } -#if defined(HAVE_AVX512VBMI) template <> void populateBasicInfo(struct NFA *n, dfa_info &info, map &accelInfo, @@ -496,7 +491,6 @@ void populateBasicInfo(struct NFA *n, dfa_info &info, s->anchored = getShengState(info.anchored, info, accelInfo); s->floating = getShengState(info.floating, info, accelInfo); } -#endif template static @@ -582,7 +576,6 @@ bool createShuffleMasks(sheng *s, dfa_info &info, return true; } -#if defined(HAVE_AVX512VBMI) template <> bool createShuffleMasks(sheng32 *s, dfa_info &info, map &accelInfo) { @@ -627,7 +620,6 @@ bool createShuffleMasks(sheng64 *s, dfa_info &info, } return true; } -#endif bool has_accel_sheng(const NFA *) { return true; /* consider the sheng region as accelerated */ @@ -731,7 +723,6 @@ bytecode_ptr shengCompile(raw_dfa &raw, const CompileContext &cc, return shengCompile_int(raw, cc, accel_states, strat, info); } -#if defined(HAVE_AVX512VBMI) bytecode_ptr sheng32Compile(raw_dfa &raw, const CompileContext &cc, const ReportManager &rm, bool only_accel_init, set *accel_states) { @@ -740,6 +731,11 @@ bytecode_ptr sheng32Compile(raw_dfa &raw, const CompileContext &cc, return nullptr; } + if (!cc.target_info.has_avx512vbmi()) { + DEBUG_PRINTF("Sheng32 failed, no HS_CPU_FEATURES_AVX512VBMI!\n"); + return nullptr; + } + sheng_build_strat strat(raw, rm, only_accel_init); dfa_info info(strat); @@ -767,6 +763,11 @@ bytecode_ptr sheng64Compile(raw_dfa &raw, const CompileContext &cc, return nullptr; } + if (!cc.target_info.has_avx512vbmi()) { + DEBUG_PRINTF("Sheng64 failed, no HS_CPU_FEATURES_AVX512VBMI!\n"); + return nullptr; + } + sheng_build_strat strat(raw, rm, only_accel_init); dfa_info info(strat); @@ -790,6 +791,5 @@ bytecode_ptr sheng64Compile(raw_dfa &raw, const CompileContext &cc, } return nfa; } -#endif } // namespace ue2 diff --git a/src/nfa/shengcompile.h b/src/nfa/shengcompile.h index 96688eef..256f4a4e 100644 --- a/src/nfa/shengcompile.h +++ b/src/nfa/shengcompile.h @@ -71,7 +71,6 @@ bytecode_ptr shengCompile(raw_dfa &raw, const CompileContext &cc, const ReportManager &rm, bool only_accel_init, std::set *accel_states = nullptr); -#if defined(HAVE_AVX512VBMI) bytecode_ptr sheng32Compile(raw_dfa &raw, const CompileContext &cc, const ReportManager &rm, bool only_accel_init, std::set *accel_states = nullptr); @@ -79,7 +78,6 @@ bytecode_ptr sheng32Compile(raw_dfa &raw, const CompileContext &cc, bytecode_ptr sheng64Compile(raw_dfa &raw, const CompileContext &cc, const ReportManager &rm, bool only_accel_init, std::set *accel_states = nullptr); -#endif struct sheng_escape_info { CharReach outs; diff --git a/src/nfa/shengdump.cpp b/src/nfa/shengdump.cpp index a81dc21a..6eb78407 100644 --- a/src/nfa/shengdump.cpp +++ b/src/nfa/shengdump.cpp @@ -64,7 +64,6 @@ const sstate_aux *get_aux(const NFA *n, dstate_id_t i) { return aux; } -#if defined(HAVE_AVX512VBMI) static const sstate_aux *get_aux32(const NFA *n, dstate_id_t i) { assert(n && isSheng32Type(n->type)); @@ -94,7 +93,6 @@ const sstate_aux *get_aux64(const NFA *n, dstate_id_t i) { return aux; } -#endif static void dumpHeader(FILE *f, const sheng *s) { @@ -111,7 +109,6 @@ void dumpHeader(FILE *f, const sheng *s) { !!(s->flags & SHENG_FLAG_SINGLE_REPORT)); } -#if defined(HAVE_AVX512VBMI) static void dumpHeader32(FILE *f, const sheng32 *s) { fprintf(f, "number of states: %u, DFA engine size: %u\n", s->n_states, @@ -141,7 +138,6 @@ void dumpHeader64(FILE *f, const sheng64 *s) { !!(s->flags & SHENG_FLAG_CAN_DIE), !!(s->flags & SHENG_FLAG_SINGLE_REPORT)); } -#endif static void dumpAux(FILE *f, u32 state, const sstate_aux *aux) { @@ -151,7 +147,6 @@ void dumpAux(FILE *f, u32 state, const sstate_aux *aux) { aux->top & SHENG_STATE_MASK); } -#if defined(HAVE_AVX512VBMI) static void dumpAux32(FILE *f, u32 state, const sstate_aux *aux) { fprintf(f, "state id: %u, reports offset: %u, EOD reports offset: %u, " @@ -167,7 +162,6 @@ void dumpAux64(FILE *f, u32 state, const sstate_aux *aux) { state, aux->accept, aux->accept_eod, aux->accel, aux->top & SHENG64_STATE_MASK); } -#endif static void dumpReports(FILE *f, const report_list *rl) { @@ -197,7 +191,6 @@ void dumpMasks(FILE *f, const sheng *s) { } } -#if defined(HAVE_AVX512VBMI) static void dumpMasks32(FILE *f, const sheng32 *s) { for (u32 chr = 0; chr < 256; chr++) { @@ -237,7 +230,6 @@ void dumpMasks64(FILE *f, const sheng64 *s) { fprintf(f, "\n"); } } -#endif static void nfaExecSheng_dumpText(const NFA *nfa, FILE *f) { @@ -277,7 +269,6 @@ void nfaExecSheng_dumpText(const NFA *nfa, FILE *f) { fprintf(f, "\n"); } -#if defined(HAVE_AVX512VBMI) static void nfaExecSheng32_dumpText(const NFA *nfa, FILE *f) { assert(nfa->type == SHENG_NFA_32); @@ -353,7 +344,6 @@ void nfaExecSheng64_dumpText(const NFA *nfa, FILE *f) { fprintf(f, "\n"); } -#endif static void dumpDotPreambleDfa(FILE *f) { @@ -401,7 +391,6 @@ void describeNode(const NFA *n, const sheng *s, u16 i, FILE *f) { } } -#if defined(HAVE_AVX512VBMI) template <> void describeNode(const NFA *n, const sheng32 *s, u16 i, FILE *f) { const sstate_aux *aux = get_aux32(n, i); @@ -461,7 +450,6 @@ void describeNode(const NFA *n, const sheng64 *s, u16 i, FILE *f) { fprintf(f, "STARTF -> %u [color = red ]\n", i); } } -#endif static void describeEdge(FILE *f, const u16 *t, u16 i) { @@ -514,7 +502,6 @@ void shengGetTransitions(const NFA *n, u16 state, u16 *t) { t[TOP] = aux->top & SHENG_STATE_MASK; } -#if defined(HAVE_AVX512VBMI) static void sheng32GetTransitions(const NFA *n, u16 state, u16 *t) { assert(isSheng32Type(n->type)); @@ -550,7 +537,6 @@ void sheng64GetTransitions(const NFA *n, u16 state, u16 *t) { t[TOP] = aux->top & SHENG64_STATE_MASK; } -#endif static void nfaExecSheng_dumpDot(const NFA *nfa, FILE *f) { @@ -572,7 +558,6 @@ void nfaExecSheng_dumpDot(const NFA *nfa, FILE *f) { fprintf(f, "}\n"); } -#if defined(HAVE_AVX512VBMI) static void nfaExecSheng32_dumpDot(const NFA *nfa, FILE *f) { assert(nfa->type == SHENG_NFA_32); @@ -612,7 +597,6 @@ void nfaExecSheng64_dumpDot(const NFA *nfa, FILE *f) { fprintf(f, "}\n"); } -#endif void nfaExecSheng_dump(const NFA *nfa, const string &base) { assert(nfa->type == SHENG_NFA); @@ -621,19 +605,15 @@ void nfaExecSheng_dump(const NFA *nfa, const string &base) { } void nfaExecSheng32_dump(UNUSED const NFA *nfa, UNUSED const string &base) { -#if defined(HAVE_AVX512VBMI) assert(nfa->type == SHENG_NFA_32); nfaExecSheng32_dumpText(nfa, StdioFile(base + ".txt", "w")); nfaExecSheng32_dumpDot(nfa, StdioFile(base + ".dot", "w")); -#endif } void nfaExecSheng64_dump(UNUSED const NFA *nfa, UNUSED const string &base) { -#if defined(HAVE_AVX512VBMI) assert(nfa->type == SHENG_NFA_64); nfaExecSheng64_dumpText(nfa, StdioFile(base + ".txt", "w")); nfaExecSheng64_dumpDot(nfa, StdioFile(base + ".dot", "w")); -#endif } } // namespace ue2 diff --git a/src/rose/rose_build_bytecode.cpp b/src/rose/rose_build_bytecode.cpp index 3b51daa2..f5f92e74 100644 --- a/src/rose/rose_build_bytecode.cpp +++ b/src/rose/rose_build_bytecode.cpp @@ -632,8 +632,6 @@ bytecode_ptr getDfa(raw_dfa &rdfa, bool is_transient, * bytecode and that they are usually run on small blocks */ dfa = mcshengCompile(rdfa, cc, rm); } - -#if defined(HAVE_AVX512VBMI) if (!dfa) { dfa = sheng32Compile(rdfa, cc, rm, false); } @@ -643,7 +641,6 @@ bytecode_ptr getDfa(raw_dfa &rdfa, bool is_transient, if (!dfa && !is_transient) { dfa = mcshengCompile64(rdfa, cc, rm); } -#endif if (!dfa) { // Sheng wasn't successful, so unleash McClellan! dfa = mcclellanCompile(rdfa, cc, rm, false); diff --git a/src/smallwrite/smallwrite_build.cpp b/src/smallwrite/smallwrite_build.cpp index 63a79aa0..4eb4801d 100644 --- a/src/smallwrite/smallwrite_build.cpp +++ b/src/smallwrite/smallwrite_build.cpp @@ -793,14 +793,12 @@ bytecode_ptr getDfa(raw_dfa &rdfa, const CompileContext &cc, bytecode_ptr dfa = nullptr; if (cc.grey.allowSmallWriteSheng) { dfa = shengCompile(rdfa, cc, rm, only_accel_init, &accel_states); -#if defined(HAVE_AVX512VBMI) if (!dfa) { dfa = sheng32Compile(rdfa, cc, rm, only_accel_init, &accel_states); } if (!dfa) { dfa = sheng64Compile(rdfa, cc, rm, only_accel_init, &accel_states); } -#endif } if (!dfa) { dfa = mcclellanCompile(rdfa, cc, rm, only_accel_init,