[PATCH v2 1/5] riscv: Checksum header
David Laight
David.Laight at ACULAB.COM
Sun Sep 10 14:20:33 PDT 2023
...
> > > +/*
> > > + * 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)
More information about the linux-riscv
mailing list