From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mailhub1.si.c-s.fr (pegase1.c-s.fr [93.17.236.30]) by lists.ozlabs.org (Postfix) with ESMTP id C69901A0BEF for ; Wed, 29 Apr 2015 05:01:30 +1000 (AEST) Message-ID: <553FD904.8000309@c-s.fr> Date: Tue, 28 Apr 2015 21:01:24 +0200 From: christophe leroy MIME-Version: 1.0 To: Scott Wood Subject: Re: [v2,2/2] powerpc32: add support for csum_add() References: <20150203113927.8604D1A5F14@localhost.localdomain> <20150325013023.GA7588@home.buserror.net> In-Reply-To: <20150325013023.GA7588@home.buserror.net> Content-Type: multipart/alternative; boundary="------------010106020304040902090708" Cc: Paul Mackerras , linuxppc-dev@lists.ozlabs.org, linux-kernel@vger.kernel.org List-Id: Linux on PowerPC Developers Mail List List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , This is a multi-part message in MIME format. --------------010106020304040902090708 Content-Type: text/plain; charset=windows-1252; format=flowed Content-Transfer-Encoding: 8bit Le 25/03/2015 02:30, Scott Wood a écrit : > On Tue, Feb 03, 2015 at 12:39:27PM +0100, LEROY Christophe wrote: >> The C version of csum_add() as defined in include/net/checksum.h gives the >> following assembly: >> 0: 7c 04 1a 14 add r0,r4,r3 >> 4: 7c 64 00 10 subfc r3,r4,r0 >> 8: 7c 63 19 10 subfe r3,r3,r3 >> c: 7c 63 00 50 subf r3,r3,r0 >> >> include/net/checksum.h also offers the possibility to define an arch specific >> function. >> This patch provides a ppc32 specific csum_add() inline function. > What makes it 32-bit specific? > > As far as I understand, the 64-bit will do a 64 bit addition, so we will have to handle differently the carry, can't just be an addze like in 32-bit. The generated code is most likely different on ppc64. I have no ppc64 compiler so I can't check what gcc generates for the following code: |__wsumcsum_add(__wsum csum, __wsum addend) { u32 res= (__force u32)csum; res+= (__force u32)addend; return (__force __wsum)(res+ (res< (__force u32)addend)); }| Can someone with a ppc64 compiler tell what we get ? Christophe --- L'absence de virus dans ce courrier électronique a été vérifiée par le logiciel antivirus Avast. http://www.avast.com --------------010106020304040902090708 Content-Type: text/html; charset=windows-1252 Content-Transfer-Encoding: 8bit

Le 25/03/2015 02:30, Scott Wood a écrit :
On Tue, Feb 03, 2015 at 12:39:27PM +0100, LEROY Christophe wrote:
The C version of csum_add() as defined in include/net/checksum.h gives the
following assembly:
       0:       7c 04 1a 14     add     r0,r4,r3
       4:       7c 64 00 10     subfc   r3,r4,r0
       8:       7c 63 19 10     subfe   r3,r3,r3
       c:       7c 63 00 50     subf    r3,r3,r0

include/net/checksum.h also offers the possibility to define an arch specific
function.
This patch provides a ppc32 specific csum_add() inline function.
What makes it 32-bit specific?


As far as I understand, the 64-bit will do a 64 bit addition, so we will have to handle differently the carry, can't just be an addze like in 32-bit.

The generated code is most likely different on ppc64. I have no ppc64 compiler so I can't check what gcc generates for the following code:

__wsum csum_add(__wsum csum, __wsum addend)
{
	u32 res = (__force u32)csum;
	res += (__force u32)addend;
	return (__force __wsum)(res + (res < (__force u32)addend));
}

Can someone with a ppc64 compiler tell what we get ?

Christophe



Avast logo

L'absence de virus dans ce courrier électronique a été vérifiée par le logiciel antivirus Avast.
www.avast.com


--------------010106020304040902090708--