[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID: <063D6719AE5E284EB5DD2968C1650D6D45EB06@AcuExch.aculab.com>
Date: Fri, 17 Jan 2014 10:05:37 +0000
From: David Laight <David.Laight@...LAB.COM>
To: 'Hannes Frederic Sowa' <hannes@...essinduktion.org>,
Christoph Lameter <cl@...ux.com>
CC: Daniel Borkmann <dborkman@...hat.com>,
"davem@...emloft.net" <davem@...emloft.net>,
"netdev@...r.kernel.org" <netdev@...r.kernel.org>,
"linux-kernel@...r.kernel.org" <linux-kernel@...r.kernel.org>,
Eric Dumazet <eric.dumazet@...il.com>,
Austin S Hemmelgarn <ahferroin7@...il.com>,
"Jesse Gross" <jesse@...ira.com>,
Jamal Hadi Salim <jhs@...atatu.com>,
"Stephen Hemminger" <stephen@...workplumber.org>,
Matt Mackall <mpm@...enic.com>,
"Pekka Enberg" <penberg@...nel.org>,
Andy Gospodarek <andy@...yhouse.net>,
"Veaceslav Falico" <vfalico@...hat.com>,
Jay Vosburgh <fubar@...ibm.com>,
Jakub Zawadzki <darkjames-ws@...kjames.pl>
Subject: RE: [PATCH net-next 2/2] reciprocal_divide: correction/update of
the algorithm
From: Hannes Frederic Sowa
> On Thu, Jan 16, 2014 at 10:37:37AM -0600, Christoph Lameter wrote:
> > On Thu, 16 Jan 2014, Daniel Borkmann wrote:
> >
> > > - * or else the performance is slower than a normal divide.
> > > - */
> > > -extern u32 reciprocal_value(u32 B);
> > > +struct reciprocal_value {
> > > + u32 m;
> > > + u8 sh1, sh2;
> > > +};
> > >
> > > +#define RECIPROCAL_VALUE_RESULT_TO_ZERO ((struct reciprocal_value){.sh1 = 32})
> > >
> > > -static inline u32 reciprocal_divide(u32 A, u32 R)
> > > +struct reciprocal_value reciprocal_value(u32 d);
> >
> > A function that returns a struct? That works? Which gcc versions support
> > it?
>
> Sure, that works and I actually like it. This is supported by the c standard,
> but please don't ask me since which one. ;)
I think it has always been supported.
Originally by adding an extra hidden argument that points to an on-stack
structure.
More recent ABI tend to allow 'small' structures be returned in registers.
(Typically ones that would fit in the register(s) used for an integral result).
This doesn't mean that it is a good idea!
OTOH if the function is 'static inline' (and inlined) it probably doesn't matter.
David
Powered by blists - more mailing lists