From: Konstantin Ananyev Date: Fri, 21 May 2021 14:42:07 +0000 (+0100) Subject: acl: fix build with GCC 6.3 X-Git-Url: http://git.droids-corp.org/?a=commitdiff_plain;h=b3b36f0fbf1fd68980afce10300f1b8831607324;p=dpdk.git acl: fix build with GCC 6.3 --buildtype=debug with gcc 6.3 produces the following error: ../lib/librte_acl/acl_run_avx512_common.h: In function ‘resolve_match_idx_avx512x16’: ../lib/librte_acl/acl_run_avx512x16.h:33:18: error: the last argument must be an 8-bit immediate ^ ../lib/librte_acl/acl_run_avx512_common.h:373:9: note: in expansion of macro ‘_M_I_’ return _M_I_(slli_epi32)(mi, match_log); ^~~~~ Seems like gcc-6.3 complains about the following construct: static const uint32_t match_log = 5; ... _mm512_slli_epi32(mi, match_log); It can't substitute constant variable 'match_log' with its actual value. The fix replaces constant variable with its immediate value. Bugzilla ID: 717 Fixes: b64c2295f7fc ("acl: add 256-bit AVX512 classify method") Fixes: 45da22e42ec3 ("acl: add 512-bit AVX512 classify method") Cc: stable@dpdk.org Reported-by: Liang Ma Signed-off-by: Konstantin Ananyev --- diff --git a/lib/acl/acl_run_avx512.c b/lib/acl/acl_run_avx512.c index 3fd1e33c3f..78fbe34f7c 100644 --- a/lib/acl/acl_run_avx512.c +++ b/lib/acl/acl_run_avx512.c @@ -4,8 +4,8 @@ #include "acl_run_sse.h" -/*sizeof(uint32_t) << match_log == sizeof(struct rte_acl_match_results)*/ -static const uint32_t match_log = 5; +/*sizeof(uint32_t) << ACL_MATCH_LOG == sizeof(struct rte_acl_match_results)*/ +#define ACL_MATCH_LOG 5 struct acl_flow_avx512 { uint32_t num_packets; /* number of packets processed */ @@ -82,7 +82,7 @@ resolve_mcle8_avx512x1(uint32_t result[], for (k = 0; k != nb_pkt; k++, result += nb_cat) { - mi = match[k] << match_log; + mi = match[k] << ACL_MATCH_LOG; for (j = 0; j != nb_cat; j += RTE_ACL_RESULTS_MULTIPLIER) { @@ -92,7 +92,7 @@ resolve_mcle8_avx512x1(uint32_t result[], for (i = 1, pm = match + nb_pkt; i != nb_trie; i++, pm += nb_pkt) { - mn = j + (pm[k] << match_log); + mn = j + (pm[k] << ACL_MATCH_LOG); nr = _mm_loadu_si128((const xmm_t *)(res + mn)); np = _mm_loadu_si128((const xmm_t *)(pri + mn)); diff --git a/lib/acl/acl_run_avx512_common.h b/lib/acl/acl_run_avx512_common.h index fbad74d459..578eaa1d0c 100644 --- a/lib/acl/acl_run_avx512_common.h +++ b/lib/acl/acl_run_avx512_common.h @@ -393,8 +393,8 @@ static inline _T_simd _F_(resolve_match_idx)(_T_simd mi) { RTE_BUILD_BUG_ON(sizeof(struct rte_acl_match_results) != - 1 << (match_log + 2)); - return _M_I_(slli_epi32)(mi, match_log); + 1 << (ACL_MATCH_LOG + 2)); + return _M_I_(slli_epi32)(mi, ACL_MATCH_LOG); } /* diff --git a/lib/acl/acl_run_avx512x16.h b/lib/acl/acl_run_avx512x16.h index da244bc257..48bb6fed85 100644 --- a/lib/acl/acl_run_avx512x16.h +++ b/lib/acl/acl_run_avx512x16.h @@ -252,8 +252,6 @@ resolve_mcgt8_avx512x1(uint32_t result[], __mmask16 cm, sm; __m512i cp, cr, np, nr; - const uint32_t match_log = 5; - res = pr->results; pri = pr->priority; @@ -261,7 +259,7 @@ resolve_mcgt8_avx512x1(uint32_t result[], for (k = 0; k != nb_pkt; k++, result += nb_cat) { - mi = match[k] << match_log; + mi = match[k] << ACL_MATCH_LOG; cr = _mm512_maskz_loadu_epi32(cm, res + mi); cp = _mm512_maskz_loadu_epi32(cm, pri + mi); @@ -269,7 +267,7 @@ resolve_mcgt8_avx512x1(uint32_t result[], for (i = 1, pm = match + nb_pkt; i != nb_trie; i++, pm += nb_pkt) { - mi = pm[k] << match_log; + mi = pm[k] << ACL_MATCH_LOG; nr = _mm512_maskz_loadu_epi32(cm, res + mi); np = _mm512_maskz_loadu_epi32(cm, pri + mi);