From mboxrd@z Thu Jan 1 00:00:00 1970 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) Received: from orsmga003.jf.intel.com ([10.7.209.27]) by fmsmga102.fm.intel.com with ESMTP; 04 Feb 2016 01:16:49 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.22,393,1449561600"; d="scan'208";a="740349599" Received: from unknown (HELO dpdk5.sh.intel.com) ([10.239.129.244]) by orsmga003.jf.intel.com with ESMTP; 04 Feb 2016 01:16:47 -0800 From: Zhihong Wang To: dev@dpdk.org Date: Wed, 3 Feb 2016 21:12:34 -0500 Message-Id: <1454551954-45356-1-git-send-email-zhihong.wang@intel.com> X-Mailer: git-send-email 2.5.0 Subject: [dpdk-dev] [PATCH] eal/x86: Fix build with clang for old AVX X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: patches and discussions about DPDK List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 04 Feb 2016 09:16:50 -0000 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