From patchwork Thu Mar 28 16:14:05 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tyler Retzlaff X-Patchwork-Id: 138962 X-Patchwork-Delegate: thomas@monjalon.net Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 9114D43D6D; Thu, 28 Mar 2024 17:14:14 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 7E734410FC; Thu, 28 Mar 2024 17:14:11 +0100 (CET) Received: from linux.microsoft.com (linux.microsoft.com [13.77.154.182]) by mails.dpdk.org (Postfix) with ESMTP id 9F871410D5 for ; Thu, 28 Mar 2024 17:14:09 +0100 (CET) Received: by linux.microsoft.com (Postfix, from userid 1086) id A320320E6AF0; Thu, 28 Mar 2024 09:14:08 -0700 (PDT) DKIM-Filter: OpenDKIM Filter v2.11.0 linux.microsoft.com A320320E6AF0 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.microsoft.com; s=default; t=1711642448; bh=lVLoU4MPmGkdlW7usTyVPOCZUno/4Ps5zi+8f1uSMMw=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=YUfAcquH5FzIOmgmwZcn/pjXPzqD2MnSiawkkbCD1U84STyKH/MBWRbcqzrTukMe2 Y4PAYQ7VRkWNZdh2RBoBp4ttzkwd3x3CE9weLEfZUkOVNF6DN8IEhkgp5IP5WptLVT rKQzNpkAoDuQsYrxCiV6iglMGUapOT9iI9kqLXIg= From: Tyler Retzlaff To: dev@dpdk.org Cc: Bruce Richardson , Jasvinder Singh , Konstantin Ananyev , Tyler Retzlaff Subject: [PATCH v2 1/2] eal: include header for MSVC SIMD intrinsics Date: Thu, 28 Mar 2024 09:14:05 -0700 Message-Id: <1711642446-6880-2-git-send-email-roretzla@linux.microsoft.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1711642446-6880-1-git-send-email-roretzla@linux.microsoft.com> References: <1710969121-18503-1-git-send-email-roretzla@linux.microsoft.com> <1711642446-6880-1-git-send-email-roretzla@linux.microsoft.com> 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 MSVC documents that you use the monolithic intrin.h for all intrinsics (including SIMD intrinsics) include intrin.h into rte_vec.h when building with MSVC so we don't have to duplicate conditionally compile include it across the DPDK source. Signed-off-by: Tyler Retzlaff Acked-by: Bruce Richardson --- lib/eal/include/generic/rte_vect.h | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/lib/eal/include/generic/rte_vect.h b/lib/eal/include/generic/rte_vect.h index 6540419..1f84292 100644 --- a/lib/eal/include/generic/rte_vect.h +++ b/lib/eal/include/generic/rte_vect.h @@ -15,7 +15,11 @@ #include -#ifndef RTE_TOOLCHAIN_MSVC +#ifdef RTE_TOOLCHAIN_MSVC + +#include + +#else /* Unsigned vector types */ From patchwork Thu Mar 28 16:14:06 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tyler Retzlaff X-Patchwork-Id: 138963 X-Patchwork-Delegate: thomas@monjalon.net Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 6B6BE43D6D; Thu, 28 Mar 2024 17:14:20 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id B6A6841144; Thu, 28 Mar 2024 17:14:12 +0100 (CET) Received: from linux.microsoft.com (linux.microsoft.com [13.77.154.182]) by mails.dpdk.org (Postfix) with ESMTP id 8057E402E7 for ; Thu, 28 Mar 2024 17:14:09 +0100 (CET) Received: by linux.microsoft.com (Postfix, from userid 1086) id B03BE20E6AF2; Thu, 28 Mar 2024 09:14:08 -0700 (PDT) DKIM-Filter: OpenDKIM Filter v2.11.0 linux.microsoft.com B03BE20E6AF2 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.microsoft.com; s=default; t=1711642448; bh=WeABwgMf57lNfLc0pZ3X9gqVhKEyKqKD63ATchDdl1w=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=UDdRti3e22ftW0IZxoeql82rsNm57pJpMTMitM230gEOwjuz2/Yk12nEtLPtcBSWh Tm1QF0m4kTs7PD1n1BGoVKMrk0DQvO52dsp5/yIcrqULiLIQn+2BH+VMYeBlznqEXJ LsIbjRigXgFQTGl+CPQ/xlKvR/bob6JIm8U+Fsyo= From: Tyler Retzlaff To: dev@dpdk.org Cc: Bruce Richardson , Jasvinder Singh , Konstantin Ananyev , Tyler Retzlaff Subject: [PATCH v2 2/2] net: stop using mmx intrinsics Date: Thu, 28 Mar 2024 09:14:06 -0700 Message-Id: <1711642446-6880-3-git-send-email-roretzla@linux.microsoft.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1711642446-6880-1-git-send-email-roretzla@linux.microsoft.com> References: <1710969121-18503-1-git-send-email-roretzla@linux.microsoft.com> <1711642446-6880-1-git-send-email-roretzla@linux.microsoft.com> 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 Update code to use only avx/sse intrinsics as mmx is not supported on MSVC. Signed-off-by: Tyler Retzlaff Acked-by: Bruce Richardson --- lib/net/net_crc_avx512.c | 27 +++++++-------------------- lib/net/net_crc_sse.c | 27 +++++++-------------------- 2 files changed, 14 insertions(+), 40 deletions(-) diff --git a/lib/net/net_crc_avx512.c b/lib/net/net_crc_avx512.c index 0f0dee4..d18eb96 100644 --- a/lib/net/net_crc_avx512.c +++ b/lib/net/net_crc_avx512.c @@ -5,11 +5,10 @@ #include #include +#include #include "net_crc.h" -#include - /* VPCLMULQDQ CRC computation context structure */ struct crc_vpclmulqdq_ctx { __m512i rk1_rk2; @@ -331,13 +330,10 @@ static const alignas(16) uint32_t mask2[4] = { c9, c10, c11); crc32_eth.fold_3x128b = _mm512_setr_epi64(c12, c13, c14, c15, c16, c17, 0, 0); - crc32_eth.fold_1x128b = _mm_setr_epi64(_mm_cvtsi64_m64(c16), - _mm_cvtsi64_m64(c17)); + crc32_eth.fold_1x128b = _mm_set_epi64x(c17, c16); - crc32_eth.rk5_rk6 = _mm_setr_epi64(_mm_cvtsi64_m64(c18), - _mm_cvtsi64_m64(c19)); - crc32_eth.rk7_rk8 = _mm_setr_epi64(_mm_cvtsi64_m64(c20), - _mm_cvtsi64_m64(c21)); + crc32_eth.rk5_rk6 = _mm_set_epi64x(c19, c18); + crc32_eth.rk7_rk8 = _mm_set_epi64x(c21, c20); } static void @@ -378,13 +374,10 @@ static const alignas(16) uint32_t mask2[4] = { c9, c10, c11); crc16_ccitt.fold_3x128b = _mm512_setr_epi64(c12, c13, c14, c15, c16, c17, 0, 0); - crc16_ccitt.fold_1x128b = _mm_setr_epi64(_mm_cvtsi64_m64(c16), - _mm_cvtsi64_m64(c17)); + crc16_ccitt.fold_1x128b = _mm_set_epi64x(c17, c16); - crc16_ccitt.rk5_rk6 = _mm_setr_epi64(_mm_cvtsi64_m64(c18), - _mm_cvtsi64_m64(c19)); - crc16_ccitt.rk7_rk8 = _mm_setr_epi64(_mm_cvtsi64_m64(c20), - _mm_cvtsi64_m64(c21)); + crc16_ccitt.rk5_rk6 = _mm_set_epi64x(c19, c18); + crc16_ccitt.rk7_rk8 = _mm_set_epi64x(c21, c20); } void @@ -392,12 +385,6 @@ static const alignas(16) uint32_t mask2[4] = { { crc32_load_init_constants(); crc16_load_init_constants(); - - /* - * Reset the register as following calculation may - * use other data types such as float, double, etc. - */ - _mm_empty(); } uint32_t diff --git a/lib/net/net_crc_sse.c b/lib/net/net_crc_sse.c index d673ae3..112dc94 100644 --- a/lib/net/net_crc_sse.c +++ b/lib/net/net_crc_sse.c @@ -6,12 +6,11 @@ #include #include +#include #include #include "net_crc.h" -#include - /** PCLMULQDQ CRC computation context structure */ struct crc_pclmulqdq_ctx { __m128i rk1_rk2; @@ -272,12 +271,9 @@ static const alignas(16) uint8_t crc_xmm_shift_tab[48] = { p = 0x10811LLU; /** Save the params in context structure */ - crc16_ccitt_pclmulqdq.rk1_rk2 = - _mm_setr_epi64(_mm_cvtsi64_m64(k1), _mm_cvtsi64_m64(k2)); - crc16_ccitt_pclmulqdq.rk5_rk6 = - _mm_setr_epi64(_mm_cvtsi64_m64(k5), _mm_cvtsi64_m64(k6)); - crc16_ccitt_pclmulqdq.rk7_rk8 = - _mm_setr_epi64(_mm_cvtsi64_m64(q), _mm_cvtsi64_m64(p)); + crc16_ccitt_pclmulqdq.rk1_rk2 = _mm_set_epi64x(k2, k1); + crc16_ccitt_pclmulqdq.rk5_rk6 = _mm_set_epi64x(k6, k5); + crc16_ccitt_pclmulqdq.rk7_rk8 = _mm_set_epi64x(p, q); /** Initialize CRC32 data */ k1 = 0xccaa009eLLU; @@ -288,18 +284,9 @@ static const alignas(16) uint8_t crc_xmm_shift_tab[48] = { p = 0x1db710641LLU; /** Save the params in context structure */ - crc32_eth_pclmulqdq.rk1_rk2 = - _mm_setr_epi64(_mm_cvtsi64_m64(k1), _mm_cvtsi64_m64(k2)); - crc32_eth_pclmulqdq.rk5_rk6 = - _mm_setr_epi64(_mm_cvtsi64_m64(k5), _mm_cvtsi64_m64(k6)); - crc32_eth_pclmulqdq.rk7_rk8 = - _mm_setr_epi64(_mm_cvtsi64_m64(q), _mm_cvtsi64_m64(p)); - - /** - * Reset the register as following calculation may - * use other data types such as float, double, etc. - */ - _mm_empty(); + crc32_eth_pclmulqdq.rk1_rk2 = _mm_set_epi64x(k2, k1); + crc32_eth_pclmulqdq.rk5_rk6 = _mm_set_epi64x(k6, k5); + crc32_eth_pclmulqdq.rk7_rk8 = _mm_set_epi64x(p, q); } uint32_t