Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753300AbcC2CP6 (ORCPT ); Mon, 28 Mar 2016 22:15:58 -0400 Received: from mail-pf0-f193.google.com ([209.85.192.193]:34710 "EHLO mail-pf0-f193.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751322AbcC2CPz (ORCPT ); Mon, 28 Mar 2016 22:15:55 -0400 Subject: Re: [PATCH 07/31] Add mips-specific parity functions To: David Daney References: <1458788612-4367-1-git-send-email-zhaoxiu.zeng@gmail.com> <56F7785F.1090101@gmail.com> <56F968EE.1000307@gmail.com> Cc: Ralf Baechle , Leonid Yegoshin , "Maciej W. Rozycki" , linux-kernel@vger.kernel.org, linux-mips@linux-mips.org From: Zeng Zhaoxiu Message-ID: <56F9E554.8090204@gmail.com> Date: Tue, 29 Mar 2016 10:15:48 +0800 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Thunderbird/38.6.0 MIME-Version: 1.0 In-Reply-To: <56F968EE.1000307@gmail.com> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 3062 Lines: 113 在 2016年03月29日 01:25, David Daney 写道: > On 03/26/2016 11:06 PM, zhaoxiu.zeng wrote: >> From: Zeng Zhaoxiu >> > > There is nothing MIPS specific here. Why not put it in asm-generic or > some similar place where it can be shared by all architectures? > > Also, are you sure __builtin_popcount() is available on all GCC > versions that are supported for building the kernel? > > David Daney > Refrence to arch_hweight.h. In the 68th line of arch/mips/include/asm/mach-cavium-octeon/cpu-feature-overrides.h, we can see: #ifdef __OCTEON__ /* * All gcc versions that have OCTEON support define __OCTEON__ and have the * __builtin_popcount support. */ #define ARCH_HAS_USABLE_BUILTIN_POPCOUNT 1 #endif /* * All gcc versions that have OCTEON support define __OCTEON__ and have the * __builtin_popcount support. */ >> Signed-off-by: Zeng Zhaoxiu >> --- >> arch/mips/include/asm/arch_parity.h | 44 >> +++++++++++++++++++++++++++++++++++++ >> arch/mips/include/asm/bitops.h | 3 +++ >> 2 files changed, 47 insertions(+) >> create mode 100644 arch/mips/include/asm/arch_parity.h >> >> diff --git a/arch/mips/include/asm/arch_parity.h >> b/arch/mips/include/asm/arch_parity.h >> new file mode 100644 >> index 0000000..23b3c23 >> --- /dev/null >> +++ b/arch/mips/include/asm/arch_parity.h >> @@ -0,0 +1,44 @@ >> +/* >> + * This file is subject to the terms and conditions of the GNU >> General Public >> + * License. See the file "COPYING" in the main directory of this >> archive >> + * for more details. >> + * >> + */ >> +#ifndef _ASM_ARCH_PARITY_H >> +#define _ASM_ARCH_PARITY_H >> + >> +#ifdef ARCH_HAS_USABLE_BUILTIN_POPCOUNT >> + >> +#include >> + >> +static inline unsigned int __arch_parity32(unsigned int w) >> +{ >> + return __builtin_popcount(w) & 1; >> +} >> + >> +static inline unsigned int __arch_parity16(unsigned int w) >> +{ >> + return __arch_parity32(w & 0xffff); >> +} >> + >> +static inline unsigned int __arch_parity8(unsigned int w) >> +{ >> + return __arch_parity32(w & 0xff); >> +} >> + >> +static inline unsigned int __arch_parity4(unsigned int w) >> +{ >> + return __arch_parity32(w & 0xf); >> +} >> + >> +static inline unsigned int __arch_parity64(__u64 w) >> +{ >> + return (unsigned int)__builtin_popcountll(w) & 1; >> +} >> + >> +#else >> +#include >> +#include >> +#endif >> + >> +#endif /* _ASM_ARCH_PARITY_H */ >> diff --git a/arch/mips/include/asm/bitops.h >> b/arch/mips/include/asm/bitops.h >> index ce9666c..0b87734 100644 >> --- a/arch/mips/include/asm/bitops.h >> +++ b/arch/mips/include/asm/bitops.h >> @@ -626,6 +626,9 @@ static inline int ffs(int word) >> #include >> #include >> >> +#include >> +#include >> + >> #include >> #include >> >> >