[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <cec0f23506a54b9aaaef054ea949e4aa@AcuMS.aculab.com>
Date: Sun, 10 Sep 2023 21:20:33 +0000
From: David Laight <David.Laight@...LAB.COM>
To: 'Charlie Jenkins' <charlie@...osinc.com>,
Conor Dooley <conor@...nel.org>
CC: Palmer Dabbelt <palmer@...belt.com>,
Samuel Holland <samuel.holland@...ive.com>,
"linux-riscv@...ts.infradead.org" <linux-riscv@...ts.infradead.org>,
"linux-kernel@...r.kernel.org" <linux-kernel@...r.kernel.org>,
Paul Walmsley <paul.walmsley@...ive.com>,
Albert Ou <aou@...s.berkeley.edu>
Subject: RE: [PATCH v2 1/5] riscv: Checksum header
...
> > > +/*
> > > + * Fold a partial checksum without adding pseudo headers
> > > + */
> > > +static inline __sum16 csum_fold(__wsum sum)
> > > +{
> > > + sum += (sum >> 16) | (sum << 16);
> > > + return (__force __sum16)(~(sum >> 16));
> > > +}
I'm intrigued, gcc normally compiler that quite well.
The very similar (from arch/arc):
return (~sum - rol32(sum, 16)) >> 16;
is slightly better on most architectures.
(Especially if the ~sum and rol() can be executed together.)
The only odd archs I saw were sparc32 (carry flag bug no rotate)
and arm (barrel shifter on all instructions).
It is better than the current asm for a lot of archs including x64.
David
-
Registered Address Lakeside, Bramley Road, Mount Farm, Milton Keynes, MK1 1PT, UK
Registration No: 1397386 (Wales)
Powered by blists - more mailing lists