From mboxrd@z Thu Jan 1 00:00:00 1970 From: Zhihong Wang Subject: [PATCH] eal/x86: Fix build with clang for old AVX Date: Wed, 3 Feb 2016 21:12:34 -0500 Message-ID: <1454551954-45356-1-git-send-email-zhihong.wang@intel.com> To: dev@dpdk.org Return-path: Received: from mga11.intel.com (mga11.intel.com [192.55.52.93]) by dpdk.org (Postfix) with ESMTP id E773D56B7 for ; Thu, 4 Feb 2016 10:16:49 +0100 (CET) List-Id: patches and discussions about DPDK List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" When configuring RTE_MACHINE to "default", rte_memcpy implementation is the default one (old AVX). In this code, clang raises a warning thanks to -Wsometimes-uninitialized: rte_memcpy.h:838:6: error: variable 'srcofs' is used uninitialized whenever 'if' condition is false if (dstofss > 0) { ^~~~~~~~~~~ rte_memcpy.h:849:6: note: uninitialized use occurs here if (srcofs == 0) { ^~~~~~ It is fixed by moving srcofs initialization out of the condition. Also dstofss calculation is corrected. Fixes: 1ae817f9f887 ("eal/x86: tune memcpy for platforms without AVX512") Signed-off-by: Zhihong Wang Reported-by: De Lara Guarch, Pablo --- lib/librte_eal/common/include/arch/x86/rte_memcpy.h | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/lib/librte_eal/common/include/arch/x86/rte_memcpy.h b/lib/librte_eal/common/include/arch/x86/rte_memcpy.h index 8e2c53c..f463ab3 100644 --- a/lib/librte_eal/common/include/arch/x86/rte_memcpy.h +++ b/lib/librte_eal/common/include/arch/x86/rte_memcpy.h @@ -512,8 +512,9 @@ COPY_BLOCK_64_BACK31: /** * Make store aligned when copy size exceeds 512 bytes */ - dstofss = 32 - ((uintptr_t)dst & 0x1F); + dstofss = (uintptr_t)dst & 0x1F; if (dstofss > 0) { + dstofss = 32 - dstofss; n -= dstofss; rte_mov32((uint8_t *)dst, (const uint8_t *)src); src = (const uint8_t *)src + dstofss; @@ -834,14 +835,15 @@ COPY_BLOCK_64_BACK15: * unaligned copy functions require up to 15 bytes * backwards access. */ - dstofss = 16 - ((uintptr_t)dst & 0x0F) + 16; + dstofss = (uintptr_t)dst & 0x0F; if (dstofss > 0) { + dstofss = 16 - dstofss + 16; n -= dstofss; rte_mov32((uint8_t *)dst, (const uint8_t *)src); src = (const uint8_t *)src + dstofss; dst = (uint8_t *)dst + dstofss; - srcofs = ((uintptr_t)src & 0x0F); } + srcofs = ((uintptr_t)src & 0x0F); /** * For aligned copy -- 2.5.0