From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 4E91DA0A02; Fri, 21 May 2021 16:42:23 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id B5E5040686; Fri, 21 May 2021 16:42:22 +0200 (CEST) Received: from mga14.intel.com (mga14.intel.com [192.55.52.115]) by mails.dpdk.org (Postfix) with ESMTP id 6B7B440143; Fri, 21 May 2021 16:42:19 +0200 (CEST) IronPort-SDR: ghVTCTAt9e6urRvijvr+bFBDvY5/lluXBUcMSYVNf6gbA0kg0eMWrm0d3mwDZpccOqlY404de7 KtFoh+/eul5A== X-IronPort-AV: E=McAfee;i="6200,9189,9990"; a="201207935" X-IronPort-AV: E=Sophos;i="5.82,319,1613462400"; d="scan'208";a="201207935" Received: from fmsmga005.fm.intel.com ([10.253.24.32]) by fmsmga103.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 21 May 2021 07:42:18 -0700 IronPort-SDR: Mmo0Ir33U9WCorXcb/okH6RTJt3dxpnlMZtAmu0dd6pD/vAiXHM/46oIsp7QxPaB/eFANnnJR8 gIl5gecbQRgw== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.82,319,1613462400"; d="scan'208";a="631831502" Received: from sivswdev08.ir.intel.com ([10.237.217.47]) by fmsmga005.fm.intel.com with ESMTP; 21 May 2021 07:42:17 -0700 From: Konstantin Ananyev To: dev@dpdk.org Cc: liangma@liangbit.com, Konstantin Ananyev , stable@dpdk.org Date: Fri, 21 May 2021 15:42:07 +0100 Message-Id: <20210521144207.13802-1-konstantin.ananyev@intel.com> X-Mailer: git-send-email 2.18.0 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Subject: [dpdk-dev] [PATCH] acl: fix build with GCC 6.3 X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" --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 --- lib/acl/acl_run_avx512.c | 8 ++++---- lib/acl/acl_run_avx512_common.h | 4 ++-- lib/acl/acl_run_avx512x16.h | 6 ++---- 3 files changed, 8 insertions(+), 10 deletions(-) diff --git a/lib/acl/acl_run_avx512.c b/lib/acl/acl_run_avx512.c index 3fd1e33c3..78fbe34f7 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 fbad74d45..578eaa1d0 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 da244bc25..48bb6fed8 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); -- 2.25.1